- v jednom sektoru, pevná délka
- novější jak standardní PC BIOS
- skoro vlastní OS
- adresace disku,
- buď EFI spustíme druhý zavaděč nebo k linuxu připlácneme EFI věci a spustíme linux
- Kam se mají zprávy vypisovat: VGA, sériová linka
- Kořenový disk:
bootparam(7)
- výpisy na konzoli - dvoufázová:
- firmware
- ovladač uvnitř kernelu
- bloková = mají bloky, sektory, … (má cenu optimalizovat v jakém pořadí operace provádíme, aby hlavičky moc nemuseli skákat)
- znaková = terminály,
- ukázalo se, že se hodí i jiné zařízení - např. síťová karta = reakce na data
- většina není zpřístupněná k uživateli
- Obsluha zařízení = virtuální tabulka funkcí
- Privátní data = pro kernel neprůhledné struktura, pointer na data
- malý file system
- obsahuje malé programy pro inicializaci systému - např. zašifrovaný disk
- služby jádra = kontext stejný jako u daného procesu, jen se zvýší práva procesu
- stránková tabulka
- = překladová tabulka
- překlad rozsahů virtuálních adres na rozsahy fyzických adres
- často více-úrovňové
- stránky mohou být ještě nenačteny v paměti
- “cache” procesoru pro stránky
- Sw plněný TLB
- např riscv, sparc-ix
- procesor zavolá výjimku při nenalezení stránky v TLB
- obsluha musí běžet s fyzickými adresy, aby nedošlo z zacyklení
- přepínáme-li v jádru kontext, musíme vylít TLB
- Lazy TLB switch - mapování jádra je ve všech kontextech stejná = nemusíme vylívat TLB
- při přepnutí do jádra, dochází ke změně ukazatele na stack
- omezení = jak velký máme zásobník
- není možný u ovladače přerušení
- běží pod kontextem procesu
- proces může být odswapován
- Použití neplatné adresy musí být zaznamenáno:
_ASM_EXTABLE(1b, 4b)
- (číselné labely jsou lokální, postfix směr skoku
b)
- trik: vlastní sekce pro spravení použítí neplatné adresy:
section .fixup
less uaccess.h
- musí porovnat, že nepíši do paměti jádra
- cc-NUMA = aby cache všech procesorů v systému obsahovali aktuální informace
- všechny NUMA uzly poslouchají, co kdo dělá
- skoro všechny x86 s více než 1 socketem
down() - nepřerušitelný Semafor
down_interruptible() - přerušitený semafor
- read zámek - neexkluzivní
- write zámek - exkluzivní
- problémy:
- inverze priorit
- nízká priorita drží zámek, více prioritní proces čeká na nižší proces
- nízko prioritní proces dostane prioritu nejvyššího procesu čekajícího na zámek
- upgrade r-zámku na w-zámku
- pustí čtecí zámek, snaží se chytit zápisový zámek, až načte zápisový musí si ověřit, jestli se nezměnili data
- Stejné zarovnání cache: aby nebylo na stejné adrese v cachi, např na adrese dělitelné 128
- Studené cache-cold objekty
- naalokovat nedávno uvolněný objekt, který zůstal v cachi procesoru
- vs nejstarší uvolněný = není v žádné cachi
- stránku rozsekám na objekty stejného typu objektů
- volné místo - cache coloring = každá instance aby padla na jiné místo cache
- lze udělat i bez zamykání = částečně obsazená stránka je pouze na jednom procesoru
- znám-li strukturu mohu použít konstruktor a destruktor
- race to idle - dilema, jak využít spící procesor
- thundering herd - všechny procesy se probudí a porvou o zámek