Re: NMI i PCI - jak?

Autor: Maciej W. Rozycki (macro_at_ds2.pg.gda.pl)
Data: Fri 26 Mar 2004 - 12:26:46 MET


On Thu, 25 Mar 2004, Radoslaw Sokol wrote:

> > Bez przesady -- akurat w procesorach x86 NMI nie powoduje utraty zadnych
> > informacji i umozliwia wznowienie wykonania od miejsca przerwania. Gdyby
> > bylo inaczej, Linux nie bylby w stanie obslugiwac 100 przerwan NMI na
> > sekunde (w odpowiedniej konfiguracji).
>
> To zależy. W 8086 (i pewnie 80286) zdecydowanie NMI nie pozwala
> kontynuować pracy. Możliwe, że w nowszych konstrukcjach jest już
> inaczej, jednak na ten aspekt NMI w x86 na studiach mi zwrócono
> bardzo mocno uwagę :)

 Ktos musial widocznie pomylic dokumentacje. W 8086 NMI od przerwania
INTR o wektorze 2 nie rozni sie niczym poza wyzszym priorytetem i
wyzwalaniem zboczem. Jedyny problem to fakt, ze zaakceptowanie NMI przez
procesor nie powoduje zamaskowania dalszych przerwan NMI (zostalo to
pozniej zmienione -- w nowszych procesorach przerwanie NMI powoduje
zamaskowanie kolejnych przerwan NMI do chwili wykonania rozkazu "iret" lub
"iretd"). W rezultacie moze teoretycznie wystapic zapetlenie; praktycznie
-- nie powinno, gdyz nalezy temu zapobiec w sposob sprzetowy, np. poprzez
uzycie dodatkowego zatrzasku; w architekturze PC tak wlasnie uczyniono.
Tak czy owak o utracie danych nie powinno byc mowy, o ile procedura
obslugi napisana jest poprawnie.

 W ogole za bardzo sie na tych studiach zwraca uwage na konkretne
implementacje, zamiast ogolnie przedstawic podstawowe architektury
procesorow, ewentualnie poparte jakimis sensownymi przykladami. A potem
wychodza takie kwiatki. W gruncie rzeczy, o ile nie projektujesz od
podstaw jakiegos systemu opartego na 8086, to takie drobiazgi nie maja
zadnego znaczenia.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro_at_ds2.pg.gda.pl, PGP key available        +


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Wed 19 May 2004 - 14:00:00 MET DST