Vyvolání služeb OS, zpracování přerušení
Z FAV wiki
Většina moderních CPU: 2 řežimy:
- Privilegovaný - režim jádra, všechny instrukce jsou povoleny, v tomto běží pouze jádro OS
- Uživatelský - některé instrukce (I/O) jsou zakázány, v tomto běží ostatní programy
Aby uživ. aplikace mohla provádět zakázané instrukce, musí požádat OS o jejich provedení následujícím způsobem (Vyvolání služby):
- Aplikace si uloži parametry pro službu na předem určené místo (registry, zásobník,...)
- Zavolá metodu volání služby jádra (např. v C je to syscall( ))
- Ta podle parametrů zjistí jaká složba je požadována, která přepne CPU do režimu jádra, a vyvolá obsluhu
- Ta službu provede a při návratu do uživatelského programu přepne CPU zpět do uživatelského režimu
Programovací jazyky skrývají volání funkcí jádra tak, aby vypadaly jako běžné knihovní funkce.
[editovat] Zpracování přerušení
Přerušení je událost, která pokud nastane, je třeba ji v krátkém čase obsloužit. Je tedy přerušeno vykonávání instrukcí, provedena obsluha události a po té se pokračuje v předchozí činnosti. Provedení tohoto je v režimu jádra.
Druhy:
- HW přerušení (vnější) - generuje jej I/O zařízení, asynchronně, například přijetí paketu, stisknutí klávesy,... Stará se o ně řadič přerušení (priority atd)
- Vnitřní přerušení - generuje proces, například dělení nulou, výpadek stránky, ...
- Softwarové - synchronní, generováno aplikací jako takovou, záměrně, volání služby OS je příkladem
Vektor přerušení - ukazatel, kde pro daný typ přerušení (a jeho číslo) začíná program pro jeho obsluhu.
Obsluha:
- Přijde signalizace přerušení
- Je dokončena právě prováděná instrukce v CPU
- Adresa další instrukce je uložena na zásobník
- Do PC (Program Counter - ukazatel CPU na další instrukci) je nastavena instrukce, na kterou ukazuje odpovídající vektor přerušení)
- Přepnutí kontextu (Obsluha je samostatný proces)
- Obsluha uloží stav registrů a obecně stav CPU do zásobníku
- Provede obsluhu přerušení
- Provede (I)RET
- Plánovač opět přepne kontext podle dat v zásobníku a původní proces pokračuje v činnosti (kromě zpoždění tedy neví, že přerušení proběhlo, musí tedy naslouchat všem výstupům obsluh přerušení, které jej zajímají)