Port I/O

Input-output through ports ( ing.  I / O ports ) - o soluție de circuit care organizează interacțiunea procesorului și a dispozitivelor I / O. Opusul I/O prin memorie .

În multe modele de procesoare, I / O este organizată de aceleași funcții ca și citirea / scrierea în memorie - așa-numita „I/O memorie”. În consecință, dispozitivele I/O sunt amplasate schematic pe magistrala de memorie, iar unele dintre adresele de memorie sunt direcționate către I/O. În procesoarele Intel , microcontrolere AVR și altele, există comenzi separate pentru I / O - INși OUT - și, în consecință, un spațiu de adrese separat: în procesoarele Intel - de la 0000 16 la FFFF 16 .

Porturile I/O sunt create în hardware-ul sistemului, care decodifică ciclic controlul, adresa și pinii de date ai procesorului. Porturile sunt apoi configurate pentru a permite comunicarea cu perifericele I/O .

Unele porturi sunt folosite pentru transferul de date (de exemplu, primirea datelor de la tastatură sau citirea orei ceasului sistemului), altele sunt folosite pentru controlul dispozitivelor periferice (comanda de citire a datelor de pe disc). Pe baza acestui fapt, un port I/O poate fi un port numai de intrare, un port numai de ieșire sau un port bidirecțional.

Memory I/O nu are nimic de-a face cu accesul direct la memorie ; DMA este o soluție de circuit separată care conectează magistrala I/O cu controlerul de memorie și descarcă procesorul în timpul operațiunilor mari I/O. Într-o mașină cu DMA, pentru a scrie un bloc de memorie, de exemplu, pe un disc, trebuie să formați acest bloc în memorie și apoi să trimiteți comanda „Start recording” prin operațiuni I/O (fie printr-un port sau printr-o adresă de memorie specială, în funcție de arhitectură) . Când scrierea este terminată, dispozitivul va avertiza cumva procesorul despre aceasta (de exemplu, întrerupând ). În special, cei trei parametri SoundBlaster cunoscuți de oricine familiarizat cu DOS  - port, DMA și IRQ  - indică cum să trimiteți comenzi către placa de sunet, cum va prelua unda sonoră din memorie și cum placa va spune procesorului că a fost redat segmentul de val.

Porturi sau memorie?

Beneficii port:

Beneficii memorie:

Porturi în arhitectura IA-32

Procesorul permite I/O atât prin memorie, cât și prin porturi. Porturile sunt accesate cu comenzi speciale IN, INS, INSB, INSW, INSD, OUT, OUTS, OUTSB, OUTSWși OUTSD; acces la memorie - funcțiile obișnuite de lucru cu memorie ( MOV, ADD, LODSBși altele). Două porturi seriale pot fi combinate într-un singur port de doi octeți, patru - într-unul de patru octeți. Ca și în cazul memoriei, numerele de port trebuie să fie aliniate pe o limită de 2 octeți, respectiv 4 octeți, pentru performanță maximă. Dacă trebuie să scrieți date pe două porturi adiacente într-o anumită ordine, acest lucru nu se poate face cu comenzi multibyte (pe porturile aliniate, I/O are loc în paralel, pe porturile nealiniate, ordinea apelului nu este definită ).

Procesorul poate mapa porturi în memorie; în acest caz, procesorul se asigură că operația I/O prin port este finalizată înainte ca următoarea instrucțiune să înceapă să fie executată. Cu memorie I/O, nu există o astfel de garanție. Cu toate acestea, procesorul nu verifică erorile de paritate pe porturi, așa că în sistemele de înaltă fiabilitate, programatorul trebuie să fie pregătit pentru erori de paritate.

Din punct de vedere fizic, adresa portului este furnizată prin aceeași magistrală de adrese ca și adresa de memorie. În procesoarele cu arhitectură Intel x86 (înainte de Pentium ) exista o linie MI / O # (1 - memorie, 0 - port); în versiunile ulterioare, această funcție este realizată prin linii de cerere de comandă.