Vyvolání služeb OS, zpracování přerušení

Z FAV wiki
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
 
(Nejsou zobrazeny 3 mezilehlé verze od 3 uživatelů.)
Řádka 1: Řádka 1:
 
Většina moderních CPU: 2 řežimy:
 
Většina moderních CPU: 2 řežimy:
−
Privilegovaný - režim jádra, všechny instrukce jsou povoleny, v tomto běží pouze OS
+
* 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
+
* 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):
 
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,...)
+
* 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( ))
+
* 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 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
+
* 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
  
 
[[Soubor:Vyvolani-sluzby.jpg]]  
 
[[Soubor:Vyvolani-sluzby.jpg]]  
Řádka 14: Řádka 14:
 
Programovací jazyky skrývají volání funkcí jádra tak, aby vypadaly jako běžné knihovní funkce.
 
Programovací jazyky skrývají volání funkcí jádra tak, aby vypadaly jako běžné knihovní funkce.
  
−
Zpracování přerušení
+
 
 +
== 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.  
 
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:
 
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)
+
* 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, ...
+
* 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
+
* Softwarové - synchronní, generováno aplikací jako takovou, záměrně, volání služby OS je příkladem
  
−
<http://cs.wikipedia.org/wiki/P%C5%99eru%C5%A1en%C3%AD>
 
  
−
Vektor přerušení - ukazatel, kde pro daný typ přerušení (a jeho číslo) začíná program pro jeho obsluhu.
+
[http://cs.wikipedia.org/wiki/P%C5%99eru%C5%A1en%C3%AD Přerušení na Wiki]
 +
 
 +
'''Vektor přerušení''' - ukazatel, kde pro daný typ přerušení (a jeho číslo) začíná program pro jeho obsluhu.
  
 
Obsluha:
 
Obsluha:
−
Přijde signalizace přerušení
+
* Přijde signalizace přerušení
−
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
−
Provede obsluhu přerušení
+
* Provede obsluhu přerušení
−
Provede (I)RET
+
* 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í)
+
* 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í)
 +
 
 +
{{fav-kiv-bzinf}}
 +
 
 +
 
 +
[[Kategorie:fav-kiv-bzinf]]

Aktuální verze z 31. 5. 2015, 12:42

Většina moderních CPU: 2 řežimy:

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):

Vyvolani-sluzby.jpg

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:


Přerušení na Wiki

Vektor přerušení - ukazatel, kde pro daný typ přerušení (a jeho číslo) začíná program pro jeho obsluhu.

Obsluha:


Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje