Zavedení a struktura operačního systému.

program přítomný ve vestavěné paměti HW (většinou na základní desce) 

vybere zaváděcí jednotku 

načte první sektor (MBR), kde je umístěn program zavaděče a provede skok na adresu jeho programu, čímž mu předá řízení 

Zavaděč (bootstrap program) 

pro Linux LILO (LInux LOader) je všeobecně použitelný zavaděč (boot loader) pro Linux) nebo GRUB 

dává možnost zvolit startující OS 

načte jádro operačního systému do paměti a spustí ho 

detekuje hardware a odpovídajícím způsobem nastaví ovladače zařízení 

připojí kořenový svazek pro čtení a provede kontrolu souborového systému 

inicializuje operační systém 

spuštěn po celou dobu běhu operačního systému a ošetřuje některé události (úklid v adresáři /tmp) 

spustí služby - Démony 

Úrovně běhu systému – runlevel 

runlevel 0 – zastavení systému - halt

runlevel 1 – jednouživatelský režim Single user mode

runlevel 2 – víceuživatelský režim bez podpory sítě Multiuser, without NFS

runlevel 3 – víceuživatelský režim s podporou sítě Full multiuser mode

runlevel 4 – není použit unused

runlevel 5 – víceuživatelský režim s podporou sítě a XFree X11

runlevel 6 – restart systému reboot

Zavádění systému

nejprve proběhne úspěšný test zavádění systému – POST

kontroluje HW v zařízení

série testů ke zjištění, zda HW pracuje správně

zjištěné chyby jsou uloženy nebo oznámeny – blikáním LED/série pípnutí

Po dokončení je řízení předáno bootovací sekvence volající ovládací SW nebo zavaděč OS

Najde a zavede (vygeneruje se přerušení 19h) se tzv. Bootovací sector (boot sector)

Boot sector - oblast 512 bajtů na záznamovém médiu, které je jako první nastavené v paměti BIOSu

Bootsektor se nachází na prvním sektoru záznamového média (v případě pevných disků je to válec 0 hlava 0 stopa 0 sektor 1)

BIOS se snaží najít na tomto sektoru Master Boot Record (MBR) – hlavní spouštěcí záznam.

Ten nahraje do paměti na adresu 0000:7C00 a v případě úspěchu mu předá řízení.

V případě chybného MBR se bootovací proces přeruší pomocí softwarového přerušení 18h – vygeneruje chybové hlášení (např. NO ROM BASIC – SYSTEM HALTED)

Správnost MBR BIOS zjišťuje pomocí kontrolní hodnoty umístěné na posledních dvou bajtech sektoru - AA55h (zápis je uložen ve formátu little endian)

MBR – ze dvou částí – partition loader a partition tabulky

MBR uchovává záznamy o rozdělení disku (oddílech) a určuje, ze kterého z nich se má bootovat.

Pokud MBR OK – řízení se předá partition loaderu

Partition loader v Partition tabulce vyhledá oddíl, který je označen jako aktivní a přejde na první sektor tohoto oddílu. MBR sám sebe překopíruje na jiné místo v paměti a na své původní místo zkopíruje tento první sektor a předá mu řízení 

Spuštění počítače

Po zapnutí PC jsou všechny procesory v reálném režimu

- Náhodně se vybere jedno jádro -> bootstrap processor (BSP)

- v tomto stavu je adresováno pouze 1MB paměti bez ochrany (lze v ní spustit cokoliv)

- u Intel CPU je hack, kdy se nastaví bázová adresa (jako offset) na tzv. reset vector – 0xFFFFFFF0 (konec 4GB paměti - 16B)

- na adrese reset vectoru je jump na adresu, kde je namapovaný BIOS entry point (zajišťuje základní deska)

- tento skok vymaže Intelí hack bázovou adresu

- oblasti v paměti jsou zaplněna správnými daty díky memory map v chipsetu

- po POST bootování systému, umístění volitelné (disketa, DVD ROM, HDD, ...)

- BIOS nyní přečte první sektor umístění (HDD) o velikosti 512B (zero sector) = Master Boot Record (MBR)

1) malý zavaděč na začátku MBR specifický pro OS

- obsah MBR je načten do adresy 0x7c00 a skočí na začátek kódu v MBR (zavaděč)

