# Polling

L'enquesta o interrogació es refereix a la mostra activa de l'estat d'un dispositiu extern mitjançant un programa client com a activitat sincrònica. El polling s'utilitza més sovint en termes d'entrada/sortida (I/O), i també es coneix com a polled I/O o I/O controlada per programari. Un bon exemple d'implementació de maquinari és un temporitzador de vigilant.

## Descripció

L'enquesta és el procés en què l'ordinador o el dispositiu de control espera que un dispositiu extern comprove la seva preparació o estat, sovint amb maquinari de baix nivell. Per exemple, quan una impressora està connectada mitjançant un port paral·lel, l'ordinador espera fins que la impressora hagi rebut el següent caràcter. Aquests processos poden ser tan minuts com només llegir un bit. De vegades s'utilitza com a sinònim d'enquesta "espera ocupada". En aquesta situació, quan cal una operació I/O, l'ordinador no fa més que comprovar l'estat del dispositiu I/O fins que estigui llest, moment en què s'accedeix al dispositiu. En altres paraules, l'ordinador espera fins que el dispositiu estigui llest. L'enquesta també es refereix a la situació en què un dispositiu es comprova repetidament per estar preparat i, si no ho és, l'ordinador torna a una tasca diferent. Tot i que no és tan malbaratador de cicles de la CPU com l'espera ocupada, generalment no és tan eficient com l'alternativa a l'enquesta, I/O impulsada per interrupcions.
En un sistema senzill d'un sol propòsit, fins i tot l'espera ocupada és perfectament adequada si no es pot fer cap acció fins a l'accés I/O, però la majoria de les vegades això era tradicionalment una conseqüència de maquinari simple o sistemes operatius que no feien múltiples tasques.
Sovint, l'enquesta està íntimament relacionada amb el maquinari de molt baix nivell. Per exemple, consultar un port d'impressora paral·lel per comprovar si està preparat per a un altre caràcter implica examinar tan sols un bit d'un byte. Aquest bit representa, en el moment de la lectura, si un sol cable del cable de la impressora està a baixa o alta tensió. La instrucció I/O que llegeix aquest byte transfereix directament l'estat de tensió de vuit cables del món real als vuit circuits (flip flops) que formen un byte d'un registre de la CPU.
L'enquesta té l'inconvenient que si hi ha massa dispositius per comprovar, el temps necessari per enquestar-los pot superar el temps disponible per donar servei al dispositiu d'E/S.

## Algorisme

L'enquesta es pot descriure en els passos següents:
Accions d'amfitrió:
* L'amfitrió llegeix repetidament el bit ocupat del controlador fins que queda clar (amb un valor de 0).
* Quan és clar, l'amfitrió escriu l'ordre al registre d'ordres. Si l'amfitrió està enviant la sortida, estableix el bit d'escriptura i escriu un byte al registre de sortida de dades. Si l'amfitrió està rebent entrada, llegeix les dades escrites pel controlador del registre d'entrada de dades i estableix el bit de lectura a 0 com a ordre següent.
* L'amfitrió estableix el bit de comandament llest a 1.
Accions del controlador:
* Quan el controlador s'adona que el bit de comandament llest està establert, estableix el bit d'ocupat a 1.
* El controlador llegeix el registre d'ordres. Si el bit d'escriptura interior està configurat, llegeix del registre de sortida de dades i realitza les operacions I/O necessàries al dispositiu. Si el bit de lectura està establert, les dades del dispositiu es carreguen al registre d'entrada de dades perquè l'amfitrió les llegeixi.
* Un cop finalitzades les operacions, el controlador esborra el bit preparat per a comandaments, esborra el bit d'error per mostrar que l'operació ha estat correcta i esborra el bit ocupat.

## Referències

* ↑ «What is polling in computing? – TechTarget Definition» (en anglès). [Consulta: 10 setembre 2023].
* ↑ «Difference between Interrupt and Polling» (en anglès americà), 11-06-2019. [Consulta: 10 setembre 2023].
* ↑ «Polling (computer science) | Semantic Scholar» (en anglès). [Consulta: 10 setembre 2023].
* ↑ «Polling and Streaming - Concept & Scenarios» (en anglès americà), 31-07-2020. [Consulta: 10 setembre 2023].