OSY Flashcards

1
Q

Ukoly operacniho systemu

A
  1. Spoustet a dohlizet na uzivatelske programy
  2. Efektivne vyuzivat HW
  3. Usnadnit uzivatelske problem
  4. Ucinit pocitac snadne pouzitelny
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Obecna pohled na definici - co je operacni system a co poskytuje

A

Je to jakesi rozsireni/nadstavba pocitace, je to program krery ovlada hardware a ridi chod celeho systemu- zakryva komplikovane detaily hardware a uzivatelis poskytuje snadno ovladatelny virtualni stroj

Direguje systemove prostredky mezi programy - poskytuje prostredky a casovy rozvrhovani, prostor v CPU, pameti, periferiich…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Pyramida slozeni uzivatelske urovne, pres programatora az k hardware

A
  1. Aplikacni pgoramy - uviatelske aplikace
  2. Servisni programy - kody, programatorske
  3. Jadro op. systemu - syscally - prostredek mezi programatorem a HW, je to zabezpeceni, tedy komunikuje to s HW pomoci programatorskych programu, ALE NE PRIMO
  4. Hardware - komunikuje s op. systemem pomoci interruptu
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Kdy “bezi” jadro operacniho systemu?

A

Jadro OS neni proces, ktery by aktivne bezel, ale je to mnoho funkci, spustenych pri preruseni, vyjimkach, syscally atd… Jadro OS vlastne dela vsechno, co muze pocitac vykonat…
Pri prerusenich, kdyz je potreba neco osetrit, vykonat rutinu. Tedy bud servisni program zavola read/write data treba, nebo nejaky vstupni HW zmacknul klavesi a posle preruseni, tehdy se JOS probudi a zacne zpracovavat, co se stalo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Muzu jako uzivatel nebo programator komunikovat primo s HW?

A

Ne, tato komunkace je z bezpecnostnich duvodu zprostredkovana JOS

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Co se prida do 64-bitove adresy OS v x86?

A

Hodne ruznych flags, ktere uchovavaji vysledky predchozich vypoctu.

Dulezity je IOPL - I/O privilege level, tedy uroven privilegii, JOS bezi v nejprivilegovanejsi urovni - muze vykonavat vsechny instrukce, uzivatelske programy maji omezenou privilegii - muzou vykoanvat pouze nektere instrukce

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Nekolik druhu privilegovane operace

A

Ovlivnuji stav celeho systemu - halt, reset, interrupt enable/disable, modifikace registru MMU, instrukce pro I/O…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Prechody mezi rezimy po spusteni pocitace

A
  1. Zapnuti stroje - bezi v systemovem rezimu (privilegovanem)
  2. Prejde se do uzivatelskeho (omezeneho)
  3. Prechod do systemoveho pouze pri prerusenich…
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Par dulezitych registru x86

A

eax, ebx, ecx,… esp - stack pointer, epc - program counter…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Porovnani MIPS, RISC-V, ARM, x86, AMD

A

Jsou to vsechny odlisne architektury, ktere maji svoje sady instrukci a jejich specifikace.

  1. MIPS, RISC-V, ARM - RISC architektury, mensi, jednodussi, primitivnejsi - prvni pouziti, nebo konzole nejake…
  2. x86, AMD- CISC architektury, slozitejsi, komplexnejsi instrukce a specifikace… - hlavni pouziti v pocitacich
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Co je obecne ochrana jadra OS?

A

Mechanismy pro kontrolu a rizeni pristupu k systemovym a uzivatelskym zdrojum, tedy pamet, HW, soubory…

System ochran prorusta vsemi vrstvami OS, detekuje chyby nebo neautorizovane pristupy.

Zamezuje fatalnim chybam, ktere by uzivatelske programy mohly vnest do celeho systemu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Jak z kodu programu prejit z uzivatelskeho rezimu do systemoveho?

A
  1. Bud specialni instrukci tohoto jazyka programovaciho - int, sysenter…
  2. Systemova volani - specialni isntrukce pro sluzby jadra (syscall)

Timto se rezim prepne do systemoveho rezimu a OS obsluhuje preruseni - koukne, jaky druh preruseni nastal (to jsem jako programator ulozil do specialniho eax registru a pak zavolalm obecny interrupt) a vybere podle lookup table ossetrovaci rutinu, pak se vrati do uzivatelskeho

Tedy:
1. nastavim do registru druh preruseni
2. zavolam interrupt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

ABI

A

Application BInary interface - je to interface pro komunikaci programu s OS, tedy definuje rozhrani preruseni - do jakych registru nastavit typ, jak zavolat rperuseni atd…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Jak se predavaji data a parametry do/z syscally?

A

Vstupni argumenty ulozim do specialnich registru, pak zavolam preruseni, osetrujci rutina mi do nich zapise vysledky nebo hodi na zasobnik

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hlavni sluzby jadra OS - pro co se pouziva a kdy se zapne priilege mode

A
  1. Prace se soubory - open, close, read, write
  2. Sprava souboru a adresaru - mkdir, rmdit, chmod…
  3. Sprava procesu - fortk, wait, exit, kill, signal
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Monoliticky vs mikrojaderni system

A
  1. Monoliticky - jadro OS je jeden celek a v systemovem rezimu se nachazeji vsechny komponenty krome uzivatelskych programu - tedy CPU, disky, souborovy system, sub ovladace, obecne ovladace atd…
    Je to jedna velka bublina do ktere uzivatelske programy sahaji.
    Tedy jadro je jeden velky program se vsim uvnitr.

Rizika - vsechny pod-komponenty uvnitr jadra se navzajem vidi amohou sahat na data, tedy treba USB ovladas ma pristup ke klici sifrovani disku a nejaky uzivatelsky program na to muze zautocit.

Tezko se v tom hledaji chyby.

  1. Mikrojadro - pristup, kdy jadro OS je velmi male a jednoduse se tam hledaji chyby. Pouze dierguje uzivatelske procesy, ktere pri ptrebe vstupu do systemoveho modu pozadaji mikrojadro a mikrojadro uz samo direguje tuto rutinu do pomocnych komponetn jako souborovy system nebo ovladace. ALE ZDE JSOU TYTO KOMPONENTY MIMO JADRO - tedy jsou to jakoby samostatne programy, ktere bezi jako procesy a mikrojadro k nim pristupuje a komunikuje s nim. Tedy je to rozbity system oproti monolitickemu celku.

Tedy vsechny komponenty jsou zvlast a pouze mikrojadro je spolecnym prunikem vsech a direguje jejich komunikaci. Tyto komponenty se nemohou videt navzajem tedy ani pristupovat k datum

Vyhody - modularnost, bezpecnost, distribuovanost, rozsiritelnost, prenositelnost

Priklad mikrojadra - Nova

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

pid fork()

A

rodic proces ma pid=100

Vytvori kopii daneho programu IDENTICKOU az na identifikator (kdy rodic ponecha svoje id, dostane id potomka a potomek dostane id=0), tedy ma skopirovanou historii - stack, promenne, registry atd a najednou ten samy program se vykonava paralelne dvakrat identicky az na rozlisitelne id.

Dvojity fork za sebou = vytvori se 4 programy: 1 program se rozdeli an dva, a pak kazdy z nich se dal rozdeli na dva atd…

Kazdy volani fork dalsi jen zvysuje puvodni id+1

f=fork() //zalozim potomka, pro rodice je f=101, pro potomka f=0
ff=fork() // potom i rodic udelaji dalsi 4 potomky
# pro rodice2 ff=102, pro potomka2 ff=0…

Tedy rodic dostava pid potomka, ale potomek to ma =0

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

pid wait()

A

Ceka na ukonceni libovolenho potomka, kam zadam jeho pid a rodic prijme jeho navratovou hodnotu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Proces

A

Neboli job,task - spusteny program, je identifikovatelny jednoznacnym cislem behem sve existence - process identifer

Tvori ho obsahy registru, otevrene soubory, ma svuj zasobnik, data a program.

Vlakna bezi v ramci procesu, tedy proces je vyssi level, ktery zaobaluje vlakna uvnitr

OS direguje procesy - jejich prideleni prostredku, vzajemnou komunikaci, spousteni a jejich ukonceni

  1. Spusteny proces je pri zapnuti systemu, pak skript rc spusti vsechny ostatni procesy, tedy kazdy proces az na prvni je potomkem rodice. Rodice a potomci se vetvi jako strom, sdileji vsechny zdroje rodice, muze nastat souber

Vytvorit mohu treba fork(). Proces konci bud syscallem exit(status), je to radne ukonceni, kdy proces preda svemu rodicu navratovou hodnotu status, jak byl treba ukoncen. V ten moment se radne uvolni jeho prostredky.
Nebo muze skoncit neradne - nemel dost pameti na alokaci, nebo se vyskyne vyjimka - deleni nulou, neprevilegovana operace…
Pokud se proces neukonci - je to zombie, neni ukonceny ale nemuze pracovat - tedy situace, kdy potomek odeslal exit(status) ALE RODIC SI TO ENPRECETL POMOCI wait(pid_potomek), tedy rodic ignoroval navrat potomka, potomek tedy neni ukoncenej ale uz uvolnil svoje prostredky

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Stavovy automat procesu

A
  1. Novy - teprv zalozeny, jeste nema prirpavene nektere casti
  2. Prirpaveny - muze bezet, ale ceka frontu prideleni procesoru
  3. Bezici - prave rpacuje
  4. Cekajici - dokoncil praci a ceka na dalsi udalost
  5. Ukonceny - hotovy proces, co ale jeste uplne neuvolnil prostredky

Existuje smycka mezi 2-4, tedy bezici proces se stava pripravenym po dokonceni

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Prepinani procesu - obrazek behu jednoho procesu a druheho

A

OS dierguje behy procesu, tedy pokud nastalo preruseni v P1 a ceka se treba na data, tak OS aby necekal, zapne P2, tedy ulozi stav P1, zmeni SP na jiny ukazatel P2 a pobezi mezitim P2, pak se treba zastavi, ulozi se jeho stav, zase se vrati SP na P1 a pobezi on, tedy stridave bezi…

Existuje vlastne fronta/nabidka ready procesu, ze kterych se vybere, ktery pobezi - je to fronta cekajicih procesu na spusteni

SP menim na stack daneho procesu, tedy ukazatel stacku zmenim na misto, kde je stack procesu, tim muze bezet ten proces

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Vlakno

A

Vlakno je beh v ramci procesu, tedy proces je spusteny program a apriori je jednovlaknovy - tedy samotny ten beh procesu je vlakno.

Vlakno ma svuj stack a svoje registry. V ramci procesu muze byt nekolik vlaken, ktere maji jak svoje data vlastni - lok. promenne, zasobniky, registry, tak i sdilena data, ktera patri celemu procesu - globalni promenne, kod programu, otevrene soubory, prava atd…

Vlakna mohou bezet na ruznych jadrech CPU
Paralelni vlakna tedy vykonavaji v nejakem procesu treba ruzne funkce zaroven (pokud se dokonale neovlivnuji), rychleji se vytvori a ukonci
obecne vytvoreni procesu je mnohem narocnejsi operace pro OS, vlakno je jednoduche, muzeme paralelizovat nejake vypocty, algoritmy, zpracovani jednoho objektu zaroven.

Vsechna vlakna v ramci procesu sdileji stejny adresni prostor, havarie jednoho vlakna procesu ukonci i vsechna ostatni vlakna

v cecku pthread.h, create, join…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Stavy vlaken

A

Stejne jako procesu - bezici, pripravene, cekajici, existuje fronta, ze ktere se vybere, podle planovani, jaka vlakna pobezi

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Co je program (terminologie vs proces vs vlakno)

A
  1. Program - soubor na disku, ma kod a data
  2. Proces - spusteny program, jadro OS provadi instrukce programu
    - ma vlastni adresni prostor v RAM, ma jedno vi vice vlaken
    - proces je kontejner vlakna, ale to vlakno je vlatne to, co bezi v procesu
  3. Vlakno - soubor instrukci vykonavanych procesorem v ramci jednoho programu
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Postup kompilace programu v C

A
  1. Predzpracovani - odstraneni komentaru, #define vsech direktiv, #include - nahraje primo potrebny kod, vlozi soubory…
  2. Lexialkni analyza - program se rozbije na tokeny a instrukce, zakladni gramaticka kontrola symbolu
  3. Syntakticka a semanticka analyza - pomoci bezkontextovych gramatik jazyka se zkontroluje, zda vsechny vyrazy a tokeny mohly byt vygenerovany sadou odvozovacich pravidel jazyka, vytvri se derivacn strom
  4. Mezikod - vytvori se pseudo-strojovy kod rozbity na trojice: operace a operandy
  5. Optimalizace - odstraneni zbytecnych operaci, odstraneni opakovanych vypocty, cyklu…
  6. Generator kodu - prirazeni promennych registrum, vysledkem je binarni spustitelny soubor, obsahujici strojove instrukce a inicializovana data
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Co je preempce

A

Moznost zastavit bezici proces a vratit ho do cekajiciho stavu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Planovace vlaken/procesu

A
  1. First come first served - FIFO, nejjednodussi, nepreemptivni, muze byt az moc dlouhe cekani nezavisle na priorite
  2. Shortest task first - prideluju kratsi prcocesy driv
  3. Pustime ten, co bude vime preemptivne, ze bude bezet nejkratsi dobu
  4. Prioritni fronta - posilam procesy podle jejich priority, nemusi to byt fer, prioritnejsi proces muze dokonce zastavit bezici proces a vzit mu zdroje

Problem startnuti - procsy s nizkou prioritou teoreticky nikdy nemusi se spustit, startvation, reseni - zrani, s delsi cekaci dobou procesy ziskavaji vyssi prioritu

  1. Cyklicke planovani - poustim procesy po kvantech, tedy v kazdem cyklu pustim malinky kousek procesu 1, pak proces 2, pak 3… v kruhove fronte jakoby, tedy poustim vsechny fer po malinkych kouskach ale
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Problemy synchronizace

A
  1. Race-condition - soupereni, soubeh, dve a vice vlaken upravujou zaroven tu samou promennou, kazde ma ale svoji lokalni jeji hodnotu, upravi ji a prepise hodnoty ostatnich vlaken. Je to nepredvidatelny, protoze OS prideluje procesum ruzne casy a nemuzeme presne rict, v jakej moment se pristoupi do kriticke sekce.
  2. Deadlock - cekani na uvolneni prostredku navzajem, pokud chci treba dva mutexy zaroven, tedy VZDY ZAMYKAM A UVOLNUJU LOCK VE STEJNEM PORADI, kdyz pracuju treba na dvou sdilenych zdrojich a chci uzamknout zaroven oba.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Reseni problemu synchronizace

A

Sdilena data davame do kriticke sekce, kam pristupuje pouze jedno vlakno zaroven.

Pristup do sdilene sekce muze byt:
1. Semafor - lock, unlock fungujici na jedne aritm promenne se citacem a pokud, ma treba 10 prostredku ktere muze uvolnit 10 vlaknum, takze vlakna se tam postupne hromadi a odecitaji hodnotu semfarou 10,9,8,…0, jamile je 0, tak je tam full kapacita a nikdo jiny tam uz nesmi, tedy se ceka, nez nejake vlakno je hotove a uvolni jednu polozku, inkremutuje semafor a uvolni misto dalsim ve fronte. Semafor je mutex s vetsi kapacitou

  1. Mutex - binarni zamek, semafor s hodnotami pouze 1|0, tedy lock nastavi mutex na 0 a zadne jine vlakno tam nesmi, jakmile proces je hotovy tak nastavi mutex na 1 a to pusti cekajici vlakna dovnitr
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Poazdavky na kritickou sekci

A
  1. Vzajemne vylouceni - pouze 1 proces v krit. sekci
  2. Zivost - vstup do volneho mutexu je rychly, neni nekonecny
  3. Ferovost - kazdy proces casem vstoupi do krit. sekce
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Podminkova promenna

A

Je to podminka, kterou musim otestovat, abych vstoupil do kriticke sekce. Je to reseni takvoe situace, ze potrebuju provadet nejaky vypocet v krit. sekci ALE POUZE za splnene nejake podminky, tj jinak bych se furt dotazoval - spleneno? splneno? splneno?…

Tato konstrucke mi dovoli se jakoby uspat a probudit se na nejaky signal.

mutex_lock() //musi byt VZDY uvnitr mutexu
while (neplati podminka)
cekej na signal
proved krit. vypocet
mutex_unclock

Tedy jak vstoupim do kriticke sekce, zjistim, ze jeste nemam co pocitat a uspim se (tim vystoupim z kriticke sekce). Potom treba producent vstoupi do kriticke sekce, nahraje tam nejaka data a POSLE SIGNAL PROBUZENI (tim vystoupi z kriticke sekce)

Probuzeny proces na to zareaguje, vstoupi do kriticke sekce a ZKONTROUJE SVUJ WHILE CYKLUS s podminkovou promennou, pokud je splnena, tak provede krit. vypocet a vystoupi z krit. sekce.

Treba implementace semarotu mohu udelat jako podminkvoa promenna + mutex

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Spinlokc

A

Je obecny semafor, ktery pouziva aktivni cekani misto blokovani procesu, tedy proces se “toci” - aktivne ceka, coz stoji min prostredku, nez kdyby byl uspan nebo blokovan, nebo rpeveden do stavu cekajici

33
Q

Coffmanovi podminky

A

4 podminky, ktere musi platit zaroven, aby doslo k deadlocku
1. Mutex - pouze jeden proces muze mit pristup zaroven ke sdilenym datum
2. Hold and Wait - proces, ktery uz ma nejaky zamknuty zdroj a potrebuje dalsi, ale ten dalsi je zamknuty jinym procesem - tedy cekani na uvolneni
3. Zdroje se nekradou - pouze proces, ktery vlastni zdroj ho muze dobrovolne uvolnit
4. Cyklicke cekani - uzavrena posloupnost cekajicih na sebe procesu v kruhu

34
Q

Nalezeni dadlocku v grafu

A

Situaci prevedu na graf, kde procesy a mutexy jsou vrcholy a hrany jsou vlastnene mutexy. Pokud se v grafu objevi cyklus - nastane deadlock, protoze se v budoucnu muze cekat na uvolneni mutexu…

Pokud zjistim, ze je tam mozny cyklus, tak pozastavim jeden z procesu tak dlouho, dokud jiny proces neuvolnil vsechny svoje mutexy

35
Q

Zpusoby reseni uvaznuti

A
  1. Prevence - bud zkusim grafove odhadnout, zda nastane deadlock teoreticky, nebo pisu program bez sdileni, nebo cisluju zdroje a vzdy muzu zazadat pouze o ten vetsi
  2. Detekce a obnoveni - detekuju deadlock (drahy algoritmus) a jeden proces killnu a obnovim jeho stavy a zapnu znovu
36
Q

Meziprocesova komunikace

A
  1. Signaly - jednobitove asynchronni komunikace, poslu jinemu procesu signal a on ho nejak zpracuje
  2. Roura - zaslani dat mezi procesy systemem FIFO, je to jako simulace neexistujicicho souboru ze kteryho ctu a do kteryho zapisuju mezi procesy, vytvorim pipe a nastavim tam stdin nebo stdout treba, zaviram konec, ktery nepotrebuju - je to komuniace rodic-potomci
  3. Pojmenovana roura - roura mezi dvema libovolnymi procesy, nemusi byt rodic-potomek, muzu to pouzivat jako simulaci programu - otevrit, zapsat, zavrit…
  4. Sdilena pamet - soubory mapovane do pameti, tedy vezmu soubor, namapuju do pameti procesu jako mmap a ostatni procesy ho muzou videt,zapisovat a cist, virtualni prostory dvou programu se protnou
  5. Pojmenovany semafor - semafor pro pojmenovanou roury a sdilenou pamet
  6. Fronta zprav - primitivni, pouze posilam zpravy do fronty a nekdo je cte
37
Q

Strankovani

A

Fyzickou realnou RAM pamet rozbijeme na ramce 4KiB - 4096 (2^12). Kazdemu procesu pridelime virtualni pamet (z bezpecnostnich a ovlivnovacich duvodu). Ji nastriame na stejne velke stranky, ktere ukazujou na ramce.

Stranky jsou poskladany za sebou od 0., 1., … n-ta stranka, kde kazda stranka ma 4096 polozek. Tedy pro popis v ramci jedne stranky potrebuju log2(4096) = 12 bitu. Tedy poslednich 12 bitu 32-bitove adresy mi pokryjou pozici ve strance. Potom hned dalsi bity mi urcuji cislo stranky. Zapisoujou se hexadecimalne:
treba adres
0x00002823 - poslednich 12 bitu urcuji pozici ve strance, TADY JSOU ALE HEXADECIMALNI CISLA (4 bity dlouhe), takze vezmu 3 posledni hex. cisla a
823 je pozice ve strance.
Dalsi cislo vlevo od toho mi rekne, ze je to 2. stranka, tedy hledam data ze 2. stranky na pozici 823 v ni.

Prevedu ji na realnou RAM adresu tak, ze podle tabulky stranek zjistim cislo ramce, (treba 3. ramec) a prictu k tomu moje posunuti uvnitr stranky:
0x2823 -> zjistim, ze je ve 3. ramci -> 0x3823, tedy musim vyhledat cislo ramce ale posunuti je stejnce

38
Q

Tabulka stranek

A

Je to jako loop-up dictionary ktery ma informaci o adresach:
ramec:stranka. Sama je ulozena v RAM

Musi byt ale stejne velka jako virtualni pamet, tedy ma stejne 1 milion polozek, jako 4GiB birtualni pamet (protoze 4GiB / 4KiB stranky = 1 milion polozek), aby mi popsala kazdou stranku.

Tj neni to primo key:value, ale spis ze na stejne pozici, kde je stranka ve virt. pameti, tak na STEJNE pozici v tabulce stranek je hodnota ramce a FLAG JESTLI JE STRANKA V RAM NEBO NE. Tedy je to jako dve pole a index v tabulce stranek ma hodnotu adresy ramce.

Muze mit ale extremne moc nul - poud stranka neni v RAM (protoze virtalni pamet je vetsi nez realna RAM a ne vsehcny stranky se dostanou do ramcu, je to pouze pohodlne prideleni pameti) - tedy se zavadi tabulka tabulek

Pro 64-bitovy system by tabulka stranek byla vetsi enz cela RAM, tedy se stepi

39
Q

TLB

A

Je to specialni cache v CPU pro rychly prevod stranky na ramec, tedy uz je to dictionary, abychom urychlili prevod z virt, adresy na realnou, protoze jinak bychom se museli podivat do tabulky stranek v RAM, co je pomale

40
Q

Dvojurovnove strankovani - Tabulka tabuelk

A

Je to stepeni jedne tabulky stranek na treba 1000 mensich-podtabulek. Pak existuje jedna tabulka tabulek v RAM, ktera ma 1000 polozek (aby popsala kazdou tabulku stranek).

Vyhody - prazdne/nulove tabulky stranek nedavame do RAM = usetreni pameti, tabulky stranek nemusi byt souvisle za sebou (pred tim stranky musely byt souvisly, protoze jsme meli index a hledali je ajko v poli), ted mame ukazatele na cele tabulky stranek.

Tedy adresa se mi rozpadla na:
[tabulka tabulek][tabulka stranek][pozice ve strance]
10 bitu, 10 bitu 12 bitu, tedy
najdu prislusnou tabulku, najdu prislusnou stranku, najdu pozici v ni

41
Q

Tri a viceurovnove strankovani

A

Pridavame dalsi tabulky tabulek a stepit do dal jemneji v pripade treba 64-bitove adresy

42
Q

MMU

A

Soucast CPU, ktera prevadi virtualni adresy na realne, jinak vyvola preeruseni pokud to nemuze udelat

43
Q

Copy on write

A

Je to lazy kopirovani stranek/strankovaci tabulky pri vytvoreni procesu.

Treba pri fork() se mi vytvoril novy proces, ktery je kopii rodice, ALE NEKOPIRUJU JESTE JEO STRANKY (protoze treba to ani nebude potreba), ALE napojim potomka na stranky/tabulku stranek rodice v RAM. Tedy mi ted oba koukaji na stejne ramce v RAM ALE ZAKAZAL JSEM JIM WRITE OPERACE.
Pokud tyto procesy jenom ctou data - vsechno OK, usetril jsem pamet i cas.

Pokud se ale pokusi o zapis, tak nastane chyba stranky (page fault - chybne nazyvany historicky segmentation fault) a OS v ten moment az pro potomka vytvori jeho vlastni osobni virtualni prostor a v RAM zanese jeho stranky a tabulky stranek…

Tedy je to copy-on-write - kopiruj virt. prostor az po pokusu o zapis

44
Q

Muzu nahrat vsechny stranky do RAM? Pokud ne, tak jak zaridim to, aby v pameti byla stranka, kdyz je RAM plna?

A

Nemuzu, virtualni pamet je vetsi nez RAM a RAM muze rychle dojit.
Tedy musim nejake ramce odkladat na disk a misti nich nahravat nove stranky (neco jako cache). Odkladaci strategie:

  1. FIFO - odklozim na disk nejstarsi ramec a nahradim ho novym
  2. Best case - vidim do budoucnosti a nahradim takovy ramec, ktery bude nejdele nepozuitej
  3. LRU - least recently used - kouknu zpatky, jaky ramec byl nejdele nepouzitej (ALE NEMUSI BYT NEJSTARSI)
  4. Druha sance - FIFO, ale u kazdeho ramce mame jeste priznak, zda uz mohl byt vyhozen nebo ne, tedy ma counter 1 az 0, pokud je 1, tak ho nemuzu vyhodit, pokud 0 - uz ho muzu vyhodit. Naopak, kdyz se objevi stranka, tak tomuto ramci nahodim counter = 1 (jakoze byl pouzit - dulezitej)
45
Q

Vypadek stranky

A

Pokud stranka neni namapovana do ram (neni ramec) - tedy musim nejaky ramec odlozit an disk a nahrat moji stranku. Neco jako cache miss

46
Q

Topologicke rozdeleni pameti 32-bitoveho systemu, virtualni pamet pridelena procesu

A

Od nejvyssich bitu 0xFFFFFFFF do 0x00000000

  1. Jadro OS (1 GiB, resi preruseni a vyjimky) - uzamcene pro uzivatele
  2. Zasobnik - roste dolu
  3. Prazdny prostor - pro rust zasobniku
  4. Sdielene knihovny - sdilene procesy
  5. Volny prostor - nahoru roste halda nebo mallock ohraniceny sdola brk
  6. Halda
  7. Globalni rpomenne
  8. Kod programu
  9. Nepouzito - null pointery…
47
Q

Malloc

A

Funkce pro najiti vice pameti, brk je ukazatel na prvni nepouzity bajt, je to takova hranice haldy.

48
Q

Streategie najiti mista pro malloc

A
  1. First fit - najdu prvni dost velkou diru pro pozadovanou velikost
  2. Next fit - je to first fit, ale s pameti, kde skoncil minule a pokracuje
  3. Best fit - projdu vsechny diry a vyberu jen tu nejuzsi
  4. Worst fit - vyberu nejsirsi diru
49
Q

Kdy ma smysl rikat, ze je system bezpecny?

A

Pouze v kontextu cilu zabezpeceni - tedy musime definovat, co povazujeme za hrozby a jaka mame opatreni vuci nim.

Cile zabezpeceni definuji:
1. Hrozby - konkretni utoky typove
2. Bezpecne stavy systemu - opatreni systemu antivirem, firewall…

Tedy definuji CO ma byt chraneno PROTI KOMU a za jakych PODMINEK

50
Q

CIA vlastnosti zabezpeceni

A
  1. Duvernost - X se nemsi dozvedet o Y
  2. Integrita - X nesmi ovlivnit Y
  3. Dostupnost - X nesmi znedostupnit Y pro Z
51
Q

Co by mel poskytovat OS v oblasti bezpecnosti?

A
  1. Mechanismy pro tvorbu bezpecnych systemu
  2. Moznost pomoci techto mechanismu implementovat politiku nastavenou administratorem - tedy treba ve firme bezpecnostni tym zavede nejakou politiku zabezpeceni a pouzije treba Windows notebooky, tak v OS provede takvoe upravy aby odpovidaly jejich politice. Jini uzivatele tuto politiku nesmi obejit
52
Q

Bezpecnot systemu je tak silna, jak je silny …

A

Nejslabsi clanek

53
Q

Bezne mechanismy zabezpeceni OS

A
  1. Kontrola pristupu - treba k souborum
  2. Autentizacni sstemy - potvryeni identity
  3. Logovani
  4. Sifrovani
  5. Sprava povereni - credentials kazdyeho uzivatele
  6. Automaticka aktualizace - pro co nejnovejsi verze

Casto se to plete s politikou - politika je ale jakasi business vrstva - mechanismu je nastroj implementujici business pozadavek

54
Q

Zasady bezpecnostiho designu

