Vés al contingut

E/S asíncrona

De la Viquipèdia, l'enciclopèdia lliure

En informàtica, l'E/S asíncrona (també E/S no seqüencial) és una forma de processament d'entrada/sortida que permet que un altre processament continuï abans que la transmissió hagi acabat. Un nom utilitzat per a l'E/S asíncrona a l'API de Windows és l'E/S solapada.[1]

Les operacions d'entrada i sortida (I/O) en un ordinador poden ser extremadament lentes en comparació amb el processament de dades. Un dispositiu d'E/S pot incorporar dispositius mecànics que s'han de moure físicament, com ara un disc dur que busca una pista per llegir o escriure; això sovint és ordres de magnitud més lent que la commutació del corrent elèctric. Per exemple, durant una operació de disc que triga deu mil·lisegons a executar-se, un processador que té un cronometratge a un gigahertz podria haver realitzat deu milions de cicles de processament d'instruccions.[2]

Un enfocament senzill de l'E/S seria iniciar l'accés i esperar que es completi. Però aquest enfocament, anomenat E/S síncrona o bloqueig d'E/S, bloquejaria el progrés d'un programa mentre la comunicació està en curs, deixant els recursos del sistema inactius. Quan un programa fa moltes operacions d'E/S (com ara un programa que depèn principalment o en gran manera de l'entrada de l'usuari), això significa que el processador pot passar gairebé tot el seu temps inactiu esperant que es completin les operacions d'E/S.[3]

Alternativament, és possible iniciar la comunicació i, a continuació, realitzar un processament que no requereix que s'hagi completat l'E/S. Aquest enfocament s'anomena entrada/sortida asíncrona. Qualsevol tasca que depengui del fet que s'hagi completat l'E/S (això inclou tant l'ús dels valors d'entrada com les operacions crítiques que afirmen assegurar-se que s'ha completat una operació d'escriptura) encara ha d'esperar que l'operació d'E/S es completi i, per tant, és encara bloquejat, però altres processaments que no depenguin de l'operació d'E/S poden continuar.

Existeixen moltes funcions del sistema operatiu per implementar E/S asíncrona a molts nivells. De fet, una de les funcions principals de tots els sistemes operatius, excepte el més rudimentari, és realitzar almenys algun tipus d'E/S asíncrona bàsica, tot i que això pot no ser especialment evident per a l'usuari o el programador. A la solució de programari més senzilla, l'estat del dispositiu de maquinari es consulta periòdicament per detectar si el dispositiu està preparat per a la seva propera operació. (Per exemple, el sistema operatiu CP/M es va crear d'aquesta manera. La seva semàntica de crida al sistema no requeria cap estructura d'E/S més elaborada que aquesta, tot i que la majoria de les implementacions eren més complexes i, per tant, més eficients). L'accés directe a la memòria (DMA) pot augmentar molt l'eficiència d'un sistema basat en sondeig, i les interrupcions de maquinari poden eliminar completament la necessitat de sondejar. Els sistemes operatius multitasca poden aprofitar la funcionalitat que proporcionen les interrupcions de maquinari, alhora que amaguen a l'usuari la complexitat de la gestió d'interrupcions. El spooling va ser una de les primeres formes de multitasca dissenyada per explotar l'E/S asíncrona. Finalment, les API d'E/S asíncrones i multiprocés explícits dins dels processos d'usuari poden explotar encara més l'E/S asíncrona, a costa d'una complexitat addicional del programari.

L'E/S asíncrona s'utilitza per millorar l'eficiència energètica i, en alguns casos, el rendiment. Tanmateix, pot tenir efectes negatius sobre la latència i el rendiment en alguns casos.[4]

Formes

[modifica]

Formes d'E/S i exemples de funcions POSIX:

Bloqueig Sense bloqueig Asíncron
API escriure, llegir escriure, llegir + enquestar / seleccionar aio_escriure, aio_llegir

Totes les formes d'E/S asíncrona obren aplicacions a possibles conflictes de recursos i errors associats. Es requereix una programació acurada (sovint utilitzant exclusió mútua, semàfors, etc.) per evitar-ho.

Implementació

[modifica]

La gran majoria del maquinari informàtic de propòsit general es basa completament en dos mètodes d'implementació d'E/S asíncrona: sondeig (polling) i interrupcions. Normalment, els dos mètodes s'utilitzen junts, l'equilibri depèn en gran manera del disseny del maquinari i les seves característiques de rendiment necessàries. (DMA no és en si un altre mètode independent, és només un mitjà pel qual es pot fer més treball per enquesta o interrupció).

La majoria dels sistemes informàtics de propòsit general depenen molt de les interrupcions. Pot ser possible un sistema d'interrupció pur, tot i que normalment també es requereix algun component de sondeig, ja que és molt comú que múltiples fonts potencials d'interrupcions comparteixin una línia de senyal d'interrupció comuna, en aquest cas s'utilitza el sondeig dins del controlador del dispositiu per resoldre el problema. font real. (Aquest temps de resolució també contribueix a la penalització de rendiment d'un sistema d'interrupció. Al llarg dels anys, s'ha treballat molt per intentar minimitzar les despeses generals associades al manteniment d'una interrupció. Els sistemes d'interrupció actuals són bastant mancats en comparació amb alguns anteriors molt ajustats, però l'augment general del rendiment del maquinari ho ha mitigat molt).

Referències

[modifica]
  1. «Asynchronous I/O - CodeDocs» (en anglès). [Consulta: 10 setembre 2023].
  2. «Difference Between Synchronous and Asychnchronus I/O» (en anglès). [Consulta: 10 setembre 2023].
  3. alvinashcraft. «Synchronous and Asynchronous I/O - Win32 apps» (en anglès americà), 20-03-2021. [Consulta: 10 setembre 2023].
  4. «Asynchronous I/O» (en anglès americà). [Consulta: 10 setembre 2023].