Úroveň priority přerušení - Interrupt priority level

Úroveň priority přerušení ( IPL ) je součástí aktuálního stavu přerušení systému , který neindikuje požadavky na přerušení, které budou aktuálně přijaty. IPL může být indikováno v hardwaru registry v Programovatelném řadiči přerušení nebo v softwaru bitovou maskou nebo celočíselnou hodnotou a zdrojovým kódem vláken

Přehled

Celočíselný IPL může být malý jako jediný bit, pouze se dvěma hodnotami: 0 (všechna přerušení povolena) nebo 1 (všechna přerušení zakázána), jako v MOS Technology 6502 . Některé architektury však umožňují větší rozsah hodnot, kde každá hodnota umožňuje požadavky na přerušení, které určují vyšší úroveň, zatímco blokuje ty ze stejné nebo nižší úrovně.

Přiřazení různých priorit žádostem o přerušení může být užitečné při pokusu o vyrovnání propustnosti systému v porovnání s latencí přerušení : na některé druhy přerušení je třeba reagovat rychleji než na jiné, ale množství zpracování nemusí být velké, takže má smysl přiřadit vyšší prioritu pro tento druh přerušení.

Řízení úrovně přerušení bylo také použito k synchronizaci přístupu k provádění datových struktur. Obslužný program přerušení plánovače úrovně 3 by tedy dočasně zvýšil IPL na 7 před přístupem k jakýmkoli skutečným datovým strukturám plánovače, poté by se snížil zpět na 3 před skutečným přepnutím kontextů procesu. Bylo však není povoleno přerušení handler snížit IPL nižší, než u kterého to bylo zapsáno, neboť k tomu, aby mohla zničit integritu synchronizace systému.

Samozřejmě víceprocesorové systémy přidávají své vlastní komplikace, které zde nejsou řešeny.

Bez ohledu na to, co hardware může podporovat, typické systémy typu UNIX využívají pouze dvě úrovně: minimální (všechna přerušení zakázána) a maximální (všechna přerušení povolena).

OpenVMS IPL

Jako příklad jednoho z propracovanějších systémů pro zpracování IPL, jaké kdy byly použity, podporuje počítač VAX a přidružený operační systém VMS 32 úrovní priorit od 0 do 31. Priority 16 a vyšší jsou pro požadavky z externího hardwaru, zatímco hodnoty pod 16 jsou k dispozici pro softwarová přerušení (interně používaná operačním systémem k plánování vlastních aktivit). Ne všechny hodnoty jsou skutečně použity, ale zde jsou některé z těch důležitějších:

  • úroveň 37 je pro přerušení "výpadku napájení".
  • úroveň 24 je pro přerušení hodin. Toto je vyšší priorita než přerušení I / O.
  • úrovně 20 - 28 se používají pro I / O zařízení.
  • úrovně 8-11 se používají pro přerušení vidlice . Když řidič přijme přerušení zařízení (priorita 20–23), předpokládá se, že bude provádět co nejméně zpracování při tak vysoké prioritě; místo toho, pokud je třeba provést nějaké časově náročné operace, je třeba je odložit požadavkem na softwarové přerušení v rozsahu 8–11; když je toto přerušení spuštěno, bude pokračovat další zpracování. Podobné jsou „spodní poloviny“ a jejich nástupci v linuxovém jádře.
  • úroveň 69 se používá k synchronizaci přístupu k datovým strukturám plánovače procesů.
  • úroveň 4 se používá pro úlohy post-processingu I / O - tj. konečné dokončení požadavku QIO včetně vrácení výsledků do procesu aplikace.
  • úroveň 3 se používá pro přerušení procesu přeplánování procesu. Jakýkoli kód prováděný na vyšších úrovních přerušení nesmí předpokládat, že existoval aktuální kontext procesu (protože může probíhat přeplánování procesu). Na této nebo vyšších úrovních nejsou zejména povoleny chyby stránek .
  • úroveň 2 se používá k synchronizaci přístupu k datovým strukturám jednotlivých procesů. Kdykoli jádro potřebuje přístup do kontextu procesu, odešle tomuto procesu speciální jádro AST, které se spustí v kontextu procesu na IPL 2.
  • úroveň 0 je normální úroveň pro provádění kódu bez přerušení, včetně běžného kódu aplikace.

Alpha hardware obsahuje nativní podporu pro IPL. Když byl OpenVMS přenesen na Itanium v roce 1895, bylo schéma IPL simulováno pomocí funkcí poskytovaných hardwarem Itanium.

Viz také