A
  1. Keep it stupid simple - co nejjednodussi mechanismy
  2. Uz bezpecne default default nastaveni - abych nenastavoval sam hned
  3. Otevreny navrh - nesnazit se oklamat nekoho nesmyslnym kodem
  4. Oddeleni pravomoci - vice roli, ne jen admin a user, jemne deleni roli
  5. Kontrola vstupnich dat - proti SQL injectiona tak
  6. Nejmensi pravomoci - pouze takova prava, ktera potrebuji minimalni
  7. Minimalizace sdileni dat a zavislosti
  8. Psychologicka prijatelnost - nikdo nechce slozity system pouzivat
55
Q

Trusted COmputing Base

A

Mnozina takovych entit systemu, kterym se veri - stoji na nich bezpecnost. Pokud selzou - system nemusi byt bezpecny. Jsou to jako axiomy ze tyto entity jsou bezpecne a sami zajistoujou bezecnost.

MUSI BYT MINIMALNI PRO DUVEROHODNOST - tedy minimalizuju moznost chyb

V praxi je to ale obrovska mnozina - OS, HW, SW, webove prohlizece…

56
Q

Rizeni pristupu k souborum zakladni mechanismus

A
  1. Pomoci matice - pristupova matice/ podle prav
  2. ACL - access contorl list - Pomoci sloupcu matice - tedy ke kazdemu souboru vytvorim jeho list pristupu uzivatelu a jejich prava k tomu, tedy kazdy soubor si uchovava seznam subjektu a jejich prava vuci nemu
  3. Podle radku matice - schopnosti - pro kazdy subjekt mame radek vsech objektu a moje prava vuci nim.

Nevyhody ACL - nejaky objekt vidi VSECHNY procesy ktere s nim mohou interagovat a muze toho zneuzit.
Naopak reseni Schopnosti vidi pouze jeden proces a jeho pristupova prava, nema tuseni o existenci zadnych jinych procesu

AMbientni autorita - treba uzivatel, ktery vidi ze existujou vsechny procesy, ale treba k nim nema prava. Je to poruseni zasad bezpecnosti a je to nevyhoda ACL - tedy ja vidim na vsechny ostatni, i kdyz nemam na ne prava

57
Q

Stack overflow

A

Je to utok typu buffer overflow - zakladni myslenka:
Do promenne zapisu vic dat nez je schopna pojmout, tim mohu prepsat nejaka data na zasobniku, treba navratovou hodnotu nekam do jine funkce a tam puzivat uz vlastni kod proti sobe

Stack smashing jinak receno.

Vetsinou program spadne - protoze jsem prepsal navratovou hodnotu na nejaky nesmsyl, ale hacker tam navratovou hodnotu muze prepsat na jeho funkce, treba shell ktery tam nahraje

Ochrany - nespistitleny zasobnik - tedy nelze spoustet kod ktery je na zasobniku - ale hackeri zacli nenahravat svoje kody, ale skakali uz do existujicich funkci v samotnem kodu - tedy skacu z funkce na funkce a vybiram co potrebuju (Return-oriented programming), takze hacker posila navratove hodnoty, kam se ma skocit

Nahodne rozlozeni adresniho prostoru - zpusob ochrany proti skakani navratovych adres tak, ze OS rozmisti instrukce navratu a adresy nahodne v pameti, i cly zasobnik nemusi byt na pevne adrese ale muze skakat nebo byt rozbity, tedy utocnik nevi, jak ma odhadnout dalsi skok

Retguard - sifrovani navratove adresy, kdyz na ni mam skocit, tak zkontroluju ze mi ji nikdo neprepsal

58
Q

Souborovy system

A

Je system orgranizace dat na disku - definuje co je soubor, jak se uklada a co jsou adresare, definuje hierarchickou strukturu adresaru, data = obsah souboru, metadata - informace o souborech

Pozadavky - efektivita - metadata nezaberou moc pameti
Rychlost
Nizka fragmentace - aby soubory nebyly rozhazeny nahodne
Spolehlivost - abych neprisel o data

59
Q

Partition disku

A

Je to logicky celek disku - rozdelim ho na nekolik partitionu, treba 1 disk ale vidim ho jako C, D, atd…, jsou to oddily

60
Q

Adresar

A

Jew to soubor se seznamem dvojic:

soubor:adresa, tedy proste uchovava odkazy na soubory uvnitr sebe, nesetridene defaultne

Modenri adresare uchovavaji soubory jako vyhledavaci B stromy

61
Q

Zakladni jednotka se kterou pracuej souborovy system

A

Blok - 4KiB, v techto blocich pracuje disk a SS

Superblok - urcuje metadata o SS, tedy ulozeni korenoveho adresare atd. napr 1. blok v disku

Informace o volnych blocich - OS musi vzdy mit prehled, ktery blok je volny a ktery obsazeny

Bloky ukladajici obsah souboru - datove bloky se samotnym obsahem souboru

62
Q

Zpusoby ulozeni obshu souboru

A
  1. Souvisle bloky - primitivni, dnes uz ne, jednoduche nalezeni ale problem s realokaci
  2. Spojove seznamy - datovy blok ma data i odkaz na dalsi blok, adresar ma odkaz na 1. blok, nevyhoda pro random access, nejde mapovat do pameti, problem jednoho bloku urizne cestu k dalsim blokum
  3. Indexova struktura - inode system, tabulka ukazatelu na bloky, vhodny pro random acces
63
Q

FAT

A

SS nejprimitivnejsi, dnes uz ne

File Allocaton Table

Disk je tvaru:
[superblok][fat1][fat2][root dir][data]

Tedy FAT je dulezita tabulka, proto je tam nakopirovana dvakrat pro jistotu

FAT tabulka:
Je to 2D tabulka policek, kde kazde policko reprezentnuje jeden blok na disku. Kazde policku ukazuje na dalsi blok souboru, tedy pokud SS mi rika, ze soubor1 zacina na bloku 0, tak se tam podivam ->
vidim ze 0. blok mi ukazuje na treba blok1 -> blok1 ukazuje na blok3…

Tedy je to jakysi spojovy seznam, kde znam zacatek kazdeho souboru a pak kazdy jeho blok ma odkaz na potomka

