Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilMilan Valenta
1
UNIX 9. Jádro systému © Milan Keršlágerhttp://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/ Obsah: ● jádro monolitické, mikrojádro a hybridní ● RTOS, kernel space a user space ● syscall, unixový čas ● BIOS, setup, start počítače (z diskety, disku), ● start jádra, ovladače, kořenový systém souborů ● init, runlevel, démon 30.3.2011
2
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)
3
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
4
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
5
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)
6
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
7
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,...
8
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
9
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
10
Unixový čas ● slouží pro interní evidenci času ● počátek 1.1.1970 00:00:00 UTC – též 1970-01-01T00:00:00Z ISO 8601 ● každý den přesně 86400 sekund – zajišťuje souvislý čas – snadný převod na lokální čas podle databáze ● problém přestupných sekund – např. 31.12.1998 23:59:60 – POSIX.1 v roce 2001 zamítl jejich zahrnutí → velké potíže při nasazení NTP (Network Time Protocol) → též velká komplexita interního řešení přestupné sekundy
11
Časové zóny ● systém používá UTC (univerzální čas, tj. GMT) ● poslední změna souboru, události v logu,... ● uživateli je přepočítán čas podle akt. zóny – v systému je uložena databáze změn proti UTC ● v adresáři /usr/share/zoneinfo ● obsahuje záznamy pro časové zóny i přestupné roky – např. gregoriánská reforma v září 1752 odebrala 10 dní – ne každá země má letní čas a podobně – neřeší přestupné sekundy – globální nastavení systému v /etc/localtime – uživatel může změnit pomocí proměnné prostředí TZ ● dědí se z rodičovského procesu na potomky ● každý uživatel může mít svoje nastavení (GMT, MET,...)
12
Start počítače – PC
13
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
14
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
15
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
16
Č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
17
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í,...
18
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
19
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)
20
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
21
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
22
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
23
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)
24
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
25
Kořenový systém souborů ● 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í
26
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...)
27
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
28
chkconfig ● nastavování služeb spouštěných při startu ● rozlišuje jednotlivé runlevely ● chkconfig –-list ● chkconfig služba on|off ● v SYSV systémech (Fedora, RHEL, CentOS...) – nastavuje symbolické linky v /etc/rcX.d/ – X představuje číslo runlevelu – ručně: – /etc/init.d/služba start|stop|restart|status
29
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
30
Syslog ● logovací démon ● někdy jsou dva (pro běžné procesy a pro jádro) ● démon zapisuje do souborů – Fedora používá: /var/log/messages, /var/log/secure, /var/log/maillog ● program volá knihovní funkci – knihovní funkce syslog() ● předává se typ, úroveň, zpráva, čas doplněn démonem ● zpráva přes jádro logovacímu démonu, ten ji zapíše na disk – log se může odesílat přes síť na jiný počítač ● útočník pak nemůže logy změnit – logy by měl správce neustále sledovat ● program logwatch (přehledný denní „výcuc“)
31
Double fork shell fork() wait() httpd exit() 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). ztráta rodiče → jádro nastaví: ppid()=1 init wait() exec(„httpd“)
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.