o Po zapnutí jsou všechny procesory v reálném režimu

o Kód SMP jádra běžící na BSP prohledá paměť na _MP_

o Pokud nenašel, zavede se jednoprocesorové jádro

o Pokud našel, inicializuje APIC BSP

• K tomu je nutné se přepnout do chráněného režimu

o Kód vykonávaný BSP postupně vzbudí AP pomocí Init-IPI (Inter-Processor Interrupt)

o AP se přepne do chráněného režimu a začne svoji další činnost synchronizovat s kódem, který ho spustil a běží na BSP

o Jakmile jsou inicializovány všechny AP, BSP přepne I/O APIC do symetrického IO režimu

• Routovací tabulka, která přesměruje přerušení od sběrnic periferií na některý lokální APIC AP

o SMP jádro pokračuje dál s vlastní inicializací

Viz přednáška PPR [file].

modul může volat jakýkoli jiný modul

všechny moduly jsou spojeny do vykonatelného souboru s operačním systémem

Systémové volání (služba jádra)

volání vstupního bodu jádra OS s přepnutím do privilegovaného režimu

zjištění čísla požadované služby

volání obslužné procedury

návrat s přepnutím do neprivilegovaného režimu

hlavní program, který spouští obslužnou proceduru

množina obslužných procedur pro systémová volání

podpůrné procedury pro vykonání obslužných procedur

mají tendenci extrémně narůstat

Monolit akumuluje moduly, které by potenciálně mohli být potřebné

Těžce se ladí

Např. Linux, Windows

Systémy založené na mikrojádře

Hierarchie vrstev poskytujících služby

Programy vyšší vrstvy využívají služeb nižších vrstev

Holý počítač je nejnižší vrstva

Aplikační program je nejvyšší vrstva

Princip vrstev umožňuje systematickou tvorbu programů a jejich testování

Princip vrstev je možné použít pro monolitický model i pro systémy

Vrstva nad holým strojem, která obsahuje minimální množinu abstrakcí, tak aby ostatní funkce OS mohly být implementovány nad ním

Tyto funkce OS nemusí být vykonávány v privilegovaném režimu

Jenom mikrojádro musí být vykonáváno v privilegovaném režimu

Typická množina abstrakcí implementována mikrojádrem:

Přerušení

Správa paměti

Ostatní funkce – soubory, adresáře, síťové služby – jsou programy vykonávané v uživatelském režimu 

základní rozdělení 

monolitcké systémy - hlavní program, obslužné procedury, podpůrné procedury 

vrstvené systémy - hierarchie vrstev, nejnižší je holý počítač, nejvyšší je aplikační program 

funkční hierarchie - někdy je problém rozdělit do vrstev podle úrovně abstrakce, proto dělení do vrstev podle funkčnosti 

klient-server - obsahuje mikrojádro, které poskytuje pouze základní funkce, většinu práce dělají servery, které jsou oddělené od jádra 

objektově orientovaná struktura - jádro spravuje řadu objektů (zastupují soubory, HW zařízení, ...), mezi objekty jsou tzv. capability = odkaz na objekt + množina práv definujících operace 

[link].  

This tutorial is intended as a supplement to the SigOps OS Tutorial to teach the fundamentals of symmetric multprocessing using Intel MP compliant hardware. Knowledge of the concepts and implementations of basic operating system parts such as managing virtual memory and multitasking are assumed and will not be discussed except as they relate to multiprocessing. Knowledge equivalent to an intermediate or advanced computer architecture college course will be helpful in understanding scheduling issues, but is not required. 

This tutorial is not intended to be a complete explanation of how to implement an SMP-capable operating system, nor as a replacement for Intel's documentation. Rather it is designed to give an overview of the things I learned in writing SMP support for OpenBLT, a freely redistributable microkernel-based operating system under the BSD licence. Particularly, some tedious hardware aspects will not be discussed in detail when the reader could just as easily read official Intel documentation. The interested reader should refer to the references for more detailed information. For code examples, the reader should refer to the source code of OpenBLT or FreeBSD. The Linux kernel source code might be helpful, although it is under the GPL. 

This tutorial is a work in progress. If you see an error or something that needs clarification, please e-mail me. 
