ZOS 21 Flashcards
Dva základní pohledy na OS:
- Rozšířený stroj (shora dolů)
- Holý počítač –> rozšířený stroj
- Místo jednoduchých strojových instrukcí komplexní akce
- Ulož číslo do registru x zobraz řetězec „ahoj“
- Správce zdrojů (zdola nahoru)
- OS jako manager , přiřazuje a spravuje zdroje
- Zdroje: čas CPU, alokace v RAM, přístup k disku
Struktura OS
- modul pro správu procesů
• program, proces, vlákno, plánování procesů a vláken
• kritická sekce, souběh, synchronizace (semafory, …)
• deadlock, vyhladovění - modul pro správu paměti
• virtuální paměť: stránkování, segmentace - modul pro správu I/O
- modul pro spr ávu souborů
- síťování
- ochrana a bezpečnost
- uživatelské rozhraní
Operační systém definice
OS je softwarová vrstva (základní programové vybavení), jejíž úlohou je spravovat hardware a poskytovat k němu programům jednotné rozhraní
• OS zprostředkovává aplikacím přístup k hardwaru
• OS koordinuje zdroje a poskytuje služby aplikacím
• Zdroje čas na procesoru, přidělená paměť, disk, síťová karta
• OS je program, který slouží jako prostředník mezi
aplikacemi a hardwarem počítače.
Program
- Spustitelný kód, v binární podobě je sekvence instrukcí
- Nejčastěji soubor uložený na disku
- Např. C windows system32 calc.exe
Proces
instance běžícího programu
• PID (process id) číslo přidělené procesu systémem
• Přidělen čas CPU
• Potřebuje paměťový prostor
• vstupy a výstupy
• Dle jednoho programu můžeme spustit více procesů
Režimy
- Privilegovaný
2. Uživatelský
Privilegovaný režim
• Všechny instrukce CPU jsou zde povoleny
• Běží v něm jádro OS, které mj. vykonává služby
(systémová volání), o které je aplikace požádá
Uživatelský režim
Aplikace v uživatelském režimu CPU
- Některé instrukce zakázány (tzv. privilegované instrukce) např. není přímý přístup k disku, narušitel –> formátování
- Při pokusu o vykonání privilegované instrukce = => chyba, výjimka
- Aplikace musí požádat OS o přístup k souboru, ten rozhodne zda jej povolí
• Nemůžou vykonávat všechny instrukce, např. přímý
přístup k zařízení (tj. zapiš datový blok x na disk y
• Proč? Jinak by škodlivá aplikace mohla např. smazat disk
• Jak se tomu zabrání? Aplikace musí požádat jádro o službu, jádro ověří, zda aplikace má na podobnou činnost oprávnění
Jak CPU ví, v jakém je režimu?
CPU ví, v jakém je režimu podle bitu ve stavovém registru CPU (0 = priv., 1 = uživ.) - CS (code segment) registr;;
reálně může být bitů více když se v uživatelském -> protection ring
Jak se dostat z uživatelského režimu
do režimu jádra?
Jde o přepnutí „mezi dvěma světy“, v každém z
nich platí jiná pravidla
• Softwarové přerušení instrukce INT -> začne se vykonávat kód přerušení
• Speciální instrukce mikroprocesoru sysenter sysexit , syscall sysret
Systémové volání - definice
Mechanismus používaný aplikacemi k volání služeb
operačního systému.
Systémové volání - důvod
- V uživatelském režimu CPU není možné celou řadu věcí vykonat není přímý přístup k HW , nelze tedy přímo přečíst blok z disku, tedy otevřít soubor, číst z něj a zapisovat do něj.
- Pokud aplikace takovou činnost požaduje, nezbývá jí, než požádat o danou službu operační systém
- Operační systém zkontroluje , zda má aplikace pro danou činnost oprávnění a pokud ano, požadovanou činnost vykoná. (Kontrola může být např. podle ACL, zda má proces daného uživatele právo zapisovat do souboru).
Možnosti aplikace, která chce volat službu
• přímo systémové volání open, creat
• prostřednictvím knihovní funkce (v C např. fopen ),
která následně požádá o systémové volání sama.
• Výhodou knihovní funkce je, že je na různých platformách stejná, ať už se vyvolání systémové služby děje různým způsobem na různých platformách.
Možnosti programátora, když chce službu od jádra
- inline assembler a INT 0x80
viz předchozí ukázka (reálný příklad Linux) - použití instrukce syscall potřebujeme znát číslo funkce interně použije INT 0x80
id 1 = syscall SYS_getpid - přímo je funkce, např. getpid (), fopen () existuje „ wrapper “ v libc knihovně nejpohodlnější a také nejpoužívanější
id 2 = getpid
Vyvolání služby systému
- Parametry uložíme na určené místo
- registry, zásobník…
- Provedeme speciální instrukci, např. INT
- vyvolá obsluhu v jádře
- přepne do privilegovaného režimu
- OS převezme parametry, zjistí, která služba je vyvolána a zavolá příslušnou obsluhu
- Návrat zpět
- Přepnutí do uživatelského režimu (obecně do původního režimu)
Co znamená INT x?
• instrukce v assembleru pro x86 procesory,
která generuje SW přerušení
• x je v rozsahu 0 až 255
• Index do tabulky vektorů přerušení
INT 0x80
• v 16kové soustavě 80, dekadicky 128
• pro vykonání systémového volání v Linuxu
• do registru EAX se dá číslo systémového volání,
které chceme vyvolat
Přerušení x Obsluha přerušení
- Přerušení = Událost
- Obsluha přerušení = obsluha události
• asynchronní (přijde kdykoliv HW stisk klávesy)
• synchronní (instrukce SW přerušení v programu INT),
pak přijde očekávaně
- Analogie z reálného života
- S někým si povídáte
- Zazvoní telefon, vyřídíte telefon
- Vrátíte se k předchozímu povídání
Přerušení - definice
Metoda pro asynchronní obsluhu událostí, kdy procesor přeruší vykonávání sledu instrukcí, vykoná obsluhu přerušení a pak pokračuje v předchozí činnosti.
Přerušení - rozdělení
• HW přerušení (vnější) obsluha HW zařízení
(klávesnice)
• SW přerušení synchronní, instrukcí INT číslo v kódu
procesu
• Vnitřní přerušení (výjimky) procesor oznamuje chyby
při vykonávání instrukcí (dělení nulou, neplatná instrukce)
Jak probíhá asynchronní obsluha události
obsluha události, procesor přeruší vykonávání
sledu instrukcí (části kódu, které se právě věnuje), vykoná obsluhu přerušení (tj. instrukce v obslužné rutině přerušení) a pokračuje předchozí činností
Hardwarové přerušení (vnější)
- Přichází z I /O zařízení, např. stisknutí klávesy na klávesnici
- Asynchronní událost uživatel stiskne klávesu, kdy se mu zachce
- Vyžádá si pozornost procesoru bez ohledu na právě zpracovávanou úlohu
- Doručovány prostřednictvím řadiče přerušení (umí stanovit prioritu přerušením,aj.)
Vnitřní přerušení
- Vyvolá je sám processor
* Např. pokus o dělení nulou, ne platná instrukce, výpadek stránky paměti
Softwarové přerušení
• Speciální strojová instrukce (např. zmiňovaný příklad INT 0x80
• Je synchronní, vyvolané záměrně programem (chce službu volání služeb operačního systému z běžícího procesu, uživatelská úloha nemůže sama skočit do prostoru jádra OS, ale má právě k tomu
softwarové přerušení