Podíváme se na operační systém a jeho roli v počítači. Tento náš pohled bude hodně nízkoúrovňový.

Proč potřebujeme operační systém

pocitac hardware

pocitac aplikace

Aplikace a holé "železo"

Programový model

  • aplikace má paměť celou pro sebe

    • co když se data nevejdou do paměti?

    • co když se kód aplikace nevejde do paměti?

  • aplikace má procesor celý pro sebe

  • musí umět komunikovat se všemi zařízeními (všech výrobců)

    • čipová sada, klávesnice, myš, disk, grafická karta, síťová karta

Jak se aplikace dostane do poměti?

  • aplikace pro načítání aplikací

    • sama musí být načtena pomocí programu v ROM (BIOS)

Co když chci při práci poslouchat hudbu?

  • ukončím textový editor, na chvilku pustím přehrávač hudby, po chvíli ho ukončím a spustím textový editor, po chvíli …​

pocitac vice app soucasne

Více aplikací na holé "železo"

Programový model

  • více aplikací sdílí jednu paměť

    • kam do paměti se má nebo může aplikace nahrát?

    • co když jedna aplikace zapíše do paměti, kde jsou data nebo kód jiné aplikace?

    • co když je paměti málo

  • více aplikací sdílí jeden procesor

    • musejí se vzájemně volat, aby mohly běžet (kooperativní multitasking)

  • všechny aplikace \(\times\) všechna zařízení \(\times\) všichni výrobci

    • nebudou si aplikace "kecat" vzájemně do komunikace se zařízeními?

Co když chci při práci poslouchat hudbu?

  • textový editor musí každou chvilku zavolat nějakou funkci v přehrávači hudby, ta přehraje úsek skladby a vrátí se zpět

    • jak ví textový editor, že je přehrávač vůbec v paměti a kde?

    • jak ví textový editor, kterou funkci volat a jak?

pocitac a os

Programový model

  • každá aplikace má "celou" paměť jen pro sebe (nebo si to myslí)

    • do paměti jiných aplikací nemůže, proto jim nemůže uškodit

    • paměti je "neomezeně" mnoho (omezení velikostí adres počítače)

  • každá aplikace má procesor jen pro sebe

    • procesor vykonává její instrukce, o ostatní aplikace se nestará

  • pro práci se zařízeními používá abstrakce

    • streamy, soubory, síťové sockety o ==== Co když chci při práci poslouchat hudbu?

  • textový editor a přehrávač běží "současně"

Abstrakce a systémová volání

The purpose of abstraction IS NOT to be vague, but to create a new semantic level in wchich one can be absolutely precise.

Účelem abstrakce NENÍ být vágní, ale vytvořit novou sémantickou úroveň, v níž můžeme být naprosto přesní.

Operační systém poskytuje abstrakci

Skrytí složitost hardwarového rozhraní

  • soubor, adresář, síťový socket, IP adresa, stream, datagram, datum, čas

    • block na disku je určen číslem stopy, povrchu a sektoru, číst nebo zapisovat je možné jenom posloupnost sektorů

    • síťová karta umí vysílat nebo přijímat pouze rámce (bloky dat) obsahující linkové adresy a data

  • nezávislé na konkrétní hardwarové platformě

Systémová volání

  • služby pro přístup k poskytovaným prostředkům

    • pro každý typ prostředků je definované rozhraní

  • podobné volání knihovní funkce v programu

    • proč není operační systém knihovna?

Co to je systémové volání?

Systémové volání je volání funkce operačního systému.

  • aplikace předá řízení operačnímu systému pomocí speciální instrukce nebo posloupnosti instrukcí

    • v registrech procesoru (a na zásobníku) je předán "popis" požadavku (číslo funkce a její parametry)

MIPS x86_64 x86

add $a0, $t0, $zero
li $a1, 1
syscall 1

mov eax, 101h
mov edx, esp
sysenter

movzwl 12(%esp),%eax
movl %eax,4(%esp)
movl $23,%eax
movl 4(%esp),%ebx
int $0x80

Obsluha systémových volání

obsluha syscall

