La CPU può manipolare direttamente i pin di una porta IO?

1

Sulla base di ciò che so finora, quando si collega un IO Device a una porta IO (ad esempio, quando si collega una stampante a una porta parallela), la stampante verrà rappresentata nella CPU come un altro chip RAM.

Quindi, se si desidera creare un driver di periferica che comunica con la stampante, le istruzioni che il driver di dispositivo conterrà sono semplicemente istruzioni per memorizzare i dati nelle posizioni di memoria per la stampante e istruzioni per caricare i dati dalle posizioni di memoria per la stampante.

Ma puoi inviare dati alla stampante manipolando direttamente i pin della porta parallela, cioè la CPU ha alcune istruzioni come questa:

send the number 3 to pin 0 of parallel port 1
    
posta John 01.06.2017 - 07:17
fonte

3 risposte

3

Spesso non funziona più così (per i personal computer). Ma ai vecchi tempi, i computer economici usavano i cosiddetti I / O mappati in memoria. Chip del controller del dispositivo sono stati collegati al computer in modo tale che la CPU abbia visto uno spazio di indirizzamento della memoria contigua, ma una parte dello spettro non era correlata alle posizioni dei chip di memoria, ma piuttosto ai registri di controllo e dati del chip del controller del dispositivo. La CPU non "sapeva" di questo, solo il programmatore. Quindi dovevi scrivere byte in certe posizioni di memoria in un ordine particolare per fare in modo che il chip del controller facesse quello che volevi che facesse.

    
risposta data 01.06.2017 - 07:52
fonte
3

Based on what I know so far, when you plug an IO device into an IO port (for example, when you plug a printer into a parallel port), the printer will be represented to the CPU as just another RAM chip.

È meglio pensare a questo scenario come a 2 dispositivi separati, in cui un dispositivo (il controller della porta parallela) può o non può essere presentato alla CPU come un altro chip RAM (e quasi mai lo è), e l'altro dispositivo ( la stampante) non è affatto presentata alla CPU. Per inviare un byte alla stampante, il driver della stampante chiede al driver del controller della porta parallela di inviare un byte e il driver del controller della porta parallela indica al controller della porta parallela di inviare il byte.

Si noti che i chip RAM hanno una caratteristica speciale: le letture e le scritture non hanno effetti collaterali. Perché non ci sono effetti collaterali è facile usare alcuni trucchi per migliorare le prestazioni; come avere cache, o combinare letture o scritture più piccole in un numero inferiore di letture / scritture, o leggere o scrivere in un ordine diverso. I registri di un dispositivo hanno quasi sempre degli effetti collaterali e quindi spesso non possono essere trattati come i chip RAM.

But can you send data to the printer by directly manipulating the pins of the parallel port, that is, does the CPU have some instruction like this:

Iniziamo assumendo che la CPU abbia uno spazio di indirizzo fisico e che lo spazio di indirizzamento fisico sia 4 GiB e che ogni indirizzo fisico sia un indirizzo a 32 bit.

Supponiamo che 2 Gb dello spazio di indirizzamento fisico (indirizzi da 0x00000000 a 0x7FFFFFFF) sia usato per la RAM, e che per le letture e le scritture in quell'area la CPU faccia trucchi per migliorare le prestazioni (memorizzazione nella cache, ecc.)

Supponiamo anche che i restanti 2 GiB dello spazio di indirizzamento fisico (indirizzi da 0x80000000 a 0xFFFFFFFF) possano essere usati per vari dispositivi (e che la CPU non faccia trucchi per leggere e scrivere in quest'area).

Infine; supponiamo che la CPU abbia istruzioni che leggono o scrivono su qualsiasi indirizzo. La stessa istruzione che legge (ad es.) Una variabile nella propria applicazione (con un indirizzo) può essere utilizzata per leggere (ad es. Un registro di un controller di porta parallela (a un indirizzo diverso).

In questo caso non è necessario che la CPU abbia istruzioni speciali per i dispositivi.

Tuttavia ...

Per alcune CPU ci sono più spazi di indirizzi. Ad esempio, per 80x86 c'è lo spazio dell'indirizzo fisico (come quello che ho descritto sopra), ma esiste anche uno "spazio di indirizzamento della porta IO". In questo caso la CPU avrebbe alcune istruzioni speciali che sono utilizzate per accedere allo spazio di indirizzamento speciale (ad esempio in e out istruzioni per accedere allo "spazio di indirizzamento della porta IO") e queste istruzioni speciali potrebbero avere un comportamento diverso rispetto alle normali istruzioni che leggono o scrivono nello spazio di indirizzamento fisico (ad esempio potrebbero bypassare la MMU o implicare controlli di autorizzazione completamente diversi).

    
risposta data 01.06.2017 - 15:40
fonte
1

Giù a livello di driver di dispositivo, è di nuovo solo l'accesso mappato in memoria. Scrivi le informazioni di configurazione e i comandi su indirizzi specifici e leggi gli indirizzi specifici per vedere quale sia la risposta. Assicurati di distinguere tra la porta della stampante (che fa parte del computer) e la stampante (che si trova all'altra estremità di un cavo e non a sua volta mappata in memoria).

Tieni presente che alcune interfacce periferiche in questi giorni si nascondono dietro qualche altro tipo di controller. Quindi una porta della stampante potrebbe effettivamente essere collegata a un'interfaccia USB, se era più facile da progettare. In questo caso, la CPU parlerebbe con il controller del bus USB, non direttamente sulla porta della stampante.

    
risposta data 01.06.2017 - 11:54
fonte

Leggi altre domande sui tag