Salut,
On Sun, 02 Sep 2007 14:06:10 +0200, Stefan Reuther
wrote:
> Du meinst, der Prozessor wartet gerade auf die Komplettierung der
> IDIV-Instruktion, da kommt ein Interrupt und biegt sofort Instruction-
> Fetch-Unit, Decoder, Speicherzugriffs-Einheit usw. auf eine neue Adresse
> rum, resettet den Dividierer und macht in der ISR weiter? IBTD.
Der Interupt wird erst acknowledged wenn die Instruktion abgearbeitet
ist. Dazu ist aber kein Polling-Code vonnöten, das wird in Hardware
abgearbeitet.
> Vielmehr pollt die Steuereinheit nach jeder Instruktion das Interrupt-
> Bein, und trifft anhand dessen die Entscheidung, wo weitergemacht wird.
Das ist nicht wirklich Pollen, sondern einfach das Zusammentreffen
zweier Spannungen (Taktimpuls, Interrupt-Request).
> Auf RISC-CPUs ist das noch recht einfach (reti := pc; pc := vektor),
> aber auf x86 hängt da ja noch tonnenweise Zeug dran (IDT auslesen, ggf.
> Taskswitch, Stack umladen, tonnenweise Register sichern, Sprung), das
> macht man nicht mit einem Sack voll Transistoren, die irgendwo an ein
> Pin hart angeschlossen sind.
Das dann nicht mehr, aber das findet auch erst statt sobald der
Interrupt angemeldet wurde. Das wird nicht mit jeder Instruktion
ausgeführt um zu «pollen».
>>>Das wäre mir neu.
>>
>> Jedes serielle Port des Typs UART 16550A, welches damals ja
>> schliesslich für Mäuse verwendet wurde, kann entweder im
>> Interrupt-Modus oder gepollt verwendet werden. Manche PCs hatten
>> billigports, die man nur pollen konnte. Ist aber natürlich total nervig.
>
> Auch die Dinger pollen nur. Der UART bekommt irgendwoher einen Takt und
> sampled dann mit Takt/(16*DL) den Eingang.
Es geht darum, ob die CPU den Eingangspuffer des UART pollen muss. Muss
sie normalerweise nicht (im Interrupt-Modus).
aw