Nevyhody - problemy s realokaci, nejake soubory uz treba nemuzu rozsirovat, protoze hned za nim je plno, takze odkaz na potomka muze byt nekde hodne daleko (SOUBOR NEMUSI BYT SEKVENCEN ULOZENEJ) tedy pak jeho projiti je strasne pomale
- musime prochazet FAT polozky sekvencne

64
Q

iNode

A

inode je datova struktura ukladajici metadata o souborech.
UNIX systemy

Adresar vypada stejne - dvojice <jmeno>:<cislo></cislo></jmeno>

inode: uchovava metadata - velikost, majitel, prava, cas vytvoreni,… a pak:
tabulka odkazu na bloky disku, tedy on ma hlavicku
[meta data o souboru]
[odkaz na 1. blok]
[odkaz na 2. blok]
[…]

Vyhodny pro random access, hned vidim treba prostredek souboru.

JMENO NENI SOUCASTI INODE ALE ADRESARE

Pokud dojde misto pro zapis odkazu na bloky (inode ma omezenou veliksot treba 126 bajtu), tak misto primych odkazu zavedu NEPRIME bloky - tedy inode mi ukazuje na nejakou pomocnou tabulku, ktera ma nekolik odkazu uz na samotne bloky, tedy zavedu pomocne tabulky, ktere mi odkazujou na bloky, toto mohu stepit dal do stromove struktury pomocnych tabulek

Disk se tedy rozpadne na:
[superblok][inode bitmapa][data bitmapa][tabulka inodu][data]

Bitmapa mi ukazuje volne/zabrane inody jako bitovy priznak, datova bitmapa mi ukazuje volne bloky na disku pomoci priznaku, tedy pri vytvareni noveho souboru a zapisu do nej kouknu do i-bitmapy - vyberu volny inode, pak se podivam na b-bitmpau, vyberu volny blok a napojim ho do vybraneho inode

Mohu tuto strukturu preskupit tak, ze obe bitmapy dam vedle sebe a pak k nim nejakou SKUPINU dat, aby ta trojice byla vedle sebe a inody ukazovaly pouze do sve vlastni skupiny (aby disk nemusel sahat random na konec a zacatek treba). Tedy
[superblok][skupina1][skupina2][…]

skupina - i-bitmapa, d-bitmapa, datove bloky kousek

65
Q

Extent

A

Je to vylepseni inodu, kde inode neukazuje na jeden blok, ale ma dve cisla, treba 155-160, tzn ukazuje na souvisle bloky na adresach 155 az 160, tedy jeden ukazatel mi pokryje nekolik bloku, ale uz musim prochazet sekvencne jednu tu mnozinu abych se dostal k nejakemu konkretnimu bloku

66
Q

K jake nekonzistenci muze dojit v prubehu zapisu do souboru

A

Pri vytvoreni souboru a zapisu do nej musim zapsat na 3 mista:
i-bitmapa, d-bitmapa, data a at to udelam v jakemkoliv poradi, pokud v nejake fazi mi nekdo vypne elektrinu - nekonzistence.

Musi se to tedy udelat naraz atomicky bud vsechno nebo nic

Reseni:
1. Stare - po radnem zapisu se zapise flag, ze data jsou konzistentni,
pokud dojde k vypadku a pocitac se vypne, tak tam chybi ten flag, tzn pri spusteni pocitac vzdy podle toho provede kontrolu konzistence, ale je to extremne pomaly

  1. Zurnalovani
  2. Copy-on-wrte
67
Q

Zurnalovani

A

Je zpusob jak predejit datove nekonzistenci na disku. Je to dopredne logovani - tedy jeste pred tim, nez zacnu data modifikovat, zapisu si do zurnalu vsechny modifikace co budu delat, az pote je provedu. Pokud mi mezitim spadne system, tak podle zurnalu mohu obnovit chybejici modifikace a zpetne je provest

Zurnal je za superblokem a pred skupinami

Jeden zapis do zurnalu vypada jako kruhova fronta typu:
Zacatek transakce, inode, bitmapa, data, konec transakce

Tato bunka se commitne a zacne se provadet, pokud je zakoncena radne s kontrolou, tak se transakce vymaze ze zurnalu
Pokud tato bunka je porusena - tak se transakce neprovede vubec

Pokud nevymazu provedenou transakci, tak se proste zopakuje ale nevadi to, protoze vlastne data pouze nahradim sama sebou

Bariera - specialni operace, ktera rika, ze konec stransakce se provede POUZE pokud jsou provedeny predhchozi kroky, je to zpuisob jak predejit tomu, ze se zapise treba jenom:
Zacatek, bitmapa, Konec, Data, Inode, tedy doslo k prohozeni operaci, ale tvari se to jako normalni transakce co ma Zacatek a konec - bariera se dva pred konec

68
Q

Urovne zurnalovani

A
  1. Journal - vsechna data i metadata se zapisuji skrze zurnal, muze to byt ale pomale
    - maximalni ochrana, konzistence, ale vyssi rezie, pouziti v kriticke casti systemu
  2. Ordered - data za zapisujou primo na disk prvni, pak az metadata pres zurnal
    - kompromis mezi vykonem a konzistenci (dety data mohu zapsat na disk, pak system spadne, ale nemam bordel v inodech, tedy jsem proste prisel o nejaka NOVA data, ale ne stara)
  3. Write-back - data se zapisujou primo, metadata pres zurnal a muze to probehnout v libovolnem poradi.
    - rychlejsi pristup nez journal, ale mensi bezpecnost nez ordered, tedy muze se mi prepsat inode, ale data uz ne, tedy zavede se bordel do toho
69
Q

Co je virtualizace?

A

Je to abstrakce nejakeho HW pocitace a jeho simulace v SW - tedy simuluju nejaky hardware pomoci software - simuluju CPU, periferie a tak jako virtual machine jako nejaky program. V nem bezi OS.

