UNIX 9. Jádro systému © Milan Keršláger 24.06.2018 http://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/
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 umožnit uživateli ovládat počítače zajistit spuštění programu, vstupy, výstupy, správu poč... vytvořit abstraktní vrstvu pro programy 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)
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, ...
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) proces žádá jádro o provedení nějaké služby služba je vykonána v privilegovaném režimu user space → kernel space → user space
Syscall, system call systémové volání jádra OS v unixových systémech základní kámen vytváří API, které používají procesy čtení z disku, přidělení paměti, ovládání hardware, ... zajišťuje kompatibilitu jednou zavedený syscall je podporován „do nekonečna“ velký odpor proti bezhlavému zavádění nových syscallů problémy při snaze o rozšíření staršího volání posuzuje oprávnění a provede privilegovanou činnost výjimka → proces s právy roota může všechno mikrojádra syscall nemají používají zasílání zpráv skrze API vyvolává lavinu změn kontextu mezi servery
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 metodu
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) a PCI ID 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)
Ovladač ovladač je typicky součást jádra OS slouží k obsluze vstupně-výstupního zařízení typicky je možné ovladač vyměnit (aktualizovat) též pro podporu sítě, souborových systémů atd. jádro používá jen ovladače, které potřebuje podle aktuálního stavu (připojeného hardware) hot-plug zařízení → USB flash disk připojuje/odpojuje se za běhu v Linuxu jako moduly lze je nahrát nebo vyhodit z jádra za běhu systému jádro může být menší → v paměti jen to, co je potřeba
Kořenový systém souborů připojuje se jako první po startu jádra OS jádro samo o sobě žádný další FS nepřipojuje vzniká tak strom adresářů s jediným kořenem musí obsahovat vše pro zahájení startu počítače program init,startovací skripty, konfigurační soubory skripty připojí další FS → /etc/fstab další FS se připojuje do již existujícího adresáře vznikne stromová struktura různých FS VFS musí vždy vědět, na jakém FS se nachází
Proces init v unixových OS proces číslo 1 je spuštěn jako první je (pra)rodičem všech ostatních procesů je též univerzální adopce „osiřelých“ procesů výjimkou je v Linuxu tzv. initrd spouští se procesy před init, ale init má stejně číslo 1 spouští startovací skripty vybere sadu skriptů podle runlevel řídí se podle souboru /etc/inittab spustí démony připraví prostředí pro uživatele (GUI, přihlašovací dialog...)
Runlevel různé varianty spuštění systému runlevel je stav procesu init, u Fedory např: 1 – singeuser (správa systému) 3 – multiuser (běžný provoz, bez GUI) 5 – jako 3 ale s GUI 6 – reboot (restart systému) mezi runlevely se dá přecházet příkaz (jen root): telinit 3 při startu lze jádru říct číslo runlevelu jinak podle /etc/inittab předání parametru jádru při startu lze zabránit (heslo pro zavaděč) při přechodech mezi runlevely se spouští určité skripty démoni (resp. startovací skripty) se spouští jen v určitém runlevelu
Démon démon je proces běžící na pozadí bez kontaktu s uživatelem uzavřeny standardní proudy (stdin, stdout, stderr) používá se „double fork“ → rodičem se stane init 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, ... spouštění a zastavování démonů pomocí skriptů např.: /etc/init.d/httpd restart skripty používá při startu proces init
Double fork init shell httpd fork() exec(„httpd“) fork() Démon (htttpd je WWW server) provede dvojitý for, tj. vytvoří potomka, kterému rodič skončí a je adoptován procesem init. Tím zanikne vazba na shell (a terminál). fork() exec(„httpd“) fork() exit() ztráta rodiče → jádro nastaví: ppid()=1 wait() wait()
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