Outb ser ut til å være en funksjonsinnkapsling for bare en monteringskommando over den samme betegnelsen som brukes til å kommunisere med port-kartlagte periferiutstyr, for eksempel skrivemaskinen på IBM PC-kompatible systemer, som bruker I/O-adresseområdet 0x60-0x6F. Innenfor denne artikkelen vil vi diskutere bruken av Outb () C -funksjonen mens vi bruker Ubuntu 20.04 Linux operativsystem. For å forstå arbeidet med Outb () -funksjonen, må du se på den post-kartlagte I/O først.”
Hva er port-kartlagt I/O?
Memory-Mapped og Port-Mapped I/O er de to vanlige måtene som datamaskinbrikker lenker til eksterne enheter. Likevel ser alle tilnærminger ut til å være likeverdige når det gjelder periferien. Port kartlagt I/O er tilgjengelig via et spesifikt sett med CPU -kommandoer og et distinkt, spesialisert adresseom. Kommandoene inn og ut kan sees på Intel Computer Processors.
For å gi I/O -enheter en annen adresseplass fra vanlig lagring, ble enten en ekstra "I/O" -pinne lagt til tilgangspunktet til CPU, eller en hel buss ble satt av til I/O. Det er en CPU-til-perifert kommunikasjonsteknikk som brukes når det kreves unike kommandoer fordi prosessoren må kommunisere med RAM og periferiutstyr. Dette blir ofte referert til som isolert I/O siden adressen for I/O er atskilt fra den for primærlagring. Den alternative og mest populære måten for tiden er minnekartlagt I/O, der det ikke kreves ekstra kommandoer siden alt deler samme adresseplass. Kartlagt til minnet I/O er tilgjengelig på nesten samme måte som programminne og/eller brukerminne siden det trekkes inn i samme adresseområde.
Portinngang og utgangsoperasjoner på lavt nivå håndteres av denne gruppen av POSIX-metoder. Prosedyrene for B-Suffix er bytebredde, W-Suffix-metodene er ordbreddeprosedyrer, og _P-SUFFIX-metodene forsinker til I/O er ferdig. Out* -operasjonene utfører portutgang, mens IN* -prosessene gjør portinngang. Selv om de fremdeles kan brukes i brukermodus, er de generelt designet for indre kjernebruk.
#inkludereVi må bruke O, O2 eller en tilsvarende kompilator. Fordi metodene er spesifisert som inline makroer, kan problematiske referanser for tilkoblingstid resultere hvis optimalisering ikke er aktivert. For å instruere kjernen om å la brukermodusprogrammet bruke de berørte I/O-portene, kan du bruke ioperm (2) eller, valgfritt, IOPL (2) -kommandoene. Hvis du ikke utfører dette, vil programmet få en segmenteringsfeil. Maskinvarespesifikke funksjoner som Outb () og ledsagere i motsetning til hvordan de fleste DOS-systemer fungerer, er verdiparameteren først gitt, og portparameteren følger.
Eksempel
La oss se på bruken av Outb () -funksjonen i C -programmet. Dette programmet vil være en liten demonstrasjon av hvordan vi kan bruke det i hvilken som helst C -programkode uten å se på utdataene, i.e., Det meste av tiden vil det ikke sende ut slik vi vil. Så vi må lage en C -fil i vårt Linux -operativsystem først. Åpne skallterminalen via bruk av “Ctrl+Alt+T”.
Etter det, bruk Linuxs berøringsinstruksjon sammen med navnet på en fil “Outb.C ”som skal opprettes med“.C ”forlengelse på slutten. Denne filen finner du i den gjeldende arbeidskatalogen til Linux -systemet ditt, i.e., "hjem". Åpne filutforskeren og dobbeltkaps på filen for å åpne den.
Den tomme filen vil bli åpnet på skjermen din. Skriv ut den viste below C-koden til outb () -funksjonen i den og trykk på lagre-knappen for å lagre den. Vi har startet denne C -koden med bruk av noen hovedoverskrifter av C. For det første har vi lagt til “Config.h ”header for å konfigurere C -koden. “SYS/IO.H ”er den viktigste overskriften som kreves for bruk og utførelse av Outb () -funksjonen i C -programmet. Så vi har lagt det til også. Etter det, SYS/IOCTL.H og Linux/PARPORT.H Header er blitt brukt til bruk av portrelatert informasjon. Standard STDIO.H og stdlib.H -overskrifter brukes til å benytte seg av standardinngang og output i programmet.
Initialiseringen av ADDR -variabelen har lansert Main () -funksjonen. Ioperm () -funksjonen brukes til å stille inn porttillatelse for porttilgang og gi resultatet til det variable resultatet. Outb () -funksjonen er her for å utføre portutgang. Du kan kjøre dette programmet på systemet ditt med GCC -kompilatoren.
Konklusjon
Når det gjelder fordelene og ulempene, kan utveksling av informasjon og adressebusser gjøre minnetilgangen trege når perifere enheter fungerer saktere enn RAM. I/O-fleksibiliteten som tilbys av minnekartiserte plattformer, reduserer derimot mengden intern logikk som er nødvendig av prosessoren, noe. Parallelt med RISC -systemer er begrunnelsen å redusere intrikat for å oppnå et mer fokusert og pålitelig system, noe som er nyttig for innebygde enheter, for eksempel. Denne guiden har et av de grunnleggende eksemplene for å demonstrere ideen om outb -funksjon på C -språk.