Proč jsou potřeba speciální instrukce?

  • Běžné volání funkce v programu

    • překladač zná adresy funkcí v programu, při volání vygeneruje instrukci pro volání funkce s přímou nebo nepřímou adresou

  • Jak se liší systémové volání od volání funkce?

    • aplikace neví, na kterých adresách leží OS a jeho funkce

      • aplikace nemůže jen tak volat libovolný kód OS

      • OS je někde v paměti, ale není to knihovna spojená s aplikací

    • neznámá adresa \(\implies\) speciální mechanismus volání

      • způsobí výjimku (trap), při které procesor skočí na (aplikaci neznámou) adresu, kde má OS svoji obslužnou rutinu

    • mechanismus volání způsobí přepnutí režimu procesoru

      • kód OS běží v režimu s vyšší úrovní oprávnění

      • systémové volání umožňuje přechod přes hranici mezi uživatelským programem a operačním systémem

Ukázka použití systémového volání

Jednoduchý program "hello world" zapisuje do standardního výstupu (volá systémovou funkci write) a potom končí (volá systémovou funkci exit

Takto to funguje na Linuxu architektuře x86-64. Podrobnosti zde.

Jednoduchý program v assembleru
global _start

section .text

_start:
  mov rax, 1        ; write(
  mov rdi, 1        ;   STDOUT_FILENO,
  mov rsi, msg      ;   "Ahoj, studenti!\n",
  mov rdx, msglen   ;   sizeof("Ahoj, studenti!\n")
  syscall           ; );

  mov rax, 60       ; exit(
  mov rdi, 0        ;   EXIT_SUCCESS
  syscall           ; );

section .rodata
  msg: db "Ahoj, studenti!", 10
  msglen: equ $ - msg
  • Číslo systémového volání se ukládá do registru rax.

  • Argumenty systémové funkce se ukládají do registrů rdi, rsi, rdx, rcx, r8 a r9 v tomto pořadí.

  • Operační systém se volá instrukcí syscall

  • Návratová hodnota systémového volání je v registru rax, 0 je OK. Případná chyba je signalizována vrácením -errno (záporné číslo v rax).

Překlad, sestavení a spuštění programu
$ nasm -f elf64 -o hello_studenti.o hello_studenti.s (1)
$ ld -o hello_studenti hello_studenti.o (2)
$ ./hello_studenti (3)
Ahoj, studenti! (4)
$
1 Překlad pomocí assembleru nasm
2 Sestavení programu linkerem ld
3 Spuštění programu v terminálu Linuxu
4 Výstup programu.

K čemu jsou nutná oprávnění

Přístup k hardwaru z jednoho místa - z operačního systému

  • žádná aplikace nesmí přímo komunikovat s HW

  • v robustním systému nelze spoléhat na "čestné" slovo

    • HW podpora pro zajištění exkluzivity přístupu pro OS

Uživatelský režim procesoru

  • procesor vykonává instrukce (aplikace), pokud narazí na privilegovanou instrukci, vyvolá výjimku

    • přístup do paměti, kam jsou mapována zařízení, popř. instrukce in/out

    • další instrukce nutné ke správné funkci OS (později)

Privilegovaný režim procesoru

  • pro běh OS — instrukce jsou vykonávány bez omezení

  • při návratu do uživatelského programu zajistí OS přepnutí procesoru zpět do uživatelského režimu

Izolace aplikací pomocí virtualizace

Vlastní procesor, paměť a zařízení pro každou aplikaci.

Vzájemná izolace aplikací

Zjednodušuje programovací model

  • aplikace má iluzi vlastní paměti, procesoru a zařízení

  • programátor nemusí explicitně řešit sdílení

Zvyšuje bezpečnost systému

  • aplikace si nemohou škodit (úmyslně či neúmyslně)

Zvyšuje míru využití prostředků

  • OS optimalizuje přidělování prostředků

Jak souvisí izolace s virtualizací?

  • poskytuje iluzi "soukromých" výpočetních prostředků

Virtualiace procesoru

Jak mohou aplikace a operační systém sdílet procesor(y)?

  • cíl: aplikace si myslí, že systém má neomezený počet procesorů

Řešení: sdílení procesoru v čase (time sharing)

  • přepínání kontextu (kontext switch) v pravidelných intervalech

    • preemptivní - aplikace "neuvolňuje" procesor, OS si ho vezme "násilím", což znemožňuje aplikacím si procesor "uzurpovat" pro sebe.

  • kontext architektury: programový čítač (Program Counter), registry procesoru

    • je uložen nebo obnoven při každém přepnutí kontextu

    • co obsah paměti?

  • kontext implementace: cache, prediktory skoků, …​

    • při přepnutí kontextu se ignoruje nebo vynuluje (flush)

Operační systém musí zajistit přepínání kontextu

  • jediná harwarová podpora je přerušní od časovače

Virtualizace paměti

Jak mohou aplikace a operační systém sdílet paměť?

  • cíl: aplikace si myslí, že systém má neomezené množství paměti

Aplikace může požadovat více paměti, než je v systému…​

  • rozsah kódu/dat aplikace může být větší než hlavní paměť

  • hlavní paměť se musí chovat jako cache

    • (pomalý) disk představuje paměť v následující úrovni hierarchie

    • velké bloky (stránky), write-back, write-allocate, LRU (aproximace)

Řešení

  • 1. část: zacházet s pamětí jako s cache

    • data, co se nevejdou do operační paměti se ukládají na disk (swap file)

  • 2. část: přidáme úroveň inderekce (překlad adres)

    • aplikace pracují s jinými adresami než hlavní paměť

Virtualizace zařízení

Jak mohou aplikace sdílet zařízení?

  • cíl: aplikace si myslí, že mají zařízení jenom pro sebe

Řešení: opravdové sdílení, pokud je to možné

  • speciální soubory, které je možné otevřít ve více aplikacích

    • znakové zařízení místo klávesnice, myší (umožňují číst data ze zařízení ve více aplikacích) nebo například zvukové karty (čtení i zápis dat ve více aplikacích, HW při zápisu mixuje zvuk z více zdrojů)

Řešení: posun na úrovni abstrakce

  • místo zařízení OS poskytne aplikaci objekt s jiným rozhraním a operace s objektem převádí na operace se zařízením

    • soubory a adresáře místo disku (přístup ke stejným souborům z více aplikací už je jiný problém), síťové sockety místo síťové karty

    • tisková služba (na úrovni dokumentů) místo tiskárny (spooling)

Architektura OS

Hlavní část OS tvoří jádro (kernel)

Jádro je také (jenom) program …​

  • je vytvořeno běžnými postupy pro návrh a tvorbu složitého software

    • jenom chyby jou více fatální než u aplikačních programů

  • subsystémy pro různé funkce poskytované OS

    • rozdělení zodpovědnosti, zjednodušení návrhu

  • různá oprávnění pro různé subsystémy

    • zvýšená odolnost proti "zlým" programům

kernel api

Vybrané subsystémy

Správa paměti

  • spravuje fyzickou paměť a implementuje virtuální paměť s využitím hardwarové podpory procesoru MMU (memory management unit)

Správa a plánování procesů

  • poskytuje abstrakci pro běžící aplikace ve formě procesů a vláken a plánuje jejich běh na sdíleném procesoru

Souborový systém (filesystem)

  • poskytuje abstrakci pro ukládání dat ve formě souborů a adresářů, převádí operace se soubory na operace s diskem

Síťový subsytém

  • poskytuje abstrakci pro komunikaci v síti ve formě síťových socketů, streamů a datagramů, převádí operace se sockety na operace se síťovou kartou

Ovladače zařízení

Nízkoúrovňová (low-level) komunikace se zařízeními

  • vyřizuje požadavky vlastních subsystémů (souborový systém, síťové sockety, …​) na konkrétní zařízení (disk, síťovou kartu, …​)

    • konfiguruje zařízení, posílá příkazy, čte stav, přenáší data

  • používá instrukce pro čtení nebo zápis do (necachované) paměti nebo speciální instrukce pro vsup a výstup (in/out)

    • HW tyto přístupy přenáší po sběrnici k zařízení na cílové adrese

Konfigurace zařízení

  • způsob signalizace stavu a přenosu dat

    • polling vs. interrupt driven I/O (číslo přerušení)

    • programmed I/O vs. DMA (busmastering, scatter/gather)

Obsluha výjimek a přerušení

Výjimky (exceptions, traps)
  • synchronní události, způsobené běžící aplikací

    • neplatná instrukce, dělení nulou, systémové volání (trap)

Přerušení (interrupts)
  • asynchronní události generované mimo procesor

    • časovač, I/O požadavek nebo dopověď, …​

Mechanismus obsluhy je stejný pro výjimky i přerušení
  • při výjimce nebo přerušení procesor skočí na oslužnou rutinu (adresa či výběr adresy je určen architekturou)

  • OS uloží stav (registry) přerušeného programu na zásobník, analyzuje příčinu výjimky/přerušení a zavolá obslužnou funkce

  • OS obnoví stav přerušeného programu a vrátí se zpět tak, aby vykonávání programu pokračovalo od stejné/následující adresy

Architektura OS

Běhové uspořádání OS

  • jeden program — monolitické jádro

    • komunikace pomocí volání funkcí

  • minimální jádro \+ sada programů (subsytémy)

    • komunikace pomocí zpráv

Dilema při volbě architektury

  • izolace subsystémů vs. efektivita OS

    • vyšší režie při komunikaci mezi izolovanými subsystémy

    • souvisí s HW latencí při změně režimu procesoru

  • kompromis mezi odolností a efektivitou

    • základní typy architektur operačních systémů

Monolitická architektura OS

Jádro OS je tvořeno jedním programem
  • hlavní důraz na efektivitu

  • všechny subsystémy mají stejná oprávnění

    • nízká režie na komunikaci mezi subsystémy

    • nevylučuje modulární design

  • uživatelské programy mají minimální oprávnění

    • speciální instrukce na systémová volání mění oprávnění

    • nepoužívá se u "zavaděčů" typu CP/M, MS-DOS

Běžně používané systémy
  • Linux

  • Solaris

  • Windows

  • FreeBSD, OpenBSD, NetBSD

Mikrojádrová architektura OS

Minimální jádro + sada programů
  • důraz na bezpečnost a robustnost

  • subsystém jako oddělené aplikace (servery)

    • subsystémy mají pouze minimální oprávnění

    • příliš se neliší od uživatelských programů

  • jádro poskytuje pouze nejnutnější funkce

    • obsluha přerušení, komunikace mezi programy

    • při komunikaci je zajištěna kontrola oprávnění

Výzkumné a embedded systémy
  • MACH, SPring, Minix, …​, QNX, L4, Fiasco,…​

Volání služeb OS (i po síti)

Volání služby = zaslání zprávy.

  • zprávy mohou transparentně cestovat po síti

    • na rozdíl od lokálního přenosu mohou mít výrazně vyšší latenci, s čímž nemusí program počítat

zpravy po siti

Shrnutí

Operační systém vs. aplikační program

Operační systém Aplikační program

privilegovaný program

sladká nevědomost

spravuje a přiděluje prostředky aplikacím

neví nic o podrobnostech HW

má přímý přístup k alokačním mechanizmům

neví nic o ostatních programech (a OS)

ví o všech běžících aplikacích

alokace prostředků a přístupk zařízením pouze skrze OS

přímo komunikuje se zařízeními (ovladače)

ví o HW detailech nutných pro implementaci OS

Role operačního systému

Abstrakce (extended machine)

  • ooděluje apliakce od low-lewel platformy

  • poskytuje abstrakce nezávislé na hardware

Izolace (isolation through virtualization)

  • OS vitualizuje procesor, paměť a zařízení

  • virtualizace umožňuje vzájemnou izolaci aplikací

Správa prostředků (resource manager)

  • OS přiděluje a řídí sdílení prostředků

    • CPU, RAM, přenosové pásmo, disková kapacita,…​

  • maximální výkon systému jako celku při zohlednění potřeb jednotlivých aplikací

Zdroje a odkazy