SLEZSKA´ UNIVERZITA V OPAVEˇ FILOZOFICKO-PRˇ I´RODOVEˇ DECKA´ FAKULTA U´ STAV INFORMATIKY

OPERACˇNI´ SYSTE´ MY

Texty k prˇedna´sˇka´m

Poslednı´zmeˇny: 2. cˇervence 2007

Mgr. Sˇa´rka Vavrecˇkova´ fpf.slu.cz/~vav10ui

Opava 2007 OBSAH

1 U´ vod do operacˇnı´ch syste´mu˚ 1 1.1 Cojetooperacˇnı´syste´m ...... 1 1.2 Funkceoperacˇnı´hosyste´mu ...... 3 1.3 Typyoperacˇnı´chsyste´mu˚ ...... 4 1.4 Realtimove´operacˇnı´syste´my ...... 5 1.5 Distribuovane´operacˇnı´syste´my ...... 7

2 Struktura operacˇnı´ch syste´mu˚ 10 2.1 Za´kladnı´typy struktur operacˇnı´ch syste´mu˚ ...... 10 2.2 MS-DOSaWindowssDOSja´drem ...... 11 2.3 WindowsrˇadyNT ...... 16 2.4 Syste´myUnixove´hotypu ...... 19

3 Spra´va pameˇti 23 3.1 Modulspra´vcepameˇti ...... 23 3.2 Rea´lne´metody prˇideˇlova´nı´pameˇti ...... 25 3.2.1 Prˇideˇlenı´jedne´souvisle´oblasti pameˇti ...... 25 3.2.2 Prˇideˇlova´nı´bloku˚pevne´velikosti ...... 26 3.2.3 Dynamicke´prˇideˇlova´nı´bloku˚pameˇti ...... 27 3.2.4 Segmentace ...... 28 3.2.5 Jednoduche´stra´nkova´nı´ ...... 30 3.3 Rˇ esˇenı´fragmentacepameˇti ...... 31 3.4 Virtua´lnı´pameˇt’...... 33 3.4.1 Stra´nkova´nı´nazˇa´dost ...... 34 3.4.2 Segmentace se stra´nkova´nı´m na zˇa´dost ...... 37 3.4.3 Swapova´nı´procesu˚...... 37

i ii

3.5 Spra´va pameˇti v neˇktery´ch operacˇnı´ch syste´mech ...... 38 3.5.1 MS-DOSaWindows ...... 38 3.5.2 Unixove´syste´my vcˇetneˇLinuxu ...... 40 3.5.3 MacOS...... 41

4 Procesy 43 4.1 Evidenceprocesu˚ ...... 43 4.2 Beˇhprocesu˚amultitasking ...... 45 4.3 Multithreading ...... 49 4.4 Spra´vafrontprocesu˚ ...... 51 4.5 Prˇideˇlova´nı´procesoru ...... 53 4.5.1 Fronta(FCFS) ...... 54 4.5.2 Cyklicke´pla´nova´nı´(RR) ...... 54 4.5.3 Nejkratsˇı´u´loha(SPN) ...... 55 4.5.4 Priority...... 56 4.5.5 Kombinace metod s vı´ce frontami ...... 57 4.6 Komunikaceprocesu˚ ...... 58

5 Synchronizace procesu˚ 60 5.1 U´ voddoproblematiky ...... 60 5.2 Petrihosı´teˇ...... 61 5.3 Za´kladnı´synchronizacˇnı´u´lohy ...... 63 5.3.1 Kriticka´sekce ...... 63 5.3.2 Producent–konzument ...... 64 5.3.3 Model–obraz ...... 66 5.3.4 Cˇtena´rˇi–pı´sarˇi...... 67 5.3.5 Peˇthladovy´chfilozofu˚...... 68 5.3.6 Soubeˇhprocesu˚...... 69 5.4 Implementace cˇeka´nı´prˇed kritickou sekcı´ ...... 70 5.5 Synchronizacˇnı´na´stroje operacˇnı´ho syste´mu ...... 74 5.5.1 Semafory...... 75 5.5.2 Mechanismuszpra´v ...... 78 5.5.3 Monitory...... 79 5.5.4 RPC...... 79

6 Uva´znutı´procesu˚(Deadlock) 81 6.1 Za´kladnı´pojmy ...... 81 6.2 Popis stavu prˇideˇlenı´prostrˇedku˚ ...... 82 6.3 Podmı´nkyvznikuuva´znutı´ ...... 83 6.4 Prevenceuva´znutı´ ...... 84 6.5 Prˇedpovı´da´nı´uva´znutı´...... 86 6.5.1 Graf na´roku˚a prˇideˇlenı´prostrˇedku˚ ...... 86 iii

6.5.2 Banke´rˇu˚valgoritmus...... 87 6.6 Detekceuva´znutı´ ...... 89 6.6.1 U´ prava grafu prˇideˇlenı´prostrˇedku˚...... 90 6.6.2 U´ pravaBanke´rˇovaalgoritmu ...... 90 6.7 Reakce prˇi zjisˇteˇnı´zablokova´nı´ ...... 92

7 Spra´va periferiı´ 93 7.1 I/Osyste´m...... 93 7.2 Druhyperiferiı´ ...... 94 7.3 Ovladacˇe...... 95 7.4 Prˇerusˇenı´...... 96

8 Pameˇt’ova´me´dia 99 8.1 Za´kladnı´pojmy ...... 99 8.2 Adresa´rˇova´struktura...... 101 8.3 Souboryasyste´msouboru˚...... 104 8.4 Souborove´syste´myveWindows ...... 106 8.4.1 Starsˇı´verze souborovy´ch syste´mu˚typu FAT ...... 106 8.4.2 VFATaFAT32...... 109 8.4.3 Souborovy´syste´m NTFS ...... 111 8.4.4 Srovna´nı´souborovy´ch syste´mu˚pro Windows ...... 114 8.5 Souborove´syste´myproLinux ...... 115 8.5.1 VFS...... 115 8.5.2 Souborove´syste´my typu extxfs...... 116 8.5.3 Dalsˇı´zˇurna´lovacı´souborove´syste´my ...... 120 8.5.4 Virtua´lnı´souborove´syste´my ...... 121 8.5.5 Srovna´nı´Linuxovy´ch souborovy´ch syste´mu˚ ...... 122

9 Spra´va disku˚ 123 9.1 Proble´mysBIOSem...... 123 9.2 Za´kladnı´pojmy ...... 124 9.3 Strukturadisku ...... 124 9.4 Na´strojeprospra´vudisku˚ ...... 126 9.5 Zava´deˇcı´programy ...... 128 9.6 Mozˇnosti instalace operacˇnı´ch syste´mu˚ ...... 132 9.7 Emulace jine´ho operacˇnı´ho syste´mu ...... 133 9.7.1 Virtua´lnı´pocˇı´tacˇe...... 134 9.7.2 Emula´tory operacˇnı´ho syste´mu a podsyste´my ...... 135 iv

10 Graficky´subsyste´m 137 10.1 Za´kladnı´pojmy ...... 137 10.2 XWindowSystem...... 139 10.3 Technologie rozsˇirˇujı´cı´mozˇnosti grafiky ...... 141

A Vy´stupyneˇktery´chdiskovy´chna´stroju˚proWindows 144

Literatura 146

Rejstrˇı´k 149 KAPITOLA 1

U´ vod do operacˇnı´ch syste´mu˚

Pojem operacˇnı´syste´m budeme v na´sledujı´cı´m textu cha´pat trochu sˇı´rˇeji nezˇje obvykle´. Zahrneme zde take´software, ktery´slouzˇı´k rˇı´zenı´jake´hokoliv vy´pocˇetnı´ho syste´mu, vcˇetneˇ programovany´ch laserovy´ch tiska´ren. Tato kapitola je u´vodem do problematiky, sezna´mı´me se zde se za´kladnı´mi pojmy, definicı´ operacˇnı´ho syste´mu, funkcemi a typy operacˇnı´ch syste´mu˚.

1.1 Co je to operacˇnı´syste´m

Pro definova´nı´operacˇnı´ho syste´mu pouzˇijeme na´sledujı´cı´pojmy:

Vy´pocˇetnı´syste´m (naprˇı´klad pocˇı´tacˇ) je stroj na zpracova´nı´dat prova´deˇjı´cı´samo- cˇinneˇprˇedem zadane´operace. Instrukce – nejkratsˇı´, jizˇda´le nedeˇlitelny´povel, teˇmto povelu˚m rozumı´procesor (viz da´le). Zaka´zka – pokyn, ktery´ma´vy´pocˇetnı´syste´m prove´st. Fyzicke´prostrˇedky vy´pocˇetnı´ho syste´mu jsou:

• procesor – vykona´va´zadane´instrukce, urcˇuje hardwarovou platformu sys- te´mu (naprˇ. , x86-64, AMD, AMD64, PowerPC, Alpha, MIPS, atd.), ve vy´pocˇetnı´m syste´mu prˇedpokla´da´me existenci alesponˇjednoho procesoru,

1 KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 2

• vı´ceja´drovy´procesor – procesor s vı´ce ja´dry, tedy jediny´integrovany´obvod s vı´ce ja´dry procesoru˚(narozdı´l od vı´ceprocesorove´ho syste´mu, kde ma´ kazˇde´„ja´dro“ vlastnı´integrovany´obvod) – dnes se objevujı´dvouja´drove´ procesory, neple´st si s vı´ceprocesorovy´m syste´mem, kde kazˇdy´procesor ma´vlastnı´integrovany´obvod, • vnitrˇnı´pameˇt’ (operacˇnı´pameˇt’) – rychla´, obvykle chipy, podle ru˚zny´ch vlastnostı´ rozlisˇujeme RAM (Random Access Memory), ROM (Read- Only Memory), DRAM, SDRAM, atd.), pouzˇı´va´se obvykle beˇhem vy´- pocˇtu a pocˇı´ta´se s tı´m, zˇe po dokoncˇenı´vy´pocˇtu budou zabrane´adresy uvolneˇny, • vneˇjsˇı´ pameˇt’ – slouzˇı´ k ulozˇenı´ dat a programu˚, ktere´ zrovna nejsou zpracova´va´ny, je sta´la´(relativneˇ), jsou to pevne´disky (HD – Hard Disk), CD, DVD, diskety, USB flash disky, pameˇt’ove´karty, atd., • vstupneˇ-vy´stupnı´syste´m (V/V, I/O syste´m, perifernı´zarˇı´zenı´) – souhrn vsˇech zarˇı´zenı´urcˇeny´ch pro komunikaci s okolı´m, naprˇı´klad monitor, tiska´rna, kla´vesnice.

Logicke´prostrˇedky vy´pocˇetnı´ho syste´mu jsou:

• uzˇivatel – kazˇdy´, do zada´va´zaka´zku vy´pocˇetnı´mu syste´mu, • u´loha (job) – posloupnost (obecneˇsouhrn) cˇinnostı´potrˇebny´ch ke splneˇnı´ zaka´zky, jde tedy o specifikova´nı´postupu rˇesˇenı´zaka´zky, • krok u´lohy – cˇa´st u´lohy, prvek posloupnosti provedenı´ u´lohy obvykle prˇedstavujı´cı´spusˇteˇnı´konkre´tnı´ho programu (u´loha mu˚zˇe by´t posloup- nostı´vı´ce programu˚, jejichzˇpra´ce probı´ha´simulta´nneˇnebo navazuje), • proces – instance u´lohy nebo kroku u´lohy, je prova´deˇn ve vnitrˇnı´ pameˇti za pouzˇitı´konkre´tnı´ch dat.

Pameˇt’ovy´prostor syste´mu je souhrn vsˇech pameˇtı´syste´mu, vnitrˇnı´ + vneˇjsˇı´pameˇti. Pameˇt’ovy´prostor procesu je souhrn vsˇech pameˇt’ovy´ch mozˇnostı´procesu, tedy jemu prˇideˇlena´operacˇnı´pameˇt’pro programovy´ko´d a data procesu. Adresovy´prostor procesu je pameˇt’ovy´prostor ve vnitrˇnı´pameˇti, ktery´je vyhrazen tomuto procesu. Je to pameˇt’ovy´prostor procesu, na ktere´m jsou zavedeny adresy. Holy´pocˇı´tacˇ je vy´pocˇetnı´syste´m s pouze nejza´kladneˇjsˇı´m pameˇt’ovy´m vybavenı´m, to se obvykle nazy´va´BIOS. KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 3

Definice 1.1 Operacˇnı´syste´m vy´pocˇetnı´ho syste´mu je spra´vce fyzicky´ch prostrˇedku˚da- ne´ho syste´mu, ktery´zpracova´va´pomocı´logicky´ch prostrˇedku˚u´lohy zadane´uzˇivatelem. Pod pojmem softwarova´platforma syste´mu obvykle cha´peme pra´veˇoperacˇnı´syste´m.

1.2 Funkce operacˇnı´ho syste´mu

Operacˇnı´ syste´m ma´ mnoho funkcı´, z nichzˇ neˇktere´ jsou nutne´ a vyply´vajı´ uzˇ z definice operacˇnı´ho syste´mu, jine´azˇtak nutne´nejsou a ne kazˇdy´operacˇnı´syste´m je zajisˇt’uje. Na´sledujı´cı´vy´cˇet nenı´u´plny´, specializovane´operacˇnı´syste´my mohou zajisˇt’ovat i mnoho dalsˇı´ch jiny´ch funkcı´. Nejdu˚lezˇiteˇjsˇı´m funkcı´m jsou vyhrazeny samostatne´kapitoly. Spra´va pameˇti prˇedstavuje vedenı´evidence vnitrˇnı´pameˇti, prˇideˇlova´nı´pameˇti pro- cesu˚m, rˇesˇenı´ situacı´ vznikajı´cı´ch prˇi nedostatku pameˇti, spra´vu virtua´lnı´ pameˇti. Spra´va procesu˚ znamena´evidenci spusˇteˇny´ch procesu˚, pla´nova´nı´prˇideˇlova´nı´pro- cesoru, sledova´nı´stavu procesu˚, zajisˇt’ova´nı´komunikace mezi procesy. Spra´va periferiı´ zahrnuje vytva´rˇenı´rozhranı´mezi I/O zarˇı´zenı´mi a procesy, sledo- va´nı´stavu zarˇı´zenı´, prˇideˇlova´nı´zarˇı´zenı´procesu˚m a rˇesˇenı´mozˇny´ch kolizı´ s tı´m souvisejı´cı´ch, atd. Spra´va syste´mu – v modernı´ch syste´mech je obvykle´rozlisˇova´nı´ru˚zny´ch rezˇimu˚ pra´ce syste´mu, alesponˇuzˇivatelsky´a privilegovany´. V uzˇivatelske´m rezˇimu probı´hajı´beˇzˇne´cˇinnosti, zatı´mco privilegovany´rezˇim je urcˇen pro u´drzˇbu, in- stalaci, konfiguraci. Mu˚zˇeme zde zahrnout take´bezpecˇnostnı´ funkce syste´mu – ochranu proti sˇkodlivy´m ko´du˚m (naprˇ. viry), porucha´m a neopra´vneˇne´mu prˇı´stupu. Spra´va souboru˚ (ty´ka´se dat na vneˇjsˇı´ch pameˇt’ovy´ch me´diı´ch) znamena´nejen vy- tva´rˇenı´rozhranı´umozˇnˇujı´cı´ho procesu˚m prˇistupovat k souboru˚m (a take´ji- ny´m datu˚m) jednotny´m zpu˚sobem, ale take´udrzˇova´nı´informacı´o strukturˇe souboru˚na disku, kontrolu prˇı´stupovy´ch pra´v procesu˚k souboru˚m. Spra´va uzˇivatelu˚ – syste´m vede informace o uzˇivatelı´ch syste´mu a jejich cˇinnosti, zajisˇt’uje prˇihlasˇova´nı´a odhlasˇova´nı´uzˇivatelu˚. Spra´va u´loh – tote´zˇ, co se ty´ka´uzˇivatelu˚, ty´ka´se take´u´loh a jejich pru˚beˇhu. Uzˇivatelske´rozhranı´ (user interface – UI) je rozhranı´mezi uzˇivatelem a syste´mem. Jedna´se o sadu programu˚, ktere´slouzˇı´ke komunikaci mezi uzˇivatelem a ope- racˇnı´m syste´mem. KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 4

Programove´rozhranı´ je rozhranı´mezi programy (procesy) a vy´pocˇetnı´m a operacˇ- nı´m syste´mem, obvykle se oznacˇuje API (Application Programming Inter- face). Veˇtsˇinou je prˇedstavova´no sadou knihoven (ve Windows naprˇ. DLL knihovny), ktere´mu˚zˇe program vyuzˇı´vat pro svou pra´ci (graficke´prvky roz- hranı´, dialogova´okna, funkcˇnı´prvky, rozhranı´cˇasovacˇe, atd.).

1.3 Typy operacˇnı´ch syste´mu˚

Operacˇnı´syste´my deˇlı´me podle pocˇtu ovla´dany´ch procesoru˚na

• jednoprocesorove´ (monoprocesorove´) – Windows s DOS ja´drem (verze 9x, ME), • vı´ceprocesorove´ (multiprocesorove´) – unixove´ syste´my vcˇetneˇ Linuxu, Win- dows s NT ja´drem (NT, 2000, XP, Vista), doka´zˇou rozpla´novat alesponˇneˇktere´ u´lohy tak, aby mohly by´t zpracova´va´ny na vı´ce procesorech za´rovenˇ. Prˇi asy- metricke´m multiprocessingu (ASMP) je jeden procesor vyhrazen pro procesy syste´mu a uzˇivatelske´procesy beˇzˇı´na ostatnı´ch procesorech, prˇi symetricke´m multiprocessingu (SMP) mu˚zˇe ktery´koliv proces beˇzˇet na ktere´mkoliv proce- soru.

Ve skutecˇnosti i v beˇzˇny´ch desktopovy´ch pocˇı´tacˇı´ch, ktere´neoznacˇujeme jako vı´- ceprocesorove´, najdeme vı´ce procesoru˚. Jeden z nich je hlavnı´, ostatnı´jsou urcˇeny pro konkre´tnı´cˇinnosti a jejich u´kolem je odlehcˇit hlavnı´mu procesoru od „rutin- nı´ch“ nebo specia´lnı´ch cˇinnostı´a urychlit pra´ci cele´ho syste´mu. Takovou funkci ma´ naprˇı´klad graficky´procesor na graficke´karteˇ, ktery´prˇebı´ra´zejme´na zpracova´va´nı´ pozˇadavku˚3D grafiky. Nejde o vı´ceprocesorovy´syste´m, protozˇe pomocne´proce- sory nezpracova´vajı´beˇzˇnou sadu instrukcı´, ale pouze svou specifickou sadu. Pra´veˇ s graficky´m procesorem pracujı´OpenGL, Direct3D apod. (viz kap. 10.3). Podle slozˇitosti spra´vy uzˇivatelu˚deˇlı´me operacˇnı´syste´my na

• jednouzˇivatelske´ (monouzˇivatelske´) – Windows s DOS ja´drem, • vı´ceuzˇivatelske´ (multiuzˇivatelske´, multiuser) – unixove´syste´my,Windows s NT ja´drem, majı´propracovanou spra´vu uzˇivatelu˚, ktera´umozˇnˇuje v syste´mu pra- covat vı´ce uzˇivatelu˚m najednou (tj. ve stejny´okamzˇik) bez vza´jemne´ho ovliv- nˇova´nı´, uzˇivatele´se mohou prˇihlasˇovat na termina´lech prˇipojeny´ch k pocˇı´tacˇi nebo v prˇı´padeˇserveru po sı´ti. Tyto syste´my prˇedevsˇı´m musı´zajistit prˇı´sne´ oddeˇlenı´prostrˇedku˚(naprˇ. pameˇti) vyuzˇı´vany´ch ru˚ zny´mi uzˇivateli.

Podle pocˇtu provozovany´ch programu˚(podrobneˇji viz kap. 4.2) na KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 5

• jednoprogramove´ (monoprogramove´) – v jednom okamzˇiku mu˚zˇe by´t spusˇteˇn jen jeden program, • vı´ceprogramove´ (multiprogramove´) – v jednom okamzˇiku mu˚zˇe by´t spusˇteˇno i vı´ce programu˚, da´le zde odlisˇujeme podskupinu vı´ceu´lohove´ (multitaskove´) syste´my, ktere´umozˇnˇujı´kromeˇtoho i sdı´lenı´prostrˇedku˚ mezi procesy teˇchto programu˚(spra´va vnitrˇnı´pameˇti, prˇideˇlova´nı´tiska´rny apod.). Vı´ceprogramove´syste´my, ktere´nejsou vı´ceu´lohove´(tj. jsou jednou´lohove´), rˇesˇı´ tento proble´m naprˇı´klad odlozˇenı´m vesˇkere´ho pameˇt’ove´ho prostoru „odsta- vene´ho“ programu na vneˇjsˇı´pameˇt’ nebo do chra´neˇne´ cˇa´sti vnitrˇnı´pameˇti a na´sledny´m obnovenı´m stavu ve chvı´li, kdy tento program ma´ pokracˇovat ve sve´cˇinnosti. Podle schopnosti pra´ce v sı´ti na • loka´lnı´ – Windows s DOS ja´drem, v sı´ti typu klient-server mohou by´t jen klienty, • sı´t’ove´ – unixove´syste´my a Windows s NT ja´drem, kromeˇklientske´verze majı´ take´serverovou verzi. Podle mı´ry specializace na • specia´lnı´ – jsou specializovane´na jeden typ (nebo neˇkolik ma´lo typu˚ ) u´loh, • univerza´lnı´ – beˇzˇne´operacˇnı´syste´my na PC, rˇesˇı´ru˚zne´typy u´loh. Rozlisˇujeme take´podskupiny operacˇnı´ch syste´mu˚– realtimove´a distribuovane´.

1.4 Realtimove´operacˇnı´syste´my

Realtimove´operacˇnı´syste´my jsou operacˇnı´syste´my pracujı´cı´v rea´lne´m cˇase. Po- uzˇı´vajı´se prˇedevsˇı´m tam, kde jsou vysoke´pozˇadavky na interaktivitu syste´mu, zada´vane´u´lohy musı´by´t vyrˇı´zeny te´meˇrˇokamzˇiteˇnebo ve vhodneˇkra´tke´m cˇase. Jde naprˇı´klad o syste´my na rˇı´zenı´letadel, neˇktery´ch vy´robnı´ch provozu˚, laboratorˇı´, elektra´ren vcˇetneˇatomovy´ch, v automobilove´m pru˚myslu, atd. Realtimovy´syste´m nemusı´reagovat okamzˇiteˇ, je pouze pozˇadova´na „hornı´cˇa- sova´hranice“, tedy musı´by´t zarucˇena maxima´lnı´doba reakce v nejhorsˇı´m mozˇne´m prˇı´padeˇ. Beˇzˇne´operacˇnı´syste´my s multitaskingem toto zarucˇit nemohou, zvla´sˇteˇ pokud je spusˇteˇno hodneˇprocesu˚, trˇebazˇe obvykle nabı´zejı´mozˇnost prˇideˇlit pro- cesu tzv. realtimovou prioritu vy´razneˇvysˇsˇı´nezˇje priorita beˇzˇny´ch procesu˚. Prˇesto jsou mozˇnosti, jak tyto operacˇnı´syste´my upravit, aby pracovaly jako realtimove´. KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 6

Realtimova´priorita existuje i u klasicky´ch operacˇnı´ch syste´mu˚, ale narozdı´l od realtimovy´ch zde nelze zarucˇit maxima´lnı´dobu zpracova´nı´procesu, trˇebazˇe takovy´ proces ma´prˇednost prˇed procesy s jiny´mi typy priorit. Veˇtsˇina realtimovy´ch syste´mu˚ma´male´ja´dro (mikroja´dro), ktere´plnı´pouze nej- du˚lezˇiteˇjsˇı´funkce (prˇedevsˇı´m spra´vu procesu˚, prˇı´padneˇspra´vu pameˇti apod.), zby- tek syste´mu je implementova´n jako beˇzˇne´procesy. Tento model odpovı´da´strukturˇe typu klient-server (viz kapitola 2). Pokud syste´m vznikl prˇepsa´nı´m z klasicke´ho syste´mu, cˇasto ja´dro pu˚vodnı´ho syste´mu je mikroja´drem „odstaveno“ a beˇzˇı´pouze jako jeden z procesu˚(to je prˇı´pad mnohy´ch upravovany´ch unixovy´ch syste´mu˚). Da´le uva´dı´me jeden realtimovy´syste´m vznikly´podstatny´m upravenı´m uni- xove´ho syste´mu, jeden vytvorˇeny´ u´pravou Linuxu a jednu mozˇnost, jak prˇidat podporu rea´lne´ho cˇasu do Windows s NT ja´drem.

QNX je realtimovy´ syste´m postaveny´ na hodneˇ upravene´m unixove´m klonu. Ma´ male´ mikroja´dro a neˇkolik nejdu˚lezˇiteˇjsˇı´ch serveru˚ (spra´va procesu˚, spra´va pameˇti apod.), zbytek syste´mu beˇzˇı´jako beˇzˇne´procesy. Vyznacˇuje se mimorˇa´dnou stabilitou a rychlostı´, a to i prˇi pra´ci v graficke´m rozhranı´. Beˇzˇı´vy´borneˇi na slabsˇı´ch pocˇı´tacˇı´ch. Vyznacˇuje se vy´bornou podporou sı´teˇ, da´ se take´pouzˇı´t pro prˇı´stup na internet v prˇı´padeˇ, zˇe pevny´disk je z neˇjake´ho du˚vodu nedostupny´. Je kompatibilnı´ s normou POSIX. Je to pu˚vodneˇkomercˇnı´syste´m, ale ke stazˇenı´je take´neˇkolik ru˚zneˇrozsa´hly´ch nekomercˇnı´ch verzı´(OpenQNX). Nevy´hodou je nedostatek aplikacı´pro tento sys- te´m, ale vzhledem k tomu, zˇe jde vlastneˇo unixovy´syste´m, nenı´ takovy´proble´m portovat na QNX unixove´aplikace (na internetu vcˇetneˇstra´nek vy´robce tohoto syste´mu je k nalezenı´mnoho aplikacı´takto upraveny´ch pro QNX).

RTLinux je upraveny´. Ma´realtimove´mikroja´dro, samotne´linuxove´ja´dro beˇzˇı´jako samostatny´proces s nizˇsˇı´prioritou. Syste´m byl vytva´rˇen tak, aby za´sahu˚ do pu˚vodnı´ho Linuxu bylo co nejme´neˇ. Zpracova´nı´prˇerusˇenı´1 (tedy pozˇadavku˚, ktere´ by prˇı´padneˇ mohly by´t i realtimove´) probı´ha´ tak, zˇe nejdrˇı´v je prˇerusˇenı´ zachyceno mikroja´drem, a teprve tehdy, kdyzˇ cˇas procesoru nevyzˇaduje zˇa´dny´ realtimovy´proces, je prˇerusˇenı´prˇeda´no pu˚vodnı´mu linuxove´mu ja´dru, ktere´je jizˇ zpracuje klasicky´m zpu˚sobem. Tento syste´m je stejneˇjako veˇtsˇina jiny´ch Linuxu˚ volneˇke stazˇenı´na internetu. 1Prˇerusˇenı´znamena´prˇerusˇenı´norma´lnı´ho beˇhu programu. Mu˚zˇe to by´t naprˇı´klad prˇerusˇenı´ generovane´kla´vesnicı´(po stisku kla´vesy se program o tom musı´doveˇdeˇt a vhodneˇreagovat). KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 7

RTX (RealTime eXtension) je modul, ktery´ rozsˇirˇuje mozˇnosti Windows s NT ja´drem (NT/2000/XP) smeˇrem k realtimovy´m syste´mu˚m. Nejde tedy o realtimovy´ syste´m, pouze o na´stavbu pro operacˇnı´syste´m klasicke´ho typu. K syste´mu je prˇida´no zvla´sˇtnı´rozsˇı´rˇenı´vrstvy HAL (RTX Real-time HAL Ex- tender), nad ktery´m beˇzˇı´novy´subsyste´m rea´lne´ho cˇasu (RTX RTSS), v tom pracujı´ procesy cˇisteˇreal-timove´. S tı´mto subsyste´mem komunikuje RTX ovladacˇ, ktery´ umozˇnˇuje beˇzˇet take´Win32 procesu˚m s podporou pro RTX (real-timovy´m proce- su˚m vyuzˇı´vajı´cı´m take´prostrˇedky Windows). Dalsˇı´informace viz stra´nky firmy Microsoft, ve vyhleda´va´nı´zadejte rˇeteˇzec rtx real-time .

1.5 Distribuovane´operacˇnı´syste´my

Distribuovany´syste´m2 (nejen operacˇnı´) je syste´m splnˇujı´cı´tyto podmı´nky:

• pracuje na vı´ce nezˇjednom procesoru (mu˚zˇe to by´t i vhodneˇnavrzˇena´a spra- vovana´pocˇı´tacˇova´sı´t’), • ma´svu˚j program rozdeˇlen na (samostatne´) cˇa´sti, ktere´vza´jemneˇkomunikujı´, • kazˇda´takova´cˇa´st je (mu˚zˇe by´t) zpracova´va´na na jine´m procesoru se zajisˇteˇ- nı´m co nejveˇtsˇı´transparentnosti.

Distribuovanost tedy znamena´mozˇnost co nejvı´ce rozlozˇit vy´pocˇet v syste´mu na vı´ce mı´st, ktera´pracujı´paralelneˇ. Rozlisˇujeme dva druhy distribuovanosti: distribuovanost s hrubou granularitou – cˇa´sti syste´mu jsou spı´sˇe veˇtsˇı´, samostatneˇjsˇı´, me´neˇmezi sebou komunikujı´, pouzˇitelne´v prˇı´padeˇ, zˇe je proble´m zajistit dobrou a rychlou komunikaci (horsˇı´propojenı´pocˇı´tacˇu˚ - procesoru˚v sys- te´mu), distribuovanost s jemnou granularitou – cˇa´sti syste´mu jsou co nejmensˇı´, hodneˇmezi sebou komunikujı´.

Rozlisˇujeme dva druhy distribuovany´ch syste´mu˚– distribuovane´aplikace a dis- tribuovane´operacˇnı´syste´my.

Distribuovana´aplikace je distribuovany´syste´m beˇzˇı´cı´na vı´ce propojeny´ch po- cˇı´tacˇı´ch, kazˇdy´z pocˇı´tacˇu˚ma´svu˚j vlastnı´operacˇnı´syste´m. Tato sı´t’pocˇı´tacˇu˚mu˚zˇe by´t i Internet.

2Mu˚zˇeme take´najı´t na´zev grid. KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 8

Jednou z nejzna´meˇjsˇı´ch aplikacı´tohoto druhu je BOINC (zkratka pro Berkeley Open Infrastructure for Network Computing3) umozˇnˇujı´cı´ktere´mukoliv uzˇivateli pocˇı´tacˇe prˇipojene´mu k Internetu propu˚jcˇovat vy´pocˇetnı´kapacitu sve´ho pocˇı´tacˇe neˇktere´mu z projektu˚vyuzˇivajı´cı´ch tuto aplikaci. Jsou to naprˇı´klad projekty Clima- teprediction.net (celosveˇtova´prˇedpoveˇd’ pocˇası´), SETI@home (analy´za ra´diovy´ch signa´lu˚potencia´lneˇprˇicha´zejı´cı´ch od mimozemsky´ch civilizacı´), Einstein@home (hleda´nı´gravitacˇnı´ch vln generovany´ch pulsary), neˇkolik projektu˚z biomedicı´ny (bunˇky, proteiny apod.), atd. Grid je mozˇne´ vytvorˇit i doma, existujı´ na´stroje pro vytva´rˇenı´ gridu˚ v male´ doma´cı´sı´ti (pouzˇı´vajı´se pro cˇasoveˇslozˇite´operace jako je naprˇı´klad dlouhodobe´ prˇekla´da´nı´softwaru ze zdrojovy´ch ko´du˚– Gentoo Linux, zpracova´va´nı´multime´diı´ apod.). V souvislosti s Linuxem je trˇeba zmı´nit take´ distribuovane´syste´my pro spra´vu verzı´. Syste´m pro spra´vu verzı´umozˇnˇuje skupineˇprograma´toru˚ dostatecˇneˇefek- tivneˇpracovat na tomte´zˇprojektu. Jde prˇedevsˇı´m o synchronizaci prˇı´stupu˚a zmeˇn v zdrojovy´ch ko´dech, syste´m u kazˇde´ho registrovane´ho souboru uchova´va´historii zmeˇn, neˇkolik poslednı´ch verzı´, informace (metadata) o souborech a jejich autorech, a take´stanoveny´m zpu˚sobem reaguje v prˇı´padeˇ, zˇe vı´ce uzˇivatelu˚syste´mu chce meˇnit tenty´zˇsoubor – bud’ prvnı´prˇistupujı´cı´soubor uzamkne nebo se prova´dı´ tzv. „slucˇova´nı´zmeˇn“. Stav projektu je veden ve veˇtvı´ch, slucˇova´nı´zmeˇn mu˚zˇe odpovı´dat pra´veˇslucˇova´nı´teˇchto veˇtvı´. Na linuxovy´ch programech a take´na Linuxu samotne´m pracujı´pomeˇrneˇroz- sa´hle´skupiny programa´toru˚fyzicky se nacha´zejı´cı´ch v ru˚zny´ch cˇa´stech sveˇta. Proto je cˇasto potrˇeba pro dostatecˇneˇrychlou synchronizaci jejich pra´ce pouzˇı´vat syste´m pro spra´vu verzı´, ktery´je distribuovany´(pro mensˇı´projekty je vsˇak tato vlastnost zbytecˇna´). Doneda´vna vy´voja´rˇi Linuxu pouzˇı´vali syste´m BitKeeper, ale prˇedevsˇı´m z licencˇnı´ch du˚vodu˚se prˇecha´zı´na novy´syste´m Git vytvorˇeny´samotny´m tvu˚r- cem Linuxu Linusem Torvaldsem. Git nenı´plnohodnotny´syste´m pro spra´vu verzı´, i kdyzˇpro tyto u´cˇely dostacˇuje (je to take´distribuovany´syste´m). Prosazuje se jeho varianta rozsˇı´rˇena´o dalsˇı´skripty, Cogito, ktera´je jizˇ plnohodnotny´m syste´mem pro spra´vu verzı´(autorem je Petr Baudisˇ).

Distribuovany´operacˇnı´syste´m je samostatny´operacˇnı´syste´m beˇzˇı´cı´na sı´ti pro- cesoru˚, ktere´nesdı´lejı´spolecˇnou pameˇt’, a za´rovenˇ poskytuje uzˇivateli dojem jed- noho pocˇı´tacˇe.

3http://boinc.berkeley.edu KAPITOLA 1 U´ VOD DO OPERACˇNI´CH SYSTE´ MU˚ 9

Trˇebazˇe je fyzicky rozmı´steˇn na ru˚zny´ch pocˇı´tacˇı´ch, nema´(nemeˇlo by) to mı´t vliv na jeho cˇinnost a uzˇivatel neurcˇuje, kde se konkre´tneˇjeho data zpracova´vajı´nebo kde ve skutecˇnosti jsou ulozˇena. Da´le se jizˇbudeme veˇnovat pouze distribuovany´m operacˇnı´m syste´mu˚m. Za´kladnı´vlastnosti distribuovane´ho operacˇnı´ho syste´mu jsou:

1. transparentnost („pru˚hlednost“ – strukturu cˇi postup nenı´videˇt), 2. flexibilita (prˇizpu˚sobivost), 3. rozsˇirˇitelnost.

Transparentnost je nejdu˚lezˇiteˇjsˇı´vlastnostı´distribuovane´ho operacˇnı´ho syste´mu, znamena´pro uzˇivatele a prˇı´padneˇi pro procesy urcˇity´dojem jednolitosti syste´mu. Tato vlastnost se ty´ka´prˇedevsˇı´m vztahu procesu˚a prostrˇedku˚cele´ho syste´mu. Vyzˇaduje se, aby proces jednotny´m zpu˚sobem prˇistupoval k loka´lnı´m i vzda´- leny´m prostrˇedku˚m (prˇı´stupova´transparentnost), a za´rovenˇaby nemusel zna´t fy- zicke´umı´steˇnı´tohoto prostrˇedku (tj. prˇi konkretizaci prostrˇedku, ke ktere´mu chce prˇistupovat, neuda´va´jeho umı´steˇnı´- adresu, ale identifikuje ho jiny´m zpu˚sobem, to se nazy´va´lokacˇnı´transparentnost), prostrˇedky mohou by´t libovolneˇprˇesouva´ny a prˇipojova´ny k ru˚zny´m cˇa´stem cele´ho syste´mu bez ovlivneˇnı´cˇinnosti procesu˚(mi- gracˇnı´transparentnost), procesy mohou beˇzˇet na ktere´mkoliv procesoru a dokonce mohou by´t prˇi sve´m beˇhu prˇemı´steˇny na jiny´procesor, aby se vhodneˇvyrovnala za´teˇzˇru˚zny´ch cˇa´stı´syste´mu (exekucˇnı´transparentnost), atd. Flexibilita znamena´ schopnost syste´mu prˇizpu˚sobovat se vesˇkery´m zmeˇna´m prostrˇedı´, ve ktere´m pracuje, vcˇetneˇ ru˚zny´ch poruch a vy´padku˚ cˇa´stı´ syste´mu. Souvisı´take´s vlastnostı´migracˇnı´transparentnosti. Aby syste´m dosa´hl dostatecˇne´flexibility, je vhodne´, aby kazˇda´cˇa´st syste´mu byla pokud mozˇno co nejvı´ce samostatna´ve sve´pra´ci, centra´lnı´rozhodova´nı´mu˚zˇe tuto vlastnost narusˇit. V dostatecˇneˇflexibilnı´m syste´mu je mozˇne´prˇemı´st’ovat pro- va´deˇnı´procesu˚na ty procesory, ktere´zrovna nejsou vytı´zˇene´, odlehcˇovat prˇı´lisˇ vytı´zˇeny´m procesoru˚m, a tote´zˇplatı´i o prˇemı´st’ova´nı´prostrˇedku˚mezi cˇa´stmi sys- te´mu. Rozsˇirˇitelnost souvisı´s flexibilitou. Distribuovany´operacˇnı´syste´m by meˇl by´t schopen rozsˇı´rˇenı´o (teoreticky) jake´koliv mnozˇstvı´procesoru˚. Prakticky je samo- zrˇejmeˇtoto mnozˇstvı´limitova´no prˇedevsˇı´m proble´my prˇi komunikaci. Nejde jen o propustnost linek, ktera´mu˚zˇe komunikaci zdrzˇovat nebo komplikovat, ale take´ o na´rocˇnost synchronizace syste´mu, kde se z du˚vodu distribuovanosti odboura´va´ centralizovane´rˇı´zenı´cˇehokoliv. Proto se velmi rozsa´hle´distribuovane´syste´my bu- dujı´prˇedevsˇı´m v oblastech, kde tyto proble´my nejsou podstatne´nebo je lze rˇesˇit. KAPITOLA 2

Struktura operacˇnı´ch syste´mu˚

Abychom mohli porozumeˇt tomu, jak pracujı´operacˇnı´syste´my, potrˇebujeme alesponˇza´- kladnı´informace o jejich strukturˇe. U modernı´ch operacˇnı´ch syste´mu˚je struktura vytva´- rˇena prˇedevsˇı´m s ohledem na bezpecˇnost a stabilitu cele´ho syste´mu, vzˇdy najdeme rozdeˇlenı´ na privilegovanou cˇa´st (privilegovany´rezˇim, rezˇim ja´dra) a uzˇivatelskou cˇa´st (uzˇivatelsky´, neprivilegovany´rezˇim) s tı´m, zˇe procesy beˇzˇı´cı´v uzˇivatelske´cˇa´sti nemajı´mozˇnost jakkoliv zasahovat do privilegovane´. Ovsˇem svou strukturu majı´take´jednodusˇsˇı´syste´my, jim cˇasto stacˇı´jednodusˇsˇı´stavba. V te´to kapitole nejdrˇı´v probereme za´kladnı´druhy struktur, pak si uka´zˇeme strukturu neˇktery´ch konkre´tnı´ch operacˇnı´ch syste´mu˚rodiny Windows a Unix.

2.1 Za´kladnı´typy struktur operacˇnı´ch syste´mu˚

Monoliticka´struktura je nejjednodusˇsˇı´struktura pouzˇı´vana´v ja´drech neˇktery´ch ope- racˇnı´ch syste´mu˚nebo v zarˇı´zenı´ch (tiska´rny). Syste´m se skla´da´z ja´dra a roz- hranı´, ktere´zprostrˇedkova´va´komunikaci mezi ja´drem a okolı´m. Vrstvena´(hierarchicka´) struktura – cˇa´sti syste´mu jsou usporˇa´da´ny do vrstev, kazˇda´ vrstva vyuzˇı´va´sluzˇeb nizˇsˇı´ch vrstev, ne naopak. Syste´m je budova´n od vnitrˇ- nı´ch vrstev k vneˇjsˇı´m, proto vnitrˇnı´vrstvy, ktere´jsou obvykle nejdu˚lezˇiteˇjsˇı´ z hlediska stability a bezpecˇnosti, by´vajı´nejle´pe otestova´ny. Tento typ struk- tury je u modernı´ch operacˇnı´ch syste´mu˚nejbeˇzˇneˇjsˇı´. Virtua´lnı´pocˇı´tacˇe (virtua´lnı´stroje) – syste´m je rozdeˇlen do samostatny´ch modulu˚ (virtua´lnı´ch pocˇı´tacˇu˚, virtua´lnı´ch zarˇı´zenı´), kazˇdy´z nich je stejneˇvybaven pro-

10 KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 11

strˇedky (cˇas procesoru, pameˇt’, apod.), obvykle se nemohou prˇı´lisˇvza´jemneˇ ovlivnˇovat kromeˇza´kladnı´komunikace mezi procesy (naprˇ. prˇeda´va´nı´dat a jiny´ch informacı´). Pouzˇı´va´se v operacˇnı´ch syste´mech pro podsyste´my, ktere´ je nutne´z neˇjake´ho du˚vodu oddeˇlit vza´jemneˇnebo od prostrˇedku˚syste´mu.

Abstraktnı´pocˇı´tacˇe – syste´m je rozdeˇlen do modulu˚, ale narozdı´l od virtua´lnı´ch pocˇı´tacˇu˚abstraktnı´pocˇı´tacˇe majı´kazˇdy´svou specifickou funkci (naprˇ. modul, ktery´ zprostrˇedkova´va´ prˇı´stup k tiska´rneˇ, udrzˇuje tiskovou frontu, snı´ma´ z ostatnı´ch procesu˚nutnost beˇhem tisku neusta´le komunikovat s tiska´rnou a posı´lat jı´data). Typicke´pouzˇitı´je v prima´rnı´m rozhranı´zarˇı´zenı´– ovladacˇe.

Model klient-server – syste´m ma´co nejmensˇı´ja´dro (minikernel, mikrokernel), ktere´ obsahuje pouze za´kladnı´funkce (obvykle pouze funkce rˇı´dı´cı´cˇinnost ostat- nı´ch cˇa´stı´syste´mu, jako je prˇepı´na´nı´mezi procesy a rˇı´zenı´mechanismu za- sı´la´nı´zpra´v mezi procesy), ostatnı´funkce syste´mu prova´deˇjı´specia´lnı´syste´- move´procesy, ktere´nazy´va´me servery. Procesy, ktere´spousˇtı´uzˇivatel (nejsou syste´move´), se nazy´vajı´ klienty, vyuzˇı´vajı´sluzˇeb procesu˚typu server. Vy´ho- dou je vysˇsˇı´stabilita syste´mu – pokud chyba nastane u neˇktere´ho serveru, mu˚zˇe by´t resetova´n, ale nemusı´ by´t znovu zava´deˇn cely´ syste´m (pravdeˇ- podobnost posˇkozenı´ ja´dra je mala´ vzhledem k jeho jednoduchosti). Tuto strukturu vyuzˇı´va´mnoho realtimovy´ch syste´mu˚.

Stavebnicova´struktura – opeˇt ma´me co nejmensˇı´ja´dro, zbytek je prˇilinkova´n jen tehdy, kdyzˇje vyzˇadova´n neˇkterou klientskou aplikacı´. Tento typ struktury je vy´hodny´, pokud kromeˇjine´ho vyzˇadujeme take´minima´lnost a efektivitu beˇhu (prˇı´lisˇ mnoho prˇilinkovany´ch modulu˚, ktere´ jsou navı´c zbytecˇne´, by zdrzˇovalo a zabı´ralo mı´sto v pameˇti cˇi jine´zdroje). Stavebnicovou strukturu majı´neˇktere´realtimove´syste´my.

2.2 MS-DOS a Windows s DOS ja´drem

Rˇ ada Windows s DOS ja´drem zahrnuje Windows 95, 95 OSR2, 98, 98 SE a ME. Tyto verze vznikly u´pravou a vcˇleneˇnı´m pu˚vodneˇsamostatne´ho operacˇnı´ho syste´mu MS-DOS jako ja´dra do Windows, ktere´ se tı´mto staly samostatny´m operacˇnı´m syste´mem1.

1Windows do verze 3.11 byly pouze grafickou na´stavbou MS-DOSu, nikoliv samostatny´m ope- racˇnı´m syste´mem. Tı´m se staly pra´veˇazˇod Windows 95, vnitrˇneˇWindows 4.0. KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 12

Struktura operacˇnı´ch syste´mu˚Windows s DOS ja´drem vycha´zı´ z pu˚vodnı´ho syste´mu MS-DOS, proto se nejdrˇı´v podı´va´me na strukturu tohoto jednoduche´ho syste´mu a pak ji rozsˇı´rˇı´me na tuto rˇadu Windows. MS-DOS je jednoprocesorovy´jednouzˇivatelsky´jednoprogramovy´loka´lnı´uni- verza´lnı´ syste´m. Samotny´ MS-DOS bez spusˇteˇne´ na´stavby Windows ma´ velmi jednoduchou vrstvenou strukturu. Nejblı´zˇe hardwaru je BIOS (Basic Input-Output System) a da´le soubor IO.sys, ktery´se stara´o obsluhu periferiı´. BIOS poskytuje programa´toru˚m za´kladnı´ovla´da´nı´hardwaru (naprˇ. kla´vesnice, monitoru) prˇes hardwarova´a softwarova´prˇerusˇenı´2. Pokud programa´tor potrˇebuje komunikovat s urcˇity´m zarˇı´zenı´m (trˇeba vypsat cˇi vykreslit neˇco na obrazovku), vyvola´prˇı´slusˇne´prˇerusˇenı´(k tomu jsou v programovacı´ch jazycı´ch specia´lnı´prˇı´- kazy), prˇı´padneˇ se mu˚zˇe napojit na neˇktere´ prˇerusˇenı´ a nechat prove´st urcˇitou funkci ve chvı´li, kdy je prˇerusˇenı´vyvola´no jinde nezˇv programu (naprˇı´klad takto hlı´da´stisknutı´kla´ves nebo pohyb mysˇi).

Konfigurace (CONFIG.SYS, AUTOEXEC.BAT), vneˇjsˇı´prˇı´kazy (programy dodane´s OS), uzˇivatelske´programy

Komunikace s uzˇivatelem (COMMAND.COM)

Ja´dro (MSDOS.SYS)

Obsluha technicky´ch prostrˇedku˚(BIOS, IO.SYS)

Hardware

Obra´zek 2.1: Struktura OS MS-DOS 6.22

Nad vrstvou pro ovla´da´nı´hardwaru je vrstva samotne´ho ja´dra syste´mu prˇed- stavovana´souborem MSDOS.SYS. Tento syste´m ma´tedy monoliticke´ ja´dro slozˇene´ z jedine´ho souboru. Ja´dro poskytuje dalsˇı´softwarova´prˇerusˇenı´, naprˇı´klad pro prˇı´- stup k souboru˚m nebo pokrocˇilejsˇı´pra´ci s grafikou. Na´sledujı´cı´ vrstva tvorˇena´ souborem COMMAND.COM je textove´ rozhranı´ mezi uzˇivatelem a syste´mem. Tento program je spusˇteˇn po celou dobu pra´ce sys- te´mu a komunikuje s uzˇivatelem (spusˇteˇne´programy komunikujı´s nizˇsˇı´mi vrst-

2Prˇerusˇenı´znamena´prˇerusˇenı´norma´lnı´ho beˇhu programu. Mu˚zˇe to by´t naprˇı´klad prˇerusˇenı´ generovane´kla´vesnicı´(po stisku kla´vesy se program o tom musı´doveˇdeˇt a vhodneˇreagovat). KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 13

vami, cozˇuzˇivatel nedovede, potrˇebuje „prˇekladatele“). Uzˇivatel zada´va´prˇı´kazy a rozhranı´na neˇreaguje a vypisuje vy´sledky cˇi chybova´hla´sˇenı´. Samotny´COM- MAND.COM obsahuje sadu vnitrˇnı´ch prˇı´kazu˚. Ostatnı´prˇı´kazy se nazy´vajı´ vneˇjsˇı´ prˇı´kazy a jsou implementova´ny jako kra´tke´jednoduche´programy s prˇı´ponou EXE nebo COM. Poslednı´vrstva je urcˇena k „zjednodusˇenı´pra´ce“ uzˇivatele. Kromeˇuzˇivatelem spusˇteˇny´ch programu˚zde beˇzˇı´take´programy prˇedstavujı´cı´vneˇjsˇı´prˇı´kazy a rˇadı´me zde take´konfiguracˇnı´soubory, ve ktery´ch si uzˇivatel mu˚zˇe urcˇit, jak ma´syste´m rea- govat. Za´kladnı´konfiguracˇnı´soubory jsou dva – CONFIG.SYS pro nastavenı´hard- waru (naprˇı´klad spusˇteˇnı´urcˇity´ch ovladacˇu˚pro monitor s urcˇenı´m znakove´sady pro cˇesˇtinu) a AUTOEXEC.BAT pro nastavenı´softwaru (zde naprˇı´klad urcˇujeme, ktere´programy nebo prˇı´kazy se majı´spustit po startu syste´mu). Kdyzˇv MS-DOSu 6.22 spustı´me Windows 3.x v rozsˇı´rˇene´m mo´du3, struktura cele´ho syste´mu se v hornı´cˇa´sti zmeˇnı´. Na obra´zku 2.2 je spodnı´cˇa´st trochu shrnuta (BIOS, MSDOS.SYS). K nim je prˇida´n soubor WIN.COM, ktery´slouzˇı´ke spusˇteˇnı´ cely´ch Windows (je take´ve vsˇech Windows s DOS ja´drem), a da´le rˇadicˇe (ovladacˇe). Windows prˇida´vajı´multitasking, 16-bitove´knihovny (MS-DOS je 8-bitovy´syste´m) a ve verzi 3.11 for Workgroups za´kladnı´podporu sı´teˇ(pouze sı´t’peer-to-peer). Rˇ adicˇe (ovladacˇe, drivery) ovla´dajı´perifernı´zarˇı´zenı´pro Windows; rˇadicˇe prˇı´mo pro Windows jsou spousˇteˇny v souboru SYSTEM.INI pomocı´ prˇı´kazu DEVICE (neˇktere´, ktere´mu˚zˇeme vyuzˇı´vat i v DOSu, v souboru CONFIG.SYS). DOS Extender je modul pro podporu vyuzˇitı´rozsˇı´rˇene´pameˇti (Extended Me- mory). Je prˇedstavova´n souborem Win386.EXE. Soucˇa´stı´tohoto souboru je take´ Spra´vce virtua´lnı´ch zarˇı´zenı´ (VMM = Virtual Ma- chine Manager), ktery´ovla´da´mozˇnosti Windows pro soubeˇh s programy DOSu. Rˇ adicˇe virtua´lnı´ch zarˇı´zenı´ (VxD) jsou rˇadicˇe, ktere´spra´vce virtua´lnı´ch zarˇı´zenı´po- trˇebuje pro manipulaci s I/O zarˇı´zenı´mi pro programy DOSu v rozsˇı´rˇene´m mo´du. V dalsˇı´vrstveˇje ja´dro Windows (pozor, ja´drem operacˇnı´ho syste´mu sta´le zu˚sta´va´ MSDOS.SYS), ktere´zde pracuje jako spra´vce prostrˇedku˚vzhledem k programu˚m beˇzˇı´cı´m pod Windows (i DOS programu˚m zde spusˇteˇny´m). Skla´da´se ze trˇı´cˇa´stı´– souboru˚:

• KRNL386.EXE – plnı´ prˇedevsˇı´m u´lohu spra´vce pameˇti a spra´vce procesu˚ (rˇı´zenı´prˇideˇlova´nı´pameˇti procesu˚m, prˇideˇlova´nı´prostrˇedku˚syste´mu proce- su˚m, . . . ),

3MS-DOS pracuje v rea´lne´m mo´du, kde lze pameˇt’vyuzˇı´vat pouze do 1 MB. Windows 3.x, aby byly pra´ceschopne´, se zapı´najı´v rozsˇı´rˇene´m mo´du, dostupne´m azˇod procesoru˚, kde kromeˇ rozsˇı´rˇene´pameˇti take´naprˇı´klad mohou vyuzˇı´vat chra´neˇny´mo´d procesoru pro ochranu pameˇti. KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 14

Aplikace Win16

Spra´vce programu˚(PROGMAN.EXE), shell VM VM . . . INI soubory (SYSTEM.INI, WIN.INI, . . . ) DOS 1 DOS 2

Ja´dro (KRNL386.EXE, USER.EXE, GDI.EXE)

DOS Extender (WIN386.EXE), rˇadicˇe VM

BIOS, MS-DOS, rˇadicˇe, WIN.COM

Hardware

Obra´zek 2.2: Struktura OS MS-DOS + Windows 3.x v rozsˇı´rˇene´m mo´du

• GDI.EXE – rozhranı´graficke´ho zarˇı´zenı´(obsahuje funkce pro vytva´rˇenı´kur- zoru, ikony, pı´smo, . . . ), • USER.EXE – uzˇivatelske´ovla´da´nı´rozhranı´, zdroje, ktere´nepatrˇı´do GDI (di- alogova´okna, menu, okna, . . . ).

V dalsˇı´vrstveˇnajdeme konfiguracˇnı´soubory s prˇı´ponou INI. Z nich jsou nejdu˚le- zˇiteˇjsˇı´WIN.INI (konfigurace software a nastavenı´pro urcˇ. uzˇivatele) a SYSTEM.INI (konfigurace hardware). INI soubory mohou mı´t take´ru˚zne´programy. Na´sleduje vrstva, ktera´ rozhranı´m mezi uzˇivatelem, programy a samotny´m syste´mem. Soubor PROGMAN.EXE je Spra´vce programu˚, shell je graficke´a textove´ rozhranı´mezi uzˇivatelem a syste´mem. Zde bychom take´mohli zarˇadit cˇa´st API rozhranı´ (Application Programming Interface) reprezentovane´ho dynamicky linkovany´mi knihovnami (obsahujı´ funkce, objekty apod.) a vyuzˇı´vane´ho procesy pro prˇı´stup k syste´mu. Knihovny cele´ho API rozhranı´ jsou vsˇak rozmı´steˇny v ru˚zny´ch vrstva´ch, patrˇı´ zde take´ soubory ja´dra KRNL386.EXE, USER.EXE a GDI.EXE. Veˇtsˇina knihoven ma´ prˇı´ponu DLL, ale neˇktere´majı´prˇı´ponu EXE, prˇı´pona knihoven fontu˚zase za´visı´na typu fontu (naprˇı´klad TTF pro True-type fonty), atd. KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 15

Vsˇechny dosud uvedene´vrstvy platı´zejme´na pro aplikace psane´pro Windows (16-bitove´aplikace pro Windows do verze 3.x), DOS programy ani netusˇı´o existenci ja´dra Windows a INI souboru˚, proto hornı´vrstvy vu˚bec nevyuzˇı´vajı´. Protozˇe vsˇak je samotny´ MS-DOS jednoprogramovy´ syste´m (kromeˇ ovladacˇu˚ a rezidentnı´ch programu˚je spusˇteˇn vzˇdy jen jeden program), tyto programy jsou napsa´ny bez jaky´chkoliv ohledu˚ na mozˇnost sdı´lenı´ pameˇti s jiny´mi procesy. Proto je nutne´ „separovat“ je do virtua´lnı´ch pocˇı´tacˇu˚, ktere´ programu˚ m vytvorˇı´ iluzi vy´lucˇne´ existence v syste´mu a znemozˇnı´jim za´sahy do prostrˇedku˚jiny´ch procesu˚. Jak jizˇbylo uvedeno, od verze 4.x (95) jsou Windows jizˇoperacˇnı´syste´m se samostatny´m ja´drem. Oproti sestaveˇMS-DOS+Windows 3.x je to 32-bitovy´syste´m (ale neˇktere´knihovny zu˚sta´vajı´16-bitove´), ostatnı´vlastnosti zu˚sta´vajı´. Na obra´zku 2.3 na str. 16 je naznacˇena zjednodusˇena´struktura tohoto syste´mu. Spodnı´vrstva opeˇt slouzˇı´k prˇı´stupu syste´mu k zarˇı´zenı´. Na´sledujı´cı´vrstva se take´vztahuje k hardwaru, ale jizˇna abstraktneˇjsˇı´u´rovni. Skla´da´se ze trˇı´za´kladnı´ch modulu˚:

• VMM je spra´vce virtua´lnı´ch zarˇı´zenı´ (Virtual Machine Manager), vytva´rˇı´ a udrzˇuje prostrˇedı´virtua´lnı´ch zarˇı´zenı´, • IFSM je spra´vce instalovatelny´ch souborovy´ch syste´mu˚(Installable File Sys- tems Manager), spravuje ru˚zne´typy souborovy´ch syste´mu˚, ktere´lze insta- lovat, naprˇ. FAT16, VFAT (FAT32 s rozsˇı´rˇenı´mi), CDFS (syste´m souboru˚pro CD-ROM), . . . , • Spra´vce konfigurace spravuje ovladacˇe hardware na vysˇsˇı´u´rovni, prˇedevsˇı´m zarˇı´zenı´typu Plug&Play.

Ja´dro se skla´da´ ze trˇı´ modulu˚, kazˇdy´ z nich ma´ dveˇ dynamicky linkovane´ knihovny (jedna pro 16-bitove´aplikace s prˇı´ponou EXE, druha´pro 32-bitove´apli- kace s prˇı´ponou DLL):

• KERNEL – multithreading, multitasking, spra´va pameˇti, synchronizace ob- jektu˚, vstupu a vy´stupu u souboru˚, . . . , • GDI (Graphics Device Interface) – spra´vce tisku, spooler (viz prˇedna´sˇky), zpracova´nı´grafiky, za´kladnı´graficke´objekty, . . . (funkce podobna´jako u Win 3.x), • USER – vstupy z kla´vesnice, mysˇi apod. (rˇı´zene´prˇerusˇenı´mi), vy´stupy do uzˇi- vatelske´ho graficke´ho rozhranı´(okna, menu, ikony, . . . ), pra´ce s cˇasovacˇem, . . . KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 16

Win32 Win16 aplikace aplikace Na´stroje VM VM syste´mu, Win32 Win16 DOS DOS shell . . . aplikace aplikace 1 2 ......

Ja´dro (KERNEL, USER, GDI) Registr

VMM IFSM Spra´vce konfigurace BIOS a ovladacˇe zarˇı´zenı´ Hardware

Obra´zek 2.3: Struktura OS Windows 9x/ME

Registr je centra´lnı´informacˇnı´databa´ze syste´mu, najdeme zde veˇtsˇinu toho, co ve Windows 3.x bylo v INI souborech (ty jsou vsˇak zachova´ny kvu˚li zpeˇtne´kom- patibiliteˇ). Fyzicky je ulozˇen v souborech SYSTEM.DAT a USER.DAT (ve Windows 9x/ME). Aplikace Win32 (tj. psane´pro Windows od verze 95 vy´sˇe) a Win16 (pro nizˇsˇı´ verze) beˇzˇı´v syste´move´m virtua´lnı´m pocˇı´tacˇi, kazˇda´Win32 aplikace ma´vyhrazen svu˚j vlastnı´adresovy´prostor, aplikace Win16 majı´jeden spolecˇny´adresovy´pro- stor4. DOS aplikace majı´stejneˇjako ve Windows 3.x kazˇda´svu˚j virtua´lnı´pocˇı´tacˇ (a proto take´kazˇda´svu˚j vlastnı´adresovy´prostor, v ra´mci virtua´lnı´ho pocˇı´tacˇe).

2.3 Windows rˇady NT

Ja´dro syste´mu Windows rˇady NT vznikalo neza´visle na syste´mu MS-DOS, uzˇprˇi jeho na´vrhu bylo bra´no v u´vahu typicke´pouzˇitı´tohoto syste´mu jako serveru nebo klienta v sı´ti, a tudı´zˇhlavnı´m hlediskem je stabilita a mozˇnosti zabezpecˇenı´. Sys- te´m byl navrzˇen jako vı´ceprocesorovy´(SMP – symetricky´multiprocessing) vı´ceu-

4To je kromeˇjine´ho proto, zˇe Win16 aplikace byly psa´ny pro syste´m, kde procesy mohou spolu komunikovat prˇes spolecˇnou pameˇt’v DLL knihovna´ch, u Win32 aplikacı´a 32-bitovy´ch knihoven to jizˇnenı´mozˇne´, mohl by´t proto zvolen model vı´ce vyhovujı´cı´pozˇadavku˚m stability a bezpecˇnosti syste´mu. KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 17

zˇivatelsky´multitaskovy´univerza´lnı´sı´t’ovy´syste´m. Na´sledujı´cı´struktura platı´pro Windows NT 4.x, Windows 2000 a XP, ale v hlavnı´ch rysech platı´ i pro prˇedchozı´ verze. Zjednodusˇena´struktura syste´mu je naznacˇena na obr. 2.4. Neˇktere´prvky jsou podobne´cˇa´stem struktury Windows s DOS ja´drem, ale vnitrˇneˇpracujı´jinak. Du˚le- zˇite´je prˇedevsˇı´m rozdeˇlenı´do dvou za´kladnı´ch cˇa´stı´– cˇa´sti beˇzˇı´cı´v privilegovane´m rezˇimu (rezˇimu ja´dra) a cˇa´sti beˇzˇı´cı´v uzˇivatelske´m rezˇimu.

Sluzˇby Podsyste´my Aplikace Syste´move´ syste´mu prostrˇedı´ procesy NTDLL.DLL Uzˇivatelsky´rezˇim Privilegovany´rezˇim Exekutiva Spra´va Spra´va pameˇti Spra´va objektu˚ Spra´va procesu˚ oken a grafiky Spra´va vyrovna´- Spra´va I/O syste´m vacı´pameˇti zabezpecˇenı´

Ja´dro a ovladacˇe zarˇı´zenı´

HAL Hardware

Obra´zek 2.4: Struktura OS Windows s ja´drem NT

HAL je vrstva abstrakce hardware (Hardware Abstraction Layer), rozhranı´mezi hardwarem a zbytkem ja´dra syste´mu. Je rˇı´zena souborem HAL.DLL. Je oddeˇlena od ostatnı´ch cˇa´stı´syste´mu z du˚vodu snadneˇjsˇı´prˇenositelnosti syste´mu. Ovladacˇe komunikujı´se zarˇı´zenı´mi pouze zprostrˇedkovaneˇprˇes tuto vrstvu. Ja´dro je soucˇa´stı´ souboru NTOSKRNL.EXE (za´rovenˇ s exekutivou). Zde jsou obsluhova´na prˇerusˇenı´, prova´dı´se spra´va procesoru˚ (synchronizace prˇideˇlova´nı´ procesoru˚), apod. Exekutiva je rˇı´dicı´program operacˇnı´ho syste´mu, ma´na startosti rˇı´zenı´cele´ho ja´dra beˇzˇı´cı´ho v privilegovane´m rezˇimu. Fyzicky je za´rovenˇs ja´drem soucˇa´stı´sou- boru NTOSKRNL.EXE. KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 18

Podsyste´my (subsyste´my) prostrˇedı´ jsou rozhranı´zajisˇt’ujı´cı´spra´vny´a bezpecˇny´ beˇh ru˚zny´ch typu˚ aplikacı´. V teˇchto podsyste´mech beˇzˇı´ aplikace, ktere´ pak ne- musı´by´t kompatibilnı´s Windows NT. Podsyste´my poskytujı´aplikacı´m rozhranı´, ktere´prˇekla´da´komunikaci (pozˇadavky na informace, zdroje, provedenı´urcˇite´akce apod.) mezi aplikacı´a operacˇnı´m syste´mem tak, aby si obeˇ strany „rozumneˇly“. Jsou zde naprˇı´klad podsyste´my pro aplikace psane´pro 32-bitova´Windows, MS- DOS a aplikace pro 16-bitova´ Windows (VDM – Virtual DOS Machine), OS/2, POSIX5, atd. Podsyste´m pro 32-bitova´Windows vcˇetneˇNT (podsyste´m Win32) je prˇedstavo- va´n souborem CSRSS.EXE, pro POSIX je to prˇedevsˇı´m soubor PXSS.EXE (to je server podsyste´mu). Podsyste´m Win32 je potrˇebny´pro beˇh operacˇnı´ho syste´mu, proto se jako jediny´spousˇtı´hned po startu pocˇı´tacˇe, ostatnı´podsyste´my jsou spousˇteˇny azˇ na zˇa´dost prˇi spusˇteˇnı´aplikace patrˇı´cı´tomuto podsyste´mu. Kazˇdy´podsyste´m ma´ kromeˇsve´ho rˇı´dicı´ho programu (naprˇı´klad CSRSS.EXE u Win32) take´knihovny, ve ktery´ch jsou ulozˇeny funkce a objekty, obsahujı´API (Application Programming In- terface) dane´ho podsyste´mu. Naprˇı´klad ke knihovna´m Win32 patrˇı´take´knihovny KERNEL32.DLL, USER32.DLL a GDI32.DLL. Jejich funkce je podobna´jako v jiny´ch varianta´ch Windows, vnitrˇneˇvsˇak majı´odlisˇnou strukturu. Soubor NTDLL.DLL prˇedstavuje rozhranı´mezi beˇzˇny´mi procesy a syste´mem. Pokud neˇktery´proces v uzˇivatelske´m rezˇimu vola´sluzˇbu beˇzˇı´cı´v privilegovane´m rezˇimu, vola´nı´jde vzˇdy prˇes tento soubor, aby se vyloucˇila mozˇnost modifikace sys- te´movy´ch knihoven a dalsˇı´ch syste´movy´ch zdroju˚. NTDLL prˇedstavuje tzv. doku- mentovane´rozhranı´ syste´mu, ktere´kazˇde´mu procesu zprostrˇedkova´va´komunikaci s dany´m podsyste´mem. Syste´move´procesy jsou procesy,ktere´spousˇtı´syste´m, naprˇı´klad procesy zajisˇt’ujı´cı´ uzˇivatelske´prostrˇedı´. V zobrazenı´Spra´vce u´loh, karta Procesy,je prˇi zapnute´m zob- razova´nı´uzˇivatelu˚procesu pozna´me podle hodnoty SYSTEM, LOCAL SERVICE, NETWORK SERVICE apod. Pracujı´v uzˇivatelske´m rezˇimu z du˚vodu bezpecˇnosti, k cˇa´stem syste´mu pracujı´cı´m v privilegovane´m rezˇimu vsˇak majı´trochu jednodusˇsˇı´ prˇı´stup nezˇostatnı´procesy. Sluzˇby syste´mu (serverove´procesy) jsou sluzˇby poskytovane´syste´mem, seznam lze najı´t naprˇ. v na´stroji Na´stroje pro spra´vu – Sluzˇby.Sluzˇby jsou syste´move´procesy beˇzˇı´cı´cˇasto i bez prˇihla´sˇenı´uzˇivatele, obdoba rezidentnı´ch programu˚v MS-DOSu. Beˇh sluzˇeb zajisˇt’uje proces rˇadicˇe sluzˇeb prˇedstavovany´souborem SERVICES.EXE.

5POSIX (Portable Operating System Interface for Unix) je standard navrzˇeny´pu˚vodneˇpro Unix, a to tak, aby programy napsane´podle tohoto standardu bylo mozˇne´snadno prˇena´sˇet mezi ru˚zny´mi operacˇnı´mi syste´my (ru˚zne´varianty Unixu od ru˚zny´ch firem mohou by´t vza´jemneˇnekompatibilnı´). KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 19

Modul pro spra´vu oken a grafiky (GUI, Win32 User a GDI) je ko´d uzˇivatelske´ho rozhranı´a rozhranı´graficky´ch zarˇı´zenı´pro podsyste´m Win32. Ve Windows rˇady NT od verze 4 byla tato cˇa´st ko´du prˇesunuta do rezˇimu ja´dra z du˚vodu urychlenı´ pra´ce aplikacı´ hodneˇ vyuzˇı´vajı´cı´ch graficka´ zarˇı´zenı´. Tento modul je urcˇen pro podsyste´m Win32, ale aby nebylo nutne´ tyto funkce implementovat v kazˇde´m podsyste´mu zvla´sˇt’, je prˇekla´da´no vola´nı´graficky´ch funkcı´jiny´ch podsyste´mu˚na vola´nı´v podsyste´mu Win32. Umı´steˇnı´ko´du graficke´ho rozhranı´do rezˇimu ja´dra je neobvykle´. Nevy´hodou tohoto postupu je ovsˇem veˇtsˇı´bezpecˇnostnı´riziko a riziko porusˇenı´stability sys- te´mu prˇi chybne´pra´ci tohoto modulu (pracuje v rezˇimu ja´dra, proto ma´prˇı´stup do prameˇti syste´movy´ch procesu˚). Dalsˇı´nevy´hodou je na´rocˇneˇjsˇı´postup vy´meˇny uzˇivatelske´ho rozhranı´za alternativnı´. Jak je videˇt na obr. 2.4, Windows rˇady NT nejsou prˇı´sneˇvrstveny´syste´m, ale kombinujı´vı´ce ru˚zny´ch architektur pro sve´ru˚zne´cˇa´sti. Jsou to tyto architektury:

1. Vrstvena´architektura se uplatnˇuje v ja´drˇe, vrstveˇHAL a I/O syste´mu.

2. Modula´rnı´ architektura – uzavrˇene´ moduly, vnitrˇneˇ kompaktnı´, ktere´ po- skytujı´sluzˇby prˇes nadefinovane´rozhranı´, komunikace probı´ha´volneˇmezi ru˚zny´mi moduly, tuto architekturu zde pouzˇı´va´exekutiva prˇi rˇı´zenı´spra´vce procesu˚, spra´vce pameˇti, I/O syste´mu atd. (modulu˚beˇzˇı´cı´ch v privilegova- ne´m rezˇimu).

3. Architektura klient-server se uplatnˇuje v API (Application Programming In- terface), cozˇje sada dynamicky linkovany´ch knihoven, zde povazˇovany´ch za servery, procesy z vysˇsˇı´ch vrstev (klienti) vyuzˇı´vajı´jejich sluzˇeb (prˇes kni- hovnu NTDLL.DLL).

2.4 Syste´my Unixove´ho typu

Veˇtsˇina Unixovy´ch syste´mu˚ ma´ hodneˇ podobnou strukturu (kromeˇ teˇch, ktere´ byly upraveny pro real-time provoz). Ja´dro beˇzˇı´ v privilegovane´m rezˇimu (re- zˇimu ja´dra), je cˇasto tvorˇeno jediny´m souborem (proto je nazy´va´no monoliticke´, i kdyzˇjeho vnitrˇnı´struktura je prˇesneˇrozvrzˇena, naprˇı´klad u linuxu je to soubor /boot/vmlinuz). Unixove´ syste´my jsou vı´ceprocesorove´ vı´ceuzˇivatelske´ multitaskove´ univer- za´lnı´sı´t’ove´syste´my jizˇod sve´ho pocˇa´tku. Na to byl bra´n zrˇetel uzˇprˇi navrhova´nı´ KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 20 jejich struktury, proto za dlouha´desetiletı´existence Unixu˚ani nebylo trˇeba ji vy´- razneˇji meˇnit. Tato struktura take´zrˇejmeˇposlouzˇila jako jeden ze vzoru˚prˇi na´vrhu struktury Windows rˇady NT.

Skripty shellu Programy Shell, vestaveˇne´programy

Knihovny

Ja´dro (privilegovany´rezˇim)

Daemons Kernel

HAL

Hardware

Obra´zek 2.5: Struktura operacˇnı´ch syste´mu˚Unixove´ho typu

Ja´dro syste´mu beˇzˇı´v privilegovane´m rezˇimu (kernel mode, vsˇe ostatnı´ beˇzˇı´v uzˇi- vatelske´m rezˇimu – user mode) a skla´da´se ze dvou oddeˇleny´ch cˇa´stı´:

• HAL (Hardware Abstraction Layer) je cˇa´st ja´dra za´visla´na hardware, jsou zde prˇedevsˇı´m ovladacˇe zarˇı´zenı´, • Kernel je ja´dro neza´visle´na hardware, beˇzˇı´zde take´ de´moni (daemons) – syste´- move´procesy obdobne´sluzˇba´m ve Windows rˇady NT. Beˇzˇı´ na pozadı´cˇasto bez ohledu na beˇh uzˇivatelsky´ch procesu˚a prˇihlasˇova´nı´cˇi odhlasˇova´nı´uzˇi- vatelu˚.

Knihovny v Unixu majı´ podobnou roli jako DLL ve Windows, tedy obsahujı´ objekty a ru˚zne´rutiny. Mnohe´z nich jsou soucˇa´stı´graficke´ho subsyste´mu (naprˇ. X Window). Shell je rozhranı´pro komunikaci s uzˇivatelem. Unixove´syste´my obvykle nabı´zejı´ vı´ce ru˚zny´ch shellu˚. Komunikace probı´ha´v textove´formeˇ(uzˇivatel zada´va´prˇı´kazy, syste´m reaguje textovy´mi vy´pisy), ale soucˇasne´Unixove´syste´my veˇtsˇinou majı´ take´velmi propracovane´graficke´rozhranı´a beˇzˇny´uzˇivatel s textovy´m shellem KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 21

ani nemusı´prˇijı´t do styku. Stejneˇjako ve Windows prˇı´kazy mu˚zˇeme shrnovat do textovy´ch souboru˚, ktere´se nazy´vajı´ skripty. Nynı´se podrobneˇji podı´va´me na strukturu ja´dra. Vrstva HAL je tvorˇena prˇede- vsˇı´m ovladacˇi perifernı´ch zarˇı´zenı´. Na´sleduje vrstva, ktera´prˇistupuje k zarˇı´zenı´m na abstraktneˇjsˇı´u´rovni – jsou zde ovladacˇe souborovy´ch syste´mu˚na pameˇt’ovy´ch me´diı´ch a ovladacˇTCP/IP komunikujı´cı´s ovladacˇem sı´t’ove´karty.

Rozhranı´syste´movy´ch vola´nı´

Spra´vce Spra´vce Sı´t’ove´ VFS procesu˚ pameˇti sluzˇby Ovladacˇ Souborove´syste´my TCP/IP Ovladacˇ Ovladacˇ Ovladacˇ Ovladacˇ prvnı´ho HD druhe´ho HD diskety sı´t’ove´karty

Prvnı´ Druhy´ Sı´t’ova´ Disketa pevny´disk pevny´disk karta

Obra´zek 2.6: Struktura ja´dra Unixovy´ch syste´mu˚

Souborovy´syste´m je rozhranı´mezi ovladacˇem vneˇjsˇı´ho pameˇt’ove´ho me´dia a vysˇ- sˇı´mi vrstvami ja´dra. V Unixovy´ch syste´mech jsou souborove´syste´my implemen- tova´ny prˇı´mo v ja´dru vcˇetneˇpodpory prˇida´va´nı´novy´ch souborovy´ch syste´mu˚ 6. Protozˇe v Unixech platı´, zˇe „vsˇechno je soubor“, jsou zde nejen souborove´sys- te´my pro vneˇjsˇı´pameˇt’ova´me´dia, ale i dalsˇı´, abstraktnı´, zprostrˇedkujı´cı´prˇı´stup k informacı´m o momenta´lnı´m stavu syste´mu, konfiguraci apod. (naprˇ. v Linuxech s ja´drem 2.4 souborovy´syste´m /proc) nebo sdruzˇujı´cı´jine´ souborove´syste´my cˇi prˇedstavujı´cı´cˇa´st jine´ho souborove´ho syste´mu (v Linuxech to mu˚zˇe by´t naprˇ. /etc). VFS (Virtual File System, virtua´lnı´souborovy´syste´m) prˇedstavuje rozhranı´pro podobny´zpu˚sob prˇı´stupu k ru˚zny´m souborovy´m syste´mu˚m. Vsˇechny souborove´ syste´my sdruzˇuje v jedine´„stromove´“ strukturˇe. Pokud uzˇivatel chce s konkre´tnı´m souborovy´m syste´mem pracovat, prˇipojı´ho na stanovene´mı´sto do te´to struktury a tı´m ho zprˇı´stupnı´(prˇipojova´nı´je obvykle automatizova´no, uzˇivatel se o neˇnemusı´ starat). Du˚lezˇitou funkcı´VFS je zajisˇteˇnı´stejne´ho zpu˚sobu zacha´zenı´s daty, at’uzˇ

6Proto narozdı´l od Windows si mu˚zˇeme nainstalovat podporu te´meˇrˇjake´hokoliv souborove´ho syste´mu vcˇetneˇ teˇch, ktere´ v dobeˇ sestavova´nı´ OS jesˇteˇ neexistovaly, jen musı´me mı´t instalacˇnı´ soubory a pak ja´dro znovu prˇelozˇit ze zdrojovy´ch ko´du˚. KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´ MU˚ 22

se nacha´zejı´ v jake´mkoliv souborove´m syste´mu, tedy uzˇivatel se nemusı´ starat o fyzicke´umı´steˇnı´souboru, atributy (naprˇ. nastavenı´cˇasu poslednı´ho prˇı´stupu k souboru), konvence pro pra´ci se soubory (jak sdeˇlit souborove´mu syste´mu, zˇe chci otevrˇı´t urcˇity´soubor, apod.). Rozhranı´syste´movy´ch vola´nı´ je rozhranı´mezi ja´drem a cˇı´mkoliv, co mu˚zˇe prˇı´mo ovlivnit uzˇivatel (programy, prˇı´kazy shellu, skripty). S touto vrstvou lze komuniko- vat prˇes knihovny obsahujı´cı´definice API funkcı´ (Application Programming Inter- face, ve Windows je obdoba tohoto rozhranı´– WinAPI, Win32 API). Hlavnı´u´lohou je zajisˇteˇnı´bezpecˇnosti, znemozˇneˇnı´za´sahu uzˇivatele do ja´dra (zde se Microsoft inspiroval prˇi programova´nı´knihovny NTDLL.DLL, ktera´ ma´podobnou funkci), znamena´take´zjednodusˇenı´pra´ce programa´toru˚, kterˇı´ se nemusejı´zaby´vat jednot- livy´mi syste´movy´mi vola´nı´mi a mohou pouzˇı´vat API funkce. KAPITOLA 3

Spra´va pameˇti

Pod pojmem pameˇt’ budeme rozumeˇt vnitrˇnı´(operacˇnı´) pameˇt’. V te´to kapitole probereme ru˚zne´metody, ktere´se pouzˇı´vajı´prˇi spra´veˇpameˇti, a uka´zˇeme si, jak jsou implementova´ny v neˇktery´ch operacˇnı´ch syste´mech.

3.1 Modul spra´vce pameˇti

Modul spra´vce pameˇti ma´tyto funkce:

1. Udrzˇuje informace o pameˇti (ktera´cˇa´st je volna´, ktera´ cˇa´st je prˇideˇlena, kte- re´mu procesu je prˇideˇlena, atd.).

2. Prˇideˇluje pameˇt’procesu˚m na jejich zˇa´dost.

3. Pameˇt’,kterou procesy uvolnı´, zarˇazuje k volne´pameˇti.

4. Pokud je to nutne´, odebı´ra´pameˇt’procesu˚m.

5. Jestlizˇe je mozˇne´detekovat prˇı´pady, kdy proces ukoncˇı´svou cˇinnost bez uvol- neˇnı´pameˇti (naprˇı´klad prˇi chybeˇv programu nebo prˇi na´silne´m ukoncˇenı´), pak modul tuto pameˇt’uvolnı´sa´m a zarˇadı´k volne´pameˇti.

6. Pokud to dovoluje u´rovenˇ hardwarove´ho vybavenı´ (prˇedevsˇı´m procesor), mu˚zˇe zajisˇt’ovat ochranu pameˇti, tedy nedovolı´procesu prˇı´stup do pameˇt’o- ve´ho prostoru jine´ho procesu nebo dokonce do pameˇt’ove´ho prostoru operacˇ- nı´ho syste´mu.

23 KAPITOLA 3 SPRA´VA PAMEˇ TI 24

Fyzicky je operacˇnı´pameˇt’umı´steˇna na za´kladnı´desce, ale take´na rozsˇirˇujı´cı´ch karta´ch (deska´ch, adapte´rech), naprˇı´klad cˇa´st operacˇnı´pameˇti, kterou nazy´va´me videopameˇt’1, se nacha´zı´na graficke´karteˇ, ale prˇesto je soucˇa´stı´operacˇnı´pameˇti a v neˇktery´ch operacˇnı´ch syste´mech majı´procesy do te´to pameˇti prˇı´my´prˇı´stup (rˇı´dı´tak prˇı´mo, co se ma´zobrazit). Souhrn teˇchto umı´steˇnı´operacˇnı´pameˇti v ru˚zny´ch cˇa´stech hardwaru vy´pocˇet- nı´ho syste´mu je trˇeba utrˇı´dit do posloupnosti, kde ma´kazˇda´ cˇa´st sve´jednoznacˇne´ umı´steˇnı´. Proces k pameˇti prˇistupuje prˇes adresy. Adresa mı´sta v pameˇti je pocˇet Bytu˚k tomuto mı´stu od zacˇa´tku te´to posloupnosti. Prvnı´Byte ma´adresu 0 (prˇed nı´m zˇa´dny´Byte nenı´), druhy´Byte ma´adresu 1, atd. Takovou adresu nazy´va´me absolutnı´adresa. Relativnı´adresa se nevztahuje k pocˇa´tku pameˇti, ale k urcˇite´absolutnı´adrese (to by´va´obvykle zacˇa´tek pameˇt’ove´ho bloku nebo adresove´ho prostoru procesu) a je to tedy pocˇet Bytu˚od te´to absolutnı´adresy. Kazˇdy´proces ma´prˇideˇlen pameˇt’ovy´prostor v rozsahu urcˇity´ch adres, proto hovorˇı´me o adresove´m prostoru. Rozlisˇujeme

• fyzicky´ adresovy´ prostor – adresovy´ prostor, ktery´ je fyzicky k dispozici ve vy´pocˇetnı´m syste´mu, • logicky´adresovy´prostor – adresovy´prostor, ktery´majı´k dispozici procesy.

Logicky´adresovy´prostor mu˚zˇe by´t mensˇı´nebo roven fyzicke´mu, ale s rostoucı´mi potrˇebami procesu˚nemusı´pro jejich pra´ci rozsah fyzicke´ho adresove´ho prostoru dostacˇovat. Proto mu˚zˇe by´t operacˇnı´pameˇt’„nastavova´na“ prostorem na vneˇjsˇı´m pameˇt’ove´m me´diu (obvykle pevne´m disku), pak je logicky´ adresovy´prostor veˇtsˇı´ nezˇfyzicky´. Pokud je mozˇne´, aby logicky´adresovy´prostor byl veˇtsˇı´nezˇfyzicky´, pak hovorˇı´me o virtua´lnı´ch metoda´ch prˇideˇlova´nı´pameˇti. Cˇa´st adresove´ho prostoru obvykle zabı´ra´ samotny´ operacˇnı´ syste´m, jsou to obvykle adresy na zacˇa´tku adresove´ho prostoru. V prˇı´padeˇ, zˇe operacˇnı´syste´m pouzˇı´va´metody ochrany pameˇti nebo alesponˇrozlisˇuje procesy na beˇzˇı´cı´v privile- govane´m rezˇimu a beˇzˇı´cı´v uzˇivatelske´m rezˇimu, beˇzˇny´m procesu˚m nenı´dovolen prˇı´stup do te´to oblasti nebo je prˇed nimi prˇı´mo skryta. Existuje vı´ce metod ochrany pameˇti, veˇtsˇinou ale vyzˇadujı´hardwarovou podporu (je dostupna´prakticky na vsˇech noveˇjsˇı´ch procesorech, vcˇetneˇIntel od 386).

1Velikost videopameˇti za´lezˇı´na potrˇeba´ch graficke´karty a prˇedevsˇı´m na zvolene´m graficke´m mo´du zahrnujı´cı´m rozlisˇenı´obrazovky, barevnou hloubku a prˇı´padneˇpocˇet videostra´nek („logic- ky´ch obrazovek“, ktere´lze strˇı´dat a tak rychle meˇnit obraz na monitoru). KAPITOLA 3 SPRA´VA PAMEˇ TI 25

3.2 Rea´lne´metody prˇideˇlova´nı´pameˇti

Zde probereme metody pouzˇı´vane´v prˇı´padeˇ, zˇe logicky´adresovy´prostor neprˇe- kracˇuje fyzicky´, tedy fyzicka´vnitrˇnı´pameˇt’dostacˇuje potrˇeba´m procesu˚, a mozˇnosti rˇesˇenı´proble´mu˚vznikajı´cı´ch prˇi pouzˇı´va´nı´teˇchto metod.

3.2.1 Prˇideˇlenı´jedne´souvisle´oblasti pameˇti Tato jednoducha´metoda spocˇı´va´v prˇideˇlenı´vesˇkere´ho adresove´ho prostoru pro- cesu kromeˇoblasti operacˇnı´ho syste´mu. Pameˇt’je rozdeˇlena na trˇi cˇa´sti: pameˇt’vy- hrazenou pro operacˇnı´syste´m, pameˇt’vyuzˇı´vanou procesem a nevyuzˇitou pameˇt’. Tuto metodu pouzˇı´valy operacˇnı´syste´my, ktere´nebyly multitaskove´(naprˇı´klad CP/M). Pro ochranu pameˇti je vhodne´ alesponˇ pouzˇı´vat meznı´ registr, ve ktere´m je ulozˇena adresa zacˇa´tku pameˇti procesu (tedy oddeˇluje pameˇt’operacˇnı´ho syste´mu od pameˇti procesu), tento registr pak proces nesmı´prˇekrocˇit. } Volna´, nevyuzˇita´ pameˇt’ Pameˇt’,kterou ma´

{z proces k dispozici Pameˇt’ pouzˇı´vana´ Meznı´ procesem registr 2⇒ | Pameˇt’operacˇnı´ho $000000 syste´mu

Obra´zek 3.1: Prˇideˇlenı´jedne´souvisle´oblasti pameˇti

Vy´hody:

• jednoduchost spra´vy, • nevelke´na´roky na technicke´vybavenı´(funguje to prakticky vsˇude).

Nevy´hody:

• nemozˇnost mı´t spusˇteˇno vı´ce procesu˚najednou (jednoprogramovy´syste´m), KAPITOLA 3 SPRA´VA PAMEˇ TI 26

• velka´cˇa´st pameˇti mu˚zˇe zu˚stat nevyuzˇita´, pokud ji jeden beˇzˇı´cı´proces ne- potrˇebuje, take´ ostatnı´ prostrˇedky vy´pocˇetnı´ho syste´mu jsou nedostatecˇneˇ vyuzˇı´va´ny (procesor). S mı´rny´m zvy´sˇenı´m slozˇitosti lze i v tomto prˇı´padeˇ pouzˇı´vat omezeny´ beˇh vı´ce procesu˚ (vı´ceprogramovy´ syste´m), a to tak, zˇe kdyzˇ ma´ by´t spusˇteˇn dalsˇı´ proces, cela´pameˇt’ od meznı´ho registru (prˇideˇlena´pu˚ vodnı´mu procesu) se ulozˇı´ do docˇasne´ho souboru na pevny´disk, pak je prˇideˇlena noveˇspusˇteˇne´mu procesu a azˇpo jeho ukoncˇenı´je obnovena do stavu prˇed „za´lohova´nı´m“ prˇi spousˇteˇnı´ dalsˇı´ho procesu. Jestlizˇe je takto postupneˇspusˇteˇno vı´ce procesu˚, mu˚zˇe by´t pro organizaci odlozˇeny´ch procesu˚pouzˇit princip za´sobnı´ku.

3.2.2 Prˇideˇlova´nı´bloku˚pevne´velikosti Spra´vce pameˇti prˇi spusˇteˇnı´operacˇnı´ho syste´mu rozdeˇlı´operacˇnı´pameˇt’na bloky pevne´de´lky a ty pak prˇideˇluje procesu˚m. Procesu je prˇi jeho spusˇteˇnı´prˇideˇlen pameˇt’ovy´blok, adresove´prostory jednotlivy´ch procesu˚ jsou tedy oddeˇleny. Tento typ adresova´nı´jizˇdnes nenı´moc pouzˇı´va´n, objevil se naprˇı´klad u OS MFT (beˇzˇel na strojı´ch IBM 360). Bloky mohou by´t bud’vsˇechny stejneˇvelke´nebo ru˚zne´velikosti. Druha´mozˇnost znamena´trochu slozˇiteˇjsˇı´spra´vu, ale umozˇnˇuje le´pe pracovat s pameˇtı´– procesu prˇideˇlujeme takovy´blok, ktery´je volny´a jeho velikost nejvı´ce odpovı´da´potrˇeba´m procesu (ale je za´rovenˇveˇtsˇı´nebo rovna pozˇadovane´velikosti). Protozˇe pocˇet bloku˚je konstantnı´po celou dobu beˇhu syste´mu, je mozˇne´evi- dovat bloky v tabulce. Kazˇdy´blok ma´jeden rˇa´dek tabulky, mu˚ zˇe by´t zde ulozˇena pocˇa´tecˇnı´ adresa bloku, de´lka bloku a vlastnı´k (proces) nebo informace zˇe jde o volny´blok. Metoda umozˇnˇuje implementaci multitaskingu za prˇedpokladu, zˇe je pouzˇita vhodna´ochrana pameˇti (naprˇı´klad dva meznı´registry pro nejnizˇsˇı´a nejvysˇsˇı´adresu pra´veˇbeˇzˇı´cı´ho procesu). Vy´hody: • jednoduchost spra´vy, • mozˇnost implementace multitaskingu. Nevy´hody: • proces pozˇadujı´cı´vı´ce pameˇti, nezˇje de´lka nejveˇtsˇı´ho volne´ho bloku, nelze spustit, • velka´pravdeˇpodobnost fragmentace. KAPITOLA 3 SPRA´VA PAMEˇ TI 27

Meznı´ Volny´blok registr 2 2

⇒ } Meznı´ Pameˇt’prˇideˇlena´ registr 1 Pouzˇı´va´proces 2 {z procesu 2

2 |

⇒ } Pameˇt’prˇideˇlena´

Pouzˇı´va´proces 1 {z procesu 1 | Pameˇt’operacˇnı´ho syste´mu $000000

Obra´zek 3.2: Prˇideˇlova´nı´bloku˚pevne´velikosti (beˇzˇı´proces 2)

3.2.3 Dynamicke´prˇideˇlova´nı´bloku˚pameˇti Nevy´hody prˇedchozı´metody vyply´vajı´prˇedevsˇı´m z nemozˇnosti urcˇovat velikost bloku˚pru˚beˇzˇneˇ, prˇi beˇhu syste´mu. Tento proble´m mu˚zˇeme rˇesˇit tak, zˇe velikost prˇideˇlene´ho bloku urcˇujeme azˇprˇi zˇa´dosti procesu o pameˇt’. Proces prˇi sve´m spusˇteˇnı´ pozˇa´da´ o urcˇite´ mnozˇstvı´ pameˇti. Spra´vce pameˇti vyhleda´volny´blok s de´lkou veˇtsˇı´nebo rovnou pozˇadavku˚m procesu a tuto pa- meˇt’prˇideˇlı´. Pokud se ale nepodarˇı´najı´t vhodny´volny´blok, proces nelze spustit. Prˇed ukoncˇenı´m sve´cˇinnosti proces musı´vra´tit prˇideˇlenou pameˇt’ a ta mu˚zˇe by´t prˇideˇlena dalsˇı´mu procesu. Protozˇe pocˇet a de´lka bloku˚ se meˇnı´ beˇhem pra´ce syste´mu, evidence bloku˚ v tabulce nenı´vhodna´. Prˇi neusta´ly´ch zmeˇna´ch de´lky tabulky nenı´mozˇne´prˇedem odhadnout jejı´ maxima´lnı´ velikost. Rˇ esˇenı´ je vı´ce, naprˇı´klad vytvorˇenı´ hlavicˇek bloku˚pameˇti neprˇı´stupny´ch samotne´mu procesu (trˇebazˇe je mu tento blok prˇideˇ- len), v hlavicˇce pak ulozˇı´me informaci o vlastnı´kovi nebo o tom, zˇe se jedna´o volny´ blok, a da´le adresu pocˇa´tku na´sledujı´cı´ho bloku (tedy ukazatel na dalsˇı´blok). Tı´mto zpu˚sobem zrˇeteˇzı´me bloky do dynamicke´ho seznamu, se ktery´m se jizˇda´jedno- dusˇe pracovat. Pameˇt’ vyhrazena´pro hlavicˇku bloku nenı´ procesu prˇı´stupna´(ani o nı´nevı´). Pokud proces zˇa´da´o prˇı´stup do sve´pameˇti, k jeho adresove´mu prostoru se dostaneme jednodusˇe tak, zˇe od prvnı´ho bloku postupujeme po ukazatelı´ch na na´sledujı´cı´bloky, to tak dlouho, dokud podle informacı´v hlavicˇka´ch nenalezneme ten blok, ktery´hleda´me. Stejneˇpostupujeme, kdyzˇhleda´me volny´blok pameˇti pro prˇideˇlenı´noveˇspousˇteˇne´mu procesu. KAPITOLA 3 SPRA´VA PAMEˇ TI 28

- vlastnı´k: volne´ dalsˇı´:  NULL { Pameˇt’ Pouzˇı´va´proces 2 procesu 2 }| vlastnı´k: ID procesu 2 z dalsˇı´: 

vlastnı´k: volne´ dalsˇı´:  { Pameˇt’ Pouzˇı´va´proces 1 procesu 1 }| vlastnı´k: ID procesu 1

z dalsˇı´: Pameˇt’OS $000000

Obra´zek 3.3: Dynamicke´prˇideˇlova´nı´bloku˚pameˇti

Prˇi uvolnˇova´nı´bloku pameˇti postupujeme na´sledovneˇ: kdyzˇje blok obklopen prˇideˇleny´mi bloky, zmeˇnı´me pouze informaci o vlastnı´kovi bloku. Jestlizˇe vsˇak prˇed nebo za tı´mto blokem je volny´blok, musı´me uvolnˇovanou oblast k tomuto bloku prˇipojit. Tady je trˇeba jen da´t pozor na to, aby nebyl narusˇen rˇeteˇz bloku˚, tedy zvolit vhodnou posloupnost prˇesmeˇrova´nı´a uvolneˇnı´ ukazatelu˚. Vy´hody: • vsˇechny vy´hody prˇedchozı´metody, i kdyzˇspra´va pameˇti je o neˇco na´rocˇneˇjsˇı´ a vyhleda´va´nı´konkre´tnı´ho bloku pomalejsˇı´, • cˇa´stecˇneˇodstranˇuje nevy´hody prˇedchozı´metody. Nevy´hody: • pocˇet procesu˚, ktere´lze spustit, je limitova´n pozˇadavky jizˇspusˇteˇny´ch pro- cesu˚, a pokud je pameˇt’fragmentovana´, je maxima´lnı´velikost pozˇadavku na pameˇt’limitovana´velikostı´nejveˇtsˇı´ho volne´ho bloku, • urcˇita´pravdeˇpodobnost fragmentace. Uvedene´nevy´hody se dajı´snı´zˇit metodami defragmentace pameˇti, ktere´jsou pro- bı´ra´ny v kapitole 3.3 na str. 31.

3.2.4 Segmentace Kazˇde´mu procesu je prˇirˇazeno neˇkolik (ru˚zneˇdlouhy´ch) bloku˚pameˇti, segmentu˚. Pokud je to potrˇeba a je v dane´m smeˇru volna´oblast pameˇti, segmenty lze prodluzˇo- KAPITOLA 3 SPRA´VA PAMEˇ TI 29

vat. Kazˇdy´segment obvykle mı´va´urcˇity´u´cˇel, naprˇı´klad segment pro ko´d procesu (code segment), datovy´segment (data segment, jeden nebo vı´ce, segment pro pro- meˇnne´s dynamickou de´lkou se obvykle nazy´va´ halda), za´sobnı´kovy´segment (stack segment, obsazuje se od nejvysˇsˇı´ch adres k nejnizˇsˇı´m), prˇekryvny´segment (overlay segment, naprˇı´klad pro dynamicke´knihovny). Neˇktere´segmenty jsou plneˇkonstantnı´(nemeˇnı´se jejich de´lka ani obsah, naprˇı´- klad ko´d procesu a globa´lnı´konstanty), jine´majı´konstantnı´de´lku, ale promeˇnny´ obsah (globa´lnı´promeˇnne´), dalsˇı´majı´promeˇnnou de´lku i obsah (za´sobnı´k). To lze zohlednit prˇi umı´st’ova´nı´segmentu˚v pameˇti a rˇesˇenı´ fragmentace. Procesy, ktere´ jsou instancemi te´hozˇprogramu, mohou sdı´let plneˇkonstantnı´segmenty (pokud to syste´m umozˇnˇuje). Procesy pouzˇı´vajı´relativnı´adresy, adresy zacˇa´tku jednotlivy´ch segmentu˚jsou ulozˇeny v segmentovy´ch registrech procesoru (tedy je to opeˇt hardwaroveˇza´visle´ rˇesˇenı´, kazˇdy´procesor ma´jine´registry). Absolutnı´adresa je pak vypocˇtena pomocı´ obsahu segmentovy´ch registru˚. Adresa objektu z hlediska procesu ma´tedy dveˇ cˇa´sti – segment (urcˇenı´, ve ktere´m segmentu se objekt nacha´zı´) a offset (relativnı´ adresa v ra´mci segmentu, prvnı´Byte v segmentu ma´offset = 0). Vy´hodou tohoto rˇesˇenı´je, zˇe prˇı´padne´prˇesouva´nı´segmentu nezpu˚sobı´procesu proble´my s adresami. Je nutne´zajisˇt’ovat mapova´nı´relativnı´adresy v segmentu na absolutnı´adresu. Pokud je implementova´n multitasking, je nutne´prˇi „vy´meˇneˇ“ procesu˚na procesoru ulozˇit obsah segmentovy´ch registru˚odstavovane´ho proce- soru a prˇi znovuprˇideˇlenı´procesoru tomuto procesu znovu tyto hodnoty do registru˚ nacˇı´st. Vy´hody:

• velikost segmentu˚mu˚zˇe by´t ru˚zna´, podle potrˇeby procesu, • segmenty je mozˇne´prodluzˇovat a prˇesouvat, • pokud to spra´vce pameˇti umozˇnı´, neˇktere´segmenty lze sdı´let.

Nevy´hody:

• nutnost hardwarove´podpory (segmentove´registry), • ochrana pameˇti je komplikovaneˇjsˇı´, protozˇe segmenty majı´promeˇnnou de´lku, • pameˇt’, kterou lze dalsˇı´mu procesu prˇideˇlit, je omezena velikostı´nejveˇtsˇı´ho souvisle´ho bloku volne´pameˇti, • urcˇita´ pravdeˇpodobnost fragmentace, ta se ale da´ rˇesˇit prˇesouva´nı´m seg- mentu˚. KAPITOLA 3 SPRA´VA PAMEˇ TI 30

 Stack Segment Registry procesoru

Volna´pameˇt’ SS

ES Extended Data Segment  DS Data Segment  CS Code Segment . . .  Pameˇt’operacˇnı´ho syste´mu $000000

Obra´zek 3.4: Segmentace pameˇti (segmenty jedine´ho procesu)

3.2.5 Jednoduche´stra´nkova´nı´ Tato metoda rozlisˇuje fyzickou adresu objektu v pameˇti (to je absolutnı´ adresa objektu) a logickou adresu tohoto objektu (s tou pracujı´procesy). Pameˇt’ovy´prostor je rozdeˇlen na stejneˇdlouhe´u´seky – stra´nky, pokud mozˇno spı´sˇe mensˇı´velikosti (obvykle jeden nebo vı´ce kB), procesu je prˇideˇleno tolik u´ seku˚, kolik potrˇebuje. Procesu se jeho adresovy´prostor jevı´jako spojity´, trˇebazˇe fyzicky spojity´nemusı´ by´t, pouzˇı´va´z jeho hlediska „absolutnı´adresy“, ktere´jsou ve skutecˇnosti pouze logicky´mi adresami (od nuly) nebo se jako v prˇı´padeˇsegmentace pameˇti skla´dajı´ ze dvou cˇa´sti – cˇı´sla stra´nky a relativnı´adresy uvnitrˇstra´nky. Protozˇe ma´me konstantnı´ pocˇet stra´nek (pameˇt’ je rozdeˇlena jizˇ prˇi spusˇteˇnı´ operacˇnı´ho syste´mu) a navı´c jsou vsˇechny stejneˇdlouhe´, mu˚zˇe by´t evidence stra´nek vedena v jednoduche´tabulce, kde kazˇde´stra´nce je prˇirˇazen vlastnı´k nebo informace o tom, zˇe jde o volnou stra´nku (nemusı´me ani ukla´dat velikost stra´nky). U kazˇde´ho procesu je pak evidova´n seznam prˇideˇleny´ch stra´nek. Prˇi jake´mkoliv prˇı´stupu do pameˇti spra´vce pameˇti prova´dı´prˇeklad adres: cˇı´slo stra´nky ∗ de´lka stra´nky + offset. Vy´hody:

• proces mu˚zˇe dostat tolik stra´nek, kolik potrˇebuje (pokud jsou volne´), stra´nky nemusı´na sebe navazovat, • nejsou proble´my s fragmentacı´. KAPITOLA 3 SPRA´VA PAMEˇ TI 31

Evidence procesu˚ . . . Proces: Stra´nky: . . . ID procesu 1 1,3 . . . Proces 2 (5) ID procesu 2 2,5 ......

volne´ (4)

Tabulka obsazenı´pameˇti Proces 1 (3) 0 volne´ 1 ID procesu 1 Proces 2 (2) 2 ID procesu 2 3 ID procesu 1 Proces 1 (1) 4 volne´ 5 ID procesu 2 ... volne´ (0) $000000

Obra´zek 3.5: Stra´nkova´nı´pameˇti

Nevy´hody:

• fragmentace uvnitrˇstra´nek (proces nemusı´potrˇebovat celou poslednı´stra´nku), • omezenı´dana´velikostı´fyzicke´ho adresove´ho prostoru.

3.3 Rˇ esˇenı´fragmentace pameˇti

Pameˇt’ (vneˇjsˇı´, naprˇı´klad pevny´disk, i vnitrˇnı´, tedy operacˇnı´pameˇt’) je fragmento- vana´, pokud volne´oblasti pameˇti netvorˇı´souvisly´blok. Fragmentace na vneˇjsˇı´m pameˇt’ove´m me´diu vznika´tehdy, kdyzˇsmazˇeme jeden soubor, do takto uvolneˇne´ho mı´sta je ulozˇen novy´ soubor, ten se rozhodneme prodlouzˇit a on se po tomto prodlouzˇenı´do tohoto mı´sta nevejde, tedy je nutne´na konci volne´ho mı´sta vytvorˇit odkaz (at’uzˇjakkoliv) na dalsˇı´volne´mı´sto, ve ktere´m soubor pokracˇuje. Aby byla pameˇt’ fragmentovana´, ale stacˇı´ i mnohem me´neˇ – pokud je prˇi ukla´da´nı´souboru vybı´ra´no zbytecˇneˇvelke´ mı´sto. U operacˇnı´pameˇti je situace podobna´, jen mı´sto souboru˚pracujeme s pameˇt’o- vy´mi prostory jednotlivy´ch procesu˚. Pameˇt’ove´prostory procesu˚obvykle neby´vajı´ rozdrobeny na vı´ce cˇa´stı´, ale prˇesto k fragmentaci docha´zı´. V prˇı´padeˇ, zˇe o pameˇt’ zˇa´da´noveˇspousˇteˇny´proces, musı´by´t procha´zena pameˇt’a hleda´n vhodneˇvelky´ KAPITOLA 3 SPRA´VA PAMEˇ TI 32 volny´blok pameˇti, a v prˇı´padeˇ, zˇe nenı´nalezen dostatecˇneˇvelky´blok, proces nelze spustit. Fragmentace se u rea´lny´ch metod prˇideˇlova´nı´pameˇti da´ snı´zˇit dveˇma zpu˚soby – vhodnou metodou vy´beˇru bloku pameˇti prˇi zˇa´dosti procesu (alokacˇnı´strategie) nebo setrˇa´sa´nı´m pameˇti.

Vy´beˇr vhodne´ho bloku pameˇti: Kdyzˇnoveˇspousˇteˇny´proces pozˇa´da´o pameˇt’, stejny´m zpu˚sobem take´hleda´me vhodneˇvelky´volny´blok. Za´kladnı´m prˇedpokla- dem je, aby se do nalezene´ho bloku pozˇadavek procesu vesˇel, cozˇna´m mu˚zˇe da´t vı´ce mozˇnostı´vy´beˇru bloku:

• metoda first fit – spra´vce pameˇti procha´zı´bloky od zacˇa´tku uzˇivatelske´ oblasti a prˇideˇlı´pameˇt’z prvnı´ho vhodne´ho bloku, je to nejrychlejsˇı´metoda, i kdyzˇ ne nejoptima´lneˇjsˇı´(veˇtsˇı´pravdeˇpodobnost fragmentace), • metoda best fit – spra´vce pameˇti projde vsˇechny bloky a hleda´takovy´blok, ktery´je vhodny´(pozˇadavek se do neˇho vejde) a za´rovenˇje co nejmensˇı´, je to nejoptima´lneˇjsˇı´metoda (je co nejmensˇı´„zbytek“), ale cˇasoveˇna´rocˇneˇjsˇı´nezˇta prˇedchozı´, • metoda last fit – spra´vce pameˇti vyhleda´poslednı´vyhovujı´cı´, tuto metodu pouzˇijeme, pokud pameˇt’ ma´by´t obsazova´na smeˇrem od nejvysˇsˇı´ch adres k nejnizˇsˇı´m (pra´ce s pameˇtı´typu za´sobnı´k).

Pokud pouze volı´me vhodnou metodu vy´beˇru bloku pameˇti, rˇesˇı´me fragmentaci jen cˇa´stecˇneˇ. Spolecˇnou vy´hodou teˇchto metod je, narozdı´l od na´sledujı´cı´ho rˇesˇenı´, zˇe adresovy´prostor procesu se po celou dobu jeho beˇhu nemeˇnı´.

Setrˇa´sa´nı´pameˇti (prˇesouva´nı´bloku˚pameˇti): Abychom mohli spojit volne´bloky do jednoho velke´ho adresove´ho prostoru prˇideˇlitelne´ho procesu s velky´mi pameˇt’o- vy´mi na´roky, musı´me obsazene´bloky „setrˇa´st“ k nizˇsˇı´m adresa´m, aby volne´bloky na sebe navazovaly. Je vsˇak nutne´vyrˇesˇit dva proble´my: samotne´prˇesouva´nı´je cˇa- soveˇna´rocˇne´, a navı´c se adresovy´prostor procesu, ktere´mu je pameˇt’prˇesouva´na, meˇnı´(nemu˚zˇe pouzˇı´vat absolutnı´adresy). Prvnı´nevy´hodu vyrˇesˇı´me jednodusˇe tı´m, zˇe k prˇesouva´nı´bude docha´zet pouze tehdy, kdyzˇto bude nutne´, tedy ve chvı´li, kdy o pameˇt’bude zˇa´dat proces s na´roky vysˇsˇı´mi nezˇje de´lka nejveˇtsˇı´ho pameˇt’ove´ho bloku, a prˇesouvat budeme jen tak dlouho, dokud nevytvorˇı´me dostatecˇneˇvelky´blok. Navı´c za´kladnı´desky by´vajı´ vybaveny mozˇnostmi, jak procesor zbavit tohoto typu u´loh (naprˇı´klad cˇip blitter – block bits transfer, pomocny´procesor pro prˇesuny pameˇt’ovy´ch bloku˚). KAPITOLA 3 SPRA´VA PAMEˇ TI 33

Druhou nevy´hodu lze rˇesˇit neˇkolika zpu˚soby:

1. Stanovenı´pravidel pro adresova´nı´na nizˇsˇı´u´rovni, naprˇı´klad pouzˇı´va´nı´rela- tivnı´ch adres a vztahova´nı´k urcˇite´mu registru, ve ktere´m je ulozˇena adresa momenta´lnı´ho zacˇa´tku adresove´ho prostoru procesu. Vy´hodou je pomeˇrneˇjednoducha´spra´va pameˇti a mala´cˇasova´na´rocˇnost, ne- vy´hodou je hardwarova´za´vislost (nenı´pouzˇitelne´pro syste´my portovane´na ru˚zne´hardwarove´architektury) a nutnost spolupra´ce programa´toru˚aplikacı´ (musı´pouzˇı´vat pouze relativnı´adresy). 2. Stanovenı´pravidel adresova´nı´na vysˇsˇı´u´rovni, naprˇı´klad pouzˇı´vat mecha- nismus zamyka´nı´bloku pameˇti po dobu jejı´ho pouzˇı´va´nı´. Vy´hodou je jednoducha´ spra´va pameˇti, nevy´hodou je nutnost spolupra´ce programa´toru˚aplikacı´a take´jejich dobra´vu˚le (programa´tor take´mu˚zˇe za- mknout blok hned prˇi spusˇteˇnı´procesu a odemknout ho azˇprˇi ukoncˇova´nı´ jeho beˇhu, tı´m znemozˇnı´vesˇkere´prˇesouva´nı´). 3. Prˇed kazˇdy´m prˇesouva´nı´m spra´vce pameˇti informuje kazˇdy´ proces, jehozˇ adresovy´prostor je prˇesouva´n, o nove´adrese zacˇa´tku bloku, a proces si pak prˇepocˇı´ta´vsˇechny sve´absolutnı´adresy (obvykle ukazatele). Zpra´va o prˇe- souva´nı´musı´mı´t nejvysˇsˇı´prioritu, aby se k procesu˚m dostala vcˇas. Tento zpu˚sob rˇesˇenı´klade vysoke´na´roky na syste´m i procesy,proto se pouzˇı´va´ pouze jako doplneˇk prvnı´ho uvedene´ho zpu˚sobu, a to pro programy, ktere´ musı´pouzˇı´vat absolutnı´adresy (ovladacˇe, antivirove´programy, apod.).

Metody setrˇa´sa´nı´pameˇti jsou dveˇ:

• kooperativnı´setrˇa´sa´nı´– pouzˇitı´druhe´ho rˇesˇenı´, procesy na prˇesunech spolu- pracujı´se syste´mem, ovlivnˇujı´je (musı´zamykat bloky), pouzˇı´valo se naprˇı´- klad v Apple MacIntosh do verze 9, • transparentnı´setrˇa´sa´nı´– kombinace prvnı´ho a trˇetı´ho rˇesˇenı´, procesy na prˇe- sunech nespolupracujı´, pouzˇı´valo se v syste´mech Epoc (kdyzˇ jesˇteˇsˇlo o ope- racˇnı´syste´m pro osobnı´pocˇı´tacˇe).

3.4 Virtua´lnı´pameˇt’

Virtua´lnı´pameˇt’znamena´rozsˇı´rˇenı´vnitrˇnı´pameˇti o oblast na vneˇjsˇı´m pameˇt’ove´m me´diu, obvykle pevne´m disku. Du˚vodem je odstraneˇnı´za´kladnı´nevy´hody vsˇech KAPITOLA 3 SPRA´VA PAMEˇ TI 34

rea´lny´ch metod prˇideˇlova´nı´pameˇti, nemozˇnosti spustit proces, jehozˇpozˇadavky na pameˇt’jsou vysˇsˇı´nezˇmnozˇstvı´momenta´lneˇvolne´ (fyzicke´) operacˇnı´pameˇti. Existuje vı´ce metod pro pra´ci s virtua´lnı´ pameˇtı´, obvykle vycha´zejı´ z rea´lne´ metody stra´nkova´nı´(prˇı´padneˇv kombinaci s jinou metodou). Fyzicka´vnitrˇnı´pa- meˇt’je rozdeˇlena na ra´mce a logicka´pameˇt’je rozdeˇlena na stra´nky. Vsˇechny ra´mce a stra´nky majı´stejnou velikost. Protozˇe logicky´adresovy´ prostor by´va´rozsa´hlejsˇı´ nezˇfyzicky´, by´va´stra´nek obvykle vı´ce nezˇra´mcu˚. Evidence pameˇti je vedena v ta- bulce stra´nek, tam kromeˇvlastnı´ka stra´nky je uvedeno, kde se momenta´lneˇnacha´zı´ (cˇı´slo ra´mce nebo adresa na disku). Mnohe´prˇideˇlene´stra´nky nejsou zrovna pouzˇı´va´ny, at’uzˇproto, zˇe proces, ktery´ je vlastnı´, zrovna nema´prˇideˇlen procesor, tedy „nic nedeˇla´“, nebo tento proces zrovna nepotrˇebuje pracovat s obsahem te´to stra´nky (pracuje s jinou stra´nkou). Stra´nky majı´bud’prˇirˇazen neˇktery´ra´mec, pak se nacha´zejı´prˇı´mo ve fyzicke´pameˇti, nebo jsou odlozˇeny na vneˇjsˇı´pameˇt’ove´me´dium, odkud v prˇı´padeˇpotrˇeby mohou by´t znovu nacˇteny do neˇktere´ho ra´mce. Je obvykle´, zˇe neˇktere´stra´nky nelze odlozˇit. Ty´ka´se to neˇktery´ch syste´movy´ch stra´nek, kde by odkla´da´nı´bud’vedlo ke zpomalova´nı´syste´mu nebo komplikovalo spra´vu periferiı´(naprˇı´klad stra´nky s ovladacˇi zarˇı´zenı´). Pro syste´m by´vajı´rezervo- va´ny nejvysˇsˇı´logicke´adresy, a tedy proces pouzˇı´va´adresy „od nuly“. Pro odkla´da´nı´stra´nek, ktere´nemajı´prˇirˇazen zˇa´dny´ra´mec, se pouzˇı´va´bud’spe- cia´lnı´soubor (odkla´dacı´soubor, swap soubor, stra´nkovacı´soubor) nebo cela´oblast na disku. Protozˇe pracujeme s vneˇjsˇı´m pameˇt’ovy´m me´diem, pro ktere´ obvykle existuje urcˇita´hodnota stanovujı´cı´de´lku nejmensˇı´ho mozˇne´ho bloku pameˇti, se ktery´m lze na tomto me´diu pracovat (cˇı´st, zapisovat), pak velikost stra´nky se odvı´jı´ od te´to hodnoty (celocˇı´selny´na´sobek, cˇasto prˇı´mo tato hodnota), obvykla´je velikost stra´nky 1024 B (1 kB) nebo 4096 B (4 kB).

3.4.1 Stra´nkova´nı´na zˇa´dost Kazˇdy´proces ma´prˇideˇlenu jednu nebo vı´ce stra´nek logicke´pameˇti. Oproti rˇesˇenı´ za´kladnı´ho stra´nkova´nı´ je trochu slozˇiteˇjsˇı´ prˇepocˇı´ta´va´nı´ logicky´ch a fyzicky´ch adres, protozˇe se musı´rˇesˇit i prˇı´pad, kdy je stra´nka odlozˇena´na disku. Proces ke svy´m stra´nka´m prˇistupuje takto:

a) Stra´nka nacha´zı´ve fyzicke´pameˇti: pak te´to stra´nce odpovı´da´neˇktery´ra´mec. V tabulce stra´nek je uvedeno cˇı´slo tohoto ra´mce a pak se absolutnı´ adresa vypocˇte z adresy zacˇa´tku ra´mce (pocˇet ra´mcu˚kra´t velikost ra´mce) a prˇicˇte se offset (relativnı´adresa uvnitrˇstra´nky). KAPITOLA 3 SPRA´VA PAMEˇ TI 35

b) Stra´nka je odlozˇena na disku: proces vyvola´prˇerusˇenı´ nazvane´ vy´padek stra´nky (page fault), cˇı´mzˇse prˇerusˇı´zpracova´va´nı´jeho u´lohy, spra´vce pameˇti najde bud’volny´ra´mec nebo stra´nku, ktera´sice ma´prˇirˇazen ra´mec, ale lze ji odlozˇit (tuto stra´nku odlozˇı´na disk), nacˇte do ra´mce zˇa´danou stra´nku a pak uzˇk nı´ proces prˇistupuje stejneˇjako v prvnı´m prˇı´padeˇ.

Logicka´pameˇt’ Vneˇjsˇı´pameˇt’ove´ stra´nka 8 me´dium - Operacˇnı´pameˇt’ stra´nka 7 ra´mec 4  stra´nka 6

ra´mec 3  stra´nka 5

ra´mec 2  stra´nka 4 -

ra´mec 1  stra´nka 3 -

ra´mec 0  stra´nka 2

stra´nka 1 -

stra´nka 0

Obra´zek 3.6: Stra´nkova´nı´na zˇa´dost Prˇi urcˇova´nı´, ktery´ra´mec ma´by´t uvolneˇn v prˇı´padeˇ, zˇe je nutne´neˇkterou stra´nku prˇesunout z disku do operacˇnı´pameˇti, pouzˇı´va´me neˇkterou z metod vy´beˇru obeˇti: • FIFO (First In, First Out) – je odlozˇena ta stra´nka, ktera´ma´prˇirˇazen ra´mec nejde´le (nejde´le nebyla odlozˇena). Nevy´hodou te´to metody je, zˇe pokud je neˇktera´stra´nka pouzˇı´va´na hodneˇcˇasto, by´va´take´hodneˇcˇasto nacˇtena v ope- racˇnı´pameˇti a proto je podle te´to metody take´nejcˇasteˇji odkla´da´na. Spra´vce pameˇti vede frontu umı´steˇny´ch stra´nek, vzˇdy kdyzˇje stra´nce prˇideˇlen ra´mec, je zarˇazena na konec fronty. Prˇi nutnosti odlozˇit stra´nku je odlozˇena stra´nka ze zacˇa´tku fronty. • LFU (Laft Frequently Used) – je odlozˇena nejme´neˇpouzˇı´vana´stra´nka. Kom- plikacı´metody je urcˇenı´, ktera´to vlastneˇje, musı´se naprˇı´klad u kazˇde´stra´nky ve´st cˇı´tacˇzvysˇovany´o 1 prˇi kazˇde´m prˇı´stupu na stra´nku. Tato metoda bo- huzˇel postihuje nejvı´c pra´veˇspusˇteˇne´procesy (jejich stra´nky dosud nebyly hodneˇpouzˇı´va´ny). KAPITOLA 3 SPRA´VA PAMEˇ TI 36

• LRU (Last Recently Used) – je odlozˇena stra´nka, ktera´byla nejde´le nepou- zˇı´vana´, tedy nejde´le „lezˇela ladem“. Tento algoritmus je z hlediska procesu˚ nejlepsˇı´, implementace je vsˇak na´rocˇna´(i cˇasoveˇ), protozˇe se prˇedpokla´da´evi- dence cˇasu poslednı´ho prˇı´stupu na jednotlive´stra´nky. Proto je pouzˇı´vaneˇjsˇı´ zjednodusˇena´verze te´to metody, pseudoLRU (NUR). • NUR (Not Used Recently, pseudoLRU, hodinovy´aloritmus) – kazˇda´stra´nka ma´ used bit, jeden bit, ktery´je vzˇdy prˇi prˇı´stupu na stra´nku nastaven na 1. Spra´vce pameˇti pak porˇa´d dokola procha´zı´tabulku stra´nek a used bity teˇch stra´nek, ktere´majı´prˇirˇazeny ra´mce, nuluje (stra´nka bez ra´mce ma´logicky used bit nastaven na 0, proto byla vybra´na jako obeˇt’). Kdyzˇprˇi tomto nulo- va´nı´zjistı´, zˇe bit byl nastaven na 0, znamena´to, zˇe od poslednı´ho nulova´nı´ stra´nka nebyla pouzˇı´va´na a je tedy lepsˇı´m kandida´tem na odlozˇenı´na disk. V okamzˇiku vyvola´nı´prˇerusˇenı´vy´padku stra´nky mu˚zˇe by´t prˇi tomto procha´- zenı´na ktere´koliv stra´nce. Pak je za obeˇt’vybra´na nejblizˇsˇı´na´sledujı´cı´stra´nka s bitem nastaveny´m na 0. Te´to metodeˇse take´rˇı´ka´ hodinovy´algoritmus, protozˇe spra´vce cyklicky v dany´ch intervalech procha´zı´tabulku stra´nek.

Ochrana pameˇti je na vysˇsˇı´u´rovni prˇedevsˇı´m proto, zˇe dı´ky nutnosti prˇekladu mezi logickou a fyzickou adresou se procesory beˇzˇny´m zpu˚ sobem nedostanou mimo sve´ pameˇt’ove´ stra´nky. Da´le spra´vce pameˇti ma´ mozˇnost oznacˇit neˇktere´ (zejme´na syste´move´) stra´nky pouze pro cˇtenı´(na to stacˇı´jediny´bit, cozˇnenı´pro- ble´m, pokud pouzˇı´va´me used bity v metodeˇNUR) a prˇi pokusu o za´pis na takovou stra´nku je proces na´silneˇukoncˇen. Aby metoda mohla by´t realizova´na, usı´by´t prˇı´tomna jednotka rˇı´zenı´pameˇti (dnes jizˇby´va´integrova´na v procesoru) zajisˇt’ujı´cı´ochranu pameˇti, prˇeklad adres apod., a da´le procesor prˇi vy´padku stra´nky musı´by´t schopen po prˇideˇlenı´ra´mce te´to stra´nce zopakovat poslednı´prova´deˇnou instrukci procesu (tu, ktera´vyvolala vy´padek stra´nky). Metoda nenı´zatı´zˇena´fragmentacı´, mu˚ zˇe vznikat pouze vnitrˇnı´ fragmentace – uvnitrˇstra´nek. Vy´hody:

• vsˇechny vy´hody metody za´kladnı´ho stra´nkova´nı´, • proces ma´k dispozici tolik pameˇti, kolik potrˇebuje, nenı´limitova´n volny´m prostorem ve fyzicke´pameˇti.

Nevy´hody:

• hardwaroveˇza´visle´rˇesˇenı´. KAPITOLA 3 SPRA´VA PAMEˇ TI 37

3.4.2 Segmentace se stra´nkova´nı´m na zˇa´dost Proces ma´prˇideˇleno neˇkolik segmentu˚, kazˇdy´segment se mu˚zˇe rozkla´dat na neˇ- kolika stra´nka´ch. Pameˇt’je tedy opeˇt rozdeˇlena na stra´nky. Adresa objektu v logic- ke´m adresove´m prostoru je da´na urcˇenı´m segmentu, cˇı´slem stra´nky a offsetem na stra´nce. Spra´vce pameˇti vede u kazˇde´ho procesu zvla´sˇt’tabulku segmentu˚, u kazˇ- de´ho segmentu zde eviduje seznam stra´nek, na ktery´ch se segment rozkla´da´. V ta- bulce stra´nek pak je zachyceno, zda ma´konkre´tnı´stra´nka prˇideˇlen ra´mec nebo je odlozˇena na disku. Take´zde je mozˇne´sdı´let segmenty, jejichzˇde´lka ani obsah se nemeˇnı´. Pro takovy´ segment mu˚zˇe by´t vedena jedina´tabulka segmentu˚, i kdyzˇtento segment vyuzˇı´va´ vı´ce procesu˚. Fyzicka´(absolutnı´) adresa v pameˇti se pocˇı´ta´tak, zˇe v tabulce seg- mentu˚pro dany´proces a segment najdeme cˇı´slo stra´nky uvedene´v adrese, podle cˇı´sla pozna´me, jaka´je adresa zacˇa´tku stra´nky (cˇı´slo kra´t de´lka stra´nky) a pak jen prˇicˇteme offset. Vy´hody:

• vsˇechny vy´hody metody stra´nkova´nı´na zˇa´dost, • je mozˇne´sdı´let segmenty.

Nevy´hody:

• slozˇitost implementace, • hardwaroveˇza´visle´rˇesˇenı´.

3.4.3 Swapova´nı´procesu˚ Swapova´nı´procesu˚je jednoducha´metoda virtualizace, ktera´ spocˇı´va´v tom, zˇe se neodkla´dajı´jednotlive´stra´nky pameˇti, ale vzˇdy cely´pameˇt’ovy´prostor odkla´da- ne´ho procesu. Pameˇt’ vlastneˇani nemusı´by´t rozdeˇlena na stra´nky cˇi ra´mce (ale mu˚zˇe), protozˇe se stejneˇvzˇdy pracuje s cely´m adresovy´m prostorem procesu. Princip metody je podobny´jako u stra´nkova´nı´: prˇi vyhodnocova´nı´instrukce vyzˇadujı´cı´ prˇı´stup do pameˇti je bud’ tento prˇı´stup umozˇneˇn (pokud ma´ proces svou pameˇt’ v operacˇnı´pameˇti) nebo je vyvola´no prˇerusˇenı´. Prˇi osˇetrˇenı´tohoto prˇerusˇenı´je nalezen vhodneˇvelky´volny´prostor v operacˇnı´pameˇti nebo je vytvorˇen (stejneˇjako u stra´nkova´nı´na zˇa´dost), pameˇt’prˇesunuta a pak zopakova´na poslednı´ instrukce. Vy´hody:

• je to pomeˇrneˇjednoducha´metoda, KAPITOLA 3 SPRA´VA PAMEˇ TI 38

• V cele´m cˇasove´m intervalu, po ktery´je procesu prˇideˇlen procesor, je prˇerusˇenı´ souvisejı´cı´s prˇesunem pameˇti vyvola´no nejvy´sˇe jednou.

Nevy´hody:

• prˇesouvane´bloky pameˇti jsou obecneˇru˚zneˇvelke´, nejsou navza´jem jedno- dusˇe zameˇnitelne´, tedy pro umı´steˇnı´ dat jednoho procesu je neˇkdy nutne´ odlozˇit pameˇt’ neˇkolika „me´neˇna´rocˇny´ch“ procesu˚ a navı´c je nutne´nejdrˇı´v tento prostor najı´t, • prˇesouvajı´se zbytecˇneˇvelke´pameˇt’ove´bloky, • hardwaroveˇza´visle´rˇesˇenı´.

3.5 Spra´va pameˇti v neˇktery´ch operacˇnı´ch syste´mech

3.5.1 MS-DOS a Windows MS-DOS pouzˇı´va´za´kladnı´metodu segmentace pameˇti, beˇzˇı´cı´mu procesu je prˇi- deˇleno neˇkolik segmentu˚, z nichzˇkazˇdy´ma´stanoveny´u´ cˇel (segment ko´du, datovy´, za´sobnı´kovy´, prˇekryvny´pro nacˇı´tane´knihovny). Neexistuje prakticky zˇa´dna´mozˇnost ochrany pameˇti. Spusˇteˇny´proces mu˚zˇe prˇistupovat do ktere´koliv cˇa´sti pameˇti vcˇetneˇpameˇti vyhrazene´pro operacˇnı´sys- te´m, cˇehozˇse vyuzˇı´va´prˇedevsˇı´m prˇi prˇı´stupu k prˇerucˇenı´m (pro rˇı´zenı´perifernı´ch zarˇı´zenı´ apod.). Spra´va pameˇti je prova´deˇna kombinacı´ segmentace a prˇideˇlenı´ jedne´souvisle´oblasti (je spusˇteˇn jeden beˇzˇny´proces a jsou mu prˇideˇleny segmenty pameˇti). Jde o jednoprogramovy´syste´m, tedy mu˚zˇe by´t spusˇteˇn vzˇdy jen jeden program. Veskutecˇnosti sice mu˚zˇe beˇzˇet vı´ce programu˚soucˇasneˇ, ale pouze tak, zˇe nejdrˇı´v jsou spusˇteˇny tzv. rezidentnı´programy (programy zu˚sta´vajı´cı´v pameˇti po ukoncˇenı´ sve´nerezidentnı´cˇa´sti – TSR, Terminate and Stay Resident2) a pak (trˇeba i jejich prostrˇednictvı´m) beˇzˇny´ program. Prˇi jeho beˇhu rezidentnı´ programy nepracujı´, kromeˇzpracova´nı´prˇerusˇenı´, na ktera´jsou napojeny. Rezidentnı´programy cˇasto slouzˇı´k nahrazenı´neˇktere´funkce operacˇnı´ho sys- te´mu (mı´sto neˇktere´standardnı´znakove´sady pro obrazovku prˇesmeˇrova´vajı´na takto prˇidanou specia´lnı´znakovou sadu), napojujı´se na prˇerusˇenı´(naprˇı´klad antivi- rovy´program mu˚zˇe by´t napojen na prˇerusˇenı´souvisejı´cı´s prˇı´stupem k souboru˚m),

2TSR programy majı´dveˇcˇa´sti – rezidentnı´a nerezidentnı´ (docˇasnou). Prˇi startu programu jsou nacˇteny obeˇcˇa´sti, nerezidentnı´cˇa´st provede „jednora´zove´“ inicializacˇnı´akce a je pak odstraneˇna z pameˇti, zu˚sta´va´rezidentnı´cˇa´st obsahujı´cı´funkce napojene´na osˇetrˇovana´prˇerusˇenı´. KAPITOLA 3 SPRA´VA PAMEˇ TI 39

vylepsˇujı´uzˇivatelske´prostrˇedı´(graficke´nebo pseudograficke´menu ke spousˇteˇnı´ programu˚), zabezpecˇujı´neˇktere´du˚lezˇite´cˇa´sti syste´mu (zabra´neˇnı´prˇı´stupu do neˇ- ktery´ch cˇa´stı´ pameˇti nebo do MBR disku), rezidentneˇ pracujı´ ovladacˇe zarˇı´zenı´ (mysˇ), atd. Napojenı´se prova´dı´zajı´mavy´m, i kdyzˇneprˇı´lisˇbezpecˇny´m zpu˚sobem. Na za- cˇa´tku pameˇti je ulozˇena posloupnost adres (vektoru˚prˇerusˇenı´) jednotlivy´ch rutin zajisˇt’ujı´cı´ch obecne´osˇetrˇenı´urcˇite´ho prˇerusˇenı´, kazˇda´adresa odpovı´da´jednomu typu prˇerusˇenı´. Rezidentnı´program nebo beˇzˇny´proces sem mu˚zˇe mı´sto pu˚vodnı´ adresy ulozˇit adresu neˇktere´sve´funkce cˇi procedury, ktera´ pak bude v prˇı´padeˇvy- vola´nı´tohoto prˇerusˇenı´automaticky spusˇteˇna. Je zvykem, zˇe proces si uschova´ad- resu pu˚vodnı´rutiny a prˇi sve´m ukoncˇenı´ji nacˇte zpeˇt, prˇı´padneˇji spousˇtı´uvnitrˇsve´ vlastnı´funkce pro osˇetrˇenı´prˇerusˇenı´(procˇnevyuzˇı´t to, co uzˇje naprogramova´no, kdyzˇchceme pouze prove´st neˇco navı´c). Tı´mto zpu˚sobem mu˚zˇe by´t vytvorˇeno „zrˇeteˇzenı´“ vı´ce funkcı´ru˚zny´ch TSR programu˚a samotne´ho procesu.

Windows pouzˇı´vajı´ virtua´lnı´ metodu segmentace se stra´nkova´nı´m na zˇa´dost. Kazˇde´mu procesu je prˇideˇleno neˇkolik segmentu˚podobneˇjako v MS-DOSu. Infor- mace o kazˇde´m segmentu jsou ulozˇeny v jeho deskriptoru (popisovacˇi) (velikosti 8 B – pocˇa´tek segmentu, de´lka, opra´vneˇnı´, atd.), deskriptory segmentu˚jsou ulozˇeny v tabulce deskriptoru˚ procesu (LDT – Local Descriptor Table). Existuje take´globa´lnı´ tabulka deskriptoru˚(GDT – Global Descriptor Table) obsahujı´cı´deskriptory tabu- lek LDT jednotlivy´ch procesu˚. Aby prˇi adresaci nebylo nutne´ pouzˇı´vat deskriptory, proces pouzˇı´va´pro urcˇenı´segmentu selektory, 16-bitove´ukazatele do tabulky LDT tohoto procesu. Selektor je tedy obdobou adresy segmentu v MS-DOSu, ma´take´ stejnou de´lku, ale mı´sto ukazatele na zacˇa´tek segmentu jde o ukazatel do LDT. Logicka´adresa je dvouhodnotovy´vektor (selector,offset). V 16-bitovy´ch Windows (do verze 3.x) bylo sdı´lenı´pameˇti zcela beˇzˇne´, a to vcˇetneˇ dynamicky linkovany´ch knihoven. Pokud neˇktery´ proces chteˇl vyuzˇı´vat funkce nebo objekty ulozˇene´v neˇktere´knihovneˇ, prˇi prvnı´ zˇa´dosti o nalinkova´nı´ obsahu te´to knihovny se jejı´obsah nacˇetl do operacˇnı´pameˇti a proces dostal odkaz na tuto adresu. Prˇi zˇa´dosti dalsˇı´ho procesu se pak knihovna nenacˇı´tala do pameˇti znovu, ale dalsˇı´proces jen dostal odkaz na tute´zˇadresu v pameˇti, tedy oba procesy mohly prˇistupovat k te´zˇe oblasti pameˇti. Toho procesy vyuzˇı´valy take´ k mezi- procesorove´komunikaci. v 32-bitovy´ch Windows byly jizˇtyto aktivity omezeny. Pokud proces pozˇa´da´o prˇı´stup k dynamicky linkovane´knihovneˇ(nebo jake´muko- liv jine´mu souboru), je obsah knihovny namapova´n do adresove´ho prostoru tohoto procesu. Tak je knihovna v pameˇti nacˇtena i vı´cekra´t. KAPITOLA 3 SPRA´VA PAMEˇ TI 40

Odkla´dacı´(stra´nkovacı´) soubor se jmenuje pagefile.sys a obvykle se nacha´zı´ v korˇenove´m adresa´rˇi syste´move´ho disku. Standardneˇse jeho velikost meˇnı´, cozˇ prˇi veˇtsˇı´fragmentaci disku mu˚zˇe zpu˚sobovat va´zˇne´ zpomalenı´pra´ce v syste´mu. Za´kladnı´konfigurace odkla´da´nı´se prova´dı´v na´stroji Syste´m3, kde (v prˇı´padeˇWin- dows 2000) na karteˇ Uprˇesnit zvolı´me tlacˇı´tko Mozˇnosti vy´konu a pak tlacˇı´tko Zmeˇnit4. Mozˇnost nastavit umı´steˇnı´odkla´dacı´ho souboru v syste´mech s NT ja´drem je vy´hodna´v prˇı´padeˇ, zˇe ma´me nainstalova´no vı´ce syste´mu˚rodiny Windows (na- prˇı´klad Windows 98 a XP) a chceme, aby pouzˇı´valy tenty´zˇodkla´dacı´soubor. Je mozˇne´mı´t vı´ce odkla´dacı´ch souboru˚a rozlozˇit tak za´teˇzˇna vı´ce pevny´ch disku˚. Pokud ma´me vı´ce pevny´ch disku˚(fyzicky´ch, ne logicky´ch), doporucˇuje se umı´stit odkla´dacı´soubor na ten disk, na ktere´m nenı´nainstalova´n syste´m, zrychlı´me tı´m odkla´da´nı´(na syste´movy´disk se prˇistupuje hodneˇcˇasto, cozˇzdrzˇuje). Pouzˇı´va´nı´ odkla´dacı´ho souboru mu˚zˇeme zaka´zat nastavenı´m pocˇa´tacˇnı´i maxima´lnı´velikosti na 0. Procesory rˇady Intel, na ktery´ch Windows obvykle beˇzˇı´, majı´od x386 zabudo- va´nu za´kladnı´ochranu pameˇti, kterou Windows vyuzˇı´vajı´, pokud beˇzˇı´v chra´neˇne´m mo´du (rezˇimu ja´dra). K pameˇti v rezˇimu ja´dra mohou prˇistupovat pouze procesy beˇzˇı´cı´v rezˇimu ja´dra. Da´le se prova´dı´kontrola prˇi prˇekladu logicke´adresy, zda proces prˇistupuje ke svy´m stra´nka´m. Kazˇda´stra´nka ma´nastaven prˇı´znak urcˇu- jı´cı´, jak k nı´lze prˇistupovat (pouze pro cˇtenı´, cˇtenı´a za´pis, pouze spousˇteˇnı´ko´du, spousˇteˇnı´, cˇtenı´a za´pis, atd.).

3.5.2 Unixove´syste´my vcˇetneˇLinuxu Pu˚vodnı´Unix beˇzˇel na hardwaru, ktery´nepodporoval ochranu pameˇti, segmentaci ani virtualizaci (pocˇı´tacˇPDP-7). Spra´va pameˇti probı´hala formou podobnou me- todeˇprˇideˇlova´nı´jedne´souvisle´oblasti pameˇti s vylepsˇeny´m multiprogramova´nı´m blı´zky´m prave´mu multitaskingu. Prˇi spusˇteˇnı´dalsˇı´ho procesu byl cely´pameˇt’ovy´ prostor dosud beˇzˇı´cı´ho procesu odlozˇen (swapova´n) na disk. V pomeˇrneˇ kra´tke´ dobeˇ, jak byl Unix portova´n (prˇelozˇen, prˇepsa´n) na dalsˇı´ hardwarove´ platformy, byla implementova´na podpora virtua´lnı´ pameˇti se seg-

3K tomuto na´stroji se dostaneme z Ovla´dacı´ch panelu˚nebo v kontextove´m menu ikony Tento pocˇı´tacˇ, polozˇka Vlastnosti. To, jak proces vyuzˇı´va´ virtua´lnı´pameˇt’, take´zjistı´me ve Spra´vci u´loh (Ctrl+Shift+Esc), pokud v menu Zobrazit – vybrat sloupce vhodneˇnastavı´me zobrazenı´. 4Je mozˇne´zde nastavit umı´steˇnı´stra´nkovacı´ho souboru (u Windows s NT ja´drem) a nejmensˇı´ a nejveˇtsˇı´velikost tohoto souboru. Aby se prˇedesˇlo zmeˇna´m velikosti souboru zpomalujı´cı´m syste´m, doporucˇuje se tato dveˇcˇı´sla nastavit na stejnou hodnotu (a defragmentovat disk). KAPITOLA 3 SPRA´VA PAMEˇ TI 41

mentacı´i ochrany pameˇti, ale zpu˚sob odkla´da´nı´zu˚stal podobny´– odlozˇen je vzˇdy pameˇt’ovy´prostor cele´ho odkla´dane´ho procesu, ne pouze jedna stra´nka, tedy je po- uzˇı´va´na virtua´lnı´metoda swapova´nı´procesu˚. Prˇesto by´vajı´pouzˇı´va´ny i segmenty, mohou by´t sdı´leny. Neˇktere´dnesˇnı´Unixove´syste´my vcˇetneˇLinuxu zvolily jinou formu virtualizace – stra´nkova´nı´na zˇa´dost (Linux) nebo stra´nkova´nı´se segmentacı´. Bylo zavedeno rozdeˇlenı´pameˇt’ove´ho prostoru na stra´nky, prˇi prˇerusˇenı´vy´padku stra´nky se pra- cuje s jednotlivy´mi stra´nkami a ne s cely´mi pameˇt’ovy´mi prostory procesu˚. Prˇestozˇe jizˇnejde o swapova´nı´, i nada´le se pouzˇı´va´pojem swapovacı´soubor nebo swapovacı´ oblast na disku. Vy´beˇr obeˇti je na Unixech prova´deˇn pomocı´hodinove´ho algoritmu (pseudo- LRU). Tyto syste´my podporujı´neˇkolik zajı´mavy´ch prvku˚spra´vy pameˇti, naprˇı´klad sdı´lenı´ko´du programu˚: pokud je spusˇteˇno vı´ce procesu˚ – instancı´jednoho pro- gramu, mohou sdı´let cˇa´st pameˇti, ve ktere´je nacˇten ko´d programu. Podobneˇpra- cuje funkce mapova´nı´souboru˚, kdy do adresove´ho prostoru mu˚zˇe by´t namapova´n ktery´koliv soubor. Veˇtsˇina Unixu˚take´umozˇnˇuje v prˇı´padeˇprˇı´stupu na odlozˇenou stra´nku v rezˇimu pouze pro cˇtenı´ prˇecˇı´st data prˇı´mo z odlozˇene´ stra´nky (nebo pameˇti procesu v prˇı´padeˇswapova´nı´), cozˇurychluje prˇı´stup k odlozˇeny´m datu˚m (nenı´nutne´vyvolat prˇerusˇenı´, hledat obeˇt’,prˇesouvat bloky pameˇti). Unixy jsou portova´ny na mnoha ru˚zny´ch hardwarovy´ch platforma´ch, proto je ochrana pameˇti na ru˚zne´u´rovni. Obvykle vsˇak Unixy vyuzˇı´vajı´vsˇechny mozˇnosti, ktere´dana´hardwarova´architektura nabı´zı´, prˇinejmensˇı´m podporu privilegova- ne´ho a uzˇivatelske´ho rezˇimu a ochranu segmentu˚.

3.5.3 MacOS U syste´mu˚MacOS se od pocˇa´tku pocˇı´talo s velky´mi na´roky na operacˇnı´pameˇt’ze strany syste´mu i procesu˚, proto byla implementova´na virtua´lnı´pameˇt’ metodou stra´nkova´nı´(take´procesory, na ktere´m MacOS beˇzˇel, byly vybra´ny takove´, ktere´ obsahovaly podporu virtua´lnı´pameˇti). Procesory Motorola 680 00, na ktery´ch beˇzˇely prvnı´operacˇnı´syste´my te´to rˇady, pu˚vodneˇobsahovaly prostrˇedky pro velmi pokrocˇilou a na svou dobu rozsa´hlou ochranu pameˇti, ale nevyuzˇı´valy ji5. Tato ochrana v jednotce rˇı´zenı´pameˇti zahrno- vala podporu dvou rezˇimu˚– privilegovane´ho (rezˇim Supervisor) a uzˇivatelske´ho, ochranu syste´move´ cˇa´sti pameˇti, podporu vyjı´mek, atd. Protozˇe vsˇak operacˇnı´

5Neˇktere´verze MacOS dokonce standardneˇspousˇteˇly vsˇechny procesy v privilegovane´m rezˇimu. KAPITOLA 3 SPRA´VA PAMEˇ TI 42 syste´m beˇzˇı´cı´na te´to architekturˇe nevyuzˇı´val jednotku rˇı´zenı´pameˇti a v nı´im- plementovanou ochranu pameˇti, tato jednotka prˇestala by´t k procesoru˚m 680 00 doda´va´na. U noveˇjsˇı´ch pak jizˇbyla doda´va´na integrovana´prˇı´mo na cˇipu procesoru. Virtua´lnı´ pameˇt’ bylo mozˇne´ na MacOS System 7 spravovat tak, zˇe fyzicka´ pameˇt’slouzˇila jako pracovnı´„cache pameˇt’“. Vesˇkera´ logicka´pameˇt’(stra´nky) byla odlozˇena na disku a prˇı´mo v operacˇnı´pameˇti byl vzˇdy nacˇten adresovy´prostor toho procesu, ktery´meˇl zrovna prˇideˇlen procesor. Tento zpu˚ sob pra´ce s virtua´lnı´ pameˇtı´byl velice jednoduchy´, ovsˇem pouzˇitelny´pouze proto, zˇe tyto verze nebyly plneˇmultitaskove´. Syste´m NeXT Step prˇı´kladneˇvyuzˇı´val vsˇech mozˇnostı´ochrany pameˇti pocˇı´tacˇu˚ NeXT, na ktery´ch beˇzˇel, a tuto vlastnost pak prˇejaly i syste´my MacOS X na neˇm postavene´. Dnesˇnı´MacOS X je plneˇmultitaskovy´syste´m a spra´va pameˇti je prova´- deˇna stra´nkova´nı´m pomocı´trˇı´modulu˚– pageru˚, z nichzˇpra´ci s beˇzˇny´mi stra´nkami pameˇti ma´na starosti jeden z nich. Tento modul pracuje pomocı´procesu zvane´ho dynamicky´pager, stra´nkovacı´soubory se nazy´vajı´swapfile0, swapfile1, . . . , a jsou ulozˇeny obvykle v adresa´rˇi nazvane´m /private/var/vm. Je nastavena urcˇita´ maxima´lnı´velikost stra´nkovacı´ho souboru a prˇi jejı´m dosazˇenı´je vytvorˇen dalsˇı´ s vysˇsˇı´m cˇı´slem. KAPITOLA 4

Procesy

V te´to kapitole se sezna´mı´me se za´klady spra´vy procesu˚. Definujeme proces a jeho vlastnosti, probereme za´kladnı´formy multitaskingu, budeme se zaby´vat problematikou prˇideˇlova´nı´ procesoru a mozˇnostmi synchronizace procesu˚.

4.1 Evidence procesu˚

Zatı´mco program je jen soubor na vneˇjsˇı´m pameˇt’ove´m me´diu obsahujı´cı´ko´d (in- strukce) a prˇı´padneˇneˇjaka´konstantnı´data, proces je instance programu urcˇena´ nejen jeho ko´dem, ale i dalsˇı´mi vlastnostmi, jako je jeho stav, priorita, identifikacˇnı´ cˇı´slo, programovy´cˇı´tacˇ, prˇideˇlene´prostrˇedky (vcˇetneˇpameˇti), atd. Proces se tedy mu˚zˇe nacha´zet v ru˚zny´ch stavech: • novy´ (new) – proces byl pra´veˇvytvorˇen, jsou mu prˇideˇlova´ny prostrˇedky, • beˇzˇı´cı´ (running) – proces ma´pra´veˇprˇideˇlen procesor, tedy jeho ko´d je vyko- na´va´n, • prˇipraveny´ (ready) – cˇeka´na prˇideˇlenı´procesoru, • cˇekajı´cı´ (waiting) – cˇeka´na prˇı´stup k I/O prostrˇedku, o ktery´pozˇa´dal nebo cˇeka´na uda´lost (naprˇı´klad stisknutı´kla´vesy), • ukoncˇeny´ (terminated) – proces byl ukoncˇen. Proces mezi teˇmito stavy prˇecha´zı´tak, jak je naznacˇeno na obra´zku 4.1 na str. 44. Spra´vce procesu˚vede tabulku procesu˚, za´znam v te´to tabulce o konkre´tnı´m procesu se nazy´va´ Process Controll Block (PCB). Je to souhrn vsˇech dat, ktera´operacˇnı´

43 KAPITOLA 4 PROCESY 44

prˇideˇlen procesor- novy´  - prˇipraveny´  beˇzˇı´cı´  inicializace  procesu 6 odebra´n procesor        (prˇideˇlenı´prostrˇedku˚)    zarˇı´zenı´pouzˇito  cˇeka´na ukoncˇen  prˇideˇlenı´ a uvolneˇno   I/O zarˇı´zenı´ ? + nebo uda´lost cˇekajı´cı´  ukoncˇeny´ 

    Obra´zek 4.1: Prˇechody mezi stavy procesu syste´m potrˇebuje k rˇı´zenı´procesu˚. Soucˇa´stı´PCB pro kazˇdy´proces obvykle by´vajı´ tyto informace:

• PID (identifikacˇnı´ cˇı´slo procesu), prˇı´padneˇ dalsˇı´ identifikacˇnı´ cˇı´sla urcˇujı´cı´ naprˇı´klad prˇı´stupova´pra´va nebo vztah k jiny´m procesu˚ m, • stav procesu, • programovy´ cˇı´tacˇ urcˇujı´cı´, ktera´ instrukce se pra´veˇ prova´dı´ (nebo ma´ by´t provedena), • hodnoty registru˚, • ukazatele do front, ve ktery´ch proces cˇeka´(procesor, I/O zarˇı´zenı´), • informace pro spra´vce pameˇti (tabulky obsazenı´pameˇti, evidence stra´nek, segmentu˚procesu), • u´cˇtovacı´informace (ty´kajı´cı´se prˇideˇlova´nı´procesoru), • dalsˇı´momenta´lneˇprˇideˇlene´prostrˇedky (zarˇı´zenı´, otevrˇene´soubory), • atd. podle potrˇeb syste´mu.

Proces mu˚zˇe vzniknout neˇkolika zpu˚soby:

• spusˇteˇnı´m programu jiny´m procesem (kromeˇprvnı´ho spusˇteˇne´ho procesu v syste´mu samozrˇejmeˇ), pak kazˇdy´z procesu˚ma´jiny´programovy´ko´d, • klonova´nı´m jizˇspusˇteˇne´ho procesu (fork) – cely´pameˇt’ovy´prostor pu˚vod- nı´ho procesu je zkopı´rova´n do nove´ho adresove´ho prostoru, pak je nove´mu procesu vytvorˇen vlastnı´za´znam v tabulce procesu˚(PCB) s neˇktery´mi u´daji pu˚vodnı´mi a neˇktery´mi novy´mi, pak oba procesy pokracˇujı´soubeˇzˇneˇod stej- ne´ho mı´sta. KAPITOLA 4 PROCESY 45

Obeˇ mozˇnosti se ve veˇtsˇineˇ operacˇnı´ch syste´mu˚ prova´deˇjı´ prakticky stejneˇ, jen v prvnı´m prˇı´padeˇse po operaci fork (a prˇed zmeˇnou v nove´m PCB) provede dalsˇı´ vola´nı´ja´dra, tentokra´t pro nacˇtenı´ko´du jine´ho programu do pameˇti spusˇteˇne´ho procesu. Neˇktere´ operacˇnı´ syste´my (naprˇı´klad Unixy) vytva´rˇejı´ stromovou strukturu procesu˚, ve ktere´je zachyceno, ktery´proces byl ktery´m spusˇteˇn. Spousˇteˇjı´cı´proces (nadrˇı´zeny´ uzel) se nazy´va´ rodicˇ (parent), spousˇteˇny´ proces je jeho synovsky´m (dcerˇiny´m, child) procesem. V korˇeni stromu je „praproces“, ktery´bud’prˇı´mo nebo zprostrˇedkovaneˇ spustil vsˇechny ostatnı´ beˇzˇı´cı´ procesy. Kazˇdy´ dalsˇı´ proces ma´ kromeˇsve´ho vlastnı´ho identifikacˇnı´ho cˇı´sla (PID) take´ ulozˇeno identifikacˇnı´cˇı´slo rodicˇovske´ho procesu (PPID – Parent PID). Mezi rodicˇovsky´m a synovsky´m procesem existuje jisty´vztah za´vislosti. Ob- vykle po ukoncˇenı´rodicˇovske´ho procesu by´vajı´ukoncˇeny vsˇechny procesy jeho podstromu, tedy vsˇechny jeho synovske´procesy, azˇna vyjı´mky, ktere´z dobry´ch du˚vodu˚majı´pokracˇovat v pra´ci (naprˇı´klad za´lohova´nı´nebo dlouhodobe´vy´po- cˇty). Typicky´m prˇı´kladem je ukoncˇenı´vsˇech procesu˚spusˇteˇny´ch uzˇivatelem po jeho odhla´sˇenı´(vsˇechny jsou v podstromeˇjeho prˇihlasˇovacı´ho cˇi inicializacˇnı´ho procesu). Rodicˇovsky´proces mu˚zˇe pocˇkat na dokoncˇenı´pra´ce synovske´ho procesu (pou- zˇije vola´nı´ja´dra wait) nebo pokracˇovat ve sve´cˇinnosti. Mu˚zˇe takte´zˇv ktere´mkoliv okamzˇiku synovsky´proces ukoncˇit (abort), naprˇı´klad tehdy, kdyzˇsynovsky´proces splnil svu˚j u´kol, pro ktery´byl spusˇteˇn.

4.2 Beˇh procesu˚a multitasking

Procesy mohou beˇzˇet neˇkolika zpu˚soby:

• sekvencˇneˇ – dalsˇı´proces mu˚zˇe by´t spusˇteˇn azˇpo ukoncˇenı´cˇinnosti prˇedcho- zı´ho, • sekvencˇneˇ-paralelneˇ – je spusˇteˇno vı´ce procesu˚, ktere´se deˇlı´o cˇas procesoru (na- prˇı´klad se v urcˇity´ch intervalech strˇı´dajı´prˇi jeho vyuzˇı´va´nı´) ⇒ multitaskovy´ syste´m, • paralelneˇ – procesy pracujı´soubeˇzˇneˇ, kazˇdy´mu˚zˇe beˇzˇet na jine´m procesoru ⇒ multiprocesorovy´syste´m s multitaskingem.

Kdyzˇse procesy strˇı´dajı´na jednom procesoru (k tomu mu˚zˇe dojı´t v druhe´m nebo trˇetı´m prˇı´padeˇ), docha´zı´k prˇepı´na´nı´kontextu, tedy zmeˇneˇbeˇhovy´ch informacı´ KAPITOLA 4 PROCESY 46

o procesu ulozˇeny´ch na „globa´lnı´ch“ mı´stech (naprˇı´klad registry procesoru), proto je nutne´kontext dosud beˇzˇı´cı´ho procesu prˇi kazˇde´m prˇepnutı´ulozˇit, naprˇı´klad do PCB (tedy tabulky procesu˚) nebo do pameˇt’ove´ho prostoru prˇı´slusˇne´ho procesu – do jeho za´sobnı´ku. Prˇi prˇepı´na´nı´kontextu se ulozˇı´kontext pu˚vodneˇbeˇzˇı´cı´ho procesu a obnovı´kontext na´sledujı´cı´ho procesu. Kontext procesu je souhrn beˇhovy´ch informacı´o procesu. Prˇi ru˚zny´ch typech multitaskingu zde rˇadı´me ru˚zne´informace, obvykle jsou soucˇa´stı´kontextu tato data:

• obsah adresovy´ch registru˚(programovy´cˇı´tacˇ1, segmentove´registry, za´sobnı´- kovy´registr2), • registr prˇı´znaku˚ 3, • pokud program nenı´psa´n tak, aby pocˇı´tal s prˇı´padny´mi zmeˇnami v datovy´ch registrech prˇi prˇepnutı´kontextu, ulozˇı´me zde i obsah datovy´ch registru˚, • stav koprocesoru, pokud ho proces pouzˇı´va´, • stav dalsˇı´ch zarˇı´zenı´, ktera´proces pouzˇı´va´a nejsou rˇı´zena syste´mem.

Druh informacı´, ktere´jsou soucˇa´stı´kontextu procesu, za´lezˇı´prˇedevsˇı´m na typu multitaskingu, ve ktere´m procesy pracujı´. Multitasking je postaven na pseudoparalelismu – prostrˇedky (vcˇetneˇpameˇti a cˇasu procesoru) jsou vyhrazeny vı´ce procesu˚m, procesu˚m je procesor prˇideˇlova´n strˇı´- daveˇpodle urcˇite´ho algoritmu, na uzˇivatele tato metoda pu˚sobı´ dojmem paralelnı´ pra´ce teˇchto procesu˚ (jsou spusˇteˇny a uzˇivatel si mu˚zˇe vybrat, se ktery´m bude pracovat).

Pseudomultitasking (multiprogramova´nı´, ktere´nenı´prˇı´mo multitaskingem, ale jeho prˇedchu˚dcem) mu˚zˇe by´t neˇkolika druhu˚:

• vza´jemne´vola´nı´– implementujı´procesy, nikoliv syste´m, procesu je prˇideˇlen procesor, pokud je vola´n jiny´m (pra´veˇbeˇzˇı´cı´m) procesem, urcˇitou formu te´to metody najdeme u syste´mu MS-DOS, kdy TSR programy (viz str. 38) po

1Programovy´cˇı´tacˇ(Instruction Pointer, IP) je adresa na´sledujı´cı´instrukce v ko´du procesu, ktera´ ma´by´t zpracova´na. 2Za´sobnı´kovy´registr (Stack Pointer, SP) obsahuje adresu vrcholu za´sobnı´ku. Do za´sobnı´ku se ukla´dajı´prˇedevsˇı´m data souvisejı´cı´s vola´nı´m funkcı´– skutecˇne´parametry funkce, loka´lnı´pro- meˇnne´, na´vratove´hodnoty apod. 3V registru prˇı´znaku˚jsou prˇı´znaky du˚sledku˚poslednı´ provedene´instrukce ko´du, naprˇı´klad zda je vy´sledkem vy´pocˇtu 0, bit zname´nka vy´sledku, maskova´nı´prˇerusˇenı´, beˇh v rezˇimu trasova´nı´ (krokova´nı´) atd., u neˇktery´ch procesoru˚je zde take´indikace beˇhu v rezˇimu ja´dra (Motorola). KAPITOLA 4 PROCESY 47

inicializaci sve´ rezidentnı´ cˇa´sti prˇeda´vajı´ aktivitu prˇı´kazove´mu interpretu (obvykle command.com), aby mohl by´t spusˇteˇn dalsˇı´ TSR program nebo beˇzˇny´proces, • omezene´prˇepı´na´nı´– syste´m prˇepı´na´mezi jednı´m beˇzˇny´m procesem a spe- cia´lnı´mi programy, ktere´se nazy´vajı´ pomu˚cky (accessories), pomu˚cky musı´ by´t pro tento u´cˇel specia´lneˇprogramova´ny a by´vajı´doda´va´ny s operacˇnı´m syste´mem jako drobne´ pomocne´ progra´mky zjednodusˇujı´cı´ uzˇivateli pra´ci (jednoduchy´textovy´editor, graficky´editor, kalkulacˇka apod.), tuto mozˇnost pouzˇı´valy nejstarsˇı´verze Apple MacOS, kde prˇepı´na´nı´ realizoval modul Fin- der, • neomezene´prˇepı´na´nı´– je mozˇne´prˇepı´nat mezi jaky´mikoliv beˇzˇı´cı´mi procesy, tuto mozˇnost pouzˇı´valy o neˇco noveˇjsˇı´verze Apple MacOS, kde prˇepı´na´nı´ realizoval modul MultiFinder.

Prˇi prˇepı´na´nı´, at’uzˇomezene´m nebo neomezene´m, proces da´va´syste´mu na veˇdomı´, zˇe mu˚zˇe by´t ve sve´cˇinnosti prˇerusˇen, a pokud uzˇivatel rozhodne, zˇe chce pracovat s jiny´m procesem, pak take´tento proces prˇerusˇen je. Aby byly procesy „nuceny“ dostatecˇneˇcˇasto sdeˇlovat syste´mu, zˇe jim zrovna mu˚zˇe by´t odebra´n procesor, by´va´ tento stav (mozˇnost odebrat procesor) cˇasto spojena s jiny´mi sluzˇbami syste´mu, naprˇı´klad cˇeka´nı´na stisk kla´vesy na kla´vesnici (proces mu˚zˇe cˇekat na stisk kla´vesy jen tehdy, kdyzˇumozˇnı´odebra´nı´procesoru). U vza´jemne´ho vola´nı´nenı´potrˇeba pouzˇı´vat kontext, u prˇepı´na´nı´je soucˇa´stı´ kontextu prˇedevsˇı´m vrchol za´sobnı´ku a dalsˇı´u´daje za´visı´na konkre´tnı´m rˇesˇenı´ (procesy samy urcˇujı´, kdy mohou by´t prˇepnuty, mohou vcˇas dokoncˇit pra´ci se zarˇı´zenı´mi a ulozˇit potrˇebne´informace).

Kooperativnı´multitasking je vylepsˇenı´m neomezene´ho prˇepı´na´nı´. Jeden proces beˇzˇı´ na poprˇedı´, ostatnı´ procesy jsou spusˇteˇny na pozadı´. Proces na poprˇedı´ ma´ prˇideˇlen procesor, ale pokud ho zrovna nevyuzˇı´va´(naprˇı´klad cˇeka´na uda´lost, trˇeba vstup z kla´vesnice), mu˚zˇe by´t procesor prˇideˇlen neˇktere´mu procesu na pozadı´, ale jen na kra´tkou dobu. Po uplynutı´ te´to doby je procesor vra´cen procesu na poprˇedı´a nebo, pokud tento proces porˇa´d cˇeka´na uda´lost, opeˇt neˇktere´mu procesu na pozadı´. Uzˇivatel urcˇuje, ktery´proces bude na poprˇedı´(naprˇı´klad prˇesune se z textove´ho editoru ke kalkulacˇce). Narozdı´l od neomezene´ho prˇepı´na´nı´je prˇi kooperativnı´m multitaskingu do- voleno beˇzˇet procesu˚m na pozadı´, kdyzˇproces na poprˇedı´nevyuzˇı´va´procesor. Procesy musı´na multitaskingu spolupracovat, a to odevzda´vat procesor vola´nı´m KAPITOLA 4 PROCESY 48 sluzˇby syste´mu (proces na poprˇedı´, kdyzˇnepotrˇebuje procesor, procesy na pozadı´ po uplynutı´vyhrazene´ho kra´tke´ho cˇasu prˇideˇlenı´procesoru). Je vsˇak na samotne´m procesu (jeho programa´torovi), zda prˇı´slusˇnou sluzˇbu syste´mu zavola´, a pokud se tı´m nebude obteˇzˇovat, dosta´va´me se zpeˇt na u´rovenˇneomezene´ho prˇepı´na´nı´. O obsahu kontextu platı´tote´zˇco u neomezene´ho prˇepı´na´nı´. V kooperativnı´m multitaskingu pracovaly naprˇı´klad Windows s DOS ja´drem verze 3.x nebo noveˇjsˇı´verze Apple MacOS prˇed verzı´X. Vy´hody:

• mozˇnost spusˇteˇnı´vı´ce procesu˚, • mozˇnost spolupra´ce a komunikace procesu˚, • lepsˇı´vyuzˇitı´prostrˇedku˚v syste´mu (pameˇt’,cˇas procesoru, atd.), • mozˇnost implementovat vı´ceuzˇivatelsky´ syste´m (ale pouze na primitivnı´ u´rovni, plnohodnotneˇpracovat mu˚zˇe pouze jeden uzˇivatel), • procesy „veˇdı´“, kdy jsou prˇepnuty (samy vyvola´vajı´prˇerusˇenı´vedoucı´k ode- bra´nı´procesoru), a proto kontext nemusı´by´t tak obsa´hly´.

Nevy´hody:

• veˇtsˇı´na´roky na hardware, • nutnost rˇesˇit proble´my s bezpecˇnostı´a stabilitou syste´mu, • pokud dojde k chybeˇv procesu beˇzˇı´cı´m na pozadı´(zacyklenı´v nekonecˇne´ smycˇce), nedojde k vola´nı´prˇerusˇenı´, nenı´odevzda´n procesor a cely´syste´m „zamrzne“, tote´zˇplatı´i pro proces beˇzˇı´cı´na poprˇedı´, • pokud programa´tor nevola´sluzˇbu syste´mu umozˇnˇujı´cı´prˇideˇlit procesor ji- ne´mu procesu, syste´m prˇesta´va´by´t multitaskovy´a jde pouze o pseudomulti- tasking s neomezeny´m prˇepı´na´nı´m, • na´rocˇneˇjsˇı´realizace nezˇu na´sledujı´cı´ho typu multitaskingu.

Preemptivnı´multitasking spocˇı´va´v neusta´le´m prˇepı´na´nı´mezi procesy. Procesy na multitaskingu nespolupracujı´(a dokonce o neˇm ani nemusı´veˇdeˇt), kazˇdy´proces mu˚zˇe by´t kdykoliv prˇerusˇen. Prˇerusˇenı´odebra´nı´procesoru je vygenerova´no prˇi kazˇde´uda´losti v syste´mu. Kontext procesu musı´obsahovat i takove´u´daje jako stav registru˚procesoru a koprocesoru, protozˇe proces po odebra´nı´ a znovuprˇideˇlenı´ procesoru nemusı´ by´t informova´n o tom, zˇe jeho cˇinnost nenı´cˇasoveˇsouvisla´a prˇed chvı´lı´registry KAPITOLA 4 PROCESY 49

vyuzˇı´val jiny´ proces. Da´le je trˇeba vyrˇesˇit prˇideˇlova´nı´ prostrˇedku˚, cozˇ obvykle by´va´rˇesˇeno architekturou klient-server pro prˇı´stup k ovladacˇu˚m zarˇı´zenı´(procesy – klienti prˇistupujı´k zarˇı´zenı´m prˇes specia´lnı´procesy – servery, servery doka´zˇou spolupracovat s ktery´mkoliv klientem).

Preemptivnı´multitasking se sdı´lenı´m cˇasu (time slicing) je vylepsˇenı´m prˇed- chozı´metody. K prˇepnutı´kontextu docha´zı´nejen prˇi vygenerova´nı´neˇjake´uda´- losti, ale navı´c i v dany´ch cˇasovy´ch intervalech, a to velmi maly´ch (jednotky azˇ desı´tky milisekund). Procesy se ve vyuzˇı´va´nı´procesoru strˇı´dajı´, a to tak rychle, zˇe na uzˇivatele to pu˚sobı´dojmem paralelnı´ho zpracova´nı´u´ loh. Proces je prˇerusˇen po uplynutı´urcˇite´ho cˇasove´ho intervalu a nebo jesˇteˇdrˇı´v, pokud v jemu prˇideˇlene´m intervalu dosˇlo k prˇerusˇenı´generujı´cı´mu uda´lost, a nebo kdyzˇsvou pra´ci dokoncˇı´ prˇed koncem intervalu. Tuto metodu pouzˇı´vajı´prakticky vsˇechny modernı´operacˇnı´ syste´my – Unixove´ syste´my vcˇetneˇLinuxu (pro beˇzˇne´procesy nebeˇzˇı´cı´v rezˇimu ja´dra), Windows NT a Windows s DOS ja´drem od verze 4 (95), MacOS X. Vy´hody: • mozˇnost spusˇteˇnı´vı´ce procesu˚, • mozˇnost spolupra´ce a komunikace procesu˚, • lepsˇı´vyuzˇitı´prostrˇedku˚v syste´mu (pameˇt’,cˇas procesoru, atd.), • mozˇnost implementovat vı´ceuzˇivatelsky´syste´m, • mozˇnost implementovat modernı´interaktivnı´graficke´rozhranı´, • snadneˇjsˇı´implementace bezpecˇnostnı´ch mechanismu˚, • pomeˇrneˇsnadna´implementovatelnost (ve srovna´nı´s kooperativnı´m multi- taskingem), • metoda nenı´za´visla´na beˇhu procesu˚a dobre´vu˚li programa´toru˚. Nevy´hody: • veˇtsˇı´na´roky na hardware, • kontext musı´by´t o neˇco rozsa´hlejsˇı´nezˇu kooperativnı´ho multitaskingu.

4.3 Multithreading

Multithreading je vlastneˇparalelnı´zpracova´nı´vı´ce cˇa´stı´v ra´mci jednoho procesu, tedy neˇco jako multitasking uvnitrˇprocesu. Rozdeˇlenı´procesu na vı´ce takovy´ch KAPITOLA 4 PROCESY 50 cˇa´stı´, podprocesu˚, vla´ken (thread) je vy´hodne´, pokud se proces skla´da´z vı´ce ne- za´visly´ch kusu˚ko´du (navza´jem se neovlivnˇujı´, je jedno, v jake´m porˇadı´ budou provedeny). Typicky´m prˇı´kladem je aplikace, ktera´komunikuje s uzˇivatelem, umozˇnˇuje mu pra´ci nebo ho bavı´(jedno vla´kno) a „na pozadı´“ trˇeba kopı´ruje soubory (druhe´ vla´kno). Kazˇde´z teˇchto vla´ken pracuje samostatneˇ, jedno nema´vliv na cˇinnost druhe´ho kromeˇprˇı´padne´komunikace (prvnı´vla´kno mu˚zˇe uzˇivateli na vhodne´m graficke´m prvku ukazovat, jak daleko je druhe´vla´kno v kopı´rova´nı´, druhe´vla´kno prvnı´mu vzˇdy po zkopı´rova´nı´jednoho souboru nebo urcˇite´ho kvanta Bytu˚zası´la´ zpra´vu). V operacˇnı´ch syste´mech podporujı´cı´ch multithreading se proces (u´loha) skla´da´ z jednoho nebo vı´ce podprocesu˚nazy´vany´ch vla´kna, jedno vla´kno by´va´hlavnı´a je spusˇteˇno prˇi spusˇteˇnı´procesu. Proces je pouze pasivnı´vlastnı´k pameˇt’ove´ho pro- storu, vesˇkerou cˇinnost prova´deˇjı´vla´kna. Proto proces, ktery´nema´zˇa´dne´vla´kno, mu˚zˇe by´t ukoncˇen. Procesor nenı´prˇideˇlova´n procesu˚m, ale vla´knu˚m. Kazˇde´vla´kno ma´svu˚j ko´d (nebo mu˚zˇe by´t sdı´leny´v ra´mci procesu, za´lezˇı´na implementaci) a ukazatel do neˇho (programovy´cˇı´tacˇ), za´sobnı´k, cˇas procesoru, kontext. Vla´kna mohou mı´t kazˇde´svu˚j pameˇt’ovy´prostor nebo mohou prˇistupovat ke spolecˇne´mu pameˇt’ove´mu prostoru (to je obvyklejsˇı´), nenı´nutne´mezi vla´kny uplatnˇovat mechanismy ochrany pameˇti ani dalsˇı´bezpecˇnostnı´metody (vla´kna patrˇı´te´muzˇprocesu, spolupracujı´, nekon- kurujı´si). Protozˇe vla´kna obvykle prˇistupujı´ke stejne´mu pameˇt’ove´mu prostoru, je v neˇ- ktery´ch prˇı´padech potrˇeba jejich pra´ci s pameˇt’ovy´mi mı´sty synchronizovat, viz jedna z na´sledujı´cı´ch kapitol. Kazˇde´vla´kno pracuje zvla´sˇt’, ale spolupra´ce mezi vla´kny jednoho procesu je uzˇsˇı´ nezˇ spolupra´ce s vla´knem „cizı´ho“ procesu. Tato spolupra´ce se nety´ka´ jen sdı´lene´cˇa´sti pameˇt’ove´ho prostoru, ale take´cˇasu procesoru – kdyzˇvla´kno prˇestane pouzˇı´vat procesor jesˇteˇdrˇı´v nezˇvyprsˇı´jeho cˇasovy´interval prˇideˇlenı´procesoru, nemusı´zbyly´cˇas „zahodit“, ale mu˚zˇe ho prˇenechat jine´mu vla´knu te´hozˇprocesu. Vla´kna mohou by´t implementova´na neˇkolika zpu˚soby:

1. Model 1:1 – vla´kna jsou implementova´na v ja´drˇe syste´mu. Ja´dro s vla´kny za- cha´zı´jako s procesy,tedy prˇepı´na´nı´kontextu se prova´dı´na u´rovni vla´ken. Toto rˇesˇenı´zvysˇuje propustnost syste´mu (syste´m reaguje pruzˇneˇji, mu˚zˇe by´t zpra- cova´no vı´ce syste´movy´ch vola´nı´za´rovenˇ, pokud je ja´dro take´vı´cevla´knove´), ale je na´rocˇneˇjsˇı´rˇesˇit proble´my souvisejı´cı´se synchronizacı´syste´movy´ch vla´- ken (ty´kajı´cı´se sdı´leny´ch syste´movy´ch dat). KAPITOLA 4 PROCESY 51

Tato metoda je pouzˇı´va´na naprˇı´klad syste´mem OS Mach, a proto take´MacOS X, da´le take´v Linuxu (v Linuxu je vsˇak samotne´ja´dro jednovla´knove´). Tato specifikace je soucˇa´stı´normy POSIX.

2. Model N:1 – vla´kna jsou realizova´na na uzˇivatelske´u´rovni. Podpora vla´ken je realizova´na v knihovna´ch, ja´dro je pouze jednovla´knove´. Syste´m vla´kna ne- podporuje, implementace je pouze na straneˇprocesu˚. Vla´kna jednoho procesu se deˇlı´o cˇas procesoru prˇideˇleny´tomuto procesu. Vla´kna jednoho procesu nemohou beˇzˇet na vı´ce procesorech, proto tento model nenı´vhodny´pro vı´- ceprocesorove´syste´my. Protozˇe prˇepı´na´nı´vla´ken te´hozˇprocesu nenı´realizova´no „centra´lneˇ“, je mno- hem rychlejsˇı´, proto je lepsˇı´odezva jednotlivy´ch aplikacı´. Vy´hodou jsou mensˇı´ komplikace prˇi prˇı´stupu k syste´movy´m datu˚m, nevy´hodou je v ra´mci ja´- dra mozˇnost najednou zpracovat jen jedine´syste´move´vola´nı´. Kdyzˇneˇktere´ vla´kno provede vola´nı´sluzˇeb ja´dra (syste´move´vola´nı´), zastavı´se vsˇechna vla´kna procesu.

3. Model N:M – hybridnı´prˇı´stup. Vla´kna jsou implementova´na na u´rovni ja´dra (kernel-thread) i na u´rovni beˇzˇny´ch procesu˚(user-thread). Tento model od- stranˇuje nevy´hody prˇedchozı´ch dvou modelu˚– prˇepı´na´nı´vla´ken je rychle´, vla´kna mohou beˇzˇet na vı´ce procesorech, ja´dro mu˚zˇe najednou obsluhovat vı´ce syste´movy´ch vola´nı´). Kazˇde´uzˇivatelske´vla´kno procesu, ktere´prova´dı´neˇjake´syste´move´vola´nı´, je napojeno na neˇktere´vla´kno ja´dra, ostatnı´uzˇivatelska´vla´kna, ktera´s ja´drem nekomunikujı´, toto napojenı´nepotrˇebujı´. Tento model je pouzˇit ve veˇtsˇineˇ komercˇnı´ch Unixu˚(naprˇı´klad Solaris).

4.4 Spra´va front procesu˚

Spra´va front procesu˚je za´kladem pro spoustu dalsˇı´ch u´kolu˚, ktere´se v syste´mu musı´rˇesˇit. Fronty obvykle slouzˇı´k cˇeka´nı´procesu˚na prostrˇedky v syste´mu. Spra´vce front prˇedevsˇı´m udrzˇuje fronty – vytva´rˇı´fronty a prˇı´padneˇje rusˇı´(prˇi odebra´nı´pro- strˇedku ze syste´mu), prˇida´va´procesy do fronty, odebı´ra´ procesy z fronty (prˇideˇlenı´ prostrˇedku jizˇma´na starosti jiny´modul syste´mu). Existuje vı´ce ru˚zny´ch druhu˚ front:

Beˇzˇna´fronta je fronta fungujı´cı´zpu˚sobem First-in first-out. KAPITOLA 4 PROCESY 52

Prioritnı´fronta je fronta, ve ktere´ jsou zohlednˇova´ny priority procesu˚. Procesy jsou zarˇazova´ny podle sve´priority prˇed vsˇechny procesy s nizˇsˇı´prioritou, za vsˇechny s veˇtsˇı´nebo stejnou prioritou.

Fronta typu delta-list je pouzˇı´va´na pro procesy, ktere´cˇekajı´na uplynutı´urcˇite´ho cˇasove´ho intervalu. U kazˇde´polozˇky fronty tedy ma´me dva u´ daje – prvnı´je ukazatel na proces (nebo slozˇiteˇjsˇı´datova´struktura reprezentujı´cı´konkre´tnı´ proces), druhy´ je doba, po kterou ma´ proces cˇekat. Pouzˇı´va´ se naprˇı´klad v Unixovy´ch syste´mech pro spı´cı´(sleeping) procesy. Aby u fronty typu delta-list nebylo nutne´v pravidelny´ch intervalech meˇnit dobu cˇeka´nı´u vsˇech procesu˚ve fronteˇ, pouzˇı´va´se tato forma evidence cˇasu: dobu cˇeka´nı´ evidujeme pouze u prvnı´ho procesu ve fronteˇ, u ostatnı´ch je zachycen pouze rozdı´l oproti prˇedchozı´mu procesu ve fronteˇ, pravidelneˇse zkracuje pouze u´daj u prvnı´ho procesu. Naprˇı´klad ma´me ve fronteˇcˇtyrˇi procesy: P1 ma´cˇekat 30 ms., P2 ma´cˇekat 65 ms., P3 ma´cˇekat 14 ms., P4 ma´cˇekat 142 ms. P3 P1 P2 P4 Procesy serˇadı´me podle doby cˇeka´nı´, ma´me toto porˇadı´: 14 30 65 142

P3 P1 P2 P4 Fronta bude obsahovat tyto u´daje: 14 16 35 77 Udrzˇova´nı´takove´fronty je jednoduche´. V urcˇity´ch cˇasovy´ch intervalech je sni- zˇova´n u´daj u prvnı´ho procesu ve fronteˇ, a kdyzˇdosa´hne nuly, proces je „probuzen“, odstraneˇn z fronty. Protozˇe u druhe´ho procesu v porˇadı´byl evidova´n rozdı´l vlast- nı´ho cˇasu cˇeka´nı´a cˇasu cˇeka´nı´prvnı´ho procesu, ktery´je ted’ 0, rozdı´love´cˇı´slo se ted’ sta´va´skutecˇny´m cˇasem cˇeka´nı´procesu. Fronty take´mu˚zˇeme deˇlit podle postrˇedku˚, na ktere´v nich procesy cˇekajı´– fronta prˇipraveny´ch procesu˚(cˇekajı´na prˇideˇlenı´procesoru), blokovany´ch (pro ur- cˇite´zarˇı´zenı´, naprˇ. tiska´rnu nebo disk), spı´cı´ch procesu˚(je implementova´na frontou typu delta-list). Jeden proces ve skutecˇnosti nemu˚zˇe by´t ve vı´ce nezˇjedne´ fronteˇ(nenı´v zˇa´dne´ fronteˇ, pokud zrovna pouzˇı´va´neˇktery´prostrˇedek vcˇetneˇ procesoru), proto v jedno- dusˇsˇı´m prˇı´padeˇ, kdy nechceme v ru˚zny´ch fronta´ch evidovat ru˚zne´typy informacı´, stacˇı´ve´st tabulku spusˇteˇny´ch procesu˚, a u kazˇde´ho identifika´tor fronty, ve ktere´ cˇeka´. Cˇasty´m zpu˚sobem implementace je take´sada ukazatelu˚v PCB procesu˚, kdy v PCB jednoho procesu je ukazatel na na´sledujı´cı´proces v dane´fronteˇ, samotna´ fronta je pak reprezentova´na pouze ukazatelem na PCB prvnı´ho (pro odebı´ra´nı´ z fronty) a poslednı´ho (pro prˇida´va´nı´) procesu ve fronteˇ. Protozˇe proces mu˚zˇe by´t KAPITOLA 4 PROCESY 53

v jednom okamzˇiku jen v jedne´fronteˇ, mu˚zˇe by´t tento ukazatel v kazˇde´m PCB jen jeden.

4.5 Prˇideˇlova´nı´procesoru

Na prˇideˇlova´nı´procesoru se podı´lejı´dva moduly syste´mu:

• pla´novacˇprocesoru (CPU Scheduler) pouzˇı´va´frontu (fronty) prˇipraveny´ch pro- cesu˚a urcˇuje, ktere´mu procesu je prˇideˇlen procesor a na jak dlouho, • dispetcher prova´dı´vlastnı´prˇepnutı´kontextu a prˇideˇlenı´procesoru, tedy ulozˇı´ kontext dosud beˇzˇı´cı´ho procesu vcˇetneˇprogramove´ho cˇı´tacˇe, nacˇte kontext procesu, ktere´mu je procesor pra´veˇprˇideˇlova´n, zjistı´ hodnotu programove´ho cˇı´tacˇe a podle neˇho urcˇı´, od ktere´ho mı´sta v ko´du procesu ma´tento proces beˇzˇet, a pokud je podporova´no vı´ce rezˇimu˚pra´ce procesoru (privilegovany´, uzˇivatelsky´), pak dispetcher prova´dı´prˇepı´na´nı´mezi teˇmito mo´dy.

Doba, na kterou je procesu prˇideˇlen procesor, se nazy´va´cˇasove´kvantum. Na vhodne´de´lce cˇasove´ho kvanta za´visı´funkcˇnost multitaskingu a tedy i kvalita zvo- lene´metody prˇideˇlova´nı´procesoru. Pokud je prˇı´lisˇkra´tke´, je cˇasova´rezˇie spojena´ s prˇepı´na´nı´m vysoka´ve srovna´nı´se skutecˇnou dobou beˇhu procesu˚, a tedy syste´m je neu´meˇrneˇpomaly´. Jestlizˇe je naopak cˇasove´kvantum zbytecˇneˇvelke´, pak pro- cesy hodneˇpouzˇı´vajı´cı´I/O zarˇı´zenı´vyuzˇı´vajı´jen malou cˇa´st prˇideˇlene´ho kvanta a procesor musı´by´t stejneˇprˇepı´na´n cˇasteˇji, a navı´c je syste´m me´neˇinteraktivnı´. Procesy mu˚zˇeme rozdeˇlit do dvou skupin na ty, ktere´vı´ce vyuzˇı´vajı´procesor (CPU-bound) a procesy, ktere´vı´ce pouzˇı´vajı´I/O zarˇı´zenı´(I/O-bound). Kazˇdy´z nich ma´trochu jine´na´roky na procesor, CPU-bound procesy obvykle vyuzˇitı´cele´prˇi- deˇlene´kvantum, u I/O-bound procesu˚je zase mnohem veˇtsˇı´pravdeˇpodobnost prˇerusˇenı´beˇhu. Pla´novacˇprocesoru by meˇl rozlisˇovat mezi teˇmito dveˇma skupi- nami procesu˚, aby bylo vyuzˇitı´procesoru optima´lnı´a aby byl prˇideˇlova´n procesu˚m z obou skupin rovnomeˇrneˇ. Pla´nova´nı´procesu˚mu˚zˇeme rozdeˇlit do trˇı´oblastı´:

1. Dlouhodobe´pla´nova´nı´ souvisı´se samotny´m na´vrhem multitaskingu, s urcˇenı´m toho, co se ma´prove´st prˇi vytvorˇenı´procesu a pla´nova´nı´m zacha´zenı´s CPU- bound a I/O-bound procesy.

2. Strˇedneˇdobe´pla´nova´nı´ prova´dı´spra´vce pameˇti, jde naprˇı´klad o rozhodova´nı´, ktery´proces bude odlozˇen (suspended) a tedy mu nenı´prˇideˇlova´n procesor. KAPITOLA 4 PROCESY 54

3. Kra´tkodobe´ pla´nova´nı´ prˇedstavuje samotne´ pla´nova´nı´ procesoru, kdy se ur- cˇuje naprˇı´klad cˇasove´kvantum procesu˚, frekvence prˇerusˇenı´generovany´ch cˇasovacˇem pro prˇerusˇenı´beˇhu procesu, atd.

Pla´nova´nı´mu˚zˇe by´t preemptivnı´nebo nepreemptivnı´. Jestlizˇe je pouzˇita me- toda nepreemptivnı´ho pla´nova´nı´, pak beˇzˇı´cı´proces vyuzˇı´va´procesor tak dlouho, jak sa´m potrˇebuje nebo do vygenerova´nı´prˇerusˇenı´, tedy procesor je odejmut azˇpo neˇ- ktere´m syste´move´m vola´nı´, u preemptivnı´ho pla´nova´nı´ mu˚zˇe by´t procesor odebra´n pla´novacˇem drˇı´ve, naprˇı´klad prˇi prˇerusˇenı´generovane´m cˇasovacˇem. Da´le probereme za´kladnı´metody pla´nova´nı´procesoru.

4.5.1 Fronta (FCFS) (First Come First Served) Prˇi pouzˇitı´te´to metody je fronta prˇipraveny´ch procesu˚ organizova´na jako klasicka´ FIFO struktura, tedy procesy jsou rˇazeny na konec fronty a vybı´ra´ny ze zacˇa´tku. Je to nepreemptivnı´ metoda, procesy pouzˇı´vajı´ procesor tak dlouho, dokud nenı´vygenerova´no prˇerusˇenı´nebo pokud samy neodevzdajı´procesor. Do fronty jsou procesy rˇazeny i z jiny´ch front (naprˇı´klad prˇedtı´m mohl proces vyuzˇı´vat I/O zarˇı´zenı´). Nevy´hodou je, zˇe CPU-bound procesy si vyhrazujı´prˇı´lisˇ mnoho cˇasu procesoru a tedy I/O-bound procesy jsou znevy´hodneˇny. Tato metoda je proto implemento- vatelna´pouze v kombinaci s prioritami procesu˚(I/O-bound procesy by meˇly mı´t vysˇsˇı´prioritu).

4.5.2 Cyklicke´pla´nova´nı´(RR) (Round Robin) Tato metoda je podobna´prˇedchozı´, take´pouzˇı´va´me frontu s or- ganizacı´FIFO. Rozdı´l je v tom, zˇe kazˇdy´proces mu˚zˇe beˇzˇet na procesoru jen po stanovenou dobu, cˇasove´kvantum, je to tedy preemptivnı´metoda. Po ukoncˇenı´ beˇhu procesu je tento proces zarˇazen na konec fronty prˇipraveny´ch procesu˚, pokud nenı´(naprˇı´klad prˇi prˇerusˇenı´jemu urcˇenı´m) zarˇazen do jine´fronty nebo prˇeveden do stavu sleeping cˇi suspended4. Kazˇde´mu procesu je procesor prˇideˇlen na stejnou dobu (cˇasove´kvantum). Po- kud je cˇasove´kvantum prˇı´lisˇvelke´, metoda svou funkcˇnostı´ odpovı´da´prˇedchozı´

4Proces se dostane do stavu sleeping (spı´cı´), pokud je zarˇazen do fronty typu delta-list, do stavu suspended se dosta´va´naprˇı´klad prˇi odlozˇenı´vsˇech cˇa´stı´sve´ho adresove´ho prostoru do odkla´dacı´ oblasti. KAPITOLA 4 PROCESY 55

metodeˇ. Opeˇt jsou zvy´hodneˇny CPU-bound procesy,protozˇe prˇedbı´hajı´I/O-bound procesy cˇekajı´cı´na prˇideˇlenı´zarˇı´zenı´. Metodu lze bra´t jako za´klad pro dalsˇı´pokrocˇilejsˇı´preemptivnı´metody pla´no- va´nı´a lze ji vylepsˇit naprˇı´klad tak, zˇe pokud byl beˇzˇı´cı´mu procesu procesor odejmut po prˇerusˇenı´souvisejı´cı´m s I/O zarˇı´zenı´m, je pak proces s nevyuzˇitou cˇa´stı´cˇaso- ve´ho kvanta zarˇazen mı´sto hlavnı´fronty prˇipraveny´ch procesu˚do pomocne´fronty, ktera´ma´prˇideˇlenu vysˇsˇı´prioritu, a tedy zbyle´cˇasove´ kvantum mu˚zˇe vycˇerpat drˇı´ve nezˇkdyby byla metoda uplatneˇna v za´kladnı´verzi. Po vycˇerpa´nı´zbytku cˇasove´ho kvanta je proces zarˇazen opeˇt do hlavnı´fronty prˇipraveny´ch procesu˚.

4.5.3 Nejkratsˇı´u´loha (SPN) (Shortest Process Next, SJF – Shortest Job First) Procesor je prˇideˇlen tomu procesu, u ktere´ho se prˇedpokla´da´nejkratsˇı´doba jeho vyuzˇı´va´nı´(nejmensˇı´cˇasove´kvantum). Fronta je vedena jako prioritnı´s tı´m, zˇe priority jsou zde urcˇeny velikostı´cˇasove´ho kvanta. Metoda ma´preemptivnı´i nepreemptivnı´verzi. Pokud je do fronty prˇipraveny´ch rˇazen proces, u neˇhozˇse prˇedpokla´da´mensˇı´cˇasove´ kvantum nezˇu pra´veˇbeˇzˇı´cı´ho procesu, prˇi nepreemptivnı´m pla´nova´nı´beˇzˇı´cı´proces mu˚zˇe beˇzˇet i da´le a teprve kdyzˇ(nepreemptivneˇ) prˇijde o procesor, pak mu˚zˇe beˇzˇet noveˇrˇazeny´proces, prˇi preemptivnı´m pla´nova´nı´je v takove´m prˇı´padeˇbeˇzˇı´cı´proces okamzˇiteˇprˇerusˇen a procesor je prˇideˇlen dalsˇı´mu procesu. Je nutne´co nejle´pe odhadnout cˇasove´kvantum pro tento u´sek beˇhu procesu. Pro odhadnutı´cˇasove´ho kvanta existuje vı´ce mozˇnostı´(oznacˇme n pocˇet dosavadnı´ch prˇideˇlenı´procesoru dane´mu procesu, R pole hodnot skutecˇny´ch cˇasovy´ch kvant, zatı´m o de´lce n, a S pole odhadu˚cˇasovy´ch kvant):

1. Na´sledujı´cı´cˇasove´kvantum by´va´cˇasto stejne´jako prˇedchozı´, tedy budeme prˇedpokla´dat, zˇe prˇi na´sledujı´cı´m prˇideˇlenı´procesoru bude proces potrˇebovat asi tolik cˇasu kolik vyuzˇil prˇi poslednı´m prˇideˇlenı´.

S[n +1] = R[n] (4.1)

2. Exponencia´lnı´pru˚meˇrova´nı´– u kazˇde´ho procesu zaznamena´va´me de´lku sku- tecˇneˇvyuzˇite´doby prˇideˇlenı´procesoru v minulosti a vhodne´cˇasove´kvan- tum odhadujeme vy´pocˇtem aritmeticke´ho pru˚meˇru vsˇech prˇedchozı´ch sku- tecˇny´ch cˇasovy´ch kvant. Aby nebylo nutne´vzˇdy pocˇı´tat aritmeticky´pru˚meˇr KAPITOLA 4 PROCESY 56

vsˇech hodnot, lze vzorec zjednodusˇit vyuzˇitı´m prˇedchozı´ho odhadu a odpo- vı´dajı´cı´ho skutecˇne´ho cˇasove´ho kvanta.

n 1 S[n +1] = · ·R[i] (4.2) n X i=1 n−1 1 1 = · R[n]+ ·R[i] n n X i=1 1 n − 1 = · R[n]+ · S[n] (4.3) n n

3. Zkombinujeme oba prˇı´stupy (podle vzorcu˚4.1 a 4.3), tedy budeme prˇedpo- kla´dat, zˇe dalsˇı´cˇasove´kvantum se nebude prˇı´lisˇlisˇit od prˇedchozı´ho, ale vezmeme v u´vahu i prˇedchozı´de´lky u´seku˚, trˇebazˇe s mensˇı´vahou. Volı´me vhodnou konstantu c, 0

S[n +1] = c · R[n]+(1 − c) · S[n] (4.4)

Vy´znam konstanty c je zrˇejmy´z rekurzivnı´ho rozlozˇenı´vzorce:

S[n +1] = c · R[n]+(1 − c) · c · R[n − 1] + (1 − c) · S[n − 1] . . = c · R[n]+(1 − c) · c · R[n − 1] + . . . − . . . + (1 − c)n 1 · c · R[1] + (1 − c)n · S[1] (4.5)

Tato metoda zvy´hodnˇuje I/O-bound procesy, jejichzˇcˇasove´kvantum by´va´mensˇı´, a vy´razneˇznevy´hodnˇuje CPU-bound, zvla´sˇteˇkdyzˇjde o dlouho beˇzˇı´cı´procesy. De´le beˇzˇı´cı´procesy mohou sta´rnout, tedy jejich beˇh prˇesta´va´by´t aktua´lnı´(ztra´cejı´ vy´znam). Pokud je v procesu chyba (nekonecˇny´cyklus), pak chybneˇbeˇzˇı´cı´proces neblokuje procesor a lze ho snadno detekovat (zu˚sta´va´na konci fronty, je neusta´le odstavova´n).

4.5.4 Priority Prˇi uplatneˇnı´te´to metody prˇideˇlujeme procesor procesu s nejvysˇsˇı´prioritou, tedy pouzˇı´va´me prioritnı´frontu. Metoda ma´opeˇt preemptivnı´i nepreemptivnı´variantu, KAPITOLA 4 PROCESY 57

stejneˇjako prˇedchozı´. Za variantu te´to metody mu˚zˇeme povazˇovat take´metodu SPN (prˇedchozı´), kde se priorita odvı´jı´od cˇasove´ho kvanta procesu (cˇı´m mensˇı´ kvantum, tı´m vysˇsˇı´priorita). Priorita procesu mu˚zˇe by´t urcˇena staticky (staticka´priorita, stanovı´se prˇedem, prˇi spusˇteˇnı´procesu) nebo dynamicky (dynamicka´priorita, meˇnı´se za beˇhu pro- cesu). Dynamicka´priorita prˇi vhodne´m pouzˇitı´snizˇuje nebezpecˇı´sta´rnutı´procesu˚ s nı´zkou prioritou, priorita mu˚zˇe by´t u de´le cˇekajı´cı´ch procesu˚postupneˇzvysˇova´na. Modernı´syste´my pouzˇı´vajı´priority v kombinaci s jiny´mi metodami (viz na´sle- dujı´cı´metoda), a je to take´podmı´nka alesponˇza´kladnı´podpory real-time procesu˚.

4.5.5 Kombinace metod s vı´ce frontami Je vedeno vı´ce front prˇipraveny´ch procesu˚, procesy jsou rozdeˇlova´ny dle urcˇite´ho algoritmu. Pro kazˇdou frontu je stanovena neˇktera´metoda pla´nova´nı´, a da´le jedna z metod je uplatnˇova´na prˇi rozhodova´nı´mezi frontami. Jednoduchy´algoritmus rˇazenı´procesu˚do jednotlivy´ch front spocˇı´va´v tom, zˇe kazˇda´fronta je urcˇena pro urcˇity´typ procesu˚(syste´move´, interaktivnı´, da´vkove´, ostatnı´) s tı´m, zˇe jednotlive´fronty jsou organizova´ny metodou RR (cyklicke´pla´no- va´nı´), FCFS (fronta) nebo pouzˇitı´m dynamicke´priority. Kazˇda´fronta ma´stanovenu prioritu (nety´kajı´cı´se jednotlivy´ch procesu˚, ale cele´ fronty), a prˇednostneˇjsou bra´ny procesy z fronty s nejvysˇsˇı´prioritou. Efektivneˇjsˇı´ algoritmus umozˇnˇuje prˇesouva´nı´ procesu˚ mezi frontami, fronty nejsou urcˇeny pouze pro konkre´tnı´typ procesu˚. Fronty jsou usporˇa´da´ny do po- sloupnosti s klesajı´cı´prioritou (tj. prvnı´fronta v posloupnosti ma´nejvysˇsˇı´prioritu). Proces je nejdrˇı´v zarˇazen do prvnı´fronty, kdyzˇvycˇerpa´sve´cˇasove´kvantum, je pro cˇeka´nı´na prˇideˇlenı´dalsˇı´ho cˇasove´ho kvanta zarˇezen do druhe´fronty, pak do trˇetı´, atd. Prˇi prˇerusˇenı´beˇhu I/O zarˇı´zenı´m se po opeˇtovne´m prˇechodu procesu do stavu prˇipraveny´proces zarˇadı´do prvnı´fronty. Pla´novacˇprocesoru zacˇne pracovat s na´- sledujı´cı´frontou azˇtehdy, kdyzˇjsou vsˇechny prˇedchozı´ fronty pra´zdne´. Poslednı´ fronta je organizova´na metodou RR, ostatnı´metodou FCFS. Tento algoritmus zvy´hodnˇuje I/O-bound procesy, protozˇe ty se po kazˇde´m pouzˇitı´I/O zarˇı´zenı´vracejı´do prvnı´fronty, CPU-bound procesy s cˇasem postupujı´ do na´sledujı´cı´ch front s mensˇı´prioritou. KAPITOLA 4 PROCESY 58

4.6 Komunikace procesu˚

Jednou z vy´hod multitaskingu je mozˇnost snadne´komunikace procesu˚– mezipro- cesove´komunikace (IPC, Interprocess Communication). Rozlisˇujeme proces ode- sı´lajı´cı´(odesı´latel, sender) a proces prˇijı´majı´cı´ (prˇı´jemce, receiver). Odesı´latel mu˚zˇe poslat

• data cˇi textovy´ rˇeteˇzec (prˇı´padneˇ s de´lkou omezenou urcˇitou konstantou) nebo • odkaz na data (adresa v pameˇti nebo na pevne´m pameˇt’ove´m me´diu, mu˚zˇe jı´t o docˇasny´soubor) nebo • signa´l (cˇı´slo s urcˇity´m vy´znamem, naprˇı´klad informace o tom, zˇe ma´proces ukoncˇit svou cˇinnost).

Rozlisˇujeme dva za´kladnı´typy komunikace:

• prˇı´ma´– prˇı´jemce je prˇedem zna´m (zası´la´nı´zpra´v), • neprˇı´ma´– prˇı´jemce nenı´urcˇen odesı´latelem prˇi odesı´la´nı´dat, ale azˇbeˇhem samotne´ho prˇesunu (schra´nka, sdı´lena´ pameˇt’) nebo nava´za´nı´m spojenı´m zvneˇjsˇku (roury – pipes).

Pokud je prˇı´jemce pouze jeden a odesı´latel ho prˇı´mo adresuje, model komunikace nazy´va´me unicast, jestlizˇe je zpra´va (nebo jaka´koliv data) urcˇena vsˇem, kdo mohou komunikovat, a to bez konkre´tnı´adresace, pak je to model broadcast, pokud je vı´ce konkre´tnı´ch adresovany´ch prˇı´jemcu˚, jde o model multicast.

Prˇı´ma´komunikace (zası´la´nı´zpra´v) ma´vy´hodu prˇedevsˇı´m v sˇirsˇı´ch mozˇnostech pouzˇitı´. Zpra´vy lze zası´lat take´procesu˚m beˇzˇı´cı´m na jine´m procesoru nebo po- cˇı´tacˇi, nejsme va´za´ni podmı´nkou existence sdı´lene´ho pameˇt’ove´ho prostoru pro odesı´latele a prˇı´jemce. Zası´la´nı´zpra´v je realizova´no na´sledujı´cı´mi funkcemi:

• send(P,zpraÂva) – proces odesˇle prˇı´jemci – procesu P – zpra´vu, • receive(Q,zpraÂva) – proces prˇijme (vyzvedne si) zpra´vu od odesı´latele Q, zpra´va se nacˇte do druhe´ho parametru.

Prˇı´mou komunikaci deˇlı´me na

• symetricka´– odesı´latel a prˇı´jemce zpra´vy se navza´jem doka´zˇou identifikovat, kazˇdy´vı´, s ky´m komunikuje, lze realizovat naprˇı´klad prioritnı´frontou, ze ktere´se prˇednostneˇvybı´rajı´zpra´vy urcˇite´ho odesı´latele, KAPITOLA 4 PROCESY 59

• asymetricka´– prˇı´jemce nemusı´zna´t odesı´latele, jen odesı´latel vı´, komu zpra´vu posı´la´. Potom prˇı´jemce nezada´va´identifikaci odesı´latele do prvnı´ho parame- tru funkce receive, ale tento u´daj je do tohoto parametru nacˇten stejneˇjako samotna´zpra´va (odpovı´da´jednoduche´mu vybı´ra´nı´zpra´v z fronty). Prˇı´mou komunikaci da´le deˇlı´me na • asynchronnı´– odesı´lajı´cı´proces nemusı´cˇekat na odpoveˇd’, • synchronnı´– odesı´lajı´cı´proces musı´cˇekat na potvrzenı´zpra´vy nebo odpoveˇd’ (do te´doby je blokova´n, obvykle ve stavu suspended). Zası´la´nı´zpra´v lze implementovat mnoha zpu˚soby, naprˇı´klad tak, zˇe odesı´lana´ zpra´va je ulozˇena odesı´latelem do fronty ve spolecˇne´cˇi syste´move´pameˇti, z ktere´ jsou zpra´vy k tomu urcˇeny´m modulem spra´vy procesu˚postupneˇ vybı´ra´ny a ode- sı´la´ny, tedy kopı´rova´ny do pameˇt’ove´ho prostoru prˇı´jemce (jeho fronty zpra´v). Synchronnı´komunikace by´va´neˇkdy implementova´na trˇemi funkcemi – kromeˇ drˇı´ve uvedeny´ch send a receive jesˇteˇ reply(P,zpraÂva) pro potvrzenı´prˇi- jetı´zpra´vy od procesu P. Odesı´latel je po odesla´nı´zpra´vy suspendova´n a mu˚zˇe pokracˇovat azˇpo obdrzˇenı´potvrzenı´vyslane´ho prˇı´jemcem pomocı´funkce reply. Tak funguje naprˇı´klad RPC (Remote Procedure Call, vola´nı´vzda´lene´procedury, tedy procedury nepatrˇı´cı´do ko´du volajı´cı´ho procesu). Odesı´latel je proces volajı´cı´ vzda´lenou proceduru, prˇı´jemce je proces, v jehozˇko´du se tato procedura nacha´zı´. Odesı´latel je blokova´n azˇdo chvı´le, kdy prˇı´jemce odesˇle reply o provedenı´volane´ procedury.

Neprˇı´ma´komunikace probı´ha´prˇes rozhranı´prˇedstavovane´bodem spojenı´, na- zy´vany´m obvykle port (bra´na, socket, schra´nka). Port mu˚zˇe by´t vytvorˇen ktery´m- koliv procesem nebo operacˇnı´m syste´mem. Vlastnı´kem portu je ten proces, ktery´ ho vytvorˇil, nebo mu˚zˇe by´t vlastnictvı´prˇevedeno na jiny´ proces. Do portu mu˚zˇe za- pisovat jen vlastnı´k (odesı´latel), ostatnı´procesy, ktery´m je k portu dovolen prˇı´stup, mohou jen cˇı´st (prˇı´jemci). Komunikace probı´ha´pomocı´ funkcı´ • send(ID portu,zpraÂva) – odesı´latel ulozˇı´do zadane´ho portu zpra´vu, • receive(ID portu,zpraÂva) – prˇı´jemce vyzvedne zpra´vu z dane´ho portu. Specia´lnı´typ socketu (portu) je pipe (roura). Jde o soubor pevne´de´lky (v Unixovy´ch syste´mech), ktery´obvykle ani neby´va´ulozˇen na disk, zu˚sta´va´v operacˇnı´pameˇti, neby´va´ani stra´nkova´n. Odesı´latel ho vytvorˇı´(syste´m pro tento u´cˇel obvykle na- bı´zı´neˇktere´syste´move´vola´nı´) a postupneˇnaplnˇuje daty. Po naplneˇnı´je odesı´latel blokova´n, dokud prˇı´jemce neprˇecˇte cely´tento soubor, jeho obsah je pak smaza´n a odesı´latel mu˚zˇe pokracˇovat. KAPITOLA 5

Synchronizace procesu˚

V multitaskove´m syste´mu se beˇzˇneˇsta´va´, zˇe vı´ce procesu˚potrˇebuje prˇistupovat ke stejne´mu prostrˇedku. Tı´mto prostrˇedkem mu˚zˇe by´t beˇzˇne´I/O zarˇı´zenı´, jako je obrazovka, kla´vesnice cˇi tiska´rna, ale take´sdı´lena´oblast pameˇti. V te´to kapitole si popı´sˇeme za´kladnı´proble´my souvisejı´cı´se synchronizacı´procesu˚a metody, ktery´mi je lze rˇesˇit.

5.1 U´ vod do problematiky

Prˇi prˇı´stupu vı´ce procesu˚k te´muzˇprostrˇedku je hlavnı´m proble´mem zajisˇteˇnı´ kon- zistentnı´ho stavu prostrˇedku. V prˇı´padeˇsdı´lene´pameˇti jde o konzistenci dat, tedy pokud neˇktery´proces zapisuje do te´to pameˇti, jiny´by nemeˇl cˇı´st, dokud zapisujı´cı´ proces nedokoncˇı´svou pra´ci, protozˇe by mohl nacˇı´st jen zpoloviny modifikovana´ data. Data jsou v konzistentnı´m stavu prˇed zacˇa´tkem za´pisu a po dokoncˇenı´za´pisu. Nejprˇı´sneˇjsˇı´m krite´riem pro prˇı´stup k prostrˇedku˚m jsou Bernsteinovy podmı´nky. Oznacˇme • read(P,t) mnozˇinu vsˇech prostrˇedku˚vcˇetneˇpameˇt’ovy´ch mı´st, ze ktery´ch se proces P pokousˇı´cˇı´st v cˇase (okamzˇiku) t, • write(P,t) mnozˇinu vsˇech prostrˇedku˚, na ktere´se proces P pokousˇı´v cˇase t zapisovat (prova´deˇt jake´koliv zmeˇny). Bernsteinovy podmı´nky pro jake´koliv dva procesy P, Q jsou na´sledujı´cı´:

read(P,t) ∩ write(Q, t) = ∅ (5.1) write(P,t) ∩ write(Q, t) = ∅ (5.2)

60 KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 61

Znamena´to, zˇe je zaka´za´no prˇistupovat k te´muzˇbodu (portu, socketu, zarˇı´zenı´, mı´stu v pameˇti), at’uzˇpro cˇtenı´nebo za´pis, pokud zde v te´chvı´li prova´dı´za´pis jiny´ proces. Bernsteinovy podmı´nky jsou hodneˇsilne´a je teˇzˇke´je dodrzˇet. Proto se obvykle pouzˇı´vajı´jine´, jemneˇjsˇı´podmı´nky, trˇebazˇe jejich implementace je na´rocˇneˇjsˇı´. Rˇ esˇenı´ pro prˇı´stup k perifernı´m zarˇı´zenı´m si uka´zˇeme v jedne´ z na´sledujı´cı´ch kapitol, zde se budeme zaby´vat synchronizacı´prˇı´stupu ke sdı´lene´pameˇti a synchronizacı´beˇhu procesu˚prˇi jejich komunikaci.

5.2 Petriho sı´teˇ

Petriho sı´teˇjsou vizualizacˇnı´prostrˇedek, ktery´prˇehledneˇzachycuje tok dat nebo jake´koliv paralelnı´cˇi pseudoparalelnı´postupy na abstraktnı´u´rovni. Zde je budeme pouzˇı´vat pro prvnı´ fa´zi na´vrhu rˇesˇenı´ proble´mu˚ vznikajı´cı´ch prˇi synchronizaci prostrˇedku˚. Petriho sı´t’je orientovany´graf s dveˇma typy uzlu˚:

 mı´sta, prˇedstavujı´stavy procesu nebo stavy syste´mu,  prˇechody, prˇedstavujı´urcˇitou cˇinnost procesu nebo syste´mu probı´hajı´cı´mezi dveˇma stavy (prˇedstavovany´mi mı´sty).

Mı´sta a prˇechody se v sı´ti strˇı´dajı´, nesmı´by´t prˇı´mo za sebou dva uzly stejne´ho typu. V mı´stech mohou by´t tecˇky (tokeny) prˇedstavujı´cı´„povolenı´“ pokracˇovat v grafu da´le. Kazˇda´hrana je ohodnocena prˇirozeny´m cˇı´slem (pokud nenı´cˇı´slo uvedeno, je to 1), toto cˇı´slo znamena´na´sobnost hrany. Aby prˇechod mohl by´t proveden, musı´by´t v kazˇde´m mı´steˇ, z neˇhozˇdo prˇechodu vede hrana, nejme´neˇtolik tecˇek, jake´je ohodnocenı´te´to hrany. Provedenı´prˇechodu probı´ha´takto:

1) z kazˇde´ho mı´sta, z neˇhozˇdo prˇechodu vede cesta (sˇipka) ohodnocena´cˇı´slem n, ubere n tecˇek, 2) do kazˇde´ho mı´sta, do ktere´ho z neˇj vede cesta ohodnocena´ cˇı´slem m, prˇida´ m tecˇek.

Na obra´zku 5.1 jsou dva prˇechody, z nichzˇje v tomto stavu sı´teˇ proveditelny´ pouze ten prvnı´, druhy´ nenı´ proveditelny´, protozˇe v mı´steˇ C nenı´ zˇa´dna´ tecˇka a v mı´steˇ B je pouze jedna, musı´ by´t dveˇ. Prˇi provedenı´ prvnı´ho prˇechodu se KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 62

B  A 1 P  PP D -  s 2 Pq -  PP 1  s PPq  s  s   C  Obra´zek 5.1: Prˇı´klad Petriho sı´teˇ

z mı´sta A odebere tecˇka (pouze jedna, hrana nenı´oznacˇena cˇı´slem) a do mı´st B a C se prˇida´po jedne´tecˇce. Ted’ uzˇje proveditelny´druhy´prˇechod. Prˇi jeho provedenı´ se z mı´sta B odeberou dveˇtecˇky a z mı´sta C jedna tecˇka a prˇida´se tecˇka do mı´st B a D. V mı´steˇ D ted’ budou trˇi tecˇky. Na obra´zku 5.2 je uka´zka petriho sı´teˇ popisujı´cı´ zjednodusˇeny´ beˇh procesu vyuzˇı´vajı´cı´ho pouze procesor s tı´m, zˇe zˇa´dny´jiny´proces nebeˇzˇı´.

prˇideˇlenı´ prˇideˇlenı´ ukoncˇenı´ novy´ prostrˇedku˚ prˇipraveny´ procesoru beˇzˇı´cı´ procesu ukoncˇen -  - -  - -  - -  s   6   volny´ ? odebra´nı´ s procesor procesoru 6

Obra´zek 5.2: Petriho sı´t’popisujı´cı´beˇh velmi jednoduche´ho procesu

Tecˇku v mı´steˇoznacˇene´m novy´ mu˚zˇeme cha´pat jako stav, ve ktere´m se momen- ta´lneˇnacha´zı´vykona´va´nı´procesu. Vsˇechny prˇechody jsou ohodnoceny cˇı´slem 1 (cˇı´slo 1 se nemusı´uva´deˇt). Mı´sto volny´procesor prˇedstavuje stav syste´mu, ve ktere´m mu˚zˇe by´t prˇideˇlen procesor. Obsahuje tecˇku pouze tehdy, kdyzˇje procesor volny´ a mu˚zˇe probeˇhnout jeho prˇideˇlenı´. Po provedenı´prˇechodu prˇideˇlenı´procesoru se odebere tecˇka z mı´st prˇipraveny´ a volny´procesor a prˇida´se tecˇka do mı´sta beˇzˇı´cı´. Pak mu˚zˇe by´t pro- veden prˇechod odebra´nı´procesoru, prˇicˇemzˇse odebere tecˇka z mı´sta beˇzˇı´cı´ a prˇida´ se do mı´st volny´procesor a prˇipraveny´. V prˇı´padeˇ, zˇe je spusˇteˇno vı´ce procesu˚, vsˇechny tyto procesy vyuzˇı´vajı´mı´sto volny´procesor. Kdykoliv se neˇktery´proces dostane do stavu beˇzˇı´cı´, odebere tecˇku z tohoto mı´sta a ostatnı´procesy musı´pocˇkat ve stavu prˇipraveny´, tedy v mı´steˇ prˇipraveny´ dane´ho procesu, dokud beˇzˇı´cı´proces tecˇku nevra´tı´. Petriho sı´t’ plneˇpopisujı´cı´beˇh a synchronizaci procesu˚by byla prˇı´lisˇslozˇita´ a rozsa´hla´, proto budeme pouzˇı´vat zjednodusˇena´sche´mata, kde jednotliva´mı´sta KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 63 a prˇechody mohou prˇedstavovat podsı´teˇ, jejichzˇvy´pocˇet a stavy nepotrˇebujeme rozlisˇovat.

5.3 Za´kladnı´synchronizacˇnı´u´lohy

Postupneˇprobereme za´kladnı´u´lohy, ktere´se rˇesˇı´prˇi synchronizaci procesu˚, a na- znacˇı´me jejich rˇesˇenı´na abstraktnı´u´rovni pomocı´petriho sı´tı´.

5.3.1 Kriticka´sekce Tuto u´lohu je trˇeba vyrˇesˇit, pokud chceme umozˇnit vy´lucˇny´prˇı´stup ke sdı´lene´mu prostrˇedku – kriticke´sekci (naprˇı´klad sdı´lene´mu mı´stu v pameˇti). Je trˇeba zajistit, aby k tomuto prostrˇedku v jednom okamzˇiku prˇistupoval nejvy´sˇe jeden proces a aby tento prostrˇedek mohl bez prˇerusˇenı´vyuzˇı´vat po potrˇebnou nebo prˇedem stanovenou dobu. Na obra´zku 5.3 je proble´m uka´za´n na petriho sı´ti.

Proces P1 Proces P2 Proces Pn

? ? ?   . . .  s   

?? ?? ??

? ? ? P1.KS() P2.KS() Pn.KS() Stra´zˇnı´    mı´sto s    666

? ? ?

? ? ?   

   ? ? ?

Obra´zek 5.3: Petriho sı´t’pro u´lohu Kriticka´sekce

Aby proces mohl prove´st svou cˇa´st ko´du prˇistupujı´cı´ke kriticke´sekci, musı´by´t ve stra´zˇnı´m mı´steˇtecˇka. V nasˇem prˇı´padeˇk prˇechodu pro vstup do kriticke´sekce KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 64

prˇicha´zı´proces P2, a protozˇe je ve stra´zˇnı´m mı´steˇtecˇka, znamena´to, zˇe ke sdı´lene´mu prostrˇedku zrovna neprˇistupuje jiny´proces a tedy P2 mu˚zˇe da´l pokracˇovat. Po vyhodnocenı´vstupnı´ho prˇechodu je odebra´na tecˇka nejen z mı´sta procesu prˇed kritickou sekcı´, ale take´ze stra´zˇnı´ho mı´sta, a prˇida´na do mı´sta uvnitrˇvyhod- nocenı´kriticke´sekce procesem P2. Pak je proces ve stavu vyhodnocova´nı´kriticke´ sekce, v mı´steˇ P2.KS(). Po provedenı´ prˇechodu znamenajı´cı´ho opusˇteˇnı´ kriticke´ sekce je tecˇka vra´cena do stra´zˇnı´ho mı´sta a take´prˇida´na do mı´sta procesu P2 za kritickou sekcı´, tedy proces pokracˇuje ve sve´ cˇinnosti a do kriticke´sekce mu˚zˇe vstoupit dalsˇı´proces. Kdyby dalsˇı´proces chteˇl vstoupit do kriticke´sekce v dobeˇ, kdy se v nı´nacha´zı´ proces P2 (a tedy ve stra´zˇnı´m mı´steˇnenı´tecˇka), musı´pocˇkat, dokud proces P2 nevra´tı´tecˇku do stra´zˇnı´ho mı´sta, a teprve potom pokracˇovat. Pozˇadavky na rˇesˇenı´jsou:

• v kriticke´sekci smı´by´t nejvy´sˇe jeden proces, • proces cˇeka´na vstup do kriticke´sekce konecˇnou dobu, • proces se nacha´zı´v kriticke´sekci konecˇnou dobu.

5.3.2 Producent–konzument Producent je proces produkujı´cı´data a konzument je proces, ktery´tato data prˇijı´ma´ a da´le zpracova´va´. U´ cˇelem je, aby producent a konzument (konzumenti) mohli pracovat kazˇdy´ jinou rychlostı´, do urcˇite´ mı´ry na sobeˇ neza´visle, tedy obvykle asynchronneˇ. U´ lohu lze rˇesˇit neˇkolika zpu˚soby v za´vislosti na tom, kolik ma´me k dispozici sdı´lene´pameˇti, do ktere´majı´prˇı´stup vsˇechny zu´cˇastneˇne´procesy:

1) Neomezeny´buffer – ma´me k dispozici jake´koliv mnozˇstvı´ pameˇti. 2) Omezeny´buffer – ma´me k dispozici urcˇity´pocˇet pameˇt’ovy´ch mı´st, je stano- vena hornı´hranice. 3) Synchronizace zpra´vami – zˇa´dna´sdı´lena´pameˇt’, nutnost synchronnı´komu- nikace.

ad. 1) Neomezeny´buffer: rˇesˇenı´je naznacˇeno petriho sı´tı´na obra´zku 5.4. Ma´me k dispozici frontu polozˇek, jejı´zˇde´lka se dynamicky meˇnı´, pozˇadavkem je zajistit, aby se konzument zastavil ve chvı´li, kdy je fronta pra´zdna´, a aby data za kazˇdy´ch okolnostı´zu˚stala konzistentnı´. Na obra´zku 5.4 je syste´m ve stavu, kdy KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 65

producent konzument

? ?? produkuj cˇti

vyprodukova´no ? ?nacˇteno  stav fronty  s s s s s  6 

? ? zapisˇ zpracuj

zapsa´no ? ?zpracova´no   s  

Obra´zek 5.4: Petriho sı´t’pro u´lohu Producent - konzument, neomezeny´buffer ve fronteˇjsou cˇtyrˇi polozˇky a jsou proveditelne´prˇechody zapisˇ a cˇti (tedy pracovat mohou oba procesy). ad. 2) Omezeny´buffer: rˇesˇenı´je naznacˇeno petriho sı´tı´na obra´zku 5.5. Omezeny´ buffer mu˚zˇe by´t implementova´n jako staticka´kruhova´fronta. Oproti rˇesˇenı´neomezeny´m bufferem zde jsou trˇi pozˇadavky:

• producent se zastavı´, kdyzˇje buffer plny´, • konzument se zastavı´, kdyzˇje buffer pra´zdny´, • data musı´by´t neusta´le v konzistentnı´m stavu.

Na obra´zku 5.5 je proveditelny´pouze prˇechod zapisˇ, konzument musı´cˇekat prˇed prˇechodem cˇti. Po provedenı´prˇechodu zapisˇ budou proveditelne´prˇechody produkuj a cˇti. Celkovy´ pocˇet mı´st ve fronteˇ je soucˇet tecˇek v mı´stech volne´, obsazene´, vyprodukova´no a nacˇteno. ad. 3) Synchronizace zpra´vami: tato metoda je pouzˇitelna´v prˇı´padeˇ, zˇe procesy nemohou sdı´let zˇa´dnou pameˇt’,naprˇı´klad v distribuovany´ch syste´mech nebo v prˇı´- padeˇvı´ceprocesorovy´ch syste´mu˚bez spolecˇne´pameˇti. Producent a konzument si navza´jem posı´lajı´zpra´vy, producent posı´la´polozˇky a konzument potvrzenı´o zpracova´nı´(zˇa´dost o dalsˇı´polozˇku). Jedna´se tedy o sy- KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 66

producent konzument

?? ?? produkuj cˇti volne´  s s vyprodukova´no ? s s @I ?nacˇteno   @  @ s  @   @ @ ? 6obsazene´ ? zapisˇ  @ zpracuj @

zapsa´no ? ?zpracova´no   s  

Obra´zek 5.5: Petriho sı´t’pro u´lohu Producent - konzument, omezeny´buffer metrickou synchronnı´komunikaci. Rˇ esˇenı´petriho sı´tı´je na obra´zku 5.6 na str. 67, procesy na sebe navza´jem cˇekajı´.

5.3.3 Model–obraz Tato u´loha je podobna´ u´loze Producent–konzument. Rˇ esˇı´me ji, kdyzˇ je potrˇeba sledovat a zpracova´vat nikoliv vsˇechny polozˇky, ale vzˇdy pra´veˇaktua´lnı´stav. Jedna skupina procesu˚(nebo vla´ken) neusta´le prova´dı´zmeˇny na datech a dalsˇı´ skupina procesu˚(vla´ken) zobrazuje aktua´lnı´stav teˇchto dat. Typicky´m proble´mem je zobrazova´nı´stavu neˇjake´ho zarˇı´zenı´(teplota, vlhkost, apod.), kdy producenti jsou procesy sledujı´cı´cˇidla meˇrˇı´cı´tyto velicˇiny. Kdybychom trvali na zpracova´nı´vsˇech polozˇek, ktere´produkujı´cı´procesy vy- tvorˇı´, zpracova´nı´ by se zdrzˇovalo a prˇı´padne´ zobrazova´nı´ dat na monitoru by mohlo „problika´vat“ nebo by se tak rychle meˇnilo, zˇe by u´daje byly necˇitelne´. U´ lohy tohoto typu jsou typicke´take´pro realtimove´syste´my. Producent mu˚zˇe oznacˇovat pozmeˇneˇna´mı´sta, pak se konzument soustrˇed’uje pouze na tato mı´sta a prˇi cˇtenı´jejich oznacˇenı´odstranˇuje. V prˇı´padeˇ, zˇe produ- cent meˇnı´mı´sto, ktere´jesˇteˇnebylo konzumentem nacˇteno a tedy je oznacˇeno jako pozmeˇneˇne´, pak nemusı´nic poznamena´vat, jen zmeˇnı´data. Hlavnı´m pozˇadavkem je zachova´nı´ konzistence dat, tedy k dane´mu pameˇ- t’ove´mu mı´stu nesmı´prˇistupovat vı´ce nezˇjeden proces. Rˇ esˇenı´odpovı´da´rˇesˇenı´ kriticke´sekce. KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 67 producent konzument

?? @ ?? produkuj cˇti @ @ @ vyprodukova´no ? @ ?nacˇteno @   @ s @   @ @ ? ? zapisˇ @ zpracuj @@

zapsa´no ? ?zpracova´no   s  

Obra´zek 5.6: Petriho sı´t’pro u´lohu Producent - konzument, synchronizace zpra´vami

Na obra´zku 5.7 je prˇı´pad jednoho producenta a jednoho konzumenta, kterˇı´ prˇistupujı´k pameˇt’ove´mu mı´stu urcˇujı´cı´mu momenta´lnı´stav dat (stra´zˇnı´mı´sto). Pokud je v stra´zˇnı´m mı´steˇtecˇka, znamena´to, zˇe data jsou v konzistentnı´m stavu a pra´veˇk nim neprˇistupuje producent ani konzument, v nasˇem prˇı´padeˇk datu˚m prˇistupuje producent, ktery´ze stra´zˇnı´ho mı´sta tecˇku odebral. Kazˇdy´proces mu˚zˇe pracovat jiny´m tempem.

5.3.4 Cˇtena´rˇi–pı´sarˇi V te´to u´loze jsou procesy rozdeˇleny vzhledem k prˇı´stupu ke sdı´lene´mu prostrˇedku (pameˇti) do dvou disjunktnı´ch skupin – skupiny cˇtena´rˇu˚a skupiny pı´sarˇu˚(proces mu˚zˇe prˇecha´zet mezi skupinami, nesmı´ vsˇak by´t v obou). Cˇtena´rˇi zde mohou cˇı´st, pı´sarˇi mohou zapisovat. Musı´me mı´t neusta´le prˇehled o tom, kolik je cˇtena´rˇu˚ (cˇtoucı´ch procesu˚). V dobeˇ, kdy neˇktery´ proces zapisuje, nesmı´ probı´hat zˇa´dne´ cˇtenı´ ani za´pis jiny´m procesem, zatı´mco operacı´ cˇtenı´ mu˚zˇe probı´hat vı´ce za´rovenˇ (nenarusˇujı´ konzistentnost dat). Pozˇadavky na rˇesˇenı´jsou na´sledujı´cı´:

• data musı´zu˚stat v konzistentnı´m stavu, • operace za´pisu je vyloucˇena s jakoukoliv jinou operacı´(cˇtenı´i za´pisu), • operace cˇtenı´nejsou navza´jem vyloucˇeny. KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 68 producent konzument

?? ?? produkuj cˇti

vyprodukova´no ? ?nacˇteno  stra´zˇnı´mı´sto  s  66 

? ? zapisˇ zpracuj

zapsa´no ? ?zpracova´no   s  

Obra´zek 5.7: Petriho sı´t’pro u´lohu Model - obraz

Na obra´zku 5.8 na str. 69 je u´loha rˇesˇena pro cˇtyrˇi cˇtena´rˇe a jednoho pı´sarˇe. Kazˇdy´cˇtena´rˇsi prˇed cˇtenı´m vyzvedne tecˇku ze stra´zˇnı´ho mı´sta. Zapisujı´cı´proces (pı´sarˇ) si prˇi pokusu o za´pis musı´vyzvednout cˇtyrˇi tecˇky, tedy tolik, kolik je celkem cˇtena´rˇu˚. Tı´m je zajisˇteˇno, zˇe zapisovat lze pouze tehdy, kdyzˇzˇa´dny´cˇtena´rˇnecˇte (ve stra´zˇnı´m mı´steˇjsou vsˇechny tecˇky). Pokud neˇktery´pı´sarˇzapisuje, musı´vsˇichni cˇtena´rˇi pocˇkat, azˇpı´sarˇdokoncˇı´za´pis a vra´tı´tecˇky do stra´zˇnı´ho mı´sta. Kdyby bylo vı´ce pı´sarˇu˚, opeˇt by ktery´koliv pı´sarˇbyl zablokova´n jak v prˇı´padeˇ, zˇe neˇktery´cˇtena´rˇcˇte, tak i v prˇı´padeˇ, zˇe neˇktery´jiny´pı´sarˇzapisuje.

5.3.5 Peˇt hladovy´ch filozofu˚ Je to typicka´u´loha paralelnı´ho programova´nı´. Na´zev u´ lohy je odvozen ze zna´me´ho proble´mu: u kulate´ho stolu sedı´peˇt filozofu˚a strˇı´daveˇprˇemy´sˇlı´a jı´. Kazˇdy´k jı´dlu potrˇebuje dveˇhu˚lky, ale na stole je pouze peˇt hu˚lek, mezi kazˇdou sousedı´cı´dvojicı´ filozofu˚jedna. Pokud zrovna filozof nema´k dispozici hu˚lku po prave´i leve´ruce, nezby´va´mu nezˇprˇemy´sˇlet. Filozof, jehozˇsousede´mu strˇı´daveˇberou hu˚lky, nema´sˇanci se najı´st, docha´zı´ke sta´rnutı´. Pokud vsˇichni najednou zvednou hu˚lku po sve´prave´ruce, dojde k uva´z- nutı´, protozˇe vsˇichni drzˇı´v prave´ruce hu˚lku a cˇekajı´na levou, ktera´je vsˇak zrovna drzˇena levy´m sousedem, a tedy nedostupna´. Po aplikaci na procesy ma´me peˇt (obecneˇn) procesu˚vyuzˇı´vajı´cı´ch urcˇite´pro- strˇedky (hu˚lky), o ktere´se deˇlı´s jiny´mi. KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 69

Proces P1 Proces P4 Proces Pz

? ? ?  . . .   4   

?? ?? ??

? ? ? P1.cˇti() P4.cˇti() Stra´zˇnı´ Pz.pisˇ()     s s mı´sto s s   666 

? ? ?

4 ? ? ?   

   ? ? ?

Obra´zek 5.8: Petriho sı´t’pro u´lohu Cˇtena´rˇi - pı´sarˇi

Rˇ esˇenı´proble´mu spocˇı´va´v tom, zˇe ke stolu nepustı´me vsˇech peˇt filozofu˚najed- nou (a tedy k prostrˇedku˚m nepustı´me vsˇechny procesy najednou), ale maxima´lneˇ cˇtyrˇi (n−1, prˇı´padneˇ k−1 pro k > 0, ke k je pocˇet sdı´leny´ch prostrˇedku˚). Du˚sledkem je, zˇe alesponˇjeden filozof se najı´v kazˇde´m prˇı´padeˇ, tedy i kdyby vsˇichni najed- nou vzali hu˚lku pravou (nebo levou) rukou, u procesu˚alesponˇ jeden proces mu˚zˇe pouzˇı´t potrˇebne´prostrˇedky a uvolnit pak mı´sto dalsˇı´mu procesu. Jinou mozˇnostı´ je narˇı´dit jednomu filozofovi, aby bral hu˚lky v opacˇne´m porˇadı´nezˇostatnı´. Na obra´zku 5.9 je rˇesˇenı´naznacˇeno na skupineˇtrˇı´procesu˚a trˇı´prostrˇedku˚. Je dovoleno najednou pracovat pouze dveˇma procesu˚m, aby mohly vyuzˇı´t ty pro- strˇedky, ktere´potrˇebujı´.

5.3.6 Soubeˇh procesu˚ U´ loha je rˇesˇena v paralelnı´m syste´mu, kdy dva procesy beˇzˇı´cı´na ru˚zny´ch pro- cesorech (a tedy soubeˇzˇne´) je trˇeba sesynchronizovat tak, aby urcˇitou cˇa´st ko´du prova´deˇly spolecˇneˇ. KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 70

Proces P1 Proces P2 Proces P3

? ? ?   

  

?? ?? ??

? ? ? Stra´zˇnı´     s mı´sto s    666

? ? ?

? ? ?   

   ? ? ?

Obra´zek 5.9: Petriho sı´t’pro u´lohu Peˇt filozofu˚(pro trˇi procesy a trˇi prostrˇedky)

Pokud se jeden proces ke spolecˇne´cˇa´sti ko´du dostane drˇı´v nezˇdruhy´, musı´ pocˇkat (na obra´zku 5.10 na str. 71 musı´cˇekat proces P2), tento ko´d lze prove´st azˇ ve chvı´li, kdy k prˇechodu na zacˇa´tku spolecˇne´cˇa´sti dospeˇjı´oba procesy. Tato metoda synchronizace procesu˚se mu˚zˇe pouzˇı´vat naprˇı´klad v mechanismu RPC (vola´nı´vzda´lene´procedury, na obra´zku 5.10 vola´proces P2 proceduru procesu P1) nebo prˇi jake´koliv synchronnı´vy´meˇneˇdat paralelnı´ch procesu˚.

5.4 Implementace cˇeka´nı´prˇed kritickou sekcı´

Jak vyply´va´z popisu rˇesˇenı´synchronizacˇnı´ch u´loh pomocı´petriho sı´tı´, procesy musı´tra´vit urcˇitou dobu cˇeka´nı´m. Toto cˇeka´nı´lze implementovat ru˚zny´mi zpu˚soby, ktere´mu˚zˇeme rozdeˇlit do dvou skupin:

• pasivnı´cˇeka´nı´, • aktivnı´cˇeka´nı´. KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 71

Proces P1 Proces P2

? ?   s  

??

? spolecˇny´ pru˚beˇh procesu˚ 

?

? ?  

  ? ?

Obra´zek 5.10: Petriho sı´t’pro u´lohu Soubeˇh procesu˚

Pasivnı´cˇeka´nı´: proces je blokova´n nebo suspendova´n, sa´m se nepodı´lı´na cˇeka´nı´. Zde mu˚zˇeme zarˇadit tyto metody:

1. Za´kaz prˇerusˇenı´ (maskova´nı´prˇerusˇenı´) – proces, ktery´vyuzˇı´va´dany´ prostrˇe- dek, zaka´zˇe prˇerusˇenı´a tı´m znemozˇnı´prˇepı´na´nı´kontextu˚, procesor nemu˚zˇe by´t prˇideˇlen jine´mu procesu (tedy ani zˇa´dne´mu z cˇekajı´cı´ch). Jde o hardwa- rove´rˇesˇenı´pouzˇitelne´pouze na jednoprocesorove´m syste´mu. Nevy´hodou je, zˇe ne vsˇechna prˇerusˇenı´lze zaka´zat (naprˇı´klad prˇerusˇenı´prˇi deˇlenı´nulou) a navı´c prˇerusˇenı´vygenerovana´beˇhem za´kazu prˇerusˇenı´se mohou ztratit (nenı´vyvola´na funkce osˇetrˇujı´cı´toto prˇerusˇenı´). Du˚sledkem je kromeˇjine´ho i to, zˇe proces, ktery´zaka´zal prˇerusˇenı´, nelze obvykly´m zpu˚- sobem ukoncˇit ani prˇerusˇit, mu˚zˇe dojı´t k uva´znutı´a sta´rnutı´ procesu˚. Toto rˇesˇenı´snizˇuje propustnost syste´mu.

2. Mutex (mutual exclusion, vza´jemne´vyloucˇenı´) na u´rovni ja´dra (operace Lock, za´mek) – operacˇnı´syste´m mu˚zˇe nabı´zet syste´move´vola´nı´zakazujı´cı´prˇepnutı´ kontextu. Oproti prˇedchozı´mu rˇesˇenı´se neztra´cejı´prˇerusˇenı´(jsou obvykle ur- cˇena beˇzˇı´cı´mu procesu), navı´c je to softwarove´rˇesˇenı´na u´rovni operacˇnı´ho KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 72

syste´mu, tedy nenı´hardwaroveˇza´visle´. Nevy´hoda nebezpecˇı´uva´znutı´a sta´r- nutı´procesu˚zu˚sta´va´.

Aktivnı´cˇeka´nı´: proces se podı´lı´na cˇeka´nı´, obvykle jde o neˇkterou variantu cyklu s pra´zdnou operacı´.

1. Sdı´lena´zamykacı´promeˇnna´ – promeˇnna´ obsazeno mu˚zˇe by´t nastavena na 0 (false, volno) nebo 1 (true, obsazeno). Pokud je nastavena na 1, proces prova´dı´ pra´zdnou smycˇku. shared int obsazeno = 0; ... while(obsazeno) {}; obsazeno = 1; KS(); obsazeno = 0;

V kriticke´ sekci se mu˚zˇe nacha´zet pouze jeden proces, ale nenı´ vyrˇesˇena podmı´nka konecˇnosti pru˚beˇhu kriticke´sekce ani konecˇnost cˇeka´nı´ostatnı´ch procesu˚(za´lezˇı´na tom, v jake´m porˇadı´se prova´dı´test while(obsazeno) cˇekajı´cı´ch procesu˚, do kriticke´sekce se dostane jednodusˇe ten proces, jehozˇ test se prova´dı´jako prvnı´po nastavenı´promeˇnne´ obsazeno na 0, cozˇje do urcˇite´mı´ry na´hoda).

2. Strˇı´da´nı´procesu˚ – prostrˇedek je strˇı´daveˇprˇirˇazova´n vsˇem procesu˚m. Pokud proces prostrˇedek zrovna nepotrˇebuje, zbytecˇneˇzdrzˇuje ostatnı´procesy, tedy metoda snizˇuje propustnost syste´mu a docha´zı´k uva´znutı´. Rˇ esˇenı´je pou- zˇitelne´v prˇı´padeˇ, kdy ma´me jen ma´lo procesu˚(pokud mozˇno dva), cozˇje v operacˇnı´m syste´mu velmi nepravdeˇpodobne´. Pro i-ty´proces: shared int pridelen = 0; ... while(pridelen != i) ; KS(); pridelen ++; if(pridelen == n) pridelen = 0;

Malou zmeˇnou lze odstranit uva´znutı´v prˇı´padeˇ, zˇe neˇktery´proces nechce prostrˇedek vyuzˇı´vat – prˇida´me pole hodnot 0, 1 (false, true), kde pro kazˇdy´ KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 73

proces bude jedna polozˇka. V tomto poli da´proces na veˇdomı´, zˇe chce vyu- zˇı´vat dany´prostrˇedek, nastavenı´m sve´polozˇky na 1, a mı´sto prˇideˇlenı´na´sle- dujı´cı´mu procesu se ve smycˇce prˇeskocˇı´ty procesy, ktere´ o prostrˇedek nestojı´. Pro i-ty´proces: shared int pridelen = 0; shared int priznaky[n] = (0,0,...,0); ... priznaky[i] = 1; while(pridelen != i) {}; KS(); priznaky[i] = 0; do { pridelen ++; if(pridelen == n) pridelen = 0; } while(!priznaky[pridelen]);

I po te´to u´praveˇvsˇak docha´zı´ke zbytecˇne´mu zdrzˇova´nı´cˇasovou rezˇiı´prˇirˇa- zova´nı´prostrˇedku.

3. Bakery algorithm (pekarˇu˚v algoritmus) – procesu je prˇi zˇa´dosti o prˇı´stup do kriticke´sekce prˇideˇleno porˇadove´cˇı´slo. Prˇednost ma´proces s nejnizˇsˇı´m porˇa- dovy´m cˇı´slem, a v prˇı´padeˇ, zˇe dva procesy majı´stejne´ porˇadove´cˇı´slo, rozho- duje se mezi nimi podle dalsˇı´ho krite´ria (PID nebo porovna´nı´jmen procesu˚ podle abecedy). shared int poradi[n] = (0,0,...,0); shared int prirazuje[n] = (0,0,...,0); ... prirazuje[i] = 1; poradi[i] = nejvyssi(poradi)+1; prirazuje[i] = 0; for(j=0; j

Algoritmus pracuje takto: v poli poradi ma´kazˇdy´proces cˇekajı´cı´na pro- strˇedek prˇirˇazeno porˇadove´cˇı´slo (pokud o prostrˇedek nezˇa´da´, je zde cˇı´slo 0), v poli prirazuje je u dane´ho procesu cˇı´slo 1, pokud zrovna probı´ha´prˇirˇazo- va´nı´porˇadı´pro tento proces, po provedenı´prˇirˇazenı´ je hodnota vra´cena zpeˇt na 0. Tı´m je zajisˇteˇno, zˇe sice je mozˇne´prˇideˇlit dveˇma procesu˚m stejne´porˇadı´, ale beˇhem tohoto prˇirˇazova´nı´, kdy cˇı´slo nenı´„konzistentnı´“, nenı´zjisˇt’ova´na hodnota tohoto cˇı´sla jiny´m procesem (cˇeka´nı´ while((prirazuje[j]), tedy dokud je dana´hodnota rovna 1). Cˇekajı´cı´proces pak procha´zı´pole poradi, a pokud narazı´na proces, jehozˇ porˇadove´cˇı´slo je mensˇı´(nebo stejne´, ale ma´nizˇsˇı´ PID), pak v pra´zdne´m cyklu ({}) cˇeka´, azˇtento proces ukoncˇı´cˇeka´nı´a zpracuje svou cˇa´st ko´du v kriticke´ sekci. Kdyzˇproces takto projde cele´pole, pak uzˇzˇa´dny´jiny´proces nema´nizˇsˇı´ porˇadove´cˇı´slo (zˇa´dny´z nich uzˇnecˇeka´na tento prostrˇedek), a proto i tento proces mu˚zˇe prove´st ko´d kriticke´sekce. Pak nastavı´sve´ porˇadı´na 0 a tı´m da´ najevo, zˇe uzˇprostrˇedek nepouzˇı´va´. Pekarˇu˚v algoritmus je pouzˇitelny´i pro vı´ceprocesorove´syste´my. Je to jedno- znacˇny´a prˇitom jednoduchy´algoritmus, ktery´zamezuje sta´rnutı´procesu˚. Je pouzˇitelny´naprˇı´klad tehdy, kdyzˇje procesor pla´nova´n metodou FCFS.

4. Hardwarove´rˇesˇenı´ – neˇktere´procesory nabı´zejı´hardwarove´rˇesˇenı´pro aktivnı´ cˇeka´nı´, instrukci TSL (Test and Set Lock), swap nebo XCHG. Vsˇechny tyto in- strukce neˇjaky´m zpu˚sobem prova´deˇjı´vy´meˇnu hodnoty za´mku kriticke´sekce a dane´ promeˇnne´. Pouzˇı´vajı´ se tak, zˇe neusta´le nastavujı´ za´mek na 1 (za- mcˇeno) a zjisˇt’ujı´, jaka´byla pu˚vodnı´hodnota prˇed tı´mto nastavenı´m. Mohou by´t pouzˇity jako soucˇa´st slozˇiteˇjsˇı´ho prostrˇedku aktivnı´ho cˇeka´nı´.

5.5 Synchronizacˇnı´na´stroje operacˇnı´ho syste´mu

Prostrˇedky popsane´vy´sˇe v kap. 5.4 jsou veˇtsˇinou bud’ hardwaroveˇza´visle´nebo se implementujı´na straneˇprocesu, cozˇomezuje mozˇnosti jejich pouzˇitı´. Operacˇnı´ syste´my ve sve´m ja´drˇe obvykle nabı´zejı´komplexneˇjsˇı´synchronizacˇnı´na´stroje do- stupne´pomocı´syste´movy´ch vola´nı´. Jsou to prˇedevsˇı´m tyto na´stroje: • semafory, • mechanismus zpra´v, • monitory, • vola´nı´vzda´lene´procedury (RPC). KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 75

5.5.1 Semafory Semafory povolujı´nebo zabranˇujı´prˇı´stupu do kriticke´sekce. Semafor je obvykle implementova´n strukturou obsahujı´cı´promeˇnnou se stavem semaforu a dalsˇı´pro- meˇnnou pro implementaci fronty procesu˚. Cˇekajı´cı´procesy jsou blokova´ny (suspen- dova´ny) a zarˇazeny do te´to fronty, tedy jde o pasivnı´cˇeka´nı´, ktere´je zajisˇt’ova´no operacˇnı´m syste´mem. Fronta mu˚zˇe by´t klasicka´FIFO nebo s prioritami. Pro rˇesˇenı´ u´loh z kap. 5.3 se pouzˇı´va´jeden nebo vı´ce semaforu˚. Existujı´dva typy semaforu˚– bina´rnı´a obecne´. Semafor je kromeˇinicializacˇnı´funkce obsluhova´n dveˇma funkcemi:

• funkci wait (prˇı´p. down, lock) spousˇtı´proces zˇa´dajı´cı´o vstup do kriticke´ sekce; pokud do kriticke´sekce nelze vstupit, je v ra´mci te´to funkce proces blokova´n (suspendova´n) a zarˇazen do fronty, jinak funkce koncˇı´bez tohoto du˚sledku, • funkci signal (prˇı´p. send, up, unlock) spousˇtı´proces vystupujı´cı´z kriticke´ sekce a slouzˇı´ k vybra´nı´ na´sledujı´cı´ho procesu z fronty a jeho posla´nı´ do kriticke´sekce, tedy ukoncˇı´jeho blokova´nı´a zarˇadı´do fronty prˇipraveny´ch.

Proces nejdrˇı´v zavola´ funkci wait (a prˇı´padneˇ je blokova´n), pak provede ko´d kriticke´sekce a potom zavola´funkci signal povolujı´cı´dalsˇı´mu prostrˇedku prˇı´stup do kriticke´sekce. Posloupnost operacı´pro proces zˇa´dajı´cı´o vstup do kriticke´sekce a dany´semafor je na´sledujı´cı´: ... wait(semafor); KS(); signal(semafor); ... Funkce wait a signal by meˇly by´t atomicke´ (nedeˇlitelne´, neprˇerusˇitelne´), a take´k fronteˇsemaforu by meˇl by´t vy´hradnı´prˇı´stup (prˇi prˇida´va´nı´nebo vybı´ra´nı´ z fronty)1.

1Neprˇerusˇitelnost funkcı´ wait a signal lze jednodusˇe zarˇı´dit na jednoprocesorove´m syste´mu (naprˇı´klad zaka´za´nı´m prˇerusˇenı´beˇhem vykona´va´nı´ko´du funkce), ale ve vı´ceprocesorove´m syste´mu tuto jednoduchou metodu nelze pouzˇı´t. Obvykle se tento proble´m rˇesˇı´oznacˇenı´m teˇchto funkcı´ samotny´ch za kriticke´sekce a jejich softwarovy´m rˇesˇenı´m. Takte´zˇvy´hradnı´prˇı´stup k fronteˇse teˇzˇko rˇesˇı´, a to v prˇı´padeˇ, kdy je fronta dynamicka´. Proto se v takovy´chto prˇı´padech (sdı´lena´pameˇt’) pouzˇı´vajı´spı´sˇe staticke´pameˇt’ove´struktury prˇes rˇadu jejich nevy´hod oproti dynamicky´m. KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 76

Bina´rnı´ semafor ma´ dva stavy: 0 (cˇervena´) pro za´kaz vstupu, 1 (zelena´) pro povolenı´vstupu. V teˇchto stavech se reaguje takto:

0 (cˇervena´): Pokud nynı´neˇktery´proces spustı´funkci wait, je blokova´n a zarˇa- zen do fronty semaforu. Prˇi vola´nı´funkce signal se zkontroluje, zda neˇktery´proces cˇeka´ve fronteˇ. Jestlizˇe ano, je prvnı´cˇekajı´cı´proces zarˇazen do fronty prˇipraveny´ch a tı´m je mu povoleno vstupit do kriticke´sekce, kdyzˇje fronta pra´zdna´, semafor se pouze nastavı´na 1. 1 (zelena´): Na proces volajı´cı´ funkci wait tato funkce nema´ zˇa´dny´ vliv, jen nastavı´semafor na 0. Funkce signal v tomto stavu nenı´vola´na.

Obecny´semafor (promeˇnna´zachycujı´cı´jeho stav, cˇı´tacˇ) mu˚zˇe naby´vat ru˚zny´ch celocˇı´selny´ch hodnot. typedef struct TSemafor { int stav; TFrontaProcesu fronta; } extern struct TSemafor semafor; Z hlediska procesu se obecne´semafory pouzˇı´vajı´stejneˇjako bina´rnı´, vnitrˇneˇ jsou vsˇak implementova´ny jinak a oproti bina´rnı´m semaforu˚m uchova´vajı´dalsˇı´ informace navı´c. Obvykle za´porna´hodnota semaforu urcˇuje, kolik procesu˚cˇeka´ ve fronteˇ, kladna´naopak znamena´, zˇe semafor je „prˇedplacen“, urcˇuje, kolikra´t je mozˇno kolem semaforu projı´t bez cˇeka´nı´. Obecne´semafory se pouzˇı´vajı´ve dvou varianta´ch:

a) cˇı´tacˇnaby´va´hodnot ≥ 0 (neza´porny´ch) – oproti bina´rnı´mu prˇida´va´jen funkci „prˇedplacenı´“. Funkce wait a signal jsou implementova´ny na´sledovneˇ:

• wait prˇi hodnoteˇcˇı´tacˇe semaforu > 0 snı´zˇı´hodnotu cˇı´tacˇe o 1 a ukoncˇı´ se (proces nenı´blokova´n), prˇi hodnoteˇ = 0 zablokuje proces a zarˇadı´ho do fronty. • signal zkontroluje frontu. Kdyzˇje fronta pra´zdna´, zvy´sˇı´cˇı´tacˇ o 1, a kdyzˇ nenı´pra´zdna´(tedy cˇı´tacˇje = 0), odblokuje prvnı´cˇekajı´cı´proces a posˇle ho do fronty prˇipraveny´ch.

b) cˇı´tacˇnaby´va´i za´porny´ch hodnot – funkce wait a signal jsou implemento- va´ny takto: KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 77

• wait snı´zˇı´cˇı´tacˇo 1. Pokud prˇed tı´mto snı´zˇenı´m byl cˇı´tacˇ ≥ 0 (zˇa´dny´ cˇekajı´cı´proces), hned se ukoncˇı´(a proces mu˚zˇe pokracˇovat do kriticke´ sekce), kdyzˇbyl cˇı´tacˇ < 0, zablokuje proces a zarˇadı´ho do fronty. • signal zvy´sˇı´cˇı´tacˇo 1. Pokud byl cˇı´tacˇprˇed zvy´sˇenı´m < 0 (po zvy´sˇenı´ ≤ 0), pak zkontroluje frontu; pokud fronta nenı´pra´zdna´, prvnı´cˇekajı´cı´ proces odblokuje a posˇle do fronty prˇipraveny´ch.

Pouzˇitı´obecny´ch semaforu˚si uka´zˇeme na rˇesˇenı´synchronizacˇnı´u´lohy Producent - konzument s omezeny´m bufferem. Potrˇebujeme dva semafory:

• semafor volne zakazuje producentovi prˇekrocˇit velikost bufferu, iniciujeme ho na pocˇet polozˇek, ktere´se vejdou do sdı´lene´pameˇti (tedy „prˇedplatı´me“), • semafor obsazene zakazuje konzumentovi vybı´rat z bufferu, kdyzˇje zrovna pra´zdny´, iniciujeme ho na 0. Producent: Konzument: do { do { produkuj(data); wait(obsazene); wait(volne); cti(data); zapis(data); signal(volne); signal(obsazene); zpracuj(data); } while(1); } while(1); Dalsˇı´prˇı´klad je rˇesˇenı´m u´lohy Peˇt hladovy´ch filozofu˚. Pro N prostrˇedku˚ma´me N kriticky´ch sekcı´, tedy budeme mı´t pole N semaforu˚. Vsˇechny iniciujeme na 1. Dalsˇı´ semafor bude hlı´dat, aby prostrˇedky vyuzˇı´valo pouze N-1 procesu˚(je inicializova´n na N-1). Na´sledujı´cı´ko´d je pro i-ty´proces: #define N 5 do { mysli(); struct TSemafor sem[N]; wait(S); struct TSemafor S; wait(sem[i]); for(i=0; i

5.5.2 Mechanismus zpra´v Procesy mohou by´t synchronizova´ny take´mechanismem zpra´v. Pod tı´mto pojmem rozumı´me nejen prˇı´me´zası´la´nı´zpra´v (send a receive), ale take´neprˇı´mou komu- nikaci posı´la´nı´zpra´v prˇes porty (sockety). Metoda je vhodna´i pro vı´ceprocesorove´prostrˇedı´vcˇetneˇ synchronizace v ra´mci pocˇı´tacˇove´sı´teˇ. Pak se prˇi adresaci uda´va´take´adresa pocˇı´tacˇe v sı´ti (uzel), protozˇe PID procesu nemusı´by´t v ra´mci sı´teˇjedinecˇne´. Pouzˇı´va´se tedy adresova´nı´prˇı´me´ (uzel.PID) nebo neprˇı´me´(uzel.cˇı´slo portu, IP adresa.cˇı´slo portu, atd.). U neprˇı´me´ho adresova´nı´by´va´port prˇedstavova´n sdı´lenou pameˇtı´– schra´nkou – pevne´nebo promeˇnne´de´lky. Procesy se zpra´vami pracujı´pomocı´funkcı´(syste´movy´ch vola´nı´) obvykle na- zvany´ch send a receive. Prˇi pouzˇitı´prˇı´me´ho adresova´nı´komunikace funguje vy´sˇe popsany´m zpu˚sobem (kap. 4.6), u neprˇı´me´ho adresova´nı´tyto funkce pracujı´ na´sledovneˇ: • funkce send zkontroluje, zda schra´nka nenı´plna´; pokud nenı´plna´, odesı´lajı´cı´ proces posˇle zpra´vu, jinak je proces zablokova´n a zpra´va je posla´na azˇpo jeho odblokova´nı´(po uvolneˇnı´mı´sta ve schra´nce), • funkce receive volana´adresa´tem zkontroluje, zda schra´nka nenı´pra´zdna´; pokud nenı´pra´zdna´, prˇijme zpra´vu, jinak je proces zablokova´n azˇdo doby, kdy je do schra´nky dorucˇena zpra´va, a ta je pak prˇijata. Na´sledujı´cı´prˇı´klad je rˇesˇenı´m u´lohy Producent - konzument pro buffer pevne´ de´lky. Jsou definova´ny dveˇschra´nky: • volne – kdyzˇse producentovi podarˇı´z te´to schra´nky zı´skat zpra´vu, mu˚zˇe produkovat, na zacˇa´tku je cela´naplneˇna zpra´vami informujı´cı´mi o mozˇnosti produkovat, konzument zde zasˇle zpra´vu po kazˇde´m zpracova´nı´polozˇky, • obsazene – zde producent zası´la´zpra´vy s vyprodukovany´mi polozˇkami. #define MAX 20 struct TSchranka volne, obsazene; for(i=0; i

Pokud ma´ schra´nka velikost 0, jde vlastneˇ o variantu prˇı´me´ho adresova´nı´ a tento prˇı´pad se nazy´va´ dostavenı´cˇko (randez-vous). Samotne´vola´nı´funkce send nebo receive zpu˚sobı´zablokova´nı´volajı´cı´ho procesu, proces je odblokova´n azˇ tehdy, kdyzˇje vola´na pa´rova´funkce, tedy azˇkdyzˇjsou vola´ny obeˇfunkce send a receive, mu˚zˇe komunikace probeˇhnout (vza´jemne´cˇeka´nı´). Na´sledujı´cı´ko´d je rˇesˇenı´m u´lohy Producent - konzument bez sdı´lene´pameˇti. Oproti prˇedchozı´m rˇe- sˇenı´m musı´by´t komunikace synchronnı´. Producent: Konzument: do { do { produkuj(data); receive(producent,data); send(konzument,data); zpracuj(data); receive(konzument,ok); send(producent,ok); } while(1); } while(1);

5.5.3 Monitory Monitor je synchronizacˇnı´prostrˇedek na vysˇsˇı´u´rovni. Zapouzdrˇuje v sobeˇskupinu datovy´ch struktur, procesy k nim mohou prˇistupovat pouze prˇes rozhranı´urcˇene´ prˇı´stupovy´mi funkcemi. Funkcı´mu˚zˇe by´t jaky´koliv pocˇet a urcˇujı´ru˚zne´zpu˚soby pra´ce s daty monitoru. Datove´struktury zapouzdrˇene´v monitoru by´vajı´oznacˇova´ny jako podmı´nky. Tyto podmı´nky mohou by´t implementova´ny pomocı´semaforu˚ a semaforove´ope- race wait a signal jsou pouzˇı´va´ny prˇı´stupovy´mi funkcemi monitoru (nikoliv procesy), kazˇda´prˇı´stupova´funkce vyuzˇı´va´jednu nebo vı´ce ru˚zny´ch podmı´nek. Jde o to, aby kazˇda´podmı´nka mohla by´t v jednom okamzˇiku vyuzˇı´va´na pouze jednı´m procesem (jedinou funkcı´). Proto prˇı´stupova´funkce okamzˇiteˇpo sve´m spusˇ- teˇnı´zavola´funkci wait kazˇde´podmı´nky,kterou bude pouzˇı´vat, a tı´m zabrzdı´spusˇ- teˇnı´ktere´koliv dalsˇı´funkce, ktera´by tuto podmı´nku take´chteˇla pouzˇı´vat. Teˇsneˇ prˇed svy´m ukoncˇenı´m pak funkce opeˇt rezervovane´podmı´nky odblokuje jejich funkcemi signal.

5.5.4 RPC RPC (Remote Procedure Call, vola´nı´vzda´lene´procedury) rozumı´me postup, kdy proces vola´proceduru jine´ho procesu. Mu˚zˇe se jednat nejen o vola´nı´procedury (funkce) naprogramovane´v spustitelne´m souboru, ale take´o proceduru (funkci) nacha´zejı´cı´se v knihovneˇ(vcˇetneˇknihoven API rozhranı´operacˇnı´ho syste´mu). KAPITOLA 5 SYNCHRONIZACE PROCESU˚ 80

RPC se obvykle realizuje pomocı´synchronnı´ch zpra´v, kdy zˇa´dajı´cı´proces posˇle procesu - majiteli dotycˇne´ procedury zpra´vu obsahujı´cı´ take´ prˇı´padne´ skutecˇne´ parametry pro danou proceduru a cˇeka´na odpoveˇd’. Druhy´proces obdrzˇı´zpra´vu, vyvola´proceduru a volajı´cı´mu procesu odesˇle zpra´vu s vy´sledkem provedenı´pro- cedury. KAPITOLA 6

Uva´znutı´procesu˚(Deadlock)

K uva´znutı´procesu˚docha´zı´, kdyzˇneˇktery´proces cˇeka´na prostrˇedek, ktery´je prˇideˇlen jiny´m cˇekajı´cı´m procesu˚m. Uva´znutı´je samozrˇejmeˇnezˇa´doucı´, proto je vhodne´ te´to situaci prˇedcha´zet nebo, pokud nastane, ji rˇesˇit co nejsˇetrneˇji vzhledem k syste´mu i procesu˚m.

6.1 Za´kladnı´pojmy

Pokud proces chce pouzˇı´vat prostrˇedek, musı´o tento prostrˇedek nejdrˇı´v pozˇa´dat. Jeho zˇa´dost mu˚zˇe by´t vyplneˇna, a potom je procesu tento prostrˇedek prˇideˇlen, proces ho mu˚zˇe pouzˇı´vat v ra´mci jeho mozˇnostı´a bezpecˇnostnı´ch opatrˇenı´, kdyzˇ uzˇproces tento prostrˇedek nepouzˇı´va´, meˇl by ho uvolnit. Pokud zˇa´dost procesu o prostrˇedek z neˇjake´ho du˚vodu nemu˚zˇe by´t vyplneˇna, proces cˇeka´ na prostrˇedek. Prostrˇedky rozdeˇlı´me do trˇı´d, v jedne´trˇı´deˇmohou by´t pouze prostrˇedky navza´- jem zameˇnitelne´, tedy proces bude vzˇdy zˇa´dat prostrˇedek z urcˇite´trˇı´dy a mu˚zˇe mu by´t jedno, ktery´konkre´tnı´prostrˇedek z te´to trˇı´dy dostane. Konkre´tnı´prostrˇedky z urcˇite´trˇı´dy budeme nazy´vat instance. Naprˇı´klad trˇı´da operacˇnı´pameˇt’ ma´jako instance jednotlive´bloky (stra´nky, seg- menty) pameˇti, trˇı´da tiska´rny obsahuje ru˚zne´tiska´rny, ktere´jsou v „rozumne´“ vzda´- lenosti od dane´ho uzˇivatele a tedy zameˇnitelne´, trˇı´deˇ cˇas CPU prˇı´slusˇejı´jako instance cˇasove´cykly procesoru, ktere´mohou by´t procesu˚m prˇideˇlova´ny, . . . Mnozˇina procesu˚je ve stavu uva´znutı´, pokud kazˇdy´proces v te´to mnozˇineˇcˇeka´ na uda´lost, kterou mu˚zˇe vyvolat pouze neˇktery´z procesu˚v te´zˇe mnozˇineˇ. Jedna´se

81 KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 82 zde prˇedevsˇı´m o uda´lost uvolneˇnı´prostrˇedku pouzˇı´vane´ho neˇktery´m procesem, prˇı´padneˇneˇktere´typy komunikace (cˇeka´nı´na potvrzenı´ zpra´vy). Proble´m uva´znutı´se rˇesˇı´bud’ neˇkterou metodou prˇedcha´zenı´uva´znutı´nebo prˇedpovı´da´nı´ uva´znutı´, nebo se nerˇesˇı´ vu˚bec a nanejvy´sˇ jsou implementova´ny postupy zjisˇteˇnı´uva´znutı´.

6.2 Popis stavu prˇideˇlenı´prostrˇedku˚

Stav prˇideˇlenı´prostrˇedku˚lze popsat grafem prˇideˇlenı´prostrˇedku˚. Je to orientovany´ graf, jehozˇvrcholy jsou dvojı´ho druhu:

• procesy – kazˇdy´proces syste´mu ma´zde svu˚j vrchol, tyto vrcholy majı´tvar kruhovy´, • prostrˇedky – kazˇda´ trˇı´da prostrˇedku˚ ma´ zde svu˚j vrchol tvaru obde´lnı´ku, v neˇm je pro kazˇdou instanci trˇı´dy (tj. konkre´tnı´prostrˇedek) jedna tecˇka.

Orientovane´hrany jsou take´dvojı´ho druhu:

• hrana zˇa´dosti o prostrˇedek vede od procesu, ktery´zˇa´da´o prostrˇedek, k vr- cholu trˇı´dy prostrˇedku, o ktery´zˇa´da´, • hrana prˇideˇlenı´prostrˇedku vede od instance trˇı´dy prostrˇedku (tedy od tecˇky ve vrcholu trˇı´dy) k procesu, ktere´mu byl prostrˇedek prˇideˇlen.

Prˇı´klad: V syste´mu jsou procesy P1, P2 a P3 a prostrˇedky R1 se dveˇma instancemi, R2 s jednou instancı´ a R3 se cˇtyrˇmi instancemi. Proces P1 ma´ prˇideˇlenu jednu instanci prostrˇedku R1 a zˇa´da´o prostrˇedek R2, proces P2 ma´prˇideˇleny dveˇinstance prostrˇedku R3 a zˇa´da´ o prostrˇedek R1, proces P3 ma´ prˇideˇlenu jednu instanci prostrˇedku R1 a jednu instanci prostrˇedku R2 a momenta´lneˇnezˇa´da´o zˇa´dne´dalsˇı´ prostrˇedky. Co z grafu na obra´zku 6.1 mu˚zˇeme vycˇı´st? Pokud v grafu nenı´ zˇa´dna´kruzˇ- nice, zˇa´dny´proces nenı´blokova´n cˇeka´nı´m na prostrˇedek. Jestlizˇe je v grafu neˇjaka´ kruzˇnice, mu˚zˇe, ale nemusı´dojı´t k uva´znutı´. K uva´znutı´v prˇı´padeˇkruzˇnice dojde, pokud kazˇda´trˇı´da prostrˇedku˚na kruzˇnici ma´pra´veˇjednu instanci. V grafu nenı´zˇa´dna´kruzˇnice, proto zˇa´dny´proces neuva´zl. Kdyby prostrˇedek trˇı´dy R2 byl prˇideˇlen procesu P2 mı´sto procesu P3, v grafu by byla kruzˇnice P1 → R2 → P2 → R1 → P1, ale nedosˇlo by k uva´znutı´, protozˇe azˇproces P3 nebude potrˇebovat prˇideˇlenou instanci prostrˇedku R1, uvolnı´ji a tato instance mu˚zˇe by´t prˇideˇlena procesu P2, ktery´o tento prostrˇedek zˇa´da´, a tı´m je kruzˇnice odstraneˇna KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 83

   P1 P2 P3 3 So  6 @  SoS S    @  SS @ S S @   S S @  S S @  S S  @ S S  @ ©  @R S S  S S R1 R2 R3 r r r rrrr Obra´zek 6.1: Graf prˇideˇlenı´prostrˇedku˚

(hrana zˇa´dosti o prostrˇedek se zmeˇnı´ na hranu prˇideˇlenı´ prostrˇedku, ktera´ ma´ opacˇnou orientaci). Kdyby ale prˇi situaci v grafu na obra´zku 6.1 proces P3 pozˇa´dal o dalsˇı´prostrˇedek R1, vznikla´kruzˇnice by znamenala uva´znutı´, protozˇe vsˇechny instance prostrˇedku˚ patrˇı´cı´ch do kruzˇnice drzˇı´pra´veˇuva´zle´procesy P1 a P3, zˇa´dny´z nich nemu˚zˇe by´t uvolneˇn.

6.3 Podmı´nky vzniku uva´znutı´

K uva´znutı´dojde, pokud jsou splneˇny vsˇechny na´sledujı´cı´ podmı´nky:

1. Existence prostrˇedku˚, ktere´nelze sdı´let (prostrˇedku˚ , ktere´v jednom okamzˇiku mu˚zˇe pouzˇı´vat nejvy´sˇe jeden proces).

2. Existuje alesponˇjeden proces, ktery´ma´prˇideˇlen neˇjaky´prostrˇedek a cˇeka´na prˇideˇlenı´jine´ho prostrˇedku, ktery´je prˇideˇlen jine´mu procesu.

3. Prˇi spra´veˇprostrˇedku˚je pouzˇı´va´no nepreemptivnı´ pla´nova´nı´, tedy k uvolneˇnı´ prˇideˇleny´ch prostrˇedku˚docha´zı´pouze ze strany procesu˚, prostrˇedky nejsou „na´silneˇ“ odebı´ra´ny.

4. Dojde ke kruhove´mu cˇeka´nı´, tedy existuje takova´posloupnost ru˚zny´ch procesu˚ P0, P1,...,Pn, Pn+1, zˇe kazˇdy´proces Pi cˇeka´na prostrˇedek prˇideˇleny´procesu Pi+1 v te´to posloupnosti, 0 ≤ i ≤ n), Pn+1 = P0 (jiny´mi slovy: kazˇdy´proces cˇeka´, azˇten, ktery´je v posloupnosti za nı´m, uvolnı´urcˇity´prostrˇedek, poslednı´ je totozˇny´s prvnı´m). KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 84

6.4 Prevence uva´znutı´

U´ cˇelem je zajistit, aby nemohla nastat neˇktera´z podmı´nek vzniku uva´znutı´(stacˇı´, kdyzˇ nemu˚zˇe nastat jedna z nich, protozˇe k uva´znutı´ dojde pouze tehdy, kdyzˇ nastanou vsˇechny za´rovenˇ). Postupneˇprobereme jednotlive´ podmı´nky.

Prostrˇedky, ktere´nelze sdı´let: Cˇa´stecˇny´m rˇesˇenı´m je vytvorˇenı´rozhranı´k pro- strˇedku, ktere´prˇevezme u´koly procesu˚, ktere´by jinak musely o prostrˇedek zˇa´dat. Toto rˇesˇenı´mu˚zˇeme pouzˇı´t naprˇı´klad u tiska´rny, kdy vytvorˇı´me specia´lnı´obsluzˇny´ proces, ktery´bude obsluhovat tiskovou frontu tiska´rny – prˇijme od procesu data, ktera´majı´by´t vytisknuta, zarˇadı´do fronty a pak postupneˇtiska´rneˇposı´la´data v da´vka´ch se stanovenou strukturou a de´lkou. Obecneˇvsˇak tento proble´m nelze rˇesˇit, u neˇktery´ch typu˚prostrˇedku˚neexistuje mozˇnost takove´rozhranı´vytvorˇit.

Proces ma´prˇideˇlen prostrˇedek a cˇeka´na jiny´: Tento proble´m lze rˇesˇit dveˇma zpu˚soby, kazˇdy´z nich je pouzˇitelny´pro jiny´typ prostrˇedku˚:

1. Prˇed vlastnı´m spusˇteˇnı´m procesu mu budou prˇideˇleny vsˇechny prostrˇedky, ktere´by mohl potrˇebovat (pouzˇije se pro prostrˇedky,ktere´lze sdı´let, naprˇı´klad pameˇt’).

2. Umozˇnı´me procesu zˇa´dat o dalsˇı´prostrˇedky azˇkdyzˇ uvolnı´vsˇechny pro- strˇedky, ktere´ meˇl prˇideˇlene´ (musı´ uvolnit vsˇechny prostrˇedky, ktere´ byly prˇideˇleny postupem z tohoto bodu).

Pro kazˇdou trˇı´du prostrˇedku˚se bude pouzˇı´vat jeden z teˇchto dvou zpu˚sobu˚ rˇesˇenı´. Hlavnı´nevy´hodou te´to metody je, zˇe prostrˇedky prˇideˇlene´podle prvnı´ho bodu mohou by´t zbytecˇneˇma´lo vyuzˇı´va´ny (naprˇı´klad cˇas procesoru u procesu, ktery´je interaktivnı´, tedy cˇasto cˇeka´na reakci uzˇivatele), je take´velka´pravdeˇpodobnost sta´rnutı´neˇktery´ch procesu˚(proces cˇeka´na prostrˇedek, ktery´je neusta´le prˇideˇlova´n jiny´m procesu˚m, ktere´naprˇı´klad majı´vysˇsˇı´prioritu).

Nepreemptivnı´pla´nova´nı´: Rˇ esˇenı´m je vyuzˇitı´neˇktery´ch prvku˚preemptivnı´ho pla´nova´nı´(tedy pouzˇijeme mozˇnost odebrat prostrˇedek procesu, trˇebazˇe tento pro- ces by jesˇteˇpotrˇeboval prostrˇedek pouzˇı´vat). Symbolicky mu˚zˇeme postup zapsat takto (oznacˇı´me R, S prostrˇedky a P, Q procesy, proces P zˇa´da´o prostrˇedek R): KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 85

IF (volnyÂ(R)) {prÏideÏl(P,R)} ELSE IF (EXIST Q:(pouzÏõÂvaÂ(Q,R)AND EXIST S:(cÏekaÂ(Q,S)) {uvolni(R), prÏideÏl(P,R)} Slovneˇ: pokud prostrˇedek, o ktery´proces zˇa´da´, je volny´, prˇideˇlı´me mu ho, ale pokud ne, zjistı´me, ktery´proces tento prostrˇedek ma´prˇideˇlen a prˇitom cˇeka´na prˇideleˇnı´ jine´ho prostrˇedku. Pokud takovy´ proces (Q) najdeme, odebereme mu prostrˇedek (prˇedpokla´dejme, zˇe o tento prostrˇedek mu˚zˇe znovu pozˇa´dat, azˇho bude potrˇebovat), a prˇideˇlı´me ho zˇa´dajı´cı´mu procesu P. Kdyzˇnenajdeme zˇa´dny´ proces Q, ktere´mu bychom mohli „zabavit“ zˇa´dany´ prostrˇedek, proces P bude muset pocˇkat. Tato metoda je opeˇt vhodna´pouze pro neˇktere´trˇı´dy prostrˇedku˚, a to pro ta- kove´, ktere´lze odebrat bez nebezpecˇı´posˇkozenı´dosavadnı´cˇinnosti procesu – bud’ prˇerusˇenı´jejich pouzˇı´va´nı´nema´vliv na cˇinnost procesu a nava´za´nı´cˇinnosti po opeˇtovne´m prˇideˇlenı´nenı´proble´m, nebo lze stav pouzˇı´va´nı´prostrˇedku snadno zaznamenat a po znovuprˇideˇlenı´pomocı´tohoto za´znamu nava´zat (naprˇı´klad cˇas procesoru nebo pameˇt’prˇi pouzˇitı´stra´nkova´nı´).

Kruhove´cˇeka´nı´: Vytvorˇı´me posloupnost trˇı´d prostrˇedku˚s prˇesneˇstanoveny´m porˇadı´m, kazˇdy´proces mu˚zˇe zˇa´dat pouze o takove´prostrˇedky, ktere´jsou v po- sloupnosti azˇza teˇmi, ktere´jizˇma´prˇideˇlene´. Pokud chce proces pozˇa´dat o prostrˇedek trˇı´dy, ktera´ je v posloupnosti prˇed neˇktery´m prostrˇedkem, ktery´jizˇma´prˇideˇlen, musı´uvolnit vsˇechny prostrˇedky, ktere´by ten zˇa´dany´mohly v posloupnosti na´sledovat. Zˇ a´dosti o prostrˇedky z te´zˇe trˇı´dy musı´by´t sdruzˇeny, tedy jestlizˇe proces „sˇpatneˇ odhadl“ mnozˇstvı´ prostrˇedku˚ z jedne´ trˇı´dy, ktere´ bude potrˇebovat k rˇa´dne´mu dokoncˇenı´sve´cˇinnosti, prˇed dalsˇı´zˇa´dostı´o dostatecˇne´mnozˇstvı´prostrˇedku˚te´to trˇı´dy musı´to, co jizˇmeˇl prˇideˇleno, uvolnit. Naprˇı´klad ma´me posloupnost R = (R1,R2,...,Rn) trˇı´d prostrˇedku˚. Proces ma´ prˇideˇleny prostrˇedky trˇı´d R1,R3 a R8. Bez proble´mu˚mu˚zˇe pozˇa´dat o prostrˇedky z trˇı´d R9,R10,..., ale pokud bude chtı´t pozˇa´dat o prostrˇedek z trˇı´dy R2, musı´uvolnit prˇideˇlene´prostrˇedky z trˇı´d R3 a R8. Jestlizˇe chce pozˇa´dat o dalsˇı´prostrˇedky trˇı´dy R3, musı´uvolnit nejen prostrˇedky trˇı´dy R8, ale i trˇı´dy R3. Efektivnost te´to metody je do znacˇne´mı´ry da´na porˇadı´m trˇı´d prostrˇedku˚v po- sloupnosti. Pokud je porˇadı´sˇpatneˇnavrzˇeno, procesy te´meˇrˇneusta´le cˇekajı´a mu˚zˇe docha´zet k jejich sta´rnutı´. Porˇadı´je vhodne´navrhovat prˇedevsˇı´m s ohledem na obvykle´porˇadı´vyuzˇı´va´nı´zdroju˚, naprˇı´klad vneˇjsˇı´pameˇti (obecneˇvstupnı´peri- KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 86 ferie) by meˇly by´t v posloupnosti prˇed obvykly´mi vy´stupnı´mi periferiemi vcˇetneˇ tiska´rny.

6.5 Prˇedpovı´da´nı´uva´znutı´

Prˇi pouzˇitı´tohoto postupu nejsou procesy nuceny (obvykle) prˇedcˇasneˇuvolnˇovat prˇideˇlene´prostrˇedky, ale principem je spra´vneˇodhadnout, kdy by prˇideˇlenı´dalsˇı´ch prostrˇedku˚mohlo zpu˚sobit uva´znutı´a takove´prˇideˇlenı´ pozdrzˇet. Stav syste´mu je bezpecˇny´, jestlizˇe existuje alesponˇjedno porˇadı´prˇideˇlova´nı´ pro- strˇedku˚, prˇi ktere´m vsˇechny procesy mohou u´speˇsˇneˇdokoncˇit svou cˇinnost bez uva´znutı´. Stav, ktery´nenı´bezpecˇny´, jesˇteˇnemusı´znamenat uva´znutı´, ale mu˚zˇe k neˇmu ve´st. Prvnı´mozˇne´rˇesˇenı´je pouzˇitelne´pro syste´m, kde kazˇda´trˇı´da prostrˇedku˚ma´ pra´veˇjednu instanci (vyuzˇı´va´me graf prˇideˇlenı´prostrˇedku˚), druhe´je o neˇco na´rocˇ- neˇjsˇı´, ale je pouzˇitelne´i pro syste´m, kde trˇı´dy mohou mı´t vı´ce nezˇjednu instanci. Prvnı´rˇesˇenı´je postaveno na pouzˇitı´grafu prˇideˇlenı´ prostrˇedku˚, druhe´, Banke´rˇu˚v algoritmus, na simulaci ru˚zny´ch porˇadı´prˇideˇlova´nı´zdroju˚.

6.5.1 Graf na´roku˚a prˇideˇlenı´prostrˇedku˚ Vytvorˇı´me graf na´roku˚a prˇideˇlenı´prostrˇedku˚ u´pravou grafu prˇideˇlenı´prostrˇedku˚. Prˇida´me novy´typ hrany, budeme mı´t tedy celkem trˇi typy hran:

• hrana zˇa´dosti o prostrˇedek vede od procesu, ktery´zˇa´da´o prostrˇedek, k vr- cholu trˇı´dy prostrˇedku, o ktery´zˇa´da´, • hrana prˇideˇlenı´prostrˇedku vede od prostrˇedku k procesu, ktere´mu byl pro- strˇedek prˇideˇlen, • hrana na´roku vede od procesu k prostrˇedku, znamena´, zˇe proces mu˚zˇe pozˇa´- dat o tento prostrˇedek.

Abychom hrany na´roku odlisˇili od hran zˇa´dosti, budeme je znacˇit tecˇkovaneˇ. Hrany na´roku pro urcˇity´proces vznikajı´prˇi spusˇteˇnı´tohoto procesu, pokud proces pozˇa´da´o prostrˇedek, ke ktere´mu od neˇho vede hrana na´roku (nemu˚zˇe po- zˇa´dat o prostrˇedek, ke ktere´mu hrana na´roku nevede), tato hrana se zmeˇnı´na hranu zˇa´dosti o prostrˇedek, v prˇı´padeˇprˇideˇlenı´prostrˇedku se meˇnı´na hranu prˇideˇlenı´ prostrˇedku (meˇnı´se orientace hrany) a po uvolneˇnı´se opeˇt meˇnı´na hranu na´roku (znovu zmeˇna orientace). KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 87

Hrana zˇa´dosti o prostrˇedek se mu˚zˇe zmeˇnit na hranu prˇideˇlenı´ prostrˇedku (a tedy prostrˇedek je prˇideˇlen) pouze tehdy, kdyzˇse touto zmeˇnou nevytvorˇı´kruzˇ- nice – zmeˇna totizˇznamena´zmeˇnu orientace hrany. Algoritmus tedy pouze „simu- luje“ zmeˇnu orientace hrany a spustı´postup detekce kruzˇnice v grafu. Na obra´zku 6.2 je zna´zorneˇn stav syste´mu se dveˇma procesy a trˇemi ru˚zny´mi prostrˇedky. Prvnı´proces nema´prˇideˇleny zˇa´dne´prostrˇedky, ale zˇa´da´o prostrˇedek R2, ma´na´rok pozˇa´dat o prostrˇedek R1. Druhy´proces ma´prˇideˇleny prostrˇedky R2 a R3, ma´na´rok pozˇa´dat o prostrˇedek R1. V grafu nenı´zˇa´dna´kruzˇnice.

  P1 P2

@ 6@I@ @ @ @ @ @ @ @ @ ? © @@R @

R1 R2 R3

Obra´zek 6.2: Graf na´roku˚a prˇideˇlenı´prostrˇedku˚

Kdyzˇ proces P1 pozˇa´da´ o prostrˇedek R1 a ten je tomuto procesu prˇideˇlen, vznikne v grafu kruzˇnice P1 → R2 → P2 → R1 → P1, cozˇznamena´nebezpecˇny´ stav. Kdyby v tomto nebezpecˇne´m stavu pozˇa´dal proces P2 o prostrˇedek R1, dosˇlo by k uva´znutı´, proto je nutne´nedopustit ani vznik kruzˇnice.

6.5.2 Banke´rˇu˚v algoritmus Prˇi pouzˇitı´ tohoto algoritmu musı´ syste´m evidovat informace, ktere´ mu budou poma´hat prˇi rozhodova´nı´, zda prostrˇedek prˇideˇlit. Kazˇdy´ proces musı´ prˇedem ozna´mit, kolik ktery´ch prostrˇedku˚maxima´lneˇbude pro svou cˇinnost potrˇebovat. Kdykoliv pak takovy´proces zˇa´da´o prostrˇedky, syste´m zjistı´, kolik by jesˇteˇostatnı´ procesy mohly potrˇebovat, a pokud dospeˇje k na´zoru, zˇe prˇideˇlenı´zˇa´dany´ch pro- strˇedku˚nepovede do nebezpecˇne´ho stavu, prˇideˇlı´je. Prˇedpokla´dejme, zˇe v syste´mu pracuje n procesu˚a je k dispozici m ru˚zny´ch trˇı´d prostrˇedku˚. Potrˇebujeme na´sledujı´cı´datove´struktury:

VOLNE – vektor o de´lce m, je v neˇm pro kazˇdy´prostrˇedek ulozˇen pocˇet neprˇideˇle- ny´ch instancı´, KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 88

PRIDELENO – matice s n rˇa´dky a m sloupci urcˇujı´cı´, kolik prostrˇedku˚ma´ktery´ proces prˇideˇleno, budeme cha´pat jako vektor vektoru˚o de´lce m, kde kazˇdy´ vektor prˇı´slusˇı´jednomu procesu (tedy prostrˇedky prˇideˇlene´procesu Pi jsou ve vektoru PRIDELENO[i]), POTREBUJE – matice s n rˇa´dky a m sloupci urcˇujı´cı´, kolik prostrˇedku˚bude ktery´ proces jesˇteˇpotrˇebovat k dokoncˇenı´sve´cˇinnosti, tedy po secˇtenı´dvou matic PRIDELENO + POTREBUJE dostaneme matici obsahujı´cı´u´daj o tom, kolik ktery´ch prostrˇedku˚urcˇity´proces maxima´lneˇpotrˇebuje pro svou cˇinnost od spusˇteˇnı´azˇpo ukoncˇenı´procesu (pro proces Pi je to vektor POTREBUJE[i]), POZADAVKY – matice s n rˇa´dky a m sloupci pozˇadavku˚jednotlivy´ch procesu˚o pro- strˇedky, pokud jsou pozˇadavky procesu vyplneˇny, data se prˇicˇtou k prˇı´slusˇ- ne´mu rˇa´dku matice PRIDELENO.

Po spusˇteˇnı´procesu je prˇı´slusˇny´rˇa´dek matice POTREBUJE naplneˇn u´daji o tom, kolik ktere´ho prostrˇedku maxima´lneˇ bude moci proces pozˇadovat. Prˇi kazˇde´m prˇideˇlenı´prostrˇedku je prˇideˇleny´pocˇet instancı´prˇesunut z matice POTREBUJE do matice PRIDELENO, tedy proces postupneˇspotrˇebova´va´prˇideˇlene´prostrˇedky. Da´le budeme pro zjednodusˇenı´za´pisu pouzˇı´vat relaci ≤ pro vektory defino- vanou takto: necht’ V 1 a V 2 jsou vektory o de´lce m. V 1 ≤ V 2 pra´veˇtehdy kdyzˇ ∀i(V 1[i] ≤ V 2[i]), 1 ≤ i ≤ m. Slovy: prvnı´vektor je mensˇı´nebo roven druhe´mu, jestlizˇe vsˇechny jeho prvky jsou mensˇı´nebo rovny prvku˚ m se stejny´m indexem druhe´ho vektoru. Kdyzˇproces Pi zˇa´da´o prˇideˇlenı´prostrˇedku, provede se tento algoritmus:

1. Pozˇadavek procesu je prˇida´n do i-te´ho rˇa´dku matice POZADAVKY (je prˇida´n do vektoru POZADAVKY[i]).

2. Jestlizˇe POZADAVKY[i] ≤POTREBUJE[i], pokracˇuj bodem 3, jinak odmı´tni prˇi- deˇlit prostrˇedek (proces svy´m pozˇadavkem prˇekrocˇil maximum prostrˇedku˚, ktere´ohla´sil prˇi sve´m spusˇteˇnı´).

3. Jestlizˇe POZADAVKY[i] ≤VOLNE, pokracˇuj bodem 4, jinak dej procesu Pi na veˇdomı´, zˇe bude cˇekat (proces zˇa´da´o vı´c, nezˇkolik je momenta´lneˇk dispozici, proces musı´pocˇkat, azˇneˇktery´dalsˇı´proces uvolnı´prostrˇedky).

4. Simuluj prˇideˇlenı´prostrˇedku˚: VOLNE=VOLNE−POZADAVKY[i] PRIDELENO[i]=PRIDELENO[i]+POZADAVKY[i] POTREBUJE[i]=POTREBUJE[i]−POZADAVKY[i] KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 89

5. Vytvorˇ pomocne´ datove´ struktury, ktere´ budou slouzˇit k simulaci dalsˇı´ho pru˚beˇhu stavu syste´mu v prˇı´padeˇ, zˇe prostrˇedky budou prˇideˇleny:

SIMVOLNE – vektor, ve ktere´m jsou prˇi simulaci stejna´data, jako v prˇı´padeˇ skutecˇne´ho pru˚beˇhu ve vektoru VOLNE, tento vektor inicializujeme hod- notami vektoru VOLNE, tedy SIMVOLNE=VOLNE, KONEC – vektor o n prvcı´ch, ktere´jsou inicializova´ny na false, pokud v pru˚- beˇhu simulace proces Pj bezpecˇneˇukoncˇı´svou cˇinnost, j-ty´prvek tohoto vektoru se nastavı´na true.

6. Najdi index j, pro ktery´platı´obeˇna´sledujı´cı´podmı´nky:

(a) KONEC[j]= false ...... jesˇteˇpracuje(neskoncˇil) (b) POTREBUJE[j] ≤SIMVOLNE . . nebude potrˇebovat vı´c nezˇje k dispozici

Jestli takovy´index neexistuje, pokracˇuj bodem 8, jinak pokracˇuj bodem 7.

7. Proved’ na´sledujı´cı´operace:

SIMVOLNE=SIMVOLNE+PRIDELENO[j]

...... „uvolnı´me“ prostrˇedky prˇideˇlene´procesu Pj KONEC[j]= true ...... „ukoncˇı´me“proces Pj Pokracˇuj bodem 6.

8. Jestlizˇe vektor KONEC obsahuje pouze hodnoty true, potom prˇi simulaci ne- dosˇlo k zablokova´nı´a vsˇechny procesy doka´zaly bez proble´mu˚ukoncˇit svou cˇinnost, syste´m je v bezpecˇne´m stavu, v opacˇne´m prˇı´padeˇ (alesponˇ jedna hodnota false) by se syste´m po prˇideˇlenı´pozˇadovany´ch prostrˇedku˚procesu Pi dostal do nebezpecˇne´ho stavu.

Jestlizˇe po simulaci stav bezpecˇny´, syste´m prˇideˇlı´pozˇadovane´prostrˇedky pro- cesu Pi (vlastneˇto uzˇudeˇlal v bodu 4), jinak proces musı´cˇekat, nezˇbude zase dostatek prostrˇedku˚a je nutne´vra´tit zmeˇny z bodu 4 (vektor POZADAVKY[i] bude nada´le obsahovat nevyplneˇne´pozˇadavky procesu).

6.6 Detekce uva´znutı´

Opeˇt rozlisˇı´me dva prˇı´pady: prvnı´metoda je urcˇena pro syste´m, kde v kazˇde´trˇı´deˇ prostrˇedku˚je pra´veˇjeden prostrˇedek, druha´metoda pro syste´m, kde je ve trˇı´da´ch prostrˇedku˚povoleno i vı´ce instancı´. KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 90

6.6.1 U´ prava grafu prˇideˇlenı´prostrˇedku˚ Vytvorˇı´me graf cˇeka´nı´, ve ktere´m bude zachyceno vza´jemne´cˇeka´nı´mezi procesy (jeden proces cˇeka´, azˇjiny´uvolnı´neˇjaky´prostrˇedek). Protozˇe na´s momenta´lneˇza- jı´ma´jen to, ktery´proces uva´zl, nepotrˇebujeme informaci o tom, na ktere´prostrˇedky ktere´procesy cˇekajı´(snadneˇji se detekuje kruzˇnice). Graf cˇeka´nı´zı´ska´me z grafu prˇideˇlenı´zdroju˚tak, zˇe odstranı´me vsˇechny uzly odpovı´dajı´cı´prostrˇedku˚m a necha´me hrany,ktere´do nich a z nich vedly,zkolabovat (tedy hrana, ktera´vedla od procesu k prostrˇedku, se prˇesmeˇruje na vsˇechny uzly – procesy, ke ktery´m vedly hrany prˇideˇlenı´prostrˇedku).

  P1 P2

6@ 6 @ @  -  @ P1 P2 @ @@R  

R1 R2

Obra´zek 6.3: Graf prˇideˇlenı´prostrˇedku˚a ekvivalentnı´ graf cˇeka´nı´

Na obra´zku 6.3 je uka´zka vytvorˇenı´grafu cˇeka´nı´pro graf prˇideˇlenı´prostrˇedku˚. Je to obdoba grafu na´roku˚prostrˇedku˚na obra´zku 6.2 ze strany 87 bez prostrˇedku R3, ktery´nema´vliv na uva´znutı´, s prˇideˇlenı´m pozˇadovane´ho prostrˇedku R1 procesu P1. V grafu cˇeka´nı´nenı´kruzˇnice, proto bude tento prostrˇedek prˇideˇlen. Kdyby byl pouzˇı´va´n postup prˇedpovı´da´nı´uva´znutı´, k prˇideˇlenı´by nedosˇlo, tady vsˇak neprova´dı´me predikci, ale pouze detekci jizˇexistujı´cı´ho uva´znutı´. Na obra´zku 6.4 je v grafu prˇideˇlenı´prostrˇedku˚stav, kdy proces P2 zˇa´da´o prˇi- deˇlenı´prostrˇedku R1, a ekvivalentnı´graf cˇeka´nı´. V obou grafech je kruzˇnice, v tom druhe´m je sna´ze zjistitelna´(ma´me me´neˇuzlu˚v grafu), detekovali jsme uva´znutı´ syste´mu.

6.6.2 U´ prava Banke´rˇova algoritmu Banke´rˇu˚v algoritmus slouzˇı´ k prˇedvı´da´nı´ uva´znutı´, pro detekci stacˇı´ jeho zjed- nodusˇenı´. Budeme pouzˇı´vat na´sledujı´cı´datove´struktury definovane´stejneˇjako u Banke´rˇova algoritmu: KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 91

  P1 P2

6@ 6 @ @  R  @ P1 P2 @ I © @@R  

R1 R2

Obra´zek 6.4: Graf prˇideˇlenı´prostrˇedku˚a ekvivalentnı´ graf cˇeka´nı´

• VOLNE • PRIDELENE • POZADAVKY

Algoritmus pro zjisˇteˇnı´uva´znutı´je na´sledujı´cı´:

1. Vytvorˇ pomocne´ datove´ struktury, ktere´ budou slouzˇit k simulaci dalsˇı´ho pru˚beˇhu stavu syste´mu v prˇı´padeˇ, zˇe prostrˇedky budou prˇideˇleny:

SIMVOLNE – inicializujeme hodnotami vektoru VOLNE, SIMVOLNE=VOLNE, KONEC – vektor o n prvcı´ch, ktere´jsou inicializova´ny na false.

2. Najdi index j, pro ktery´platı´obeˇna´sledujı´cı´podmı´nky:

(a) KONEC[j]= false ...... jesˇteˇpracuje(neskoncˇil) (b) POZADAVKY[j] ≤SIMVOLNE ...... nezˇa´da´vı´c nezˇje k dispozici

Jestli takovy´index neexistuje, pokracˇuj bodem 4, jinak pokracˇuj bodem 3.

3. Proved’ na´sledujı´cı´operace:

SIMVOLNE=SIMVOLNE+PRIDELENO[j]

...... „uvolnı´me“ prostrˇedky prˇideˇlene´procesu Pj KONEC[j]= true ...... „ukoncˇı´me“proces Pj Pokracˇuj bodem 2.

4. Jestlizˇe vektor KONEC obsahuje pouze hodnoty true, potom nedosˇlo k uva´z- nutı´, v opacˇne´m prˇı´padeˇ(alesponˇjedna hodnota false) dosˇlo k uva´znutı´, a to teˇch procesu˚, pro jejichzˇindex je hodnota ve vektoru KONEC rovna false. KAPITOLA 6 UVA´ ZNUTI´ PROCESU˚ (DEADLOCK) 92

6.7 Reakce prˇi zjisˇteˇnı´zablokova´nı´

Neˇktery´m z algoritmu˚z prˇedchozı´kapitoly bylo zjisˇteˇno uva´znutı´a vı´me take´, ktere´procesy uva´zly (v prˇı´padeˇprvnı´ho algoritmu jsou to procesy na detekovane´ kruzˇnici, u druhe´ho algoritmu procesy, jejichzˇindex ve vektoru KONEC je nastaven na false). Dalsˇı´reakce za´visı´na tom, zda s prostrˇedky pracujeme preemptivneˇnebo nepreemptivneˇ. Prˇi preemptivnı´pra´ci s prostrˇedky postupneˇuvolnˇujeme prostrˇedky, ktere´majı´ prˇideˇleny uva´znute´procesy, a prˇideˇlujeme je jiny´m procesu˚m tak dlouho, dokud se neodstranı´ uva´znutı´. Klı´cˇovy´ je „vy´beˇr obeˇti“, tedy procesu˚, ktery´m budou prostrˇedky postupneˇ odebı´ra´ny, meˇlo by by´t take´ zajisˇteˇno, aby po odstraneˇnı´ uva´znutı´ tyto procesy mohly postupneˇ prostrˇedky opeˇt dosta´vat a ukoncˇit tak svou pra´ci. Pokud nepouzˇı´va´me nepreemptivnı´pla´nova´nı´, jediny´m rˇesˇenı´m je ukoncˇovat procesy tak dlouho, dokud existuje uva´znutı´, prˇi takove´m na´silne´m ukoncˇenı´pro- cesu jsou jeho prostrˇedky uvolneˇny a prˇideˇleny jiny´m procesu˚m. Opeˇt je du˚lezˇite´, jak vybı´ra´me „obeˇt’“, protozˇe na´silneˇukoncˇeny´proces samozrˇejmeˇnemu˚zˇe dokon- cˇit svou pra´ci. Existujı´procesy, ktere´takto mu˚zˇeme ukoncˇit a pak restartovat bez nebezpecˇı´ztra´ty dat nebo nekonzistence dat cˇi stavu syste´mu, u jiny´ch bohuzˇel toto nebezpecˇı´je. KAPITOLA 7

Spra´va periferiı´

Periferie se take´nazy´vajı´vstupneˇ-vy´stupnı´zarˇı´zenı´(V/V zarˇı´zenı´, I/O zarˇı´zenı´). V te´to kapitole se nejdrˇı´v podı´va´me strukturu I/O syste´mu, druhy periferiı´, ovladacˇe a potom se budeme kra´tce veˇnovat problematice nı´zkou´rovnˇove´ho prˇı´stupu k periferiı´m pomocı´prˇeru- sˇenı´.

7.1 I/O syste´m

Obvykla´struktura I/O syste´mu je ve veˇtsˇineˇmodernı´ch operacˇnı´ch syste´mu˚na´- sledujı´cı´: Procesy

I/O rozhranı´(I/O API) Uzˇivatelsky´rezˇim

Spra´vci I/O Privilegovany´rezˇim Ovladacˇe beˇzˇı´cı´v rezˇimu ja´dra HAL (Hardware Abstraction Layer) HW (perifernı´zarˇı´zenı´)

Obra´zek 7.1: Struktura I/O syste´mu

I/O rozhranı´ je sada rutin (funkcı´) a objektu˚poskytovana´operacˇnı´m syste´mem procesu˚m pro prˇı´stup k periferiı´m, jiny´m zpu˚sobem obvykle beˇzˇne´procesy s peri- feriemi komunikovat nemohou (to neplatı´pro neˇktere´syste´move´procesy).

93 KAPITOLA 7 SPRA´VA PERIFERII´ 94

Spra´vci periferiı´ jsou moduly syste´mu, ktere´prova´deˇjı´spra´vu urcˇite´ho zarˇı´zenı´, naprˇı´klad spra´vce tisku nebo spra´vce pro neˇktery´disk, by´vajı´usporˇa´da´ni do stro- move´struktury, ve ktere´nadrˇı´zeny´spra´vce rˇı´dı´cˇinnost ostatnı´ch spra´vcu˚.

7.2 Druhy periferiı´

Zarˇı´zenı´deˇlı´me na vstupnı´ a vy´stupnı´, ale toto deˇlenı´nenı´u´plneˇdisjunktnı´– existujı´ zarˇı´zenı´, ktera´patrˇı´do obou teˇchto skupin (pak je nazy´va´me vstupneˇ-vy´stupnı´). Vstupnı´je naprˇı´klad kla´vesnice, vy´stupnı´beˇzˇny´monitor nebo tiska´rna, vstupneˇ- vy´stupnı´jsou trˇeba diskove´pameˇti nebo dotykova´obrazovka. Z hlediska mozˇnostı´vyuzˇı´va´nı´procesy deˇlı´me periferie do trˇı´skupin:

• vyhrazena´zarˇı´zenı´ – tato zarˇı´zenı´nemohou slouzˇit vı´ce procesu˚m najednou, je to naprˇı´klad tiska´rna. Spra´vce tohoto zarˇı´zenı´musı´zajistit, aby procesy nebyly zbytecˇneˇzdrzˇova´ni. Pro to existujı´dveˇza´kladnı´ mozˇnosti:

– vyhrazova´nı´ zarˇı´zenı´ – jednodusˇsˇı´ mozˇnost, ktera´ ale moc proble´mu˚ nerˇesˇı´ – jeden proces pouzˇı´va´ zarˇı´zenı´, ostatnı´ musı´ pocˇkat trˇeba ve fronteˇ, azˇproces sa´m zarˇı´zenı´uvolnı´, – virtualizace zarˇı´zenı´(ovladacˇtypu server, viz da´le) – proces ve skutecˇ- nosti komunikuje s jakousi „virtua´lnı´na´hradou“, specia´lnı´m procesem, a teprve tento proces komunikuje se samotny´m zarˇı´zenı´m, komunikace s procesem je rychlejsˇı´nezˇse zarˇı´zenı´m a navı´c dı´ky ru˚zny´m technolo- giı´m vcˇetneˇmultithreadingu mu˚zˇe specia´lnı´proces komunikovat s vı´ce procesy najednou.

• sdı´lena´zarˇı´zenı´ – tato zarˇı´zenı´mohou slouzˇit najednou vı´ce procesu˚m s tı´m, zˇe kazˇdy´proces ma´vyhrazenu svou vlastnı´cˇa´st, typicky´ prˇı´klad je operacˇnı´ pameˇt’ nebo vneˇjsˇı´ pameˇt’ova´ me´dia. Spra´vce prˇideˇluje, odebı´ra´ a eviduje cˇa´sti zarˇı´zenı´prˇideˇlene´jednotlivy´m procesu˚m a musı´prˇedevsˇı´m zajistit, aby procesy prˇistupovaly pouze k teˇm cˇa´stem, ktere´jsou pro neˇvyhrazeny nebo kam je jim prˇı´stup povolen. • spolecˇna´zarˇı´zenı´ – k teˇmto zarˇı´zenı´m mu˚zˇe bez proble´mu˚prˇistupovat vı´ce procesu˚najednou, jejich stav neby´va´z vneˇjsˇku meˇneˇn a proto nevyzˇadujı´ cˇasto ani synchronizaci prˇı´stupu. Je to naprˇı´klad mikrofon nebo neˇktery´typ cˇidla (trˇeba teplomeˇr cˇi vlhkomeˇr). KAPITOLA 7 SPRA´VA PERIFERII´ 95

Perifernı´zarˇı´zenı´da´le deˇlı´me podle rozsa´hlosti dat, se ktery´mi doka´zˇou najed- nou pracovat jejich ovladacˇe na • znakova´ – kla´vesnice, tiska´rna, mysˇ, termina´l, apod., • blokova´ – pameˇt’ova´zarˇı´zenı´jako je trˇeba pevny´disk, • specia´lnı´ – naprˇı´klad cˇasovacˇ.

7.3 Ovladacˇe

Ovladacˇzarˇı´zenı´je program (proces po spusˇteˇnı´), ktery´slouzˇı´jako rozhranı´mezi zarˇı´zenı´m a procesy. Hlavnı´u´lohou ovladacˇe je zprostrˇedkova´vat komunikaci mezi zarˇı´zenı´m a pro- cesy tak, aby procesy mohly stejny´m zpu˚sobem prˇistupovat k ru˚ zny´m zarˇı´zenı´m te´hozˇtypu, naprˇı´klad u dvou ru˚zny´ch tiska´ren by nemeˇl by´t proces nucen zjisˇt’o- vat, jak prˇesneˇmajı´by´t forma´tova´na data, jake´parametry majı´by´t tiska´rneˇzada´ny a v jake´m porˇadı´, atd. Proto spra´vce zarˇı´zenı´ poskytuje procesu˚m sadu sluzˇeb (funkcı´), ktere´jsou vzˇdy pro jake´koliv zarˇı´zenı´stejneˇnazva´ny, jen pokazˇde´jinak pracujı´. Jsou to naprˇı´klad funkce: Init(zarÏõÂzenõÂ) inicializuje zarˇı´zenı´, funkce obvykle vracı´jeho stav (prˇipraveno nebo chyba), Open(zarÏõÂzenõÂ) otevrˇe komunikacˇnı´kana´l mezi zarˇı´zenı´m a procesem, nava´zˇe spojenı´, funkce vracı´ identifikaci komunikacˇnı´ho kana´lu (cˇı´slo, ktere´ bude nada´le pro komunikaci pouzˇı´va´no), Close(zarÏõÂzenõÂ) uzavrˇe komunikacˇnı´kana´l, zrusˇı´spojenı´, Read(zarÏõÂzenõÂ,Blok),Write(zarÏõÂzenõÂ,Blok) prˇenos dat mezi blokovy´m zarˇı´zenı´m a procesem – cˇtenı´bloku dat ze zarˇı´zenı´, za´pis bloku dat, Getc(zarÏõÂzenõÂ),Putc(zarÏõÂzenõÂ,Zn) – tote´zˇpro znakova´zarˇı´zenı´– cˇtenı´ znaku ze zarˇı´zenı´, posla´nı´znaku na zarˇı´zenı´, Seek(zarÏõÂzenõÂ,param) prˇesun na zadanou pozici v ra´mci poslany´ch dat, Cntl(parametry) prˇı´stup k dalsˇı´m mozˇnostem zarˇı´zenı´, ma´ru˚zne´parametry podle toho, co zarˇı´zenı´nabı´zı´(vsˇechny funkce, ktere´se „nevejdou“ do prˇed- chozı´ch). Rozlisˇujeme dva za´kladnı´druhy ovladacˇu˚: • klasicke´ovladacˇe – jednodusˇsˇı´procesy, ktere´zprostrˇedkova´vajı´komunikaci, prˇekla´dajı´ vola´nı´ obecneˇ pojmenovany´ch sluzˇeb na konkre´tnı´ proudy dat urcˇene´zarˇı´zenı´, KAPITOLA 7 SPRA´VA PERIFERII´ 96

• ovladacˇe typu server – specia´lnı´procesy vytva´rˇejı´cı´dokonalejsˇı´rozhranı´mezi procesy (klienty) a zarˇı´zenı´m; proces posˇle data tomuto specia´lnı´mu procesu a nemusı´ cˇekat na jejich dalsˇı´ zpracova´nı´ ani posı´lat po maly´ch da´vka´ch podle pozˇadavku˚zarˇı´zenı´, mı´sto cˇeka´nı´mu˚zˇe da´le pokracˇovat ve sve´pra´ci, specia´lnı´proces zarˇadı´tato data do fronty a postupneˇje sa´m posı´la´zarˇı´zenı´ (architektura klient-server). Z mnoha du˚vodu˚ je dobre´ rozdeˇlit ovladacˇ na dveˇ cˇa´sti, ktere´ mezi sebou komunikujı´stylem Producent - konzument: • hornı´cˇa´st je Producent, prˇebı´ra´data od procesu˚a ukla´da´je do fronty (u vstup- nı´ch zarˇı´zenı´zase prˇebı´ra´data z druhe´cˇa´sti, kompletuje je a zası´la´adresa´tovi), • dolnı´cˇa´st je Konzument, komunikuje prˇı´mo se zarˇı´zenı´m – vybı´ra´z fronty data a podle pozˇadavku˚zarˇı´zenı´mu je posı´la´(u vstupnı´ch zarˇı´zenı´prˇebı´ra´ data ze zarˇı´zenı´a rˇadı´do fronty). Toto rozdeˇlenı´ma´smysl zvla´sˇteˇu ovladacˇu˚typu server, ale je uzˇitecˇne´i u klasic- ky´ch ovladacˇu˚. Dolnı´polovina je hardwaroveˇza´visla´, proto kdyzˇchceme napsat ovladacˇpro neˇkolik druhu˚te´hozˇtypu zarˇı´zenı´(naprˇ. neˇkolik ru˚zny´ch tiska´ren), stacˇı´prˇepsat dolnı´cˇa´st a do hornı´te´meˇrˇnemusı´me zasahovat.

7.4 Prˇerusˇenı´

Pod pojmem prˇerusˇenı´cha´peme prˇerusˇenı´norma´lnı´ho beˇhu procesu (posloupnosti vykona´vany´ch instrukcı´jeho programu). V multitaskove´m syste´mu prˇerusˇenı´zpu˚- sobı´zmeˇnu stavu beˇzˇı´cı´ho procesu (je odebra´n procesor), ale azˇpo dokoncˇenı´pra´veˇ zpracova´vane´instrukce1. Prˇerusˇenı´mu˚zˇe by´t generova´no bud’hardwaroveˇ, pak hovorˇı´me o hardwarove´m prˇerusˇenı´, tato prˇerusˇenı´majı´prˇideˇlena cˇı´sla IRQ (Interrupt Request – pozˇadavek prˇerusˇenı´), nebo softwaroveˇoperacˇnı´m syste´mem nebo beˇzˇı´cı´m procesem2, pak jde o softwarove´prˇerusˇenı´. Hardwarova´prˇerusˇenı´jsou naprˇı´klad generova´na I/O zarˇı´zenı´mi jako je kla´- vesnice (stisk kla´vesy) nebo mysˇ(pohyb cˇi stisknutı´tlacˇı´tka), ale trˇeba take´proceso- rem prˇi pokusu o deˇlenı´nulou (takova´to prˇerusˇenı´vznikla´ chybou se take´nazy´vajı´

1Instrukce je nejmensˇı´a da´le nedeˇlitelny´povel, ktere´mu rozumı´jizˇprˇı´mo procesor, program je posloupnost teˇchto instrukcı´. Jednomu prˇı´kazu vysˇsˇı´ho programovacı´ho jazyka odpovı´da´obvykle cely´sled instrukcı´. Typicky jde o prˇesuny jedno- cˇi neˇkolikabytovy´ch u´daju˚mezi registrem procesoru a pameˇtı´, jednoduche´aritmeticke´operace apod. 2V „zabezpecˇeneˇjsˇı´ch“ operacˇnı´ch syste´mech beˇzˇne´ procesy nemohou generovat prˇerusˇenı´ prˇı´mo, ale vola´nı´m ja´dra. KAPITOLA 7 SPRA´VA PERIFERII´ 97 vyjı´mky – exceptions), prˇi nezna´me´ instrukci, prˇerusˇenı´ generovana´ cˇasovacˇem (v pravidelny´ch intervalech, prˇedem nastaveny´ch), prˇi hardwarove´implementaci ochrany pameˇti je procesorem generova´no prˇerusˇenı´prˇi neopra´vneˇne´m prˇı´stupu do chra´neˇne´pameˇti. Softwarova´prˇerusˇenı´jsou generova´na procesem naprˇı´klad prˇi zˇa´dosti o pro- strˇedek (vcˇetneˇvy´stupu na obrazovku) nebo prˇi pokusu vyvolat urcˇitou uda´lost a tı´m i jejı´obsluzˇnou rutinu (uvnitrˇprocesu nebo i u jine´ho procesu cˇi operacˇnı´ho syste´mu), operacˇnı´m syste´mem naprˇı´klad prˇi porusˇenı´ bezpecˇnosti syste´mu. Po vykona´nı´kazˇde´instrukce procesor zjistı´, zda beˇhem jejı´ho vykona´va´nı´ne- dosˇlo k vygenerova´nı´prˇerusˇenı´, a jestlizˇe ano, postupuje se na´sledovneˇ:

1. beˇzˇı´cı´proces je prˇerusˇen a zarˇazen do neˇktere´fronty (obvykle fronta prˇipra- veny´ch procesu˚), jeho kontext je ulozˇen, 2. rˇı´zenı´prˇevezme operacˇnı´syste´m, resp. jeho modul pro obsluhu prˇerusˇenı´(In- terrupt Handler), ktery´zjistı´, o jake´prˇerusˇenı´jde a vytvorˇı´datovou strukturu s u´daji ty´kajı´cı´mi se prˇerusˇenı´(typ, jak bylo vyvola´no, souvisejı´cı´data, . . . ), pokud takove´to struktury jsou vyzˇadova´ny, 3. podle typu prˇerusˇenı´se urcˇı´, jak ma´by´t osˇetrˇeno, tedy je spusˇteˇna prˇı´slusˇna´ obsluzˇna´rutina (funkce nebo procedura, ktera´je na toto prˇerusˇenı´napojena), 4. po provedenı´obsluzˇne´rutiny je procesor prˇideˇlen neˇktere´mu z prˇipraveny´ch procesu˚(mu˚zˇe to by´t tenty´zˇ, ktery´byl prˇerusˇen).

Za urcˇity´ch okolnostı´nesmı´by´t osˇetrˇena (tj. musı´by´t ignorova´na) prˇerusˇenı´urcˇena´ dane´mu procesu, naprˇ. z du˚vodu˚synchronizace, pak hovorˇı´me o za´kazu prˇerusˇenı´. Zaka´zana´prˇerusˇenı´jsou tzv. maskova´na (maskovane´prˇerusˇenı´je ignorova´no), neˇ- ktera´prˇerusˇenı´vsˇak nelze maskovat a proces o nich musı´obdrzˇet zpra´vu (naprˇı´klad deˇlenı´nulou). Spra´va periferiı´musı´prˇedevsˇı´m zajistit spra´vnou obsluhu prˇerusˇenı´. V nejjed- nodusˇsˇı´m prˇı´padeˇse prova´dı´pomocı´ vektoru˚prˇerusˇenı´ uda´vajı´cı´ch adresu obsluzˇne´ rutiny. V syste´mu MS-DOS je spra´va prˇerusˇenı´prova´deˇna na´sledovneˇ:

• pro kazˇde´prˇerusˇenı´je nadefinova´n programovy´ko´d (obsluzˇna´rutina – pro- gram, funkce, rutina, tj. ovladacˇprˇerusˇenı´), ktery´se ma´spustit v prˇı´padeˇ, zˇe je toto prˇerusˇenı´generova´no, • vektor prˇerusˇenı´je usporˇa´dana´dvojice (vektor o dvou prvcı´ch) [segment,offset], ktera´uda´va´adresu v pameˇti (tj. je to vlastneˇpointer), na ktere´ je pra´veˇtento programovy´ko´d, a kdyzˇvı´me, kde hledat tento vektor, pak snadno mu˚zˇeme spustit obsluhu prˇerusˇenı´, ktere´nastalo, KAPITOLA 7 SPRA´VA PERIFERII´ 98

• vektory prˇerusˇenı´jsou ulozˇeny od adresy, ktera´je zna´ma´ nejen syste´mu, ale take´vsˇem programu˚m, kazˇdy´vektor obsahuje dva u´daje, kazˇdy´zabı´ra´2 B, tedy celkem vektor zabı´ra´4 B pameˇti, • vektory jsou naskla´da´ny za sebou, proto kdyzˇzna´me cˇı´slo prˇerusˇenı´, ktere´ nastalo (prˇerusˇenı´jsou ocˇı´slova´na od 0), stacˇı´prove´st vy´pocˇet

vy´chozı´adresa + cˇı´slo prˇerusˇenı´ ∗ 4,

zı´ska´me adresu, na ktere´je vektor prˇerusˇenı´s adresou ko´du obsluhujı´cı´ho prˇerusˇenı´s tı´mto cˇı´slem, • pokud je generova´no prˇerusˇenı´, je prˇerusˇen beˇh programu a je zpracova´na obsluha prˇerusˇenı´ urcˇena´ vektorem, potom mu˚zˇe beˇh programu zase po- kracˇovat (MS-DOS nenı´multitaskovy´syste´m, plnohodnotneˇmu˚zˇe beˇzˇet jen jediny´proces).

Pokud je implementova´n multitasking, je samozrˇejmeˇ nutne´ obsluhu prˇerusˇenı´ rozsˇı´rˇit, protozˇe generovane´prˇerusˇenı´nemusı´by´t urcˇeno beˇzˇı´cı´aplikaci a navı´c mu˚zˇe by´t nadefinova´no velke´mnozˇstvı´softwarovy´ch prˇerusˇenı´. Potom se vy´sˇe popsany´m zpu˚sobem spravujı´pouze za´kladnı´druhy prˇerusˇenı´a vektory prˇerusˇenı´ ukazujı´ na cˇa´sti modulu obsluhy prˇerusˇenı´, ktery´ shroma´zˇdı´ informace o typu prˇerusˇenı´, adresa´tovi a dalsˇı´data a to vsˇe posˇle (naprˇı´klad jako zpra´vu) adresa´tovi. Adresa´t (proces, ktere´mu je prˇerusˇenı´urcˇeno) ma´pak definova´ny vlastnı´obsluzˇne´ rutiny, ktere´pak zpra´vu da´le zpracujı´. KAPITOLA 8

Pameˇt’ova´me´dia

Pameˇt’ova´me´dia take´patrˇı´mezi perifernı´zarˇı´zenı´, ale protozˇe jejich spra´va je nejna´rocˇ- neˇjsˇı´, nejfrekventovaneˇjsˇı´a klı´cˇova´pro pra´ci cele´ho operacˇnı´ho syste´mu (operacˇnı´syste´m je koneckoncu˚ulozˇen na pevne´m disku, cozˇje pameˇt’ove´ me´dium), budeme se jim veˇnovat podrobneˇji zde a pak jesˇteˇv na´sledujı´cı´kapitole o spra´veˇdisku˚.

8.1 Za´kladnı´pojmy

Pod pojmem pameˇt’ove´me´dium (nebo take´vneˇjsˇı´pameˇt’)rozumı´me perifernı´zarˇı´zenı´ slouzˇı´cı´k ukla´da´nı´dat. Hardwarovy´m rozhranı´m, prˇes ktere´je pameˇt’ove´me´dium prˇipojeno k pocˇı´tacˇi, je u´lozˇisˇteˇ. V prˇı´padeˇdisku˚a pa´sek (pevny´ch disku˚, CD, disket, za´lohovacı´ch pa´sek, apod.) je to mechanika tohoto disku cˇi pa´sky, pro USB flash disky je to USB rozhranı´, sve´u´lozˇisˇteˇmajı´take´pameˇt’ove´karty. Pameˇt’ova´me´dia mohou by´t bud’ napevno prˇipojena datovy´m kabelem k za´- kladnı´desce pocˇı´tacˇe, trˇeba prˇı´mo ve skrˇı´ni pocˇı´tacˇe (naprˇı´klad beˇzˇny´pevny´disk) nebo mohou by´t vymeˇnitelna´, a v tom prˇı´padeˇje datovy´m kabelem prˇipojeno pouze u´lozˇisˇteˇtohoto me´dia (naprˇı´klad CD mechanika). Me´dia mohou by´t bud’ se sekvencˇnı´m prˇı´stupem (pa´sky) nebo mohou umozˇ- nˇovat prˇı´stup na kteroukoliv svou cˇa´st (prˇedevsˇı´m disky). V prˇı´padeˇsekvencˇnı´ho prˇı´stupu nenı´proble´m s adresacı´, ale v prˇı´padeˇdisku˚ pouzˇı´va´me „vı´cerozmeˇrnou“ adresaci urcˇujı´cı´prˇesnou polohu dat na disku. V dalsˇı´m textu budeme pouzˇı´vat pojmy ty´kajı´cı´se struktury disku:

Stopy jsou soustrˇedne´kruzˇnice na disku.

99 KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 100

Sektory jsou vy´secˇe kruzˇnic, kazˇdy´sektor obsahuje 512 B dat (tj. 1/2 kB). Protozˇe by v takove´m prˇı´padeˇsektory u vneˇjsˇı´ho okraje byly mnohona´sobneˇveˇtsˇı´nezˇ sektory blı´zko strˇedu disku (vzˇdy se ale do sektoru ulozˇı´pra´veˇ512 B dat), u noveˇjsˇı´ch disku˚je na vneˇjsˇı´ch stopa´ch vı´ce sektoru˚nezˇna stopa´ch vnitrˇnı´ch. Disk samotny´doka´zˇe pracovat vzˇdy jen s cely´mi sektory, neumı´je rozdeˇlit na cˇa´sti. Desky a povrchy – pevny´disk se skla´da´z vı´ce desek (kruhu˚) na jedne´ose, kazˇda´ deska ma´dva povrchy. Hlava (cˇtecı´a za´pisova´) je jedna pro kazˇdou dvojici protilehly´ch povrchu˚(tj. v kazˇde´ „sˇteˇrbineˇ“ jedna). Cylindr (z angl. cylinder, va´lec) je tata´zˇstopa na vsˇech povrsˇı´ch (tedy ze vsˇech povrchu˚vezmeme stopu s dany´m polomeˇrem, a to je take´polomeˇr cylindru). Fyzicka´adresa dat na disku za´visı´na typu disku (IDE nebo SCSI), je to bud’ [povrch, stopa, sektor] nebo [cylindr, hlava, sektor], s touto adresou nedoka´zˇe prˇı´mo pra- covat operacˇnı´syste´m, ten pracuje s logickou adresou (to mu˚zˇe by´t trˇeba cˇı´slo logicke´ho sektoru, kdy sektory ma´me ocˇı´slova´ny absolutneˇ na cele´m disku, sektory s nizˇsˇı´m cˇı´slem jsou u okraje, s vysˇsˇı´m cˇı´slem u strˇedu disku). Cluster (cˇte se [klastr]) je jeden nebo vı´ce sektoru˚, a stejneˇjako samotny´disk doka´zˇe pracovat jen s cely´mi sektory, souborovy´syste´m doka´zˇe pracovat pouze s ce- ly´mi clustery (naprˇı´klad soubor, i kdyzˇzabı´ra´trˇeba jen 3 B, musı´me ulozˇit do cele´ho clusteru, zbytek clusteru zu˚stane nevyuzˇit). Je to tedy nejmensˇı´cˇa´st disku, se kterou doka´zˇe pracovat operacˇnı´syste´m. Aby mohlo by´t pameˇt’ove´me´dium pouzˇı´va´no, musı´na neˇm by´t prˇedprˇipravena urcˇita´struktura, musı´by´t forma´tova´no. Nı´zkou´rovnˇove´forma´tova´nı´ je za´pis znacˇek pro sektory a stopy na magneticke´m me´diu (pevny´disk, disketa, apod.), prova´dı´obvykle vy´robce. Vysokou´rovnˇove´forma´tova´nı´ je vytvorˇenı´souborove´ho syste´mu, urcˇı´me, jaky´m zpu˚- sobem budou na me´diu data ukla´da´na a vytvorˇı´me neˇktere´nezbytne´datove´ struktury (naprˇ. pro FAT souborovy´syste´m FAT tabulku). Pro tento u´kon se pojem „forma´tova´nı´“ pouzˇı´va´prakticky jen ve Windows, v jiny´ch operacˇnı´ch syste´mech se pouzˇı´va´pojem „vytvorˇenı´souborove´ho syste´mu“. Prˇed vytvorˇenı´m souborove´ho syste´mu mu˚zˇeme pameˇt’ove´me´dium, typicky pevny´ disk, rozdeˇlit na logicke´disky (svazky,oblasti, partitions podle terminologie v ru˚zny´ch operacˇnı´ch syste´mech), na jednom fyzicke´m disku je vzˇdy alesponˇjeden logicky´ disk. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 101

Rozdeˇlenı´se prova´dı´pomocı´na´stroju˚cˇasto nazy´vany´ch FDISK. Tento na´stroj je soucˇa´stı´veˇtsˇiny dnes pouzˇı´vany´ch syste´mu˚. Bohuzˇel jsou do urcˇite´mı´ry navza´jem nekompatibilnı´a mu˚zˇe se sta´t, zˇe disk rozdeˇleny´fdiskem jednoho operacˇnı´ho sys- te´mu (trˇeba Linuxu) deˇla´proble´my jine´mu operacˇnı´mu syste´mu (Windows, proto se doporucˇuje v prˇı´padeˇ, zˇe uzˇivatel chce mı´t na jednom disku Windows i Linux, pro za´kladnı´rozdeˇlenı´a nadefinova´nı´Windows oblastı´pouzˇı´t fdisk Windows a teprve pro zbytek disku fdisk Linuxu). Neˇktere´na´stroje na rozdeˇlenı´disku nedoka´zˇou meˇnit hranice oblastı´bez ztra´ty dat (tj. data musı´me za´lohovat), ale neˇktere´Linuxove´na´stroje a neˇktere´programy pro Windows (zde veˇtsˇinou komercˇnı´) doka´zˇeou s hranicemi oblastı´pracovat bez ztra´ty dat (ale za´lohovana´by pro jistotu by´t meˇla). Na logicke´m disku (oblasti) jizˇ mu˚zˇeme vytvorˇit souborovy´syste´m.

8.2 Adresa´rˇova´struktura

Pameˇt’ova´me´dia mohou obsahovat velmi mnoho dat, a aby bylo vu˚bec mozˇne´ se v teˇchto datech vyznat, vyhleda´vat, pouzˇı´vat je, prˇida´vat dalsˇı´ nebo neˇktera´ odstranˇovat, musı´by´t vhodneˇorganizova´na. Data se obvykle nacha´zejı´v jednotka´ch, ktere´nazy´va´me soubory. Soubor je tedy posloupnost dat s vlastnı´m vy´znamem, dat, ktera´k sobeˇneˇjaky´m zpu˚sobem patrˇı´ (trˇeba dokument, obra´zek nebo tabulka). Souboru˚mu˚zˇe by´t opeˇt velmi mnoho, proto take´musı´by´t trˇı´deˇny.Trˇı´deˇnı´se pro- va´dı´do jednotek, ktery´m rˇı´ka´me adresa´rˇe. Adresa´rˇobvykle obsahuje u´daje o soubo- rech, ktere´jsou do neˇho vlozˇeny, vcˇetneˇjejich fyzicke´ho umı´steˇnı´na disku (adresy), od toho i na´zev. Protozˇe adresa´rˇje vlastneˇsouhrn dat o souborech, v mnoha ope- racˇnı´ch syste´mech je transparentneˇcha´pa´n take´jako soubor, trˇebazˇe se specia´lnı´m vy´znamem. Adresa´rˇe tvorˇı´strukturu, ktera´naby´va´ru˚zny´ch stupnˇu˚slozˇitosti. Adresa´rˇ, ktery´ obsahuje vsˇe ostatnı´, co se na me´diu nacha´zı´, se nazy´va´ korˇenovy´adresa´rˇ (root). Podle toho, do jake´mı´ry mu˚zˇe by´t adresa´rˇova´struktura slozˇita´ a jejı´prvky navza´jem vnorˇene´. Rozlisˇujeme tyto druhy adresa´rˇovy´ch struktur:

Jednou´rovnˇova´struktura – existuje pouze jediny´adresa´rˇ, root, vsˇechny soubory jsou v neˇm. Tuto koncepci pouzˇı´val operacˇnı´syste´m CP/M. Dvouu´rovnˇova´struktura – v rootu mohou by´t odkazy na adresa´rˇe, tyto adresa´rˇe vsˇak nemohou obsahovat dalsˇı´adresa´rˇe, jen soubory. Je to vylepsˇenı´jedno- u´rovnˇove´struktury o rozdeˇlenı´souboru˚jednotlivy´ch uzˇivatelu˚a syste´mu. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 102

Stromova´struktura – v adresa´rˇi mohou by´t dalsˇı´adresa´rˇe, ktere´se nazy´vajı´ podad- resa´rˇe, v ktere´mkoliv adresa´rˇi mohou by´t soubory. Cela´struktura tvorˇı´strom s jednı´m korˇenem – korˇenovy´m adresa´rˇem. Tuto strukturu pouzˇı´va´pro sve´ souborove´syste´my Windows. Acyklicka´struktura – oproti stromove´strukturˇe navı´c prˇida´va´mozˇnost mı´t soubory a neˇktere´adresa´rˇe ulozˇeny ve vı´ce adresa´rˇı´ch, tedy k neˇktery´m polozˇka´m mu˚zˇe ve´st vı´ce nezˇjedna cesta. Je nutne´zajistit acyklicˇnost, aby prˇi vyhleda´- va´nı´nedocha´zelo k zacyklenı´vyhleda´vacı´ho algoritmu. Polozˇka (soubor nebo podadresa´rˇ) je fyzicky pouze jednou na adrese, ktera´ mu˚zˇe by´t uvedena ve vı´ce adresa´rˇı´ch. Vy´hodou je prˇedevsˇı´m snadny´prˇı´stup k te´muzˇsouboru z ru˚zny´ch adresa´rˇu˚(naprˇı´klad z adresa´rˇu˚patrˇı´cı´ch ru˚zny´m uzˇivatelu˚m). Pouzˇı´va´se v Unixovy´ch souborovy´ch syste´mech. Cyklicka´struktura – k polozˇka´m mu˚zˇe existovat vı´ce nezˇjedna cesta, narozdı´l od prˇedchozı´ho rˇesˇenı´jsou dovoleny i cykly, pouzˇı´va´se pouze jako na´stavba pro jednodusˇsˇı´struktury. Na obra´zku 8.1 na straneˇ103 je uka´zka vsˇech teˇchto adresa´rˇovy´ch struktur kromeˇ te´nejjednodusˇsˇı´, jednou´rovnˇove´. U acyklicke´struktury mu˚zˇe by´t proble´mem zachova´nı´acyklicˇnosti grafu prˇi prˇida´va´nı´novy´ch adres do adresa´rˇu˚. To lze rˇesˇit vı´ce zpu˚soby. Nejjednodusˇsˇı´m zpu˚sobem je omezenı´ty´kajı´cı´se vı´cena´sobny´ch adres – ve vı´ce adresa´rˇı´ch mu˚zˇe by´t jen soubor, nikoliv adresa´rˇ, nebo je mozˇne´„prˇibrat“ neˇktere´adresa´rˇe se zvla´sˇtnı´m vy´znamem (naprˇı´klad pro snazsˇı´pohyb ve strukturˇe mu˚zˇe v adresa´rˇi by´t odkaz na sebe sama a na nadrˇı´zeny´adresa´rˇ, tradicˇneˇnazvane´ . a ..). V te´to strukturˇe da´le musı´ by´t vyrˇesˇeno rusˇenı´ polozˇek tak, aby nevznikali „sirotci“ bez jake´hokoliv umı´steˇnı´, a tedy nevyhledatelnı´, trˇebazˇe zabı´rajı´cı´mı´sto na disku. To lze rˇesˇit dveˇma zpu˚soby: a) Kazˇda´polozˇka (soubor i adresa´rˇ, ktery´mu˚zˇe by´t ve vı´ce adresa´rˇı´ch) ma´cˇı´tacˇ, ktery´ zachycuje pocˇet odkazu˚ na tuto polozˇku (pocˇet vy´skytu˚ adresy te´to polozˇky v ru˚zny´ch adresa´rˇı´ch). Prˇi rusˇenı´polozˇky je nejdrˇı´v jejı´cˇı´tacˇsnı´zˇen o 1. Pokud po tomto snı´zˇenı´ma´hodnotu 0, je polozˇka fyzicky vymaza´na, jinak je ponecha´na. b) Kromeˇvy´skytu˚adres v adresa´rˇı´ch jsou polozˇky evidova´ny syste´mem jesˇteˇ zvla´sˇt’. Prˇi maza´nı´polozˇky se odstranı´pouze jejı´za´znam v tom adresa´rˇi, ze ktere´ho mazˇeme, tedy odstranı´se pouze jeden odkaz na polozˇku. Syste´m pak pravidelneˇprocha´zı´vsˇechny polozˇky a fyzicky odstranˇuje ty, ktere´nejsou v zˇa´dne´m adresa´rˇi, na ktere´nevede zˇa´dny´odkaz. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 103

 Q  ¡ Q ¡ A  ¡ Q  Qs ¡ A + ¡ ¡ ¡ A  ¡ A A ¡ ? A  A A ¡ A A AAU ¡ A © A ¡ ¡ AAU AAU  £ £ ?  ? ? £ ¡ A ££ ¡ A  ¡ A ? ? ?  ¡ ¡ ? AAU     

(a) dvouu´rovnˇova´struktura (b) stromova´struktura

 Q  Q  ¡ Q  ¡ Q  ¡ QQs  ¡ QQs  ¡  ¡ + ¡ + ¡    £ A £ A  A £ A  A £ A A £ AAU A £ AAU © A £ © A £ AAU ££  AAU ££  £ A A £ A A £ A AAU ?  £ A AAU ?  £ A ¡ A £ A ¡ A ££ A ¡ A ££ A ¡ A A¡ A A¡ A  A ¡ A  A ¡ A AU ¡ ? AU AU ¡ ? AU    

(c) acyklicka´struktura (d) cyklicka´struktura

Obra´zek 8.1: Ru˚zne´typy struktur adresa´rˇu˚

Cyklicka´struktura adresa´rˇu˚se, jak jizˇbylo uvedeno, pouzˇı´va´pouze jako na´- stavba jine´struktury. Obvykle jde o syste´m „lehky´ch“ (soft) odkazu˚(ve Windows se nazy´vajı´za´stupci). Tyto odkazy jsou kra´tke´soubory s informacı´o skutecˇne´adrese polozˇky a prˇı´padneˇdalsˇı´mi informacemi. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 104

8.3 Soubory a syste´m souboru˚

Pod pojmem soubor rozumı´me datovy´objekt uchova´vany´na vneˇjsˇı´m pameˇt’ove´m me´diu, logicky je to posloupnost dat s vlastnı´m vy´znamem (dat, ktera´k sobeˇpatrˇı´). Rozezna´va´me tyto za´kladnı´typy souboru˚:

• standardnı´(dokumenty, spustitelne´soubory), • adresa´rˇe, • simulovane´(pro prˇı´stup k I/O zarˇı´zenı´nebo pro mechanismus pipes), nemusı´ by´t prˇı´tomny fyzicky na disku, • odkla´dacı´soubory pro virtua´lnı´pameˇt’.

Souborovy´syste´m (syste´m souboru˚) jsou metody a struktury dat, pomocı´ktery´ch operacˇnı´syste´m udrzˇuje za´znamy o souborech. Data se na disk ukla´dajı´linea´rneˇ (jeden bit za druhy´m), souborove´syste´my potrˇebujeme jako jednoduche´databa´ze, ktere´umozˇnˇujı´prˇı´stup ke konkre´tnı´m datu˚m, trˇı´deˇnı´(do adresa´rˇu˚) a udrzˇova´nı´ informacı´o teˇchto datech. V kazˇde´m operacˇnı´m syste´mu jsou u souboru˚evidova´ny trochu jine´vlastnosti. Kromeˇna´zvu souboru a jeho prˇı´pony je trˇeba urcˇovat prˇı´stupova´pra´va k tomuto souboru nebo atributy. To je realizova´no ru˚zny´mi zpu˚soby, z nichzˇneˇktere´budou podrobneˇji popsa´ny da´le. Neˇktere´mozˇnosti:

a) Souborove´syste´my FAT (Windows s DOS ja´drem) – urcˇujı´se pouze atributy, zˇa´dna´ochrana prˇı´stupu, jsou to atributy A (k archivaci), D (adresa´rˇ), L (popi- sek disku), S (syste´movy´), H (skryty´), R (pouze pro cˇtenı´). b) Souborovy´syste´m NTFS (Windows s NT ja´drem) – prˇı´stupova´ pra´va n (zˇa´dne´), r (pra´vo cˇtenı´), w (za´pisu), c (zmeˇny), f (vesˇkera´pra´va), pra´va se prˇirˇazujı´ uzˇivatelu˚m nebo skupina´m (a tedy vsˇem cˇlenu˚m dane´skupiny). Dajı´se deˇdit, tedy nenı´nutne´definovat je pro kazˇdou polozˇku zvla´sˇt’. c) Multics – kazˇdy´ soubor obsahuje jako metadata seznam uzˇivatelu˚ s jejich prˇı´stupovy´mi pra´vy. d) Unixove´souborove´syste´my – pra´va r (cˇı´st), w (zapisovat), x (spousˇteˇt). Kazˇde´ polozˇce se prˇirˇazujı´tato pra´va pro vlastnı´ka (obvykle uzˇivatele, ktery´soubor vytvorˇil), konkre´tnı´skupinu (obvykle skupina, do ktere´patrˇı´vlastnı´k) a pro ostatnı´, tedy ve vlastnostech souboru jsou trˇi u´daje, kazˇdy´z nich obsahuje kombinaci pra´v rwx (trˇi bity, pokud je pra´vo prˇideˇleno, je bit nastaven na 1). Evidova´n je take´vlastnı´k souboru a skupina. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 105

Syste´my souboru˚ mu˚zˇeme cˇlenit podle ru˚zny´ch krite´riı´, uvedeme si cˇleneˇnı´ podle odolnosti vu˚cˇi hava´riı´m: 1. Souborove´syste´my s okamzˇity´m za´pisem (FAT, FAT32) – pokud aplikace chce zapisovat na disk a za´rovenˇprobı´ha´jina´diskova´operace, musı´pocˇkat. Vy´- hodou je bezpecˇnost (data se nemohou neocˇeka´vaneˇztratit bez toho, aby to aplikace neveˇdeˇla), nevy´hodou snı´zˇenı´vy´konnosti (cˇeka´nı´). 2. Souborove´syste´my s opatrny´m za´pisem (HPFS) – rozdeˇlı´za´pis do posloupnosti takovy´ch operacı´, zˇe kdyzˇ dojde s selha´nı´ prˇi za´pisu, data zu˚stanou kon- zistentnı´. Vlastneˇse jedna´o jednoduchy´databa´zovy´syste´m s definovany´mi transakcemi. 3. Souborove´syste´my s opozˇdeˇny´m za´pisem – pouzˇı´vajı´cache pameˇt’(vyrovna´vacı´ pameˇt’), tedy data se nejdrˇı´v zapisujı´ do cache pameˇti, zapisujı´cı´ aplikace mu˚zˇe da´le pracovat, z cache pameˇti se data zapı´sˇou na disk azˇtehdy, kdyzˇ disk dokoncˇı´prˇedchozı´probı´hajı´cı´operaci (kdyzˇ ma´cˇas). Vy´hodou je zvy´sˇenı´ vy´konnosti syste´mu, nevy´hodou je mozˇnost ztra´ty dat prˇi hava´rii. 4. Zˇ urna´lovacı´souborove´syste´my (journalized, zotavitelne´– NTFS a veˇtsˇina Li- nuxovy´ch souborovy´ch syste´mu˚) si uchova´vajı´informace o operacı´ch, ktere´ byly provedeny, aby bylo mozˇne´ v prˇı´padeˇ vy´padku dostat data zpeˇt do konzistentnı´ho stavu. Zmeˇny jsou evidova´ny podobneˇjako v databa´zı´ch jako transakce. Transakce se skla´da´z jednoduchy´ch (atomicky´ch) operacı´, navza´jem oddeˇlitelny´ch, tyto operace se postupneˇevidujı´. Po provedenı´vsˇech operacı´, ze ktery´ch se trans- akce skla´da´, je odesla´no potvrzenı´, ktere´znamena´u´speˇsˇne´ukoncˇenı´trans- akce, jednotlive´operace transakce se z zˇurna´lu vymazˇou (uzˇ nejsou potrˇeba). Pokud syste´m „spadne“, trˇeba dojde k na´hle´mu vy´padku el. proudu, mu˚- zˇeme se u nedokoncˇeny´ch transakcı´vra´tit zpeˇt podle zaznamenany´ch operacı´. V prˇı´padeˇNTFS zˇurna´lova´nı´probı´ha´takto:

• beˇhem kazˇde´operace na disku jsou dı´lcˇı´operace zaznamena´va´ny do log souboru, po ukoncˇenı´operace jsou vsˇechny tyto dı´lcˇı´operace z log souboru vymaza´ny, • po startu syste´mu se procha´zı´ tento log soubor a opakujı´ se vsˇechny dokoncˇene´transakce (aby bylo jiste´, zˇe byly zapsa´ny z cache pameˇti na disk) a rusˇı´vsˇechny nedokoncˇene´, • mohou se pouzˇı´vat kontrolnı´body (mı´sto, kdy jsou vzˇdy vsˇechny trans- akce provedeny, v pravidelny´ch cˇasovy´ch intervalech, od tohoto bodu lze prove´st zotavenı´). KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 106

Virtua´lnı´souborovy´syste´m je takovy´souborovy´syste´m, ktery´nema´prˇı´mou pod- poru na konkre´tnı´m pameˇt’ove´m me´diu. Virtua´lnı´souborove´syste´my se pouzˇı´vajı´ k abstrakci prˇı´stupu k ostatnı´m souborovy´m syste´mu˚m (prˇedevsˇı´m v Unixovy´ch syste´mech) nebo pro snadneˇjsˇı´prˇı´stup k datu˚m, ktera´prˇı´mo nesouvisejı´s jednı´m fyzicky´m zarˇı´zenı´m (naprˇı´klad beˇhove´u´daje o stavu syste´mu v Unixovy´ch syste´- mech). Jde vlastneˇo jake´si virtua´lnı´rozhranı´. Du˚lezˇity´m proble´mem je fragmentace. Fragmentace je zpu˚sobena prˇedevsˇı´m tı´m, zˇe pokud je soubor prˇı´lisˇdlouhy´, mohou by´t jeho cˇa´sti (fragmenty) ulozˇeny na ru˚zny´ch cˇa´stech disku. Fragmentace se musı´cˇasto rˇesˇit v souborovy´ch syste´mech, ktere´ve snaze rychle najı´t volne´mı´sto prˇi ukla´da´nı´souboru vezmou prvnı´volny´ blok, zacˇnou ukla´dat, kdyzˇ nestacˇı´, najdou dalsˇı´ volny´ blok, ktery´ samozrˇejmeˇ mu˚zˇe by´t u´plneˇjinak umı´steˇn, pokracˇujı´v ukla´da´nı´, pak dalsˇı´volny´blok, . . .

Souborove´syste´my pro vymeˇnitelna´me´dia: Na vymeˇnitelny´ch me´diı´ch (CD, DVD, USB flash disk, disketa, apod.) se pouzˇı´vajı´obvykle takove´souborove´sys- te´my, ktery´m „rozumı´“ pokud mozˇno vsˇechny operacˇnı´syste´my nebo alesponˇten operacˇnı´syste´m, ktery´ma´me nainstalova´n. Pro CD je to obvykle CDFS (Compact Disk File System), pro DVD, ale i pro CD, je to UDF (Universal Disk Format) nebo neˇktery´FAT syste´m, USB flash disky mı´vajı´neˇktery´souborovy´syste´m typu FAT, diskety FAT12 nebo ext2fs.

8.4 Souborove´syste´my ve Windows

8.4.1 Starsˇı´verze souborovy´ch syste´mu˚typu FAT Souborove´syste´my typu FAT byly vyvinuty pro operacˇnı´syste´my MS-DOS a Win- dows. FAT je zkratka z File Allocation Table, syste´m je zalozˇen na evidenci umı´steˇnı´ souboru˚a adresa´rˇu˚v tabulce na zacˇa´tku disku.

FAT12 je souborovy´syste´m pouzˇitelny´dnes prakticky jen na disketa´ch (je pro disky mensˇı´nezˇ16 MB). Platı´zde to, co je rˇecˇeno v na´sledujı´cı´podkapitole s tı´m rozdı´lem, zˇe doka´zˇe adresovat nejvy´sˇe 212 clusteru˚(to je 4096 kB = 4 MB, na disketeˇ mu˚zˇeme proto zvolit 1 cluster = 1 sektor, na disketeˇjsou necele´ 3000 sektoru˚). FAT tabulka obsahuje polozˇky o de´lce 12 bitu˚(ale vsˇechny tyto bity nejsou vyuzˇity pro identifikaci obsahu clusteru˚). KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 107

FAT16 je urcˇen jizˇpro pevne´disky. De´lka clusteru je pro velmi male´disky obvykle 2 sektory (1 kB), se zvysˇujı´cı´se kapacitou disku je tato hodnota vy´razneˇvysˇsˇı´, urcˇuje se napevno podle velikosti disku. Struktura logicke´ho disku se souborovy´m syste´mem FAT16 je na´sledujı´cı´: • boot sektor (zava´deˇcı´sektor, odkaz na zava´deˇcı´za´znam = umı´steˇnı´programu, ktery´po zapnutı´nebo restartu pocˇı´tacˇe zavede operacˇnı´syste´m) • FAT (File Allocation Table), tabulka obsazenı´logicke´ho disku • jejı´kopie (pouzˇitelna´v prˇı´padeˇ, zˇe se prvnı´FAT posˇkodı´) • root (hlavnı´adresa´rˇdisku) – zvla´sˇtnı´struktura s pevnou de´lkou, proto v hlav- nı´m adresa´rˇi disku mu˚zˇe by´t pouze limitovany´pocˇet objektu˚(souboru˚nebo adresa´rˇu˚) • clustery – zde jsou ukla´da´ny soubory a dalsˇı´adresa´rˇe. Adresa´rˇe jsou usporˇa´- da´ny do stromove´struktury. Clustery jsou ocˇı´slova´ny (od 1), kazˇdy´ma´podle sve´ho porˇadove´ho cˇı´sla prˇirˇazen jeden za´znam ve FAT tabulce.

Obsah FAT tabulky. Jednotlive´clustery datove´oblasti jsou ocˇı´slova´ny, FAT obsa- huje pro kazˇdy´cluster jeden za´znam zabı´rajı´cı´2 B (od toho na´zev FAT 16, 2 B = 16 bitu˚, ale ve skutecˇnosti se pro cˇı´sla clusteru˚nepouzˇı´va´vsˇech 16 bitu˚, neˇktere´jsou vyhrazeny a vytva´rˇejı´specia´lnı´ko´dy naprˇı´klad pro vadny´cluster). Obsah za´znamu˚v tabulce urcˇuje, co v prˇı´slusˇne´m clusteru najdeme. Jestlizˇe je cluster volny´, je zde cˇı´slo 0x0000, vadny´– cˇı´slo 0xFFF7 (toto cˇı´slo zde zapisuje scandisk nebo podobne´programy pro kontrolu povrchu disku). Pokud je v clusteru ulozˇena cˇa´st neˇktere´ho souboru nebo adresa´rˇe, v tabulce je na tomto mı´steˇidentifikace na´sledujı´cı´ho clusteru (tedy naprˇı´klad pro soubor cluster, ve ktere´m pokracˇuje, jde o zrˇeteˇzenı´). Jestlizˇe jde o poslednı´cluster souboru nebo adresa´rˇe (a proto zˇa´dny´cluster „nena´sleduje“), je v za´znamu FAT cˇı´slo 0xFFFF. Prˇı´klad 8.1 Soubor zacˇı´na´na clusteru s cˇı´slem 0x0021, pokracˇuje postupneˇna clusterech 0x0027, 0x0025, 0x0026, 0x0029. Cluster 0x0022 je posˇkozeny´, ostatnı´ azˇpo cluster 0x002A jsou volne´. FAT tabulka od za´znamu 21 po za´znam 2A vypada´takto:

Za´znam 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A Obsah 0027 FFF7 0000 0000 0026 0029 0025 0000 FFFF 0000

Tabulka 8.1: Prˇı´klad struktury FAT tabulky v souborove´m syste´mu FAT16 KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 108

Pokud chceme nacˇı´st urcˇity´soubor (nebo adresa´rˇ), musı´me prˇedneˇzna´t cˇı´slo clusteru, na ktere´m zacˇı´na´. V za´znamu ve FAT tabulce pro tento cluster zjistı´me, na ktere´m clusteru pokracˇuje, v jeho za´znamu najdeme cˇı´slo dalsˇı´ho cˇla´nku v rˇeteˇzci, atd. Rˇ eteˇzenı´clusteru˚mu˚zˇe by´t vy´hodou (organizace nezabı´ra´prˇı´lisˇmnoho mı´sta na disku), ale take´nevy´hodou (posˇkozenı´jednoho u´daje ve FAT vede k tomu, zˇe ztratı´me cely´zbytek souboru).

Datova´oblast. Pod tı´mto pojmem budeme rozumeˇt vsˇe, co je za FAT tabulkami, tedy root a clustery. Root obsahuje odkazy na adresa´rˇe, adresa´rˇe mohou podle stromove´struktury obsahovat odkazy na dalsˇı´adresa´rˇe nebo odkazy na soubory, root take´mu˚zˇe obsahovat soubory. Root take´mu˚zˇe obsahovat polozˇku typu label (popisek), ktery´prˇedstavuje jme´no disku (diskety). Zatı´mco beˇzˇny´ soubor obsahuje jaka´koliv data, adresa´rˇ se skla´da´ z polozˇek o de´lce 32 B popisujı´cı´ch soubory a podadresa´rˇe pro dany´ adresa´rˇ, v polozˇka´ch jsou evidova´ny na´sledujı´cı´informace: • na´zev souboru cˇi podadresa´rˇe (8 B), • prˇı´pona souboru (3 B), • pokud polozˇka prˇedstavuje label, tedy na´zev disku, tento na´zev zabı´ra´cely´ch prˇedchozı´ch 11 (8+3) B, • atributy (1 B), jednotlive´bity znamenajı´ xxADLSHR, kde

x volne´bity, nepouzˇı´vajı´se, A k archivaci, D directory – adresa´rˇ, L label – na´zev disku, atributu˚m prˇedcha´zı´samotny´na´zev, S syste´movy´, H skryty´, R pouze pro cˇtenı´.

• cˇas a datum vytvorˇenı´a datum poslednı´ho prˇı´stupu (3+2+2 B), • cˇas a datum poslednı´zmeˇny, tj. za´pisu do souboru nebo zmeˇny struktury adresa´rˇe (2+2 B), • prvnı´cluster souboru nebo adresa´rˇe (pro label nema´vy´znam, = 0) (2 B), • de´lka souboru nebo adresa´rˇe (pro label nema´vy´znam) (4 B), zbytek rezervo- va´n. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 109

Pokud naprˇı´klad je v neˇjake´m adresa´rˇi 5 podadresa´rˇu˚ a 2 soubory, najdeme v clusteru, ktery´je pro tento adresa´rˇprˇideˇlen, celkem 7 polozˇek, z nich 5 ma´atribut nastaven na 00010000 (pokud nenı´pro cely´adresa´rˇzapnuta archivace), zbyle´dveˇ polozˇky jsou odkazy na soubor a atribut mohou mı´t naprˇı´klad ve tvaru 00100000. Ve vsˇech 7 polozˇka´ch je du˚lezˇity´m u´dajem take´ to, co je ve vy´cˇtu uvedeno v prˇedposlednı´odra´zˇce, cluster, na ktere´m zacˇı´najı´data souboru nebo adresa´rˇe. Ve FAT tabulce pak nalezneme za´znam s tı´mto cˇı´slem a zjistı´me, jestli se jedna´ o poslednı´ cluster (obsahuje cˇı´slo 0xFFFF) nebo ktery´m clusterem posloupnost pokracˇuje. Velikost clusteru je pro disky velikosti od 512 MB do 1 GB stanovena na 16 kB, pro veˇtsˇı´(do 2 GB) na 32 kB. Uda´va´se, zˇe FAT16 nenı´pouzˇitelna´pro logicke´disky veˇtsˇı´nezˇ4 GB, a nenı´ prakticky pouzˇitelna´pro disky veˇtsˇı´nezˇ2 GB (pro max. velikost clusteru 32 kB, tedy 16 sektoru˚, ktera´je pouzˇita v DOSu a starsˇı´ch Windows s DOS ja´drem) nebo 4GB (ve Windows NT - umozˇnˇujı´vyuzˇı´t maxima´lnı´velikost clusteru 64 kB, tedy 32 sektoru˚).

8.4.2 VFAT a FAT32 VFAT je zkratka z Virtual FAT a je to na´stavba pro FAT16, ktera´k vlastnostem tohoto souborove´ho syste´mu prˇida´va´prˇedevsˇı´m podporu dlouhy´ch na´zvu˚souboru˚ (ty´ka´ se take´ delsˇı´ch prˇı´pon souboru˚, jako je trˇeba HTML) a mozˇnost pouzˇı´vat v na´zvech neˇktere´dalsˇı´znaky (jako trˇeba znaky na´rodnı´ch abeced nebo mezery). Jde o virtua´lnı´ovladacˇ, prˇes ktery´jde komunikace se syste´mem FAT16, najdeme ho od Windows 95. Tedy pokud ve Windows od te´to verze, v rˇadeˇNT od verze 3.5, pouzˇı´va´me FAT16, jde o VFAT. Tı´mto termı´nem by´va´take´oznacˇova´n syste´m FAT32, ktery´ma´podobne´vlastnosti, ale jizˇinterneˇ. Na´zev souboru nebo adresa´rˇe ve VFAT maxima´lneˇ255 znaku˚ , neˇktere´zdroje uva´deˇjı´, zˇe tato de´lka je vcˇetneˇcesty k souboru. Omezenı´je nutne´, protozˇe na´zev souboru (vı´ceme´neˇcˇasto vcˇetneˇcesty k souboru) je pouzˇı´va´n jako parametr mnoha funkcı´prˇi programova´nı´, musı´se vejı´t do pameˇt’ove´ho prostoru vymezene´ho da- ny´m datovy´m typem. Samotna´ podpora dlouhy´ch na´zvu˚ je realizova´na tak, zˇe pro delsˇı´ na´zev je vyuzˇita na´sledujı´cı´ polozˇka (polozˇky) v adresa´rˇi. Polozˇky adresa´rˇe majı´ trochu jinou formu, rozezna´va´me oproti trˇem typu˚m v pu˚vodnı´FAT cˇtyrˇi typy:

• polozˇky pro soubory, • polozˇky pro adresa´rˇe, KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 110

• polozˇky (-a) pro label (jmenovku) disku, • polozˇka pro rozsˇı´rˇeny´na´zev souboru nebo adresa´rˇe.

Polozˇka pro rozsˇı´rˇeny´na´zev souboru nebo adresa´rˇe ma´specifickou formu. De´lka je stejna´jako u ostatnı´ch (32 B), ale obsahuje neˇktere´dalsˇı´ parametry a 13 symbolu˚ pro rozsˇı´rˇeny´na´zev, stejneˇjako u souboru˚jsou tyto polozˇky zrˇeteˇzeny (ve FAT tabulce), na´sledujı´cı´polozˇka v rˇeteˇzci obsahuje dalsˇı´ch 13 znaku˚, . . . V pu˚vodnı´polozˇce souboru nebo adresa´rˇe je na´zev souboru pro DOS ve formeˇ 8.3 odvozeny´ z dlouhe´ho jme´na konverzı´ (vypusˇteˇnı´ mezer a dalsˇı´ch v DOSu „nedovoleny´ch znaku˚“, prˇı´padneˇjejich nahrazenı´, konec je odrˇı´znut a nahrazen identifikacı´rozlisˇujı´cı´soubory nebo adresa´rˇe se stejny´m zkra´ceny´m na´zvem. Microsoft uva´dı´, zˇe dlouhe´jme´no lze pouzˇı´t i pro label disku, ovsˇem rea´lneˇ mohou nastat proble´my s kompatibilitou disku pro ru˚zne´operacˇnı´syste´my.

FAT32 je pouzˇitelny´v operacˇnı´ch syste´mech Windows 95 OSR2, 98, ME, 2000, XP a noveˇjsˇı´ch. Verze Windows 95, Windows NT do 4.x vcˇetneˇa starsˇı´s nı´m nedoka´zˇou pracovat. FAT32 prˇejı´ma´vsˇechny vlastnosti VFAT vcˇetneˇpodpory dlouhe´na´zvy souboru˚. Lze nadefinovat ru˚znou velikost clusteru˚v rozmezi MIN - 16 (nebo 32) sektoru˚, podle verze Windows, kde hodnota MIN se rˇı´dı´velikostı´disku:

Velikost disku Nejmensˇı´velikost clusteru 512MB–8GB 4 kB 8GB–16GB 8 kB 16GB–32GB 16 kB 32GB–2TB 32 kB = 16 sektoru˚

Tabulka 8.2: Nejmensˇı´velikost clusteru pro souborovy´syste´m FAT32

Prˇi vytva´rˇenı´souborove´ho syste´mu tedy mu˚zˇeme volit kteroukoliv hodnotu v tomto rozmezi. Doporucˇuje se nevolit prˇı´lisˇnı´zkou hodnotu, protozˇe to zvysˇuje na´roky na spra´vu souborove´ho syste´mu (velka´FAT tabulka, pomaleji se v nı´hleda´), vysˇsˇı´nezˇpotrˇebna´hodnota zase nenı´vy´hodna´, pokud ma´me hodneˇmaly´ch sou- boru˚(kazˇdy´soubor zabı´ra´nejme´neˇjeden cluster). Proto se doporucˇuje zvolit neˇjaky´ vhodny´kompromis. FAT32 ma´oproti FAT16 tyto vy´hody:

• je mozˇne´ stanovit prˇi forma´tova´nı´ i mensˇı´ velikost clusteru, takzˇe pokud ma´me mnoho „maly´ch“ souboru˚, je disk optima´lneˇji vyuzˇit, KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 111

• je pouzˇitelna´pro disky veˇtsˇı´nezˇ2 GB (ale pro logicke´disky mensˇı´nezˇ512 MB ji nelze pouzˇı´t), • velikost FAT tabulky mu˚zˇe by´t jaka´koliv, interneˇse s nı´ zacha´zı´jako se sou- borem, proto je mozˇne´ji prodluzˇovat, • root se skla´da´z beˇzˇny´ch clusteru˚, mu˚zˇe by´t proto jakkoliv dlouhy´a takte´zˇ prˇesouva´n na jine´mı´sto, • syste´m reaguje rychleji a je le´pe chra´neˇn proti chyba´m, • podporuje dlouhe´na´zvy souboru˚.

Ve FAT tabulce se tedy nacha´zejı´za´znamy o clusterech a jde o 32bitova´cˇı´sla. Pokud jde o za´znamy urcˇujı´cı´, na ktere´m clusteru pokracˇuje soubor cˇi adresa´rˇ, ve skutecˇnosti jsou ulozˇeny v 28 bitech tohoto cˇı´sla, zbytek je opeˇt vyhrazen specia´lnı´m ko´du˚m. Naprˇı´klad:

• 0x00000000, 0x10000000, 0xF0000000 znamenajı´, zˇe cluster je volny´ (spodnı´ch 28 bitu˚je 0, zbyle´mohou obsahovat cokoliv), • 0x0FFFFFF7 je chybny´cluster, • 0xFFFFFFFF znamena´poslednı´cluster souboru nebo adresa´rˇe.

8.4.3 Souborovy´syste´m NTFS NTFS (New Technology File System) je zˇurna´lovacı´souborovy´ syste´m vyvinuty´pro Windows rˇady NT, byl pouzˇı´va´n jizˇv prvnı´ch verzı´ch (3.x). Hlavnı´m pozˇadavkem prˇi jeho vyvı´jenı´bylo zajisˇteˇnı´veˇtsˇı´bezpecˇnosti dat, prˇedevsˇı´m mozˇnost definova´nı´ prˇı´stupovy´ch pra´v pro ru˚zne´uzˇivatele. Je urcˇen pro velke´disky, lze ho pouzˇı´t i na male´disky, ale ne na diskety. V souborove´m syste´mu NTFS ma´me mozˇnost rˇı´dit prˇı´stup k souboru˚m a slozˇ- ka´m definova´nı´m prˇı´stupovy´ch pra´v pro ru˚zne´ uzˇivatele a skupiny. Kazˇde´mu souboru nebo slozˇce je prˇirˇazen Access Control List (ACL, seznam rˇı´zenı´prˇı´stupu) se seznamem uzˇivatelu˚a skupin a jejich prˇı´stupovy´mi pra´vy. Druhy prˇı´stupovy´ch pra´v jsou n (nenı´dovolen zˇa´dny´prˇı´stup), r (pra´vo cˇtenı´), w (take´pra´vo za´pisu), c (pra´vo zmeˇny), f (u´plne´rˇı´zenı´), vzˇdy pro urcˇite´ho uzˇivatele nebo skupinu. Prˇı´stupova´ pra´va se definujı´ v graficke´m rozhranı´ ve Vlastnostech souboru (slozˇky), karta Zabezpecˇenı´, nebo v Prˇı´kazove´m rˇa´dku prˇı´kazem cacls (existujı´ jesˇteˇdalsˇı´mozˇnosti). KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 112

Aby nebylo nutne´definovat plny´ACL pro kazˇdy´soubor nebo adresa´rˇ, prˇı´stu- pova´pra´va se mohou deˇdit. Pro urcˇenı´, jak ma´deˇdeˇnı´fungovat, se pouzˇı´va´u slozˇek parametr /t, ktery´zpu˚sobı´zmeˇnu i u podslozˇek zpracova´vane´slozˇky. U souboru˚, ktere´nejsou slozˇkami, se samozrˇejmeˇdeˇdeˇnı´nepouzˇı´va´. Kdyzˇprˇı´kazem cacls slozÏka vypı´sˇeme ACL te´to slozˇky,deˇdeˇnı´je zachyceno teˇmito zkratkami: OI platı´pro tuto slozˇku a vsˇechny soubory v nı´(ne pro podslozˇky), CI platı´pro tuto slozˇku a vsˇechny podslozˇky v nı´(ne pro soubory v nı´), IO neplatı´pro tuto slozˇku. Zkratky jsou ve vy´pisu zkombinova´ny takto: (OI)(CI) platı´pro tuto slozˇku a cely´jejı´obsah (podslozˇky i soubory), (OI)(CI)(IO) platı´pro cely´jejı´obsah – podslozˇky i soubory (ale ne pro samotnou slozˇku), (CI)(IO) platı´jen pro podslozˇky v nı´obsazˇene´, (OI)(IO) platı´jen pro soubory v nı´obsazˇene´.

Vlastnosti:

• Vsˇechno je soubor (tedy take´vsˇechny implicitnı´struktury na disku jsou im- plementova´ny jako specia´lnı´soubory). • Mozˇnost rˇı´dit prˇı´stup k souboru˚m a slozˇka´m definova´nı´m prˇı´stupovy´ch pra´v pro ru˚zne´uzˇivatele a skupiny. • Podpora na´sobny´ch proudu˚dat – kazˇdy´soubor mu˚zˇe obsahovat vı´ce datovy´ch proudu˚(nejme´neˇjeden). Jeden z nich je hlavnı´, nenı´pojmenova´n, jde vlastneˇ prˇı´mo o data souboru, ostatnı´proudy jsou pojmenovane´(naprˇı´klad stream s na´zvem STREAM5 u souboru SOUBOR.XYZ je SOUBOR.XYZ:STREAM5). V proudech mu˚zˇe by´t cokoliv, ve Windows 2000 se v sekunda´rnı´ch proudech naprˇı´klad ukla´da´autor a informace o obsahu souboru, celkoveˇ ale za´lezˇı´na programa´torovi aplikace vytva´rˇejı´cı´soubor. Datovy´proud mu˚zˇeme vytvorˇit naprˇı´klad pro dokumenty ve vlastnostech souboru, za´lozˇka Souhrn (nebo Vlastnı´). • Na´zvy souboru˚jsou v UNICODE (sice zaberou vı´ce mı´sta na disku, ale je mozˇne´pouzˇı´vat i znaky nepatrˇı´cı´do anglicke´na´rodnı´znakove´sady). • Mozˇnost indexace podle ru˚zny´ch typu˚dat (nejen na´zev souboru, ale take´prˇı´- stupova´ pra´va, cˇas vytvorˇenı´ souboru, . . . ), zrychluje vyhleda´va´nı´ dat na disku (NTFS implementuje vpodstateˇ databa´zove´ funkce). Indexace mu˚zˇe mı´t ale take´negativnı´efekt, protozˇe celkoveˇzpomaluje vy´konnost syste´mu KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 113

(udrzˇova´nı´indexu˚vyzˇaduje, aby prˇi kazˇde´zmeˇneˇurcˇity´ch u´daju˚byl zmeˇ- neˇn i indexovy´soubor). Pokud nastane tento proble´m, je mozˇne´ indexova´nı´ vypnout (vypneme sluzˇbu Indexing Services). • Dynamicke´prˇemapova´nı´vadny´ch sektoru˚ (vadny´sektor se nahradı´jiny´m, pokud jsou data redundantnı´, pak se prˇi posˇkozenı´zkopı´rujı´„ze za´lohy“). • Sˇifrova´nı´a komprese. Sˇifrova´nı´je podporova´no azˇod Windows 2000, pouzˇı´va´ EFS (Encrypting File System) zalozˇeny´na symetricky´ch klı´cˇı´ch, je prova´deˇno „za beˇhu“, prˇi pra´ci uzˇivatele. • Pevne´odkazy – tyto odkazy zu˚sta´vajı´funkcˇnı´i po prˇesunu objektu, na ktery´ ukazujı´(souboru, adresa´rˇe), ale narozdı´l od pevny´ch odkazu˚na Unixovy´ch souborovy´ch syste´mech nejsou rovnocenne´ s pu˚vodnı´m objektem. Mohou by´t definova´ny pouze v ra´mci jednoho svazku, a to naprˇı´klad prˇı´kazem fsutil hardlink create. • Rˇ ı´dke´soubory – soubory,ktere´obsahujı´rozsa´hlejsˇı´oblasti s nulovou informacˇnı´ hodnotou (oblasti vyplneˇne´0), mohou by´t ulozˇeny tak, zˇe tyto „pra´zdne´“ oblasti na disku nezabı´rajı´zˇa´dne´mı´sto.

V terminologii NTFS hovorˇı´me o logicky´ch discı´ch jako o svazcı´ch. Velikost (impli- citnı´) clusteru˚je stejneˇjako v FAT syste´mech odvozena od velikosti svazku podle tabulky (tab. 8.3 na str. 113), ale mu˚zˇeme prˇi vytva´rˇenı´souborove´ho syste´mu sta- novit prakticky jakoukoliv (uda´va´se do 64 kB, tj. 32 sektoru˚).

Velikost svazku Velikost clusteru 512 MB nebo me´neˇ 512 B 512MB-1GB 1 kB 1GB-2GB 2 kB 2 GB nebo vı´ce 4 kB

Tabulka 8.3: Velikost clusteru pro souborovy´syste´m NTFS

Na disku jsou mimo samotna´data take´implicitnı´struktury, ktere´zde oznacˇu- jeme jako metadata (jde o soubory). Jsou to naprˇı´klad:

$MFT (Master File Table) – obdoba FAT tabulky ve FAT syste´mech. Za´znam v te´to tabulce ma´obvykle 1 kB, ale mu˚zˇe by´t jakkoliv prodlouzˇen. Najdeme zde za´znamy pro vsˇechny soubory na disku (MFT je take´soubor, proto jsou zde informace i o nı´), v kazˇde´m za´znamu je prˇedevsˇı´m odkaz za umı´steˇnı´zacˇa´tku souboru, bezpecˇnostnı´nastavenı´, atributy, . . . KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 114

$LOGFILE – log soubor (zˇurna´l), do ktere´ho se ukla´dajı´transakcˇnı´informace. $BITMAP – je to pole bitu˚, pro kazˇdy´cluster na disku je zde vyhrazen jeden bit. Pokud je bit nastaven na 0, je cluster volny´, 1 znamena´, zˇe je obsazeny´. $BADCLUS – obdobny´m zpu˚sobem jsou zachyceny vadne´clustery. Atd.

V beˇzˇny´ch souborovy´ch manazˇerech, ve ktery´ch pracujeme se soubory, jsou tyto specia´lnı´soubory neviditelne´, i kdyzˇexistuje zpu˚sob, jak je zviditelnit (prˇes Prˇı´kazovy´rˇa´dek). Neviditelne´jsou take´vsˇechny datove´proudy souboru kromeˇ hlavnı´ho, zobrazovana´de´lka souboru se take´ty´ka´hlavnı´ho proudu, takzˇe po sma- za´nı´jednoho male´ho souboru by se teoreticky mohlo sta´t, zˇe na disku je najednou o neˇkolik kB vı´ce volne´ho mı´sta. NTFS se bra´nı´fragmentaci tak, zˇe pro ulozˇenı´souboru hleda´ vzˇdy ne nejblizˇsˇı´, ale nejblizˇsˇı´vhodnou posloupnost navazujı´cı´ch clusteru˚ (ve ktere´je tolik mı´sta, zˇe se tam soubor vejde, obdoba metody BestFit pro operacˇnı´pameˇt’, viz kap. 3.3, str. 32), takzˇe fragmentace vznika´pouze tehdy, kdyzˇje na disku prˇı´lisˇma´lo volne´ho mı´sta (nenı´zˇa´dna´„vhodneˇvelka´“ posloupnost clusteru˚) nebo kdyzˇje soubor po zmeˇneˇ prodlouzˇen a za jeho clustery nenı´volny´cluster. Fragmentace by byla proble´mem prˇedevsˇı´m u MFT, protozˇe ta se mu˚zˇe libovolneˇprodluzˇovat s tı´m, jak roste pocˇet a de´lka v nı´obsazˇeny´ch za´znamu˚. NTFS to rˇesˇı´tak, zˇe kolem MFT necha´va´neˇktere´ clustery volne´, nedovoluje nikomu je zabrat a vyhrazuje je pro MFT. NTFS ve sve´implicitnı´podobeˇsnizˇuje vy´kon syste´mu. Na rychlejsˇı´ch pocˇı´tacˇı´ch to nevadı´, ale jinak existujı´ zpu˚soby, jak jeho pra´ci zrychlit. Uzˇitecˇny´ a celkem logicky´je tento zpu˚sob: NTFS i prˇi procha´zenı´adresa´rˇovou strukturou aktualizuje datum a cˇas poslednı´ho prˇı´stupu. To mu˚zˇeme vypnout tak, zˇe v registru najdeme hodnotu NtfsDisableLastAccessUpdate a zmeˇnı´me ji na 1.

8.4.4 Srovna´nı´souborovy´ch syste´mu˚pro Windows FAT16, FAT32 a NTFS majı´sve´vy´hody i nevy´hody, podle nich se rozhodujeme, ktery´souborovy´syste´m zvolı´me na urcˇity´logicky´disk. Obecneˇplatı´, zˇe pokud volı´me ten souborovy´syste´m, se ktery´m doka´zˇe pracovat pouzˇity´operacˇnı´syste´m, a pokud ma´me na pocˇı´tacˇi vı´ce operacˇnı´ch syste´mu˚, na prvnı´m logicke´m disku (podle terminologie Windows disk C) volı´me ten souborovy´ syste´m, se ktery´m doka´zˇou pracovat vsˇechny operacˇnı´syste´my (obvykle to by´va´ FAT16 nebo FAT32, pokud ma´me Win98, Win2000 a Linux, pouzˇijeme na C FAT32 a tam taky nainstalujeme Win98, pokud ma´me Win95 starsˇı´nebo Win3x a cokoliv jine´ho, musı´me mı´t na disku C FAT16). KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 115

Pouzˇitelnost jednotlivy´ch souborovy´ch syste´mu˚v ru˚zny´ch operacˇnı´ch syste´- mech je v tabulce 8.4. Pro velikost logicke´ho disku a maxima´lnı´mozˇnou velikost souboru platı´tabulka 8.5.

Podporova´no v OS FAT16 DOS (samotny´), vsˇechny verze Windows vcˇetneˇNT, Linux FAT32 Windows 95 OSR2, 98, ME, 2000, XP, Linux NTFS Windows rˇady NT (vcˇetneˇ2000 a XP), Linux neˇkdy pouze pro cˇtenı´

Tabulka 8.4: Podpora souborovy´ch syste´mu˚v ru˚zny´ch verzı´ch Windows

Max. velikost Pocˇet Max. Max. de´lka Max. pocˇet disku clusteru˚ objektu˚ souboru souboru˚ v rootu FAT16 2(4vNT)GB max. 216 512 4GBbez1B 216 FAT32 512 MB - 2 TB min. 216 65 534 232 Bbez1B te´meˇrˇ232 (XP: do 32 GB) NTFS 264 − 1 264 Bbez1kB 232 − 1 (XP: 232 − 1) (XP: 244 B bez 64 kB)

Tabulka 8.5: Srovna´nı´souborovy´ch syste´mu˚pro Windows

8.5 Souborove´syste´my pro Linux

8.5.1 VFS Linux pracuje s virtua´lnı´m souborovy´m syste´mem VFS (Virtual File System), prˇes ktery´jsou prˇı´stupne´vsˇechny „rea´lne´“ souborove´syste´my na pocˇı´tacˇi. Jde o vrstvu ja´dra operacˇnı´ho syste´mu, prˇes kterou jdou vsˇechna vola´nı´diskovy´ch sluzˇeb, za- strˇesˇuje souborove´ syste´my na vsˇech svazcı´ch a discı´ch prˇı´tomny´ch v syste´mu (vcˇetneˇdisket a CD) a v prˇı´padeˇpotrˇeby prˇeda´va´rˇı´zenı´(le´pe rˇecˇeno pozˇadavky) vzˇdy konkre´tnı´mu souborove´mu syste´mu, se ktery´m se pracuje. Prˇes VFS uzˇivatel jednotneˇprˇistupuje take´ke vsˇem zarˇı´zenı´m a vsˇe je zahrnuto v jedne´adresa´rˇove´ strukturˇe s jediny´m korˇenem (root). Pokud chceme disk (prˇı´p. svazek) pouzˇı´vat, musı´me ho prˇipojit (mount) do VFS bud’ v graficke´m rozhranı´nebo v konzole prˇı´kazem mount. Syste´movy´disk KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 116

je prˇipojen uzˇprˇi startu syste´mu, o ten se tedy nemusı´me starat, ostatnı´svazky na pevny´ch discı´ch obvykle take´by´vajı´prˇipojeny automaticky (za´lezˇı´na distribuci). Prˇipojit je trˇeba vy´meˇnna´me´dia (disketa, CD-ROM), v graficke´m prostrˇedı´je to opeˇt veˇtsˇinou rˇesˇeno automaticky trˇeba prˇi poklepa´nı´na ikonu diskety. Disk, ktery´ nepouzˇı´va´me, musı´me odpojit (viz cvicˇenı´). V Linuxu se na pevny´ch discı´ch nejcˇasteˇji pouzˇı´vajı´souborove´syste´my ext3fs a ReiserFS, mu˚zˇeme pouzˇı´vat take´souborove´syste´my Windows a jiny´ch operacˇnı´ch syste´mu˚, jsou mapova´ny pod teˇmito na´zvy: msdos – kompatibilnı´s FAT12 nebo FAT16 bez VFAT, vfat – obvykle se pouzˇı´va´pro FAT32 nebo FAT16 s na´stavbou VFAT, ntfs – kompatibilnı´s NTFS Windows NT, implicitneˇje nastavena cˇasto pouze mozˇnost cˇtenı´, iso9660 – CD-ROM, hpfs – kompatibilnı´s HPFS v OS/2, a dalsˇı´. Souborovy´m syste´mem je take´linux swap, ktery´je urcˇen pro swap partition. V Unixu a Linuxu platı´, zˇe „vsˇechno je soubor“ (snad kromeˇuzˇivatele :-), tedy i adresa´rˇe, se zarˇı´zenı´mi se take´ pracuje jako se soubory. Prˇi komunikaci mezi procesy pouzˇı´va´me take´ specia´lnı´ komunikacˇnı´ kana´ly nazy´vane´ roury (pipes), ktere´se implementujı´pomocı´souboru˚, ale pracujı´obvykle pouze v operacˇnı´pameˇti.

8.5.2 Souborove´syste´my typu extxfs ext2fs: Partition se souborovy´m syste´mem je rozdeˇlena na bloky, jejichzˇvelikost je mozˇne´ prˇedem stanovit (obvykle 1024, 2048 nebo 4096 B). Prvnı´ tento blok, bootblok, na syste´move´m svazku obsahuje zava´deˇcı´program, na jiny´ch svazcı´ch zu˚sta´va´nepouzˇit. Dalsˇı´bloky jsou rozdeˇleny do skupin bloku˚. Kazˇda´skupina obsahuje specia´lnı´ blok, tzv. superblok, s informacemi o souborove´m syste´mu jako celku (naprˇı´klad velikost souborove´ho syste´mu, pocˇet i-uzlu˚– viz da´le, pocˇet bloku˚, . . . ), na´sleduje blok s popisem te´to skupiny, bloky zaznamena´vajı´cı´ obsazenost bloku˚ a i-uzlu˚, tabulka i-uzlu˚a pak teprve bloky s daty. To, zˇe du˚lezˇite´ informace o syste´mu jsou prˇı´tomny v kazˇde´ skupineˇ, a tedy vlastneˇ za´lohova´ny, umozˇnˇuje nejen efektivneˇjsˇı´ pra´ci v syste´mu, ale take´ je to bezpecˇneˇjsˇı´. V tabulce 8.6 na str. 117 je zachyceno, jak mu˚zˇe vypadat struktura partition s ext2, ktera´je dlouha´20 MB s de´lkou bloku 1024 B. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 117

Zacˇa´tek Pocˇet Popis (cˇ. bloku) bloku˚ 0 1 boot blok skupina bloku˚0 1 1 superblok 2 1 popis skupiny bloku˚ 3 1 bitmapa pouzˇity´ch bloku˚ve skupineˇ(pro kazˇdy´blok 1 bit, pokud = 0, volny´) 4 1 bitmapa pouzˇity´ch i-uzlu˚skupiny, bit urcˇite´ho i-uzlu na- jdeme podle jeho indexu v tabulce i-uzlu˚ 5 214 tabulka i-uzlu˚, obsahuje cesty k jednotlivy´m i-uzlu˚m, tedy i-uzel je identifikova´n indexem v te´to tabulce 219 7974 bloky s daty skupina bloku˚1 8193 1 superblok – za´loha 8194 1 popis skupiny bloku˚ 8195 1 bitmapa pouzˇity´ch bloku˚ve skupineˇ 8196 1 bitmapa pouzˇity´ch i-uzlu˚skupiny 8197 214 tabulka i-uzlu˚ 8408 7974 bloky s daty skupina bloku˚2 16385 1 superblok – za´loha 16386 1 popis skupiny bloku˚ 16387 214 tabulka i-uzlu˚ 16601 3879 bloky s daty

Tabulka 8.6: Struktura partition se souborovy´m syste´mem ext2fs

Jak je videˇt, neˇktere´cˇa´sti skupiny bloku˚jsou nepovinne´ (naprˇı´klad bitmapa pouzˇity´ch bloku˚). To, jestli je ve skupineˇprˇı´tomna urcˇita´ cˇa´st, a take´na ktere´m mı´steˇ v pameˇti, se mu˚zˇeme doveˇdeˇt v popisu skupiny bloku˚(za superblokem), pozici cele´skupiny a popisu skupiny najdeme v superbloku (samozrˇejmeˇktere´mkoliv). Nejdu˚lezˇiteˇjsˇı´m pojmem pro Unixove´souborove´syste´my je i-node (i-uzel). I-uzel je struktura obsahujı´cı´du˚lezˇite´informace o souboru (ID vlastnı´ka, de´lka souboru, cˇas poslednı´ho za´pisu, cˇas poslednı´ho otevrˇenı´, cˇas vytvorˇenı´, . . . ) a od- kazy na 15 bloku˚. Z nich • 12 bloku˚obsahuje data souboru (1. u´rovenˇ) • 13. blok mu˚zˇe obsahovat odkazy na dalsˇı´bloky, ve ktery´ch jsou ulozˇena data souboru (2. u´rovenˇ) KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 118

• 14. blok mu˚zˇe obsahovat odkazy na bloky obsahujı´cı´odkazy na bloky s daty (3. u´rovenˇ) • 15. blok mu˚zˇe obsahovat odkazy na bloky obsahujı´cı´odkazy na bloky s od- kazy na bloky s daty (4. u´rovenˇ).

Prˇedpokla´dejme, zˇe pro adresy se pouzˇı´va´32 bitu˚, tedy 4B, a de´lka bloku je 1024 B (1 kB). Soubor pouzˇije bloky jen po tu u´rovenˇ, ktera´mu stacˇı´.

• prvnı´u´rovenˇstacˇı´pro soubory s de´lkou do 12288 B (12*1024 B), tj. 12 kB, alokova´no je 1 - 12 bloku˚podle potrˇeby, • druha´u´rovenˇstacˇı´pro soubory s de´lkou do 12 kB + 256*1024 B = 268 kB, • trˇetı´u´rovenˇstacˇı´pro soubory s de´lkou do 268 kB + 256*256*1024 B = 65804 kB=64MBa268kB, • cˇtvrta´u´rovenˇstacˇı´pro soubory s de´lkou do 65804 kB + 256*256*256*1024 B = 16GBa64MBa268kB.

Tento prˇı´klad je pouze ilustrativnı´, ve skutecˇnosti je tato struktura jesˇteˇ trochu slozˇiteˇjsˇı´a samozrˇejmeˇmu˚zˇe by´t zvolena jina´velikost bloku˚nezˇ1024 B. Obra´zek 8.2 na straneˇ8.2 je zkra´cenou uka´zkou struktury souboru v souboro- ve´m syste´mu ext2. Kazˇdy´ adresa´rˇ mu˚zˇe obsahovat soubory nebo dalsˇı´adresa´rˇe. Adresa´rˇe jsou speci- a´lnı´soubory obsahujı´cı´seznam za´znamu˚promeˇnne´de´lky. Kazˇdy´za´znam obsahuje cˇı´slo i-uzlu, de´lku za´znamu, na´zev souboru a de´lku souboru. Za´znamy jsou pro- meˇnne´de´lky, aby bylo mozˇne´pouzˇı´vat dlouhe´na´zvy souboru˚- pokud bychom meˇli pevneˇdanou de´lku za´znamu, bylo by hodneˇmı´sta v pameˇti nevyuzˇite´ho. Adresa´rˇe, stejneˇjako kazˇda´jina´struktura na partition, je take´cha´pa´n jako soubor, proto ma´svu˚j i-uzel a mu˚zˇe by´t rozprostrˇen ve vı´ce blocı´ch stejneˇjako jine´soubory. Mu˚zˇeme pouzˇı´vat take´ odkazy (links). U pevne´ho odkazu (hard link) neˇkolik na´zvu˚souboru mu˚zˇe by´t asociova´no s jedi- ny´m i-uzlem a tedy vsˇechny ukazujı´na tenty´zˇfyzicky´soubor. U kazˇde´ho i-uzlu je informace o pocˇtu odkazu˚, prˇi maza´nı´souboru je soubor fyzicky smaza´n azˇtehdy, kdyzˇtento pocˇet klesne na 0, tedy kdyzˇjsou uzˇsmaza´ny vsˇechny odkazy. Vsˇechny pevne´odkazy na jeden soubor majı´stejnou du˚lezˇitost, zˇa´dny´z nich nenı´hlavnı´. Pevne´odkazy majı´neˇktera´omezenı´, ktera´majı´prˇedevsˇı´m zajistit, aby v grafu adresa´rˇove´ struktury nevznikl cyklus: pevny´ odkaz nesmı´ ukazovat na adresa´rˇ kromeˇsebe sama a nadrˇı´zene´ho adresa´rˇe (to jsou odkazy . a ..), a take´nesmı´uka- zovat na objekty, ktere´jsou v jine´m souborove´m syste´mu (trˇeba na jine´partition). KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 119

data Data i-uzel  data v prvnı´u´rovni  info

. . . Data Data  B B v druhe´u´rovni v trˇetı´u´rovni BN B data ¨* data . . . B ¨¨ ¨ BN data ¨ ¨¨ : data ¨  ¨  B 1 ¨  . . .  CB   : H . . . C B   @ H C B  H BN   . . . @ Hj data C @ Data C @R data v trˇetı´u´rovni CCW . . . Z H Z HH Z HH Z Hj . . . Z ZZ~ . . . Z HH Z H Z H Z HHj . . . Z ZZ~ . . . Z HH Data Z H v cˇtvrte´u´rovni Z HH Z Hj Z data Z Z~ data

Obra´zek 8.2: Struktura souboru v souborove´m syste´mu ext2fs

Symbolicke´odkazy (soft link) jsou obdobou Za´stupcu˚u Windows syste´mu˚, ob- sahujı´(v textove´podobeˇ) u´daj o umı´steˇnı´souboru, na ktery´odkazujı´. Vy´hodou je odboura´nı´omezenı´vynuceny´ch u pevny´ch odkazu˚, symbolicky´odkaz mu˚zˇe ukazovat na jaky´koliv uzel v adresa´rˇove´strukturˇe vcˇetneˇuzlu˚jiny´ch souborovy´ch syste´mu˚. Volny´prostor je evidova´n v rˇeteˇzove´m seznamu, jehozˇstruktura je podobna´ i- uzlu˚m. V jednom z bloku˚skupiny bloku˚je pole, jehozˇprvky odkazujı´na volne´ bloky; pokud je teˇchto bloku˚vı´ce nezˇje kapacita pole, potom jeden prvek tohoto pole ukazuje na blok, ktery´obsahuje odkazy na volne´bloky, . . . Obdobneˇjsou evidova´ny take´vsˇechny i-uzly dane´ho bloku. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 120

Pro ext2fs se uda´va´, zˇe je pouzˇitelny´pro disky azˇdo 4 TB. Podporuje dlouhe´ na´zvy souboru˚ (azˇ do 255 znaku˚, ale tento limit je mozˇne´ posunout jesˇteˇ da´le, pokud je potrˇeba). Tento souborovy´syste´m se vsˇak dnes uzˇprakticky nepouzˇı´va´, jeho na´stupcem je ext3fs. Ma´ smysl pouze tam, kde je rychlost du˚ lezˇiteˇjsˇı´ nezˇ zachova´nı´konzistence dat prˇi jejich zmeˇna´ch, protozˇe je o neˇco rychlejsˇı´nezˇext3fs (tj. pro ty adresa´rˇe, jejichzˇobsah se prakticky nemeˇnı´, ale cˇasto nebo na dlouhy´ cˇasovy´okamzˇik se k nim prˇistupuje, naprˇ. /boot).

ext3fs je vylepsˇenı´m ext2fs. Je zpeˇtneˇkompatibilnı´(prˇesneˇji kompatibilnı´v obou smeˇrech), zachova´va´vsˇechny struktury ext2, ale navı´c jde o zˇurna´lovacı´soubo- rovy´syste´m (Journal File System). Pokud ma´me na partition souborovy´syste´m ext2, stacˇı´vytvorˇit zˇurna´lovacı´soubor a prˇi nove´inicializaci syste´mu mu˚zˇeme par- tition prˇipojit jako ext3, a naopak, pokud ma´me partition nadefinovanou jako ext3, mu˚zˇeme ji prˇi dalsˇı´m startu syste´mu prˇipojit jako ext2.

8.5.3 Dalsˇı´zˇurna´lovacı´souborove´syste´my ReiserFS je dalsˇı´m z pouzˇı´vany´ch Linuxovy´ch souborovy´ch syste´mu˚. Implicitneˇ ho volı´instalace neˇktery´ch distribucı´, naprˇı´klad Debian nebo SUSE (RedHat a Man- drake zase prosazujı´spı´sˇe ext3). Je to zˇurna´lovacı´souborovy´syste´m, tedy prˇi vy´padku je veˇtsˇı´pravdeˇpodobnost, zˇe data na disku zu˚stanou konzistentnı´. ReiserFS je zalozˇen na rychle´m balancovane´m stromu, cozˇzrychluje pra´ci s vel- ky´m mnozˇstvı´m souboru˚ v adresa´rˇi. Dalsˇı´ vy´bornou vlastnostı´ je, zˇe je mozˇne´ ulozˇit neˇkolik maly´ch souboru˚(nebo zbytku˚velky´ch souboru˚, ktere´se nevesˇly do cely´ch bloku˚) do jednoho bloku (jine´souborove´syste´my vcˇetneˇext2, ext3, FAT, NTFS kazˇdy´blok vyhrazujı´pro urcˇity´soubor, soubor mu˚zˇe mı´t vı´ce bloku˚, ale ne naopak), takzˇe na disku nevznika´zbytecˇneˇmnoho velky´ch „nedosazˇitelny´ch“ deˇr. Nevy´hodou je mozˇnost snı´zˇenı´vy´konu syste´mu, ktery´tento souborovy´syste´m cˇa´stecˇneˇvylepsˇuje ru˚zny´mi technikami pouzˇı´vany´mi v databa´zovy´ch syste´mech. Pro syste´m, kde pracujeme prˇedevsˇı´m s velmi maly´mi soubory, je to vsˇak dobra´ volba. Dalsˇı´zajı´mavou vlastnostı´je mozˇnost zmeˇny velikosti partition s tı´mto soubo- rovy´m syste´mem, a to dokonce bez nutnosti odmontova´nı´syste´mu (jisteˇjsˇı´je ale syste´m prˇedem odpojit a po zmeˇneˇznovu prˇipojit). Pra´ci syste´mu lze zrychlit take´volbou urcˇity´ch parametru˚ prˇi prˇipojova´nı´disku (obvykle v souboru fstab), naprˇı´klad volba notail zaka´zˇe ukla´da´nı´koncu˚vı´ce KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 121

souboru˚do jednoho bloku. Tı´m sice ztratı´me cˇa´st mı´sta na disku (v dobeˇbeˇzˇneˇ pouzˇı´vany´ch 80GB disku˚to nenı´zase azˇtakova´hru˚za), ale syste´m se zrychlı´.

XFS je zˇurna´lovacı´souborovy´syste´m, ktery´se svy´mi prˇı´stupovy´mi algoritmy snı´zˇit zatı´zˇenı´syste´mu zpu˚sobene´pouzˇı´vanı´m zˇurna´lova´nı´. Navı´c je to 64-bitovy´ souborovy´syste´m (adresa je ulozˇena v 64 bitech, narozdı´l od jinde obvykly´ch 32 bitu˚), takzˇe velikost souboru a velikost cele´ho souborove´ho syste´mu mu˚zˇe by´t u´ctyhodna´. Ma´mnoho zajı´mavy´ch vlastnostı´, jedna z nich je realtime subvolume, ktera´do- voluje procesu˚m rezervovat si k souboru prˇı´stupove´pa´smo v urcˇite´sˇı´rˇi (B/s). To je velmi prakticke´naprˇı´klad prˇi pra´ci s multime´dii, kdy k souboru (naprˇ. s videem) potrˇebujeme sta´ly´a rychly´prˇı´stup. Zˇ urna´lova´na jsou metadata (to zvysˇuje rychlost prˇi zjisˇt’ova´nı´a opraveˇchyb), ale ne samotna´data, takzˇe celkoveˇje tento souborovy´syste´m povazˇova´n za me´neˇ bezpecˇny´nezˇext3fs nebo ReiserFS.

8.5.4 Virtua´lnı´souborove´syste´my V Linuxu stejneˇjako v jiny´ch Unixovy´ch syste´mech se pouzˇı´vajı´i souborove´sys- te´my bez vazby na konkre´tnı´datove´me´dium (prˇı´padneˇv sobeˇsdruzˇujı´prˇı´stup k vı´ce ru˚zny´m datovy´m me´diı´m). Jsou to prˇedevsˇı´m procfs a devfs. procfs zprˇı´stupnˇuje vesˇkere´informace ty´kajı´cı´se ja´dra, slouzˇı´ke komunikaci s ja´- drem syste´mu. Neodpovı´da´zˇa´dne´mu fyzicke´mu datove´mu me´diu, je prˇipojova´n do adresa´rˇe /proc. Z hlediska uzˇivatele jsou zajı´mave´prˇedevsˇı´m jeho podadre- sa´rˇe, jejichzˇna´zvy jsou PID vsˇech beˇzˇı´cı´ch procesu˚(v takove´m adresa´rˇi jsou vsˇechny du˚lezˇite´informace o procesu, jehozˇPID je na´zvem adresa´rˇe). devfs je virtua´lnı´souborovy´syste´m typicky´pra´veˇpro Linux, ktery´spravuje spe- cia´lnı´soubory zarˇı´zenı´ulozˇene´v adresa´rˇi /dev.

Dalsˇı´: Nejdu˚lezˇiteˇjsˇı´virtua´lnı´souborovy´syste´m uzˇzna´me, je to VFS. Je to du˚le- zˇita´soucˇa´st ja´dra syste´mu, prˇes kterou procesy komunikujı´ s konkre´tnı´mi soubo- rovy´mi syste´my. Existujı´vsˇak i dalsˇı´virtua´lnı´souborove´syste´my slouzˇı´cı´ru˚zny´m u´cˇelu˚m, majı´prˇedevsˇı´m zjednodusˇit prˇı´stup k ru˚zny´m virtua´lnı´m zarˇı´zenı´m. KAPITOLA 8 PAMEˇ TˇOVA´ ME´ DIA 122

8.5.5 Srovna´nı´Linuxovy´ch souborovy´ch syste´mu˚ Pod Linuxem mu˚zˇeme pouzˇı´vat samozrˇejmeˇi dalsˇı´souborove´syste´my, zde jsme mluvili pouze o nejpouzˇı´vaneˇjsˇı´ch souborovy´ch syste´mech pro loka´lnı´disky. Nelze rˇı´ci, ktery´z uvedeny´ch souborovy´ch syste´mu˚je lepsˇı´nebo horsˇı´, kazˇdy´ma´sve´ vy´hody i nevy´hody. Vy´hodou mu˚zˇe by´t zˇurna´lova´nı´, ktere´ ale mu˚zˇe (nemusı´) snizˇovat vy´kon syste´mu, bohuzˇel i u zˇurna´lovacı´ch souborovy´ch syste´mu˚se sta´va´, zˇe se prˇi vy´padku data ztratı´, i kdyzˇne tak cˇasto jako u syste´mu˚bez zˇurna´lu. V na´sledujı´cı´ tabulce je porovna´nı´ syste´mu˚ podle krite´riı´, ktera´ prˇı´mo v ka- pitola´ch uva´deˇna nebyla (u´daje jsou pouze orientacˇnı´, cˇı´sla jsou bohuzˇel ru˚zna´ v ru˚zny´ch zdrojı´ch):

ext2fs ext3fs ReiserFS XFS Max. velikost partition 4 TB 4 TB 16 TB *) 18∗210 PB Velikost bloku 1-4kB 1-4kB azˇ64 kB 512 B - 64 kB Max. velikost souboru 2 GB 2 GB azˇ210 PB *) 9∗210 PB *) za´lezˇı´na verzi souborove´ho syste´mu

Tabulka 8.7: Srovna´nı´vlastnostı´souborovy´ch syste´mu˚pro Linux

PB znamena´PentaByte, 1 PB = 1024 TB (podle jiny´ch zdroju˚= 1000 TB). Udane´ hodnoty je vsˇak nutne´bra´t s rezervou, na tom, jak velke´soubory mu˚zˇe souborovy´ syste´m ukla´dat, za´lezˇı´take´na VFS. KAPITOLA 9

Spra´va disku˚

V te´to kapitole se budeme podrobneˇji zaby´vat spra´vou disku˚ prˇedevsˇı´m z hlediska instalace a provozu operacˇnı´ch syste´mu˚. Uka´zˇeme si, jakou strukturu ma´pevny´disk, pod jaky´mi na´zvy se k disku˚m prˇistupuje v ru˚zny´ch operacˇnı´ch syste´mech, jake´na´stroje pouzˇı´va´me pro spra´vu disku˚, ktere´zavadeˇcˇe operacˇnı´ch syste´mu˚je vhodne´volit pro ru˚zne´konfigurace hardwaru a instalovany´ch operacˇnı´ch syste´mu˚, a na za´veˇr se podı´va´me na mozˇnosti instalace vı´ce operacˇnı´ch syste´mu˚vedle sebe nebo jejich emulaci.

9.1 Proble´my s BIOSem

Prˇı´stup k disku pu˚vodneˇ probı´hal prˇes sluzˇby BIOSu. BIOS ve sve´ standardnı´ (starsˇı´) podobeˇvsˇak nedoka´zˇe zprˇı´stupnit cˇa´sti disku nad 8 GB (1024 cylindru˚), proto v tomto starsˇı´m BIOS rozhranı´nemohou by´t pouzˇı´va´ny veˇtsˇı´disky. To se ty´ka´disku˚s rozhranı´m IDE, disky s rozhranı´m SCSI tento proble´m nemajı´. Noveˇjsˇı´rozhranı´BIOSu jizˇnabı´zı´prˇı´stup nad tuto hranici (pouzˇı´va´technologii LBA – Logical Block Addressing), nenı´vsˇak zpeˇtneˇkompatibilnı´a operacˇnı´syste´my vyvinute´bez podpory tohoto noveˇjsˇı´ho rozhranı´nemohou tyto sluzˇby vyuzˇı´vat. Ty´ka´se to naprˇı´klad MS-DOSu a Windows s DOS ja´drem (starsˇı´ch verzı´). Noveˇjsˇı´operacˇnı´syste´my proble´my s BIOSem rˇesˇı´prˇedevsˇı´m tak, zˇe pro prˇı´stup na disk pouzˇı´vajı´mı´sto sluzˇeb BIOSu vlastnı´ovladacˇe. BIOS je ale potrˇeba prˇed vlastnı´m zavedenı´m takove´ho operacˇnı´ho syste´mu, proto (teoreticky) zava´deˇcı´za´- znam operacˇnı´ho syste´mu musı´by´t na prvnı´ch 1024 cylindrech1.

1Da´se to rˇesˇit volbou vhodne´ho zavadeˇcˇe syste´mu, viz da´le.

123 KAPITOLA 9 SPRA´VA DISKU˚ 124

9.2 Za´kladnı´pojmy

Jeden fyzicky´disk mu˚zˇe by´t rozdeˇlen na vı´ce oddı´lu˚ (partitions, oblastı´, svazku˚, . . . ). Oddı´ly mohou by´t prima´rnı´ (primary partition), jeden z nich mu˚zˇe by´t oznacˇen jako rozsˇı´rˇeny´ (extended partition) a da´le rozdeˇlen na prakticky jake´koliv mnozˇstvı´ oddı´lu˚– „pododdı´lu˚“, ktere´nazy´va´me logicke´disky. Na kazˇde´m oddı´lu mu˚zˇe by´t nainstalova´n operacˇnı´syste´m (pak jde o bootovacı´oddı´l) nebo to mu˚zˇe by´t datovy´ oddı´l (bez operacˇnı´ho syste´mu). Dnes existujı´dva za´kladnı´druhy disku˚: beˇzˇne´disky MBR (Master Boot Record) a disky s deˇlenı´m GPT (GUID Partition Table) pouzˇı´vane´na platformeˇItanium (pro 64-bitove´servery, na desktopu momenta´lneˇprˇı´stupne´ pouze z Windows XP 64-bit). MBR disky mohou mı´t maxima´lneˇ4 prima´rnı´oddı´ly, z nichzˇjeden mu˚zˇe by´t oznacˇen jako rozsˇı´rˇeny´, v neˇm lze vytvorˇit jaky´koliv pocˇet logicky´ch disku˚. GPT disky majı´trochu jinou strukturu, mohou obsahovat azˇ128 oddı´lu˚(rozsˇı´rˇene´oddı´ly a logicke´disky nejsou pouzˇı´va´ny). Da´le se budeme veˇnovat pouze MBR disku˚m. Na platformeˇWindows lze pouzˇı´vat tzv. dynamicke´svazky. Tato technologie je vsˇak obecneˇ prˇı´stupna´ pouze z Windows, nikoliv z jiny´ch operacˇnı´ch syste´mu˚, proto pokud chceme mı´t takto upravene´oddı´ly disku prˇı´stupne´ naprˇ. z Linuxu, nedoporucˇuje se pouzˇı´t pro neˇtento forma´t2. Dynamicky´svazek nemusı´by´t fy- zicky souvisly´, mu˚zˇe se dokonce rozkla´dat na vı´ce pevny´ch discı´ch. Pro spra´vu se pouzˇı´va´skryta´databa´ze. Dynamicke´disky podporujı´prokla´da´nı´, zrcadlenı´a dalsˇı´ optimalizacˇnı´a bezpecˇnostnı´funkce3. Pevny´disk, na ktere´m jsou neˇjake´dynamicke´ svazky, se nazy´va´ dynamicky´disk.

9.3 Struktura disku

Na obra´zku 9.1 je naznacˇena struktura disku, ktery´byl rozdeˇlen takto: nejdrˇı´v jsme vytvorˇili dva prima´rnı´oddı´ly, pak rozsˇı´rˇeny´oddı´l, a potom dalsˇı´prima´rnı´oddı´l. Pak jsme v rozsˇı´rˇene´m oddı´lu vytvorˇili postupneˇtrˇi logicke´oddı´ly. Postupneˇsi popı´sˇeme neˇktere´cˇa´sti te´to struktury.

2Ve skutecˇnosti se dynamicke´ disky pouzˇı´vajı´ i v Unixovy´ch syste´mech, ale v trochu jine´m vy´znamu – vı´ce pevny´ch disku˚spojeny´ch do RAID pole se specificky´m rˇı´zenı´m prˇı´stupu. 3Tyto funkce lze vsˇak implementovat i bez dynamicky´ch svazku˚, takzˇe dynamicke´svazky nejsou „zˇivotneˇdu˚lezˇite´“ pro servery, i kdyzˇpro neˇjsou podobne´vlastnosti velice uzˇitecˇne´. KAPITOLA 9 SPRA´VA DISKU˚ 125

Prima´rnı´ Prima´rnı´ Prima´rnı´ oddı´l 1 oddı´l 2 Rozsˇı´rˇeny´oddı´l (Prim. 3) oddı´l 4

z }| { z }| { z }| { z }| { M E E E B B B B B B B B B B S S S S S S R R R R

Logicky´disk Logicky´disk Logicky´disk p p p p | {z } | {z } | {z } p p p p p p p p p p p p vlozˇeny´rozsˇ. oddı´l p p p p p p p p p | {z } p p p p p p p p p p p p p p p p p p vlozˇeny´rozsˇı´rˇeny´oddı´l p p p p p p p p| p {z } p p pWindows:p p p p p p p p p p p p p p p p p p p C: p D: p p F: p p G: p p H: p E: p p p p p p p p p p p p p p p p p p p p p pLinux: p p p p p p p p p p p p p p p p p p p p p p p /dev/hdap p p p p p p p p p p p p p p /dev/hda1p /dev/hda2 p p /dev/hda3p p p /dev/hda4p p p p p p p p p p p p p p p /dev/hda5p p /dev/hda6p p /dev/hda7 p p p p p p p p p p p p p p p p p p p p p p pFreeBSD: p p p p p p p p p p p p p p p p p p p p p p p ad0p p p p p p p p p p p p p p p ad0s1 p ad0s2 p p ad0s3 p p p ad0s4 p p p p p p p p p p p p p p p ad0s3a p p ad0s3b p p ad0s3c p p p p p p p p p p p p p p p p p p p p p p Obra´zek 9.1: Struktura MBR disku a oznacˇenı´v ru˚zny´ch operacˇnı´ch syste´mech

Zkratka MBR znamena´ Master Boot Record – hlavnı´zava´deˇcı´za´znam disku. Zde najdeme hlavnı´zava´deˇcı´za´znam (prosteˇinstrukce pro BIOS, ktere´rˇı´kajı´, co se ma´ sta´t, kdyzˇje pocˇı´tacˇnastartova´n a ma´se zave´st operacˇnı´syste´m), a take´tabulku rozdeˇlenı´disku. Hlavnı´zava´deˇcı´za´znam zjistı´, ktery´oddı´l je oznacˇen jako aktivnı´, a pak se pokusı´z tohoto oddı´lu zave´st operacˇnı´syste´m (spustı´zava´deˇcı´program tohoto oddı´lu). Tabulka rozdeˇlenı´disku (Partition Table) zabı´ra´na disku 64 B. Ma´cˇtyrˇi za´znamy (jeden pro kazˇdy´prima´rnı´oddı´l – rozsˇı´rˇeny´oddı´l take´povazˇujeme za prima´rnı´), a v kazˇde´m za´znamu jsou o prˇı´slusˇne´m prima´rnı´m oddı´lu tyto informace:

• zda je aktivnı´(aktivnı´oddı´l ma´zde hexadecima´lnı´cˇı´slo 80, jinak 0), • kde se nacha´zı´boot sektor oddı´lu (tedy adresa zacˇa´tku oddı´lu), • typ oddı´lu, zpu˚sob jeho organizace (zde se rozlisˇuje, zda jde o rozsˇı´rˇeny´oddı´l nebo o oddı´l s neˇjaky´m konkre´tnı´m souborovy´m syste´mem, kazˇdy´souborovy´ syste´m ma´sve´identifikacˇnı´cˇı´slo), KAPITOLA 9 SPRA´VA DISKU˚ 126

• dalsˇı´metriky (adresa konce oddı´lu, pocˇet sektoru˚od MBR k zacˇa´tku oddı´lu, velikost oddı´lu v sektorech).

Zkratka BS znamena´ Boot Sector – zava´deˇcı´sektor oddı´lu. Je to cˇa´st oddı´lu, do ktere´ beˇzˇneˇ uzˇivatel nema´ prˇı´stup. V prˇı´padeˇ, zˇe je na tomto oddı´lu nainstalo- va´n neˇktery´operacˇnı´syste´m, najdeme zde zava´deˇcı´program tohoto operacˇnı´ho syste´mu. Zava´deˇcı´program (boot loader, zavadeˇcˇ) je program, jehozˇu´kolem je zave´st ope- racˇnı´syste´m prˇi startu pocˇı´tacˇe nebo v prˇı´padeˇinstalace vı´ce operacˇnı´ch syste´mu˚ na disku umozˇnit vy´beˇr jednoho operacˇnı´ho syste´mu ze seznamu a spustit zava´- deˇcı´program vybrane´ho operacˇnı´ho syste´mu (pak se nazy´va´ boot manazˇer). Pokud ma´me instalova´no vı´ce operacˇnı´ch syste´mu˚na vı´ce oddı´lech, prˇi startu pocˇı´tacˇe se z MBR spustı´zava´deˇcı´program pouze jednoho z nich. Tento program by pak meˇl umozˇnit prˇı´stup i k zava´deˇcı´m programu˚m ostatnı´ch syste´mu˚. Zkratka EBR znamena´ Extended Boot Record – zava´deˇcı´ za´znam rozsˇı´rˇene´ho oddı´lu. Je to obdoba MBR, obsahuje podobne´informace. Rozsˇı´rˇeny´oddı´l obsahuje jeden logicky´disk (s nı´m se pak ve veˇtsˇineˇprˇı´padu˚zacha´zı´stejneˇjako s prima´rnı´mi oddı´ly), a pokud tento logicky´disk nezabı´ra´cely´rozsˇı´rˇeny´oddı´l, ve volne´m mı´steˇ mu˚zˇe by´t vnorˇeny´rozsˇı´rˇeny´oddı´l s vlastnı´m EBR. Ten opeˇt mu˚zˇe obsahovat kromeˇ logicke´ho disku dalsˇı´vnorˇeny´rozsˇı´rˇeny´oddı´l, atd. Rozsˇı´rˇene´oddı´ly lze vnorˇovat prakticky do jake´koliv u´rovneˇa tak tvorˇit jaky´koliv pocˇet logicky´ch disku˚a tı´m i oddı´lu˚. Kazˇdy´logicky´disk take´ma´svu˚j boot sektor. Zpu˚sob oznacˇova´nı´fyzicky´ch disku˚v neˇktery´ch Unixovy´ch syste´mech je v ta- bulce 9.1.

IDE kana´l Linux FreeBSD 1 Master /dev/hda ad0 1 Slave /dev/hdb ad1 2 Master /dev/hdc ad2 2 Slave /dev/hdd ad3

Tabulka 9.1: Oznacˇenı´fyzicky´ch disku˚v neˇktery´ch Unixovy´ch syste´mech

9.4 Na´stroje pro spra´vu disku˚

Pro MBR disky platı´, zˇe mohou mı´t nejvy´sˇe 4 prima´rnı´oddı´ly (primary partition), z nichzˇ jeden mu˚zˇe by´t rozsˇı´rˇeny´ (extended partition) a v neˇm jaky´koliv pocˇet KAPITOLA 9 SPRA´VA DISKU˚ 127

logicky´ch disku˚(logical volume, logical disk, logical partition, . . . ). Oddı´l mu˚zˇe by´t syste´movy´(s instalovany´m operacˇnı´m syste´mem) nebo datovy´(obsahuje pouze data) nebo odkla´dacı´(swap, obvykle´u Unixovy´ch syste´mu˚ ). Na´stroje pro spra´vu disku˚by prˇedevsˇı´m meˇly umeˇt vytva´rˇet a rusˇit vsˇechny tyto druhy oddı´lu˚. Cˇasto mı´vajı´jesˇteˇjine´funkce. Na´sledujı´nejzna´meˇjsˇı´programy pro takovou za´kladnı´spra´vu disku˚. Neˇktere´z nich jsou urcˇeny pro pra´ci v urcˇite´m operacˇnı´m syste´mu a jsou s nı´m doda´va´ny, jine´jsou v tomto ohledu neza´visle´. fdisk firmy Microsoft: Na´zev fdisk je u programu˚s tı´mto urcˇenı´m celkem obvykly´. fdisk od firmy Microsoft, ktery´je doda´va´n s Windows, ma´jen velmi omezene´ vlastnosti. Pracujeme v textove´m rezˇimu, na pevne´m disku mu˚zˇeme vytvorˇit pouze jediny´prima´rnı´oddı´l a jediny´rozsˇı´rˇeny´, v tom pak jake´koliv mnozˇstvı´ logicky´ch. Pokud chceme na neˇktery´oddı´l instalovat Windows, pro vytvo- rˇenı´tohoto oddı´lu bychom meˇli pouzˇı´t fdisk od Microsoftu a ne naprˇı´klad Linuxovy´, protozˇe v neˇktery´ch prˇı´padech docha´zı´k nekompatibilita´m a zde instalovane´Windows by se mohly sta´t nepouzˇitelny´mi (opravdu nepouzˇitel- ny´mi). Neumozˇnˇuje nedestruktivnı´zmeˇnu hranic oddı´lu (na modifikovany´ch oddı´- lech jsou data prakticky znicˇena), oddı´ly, se ktery´mi pracujeme, nesmı´by´t pouzˇı´va´ny (tj. naprˇı´klad z nich nesmı´me spousˇteˇt fdisk a jı´m na´sledneˇtento oddı´l modifikovat). Obvykle´pouzˇitı´je ze startovacı´nebo za´chranne´diskety. Protozˇe se programa´torˇi firmy Microsoft moc nehrnou do „znovuvytvorˇenı´“ tohoto programu a zmeˇny prova´deˇjı´pouze prˇida´va´nı´m ko´du k existujı´cı´mu, du˚sledkem jsou neˇktere´drobne´nesrovnalosti (naprˇı´klad prˇi pra´ci s velky´mi disky se zobrazuje trochu jina´– mensˇı´kapacita oddı´lu nezˇ jaka´je ve skutecˇ- nosti). Ve Windows 2000/XP existuje na´stroj s obdobny´mi schopnostmi, ale s gra- ficky´m rozhranı´m. Spustı´me ho prˇı´kazem diskmgmt.msc nebo v graficke´m rozhranı´ho najdeme v konzole Spra´va pocˇı´tacˇe (kontextove´menu ikony Tento pocˇı´tacˇ, volba Spravovat). Narozdı´l od samotne´ho fdisku zde navı´c mu˚zˇeme pro oddı´l zvolit urcˇity´souborovy´syste´m (FAT32, NTFS) – fdisk od Microsoftu je vlastneˇjednı´m z ma´la programu˚, ktere´od souborovy´ch syste´mu˚da´vajı´ruce prycˇ, k tomuto u´cˇelu v textove´m rezˇimu musı´me zvolit prˇı´kaz format nebo v graficke´m rezˇimu kontextove´menu dane´ho disku. fdisk doda´vany´s Linuxem: Program fdisk doda´vany´s Linuxem sice take´prˇijı´ma´prˇı´- kazy v textove´m rezˇimu (vybı´ra´me z textove´ho menu tisknutı´m kla´ves na kla´vesnici), umı´vsˇak mnohem vı´ce. Kromeˇvytva´rˇenı´a rusˇenı´oddı´lu˚mu˚- zˇeme urcˇit souborovy´ syste´m oddı´lu (jsou podporova´ny ru˚ zne´ souborove´ KAPITOLA 9 SPRA´VA DISKU˚ 128

syste´my vcˇetneˇnelinuxovy´ch a take´swap pro Linux). Existuje „uzˇivatelsky prˇı´veˇtiveˇjsˇı´“ varianta – cfdisk. Program fdisk spousˇtı´me obvykle s urcˇenı´m pevne´ho disku, se ktery´m chceme pracovat, naprˇ. fdisk /dev/hda. fips je progra´mek, ktery´umı´zmensˇit Windows oddı´ly, je to vhodny´doplneˇk fdisku Microsoftu. Je doda´va´n take´s neˇktery´mi Linuxovy´mi distribucemi, cozˇje uzˇi- tecˇne´, kdyzˇpotrˇebujeme na disku zmensˇit mı´sto, ktere´do te´ doby uzurpovaly Windows, a nainstalovat tam jiny´operacˇnı´syste´m. Partition Magic je komercˇnı´program pracujı´cı´pod Windows. Vyznacˇuje se propra- covany´m graficky´m prostrˇedı´m, umozˇnˇuje kromeˇvytva´rˇenı´a rusˇenı´oddı´lu˚ take´zmeˇnu jejich velikosti (nedestruktivnı´, data zu˚stanou zachova´na). GNU Parted, QtParted, GParted jsou programy pracujı´cı´pod Linuxem. GNU Parted je nejjednodusˇsˇı´, kromeˇvytva´rˇenı´, rusˇenı´a zmeˇny velikosti oddı´lu˚umozˇnˇuje naprˇı´klad take´vytvorˇenı´obrazu disku (oddı´lu). GParted (Gnome Partition Editor) je program doda´vany´s prostrˇedı´m Gnome. Jeho graficke´rozhranı´ a mozˇnosti jsou podobne´Partition Magicu. QtParted je obdobou GParted pro prostrˇedı´KDE. Dalsˇı´: Ranish Partition Manager, DiskDrake, . . . , a take´ neˇktere´ boot manazˇery v sobeˇzahrnujı´mozˇnost pracovat s oddı´ly disku˚. K programu˚m pro spra´vu disku mu˚zˇeme rˇadit take´programy vytva´rˇejı´cı´obraz disku (diskove´ho oddı´lu). Neˇktere´ programy doka´zˇou pracovat pouze s oddı´ly s urcˇity´mi souborovy´mi syste´my, jiny´m je to celkem jedno. Tato funkce mu˚zˇe by´t zahrnuta v univerza´lneˇjsˇı´m programu urcˇene´m obecneˇ pro spra´vu disku˚, nebo lze pouzˇı´t specializovane´programy. Z nejzna´meˇjsˇı´ch pro Windows: Norton Ghost, Drive Image, True Image, Power Quest, Drive Backup. V Linuxu je to prˇedevsˇı´m Partimage, ale najdeme zde mnoho dalsˇı´ch a tuto funkci majı´prakticky vsˇechny na´stroje pro spra´vu disku˚. Existuje pomeˇrneˇmnoho linuxovy´ch distribucı´urcˇeny´ch prˇı´mo pro spra´vu (za´- chranu) disku˚, naprˇı´klad System Rescue CD (zachranˇuje nejen Linux, ale i Win- dows, jsou zde dokonce i na´stroje pro pra´ci s registracˇnı´databa´zı´).

9.5 Zava´deˇcı´programy

Kazˇdy´operacˇnı´syste´m obvykle obsahuje alesponˇjeden zava´deˇcı´program. U´ kolem zava´deˇcı´ho programu je prˇedevsˇı´m tento operacˇnı´syste´m zave´st, tedy ve stanove- ne´m porˇadı´spustit procesy potrˇebne´k beˇhu syste´mu vcˇetneˇprocesu˚ja´dra. To je KAPITOLA 9 SPRA´VA DISKU˚ 129

ovsˇem hodneˇzjednodusˇeny´popis cˇinnosti zava´deˇcı´ho programu, protozˇe kazˇdy´ operacˇnı´ syste´m ma´ pro sve´ spousˇteˇnı´ urcˇita´ specifika a tedy i kazˇdy´ zava´deˇcı´ program pracuje u´plneˇ jiny´m zpu˚sobem, navı´c to, co se prova´dı´ prˇed vlastnı´m spusˇteˇnı´m ja´dra, cˇasto jesˇteˇnelze nazvat procesem (nema´sve´PID, nema´operacˇ- nı´m syste´mem prˇideˇlene´syste´move´zdroje, . . . ). Zava´deˇcı´program (nebo jeho spousˇteˇcı´cˇa´st) je v boot sektoru neˇktere´ho oddı´lu (oddı´lu, na ktere´m je nainstalova´n prˇı´slusˇny´operacˇnı´ syste´m) nebo v MBR, podle toho, zda chceme cˇi nechceme pouzˇı´t prima´rneˇjiny´zava´deˇcı´program, ktery´by na neˇj da´le mohl odkazovat. Protozˇe dnesˇnı´zavadeˇcˇe jsou poneˇkud rozsa´hlejsˇı´a kromeˇvlastnı´ho programu potrˇebujı´take´prostor pro sve´konfiguracˇnı´soubory,na uvedeny´ch mı´stech je pouze za´kladnı´cˇa´st a odkaz na soubory se „zbytkem“. Naprˇı´klad pro NTLoader (zavadeˇcˇ Windows rˇady NT) najdeme na syste´move´m disku (na disku, kde je instalova´n prˇı´slusˇny´operacˇnı´syste´m) program ntldr a da´le „pomocne´soubory“ bootfont.bin a boot.ini. Probereme si postupneˇneˇktere´zavadeˇcˇe a jejich vlastnosti.

ZavadeˇcˇWindows 9x/ME je jednoduchy´zavadeˇcˇ, ktery´kromeˇsve´ho vlastnı´ho ope- racˇnı´ho syste´mu doka´zˇe zave´st nanejvy´sˇstarsˇı´verzi Windows (MS-DOSu), naprˇ. MS-DOS + Windows 3.1. Konfigurace se prova´dı´v souboru BOOT.INI na disku C:, zavadeˇcˇse vzˇdy nainstaluje do MBR a boot sektoru disku C:. Vyzˇaduje, aby disk C: byl prima´rnı´oddı´l. Pracuje v textove´m rezˇimu, neu- mozˇnˇuje konfiguraci (pseudo)graficke´ho prostrˇedı´. V omezene´mı´rˇe lze ve starsˇı´ch Windows pouzˇı´vat menu urcˇujı´cı´, co ma´by´t spusˇteˇno (vcˇetneˇWindows), a to v konfiguracˇnı´ch souborech CONFIG.SYS a AUTOEXEC.BAT (informace viz [32], [33]). ZavadeˇcˇWindows NT/2000/XP (NTLoader) umı´spousˇteˇt svu˚j operacˇnı´syste´m i z ji- ne´ho disku nezˇC:. Je to jednoduchy´boot manager, ktery´vsˇak doka´zˇe praco- vat pouze s Windows oddı´ly („vidı´“ pouze oddı´ly se souborovy´m syste´mem FAT nebo NTFS). Konfigurace se prova´dı´v souboru BOOT.INI na disku C: (i v prˇı´padeˇ, zˇe operacˇnı´syste´m zavadeˇcˇe je na jine´m disku). Cˇaste´pouzˇitı´je Windows 9x/ME na disku C: a Windows 2000/XP na disku D: s tı´m, zˇe zavadeˇcˇumozˇnı´prˇi sve´m startu vybrat si z teˇchto dvou syste´mu˚. Instaluje se vzˇdy do MBR a boot sektoru prˇı´slusˇne´ho disku se syste´mem (naprˇ. D:). O konfiguraci graficke´ho/pseudograficke´ho prostrˇedı´platı´tote´zˇ, co u zavadeˇcˇe Windows 9x/ME. KAPITOLA 9 SPRA´VA DISKU˚ 130

Informace o vyuzˇitı´tohoto zavadeˇcˇe pro zavedenı´jine´ho nezˇ„Microsoftı´ho“ syste´mu jsou na [31]. Pokud je tento zavadeˇcˇ (vlastneˇ i prˇedchozı´) instalova´n azˇ po instalaci ji- ne´ho zavadeˇcˇe (naprˇ. Linuxove´ho), bez skrupulı´prˇepı´sˇe starsˇı´odkaz v MBR, takzˇe se cˇasto proti vu˚li uzˇivatele stane prima´rnı´m zavadeˇcˇem. Du˚sledkem je pak nemozˇnost spustit pu˚vodnı´zavadeˇcˇa tı´m i pu˚vodnı´ operacˇnı´syste´m. Tento proble´m je sice rˇesˇitelny´, ale je lepsˇı´mu prˇedejı´t vhodny´m cˇleneˇnı´m po- sloupnosti instalace syste´mu˚nebo alesponˇvcˇasny´m za´lohova´nı´m pu˚vodnı´ho zavadeˇcˇe na externı´me´dium (disketu). LILO (LInux LOader) je zavadeˇcˇpouzˇı´vany´pro Linux na HW platformeˇx864. Je to univerza´lnı´ zavadeˇcˇ schopny´ spolupra´ce s prakticky vsˇemi zna´meˇjsˇı´mi souborovy´mi syste´my, tedy neby´va´proble´m s jeho pouzˇı´va´nı´m. Narozdı´l od jiny´ch zna´my´ch zavadeˇcˇu˚doka´zˇe zave´st i takovy´operacˇnı´syste´m, jehozˇboot sektor (jeho adresa) je za 8 GB (viz str. 123), protozˇe pouzˇı´va´ LBA (Logical Block Addressing), pouze musı´ by´t splneˇna podmı´nka prˇı´tomnosti tohoto boot sektoru na neˇktere´m z prvnı´ch dvou pevny´ch disku˚(hda, hdb). Konfigurace je ulozˇena v souboru /etc/lilo.conf, konfiguruje se zde prˇe- devsˇı´m obsah menu (ktere´syste´my se majı´zave´st a kde je hledat). Co se ty´cˇe grafiky,ma´me na vybranou mezi LILO v textove´m rezˇimu a LILO v graficke´m rezˇimu. Konfiguraci vsˇech vlastnostı´zavadeˇcˇe lze obvykle prova´deˇt pomocı´ graficky´ch na´stroju˚doda´vany´ch s graficky´m prostrˇedı´m operacˇnı´ho syste´mu. O konfiguraci LILO jsou informace naprˇ. na [30]. GRUB (GRand Unified Boot loader) je zavadeˇcˇpouzˇı´vany´pro Linux na HW plat- formeˇx86 a amd64. Je to univerza´lnı´zavadeˇcˇspolupracujı´cı´se vsˇemi beˇzˇny´mi souborovy´mi syste´my, stejneˇjako LILO. Vy´hodou je vy´borneˇpropracovane´skry´va´nı´oddı´lu˚ , ktere´mu˚zˇe slouzˇit na- prˇı´klad prˇi instalaci dalsˇı´ho operacˇnı´ho syste´mu, pokud tento syste´m chceme prˇesveˇdcˇit, zˇe je instalova´n na prvnı´prima´rnı´oddı´l, i kdyzˇve skutecˇnosti tomu tak nenı´(to je prˇı´pad Windows 9x, ktere´by bez tohoto mechanismu bud’ odmı´tly instalaci, nebo, cozˇje horsˇı´, prˇepsaly by MBR, prvnı´prima´rnı´ oddı´l i jeho boot sektor svy´mi daty5).

4HW platforma s procesory Intel od i386 do IV a AMD procesory do 32-bitovy´ch vcˇetneˇ. 5Jiny´mi slovy: kdyzˇma´me Linux a chceme navı´c Windows 9x, vybereme pro Linux jako zavadeˇcˇ GRUB, vybereme volnou prima´rnı´partition na prvnı´m pevne´m disku, vsˇe, co je prˇed nı´, skryjeme, a instalujeme. KAPITOLA 9 SPRA´VA DISKU˚ 131

Konfigurace je obvykle ulozˇena v souboru /etc/grub.conf nebo v souboru /boot/grub.conf, stejneˇjako LILO i GRUB lze v Linuxu obvykle konfigu- rovat v graficke´m prostrˇedı´(naprˇ. program GrubConf). Prˇi spusˇteˇnı´zavadeˇcˇe (prˇi zobrazenı´menu) se take´mu˚zˇeme dostat do specia´lnı´ho konfiguracˇnı´ho mo´du GRUBU (jeho prˇı´kazove´ho rˇa´dku) stisknutı´m kla´vesy [c], dı´ky tomu prˇi zmeˇna´ch v konfiguraci nemusı´me pokazˇde´restartovat, aby se zmeˇny proje- vily. Seznam prˇı´kazu˚se zobrazı´po stisknutı´kla´vesy [T AB]. Prˇı´kazovy´rˇa´dek GRUBu je mozˇne´take´spustit za beˇhu operacˇnı´ho syste´mu prˇı´kazem grub (pouze uzˇivatel root). Dalsˇı´informace viz [29]. GRUB se standardneˇpouzˇı´va´s textovy´m rozhranı´m, lze vsˇak s trochou na´- mahy zmeˇnit. Lze take´pouzˇı´t obra´zek na pozadı´– volba splashimage v kon- figuracˇnı´m souboru (nebo prˇı´slusˇny´ prˇı´kaz v prˇı´kazove´m rˇa´dku GRUBu), tento obra´zek vsˇak musı´mı´t prˇedem definovane´rozmeˇry, barevnou hloubku a forma´t. GRUB se vyznacˇuje vlastnı´m na´zvoslovı´m ty´kajı´cı´m se identifikace disku˚. Pevne´disky oznacˇuje postupneˇ hd0 (mı´sto hda), hd1 (mı´sto hdb), . . . , oddı´ly na discı´ch se znacˇı´cˇı´sly od 0. Vznikle´dvojice (pevny´ disk, oddı´l) mohou by´t naprˇı´klad

• (hd0,0) = prvnı´oddı´l na prvnı´m disku = hda1, • (hd0,1) = druhy´oddı´l na prvnı´m disku = hda2, • (hd1,0) = prvnı´oddı´l na druhe´m disku = hdb1, atd. dalsˇı´linuxove´zavadeˇcˇe: aBoot, MILO (oba pro architekturu alpha), SILO (architek- tura sparc), yaBoot (architektura ppc – PowerPC), PALO (architekruta hppa), . . . XOSL, OS Selector, EasyBoot, Smart Boot Manager, . . . jsou univerza´lnı´boot mana- zˇery. Neˇktere´komercˇnı´(naprˇ. OS Selector), jine´volneˇsˇirˇitelne´(naprˇ. XOSL). Kazˇdy´ma´sve´specificke´vlastnosti. Obvykle dovolujı´vybrat ze seznamu ope- racˇnı´ch syste´mu˚, po vy´beˇru spustı´prˇı´slusˇny´zavadeˇcˇ. Veˇtsˇinou doka´zˇou take´ skry´vat oddı´ly stejneˇjako GRUB. Omezenı´se ty´kajı´veˇtsˇinou souborove´ho syste´mu nebo oddı´lu, na ktery´jsou tyto programy instalova´ny (mnohe´vy- zˇadujı´instalaci na Windows oddı´lu s FAT, i kdyzˇdoka´zˇou spustit zavadeˇcˇ syste´mu instalovany´na u´plneˇjine´m souborove´m syste´mu a oddı´lu). Pokud naprˇı´klad XOSL nainstalujeme (na Windows oddı´l) a vhodneˇnakon- figurujeme, pak se prˇi startu pocˇı´tacˇe zobrazı´nabı´dka s mozˇnostmi spusˇteˇnı´ instalovany´ch operacˇnı´ch syste´mu˚. Po vybra´nı´se pak spustı´zava´deˇcı´za´znam KAPITOLA 9 SPRA´VA DISKU˚ 132

vybrane´ho syste´mu. Prˇi konfiguraci urcˇujeme, jake´syste´my ma´me a kde se nacha´zı´jejich zava´deˇcı´za´znam (ve ktere´m boot sektoru), pu˚vodnı´prima´rnı´ zavadeˇcˇz MBR je obvykle detekova´n automaticky.

9.6 Mozˇnosti instalace operacˇnı´ch syste´mu˚

Dnes je obvykle´a veˇtsˇinou vyzˇadovane´instalovat kazˇdy´ operacˇnı´syste´m na sa- mostatny´oddı´l. Tento pozˇadavek nebyl potrˇebny´v prˇı´padeˇ, zˇe vedle MS-DOSu s Windows 3.x jsme chteˇli instalovat Windows 95 (oba syste´my s DOS ja´drem a vpodstateˇstejny´m zavadeˇcˇem). Pak mohly by´t oba operacˇnı´syste´my na jednom oddı´lu (disky byly ostatneˇtak male´, zˇe bylo sˇkoda je neˇjak deˇlit). Pokud se o tote´zˇ pokusı´me trˇeba v prˇı´padeˇWindows 98 + Windows XP nebo Windows + Linux, druhy´syste´m prˇi instalaci prˇepı´sˇe ten prvnı´(nebo se instalace vu˚bec nespustı´, kdyzˇ odmı´tneme rozdeˇlit disk). Pokud chceme mı´t instalova´no vı´ce operacˇnı´ch syste´mu˚na jednom pocˇı´tacˇi, musı´me bra´t ohled na pozˇadavky teˇchto syste´mu˚. Naprˇı´klad

• Windows s DOS ja´drem (vcˇetneˇWindows 9x/ME) vu˚bec nepocˇı´tajı´s tı´m, zˇe na disku budou jesˇteˇneˇjake´dalsˇı´operacˇnı´syste´my, bez ptanı´prˇepı´sˇou MBR a boot sektor prvnı´ho prima´rnı´ho oddı´lu. • Windows s NT ja´drem (Windows NT/2000/XP) sice umozˇnˇujı´instalaci na jiny´nezˇprvnı´oddı´l, ale meˇl by by´t prima´rnı´. Navı´c tento syste´m doka´zˇe detekovat pouze Microsoftı´operacˇnı´syste´my, takzˇe pokud je v MBR za´znam jine´ho nezˇWindows zavadeˇcˇe, odmı´tnou ho vzı´t na veˇdomı´a tento zavadeˇcˇ je prosteˇprˇepsa´n. • Unixove´a Linuxove´operacˇnı´syste´my mohou by´t instalova´ny te´meˇrˇna kte- re´mkoliv oddı´lu vcˇetneˇlogicke´ho na rozsˇı´rˇene´m oddı´lu, respektujı´zavadeˇcˇe jine´ho syste´mu, neby´vajı´s nimi proble´my (s urcˇity´mi „cˇerny´mi“ vyjı´mkami, jako je trˇeba Solaris pro urcˇitou skupinu prˇedem nainstalovany´ch syste´mu˚). Konkre´tnı´chova´nı´za´visı´na volbeˇzavdeˇcˇe (LILO, GRUB, . . . ).

Takzˇe pokud nechceme pouzˇı´vat skry´va´nı´oddı´lu˚, volı´me tuto posloupnost in- stalacı´(samozrˇejmeˇktery´koliv cˇlen posloupnosti mu˚zˇe by´t vynecha´n):

1. Windows syste´my s DOS ja´drem 2. Windows syste´my s NT ja´drem 3. Linuxy, Unixy KAPITOLA 9 SPRA´VA DISKU˚ 133

Pokud ma´me instalova´no vı´ce operacˇnı´ch syste´mu˚, kazˇdy´z nich ma´svu˚j zava- deˇcˇ. Jeden z nich je prima´rnı´, jeho za´znam je v MBR, a z neˇho jsou spousˇteˇny ostatnı´ zavadeˇcˇe. Tak vznika´„stromova´struktura“ zavadeˇcˇu˚, naprˇı´klad kdyzˇma´me Win- dows 98, Windows XP a neˇktery´ Linux, prima´rnı´ je obvykle linuxovy´ zavadeˇcˇ (naprˇ. LILO). Pokud v neˇm vybereme spusˇteˇnı´Linuxu, tato akce se provede hned, pokud ale vybereme spusˇteˇnı´Windows, spustı´se zavadeˇcˇWindows XP, ve ktere´m si mu˚zˇeme vybrat mezi Windows 98 a Windows XP. Jestlizˇe je na pocˇı´tacˇi provozova´no vı´ce operacˇnı´ch syste´mu˚, je vhodne´myslet i na to, abychom z nich meˇli prˇı´stup k nasˇim datu˚m. Take´z du˚vodu bezpecˇnosti dat ma´by´t alesponˇjeden diskovy´oddı´l vyhrazen pouze pro data, souborovy´syste´m volı´me takovy´, se ktery´m doka´zˇou pracovat vsˇechny instalovane´operacˇnı´syste´my. Linux doka´zˇe pracovat se vsˇemi beˇzˇny´mi souborovy´mi syste´my (doneda´vna byly proble´my s NTFS, ty jsou v nejnoveˇjsˇı´ch ja´drech odstraneˇny – nebylo mozˇne´meˇnit de´lku souboru˚), Windows rˇady NT bez vhodny´ch berlicˇek pouze s FAT a NTFS, Windows 95 OSR2/98/ME si rozumı´jen s FAT vcˇetneˇFAT32, Windows 95 a starsˇı´ pouze FAT16. Windows a Linux mohou sdı´let data po sı´ti naprˇı´klad pomocı´ protokolu smb. Obvykle´je mı´t Linux instalova´n na serveru a Windows na pracovnı´stanici, na Linuxu beˇzˇı´sluzˇba (de´mon) samba. Co se sdı´lenı´instalace aplikacı´ ty´cˇe, je situace trochu horsˇı´. Ve Windows zpu˚sobujı´ proble´my prˇedevsˇı´m u´daje v registru (registr nelze mezi ru˚zny´mi instalacemi sdı´let) a neˇkdy take´forma´t dynamicky´ch knihoven (mu˚zˇe by´t jiny´naprˇı´klad pro Windows 98 a XP), proto je obvykle nutne´aplikaci v kazˇdy´ch Windows instalovat zvla´sˇt’ (neˇkdy je mozˇne´zvolit stejny´adresa´rˇ/slozˇku pro umı´steˇnı´souboru˚aplikace, jen u´daje v registrech jsou pro kazˇdou instalaci zvla´sˇt’). Ru˚ zne´verze Windows mohou sdı´let tenty´zˇodkla´dacı´soubor. Vı´ce linuxovy´ch distribucı´mu˚zˇe sdı´let tote´zˇja´dro (to veˇtsˇinou lze urcˇit prˇi in- stalaci), odkla´dacı´(swap) oddı´l cˇi soubor, prˇı´padneˇ dalsˇı´oddı´ly (trˇeba\home), za urcˇity´ch okolnostı´lze sdı´let i jine´aplikace. Sdı´lenı´ aplikacı´mezi Windows a Li- nuxem obvykle nenı´mozˇne´, vyjı´mkou jsou multiplatformnı´aplikace psane´v Javeˇ nebo pomocı´technologie .NET (prˇı´padneˇv Pythonu, Lispu cˇi v jine´m interpretacˇ- nı´m jazyku).

9.7 Emulace jine´ho operacˇnı´ho syste´mu

Prˇedchozı´stra´nky se ty´kaly prˇedevsˇı´m prˇı´padu, kdy ma´me na disku instalova´no vı´ce operacˇnı´ch syste´mu˚a pocˇı´ta´me s tı´m, zˇe v jednom okamzˇiku pouzˇı´va´me jen KAPITOLA 9 SPRA´VA DISKU˚ 134

jeden z nich a prˇi potrˇebeˇzmeˇny restartujeme syste´m. Neˇkdy vsˇak potrˇebujeme pracovat s vı´ce operacˇnı´mi syste´my najednou. Pak vyuzˇijeme mozˇnost emulace operacˇnı´ho syste´mu, tedy pouzˇijeme program, ktery´ beˇzˇı´ jako proces (procesy) v jednom operacˇnı´m syste´mu a simuluje beˇh jine´ho operacˇnı´ho syste´mu (ten beˇzˇı´ „v okneˇ“). Programy, ktere´mu˚zˇeme pro emulaci (simulaci) vyuzˇı´t, mu˚zˇeme rozdeˇlit do neˇkolika skupin:

• virtua´lnı´ pocˇı´tacˇ – prova´dı´ simulaci pocˇı´tacˇe (mu˚zˇe jı´t o u´plneˇ jinou HW platformu nezˇna ktere´syste´m beˇzˇı´„v rea´lu“), na tomto pocˇı´tacˇi mu˚zˇeme mı´t instalova´n jaky´koliv pocˇet jiny´ch operacˇnı´ch syste´mu˚, • emula´tor operacˇnı´ho syste´mu – simuluje konkre´tnı´operacˇnı´syste´m, • podsyste´m pro spousˇteˇnı´aplikacı´jine´ho operacˇnı´ho syste´mu.

9.7.1 Virtua´lnı´pocˇı´tacˇe Tento typ emula´toru˚je nejslozˇiteˇjsˇı´a cˇasto i nejpomalejsˇı´. Po instalaci obvykle mu˚- zˇeme nakonfigurovat simulovany´hardware (kterou HW platformu chceme pouzˇı´- vat, ktery´hardware bude k dispozici a jak se jeho pouzˇı´va´nı´ projevı´na „skutecˇne´m“ hardwaru, naprˇı´klad napojı´me tiska´rnu), da´le nastavı´me BIOS, a pak mu˚zˇeme in- stalovat operacˇnı´syste´my. Neˇktere´programy vyzˇadujı´jiste´„prˇedupravenı´“ zdroje operacˇnı´ho syste´mu do tzv. image (obraz, neˇco jako obraz CD). Kazˇdy´z teˇchto programu˚ma´sve´typicke´vlastnosti, naprˇı´klad existujı´emu- la´tory slouzˇı´cı´cˇisteˇk emulaci konkre´tnı´hardwarove´platformy (pro Amigu, ZX Spectrum, PowerPC, kapesnı´pocˇı´tacˇe – vyuzˇı´vajı´prˇedevsˇı´m programa´torˇi teˇchto zarˇı´zenı´, hernı´ch konzolı´, apod.) nebo umozˇnˇujı´cı´ volit mezi neˇkolika platformami (instalace nove´platformy se pak prova´dı´instalova´nı´m prˇı´slusˇne´ho modulu), prˇı´- padneˇ s volbou HW platformy volı´me i operacˇnı´ syste´m (na neˇktere´ platformeˇ „nenı´z cˇeho vybı´rat“, naprˇı´klad u Amigy). Z nejzna´meˇjsˇı´ch programu˚:

VMWare beˇzˇı´pod Windows i Linuxem. Je to jeden z nejlepsˇı´ch a nejoblı´beneˇjsˇı´ch univerza´lnı´ch simula´toru˚, komercˇnı´. MS Virtual PC je distribuova´n Microsoftem (pu˚vodneˇ byl vyvı´jen jinou firmou, Microsoft tuto firmu odkoupil), beˇzˇı´pouze pod Windows, komercˇnı´. Bochs beˇzˇı´pod Windows, je to freeware. Je to velmi dobry´program s mnoha vol- bami, ale pomeˇrneˇslozˇity´. KAPITOLA 9 SPRA´VA DISKU˚ 135

Qemu je o neˇco rychlejsˇı´a ovladatelneˇjsˇı´nezˇBochs, beˇzˇı´pod Linuxem, Windows i MacOSX, je volneˇdostupny´na Internetu. Xen je obdoba Bochs, ale na rozdı´l od neˇho prˇejı´ma´hardwarovou platformu od pocˇı´tacˇe, na ktere´m beˇzˇı´, jinak mu˚zˇeme instalovat jake´koliv operacˇnı´syste´my (starsˇı´verze vyzˇadujı´vytvorˇenı´obrazu tohoto syste´mu). Oproti Bochs ma´ vy´hodu take´v rychlosti (nemusı´simulovat vesˇkery´hardware). Volneˇsˇirˇitelny´, pro Linuxy a neˇktere´Unixy.

9.7.2 Emula´tory operacˇnı´ho syste´mu a podsyste´my Tyto programy simulujı´beˇh konkre´tnı´ho operacˇnı´ho syste´mu, tedy novy´operacˇnı´ syste´m samotny´nemusı´me jizˇinstalovat. Pokud je emulova´n operacˇnı´syste´m se vsˇı´m vsˇudy (te´meˇrˇ), mu˚zˇeme v tomto operacˇnı´m syste´mu pracovat se vsˇı´m vsˇudy vcˇetneˇkonfigurace (syste´m beˇzˇı´v okneˇ cely´, v ra´mci tohoto okna pak jeho aplikace). Jestlizˇe se vsˇak jedna´o podsyste´m, u´cˇelem je prˇedevsˇı´m mozˇnost spousˇteˇt aplikace urcˇene´pro „cizı´“ operacˇnı´syste´m (kazˇda´aplikace mı´va´obvykle vlastnı´okno/okna). Z nejzna´meˇjsˇı´ch:

Wine je ve skutecˇnosti rekurzivnı´zkratka slov „Wine Is Not Emulator“. Autorˇi tı´mto na´zvem chteˇli zdu˚raznit, zˇe nezamy´sˇlejı´emulovat Windows, ale pouze umozˇnit spousˇteˇnı´programu˚psany´ch pro Windows v Unixovy´ch syste´mech (je to vlastneˇ podsyste´m, zavadeˇcˇ programu˚). Jde o vlastnı´ implementaci Win API (rozhranı´, prˇekladove´ vrstvy mezi aplikacı´ a ja´drem skutecˇne´ho operacˇnı´ho syste´mu). Vyznacˇuje se vy´razneˇvysˇsˇı´rychlostı´nezˇemula´tory, uda´va´se, zˇe beˇh neˇkte- ry´ch aplikacı´je dokonce rychlejsˇı´nezˇve Windows. Na stra´nka´ch tvu˚rcu˚Wine je rozsa´hly´seznam programu˚, prˇı´padny´ch proble´mu˚ prˇi jejich provozova´nı´ prˇes Wine a jejich rˇesˇenı´. Neˇktere´programy bohuzˇel takto nelze zprovoznit nebo docha´zı´k neodstranitelny´m proble´mu˚m (ale jde o vyjı´mky). Wine najdeme prakticky ve vsˇech distribucı´ch Linuxu a take´v mnoha dalsˇı´ch Unixech. Je volneˇsˇirˇitelny´. Pokud jde ale o aplikace, ktere´do Wine instalujeme, musı´me respektovat jejich licenci. Cedega je komercˇnı´projekt vycha´zejı´cı´z Wine. Oproti Wine obsahuje navı´c neˇktere´ komercˇnı´technologie, dokonce i prˇı´mo od firmy Microsoft. Je urcˇen ke spousˇ- teˇnı´ru˚zny´ch, i na´rocˇneˇjsˇı´ch programu˚pro Windows, je vyuzˇı´va´n prˇedevsˇı´m pro spousˇteˇnı´her. KAPITOLA 9 SPRA´VA DISKU˚ 136

CrossOver je take´komercˇnı´varianta pro Wine, ale je urcˇen prˇedevsˇı´m do kancela´rˇı´. Vyuzˇı´va´se prˇedevsˇı´m pro provoz u´cˇetnı´ch a jiny´ch ekonomicky´ch aplikacı´ psany´ch pro Windows. DosEmu, DosBox jsou programy emulujı´cı´DOS pod Linuxem. Neobsahujı´instalaci MS-DOSu, ktery´je zatı´zˇen licencı´EULA a tedy pro tyto u´cˇely nepouzˇitelny´, ale DosEmu vyuzˇı´va´ instalaci syste´mu freeDOS a DosBox ma´ vlastnı´ im- plementaci DOSu (pouze nejza´kladneˇjsˇı´prˇı´kazy). Vyuzˇı´vajı´se naprˇı´klad ke zprovozneˇnı´DOSovsky´ch u´cˇetnı´ch programu˚(DosEmu) a her (DosBox). KAPITOLA 10

Graficky´subsyste´m

V te´to kapitole se budeme zaby´vat graficky´m subsyste´mem – na´stavbou, ktera´sice nenı´ „zˇivotneˇdu˚lezˇita´“, prˇesto vsˇak pro mnoho uzˇivatelu˚te´meˇrˇnepostradatelna´. Svu˚j graficky´ subsyste´m ma´veˇtsˇina rozsa´hlejsˇı´ch syste´mu˚, my zde pod tı´mto pojmem budeme cha´pat graficky´subsyste´m operacˇnı´ho syste´mu. Nejdrˇı´v probereme za´kladnı´pojmy souvisejı´cı´s tı´mto te´matem vcˇetneˇobvykle´struk- tury subsyste´mu, a pak se podı´va´me na jednu z nejpropracovaneˇjsˇı´ch multiplatformnı´ch implementacı´, X Window System.

10.1 Za´kladnı´pojmy

Graficky´subsyste´m je skupina procesu˚tvorˇı´cı´vhodne´graficke´rozhranı´mezi uzˇiva- telem a jiny´mi procesy vcˇetneˇsyste´movy´ch. Jeho u´kolem je zobrazovat momenta´lnı´ stav vybrany´ch cˇa´stı´syste´mu, zarˇı´zenı´a procesu˚a poskytovat mozˇnosti jejich ovla´- da´nı´. Struktura graficke´ho subsyste´mu je naznacˇena na obra´zku 10.1 na straneˇ138. Sluzˇby nizˇsˇı´u´rovneˇ umozˇnˇujı´vykreslova´nı´za´kladnı´ch graficky´ch objektu˚ prˇı´mo na obrazovku. Tato vrstva komunikuje prˇı´mo s ovladacˇi graficky´ch zarˇı´zenı´, prˇe- devsˇı´m monitoru a graficke´karty, nepracuje s okny. Obsluha oken se zaby´va´spra´vou oken a vesˇkery´mi operacemi s nimi – vykreslo- va´nı´jednotlivy´ch prvku˚okna, vyhrazova´nı´cˇa´sti okna procesu, prˇesouva´nı´, zmeˇna velikosti, urcˇova´nı´viditelnosti cˇa´stı´okna, obsluha za´kladnı´ch ovla´dacı´ch prvku˚ okna, ale take´udrzˇova´nı´informacı´o oknech, struktury oken (by´va´to hierarchicka´ struktura), apod. Pokud syste´m podporuje pouzˇı´va´nı´virtua´lnı´ch obrazovek, jejich spra´va je take´v te´to vrstveˇ.

137 KAPITOLA 10 GRAFICKY´ SUBSYSTE´ M 138

Procesy Interpret prˇı´kazu˚ Graficke´API

Ja´dro graficke´ho subsyste´mu Sluzˇby vysˇsˇı´u´rovneˇ Obsluha oken Sluzˇby nizˇsˇı´u´rovneˇ Ovladacˇe graficky´ch zarˇı´zenı´ (videokarta, mysˇ, . . . )

Obra´zek 10.1: Struktura graficke´ho subsyste´mu

Sluzˇby vysˇsˇı´ u´rovneˇ dovolujı´ pracovat s graficky´mi objekty na abstraktneˇjsˇı´ u´rovni – kromeˇza´kladnı´ch 2D objektu˚, jako je u´secˇka, cˇtverec, kruzˇnice, se zde definujı´take´neˇktere´3D objekty a operace nad nimi, to za´lezˇı´na konkre´tnı´m ope- racˇnı´m syste´mu. Graficke´API je sada sluzˇeb vykreslujı´cı´ch a umozˇnˇujı´cı´ch ovla´dat „slozˇiteˇjsˇı´“ graficke´prvky – menu, tlacˇı´tka, dialogova´okna, atd.), je obvykle realizova´no sadou knihoven. Interpret prˇı´kazu˚ je vlastnı´graficke´uzˇivatelske´rozhranı´(GUI), se ktery´m pracuje prˇı´mo uzˇivatel (pracovnı´plocha, tlacˇı´tko pro prˇı´stup k na´stroju˚m syste´mu a in- stalovany´m aplikacı´m, ikony pro prˇı´stup k na´stroju˚m syste´mu, kontextova´menu jednotlivy´ch prvku˚, atd.) Okno je cˇa´st obrazovky, obvykle ve tvaru pravou´helnı´ku (nemusı´to by´t pravi- dlem). Kazˇde´okno ma´sve´ho vlastnı´ka, cozˇje proces toto okno vyuzˇı´vajı´cı´(a ob- vykle za´rovenˇjeho tvu˚rce), v prˇı´padeˇhierarchicke´struktury oken urcˇujeme kromeˇ vlastnı´ka take´rodicˇovske´okno. Du˚lezˇity´mi vlastnostmi okna jsou jeho umı´steˇnı´ (sourˇadnice leve´ho hornı´ho rohu okna) a rozmeˇry (sˇı´rˇka a vy´sˇka), a da´le pla´tno, tedy vnitrˇnı´obsah okna. Pracovnı´plocha okna je oblast okna, kterou mu˚zˇe vyuzˇı´vat vlastnı´k, je to tedy pla´tno okna. Okno se mu˚zˇe pohybovat po pracovnı´plosˇe sve´ho rodicˇovske´ho okna. Pracovnı´ plocha obrazovky je oblast obrazovky, na ktere´ mohou by´t umı´steˇny prvky graficke´ho rozhranı´vcˇetneˇoken. Mu˚zˇe by´t veˇtsˇı´nezˇobrazovka, zobrazuje se tedy pouze ta cˇa´st pracovnı´plochy obrazovky, ktera´se kryje se zobrazitelnou cˇa´stı´obrazovky (tote´zˇplatı´o pracovnı´plosˇe okna). Obvykle jsou jejı´rozmeˇry neˇko- likana´sobkem rozmeˇru˚obrazovky. Obrazovka (resp. jejı´ pracovnı´plocha) mu˚zˇe by´t KAPITOLA 10 GRAFICKY´ SUBSYSTE´ M 139

cha´pa´na jako druh okna, ktere´je rodicˇovsky´m oknem pro vsˇechna okna umı´steˇna´ na pracovnı´plosˇe okna.

10.2 X Window System

X Window System (pozor, ne X Windows!!!) je multiplatformnı´ sı´t’ovy´ graficky´ syste´m pouzˇı´vany´jako na´stavba operacˇnı´ho syste´mu. Vznikl v MIT (Massachussets Institute of Technology) v 80. letech 20. stoletı´, u tohoto syste´mu se inspirovali tvu˚rci syste´mu Apple Macintosh i Windows. U´ cˇelem bylo vyvinout graficke´prostrˇedı´ snadno prˇenositelne´na ru˚zne´platformy a pracujı´cı´po sı´ti – zpracova´nı´(vy´pocˇet) probı´ha´ na serveru, zobrazova´nı´ probı´ha´ na klientske´m pocˇı´tacˇi (i kdyzˇ server a klient mu˚zˇe by´t jeden a tenty´zˇpocˇı´tacˇ). Vlastnosti:

• Je postaven na modelu klient-server. Server je v tomto prˇı´padeˇstroj zobrazu- jı´cı´data, klient je ktery´koliv program, ktery´posı´la´serveru prˇı´kazy souvisejı´cı´ s grafikou (co kam se ma´zobrazit apod.). Paradoxneˇtakovy´mto serverem by´va´beˇzˇny´klientsky´pocˇı´tacˇa klientem mu˚zˇe by´t trˇeba aplikace beˇzˇı´cı´na serveru v sı´ti, takzˇe pojmy server a klient nelze zameˇnˇovat s pojmy pouzˇı´- vany´mi v pocˇı´tacˇovy´ch sı´tı´ch. Cˇasto se z du˚vodu odlisˇenı´pouzˇı´vajı´pojmy X server a X klient. • Okna jsou usporˇa´da´na do stromove´hierarchie. Okno je potomkem toho okna, z neˇhozˇbylo spusˇteˇno. Korˇenem stromu je korˇenove´okno, ktere´odpovı´da´plosˇe. Kontextove´menu korˇenove´ho okna se neˇkdy take´nazy´va´korˇenove´menu (ko- rˇenova´nabı´dka), veˇtsˇinou slouzˇı´k rychlejsˇı´mu spousˇteˇnı´nejpouzˇı´vaneˇjsˇı´ch programu˚a pro snadny´prˇı´stup ke konfiguracˇnı´m na´stroju˚ m. • X Window System ma´vrstvenou strukturu. Nejnizˇsˇı´u´rovenˇ komunikuje s vrst- vou prˇistupujı´cı´prˇı´mo k hardwaru (graficka´karta a monitor, mysˇ, kla´vesnice, zvukova´karta apod.), je za´visla´na hardwaru, jsou zde funkce komunikujı´cı´ s teˇmito zarˇı´zenı´mi. Vysˇsˇı´vrstva jizˇobsahuje za´kladnı´graficke´funkce jako je vykreslenı´bodu, kruzˇnice apod. Trˇetı´vrstva je jizˇnaprosto neza´visla´na hardwaru a dalsˇı´ch nastavenı´ch vcˇetneˇrozlisˇenı´obrazovky, obsahuje funkce pro ovla´danı´GUI na abstraktnı´u´rovni, jako naprˇı´klad pra´ci s fonty a funkce pro za´kladnı´pra´ci s okny a jejich evidenci ve stromove´strukturˇe. • Prˇehledna´struktura X Window umozˇnˇuje tento syste´m jednodusˇe rozsˇirˇovat, proto pokud operacˇnı´syste´m pouzˇı´va´tento graficky´subsyste´m, jeho uzˇivatel KAPITOLA 10 GRAFICKY´ SUBSYSTE´ M 140

ma´ na vy´beˇr z mnoha variant prostrˇedı´, ktera´ navı´c obvykle lze rozsa´hle konfigurovat.

X Window je dnes ve verzi X11R6 a neprˇedpokla´da´se dalsˇı´prˇevratneˇjsˇı´vy´voj. Cˇı´slo 11 je verze protokolu pouzˇı´vane´ho ke komunikaci mezi X serverem a X klientem, 6 je verze samotne´ho X Window (ve skutecˇnosti 6.x). Syste´m X Window v te´to verzi ma´neˇkolik variant, na Linuxech se pouzˇı´va´neˇktera´ze dvou uvolneˇny´ch verzı´– XFree86 nebo X.org. Postupneˇse prˇecha´zı´na X.org, a to z du˚vodu pruzˇneˇjsˇı´ho vy´voje a vhodneˇjsˇı´licencˇnı´politiky. X Window neurcˇuje prˇesny´vzhled jednotlivy´ch graficky´ch komponent, nabı´zı´ pouze postup, jak neˇjake´ho vzhledu dosa´hnout. Proto kromeˇsamotne´ho syste´mu X Window pouzˇı´va´me vzˇdy neˇktery´z programu˚nazy´vany´ch spra´vce oken. Spra´vce oken jizˇprˇı´mo urcˇuje vzhled jednotlivy´ch graficky´ch prvku˚(hornı´lisˇta okna, vzhled tlacˇı´tek, apod.), vykresluje a spravuje menu aplikacı´, spravuje okna (od toho se ostatneˇjmenuje), tj. zmeˇnu velikosti, prˇesouva´nı´, minimalizaci, atd., spravuje ikony, plochu, virtua´lnı´plochy, atd. Vesˇkere´graficke´prvky pouzˇı´vane´spra´vci oken jsou ulozˇeny v tzv. widget knihov- na´ch, sada´ch prvku˚. Widgety jsou drobne´prvky, ze ktery´ch se skla´da´graficke´pro- strˇedı´– tlacˇı´tka, posuvnı´ky na okraji oken, menu, kontextova´ menu, textova´pole, atd. Kazˇdy´spra´vce oken ma´svou widget knihovnu, kterou pouzˇı´va´, a tı´m je da´n vı´ceme´neˇjednotny´vzhled oken u aplikacı´psany´ch pro urcˇite´ho spra´vce oken. Kazˇdy´programa´tor pı´sˇı´cı´aplikaci pro X Window si mu˚ zˇe vybrat widget kni- hovnu, kterou jeho program bude pouzˇı´vat. Protozˇe programa´torˇi pı´sˇou programy obvykle pro urcˇite´ho spra´vce oken, vybı´rajı´si jeho widget knihovnu. Takova´apli- kace obvykle bez proble´mu˚funguje i pod jiny´m spra´vcem oken, ale jejı´vzhled uzˇtak „nezapada´“ (nemusı´fungovat tehdy, kdyzˇnenı´prˇı´slusˇna´widget knihovna nainstalovana´, ale to se tak cˇasto nesta´va´). Tento proble´m se cˇa´stecˇneˇvyrˇesˇil vznikem desktopovy´ch prostrˇedı´. Desktopove´ prostrˇedı´je spra´vce oken plus spousta doprovodny´ch aplikacı´naprogramovany´ch s pouzˇitı´m widget knihovny tohoto spra´vce oken. Doprovodne´ aplikace pokry´vajı´ softwarovou potrˇebu (nejen) beˇzˇne´ho uzˇivatele, ale ten samozrˇejmeˇmu˚zˇe instalovat jaky´koliv dalsˇı´software. Desktopove´ prostrˇedı´ se doda´va´ se spoustou aplikacı´, ale to neznamena´, zˇe spra´vci oken, kterˇı´nejsou „obklopeni“ zˇa´dny´m desktopovy´m prostrˇedı´m, nejsou doda´va´ni s zˇa´dny´mi doprovodny´mi aplikacemi. Obsahujı´obvykle neˇjake´konfigu- racˇnı´na´stroje a neˇkolik jednoduchy´ch aplikacı´. Ostatneˇ samotny´syste´m X Win- dow je doda´va´n za´rovenˇs jednoduchy´mi aplikacemi demonstrujı´cı´mi neˇktere´jeho vlastnosti, naprˇı´klad xclock (graficke´ hodiny), xcalc (kalkulacˇka), xload (zobra- KAPITOLA 10 GRAFICKY´ SUBSYSTE´ M 141

zuje zatı´zˇenı´syste´mu), xterm (termina´l), xkill („odstrˇelenı´“ neˇktere´aplikace), atd. V neˇktery´ch osekaneˇjsˇı´ch Unixech cˇi Linuxech neˇktere´ tyto aplikace nemusı´by´t zahrnuty. Neˇkterˇı´spra´vci oken, desktopova´prostrˇedı´a widget knihovny: • Nejstarsˇı´ widget knihovna pro X Window je Athena, pouzˇı´va´ ji nejstarsˇı´ spra´vce oken twm (Tab Window Manager). Nenı´esteticky moc dokonala´a ma´ trochu zvla´sˇtnı´zpu˚sob ovla´da´nı´neˇktery´ch prvku˚(naprˇı´klad okno zı´ska´va´za- meˇrˇenı´, pokud nad neˇnajede mysˇ, nenı´trˇeba klepnout na jeho plochu, trochu jinak se zacha´zı´s posuvnı´ky, zmeˇnou velikosti oken, atd.). • Desktopove´ prostrˇedı´ CDE (Common Desktop Environment, je komercˇnı´, pouzˇı´vane´na komercˇnı´ch Unixech) je postaveno na spra´vci oken Motif se stejnojmennou widget knihovnou. • Desktopove´prostrˇedı´ KDE (K Desktop Environment) ma´spra´vce oken na- zvane´ho K Window Manager pouzˇı´vajı´cı´ho widget knihovnu Qt ([kju˚t]). • Desktopove´prostrˇedı´ Gnome pouzˇı´va´spra´vce oken Metacity pouzˇı´va´widget knihovnu GTK+. Pokud po startu operacˇnı´ho syste´mu nenı´ hned spusˇteˇno graficke´ prostrˇedı´ (ma´me spusˇteˇnu pouze textovou konzoli), pak X Window spustı´me prˇı´kazem xinit nebo startx. Pak se podle u´daju˚v konfiguracˇnı´ch souborech spustı´take´ prˇı´slusˇny´spra´vce oken a prˇı´padneˇdesktopove´prostrˇedı´. Dalsˇı´informace o nejpouzˇı´vaneˇjsˇı´ch spra´vcı´ch oken a desktopovy´ch prostrˇedı´ch jsou ve skriptech pro cvicˇenı´.

10.3 Technologie rozsˇirˇujı´cı´mozˇnosti grafiky

Vy´voj v oblasti hardware, a tedy i v oblasti graficky´ch karet, jde neusta´le kuprˇedu. Graficke´subsyste´my samotne´tomuto tempu nestacˇı´a proto vznikajı´a vyvı´jejı´se softwarove´technologie, ktere´rozsˇirˇujı´jejich mozˇnosti. Jde obvykle o podsyste´my cˇi sady knihoven, ktere´zprˇı´stupnˇujı´nebo usnadnˇujı´prˇı´stup programa´toru˚m graficky (cˇi multimedia´lneˇ) na´rocˇneˇjsˇı´ch aplikacı´k pokrocˇilejsˇı´m funkcı´m ru˚zny´ch zarˇı´zenı´. Nejzna´meˇjsˇı´mi technologiemi rozsˇirˇujı´cı´mi mozˇnosti graficky´ch syste´mu˚jsou OpenGL a DirectX, ale existujı´i dalsˇı´, specificˇteˇjsˇı´, naprˇı´klad DirectFB. OpenGL a DirectX si navza´jem konkurujı´ v oblasti 3D grafiky. Tyto technologie se pou- zˇı´vajı´ zejme´na prˇi programova´nı´ her, aplikacı´ virtua´lnı´ reality, CAD programu˚, veˇdecko-technicke´vizualizace, 3D modelova´nı´a dalsˇı´ch na´rocˇny´ch multimedia´l- nı´ch aplikacı´. KAPITOLA 10 GRAFICKY´ SUBSYSTE´ M 142

Pokud je aplikace psa´na s pomocı´knihoven neˇktere´z teˇchto technologiı´, pak musı´by´t tyto knihovny prˇı´tomny i v syste´mu uzˇivatele. Protozˇe vsˇak jde obvykle o technologie volneˇdostupne´na Internetu, nenı´to azˇtakovy´proble´m. U´ cˇelem je prˇedevsˇı´m akcelerace (urychlenı´) prˇı´stupu ke graficke´mu (obecneˇ multimedia´lnı´mu) hardwaru. Protozˇe existuje mnoho druhu˚graficky´ch zarˇı´zenı´ (ty´ka´se to prˇedevsˇı´m graficky´ch karet), a kazˇde´ma´trochu jine´vlastnosti, musı´by´t to, co nenı´prˇı´mo podporova´no dotycˇny´m hardwarem, softwaroveˇemulova´no. Na- prˇı´klad pokud graficka´karta nema´podporu 3D, musı´tuto funkci „dodat“ OpenGL nebo DirectX (to rozhranı´, ktere´programa´tor aplikace vyzˇadujı´cı´3D pouzˇı´va´), mı´sto aby byly prˇı´mo vyuzˇı´va´ny funkce karty.

OpenGL (Open Graphics Library) je standard pro API pro tvorbu aplikacı´pocˇı´ta- cˇove´grafiky (prosteˇsada knihoven s API funkcemi). Projekt je od pocˇa´tku vyvı´jen jako neza´visly´na hardware, operacˇnı´m syste´mu a programovacı´m jazyce, a take´ volneˇsˇirˇitelny´. Samotny´projekt se soustrˇed’uje pouze na grafiku (vcˇetneˇ3D). Neza´vislost na hardware znamena´, zˇe to funguje, at’ uzˇpouzˇı´va´me jaky´koliv hardware, a nove´vlastnosti hardwaru se v OpenGL implementujı´ jako extensions (rozsˇı´rˇenı´) – rozsˇirˇujı´cı´moduly, nenı´trˇeba prˇepisovat cely´syste´m. Neza´vislost na operacˇnı´m syste´mu znamena´, zˇe OpenGL je snadno prˇenositelny´ na ru˚zne´operacˇnı´syste´my (tj. nevyuzˇı´va´zˇa´dne´konkre´tnı´funkce ja´dra operacˇnı´ch syste´mu˚), cozˇse take´vyuzˇı´va´, existujı´porty – varianty pro snad vsˇechny pouzˇı´va- neˇjsˇı´operacˇnı´syste´my vcˇetneˇUnixu˚a Windows. OpenGL je take´neza´visly´na zvolene´m programovacı´m jazyce, protozˇe knihovny tohoto syste´mu jsou psa´ny nikoliv objektoveˇ, ale strukturovaneˇ a rozhranı´prˇı´stu- povy´ch funkcı´je dostupne´ze vsˇech beˇzˇny´ch programovacı´ch jazyku˚(datove´typy na´vratovy´ch hodnot, parametru˚, apod.). Toto rozhranı´ pouzˇı´va´ mnoho na´rocˇneˇjsˇı´ch her pro Linux, ale take´ graficke´ knihovny (Mesa) a graficke´aplikace (naprˇı´klad Blender, Maya). Je soucˇa´stı´veˇtsˇiny dnes pouzˇı´vany´ch operacˇnı´ch syste´mu˚vcˇetneˇBSD, Linuxu a Windows (zde ovsˇem ve starsˇı´verzi), je dostupna´z mnoha programovacı´ch jazyku˚(nebo existuje mozˇnost prˇida´nı´jako modulu) – GLT pro C++, PHP OpenGL, AdaOpenGL, GTK+ OpenGL Toolkit, GtkGLExt, OpenGL.NET (pro C#) , dokonce takto mohou by´t vytva´rˇeny i objekty ActiveX (Graphcontrols1).

DirectX je knihovna pro tvorbu multimedia´lnı´ch aplikacı´vytvorˇena´ Microsoftem, dnes se pouzˇı´va´verze 9. Je urcˇena pouze pro Windows, na jine´m operacˇnı´m syste´mu

1viz http://www.freshmeat.net KAPITOLA 10 GRAFICKY´ SUBSYSTE´ M 143 nefunguje. Tato technologie je cˇa´stecˇneˇimplementova´na ve Wine a jeho klonech, proto s urcˇity´mi omezenı´mi lze provozovat aplikace napsane´ s pouzˇitı´m DirectX take´na Unixovy´ch syste´mech. Narozdı´l od OpenGL se DirectX nesoustrˇed’uje jen na grafiku, ale celkoveˇna multime´dia vcˇetneˇzvuku. Ma´neˇkolik cˇa´stı´, naprˇı´klad DirectDraw (2D grafika), Direct3D (3D grafika), DirectSound (prˇehra´va´nı´zvuku˚wave), atd. DirectX je povazˇova´n za objektovy´(i kdyzˇne plneˇ) syste´m, pouzˇı´vajı´se COM objekty. Vy´hodou tohoto prˇı´stupu je samozrˇejma´ kompatibilita s COM objekty ve Windows a s technologiı´ActiveX, nevy´hodou je ne pra´veˇsnadna´manipulace s COM objekty. Ve Windows je mozˇne´prova´deˇt za´kladnı´konfiguraci DirectX v na´stroji Na´stroj pro diagnostiku DirectX, ktery´spustı´me prˇı´kazem dxdiag.exe nebo se k neˇmu do- staneme v na´stroji Syste´move´informace (Start - Programy - Prˇı´slusˇenstvı´- Syste´move´ na´stroje - Syste´move´informace nebo spustit program msinfo32.exe), v menu Na´stroje - Na´stroj pro diagnostiku DirectX.

DirectFB je knihovna obdobna´OpenGL (akcelerace graficke´ho hardwaru), ale pouze pro 2D grafiku. Pouzˇı´va´se prˇedevsˇı´m na kapesnı´ch pocˇı´tacˇı´ch s Linuxem (ale je podporova´na take´na operacˇnı´ch syste´mech BSD a MacOSX), obcha´zı´knihovny X Window a prˇistupuje prˇı´mo ke graficke´mu hardwaru (ovladacˇu˚m). Pouzˇı´va´se naprˇı´klad prˇi vykreslova´nı´fontu˚, akceleraci graficky´ch karet a ope- racı´ jimi podporovany´ch (vykreslova´nı´ jednoduchy´ch objektu˚, stı´nova´nı´, barvy, alfa-kana´l, apod.), pra´ci s forma´ty obra´zku˚(PNG, GIF, JPG, atd.), videoforma´ty vcˇetneˇpodpory Flashe, ke spra´veˇvstupnı´ch zarˇı´zenı´(kla´vesnice, mysˇi s ru˚zny´m rozhranı´m, joystick). PRˇ I´LOHA A Vy´stupy neˇktery´ch diskovy´ch na´stroju˚ pro Windows

Microsoft Windows XP [Verze 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp.

C:\>chkdsk SysteÂm souboruÊje typu NTFS.

UPOZORNEÏNIÂ! Nebyl zadaÂn parametr F. NaÂstroj CHKDSK probeÏhne v rezÏimu jen pro cÏtenõÂ.

Program CHKDSK oveÏrÏuje soubory (faÂze 1 z 3)... OveÏrÏenõÂsouboru dokoncÏeno. Program CHKDSK oveÏrÏuje rejstrÏõÂky (faÂze 2 z 3)... OveÏrÏenõÂrejstrÏõÂku dokoncÏeno. Program CHKDSK obnovuje ztraceneÂsoubory. Program CHKDSK oveÏrÏuje popisovacÏe zabezpecÏenõÂ(faÂze 3 z 3)... OveÏrÏenõÂpopisovacÏe zabezpecÏenõÂbylo dokoncÏeno. Program CHKDSK nalezl volneÂmõÂsto oznacÏeneÂjako prÏideÏleneÂv bitoveÂmapeÏtabulky MFT. Oprava chyb v rastru svazku. SysteÂm Windows nalezl chyby v systeÂmu souboruÊ. Spust'te naÂstroj CHKDSK s prÏepõÂnacÏem /F (opravit) a pokuste se je opravit.

15358108 kB mõÂsta na disku celkem. 9601772 kB v 102634 souborech uzÏivatele. 30344 kB v 9969 rejstrÏõÂcõÂch. 0 kB v chybnyÂch sektorech. 179832 kB pouzÏõÂvaÂsysteÂm. 65536 kB zabõÂraÂsoubor s protokolem. 5546160 kB na disku je volnyÂch.

144 KAPITOLA A VY´ STUPY NEˇ KTERY´ CH DISKOVY´ CH NA´ STROJU˚ PRO WINDOWS 145

4096 bajtuÊv kazÏdeÂalokacÏnõÂjednotce 3839527 alokacÏnõÂch jednotek na disku celkem. 1386540 volnyÂch alokacÏnõÂch jednotek

C:\>fsutil fsinfo ---- PodporovaneÂprÏõÂkazy FSINFO ---- drives VytvorÏõÂseznam vsÏech jednotek. drivetype OdesÏle dotaz na typ daneÂjednotky. volumeinfo OdesÏle dotaz na informace o svazku. ntfsinfo OdesÏle dotaz na informace o svazku NTFS. statistics OdesÏle dotaz na statistiku systeÂmu souboruÊ.

C:\>fsutil fsinfo ntfsinfo c: SeÂrioveÂcÏõÂslo svazku NTFS: 0xe2ecd978ecd94785 Verze: 3.1 PocÏet sektoruÊ: 0x0000000001d4b138 CelkovyÂpocÏet clusteruÊ 0x00000000003a9627 VolneÂclustery: 0x0000000000152892 Celkem vyhrazeno: 0x0000000000000000 PocÏet bajtuÊna sektor: 512 PocÏet bajtuÊna cluster: 4096 PocÏet bajtuÊna segment zaÂznamu souboru: 1024 PocÏet clusteruÊna segment zaÂznamu souboru: 0 PlatnaÂdeÂlka dat hlavnõÂtabulky souboruÊ(MFT): 0x0000000006e3c000 PocÏaÂtecÏnõÂcÏõÂslo logickeÂho clusteru hlavnõÂtabulky souboruÊ(MFT): 0x00000000000c0000 PocÏaÂtecÏnõÂcÏõÂslo logickeÂho clusteru hlavnõÂtabulky souboruÊ(MFT2): 0x00000000001d4b13 ZacÏaÂtek zoÂny hlavnõÂtabulky souboruÊ(MFT): 0x000000000022d020 Konec zoÂny hlavnõÂtabulky souboruÊ(MFT): 0x000000000024c780

C:\> LITERATURA

[1] CˇADA, O.: Operacˇnı´syste´my. Praha, Grada, 1993. [2] PLA´ SˇIL, F.: Operacˇnı´syste´my. Praha, CˇVUT, 1983. [3] PLA´ SˇIL, F. - STAUDEK, J.: Operacˇnı´syste´my. Praha, SNTL, 1991. [4] Hora´k, J.: BIOS a Setup. Brno, Computer Press, 2004. [5] Kadlec, Z.: Pru˚vodce nitrem BIOSu. Praha, Grada Publishing, 1996. [6] Lee, J. - Ware, B.: OpenSource – vy´voj webovy´ch aplikacı´. Brno, Computer Press, 2000. [7] Lasser, J.: Rozumı´me Unixu. Praha, Computer Press, 2002. [8] Kolektiv autoru˚: Linux Dokumentacˇnı´projekt. 3. aktualizovane´vyda´nı´. Brno, Computer Press, 2003. Soubory ke stazˇenı´na adrese http://knihy.cpress.cz/DataFiles/Book/00000675/Download/K0819.pdf

[9] Raymond, E. S.: Umeˇnı´programova´nı´v Unixu. Brno, Computer Press, 2004. [10] Lucas, M.: FreeBSD. Brno, Computer Press, 2003. [11] Toxen, B.: Bezpecˇnost v Linuxu. Brno, Computer Press, 2003.

[12] Cˇada, O.: Mac OS X Shell krok za krokem. Praha, Grafika Publishing. [13] Solomon, D. A.: Windows NT pro administra´tory a vy´voja´rˇe. Brno, Computer Press, 1999. [14] Microsoft Corporation: Microsoft Windows XP Professional Resource Kit. Brno, Computer Press, 2004.

146 LITERATURA 147

[15] Moskowitz, J.: Za´sady skupiny, profily a IntelliMirror ve Windows 2003, 2000 a XP. Brno, Computer Press, 2006.

[16] Stanek, W. R.: Prˇı´kazovy´rˇa´dek Microsoft Windows. Brno, Computer Press, 2005.

[17] Price, B.: Active Directory. Brno, Computer Press, 2005.

[18] Allen, R. - Lowe-Norris, A. G.: Active Directory. Praha, Grada Publishing, 2005.

[19] Kokoreva, O.: Registr Microsoft Windows XP. Brno, Computer Press, 2002.

[20] Walnum, C.: Programujeme grafiku v Microsoft Direct3D. Brno, Computer Press, 2004.

[21] Kraval, I. - Ivachiv, P.: Za´klady komponentnı´technologie COM. Brno, Computer Press, 2001.

[22] Kacˇma´rˇ, D.: Programujeme v COM a COM+. Brno, Computer Press, 2000.

[23] Pokorny´, J.: U´ vod do .NET Framework. Brno, Computer Press, 2000. Soubory ke stazˇenı´na knihy.cpress.cz/DataFiles/Book/00000896/Download/frameworknet.zip

[24] Born, G.: Skriptujeme operace na PC pomocı´Microsoft Windows Script Host 2.0. Brno, Computer Press, 2001.

[25] Aitken, P. G.: Windows Script Host 2.0. Praha, Grada Publishing, 2001.

[26] Walnum, C.: VMWare. Brno, Computer Press, 2004.

[27] Caletka, O.: Partition Magic, Symantec Ghost a dalsˇı´utility pro pra´ci s pevny´m diskem. Brno, Computer Press, 2002.

[28] Kolektiv autoru˚: The Linux Documentation Project. Poslednı´aktualizace 2006. Dostupne´z http://www.tldp.org

[29] Machej, P.: GRUB – zavadeˇcˇsyste´mu.Cˇasopis Linux+ 2/05, str. 52-57

[30] Vondra, T.: Gentoo Handbook, konfigurace zavadeˇcˇe. Dostupne´z http://www.fuzzy.cz/gentoo/®les/html/ch09.html

[31] Rˇ eha´k, M.: Operacˇnı´syste´my. Dostupne´z http://www.volny.cz/rayer/os/os.htm

[32] Mra´z, O.: Autoexec.bat a Config.sys. Dostupne´z http://www.volny.cz/otakarmraz/swPomoc/autocnfg.html LITERATURA 148

[33] Maturita.cz: Konfigurace pocˇı´tacˇe. Dostupne´z http://www.maturita.cz/prv/kon®gurace pocitace.htm

[34] Dvorˇa´k, V.: WIN95 + RH6.2 = 10GB HDD. Linuxove´noviny, 2001. Dostupne´z http://www.linux.cz/noviny/2001-08/clanek05.html

[35] Park, E. B. - Galı´cˇek, R.: Dual-Boot Linux a Windows 2000/XP s Grub HOWTO. Dostupne´z http://www.volny.cz/galicek/linux%20ver%20XP/grub-w2k-HOWTO-cz.html REJSTRˇ I´K

Symbols buffer omezeny´...... 73, 74, 87 cacls...... 124 beˇhprocesu ...... 71

A C ACL...... 123 cluster...... 111,118 adresa absolutnı´...... 31, 38 cylindr...... 111 adresarelativnı´...... 31 adresa´rˇ...... 112,131 D adresa´rˇkorˇenovy´...... 112 delta-list...... 60 algoritmus hodinovy´...... 44 deskriptor...... 47 algoritmus pekarˇu˚v...... 83 DirectFB...... 156 API...... 9,21,29,90 DirectX...... 156 APIgraficke´...... 151 diskdynamicky´...... 137 aplikace distribuovana´...... 14 disk logicky´...... 111, 137, 140 architektura hardwarova´...... 144 dispetcher...... 61 DOSExtender...... 20 B dostavenı´cˇko...... 89 Bakeryalgorithm...... 83 bestfit...... 39 E bestfit...... 126 EBR...... 139 BIOS...... 19,136 emulace operacˇnı´ho syste´mu ...... 147 blitter...... 40 exekutiva...... 24 bootloader...... 139 F boot manazˇer ...... 139, 144 FATtabulka...... 118 boot sektor ...... 118, 138, 139 fdisk...... 140 bootblock ...... 129 firstfit...... 39 broadcast...... 66 flexibilita distribuovane´ho OS ...... 15 bra´na...... 68 fork...... 52 buffer neomezeny´...... 73, 74 fragmentace ...... 36, 39, 117

149 LITERATURA 150 funkce operacˇnı´ho syste´mu ...... 9 konzistencedat ...... 69,76 konzument...... 73,76,87 G kroku´lohy...... 8 GDT...... 47 kvantum...... 61,62,64,65 GPT...... 137 granularita distribuovanosti ...... 13 L grid...... 13 lastfit...... 40 LDT...... 47 H HAL...... 24,28 M halda...... 36 maskova´nı´prˇerusˇenı´...... 81 Master Boot Record...... 138 I MBR...... 137,138 i-uzel...... 129 mechanismus zpra´v ...... 88 I/Orozhranı´...... 104 MFT...... 125 I/O zarˇı´zenı´...... 104 mikroja´dro...... 12 image...... 147 mikrokernel...... 18 instrukce...... 7,107 minikernel...... 18 instrukceswap...... 84 monitor...... 89 instrukceTSL...... 84 multicast...... 66 instrukceXCHG...... 84 multiprocessing asymetricky´...... 10 interpret prˇı´kazu˚...... 151 multiprocessing symetricky´...... 10 IPC...... 66 multitasking...... 11,53 IRQ...... 107 multitasking kooperativnı´...... 55 J multitasking preemptivnı´...... 56 job...... 8 multithreading...... 58 ja´dro...... 20,23,24,27 mutex...... 81 mı´sto...... 70 K kernelmode...... 27 O kernel-thread...... 59 obsluhaoken...... 150 klient...... 18 oddı´l...... 137 klient-server ...... 12,18 oddı´laktivnı´...... 138 knihovna dynamicky linkovana´. . . . . 21 oddı´ldatovy´...... 140 komunikace asymetricka´...... 67 oddı´l prima´rnı´...... 137, 138 komunikace asynchronnı´...... 67, 73 oddı´l rozsˇı´rˇeny´...... 137–139 komunikace meziprocesova´...... 66 oddı´l syste´movy´...... 140 komunikace neprˇı´ma´...... 88 odkazpevny´...... 125,131 komunikace symetricka´...... 67, 75 odkaz symbolicky´...... 131 komunikace synchronnı´. . 67, 74, 75, 80, offset ...... 36, 38, 45, 47, 109 89, 90 okno...... 151 kontext...... 54 okno korˇenove´...... 152 LITERATURA 151

OpenGL...... 155 program zava´deˇcı´...... 139, 142 ovladacˇ...... 106 prostor adresovy´...... 31 prostor procesu adresovy´...... 8 P prostor procesu pameˇt’ovy´...... 8 pagefault...... 42 prostor syste´mu pameˇt’ovy´...... 8 pager...... 50 prostrˇedky fyzicke´...... 7 pameˇt’operacˇnı´...... 8 prostrˇedky logicke´...... 8 pameˇt’virtua´lnı´...... 41 prostrˇedı´desktopove´...... 153 pameˇt’vnitrˇnı´...... 8 prouddat...... 124 pameˇt’vneˇjsˇı´...... 8 pru˚meˇrova´nı´exponencia´lnı´...... 64 partition...... 137 pseudoLRU...... 43 PCB...... 51,52 pseudomultitasking ...... 54 periferie...... 104 pseudoparalelismus...... 54 Petriho sı´t’...... 70, 72, 74, 75, 77, 79, 80 prˇechod...... 70 PID...... 52,53 prˇerusˇenı´...... 107 platforma hardwarova´...... 7 prˇerusˇenı´hardwarove´...... 107 platforma softwarova´...... 8 prˇerusˇenı´maskovane´...... 81, 108 plochapracovnı´...... 151 prˇı´kazy vnitrˇnı´...... 20 pla´novacˇprocesoru ...... 61 prˇı´kazy vneˇjsˇı´...... 20 pla´nova´nı´nepreemptivnı´. . . . . 62, 63, 65 pla´nova´nı´preemptivnı´...... 62, 63, 65 R podmı´nka...... 89 registr...... 23 podmı´nky Bernsteinovy ...... 69 registr prˇı´znaku˚...... 54 podsyste´m prostrˇedı´...... 24 registr segmentovy´...... 36, 54 popisovacˇ...... 47 registr za´sobnı´kovy´...... 54 port...... 68 rozhranı´dokumentovane´...... 26 POSIX...... 25 rozhranı´syste´movy´ch vola´nı´...... 29 povrch...... 111 rozsˇirˇitelnost distribuovane´ho OS. . . .16 pocˇı´tacˇabstraktnı´...... 18 RPC...... 67,80,90 pocˇı´tacˇholy´...... 8 ra´mec...... 41 pocˇı´tacˇvirtua´lnı´...... 17, 20, 147 PPID...... 53 S priorita dynamicka´...... 65 schra´nka ...... 68 priorita realtimova´...... 12 segment...... 36,44,109 prioritastaticka´...... 65 sekcekriticka´...... 72,76 proces...... 8,51 sektor...... 110 proces syste´movy´...... 26 selektor...... 47 procesor...... 7 semafor...... 84 procesor vı´ceja´drovy´...... 7 semafor bina´rnı´...... 85 producent...... 73,76,87 semaforobecny´...... 86 producent - konzument...... 107 server...... 18 program rezidentnı´...... 46 shell...... 28 LITERATURA 152 sluzˇba...... 26 syste´m loka´lnı´...... 11, 19 socket...... 68 syste´m multitaskovy´...... 11, 24, 27 soubor...... 112,115 syste´m operacˇnı´...... 8 soubor odkla´dacı´...... 48 syste´m operacˇnı´distribuovany´...... 15 soubor rˇı´dky´...... 125 syste´m realtimovy´...... 11, 76 souborovy´syste´m zˇurna´lovacı´...... 123 syste´m souborovy´. .22, 28, 115, 117, 118, spra´va oken a grafiky...... 26 121, 123, 128, 129 spra´vceIFS...... 22 syste´m souborovy´virtua´lnı´. . . . 117, 133 spra´vce konfigurace ...... 22 syste´m souborovy´zˇurna´lovacı´.116, 131, spra´vceoken...... 153 132 spra´vce periferiı´...... 105 syste´m specia´lnı´...... 11 spra´vce programu˚...... 21 syste´m sı´t’ovy´...... 11, 24, 27 spra´vce virtua´lnı´ch zarˇı´zenı´...... 20, 22 syste´m univerza´lnı´...... 11, 19, 24, 27 stav konzistentnı´...... 69 syste´mV/V...... 8 stavprocesu...... 71 syste´m vı´ceprocesorovy´. . . 10, 24, 27, 88 stopa...... 110 syste´m vı´ceprogramovy´...... 11 stream...... 124 syste´m vı´ceuzˇivatelsky´...... 10, 24, 27 strojvirtua´lnı´...... 17 syste´m vı´ceu´lohovy´...... 11 struktura abstraktnı´pocˇı´tacˇ...... 18 syste´m vy´pocˇetnı´...... 7 struktura hierarchicka´...... 17 struktura klient-server ...... 18, 27 T struktura modula´rnı´...... 26 tabulka deskriptoru˚...... 47 struktura monoliticka´...... 17 tabulka rozsˇı´rˇenı´disku ...... 138 struktura stavebnicova´...... 18 tabulkastra´nek...... 41 struktura virtua´lnı´pocˇı´tacˇ...... 17 transparentnost distribuovane´ho OS . 15 struktura vrstvena´...... 17, 26 TSR...... 46,55 stra´nka...... 37,41 U stra´nkova´nı´...... 37 unicast...... 66 strˇı´da´nı´procesu˚...... 82 usedbit...... 43 subsyste´m graficky´...... 150 user-thread...... 59 subsyste´m prostrˇedı´...... 24 uzˇivatel...... 8 superblok...... 129 svazek...... 125,137 V svazek dyniamicky´...... 137 V/V zarˇı´zenı´...... 104 synchronizace procesu˚...... 72, 80 vektor prˇerusˇenı´...... 47, 109 syste´m distribuovany´...... 13 VFAT...... 121 syste´mI/O...... 8 VFS...... 29,128 syste´m jednoprocesorovy´...... 10, 19 videopameˇt’...... 31 syste´m jednoprogramovy´...... 11, 19 virtualizace zarˇı´zenı´...... 105 syste´m jednouzˇivatelsky´...... 10, 19 vla´kno...... 58,75 syste´m jednou´lohovy´...... 11 vola´nı´syste´move´...... 88 LITERATURA 153 vy´padek stra´nky...... 42

W widgetknihovna...... 153

X X Window System ...... 28, 152

Z zaka´zka...... 7 zası´la´nı´zpra´v ...... 66, 67, 73, 75, 88 zavadeˇcˇ...... 139,142 zarˇı´zenı´blokove´...... 106 zarˇı´zenı´perifernı´...... 8 zarˇı´zenı´sdı´lene´...... 105 zarˇı´zenı´specia´lnı´...... 106 zarˇı´zenı´spolecˇne´...... 105 zarˇı´zenı´vyhrazene´...... 105 zarˇı´zenı´znakove´...... 106 za´kaz prˇerusˇenı´...... 81

Cˇ cˇeka´nı´aktivnı´...... 80, 81 cˇeka´nı´pasivnı´...... 80, 81 cˇı´tacˇprogramovy´...... 52, 54

U´ u´loha...... 8 u´loha Kriticka´sekce ...... 72 u´lohaModel-obraz...... 75 u´loha Producent - konzument 73, 75, 87, 89 u´loha Peˇt hladovy´ch filozofu˚. . . . . 78, 87 u´loha Soubeˇh procesu˚...... 79 u´loha synchronizacˇnı´...... 72 u´loha Cˇtena´rˇi - pı´sarˇi ...... 77 u´lozˇisˇteˇ...... 110