Vyvolání služeb OS, zpracování přerušení
Z FAV wiki
(Rozdíly mezi verzemi)
(vysvětlení zkratky) |
|||
| Řádka 33: | Řádka 33: | ||
* Je dokončena právě prováděná instrukce v CPU | * Je dokončena právě prováděná instrukce v CPU | ||
* Adresa další instrukce je uložena na zásobník | * Adresa další instrukce je uložena na zásobník | ||
| − | * Do PC (ukazatel CPU na další instrukci) je nastavena instrukce, na kterou ukazuje odpovídající vektor přerušení) | + | * 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) | * Přepnutí kontextu (Obsluha je samostatný proces) | ||
* Obsluha uloží stav registrů a obecně stav CPU do zásobníku | * Obsluha uloží stav registrů a obecně stav CPU do zásobníku | ||
Verze z 3. 6. 2013, 22:11
Většina moderních CPU: 2 řežimy:
- Privilegovaný - režim jádra, všechny instrukce jsou povoleny, v tomto běží pouze 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.
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í)