Komponenty - hostitel - realny pocitac, ne kterem bezi virtualizace
- hypervizor a virtual machine monitor - software implementujici virtualni hardware, je to program, ktery simuluje hadrware virtualne
- host - OS ktery bezi ve virtualnim prostredi

  • jeden hostitel muze mit vice hostu v sobe
70
Q

Vyhody virtualizace

A
  1. Izolace - VM se navzajem a hostitel nevidi, tezsi utoky
  2. Nezavislost softwaru na hardwaru (jako obalka, kontejner)
  3. Vice OS na jednom pocitaci
  4. Moznost zastavit stav VM a pokracovat v behu na jinem zarizeni
  5. Vyvojove safe prostredni, kde pad systemu nezasahne cely pocitac
  6. Reverse engineering softwaru, viru…
71
Q

Cloud computing

A

Zakladem je virtualizce, tedy ja na serveru/v cloudu pozadam o prideleni virtualniho pocitace, kam nahraju program a on mi ho pocita, pomoci API…

72
Q

Typy virtualizace

A
  1. Virtualizace celeho systemu - host nevi, ze bezi virtualne
  2. Paravirtualizce - host vi, ze bezi ve VM, ale spolupracuje s nim dobrovoln
  3. Emulace celeho systemu - vsechnt komponenty HW jsou simulovane, vcetne vykonavani instrukci jinych systemu
  4. Virtualziace behoveho prostredi programu - Java VM treba, je to virtualni prostredi PRO JEDEN PROCES, nebo cely system
  5. Kontejnerizace aplikaci
73
Q

Kde bezi virtualni uzivatelsky a virtualni privilegovany rezim?

A

Oba v realnem uzivatelskem rezimu hosta, tedy pro hypervizora, ktery je v jadre OS je virtualni program vlastne obycejnym uzivatelskym program.

Aby virtualni proces se prepnul z virt. uzivatelskeho rezimu do virt. privilegovaneho rezimu - zavedu trap-and-emulate (ALE PRITOM SE NESMI PREJIT DO SKUTECNEHO PRIVILEGOVANEHO REZIMU KVULI BEZPECNOSTI)

74
Q

Citliva/privilegovana instrukce

A

Privilegovana instrukce - takova, kterou muze vykonavat jen jadro OS a ne uzivatel, pokus o jejich vykonani v uzivatelskem rezimu zpusobi preruseni

Citliva instrukce - takova, ktera meni globalni stav systemu - treba zakazani preruseni

Vsechny citlive instrukce musi byt privilegovane!

75
Q

Trap and emulate

A

Pokud VM se chce prepnout do sveho privilegovaneho rezimu (tedy zavola svuj syscall) ALE NESMI SE DOSTAT DO REALNEHO PRIVILEGOVANEHO REZIMU HOSTITELE tak se zavede technika trap-and-emulate:

Virtualni syscall je zaznamenan REALNYM systemem -> prejde do REALNEHO privilegovaneho rezimu -> zjisti, ze to zpusobil VM -> vrati se o mezikrok niz do REALNEHO uzivatelskeho (ale pro VM je to privilegovany) rezimu -> tam emuluje syscall -> po skonceni syscally zase skok do REALNEHO privilegovaneho rezimu -> zjisti, ze to zpusobil VM -> navrat jo dva kroky niz do REALNEHO uzivatelskeho rezimu (ktery je i virtualni uzivatelsky rezim)

Tedy uroven je:

  1. Realny privilegovany
  2. Realny uzivatelsky
    - 2.1. virtualni privilegovany
    - 2.2. virtualni uzivatelsky

Syscall z VM:
2.2. -> 1 -> 2.1. -> 1 -> 2.2 prechody

76
Q

Hypervizor vs VMM

A

Oba jsou nastroje implementujici HW ve vitualizaci

Hypervizor - zachytava virtualni sycally a vola VMM
Virtual machine monitor - emuluje cely virtualni HW

77
Q

Virtualizace strankovacich tabulek

A

Virtualni program dostane virtualizovanou virtualni pamet, kde ma virtualni stranky a virtualni tabulky stranek ALE pouze jako read-only.

Pokud chce virtualni proces zapsat do virtualni (stinove) stranky, tak dojde k page fault a VMM zkontroluje, zda ten pristup byl opraveny a spravny (kvuli bezpecnosti) a pokud ano, tak se zachyti toto preruseni a upravi se realna stranka (emulate)

78
Q

Hardwarove asistovana virtualizace 2 priklady

A
  1. Ciste SW virtualiazce muze byt pomala pri hodne prerusenich - protoze se musi furt skakat z virt. uz. rezimu do real. priv. rezimu, ktery skoci do virt. priv. rezimu a pak zase naopak zpatky.

Hardwarove reseni je, ze pro emulaci I/O operaci to muze emulovat hardware, aniz by to musel resit SW. Tedy I/O syscall skoci z virt.uz.rezimu ROVNOU do virt.priv.rezimu kde HW emuluje tu instrukci, pak o tom da vedet real.priv.rezimu a vraci se zpatky.

Timto se tedy setri zbytecne skakani, usetri se dva skoky. Zaroven SW neumi emulovat I/O operace, ale jen CPU, takze pro I/O operace se pouzije realny HW, ktery to umi

  1. Dvouvrstve strankovani - virtualni proces ma svoji virtualizovanou virtualni pamet. Zavedou se pomocne prevadeci virtualni strankovaci tabulky, ktere prevadeji virtualizovane stranky na realne stranky a pak se tyto realne stranky prevadi na realne fyzicke ramce, tedy se HW prida dalsi vrstva strankovani
79
Q

Virtualizace vstupu a vystupu

A
  1. Virtualizovana virtualni pamet
  2. Zavedeme virtualni registry, kam virtualni HW bude ukladat hodnoty (tak HW komunikuje s CPU)
  3. Temto virtualnim registrum priradime stranky ale jako not present
  4. Pri pokusu o zapsani do registru zpusobi vypadek stranky
  5. Hypervizor toto zachyti a posle pozadovanou operaci do VMM
  6. VMM provede patricnou operaci pres realny HW