UNIX Jádro systému © Milan Keršláger
Jádro operačního systému ● základní součást operačního systému ● doplňují ho pomocné nástroje ● úkoly jádra a operačního systému 1) umožnit uživateli ovládat počítače ● zajistit spuštění programu, vstupy, výstupy, správu poč... 2) vytvořit abstraktní vrstvu pro programy 3) spravovat prostředky počítače ( přidělovat je procesům ) ● unixová jádra ● programům poskytují systémová volání (syscall) ● Linux: modulární monolitické jádro (viz dále)
Kernel space a user space ● kernel space (prostor jádra ) ● jádro v privilegovaném stavu, plně ovládá počítač ● user space (prostor procesů) ● procesy v neprivilegovaném stavu – při snaze o ovládnutí počítače → vyvolání jádra – každý proces svůj adresní prostor ● volání služeb jádra (syscall) – posoudí oprávnění a provede privilegovanou činnost ● čtení z disku, přístup na porty, ovládání hardware ● výjimka → proces s právy roota může všechno – u mikrojader lavina změn kontextů → nižší výkon
Typy jader OS ● monolitické jádro – monolithic kernel ● jeden celek řeší celý problém ● varianta: modulární jádro ● mikrojádro – microkernel ● idea jako u strukturovaného programování ● ještě menší: exokernel, nanokernel, picokernel ● hybridní jádro – hybrid kernel ● něco mezi monolitickým a mikrojádrem ● snaha o využití „toho lepšího“ z obou ● RTOS – speciální případ
Monolitické jádro ● jádro je jeden celek ● původní model (např. Unix) ● v souvislém úseku paměti (kernel-space) ● vše na stejné (absolutní) úrovni oprávnění ● chyba (např. v ovladači) ohrožuje celé jádro ● umožňuje efektivní programátorské triky ● do téže paměti zasahují různé subsystémy ● vývoj náročný na znalost funkce celého jádra ● dnes Linux, FreeBSD a další ● části jako samostatné moduly → modulární jádro
Mikrojádro ● jádro minimalizováno (jen nejnutnější části) ● hezké rozvržení, vlastní písečky, snadné pochopit ● vše ostatní jako běžné procesy – tzv. servery ● souborový subsystém, síťový subsystém a další ● komunikace přes API (zasílání zpráv) ● proces (server) lze po pádu restartovat (ale fuj) ● výkonnostní problémy (někdy nemusí vadit) ● vyvolání služby jádra může znamenat nutnost čekat na přepnutí kontextu mezi jádrem a procesem (i více procesy) ● samostatné procesy nemohou manipulovat se společnými daty (např. cache) ● GNU Hurd + mikrojádro GNU Mach – stále není finální ● MINIX, Symbian (je navíc RTOS)
Hybridní jádro ● kombinuje výhody monolitu a mikrojádra ● základní jádro je větší ● včetně částí citlivých na výkonnost ● blíží se z druhé strany modulárnímu monolitu ● Microsoft Windows NT ● NT 3.1, 3.5, 3.51, 2000, XP, 2003, Vista, 2008, 7,... ● Microsoft Windows CE ● poslední verze odklon od mikrojádra k hybridnímu ● Windows Mobile, Pocket PC, Windows Phone
Operační systém reálného času ● RTOS – Real Time Operating System ● definovaná časová ultimáta ● krátká doba reakce na událost ● rychlé přepínání úloh ● úloha má garantovaný běh v jednotce času – programátor ví, že za daný čas dostane alespoň garantovaný strojový čas procesoru – může si rozmyslet, co je nebytně nutné spočítat a co může počkat ● typicky mobilní telefony – nestihne-li připravit data, je výpadek přenosu (hlasu) ● Symbian, Windows CE, RTLinux,...
Start počítače ● dva základní kroky ● inicializace hardware – pomocí firmware (BIOS) ● aktivace software – typicky zavedení jádra operačního systému – využívá informace od firmware (ACPI) ● jednotlivosti specifické pro různé typy počítačů ● IBM PC: vysoká variabilita startu ● jednoúčelová zařízení obvykle jen jednu metoda
Start unixového systému ● jádro převezme kontrolu ● přepne procesor do 32bitového režimu (+ring0) ● aktivuje si příslušné ovladače pro hardware – využije informace od BIOSu (ACPI) – každý ovladač má inicializační část ● připojí kořenový systém souborů (root filesystem) – určuje správce počítače (např. při instalaci) ● z něj spustí první proces → init – může to být i jiný program ( /bin/bash ) ● používá se vyjímečně (např. po havárii při opravě systému)
Proces init ● v unixových OS proces číslo 1 ● je spuštěn jako první – je (pra)rodičem všech ostatních procesů – výjimkou je v Linuxu tzv. initrd, ale init stejně číslo 1 ● spouští startovací skripty – vybere sadu skriptů podle runlevel ● 1 – singeuser, 3 – multiuser, 5 – jako 3 ale s GUI, 6 – reboot ● při startu lze jádru říct číslo runlevelu, jinak podle /etc/inittab ● singleuser pro správu systému (někdy bez hesla) ● předání parametru jádru při startu lze zabránit (heslo pro zavaděč) – spustí démony – připraví prostředí pro uživatele (GUI, přihlašovací dialog...)
Démon ● proces běžící na pozadí ● bez kontaktu s uživatelem – uzavřeny standardní proudy (stdin, stdout, stderr) ● zprávy do logu → syslog → /var/log/... – správce počítače by měl sledovat (používá je i jádro) ● zajišťuje nějakou službu (ve Windows: services) – terminálové přihlášení ze sítě: sshd – sdílení souborů (NFS, Samba, …), WWW server,... ● ovládání pomocí skriptů – např.: /etc/init.d/httpd restart – skripty používá při startu proces init
Start počítače – PC
Zapnutí PC ● reset (signál propojující všechny obvody) ● po zapnutí nebo zmáčknutí tlačítka ● CPU do 16bitového režimu (jako Intel 8086) ● interpretace kódu od adresy 0xFFFF0 ● zde je umístěn BIOS ● vlastní BIOS i doplňující karty – grafická karta, řadiče pro disky (SATA, SCSI) atd. – BIOS je najde a spustí jejich inicializační kód – mohou rozšířit schopnosti BIOSu ● start systému z netradičního zařízeni (SCSI řadiče, síťová karta) ● BIOS plně kontroluje první fázi startu PC
BIOS ● Basic Input-Output systém ● v paměti ROM (dnes Flash) ● na základní desce od jejího výrobce – vyrábí několik firem, modulární – závislý na HW (přímo jej ovládá) ● poskytuje jednoduché API – služby BIOSu ● čti sektor z disku, vytiskni znak, pošli na port,... ● plně na BIOS spoléhal pouze DOS ● je 16bitový z původního IBM PC XT (1983) ● 32bitová rozšíření BIOSu se neujala
SETUP ● aplikace pro volitelná nastavení BIOSu ● při startu stiskem DEL, F2 a podobně ● je to součást BIOSu nebo samostatná aplikace ● nastavení uloženo v paměti CMOS – zálohováno baterií (spolu s RTC) ● např. pořadí zařízení pro zavedení OS – dříve pevně stanoveno → boot viry z disket ● dnes snaha o automatizaci, minimalizace ● někdy schválně mnoho voleb – nastavení chipsetu (frekvence, napájení, režimy...) – vhodné pro experty, pro přetaktování,...
Činnost BIOSu při startu ● cílem BIOSu je aktivace operačního systému ● detekce a inicializace hardware ● uvedení HW do výchozího stavu ● lze (částečně) přeskočit u teplého startu ● ACPI (standard, vytvořil Intel 1996) – běžné v počítačích PC po roce 2000 – informace o konfiguraci do tabulek v paměti – tabulky často chybně vytvořené ● tvůrce BIOSu potřebuje funkční start jen pro Windows ● POST testy (Power On Self Test) ● slouží k základnímu prověření funkčnosti hardware
Zavedení OS ● IBM PC: BIOS ● disketa – nejjednodušší, jako emulace u ostatních ● pevný disk – jako disketa, ale navíc MBR ● CD/DVD – emulace diskety nebo přímo ● BootROM – start pomocí síťové karty (bez disku) ● USB mass storage (flash disk, externí HDD apod.) ● Apple: EFI (Intel) ● náhrada BIOSu ● binární „ovladače“ HW ● problém možnosti tajit ovládání a nastavování HW
IBM PC: start z diskety ● BIOS umí disketovou mechaniku plně ovládat ● HW FDD mechaniky je ovládán jednotně ● potřebujeme načtení požadovaného sektoru ● nalezení a inicializace disketové mechaniky ● BIOS zavede boot sektor do RAM ● první sektor na disketě (CHS = 0,0,0) → 512 bajtů ● využívá služby BIOSu → HW nezávislý kód ● skočí se na začátek ● obsahuje kód zavaděče jádra OS ● specifický pro různé OS (DOS, Windows NT, Linux)
IBM PC: start z disku – I. ● přidává další vrstvu – MBR + oddíly ● dnes typický postup ● BIOS musí umět z pevného disku číst ● jinak se nenačte zavaděč (taky ho potřebuje) ● IDE/PATA – standardní ovládání HW ● problémy s výkonem → několik standardů ● dopředně nekompatibilní (nový disk do starého PC) ● SCSI – rozšíření BIOSu na řadiči ● SATA – rozšíření BIOSu na řadiči nebo AHCI
Oddíly (partitions) ● oddíl je logické rozčlenění pevného disku ● protože pevný disk je velký nebo více FS, OS ● dělení bez podpory v HW → SW musí respektovat ● popis rozdělení uložen do tabulky uvnitř MBR ● Master Boot Record (CHS = 0,0,0) → 512 bajtů ● obsahuje zavaděč a tabulku dělení disku na oddíly ● zpětná kompatibilita ● oddíl má strukturu jako disketa ● MBR může být nezávislý na OS → DOS MBR
IBM PC: start z disku – II. ● BIOS načte do paměti MBR ● tj. prvních 512 bajtů na HDD ● pokud je neplatný, zahlásí BIOS chybu – MBR not found ● skočí se na začátek MBR (zavaděč + tabulka) ● vybere se aktivní oddíl ● k němu se přistupuje dále jako k disketě ● MBR zavede z aktivního oddílu boot sektor ● není-li platný, zahlásí MBR chybu (OS not found) ● dále se pokračuje jako při startu z diskety