OUTB sembra essere un incapsulamento della funzione solo per un comando di assembly della stessa designazione utilizzata per comunicare con le periferiche mappate dalla porta, come la macchina da scrivere su sistemi compatibili con PC IBM, che utilizzano l'intervallo di indirizzi I/O 0x60-0x6F. All'interno di questo articolo, discuteremo dell'uso della funzione Outb () C durante l'utilizzo di Ubuntu 20.04 Sistema operativo Linux. Per capire il funzionamento della funzione outb (), è necessario dare un'occhiata all'I/O post-mappata prima."
Cos'è I/O mappato a porte?
Gli I/O mappati in memoria e mappati in porta sono i due modi comuni in cui i chip del computer si collegano a dispositivi esterni. Tuttavia, tutti gli approcci sembrano essere equivalenti quando si tratta della periferia. L'I/O mappato a porta è accessibile tramite un set specifico di comandi CPU e uno spazio di indirizzi specializzato distinto. I comandi in e out possono essere visti sui processori informatici Intel.
Per dare ai dispositivi I/O uno spazio di indirizzi diverso dalla normale memoria, è stato aggiunto un ulteriore pin "I/O" al punto di accesso della CPU o un intero bus è stato messo da parte per I/O. È una tecnica di comunicazione da CPU a periferica che viene impiegata quando sono necessari comandi unici perché il processore deve comunicare con la RAM e le periferiche. Questo è spesso indicato come I/O isolato poiché l'indirizzo per I/O è separato da quello per la memoria primaria. L'alternativa e il modo più popolare sono attualmente I/O mappati dalla memoria, in cui non sono richiesti comandi extra poiché tutto condivide lo stesso spazio di indirizzi. Mappato alla memoria I/O è accessibile quasi allo stesso modo della memoria del programma e/o della memoria dell'utente poiché è disegnato nello stesso spazio di indirizzo.
Le operazioni di input e output della porta di basso livello sono gestite da questo gruppo di metodi Posix. I metodi B-Suffix sono procedure di larghezza del byte, i metodi W-Suffix sono procedure di larghezza delle parole e i metodi _P-Suffix ritardano fino a quando non è finito l'I/O. Le operazioni OUT* eseguono l'output della porta, mentre i processi in* fanno l'ingresso della porta. Sebbene possano ancora essere utilizzati in modalità utente, sono generalmente progettati per l'uso del core interno.
#includereDobbiamo usare O, O2 o un compilatore equivalente. Poiché i metodi sono specificati come macro inline, i riferimenti problematici del tempo di connessione possono derivare se l'ottimizzazione non viene attivata. Per istruire il kernel di consentire al programma in modalità utente utilizzare le porte I/O interessate, è possibile utilizzare i comandi IOPERM (2) o, facoltativamente, i comandi IOPL (2). Se non lo esegui, il programma avrà un errore di segmentazione. Funzioni specifiche per hardware come outb () e compagni in contrasto con come funziona la maggior parte dei sistemi DOS, il parametro del valore viene fornito per primo e il parametro della porta segue.
Esempio
Diamo un'occhiata all'uso della funzione Outb () nel programma C. Questo programma sarà una piccola dimostrazione di come possiamo usarlo all'interno di qualsiasi codice del programma C senza guardare al suo output, i.e., Il più delle volte, non emetterà il modo in cui vogliamo. Quindi, dobbiamo prima creare un file C nel nostro sistema operativo Linux. Apri il terminale della shell tramite l'uso di "Ctrl+alt+T".
Successivamente, utilizza l'istruzione touch di Linux insieme al nome di un file "outb.C "da creare con il".C ”estensione alla sua fine. Questo file può essere trovato nella directory di lavoro corrente del sistema Linux, i.e., "casa". Apri File Explorer e doppia tocca sul file per aprirlo.
Il file vuoto verrebbe aperto sullo schermo. Scrivi il codice C-Below mostrato della funzione outb () in esso e premere il pulsante Salva per salvarlo. Abbiamo iniziato questo codice C con l'uso di alcune intestazioni principali di C. In primo luogo, abbiamo aggiunto la "configurazione.”H” Intestazione per configurare il codice C. Il "sys/io.h "è l'intestazione principale richiesta per l'uso e l'esecuzione della funzione OUTB () nel programma C. Quindi, l'abbiamo aggiunto anche. Dopodiché, il sistema/ioctl.H e Linux/Parport.L'intestazione H è stata utilizzata per l'uso di informazioni relative alla porta. Lo stdio standard.H e stdlib.Le intestazioni H vengono utilizzate per utilizzare l'input e l'output standard all'interno del programma.
L'inizializzazione della variabile ADDR ha lanciato la funzione principale (). La funzione ioperm () viene utilizzata per impostare i bit di autorizzazione dell'accesso della porta e passare il risultato al risultato variabile. La funzione outb () è qui per eseguire l'output della porta. Puoi eseguire questo programma sul tuo sistema con il compilatore GCC.
Conclusione
Per quanto riguarda i vantaggi e gli svantaggi, lo scambio di informazioni e bus degli indirizzi potrebbe rendere lento l'accesso alla memoria poiché i dispositivi periferici funzionano più lentamente della RAM. La flessibilità I/O offerta da piattaforme mappate dalla memoria, d'altra parte, riduce la quantità di logica interna necessaria dal processore, consentendo le CPU di implementazione di CPU più rapide, meno costose ed efficienti dal punto di vista energetico. Parallelamente ai sistemi RISC, la logica è quella di ridurre la complessità per ottenere un sistema più mirato e affidabile, che è utile per i dispositivi incorporati, ad esempio. Questa guida ha uno degli esempi di base per dimostrare l'idea della funzione OUTB in C lingua.