SLEZSKA´ UNIVERZITA V OPAVEˇ FILOZOFICKO-PRˇI´RODOVEˇDECKA´ FAKULTA ´ STAV INFORMATIKY U
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
2
3
´ vod do operacˇnı´ch syste´mu˚ U 1.1 Co je to operacˇnı´ syste´m . . . . . 1.2 Funkce operacˇnı´ho syste´mu . . . 1.3 Typy operacˇnı´ch syste´mu˚ . . . . 1.4 Realtimove´ operacˇnı´ syste´my . . 1.5 Distribuovane´ operacˇnı´ syste´my
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
1 1 3 4 5 7
Struktura operacˇnı´ch syste´mu˚ 2.1 Za´kladnı´ typy struktur operacˇnı´ch syste´mu˚ 2.2 MS-DOS a Windows s DOS ja´drem . . . . . 2.3 Windows rˇady NT . . . . . . . . . . . . . . 2.4 Syste´my Unixove´ho typu . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
10 10 11 16 19
Spra´va pameˇti 3.1 Modul spra´vce pameˇti . . . . . . . . . . . . . . 3.2 Rea´lne´ metody prˇideˇlova´nı´ pameˇti . . . . . . . 3.2.1 Prˇideˇlenı´ jedne´ souvisle´ oblasti pameˇti 3.2.2 Prˇideˇlova´nı´ bloku˚ pevne´ velikosti . . . 3.2.3 Dynamicke´ prˇideˇlova´nı´ bloku˚ pameˇti . 3.2.4 Segmentace . . . . . . . . . . . . . . . . 3.2.5 Jednoduche´ stra´nkova´nı´ . . . . . . . . . ˇ esˇenı´ fragmentace pameˇti . . . . . . . . . . . 3.3 R 3.4 Virtua´lnı´ pameˇt’ . . . . . . . . . . . . . . . . . . 3.4.1 Stra´nkova´nı´ na zˇa´dost . . . . . . . . . . 3.4.2 Segmentace se stra´nkova´nı´m na zˇa´dost 3.4.3 Swapova´nı´ procesu˚ . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
23 23 25 25 26 27 28 30 31 33 34 37 37
i
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
ii 3.5
4
5
6
Spra´va pameˇti v neˇktery´ch operacˇnı´ch syste´mech 3.5.1 MS-DOS a Windows . . . . . . . . . . . . . 3.5.2 Unixove´ syste´my vcˇetneˇ Linuxu . . . . . . 3.5.3 MacOS . . . . . . . . . . . . . . . . . . . . .
Procesy 4.1 Evidence procesu˚ . . . . . . . . . . . . . . 4.2 Beˇh procesu˚ a multitasking . . . . . . . . 4.3 Multithreading . . . . . . . . . . . . . . . 4.4 Spra´va front procesu˚ . . . . . . . . . . . . 4.5 Prˇideˇlova´nı´ procesoru . . . . . . . . . . . 4.5.1 Fronta (FCFS) . . . . . . . . . . . . 4.5.2 Cyklicke´ pla´nova´nı´ (RR) . . . . . . 4.5.3 Nejkratsˇ´ı u´loha (SPN) . . . . . . . 4.5.4 Priority . . . . . . . . . . . . . . . . 4.5.5 Kombinace metod s vı´ce frontami 4.6 Komunikace procesu˚ . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
38 38 40 41
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
43 43 45 49 51 53 54 54 55 56 57 58
Synchronizace procesu˚ ´ vod do problematiky . . . . . . . . . . . . . 5.1 U 5.2 Petriho sı´teˇ . . . . . . . . . . . . . . . . . . . . 5.3 Za´kladnı´ synchronizacˇnı´ u´lohy . . . . . . . . 5.3.1 Kriticka´ sekce . . . . . . . . . . . . . . 5.3.2 Producent–konzument . . . . . . . . . 5.3.3 Model–obraz . . . . . . . . . . . . . . 5.3.4 Cˇtena´rˇi–pı´sarˇi . . . . . . . . . . . . . . 5.3.5 Peˇt hladovy´ch filozofu˚ . . . . . . . . . 5.3.6 Soubeˇh procesu˚ . . . . . . . . . . . . . 5.4 Implementace cˇeka´nı´ prˇed kritickou sekcı´ . . 5.5 Synchronizacˇnı´ na´stroje operacˇnı´ho syste´mu 5.5.1 Semafory . . . . . . . . . . . . . . . . . 5.5.2 Mechanismus zpra´v . . . . . . . . . . 5.5.3 Monitory . . . . . . . . . . . . . . . . . 5.5.4 RPC . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
60 60 61 63 63 64 66 67 68 69 70 74 75 78 79 79
Uva´znutı´ procesu˚ (Deadlock) 6.1 Za´kladnı´ pojmy . . . . . . . . . . . . . . . . 6.2 Popis stavu prˇideˇlenı´ prostrˇedku˚ . . . . . . 6.3 Podmı´nky vzniku uva´znutı´ . . . . . . . . . 6.4 Prevence uva´znutı´ . . . . . . . . . . . . . . 6.5 Prˇedpovı´da´nı´ uva´znutı´ . . . . . . . . . . . . 6.5.1 Graf na´roku˚ a prˇideˇlenı´ prostrˇedku˚
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
81 81 82 83 84 86 86
. . . . . . . . . . .
. . . . . .
iii
6.6
6.7 7
8
9
6.5.2 Banke´rˇu˚v algoritmus . . . . . . . . Detekce uva´znutı´ . . . . . . . . . . . . . . ´ prava grafu prˇideˇlenı´ prostrˇedku˚ 6.6.1 U ´ prava Banke´rˇova algoritmu . . . 6.6.2 U Reakce prˇi zjisˇteˇnı´ zablokova´nı´ . . . . . .
Spra´va periferiı´ 7.1 I/O syste´m . . . 7.2 Druhy periferiı´ 7.3 Ovladacˇe . . . . 7.4 Prˇerusˇenı´ . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . .
87 89 90 90 92
. . . .
93 93 94 95 96
Pameˇt’ova´ me´dia 8.1 Za´kladnı´ pojmy . . . . . . . . . . . . . . . . . . . . . . 8.2 Adresa´rˇova´ struktura . . . . . . . . . . . . . . . . . . . 8.3 Soubory a syste´m souboru˚ . . . . . . . . . . . . . . . . 8.4 Souborove´ syste´my ve Windows . . . . . . . . . . . . 8.4.1 Starsˇ´ı verze souborovy´ch syste´mu˚ typu FAT . 8.4.2 VFAT a FAT32 . . . . . . . . . . . . . . . . . . . 8.4.3 Souborovy´ syste´m NTFS . . . . . . . . . . . . . 8.4.4 Srovna´nı´ souborovy´ch syste´mu˚ pro Windows 8.5 Souborove´ syste´my pro Linux . . . . . . . . . . . . . . 8.5.1 VFS . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.2 Souborove´ syste´my typu extxfs . . . . . . . . . 8.5.3 Dalsˇ´ı zˇurna´lovacı´ souborove´ syste´my . . . . . 8.5.4 Virtua´lnı´ souborove´ syste´my . . . . . . . . . . 8.5.5 Srovna´nı´ Linuxovy´ch souborovy´ch syste´mu˚ .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
99 99 101 104 106 106 109 111 114 115 115 116 120 121 122
Spra´va disku˚ 9.1 Proble´my s BIOSem . . . . . . . . . . . . . . . . . . . . 9.2 Za´kladnı´ pojmy . . . . . . . . . . . . . . . . . . . . . . 9.3 Struktura disku . . . . . . . . . . . . . . . . . . . . . . 9.4 Na´stroje pro spra´vu disku˚ . . . . . . . . . . . . . . . . 9.5 Zava´deˇcı´ programy . . . . . . . . . . . . . . . . . . . . 9.6 Mozˇnosti instalace operacˇnı´ch syste´mu˚ . . . . . . . . 9.7 Emulace jine´ho operacˇnı´ho syste´mu . . . . . . . . . . 9.7.1 Virtua´lnı´ pocˇ´ıtacˇe . . . . . . . . . . . . . . . . . 9.7.2 Emula´tory operacˇnı´ho syste´mu a podsyste´my
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
123 123 124 124 126 128 132 133 134 135
iv 10 Graficky´ subsyste´m 137 10.1 Za´kladnı´ pojmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 10.2 X Window System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 10.3 Technologie rozsˇirˇujı´cı´ mozˇnosti grafiky . . . . . . . . . . . . . . . . . 141 A Vy´stupy neˇktery´ch diskovy´ch na´stroju˚ pro Windows
144
Literatura
146
Rejstrˇı´k
149
KAPITOLA 1 ´ vod do operacˇnı´ch syste´mu˚ U 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ı´ samocˇ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 syste´mu (naprˇ. Intel x86, x86-64, AMD, AMD64, PowerPC, Alpha, MIPS, atd.), ve vy´pocˇetnı´m syste´mu prˇedpokla´da´me existenci alesponˇ jednoho procesoru,
1
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
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 (ReadOnly 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 posloupnostı´ 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.
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
3
Definice 1.1 Operacˇnı´ syste´m vy´pocˇetnı´ho syste´mu je spra´vce fyzicky´ch prostrˇedku˚ dane´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 procesu˚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ı´ procesoru, 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, sledova´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, instalaci, 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 vytva´rˇenı´ rozhranı´ umozˇnˇujı´cı´ho procesu˚m prˇistupovat k souboru˚m (a take´ jiny´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 operacˇnı´m syste´mem.
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
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 Interface). 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 rozhranı´, 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, Windows 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 asymetricke´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 procesoru. 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 „rutinnı´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´ procesory 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 pracovat vı´ce uzˇivatelu˚m najednou (tj. ve stejny´ okamzˇik) bez vza´jemne´ho ovlivnˇ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
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
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 „odstavene´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. Pouzˇ´ı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ˇasova´ 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 procesu 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´.
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
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 nejdu˚lezˇiteˇjsˇ´ı funkce (prˇedevsˇ´ım spra´vu procesu˚, prˇ´ıpadneˇ spra´vu pameˇti apod.), zbytek 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 unixove´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 syste´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´ Linux. 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. 1
Prˇ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).
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
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 Extender), 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 procesu˚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 spravovana´ 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 syste´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 distribuovane´ operacˇnı´ syste´my. Distribuovana´ aplikace je distribuovany´ syste´m beˇzˇ´ıcı´ na vı´ce propojeny´ch pocˇ´ı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. 2
Mu˚zˇeme take´ najı´t na´zev grid.
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
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 Climateprediction.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ˇ efektivneˇ 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ˇ rozsa´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˚rcem 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 procesoru˚, ktere´ nesdı´lejı´ spolecˇnou pameˇt’, a za´rovenˇ poskytuje uzˇivateli dojem jednoho pocˇ´ıtacˇe. 3
http://boinc.berkeley.edu
´ VOD DO OPERACˇNI´CH SYSTE´MU˚ KAPITOLA 1 U
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 fyzicke´ 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˚ (migracˇ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 prova´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 syste´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 samozrˇ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 budujı´ 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 operacˇnı´ch syste´mu˚ nebo v zarˇ´ızenı´ch (tiska´rny). Syste´m se skla´da´ z ja´dra a rozhranı´, 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 struktury 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 pro10
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 ostatnı´ch cˇa´stı´ syste´mu, jako je prˇepı´na´nı´ mezi procesy a rˇ´ızenı´ mechanismu zası´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´hodou 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
ˇ ada Windows s DOS ja´drem zahrnuje Windows 95, 95 OSR2, 98, 98 SE a ME. Tyto R 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 . 1
Windows do verze 3.11 byly pouze grafickou na´stavbou MS-DOSu, nikoliv samostatny´m operacˇ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ı´ univerza´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ˇedstavovana´ 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 syste´mu a komunikuje s uzˇivatelem (spusˇteˇne´ programy komunikujı´ s nizˇsˇ´ımi vrst2
Prˇ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´ COMMAND.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 reagovat. Za´kladnı´ konfiguracˇnı´ soubory jsou dva – CONFIG.SYS pro nastavenı´ hardwaru (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 Memory). Je prˇedstavova´n souborem Win386.EXE. Soucˇa´stı´ tohoto souboru je take´ Spra´vce virtua´lnı´ch zarˇ´ızenı´ (VMM = Virtual Machine 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ı´ potrˇ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 procesu˚m, . . . ), 3
MS-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˚ i386, 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 INI soubory (SYSTEM.INI, WIN.INI, . . . )
VM VM 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ı´ kurzoru, ikony, pı´smo, . . . ), • USER.EXE – uzˇivatelske´ ovla´da´nı´ rozhranı´, zdroje, ktere´ nepatrˇ´ı do GDI (dialogova´ okna, menu, okna, . . . ). V dalsˇ´ı vrstveˇ najdeme konfiguracˇnı´ soubory s prˇ´ıponou INI. Z nich jsou nejdu˚lezˇ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 Systems Manager), spravuje ru˚zne´ typy souborovy´ch syste´mu˚, ktere´ lze instalovat, 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´ aplikace s prˇ´ıponou DLL): • KERNEL – multithreading, multitasking, spra´va pameˇti, synchronizace objektu˚, 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ˇivatelske´ho graficke´ho rozhranı´ (okna, menu, ikony, . . . ), pra´ce s cˇasovacˇem, ...
KAPITOLA 2 STRUKTURA OPERACˇNI´CH SYSTE´MU˚
Win32 aplikace Na´stroje syste´mu, shell
Win16 aplikace
Win32 aplikace
Win16 aplikace
...
...
VM DOS 1
VM DOS 2
...
Registr
Ja´dro (KERNEL, USER, GDI) IFSM
VMM
16
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´ kompatibiliteˇ). 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´ prostor4 . 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ı´. Syste´m byl navrzˇen jako vı´ceprocesorovy´ (SMP – symetricky´ multiprocessing) vı´ceu4
To 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˚lezˇ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.
Syste´move´ procesy
Podsyste´my prostrˇedı´
Sluzˇby syste´mu
Aplikace
NTDLL.DLL Uzˇivatelsky´ rezˇim Privilegovany´ rezˇim
Exekutiva Spra´va pameˇti
Spra´va objektu˚
Spra´va procesu˚
I/O syste´m
Spra´va vyrovna´vacı´ pameˇti
Spra´va zabezpecˇenı´
Spra´va oken a grafiky
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ı´ souboru 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 nemusı´ 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, MSDOS 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ˇedstavova´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 Interface) 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 syste´movy´ch knihoven a dalsˇ´ıch syste´movy´ch zdroju˚. NTDLL prˇedstavuje tzv. dokumentovane´ 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 zobrazova´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. 5
POSIX (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 syste´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´ poskytujı´ 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 privilegovane´m rezˇimu). 3. Architektura klient-server se uplatnˇuje v API (Application Programming Interface), 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 knihovnu 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 (rezˇ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´ univerza´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.
Programy
Shell, vestaveˇne´ programy
Skripty shellu
Knihovny Ja´dro (privilegovany´ rezˇim) Kernel
Daemons
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ˇivatelske´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ˇivatelu˚. 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ˇedevsˇ´ı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 procesu˚
VFS
Spra´vce pameˇti
Sı´t’ove´ sluzˇby Ovladacˇ TCP/IP Ovladacˇ sı´t’ove´ karty
Souborove´ syste´my Ovladacˇ prvnı´ho HD
Ovladacˇ druhe´ho HD
Ovladacˇ diskety
Prvnı´ pevny´ disk
Druhy´ pevny´ disk
Disketa
Sı´t’ova´ 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 implementova´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´ syste´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ˇ 6
Proto 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 komunikovat prˇes knihovny obsahujı´cı´ definice API funkcı´ (Application Programming Interface, 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 jednotlivy´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, ktere´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 uvolneˇ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’ove´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ˇetnı´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 privilegovane´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). 1
Velikost 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 („logicky´ch obrazovek“, ktere´ lze strˇ´ıdat a tak rychle meˇnit obraz na monitoru).
KAPITOLA 3 SPRA´VA PAMEˇTI
3.2
25
Rea´lne´ metody prˇideˇlova´nı´ pameˇti
Zde probereme metody pouzˇ´ıvane´ v prˇ´ıpadeˇ, zˇe logicky´ adresovy´ prostor neprˇekracˇ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 procesu kromeˇ oblasti operacˇnı´ho syste´mu. Pameˇt’je rozdeˇlena na trˇi cˇa´sti: pameˇt’vyhrazenou 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’ {z
Pameˇt’, kterou ma´ proces k dispozici
$000000
|
Meznı´ registr 2⇒
Pameˇt’ pouzˇ´ıvana´ procesem Pameˇt’operacˇnı´ho 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 nepotrˇ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´ evidovat 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
Volny´ blok
Pouzˇ´ıva´ proces 2 Pouzˇ´ıva´ proces 1
$000000
| {z }| {z }
Meznı´ registr 2 2⇒ Meznı´ registr 1 2⇒
27
Pameˇt’prˇideˇlena´ procesu 2 Pameˇt’prˇideˇlena´ procesu 1
Pameˇt’operacˇnı´ho syste´mu
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 pameˇ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 ˇ esˇenı´ je vı´ce, naprˇ´ıklad vytvorˇenı´ hlavicˇek odhadnout jejı´ maxima´lnı´ velikost. R 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´ jednodusˇ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
dalsˇ´ı:
- NULL
vlastnı´k: ID procesu 2
dalsˇ´ı:
vlastnı´k: volne´
dalsˇ´ı:
Pouzˇ´ıva´ proces 2
Pameˇt’ procesu 1
z }| {
z
Pameˇt’ procesu 2
}|
{
vlastnı´k: volne´
$000000
Pouzˇ´ıva´ proces 1
vlastnı´k: ID procesu 1
dalsˇ´ı:
Pameˇt’OS
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 procesu˚, 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 probı´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 promeˇ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 procesoru 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 segmentu˚.
KAPITOLA 3 SPRA´VA PAMEˇTI
30
Stack Segment Registry procesoru SS
Volna´ pameˇt’
ES Extended Data Segment Data Segment
Code Segment
DS CS ...
$000000
Pameˇt’operacˇnı´ho syste´mu
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 2
(5)
volne´
(4)
Proces 1
(3)
Proces 2
(2)
Proces 1
(1)
volne´
(0)
Proces:
Stra´nky:
ID procesu 1 ID procesu 2 ...
1,3 2,5
... ... ...
Tabulka obsazenı´ pameˇti 0 1 2 3 4 5 ...
volne´ ID procesu 1 ID procesu 2 ID procesu 1 volne´ ID procesu 2
$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
ˇ esˇenı´ fragmentace pameˇti R
Pameˇt’ (vneˇjsˇ´ı, naprˇ´ıklad pevny´ disk, i vnitrˇnı´, tedy operacˇnı´ pameˇt’) je fragmentovana´, 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’ovy´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ˇedpokladem 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’ovy´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ˇasoveˇ 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ı´ relativnı´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, nevy´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 mechanismus 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 zamknout 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ˇesouva´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 spolupracujı´ 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ˇesunech nespolupracujı´, pouzˇ´ıvalo se v syste´mech Epoc (kdyzˇ jesˇteˇ sˇlo o operacˇ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ı´ pameˇ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 tabulce 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ı´ rezervova´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’ specia´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´ me´dium
stra´nka 8 stra´nka 7
Operacˇnı´ pameˇt’ ra´mec 4
ra´mec 3
ra´mec 2
ra´mec 1 ra´mec 0
-
stra´nka 6 stra´nka 5 stra´nka 4 stra´nka 3
-
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 operacˇ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. Komplikacı´ 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 bohuzˇ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 nepouzˇ´ı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´ evidence 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 nulova´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ı´ proble´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 logicke´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 tabulce 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 segmentu˚ 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´dane´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 jednodusˇ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ˇideˇ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ı´ syste´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. Ve skutecˇ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 syste´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 antivirovy´ program mu˚zˇe by´t napojen na prˇerusˇenı´ souvisejı´cı´ s prˇ´ıstupem k souboru˚m), 2
TSR 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 zacˇ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ˇ vyvola´nı´ tohoto prˇerusˇenı´ automaticky spusˇteˇna. Je zvykem, zˇe proces si uschova´ adresu 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. Informace 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 tabulek 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 meziprocesorove´ 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´mukoliv 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ˇ Windows 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 (naprˇ´ı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 zabudova´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ˇujı´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 metodeˇ 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 seg3
K 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ı´. 4 Je 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 pouzˇ´ı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 pracuje 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 (pseudoLRU). 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 programu, mohou sdı´let cˇa´st pameˇti, ve ktere´ je nacˇten ko´d programu. Podobneˇ pracuje 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 privilegovane´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 zahrnovala 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ı´ 5
Neˇ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ı´ implementovanou 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 (instrukce) 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 vykona´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
novy´
44
- prˇipraveny ´ beˇzˇ´ıcı´ inicializace odebra´n procesor procesu 6 (prˇideˇlenı´ prostrˇedku˚) cˇeka´ na ukoncˇen zarˇ´ızenı´ pouzˇito prˇideˇlenı´ a uvolneˇno I/O zarˇ´ızenı´ + nebo uda´lost ?
cˇekajı´cı´
prˇideˇlen procesor -
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˚vodnı´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 stejne´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. Obvykle 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´pocˇ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 (pouzˇ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ˇedchozı´ho, • sekvencˇneˇ-paralelneˇ – je spusˇteˇno vı´ce procesu˚, ktere´ se deˇlı´ o cˇas procesoru (naprˇ´ı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 1
Programovy´ cˇ´ıtacˇ (Instruction Pointer, IP) je adresa na´sledujı´cı´ instrukce v ko´du procesu, ktera´ ma´ by´t zpracova´na. 2 Za´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ı´ promeˇnne´, na´vratove´ hodnoty apod. 3 V 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 specia´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 Finder, • 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 dovoleno 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 odebra´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 jine´mu procesu, syste´m prˇesta´va´ by´t multitaskovy´ a jde pouze o pseudomultitasking 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ˇedchozı´ 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 multitaskingem), • 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 neza´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 prostoru, 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ı´, nekonkurujı´ 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 zacha´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 zpracova´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 nepodporuje, 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 mnohem 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 odstranˇ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ı´ prostrˇ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 snizˇ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 vlastnı´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 urcˇ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 jednodusˇ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 procesu˚ 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 zvolene´ 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 procesy 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ˇideˇ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 skupinami 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 CPUbound 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 urcˇ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 metoda 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 implementovatelna´ 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 organizacı´ 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). Pokud je cˇasove´ kvantum prˇ´ılisˇ velke´, metoda svou funkcˇnostı´ odpovı´da´ prˇedchozı´ 4
Proces 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´nova´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ˇasove´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 skutecˇneˇ vyuzˇite´ doby prˇideˇlenı´ procesoru v minulosti a vhodne´ cˇasove´ kvantum odhadujeme vy´pocˇtem aritmeticke´ho pru˚meˇru vsˇech prˇedchozı´ch skutecˇ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 odpovı´dajı´cı´ho skutecˇne´ho cˇasove´ho kvanta. S[n + 1] =
n 1 X ·R[i] · n i=1
(4.2) n−1
1 1X = ·R[i] · R[n] + n n i=1 =
n−1 1 · R[n] + · S[n] n n
(4.3)
3. Zkombinujeme oba prˇ´ıstupy (podle vzorcu˚ 4.1 a 4.3), tedy budeme prˇedpokla´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 < c < 1. Pokud je tato konstanta blı´zˇe jednicˇce, ma´ vy´razneˇ veˇtsˇ´ı va´hu de´lka poslednı´ho skutecˇne´ho cˇasove´ho kvanta, a cˇ´ım blı´zˇe je nule, tı´m veˇtsˇ´ı va´hu majı´ rozdı´ly v drˇ´ıveˇjsˇ´ıch kvantech. Prvnı´ odhad (S[1]) je obvykle nastaven na 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 procesu). 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´sledujı´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´nova´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 posloupnosti 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
4.6
58
Komunikace procesu˚
Jednou z vy´hod multitaskingu je mozˇnost snadne´ komunikace procesu˚ – meziprocesove´ komunikace (IPC, Interprocess Communication). Rozlisˇujeme proces odesı´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 pocˇ´ı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 parametru 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 odesı´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ˇijetı´ 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ı´, nazy´vany´m obvykle port (bra´na, socket, schra´nka). Port mu˚zˇe by´t vytvorˇen ktery´mkoliv 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 zapisovat 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 nabı´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
´ vod do problematiky U
Prˇi prˇ´ıstupu vı´ce procesu˚ k te´muzˇ prostrˇedku je hlavnı´m proble´mem zajisˇteˇnı´ konzistentnı´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 ˇ esˇenı´ pouzˇ´ıvajı´ jine´, jemneˇjsˇ´ı podmı´nky, trˇebazˇe jejich implementace je na´rocˇneˇjsˇ´ı. R 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˚ A s
B 1 s PP 2 PP q - P 1 PP q P C
62
D - ss
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ˇ´ı. ukoncˇenı´ prˇideˇlenı´ prˇideˇlenı´ procesu procesoru prostr ˇ edku ˚ beˇzˇı´cı´ prˇipraveny´ novy´ - s 6 s volny´ ? odebra´nı´ procesor procesoru 6
ukoncˇen
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 momenta´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 proveden 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 naznacˇ´ı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
?
? s
??
? ?
? P1.KS()
? ?
?
? P2.KS() ? ? ?
Proces Pn
...
? ?? ? Pn.KS()
Stra´zˇnı´ s mı´sto 66 6
? ? ?
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ˇ vyhodnocenı´ 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´ ´ cˇelem je, aby producent a konzument (konzumenti) mohli a da´le zpracova´va´. U pracovat kazˇdy´ jinou rychlostı´, do urcˇite´ mı´ry na sobeˇ neza´visle, tedy obvykle asynchronneˇ . ´ lohu lze rˇesˇit neˇkolika zpu˚soby v za´vislosti na tom, kolik ma´me k dispozici U 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 stanovena hornı´ hranice. 3) Synchronizace zpra´vami – zˇa´dna´ sdı´lena´ pameˇt’, nutnost synchronnı´ komunikace. 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˚ producent
65 konzument
produkuj
?
vyprodukova´no ? s zapisˇ
? ? cˇti ss s s stav fronty 6
?
? zapsa´no
?nacˇteno
? zpracuj ?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
? ?
vyprodukova´no ? s zapisˇ
?
? zapsa´no
volne´ ss ss I @ @ @
? ? cˇti ?nacˇteno
@
@ @ obsazene ´ 6 @
@
? zpracuj ?zpracova´no s
Obra´zek 5.5: Petriho sı´t’pro u´lohu Producent - konzument, omezeny´ buffer ˇ esˇenı´ petriho sı´tı´ je na obra´zku 5.6 na str. 67, metrickou synchronnı´ komunikaci. R procesy na sebe navza´jem cˇekajı´.
5.3.3 Model–obraz ˇ esˇ´ıme ji, kdyzˇ je potrˇeba Tato u´loha je podobna´ u´loze Producent–konzument. R 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 vytvorˇ´ı, 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´. ´ lohy tohoto typu jsou typicke´ take´ pro realtimove´ syste´my. U 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 producent 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ˇˇ esˇenı´ odpovı´da´ rˇesˇenı´ t’ove´mu mı´stu nesmı´ prˇistupovat vı´ce nezˇ jeden proces. R kriticke´ sekce.
KAPITOLA 5 SYNCHRONIZACE PROCESU˚
67
producent
konzument
produkuj
? ?
vyprodukova´no ? s zapisˇ
@
@
? ? cˇti @
@
@
@
@
?nacˇteno @
@
?
@
? zapsa´no
@
@ @
? zpracuj ?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˚ producent
68 konzument
produkuj
? ?
vyprodukova´no ? s zapisˇ
?
? zapsa´no
? ? cˇti stra´zˇnı´ mı´sto 66
?nacˇteno
? zpracuj ?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´znutı´, 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´ prostrˇedky (hu˚lky), o ktere´ se deˇlı´ s jiny´mi.
KAPITOLA 5 SYNCHRONIZACE PROCESU˚ Proces P1 ?
...
??
? ?
?
Proces P4
Proces Pz
?
?
4
? ?
? P1.cˇti()
69
? P4.cˇti()
?? s s Stra´zˇnı´ s s mı´sto 66 6
? ? ?
? Pz.pisˇ() ?
4
? ?
Obra´zek 5.8: Petriho sı´t’pro u´lohu Cˇtena´rˇi - pı´sarˇi ˇ esˇenı´ proble´mu spocˇ´ıva´ v tom, zˇe ke stolu nepustı´me vsˇech peˇt filozofu˚ najedR 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 najednou 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 prostrˇedky, ktere´ potrˇebujı´.
5.3.6 Soubeˇh procesu˚ ´ loha je rˇesˇena v paralelnı´m syste´mu, kdy dva procesy beˇzˇ´ıcı´ na ru˚zny´ch proU 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
?
?
?
??
? ?
??
?
?
?
? ?
?
? ? ?
s Stra´zˇnı´ s mı´sto 66 6
? ? ?
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˚ Proces P1 ?
71 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ˇedek, 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 hardwarove´ 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 urcˇ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´rnutı´ 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 ˇ esˇenı´ je poumetoda snizˇuje propustnost syste´mu a docha´zı´ k uva´znutı´. R 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 vyuzˇ´ıvat dany´ prostrˇedek, nastavenı´m sve´ polozˇky na 1, a mı´sto prˇideˇlenı´ na´sledujı´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ˇazova´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ˇadovy´m cˇ´ıslem, a v prˇ´ıpadeˇ, zˇe dva procesy majı´ stejne´ porˇadove´ cˇ´ıslo, rozhoduje 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
KAPITOLA 5 SYNCHRONIZACE PROCESU˚
74
Algoritmus pracuje takto: v poli poradi ma´ kazˇdy´ proces cˇekajı´cı´ na prostrˇ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ˇazova´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 jednoznacˇ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 instrukce 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 (zamcˇ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 dostupne´ 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ˇ´ı promeˇnnou pro implementaci fronty procesu˚. Cˇekajı´cı´ procesy jsou blokova´ny (suspendova´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 . 1
Neprˇ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ˇazen 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 implementova´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: do { produkuj(data); wait(volne); zapis(data); signal(obsazene); } while(1);
Konzument: do { wait(obsazene); cti(data); signal(volne); zpracuj(data); } 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
struct TSemafor sem[N]; struct TSemafor S; for(i=0; i
do { mysli(); wait(S); wait(sem[i]); wait(sem[(i+1)%5]); jez(); signal(sem[(i+1)%5]); signal(sem[i]); signal(S); } while(1);
KAPITOLA 5 SYNCHRONIZACE PROCESU˚
78
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 komunikaci 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 nazvany´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<MAX; i++) send(volne,NULL); Producent:
Konzument:
do { receive(volne,data); produkuj(data); send(obsazene,data); } while(1);
do { receive(obsazene,data); zpracuj(data); send(volne,NULL); } while(1);
KAPITOLA 5 SYNCHRONIZACE PROCESU˚
79
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ˇesˇenı´m musı´ by´t komunikace synchronnı´. Producent:
Konzument:
do { produkuj(data); send(konzument,data); receive(konzument,ok); } while(1);
do { receive(producent,data); zpracuj(data); send(producent,ok); } 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´ operace 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ı´ procedury.
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, segmenty) 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 vrcholu 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)
P2
P1
R1
83
P3
3 o S o S 6@ S S @ S S @ S S @ S S @ S S @ S S @ S S @ R S S Sr Sr r r r r r
R2
R3
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)
6.4
84
Prevence uva´znutı´
´ cˇelem je zajistit, aby nemohla nastat neˇktera´ z podmı´nek vzniku uva´znutı´ (stacˇ´ı, U 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 prostrˇ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 prostrˇ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). ˇ esˇenı´m je vyuzˇitı´ neˇktery´ch prvku˚ preemptivnı´ho Nepreemptivnı´ pla´nova´nı´: R pla´nova´nı´ (tedy pouzˇijeme mozˇnost odebrat prostrˇedek procesu, trˇebazˇe tento proces 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 takove´, 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 posloupnosti 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 posloupnosti. 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ı´ prostrˇ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 vrcholu trˇ´ıdy prostrˇedku, o ktery´ zˇa´da´, • hrana prˇideˇlenı´ prostrˇedku vede od prostrˇedku k procesu, ktere´mu byl prostrˇ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 pozˇ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 „simuluje“ 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
@
?
R1
I 6@ @ @ @ @ @ R @
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 prostrˇ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ˇleny´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 prostrˇ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 definovanou 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ˇideˇ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 hodnotami vektoru VOLNE, tedy SIMVOLNE=VOLNE, KONEC – vektor o n prvcı´ch, ktere´ jsou inicializova´ny na f alse, 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] = f alse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 nedosˇ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 f alse) 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 procesu 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
´ prava grafu prˇideˇlenı´ prostrˇedku˚ 6.6.1 U 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ˇ zajı´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).
P2
P1
6@ @ @ @
R1
6
P1
@
@ R @
-
P2
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ˇideˇ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.
´ prava Banke´rˇova algoritmu 6.6.2 U Banke´rˇu˚v algoritmus slouzˇ´ı k prˇedvı´da´nı´ uva´znutı´, pro detekci stacˇ´ı jeho zjednodusˇenı´. Budeme pouzˇ´ıvat na´sledujı´cı´ datove´ struktury definovane´ stejneˇ jako u Banke´rˇova algoritmu:
KAPITOLA 6 UVA´ZNUTI´ PROCESU˚ (DEADLOCK)
P1
6@ @ @ @
R1
91
P2
6
P1
@
I
@ R @
R
P2
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 f alse. 2. Najdi index j, pro ktery´ platı´ obeˇ na´sledujı´cı´ podmı´nky: (a) KONEC[j] = f alse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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´znutı´, v opacˇne´m prˇ´ıpadeˇ (alesponˇ jedna hodnota f alse) dosˇlo k uva´znutı´, a to teˇch procesu˚, pro jejichzˇ index je hodnota ve vektoru KONEC rovna f alse.
KAPITOLA 6 UVA´ZNUTI´ PROCESU˚ (DEADLOCK)
6.7
92
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 f alse). 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ı´ procesu 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 dokoncˇ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ˇerusˇ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) Spra´vci I/O
Uzˇivatelsky´ rezˇim 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 periferiemi 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 stromove´ 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 technologiı´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 najednou 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 procesy 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’ovat, 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ˇedchozı´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 vstupnı´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 klasicky´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´ procesorem prˇi pokusu o deˇlenı´ nulou (takova´to prˇerusˇenı´ vznikla´ chybou se take´ nazy´vajı´ 1
Instrukce 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. 2 V „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 prostrˇ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ı´ nedosˇ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ˇipraveny´ch procesu˚), jeho kontext je ulozˇen, 2. rˇ´ızenı´ prˇevezme operacˇnı´ syste´m, resp. jeho modul pro obsluhu prˇerusˇenı´ (Interrupt 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 nejjednodusˇ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 – program, 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 pokracˇ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 pracovat 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 cely´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 syste´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 prova´dı´ do jednotek, ktery´m rˇ´ıka´me adresa´rˇe. Adresa´rˇ obvykle obsahuje u´daje o souborech, 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 operacˇ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ı´ jednou´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ı´ podadresa´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
A
A A
?
A A
103
+ A A
AA U
A
A A
Q
Q
QQ s
A
A A
Q
QQ s A
A AAU
A AAU
(b) stromova´ struktura
+ A AUA
Q
? A A A AAU ?
(a) dvouu´rovnˇova´ struktura
? ? ?
+
? ?
Q
A A
A AAU
Q
QQ s
A A
AAU
AA U A A A A A AA A AAU ? ? U A A A A A A A A A A A A A A AA AAU ? U ? U A 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
8.3
104
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 (popisek 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 konzistentnı´. 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 Linuxovy´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 transakce skla´da´, je odesla´no potvrzenı´, ktere´ znamena´ u´speˇsˇne´ ukoncˇenı´ transakce, 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 transakce 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 podporu 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´ syste´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 Windows. 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 hlavnı´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 obsahuje 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 Obsah
0021 0027
0022 FFF7
0023 0000
0024 0000
0025 0026
0026 0029
0027 0025
0028 0000
0029 FFFF
002A 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. ˇ eteˇzenı´ clusteru˚ mu˚zˇe by´t vy´hodou (organizace nezabı´ra´ prˇ´ılisˇ mnoho mı´sta R 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 A D L S H R
volne´ bity, nepouzˇ´ıvajı´ se, k archivaci, directory – adresa´rˇ, label – na´zev disku, atributu˚m prˇedcha´zı´ samotny´ na´zev, syste´movy´, skryty´, 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 rezervova´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 dany´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
512 MB – 8 GB 8 GB – 16 GB 16 GB – 32 GB 32 GB – 2 TB
4 kB 8 kB 16 kB 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 souboru˚ (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 souborem, 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ˇ´ıstupova´ 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: platı´ pro tuto slozˇku a cely´ jejı´ obsah (podslozˇky i soubory), (OI)(CI) (OI)(CI)(IO) platı´ pro cely´ jejı´ obsah – podslozˇky i soubory (ale ne pro samotnou slozˇku), platı´ jen pro podslozˇky v nı´ obsazˇene´, (CI)(IO) platı´ jen pro soubory v nı´ obsazˇene´. (OI)(IO) Vlastnosti: • Vsˇechno je soubor (tedy take´ vsˇechny implicitnı´ struktury na disku jsou implementova´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 (implicitnı´) 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 stanovit prakticky jakoukoliv (uda´va´ se do 64 kB, tj. 32 sektoru˚). Velikost svazku
Velikost clusteru
512 MB nebo me´neˇ 512 MB - 1 GB 1 GB - 2 GB 2 GB nebo vı´ce
512 B 1 kB 2 kB 4 kB
Tabulka 8.3: Velikost clusteru pro souborovy´ syste´m NTFS Na disku jsou mimo samotna´ data take´ implicitnı´ struktury, ktere´ zde oznacˇujeme 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 smaza´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 FAT32 NTFS
DOS (samotny´), vsˇechny verze Windows vcˇetneˇ NT, Linux Windows 95 OSR2, 98, ME, 2000, XP, Linux 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
FAT16 FAT32
Max. velikost disku
Pocˇet clusteru˚
Max. objektu˚ v rootu
Max. de´lka souboru
Max. pocˇet souboru˚
2 (4 v NT) GB 512 MB - 2 TB (XP: do 32 GB)
max. 216 min. 216
512 65 534
4 GB bez 1 B 232 B bez 1 B
216 te´meˇrˇ 232
264 B bez 1 kB (XP: 244 B bez 64 kB)
232 − 1
264 − 1 (XP: 232 − 1)
NTFS
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, zastrˇ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 2 3
1 1 1
4
1
5
214
219
7974
8193 8194 8195 8196 8197 8408
1 1 1 1 214 7974
16385 16386 16387 16601
1 1 214 3879
superblok popis skupiny bloku˚ bitmapa pouzˇity´ch bloku˚ ve skupineˇ (pro kazˇdy´ blok 1 bit, pokud = 0, volny´) bitmapa pouzˇity´ch i-uzlu˚ skupiny, bit urcˇite´ho i-uzlu najdeme podle jeho indexu v tabulce i-uzlu˚ tabulka i-uzlu˚, obsahuje cesty k jednotlivy´m i-uzlu˚m, tedy i-uzel je identifikova´n indexem v te´to tabulce bloky s daty skupina bloku ˚1 superblok – za´loha popis skupiny bloku˚ bitmapa pouzˇity´ch bloku˚ ve skupineˇ bitmapa pouzˇity´ch i-uzlu˚ skupiny tabulka i-uzlu˚ bloky s daty skupina bloku ˚2 superblok – za´loha popis skupiny bloku˚ tabulka i-uzlu˚ 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 odkazy 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 odkazy 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 = 64 MB a 268 kB, • cˇtvrta´ u´rovenˇ stacˇ´ı pro soubory s de´lkou do 65804 kB + 256*256*256*1024 B = 16 GB a 64 MB a 268 kB. 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 souborove´m syste´mu ext2. Kazˇdy´ adresa´rˇ mu˚zˇe obsahovat soubory nebo dalsˇ´ı adresa´rˇe. Adresa´rˇe jsou specia´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 promeˇ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 jediny´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ı´ ukazovat na objekty, ktere´ jsou v jine´m souborove´m syste´mu (trˇeba na jine´ partition).
KAPITOLA 8 PAMEˇTˇOVA´ ME´DIA
info
i-uzel
data data
119
Data v prvnı´ u´rovni
Data v druhe´ u´rovni data * data : ... 1 B CB : ... CB @ HH C B j @ HH ... data C NB @ C R @ data CCW ... Z HH H Z HH Z ... j H Z Z Z ~ Z ... Z HH Z HH Z HH ... Z j Z Z ~ Z ... Z HH Z HH Z H Z j H Z Z ~ Z
B B
B NB ...
B NB
Data v trˇetı´ u´rovni
...
data data
Data v trˇetı´ u´rovni
Data v cˇtvrte´ u´rovni data 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˚, obsahujı´ (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´ iuzlu˚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ı´ souborovy´ 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 partition 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 Mandrake 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 velky´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 souborovy´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´ dovoluje 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´ syste´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 podadresa´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 specia´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˚lezˇita´ soucˇa´st ja´dra syste´mu, prˇes kterou procesy komunikujı´ s konkre´tnı´mi souborovy´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 kapitola´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
Max. velikost partition 4 TB 4 TB Velikost bloku 1 - 4 kB 1 - 4 kB Max. velikost souboru 2 GB 2 GB
ReiserFS
XFS
16 TB *) 18∗210 PB azˇ 64 kB 512 B - 64 kB 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 . 1
Da´ se to rˇesˇit volbou vhodne´ho zavadeˇcˇe syste´mu, viz da´le.
123
KAPITOLA 9 SPRA´VA DISKU˚
9.2
124
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 fyzicky 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. 2
Ve 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. 3 Tyto 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˚ Prima´rnı´ oddı´l 1
z
}|
125
Prima´rnı´ oddı´l 2
{z
}|
Prima´rnı´ oddı´l 4
Rozsˇ´ırˇeny´ oddı´l (Prim. 3)
{z
M B B B S S R p p p pp pp pp p p p pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp Windows: pp pp C: D: pp pp pp pp Linux: pp pp pp pp pp pp p p /dev/hda2 /dev/hda1 pp pp pp pp pp pp pp pp FreeBSD: pp pp pp pp pp ad0s1 pp ad0s2 pp pp pp pp
p pp p pp pp pp pp pp pp pp pp pp pp pp pp p pp pp pp pp pp pp pp pp pp
E B B R S
E B B R S
}|
E B B S R
{z
B S
}|
{
| {z } | {z } | {z } p p pp Logicky´ disk Logicky´ disk Logicky´ disk pp p p pp pp pp pp {z } pp | pp pp pp p pp vlozˇeny´ rozsˇ. oddı´l p pp pp | pp p pp {z } pp pp pp pp pp p ˇ´ırˇeny´ oddı´l pp pp pp vlozˇeny´ rozs p pp p p p pp pp pp pp pp pp pp pp pp pp pp pp pp pp G: F: H: E: pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp /dev/hda pp p p p pp pp pp pp pp pp p p /dev/hda3 /dev/hda4 pp pp pp pp pp pp pp pp /dev/hda5 pp pp /dev/hda6pp pp /dev/hda7 pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp pp ad0 pp p p p pp p p p p p pp pp pp pp ad0s3 pp pp ad0s4 pp pp pp pp pp pp pp pp ad0s3c pp ad0s3a pp pp ad0s3b pp pp pp pp
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 nainstalova´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 operacˇ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 tabulce 9.1. IDE kana´l 1 Master 1 Slave 2 Master 2 Slave
Linux
FreeBSD
/dev/hda /dev/hdb /dev/hdc /dev/hdd
ad0 ad1 ad2 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 vytvorˇ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ˇitelny´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 graficky´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ˇitecˇ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 propracovany´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 Windows, jsou zde dokonce i na´stroje pro pra´ci s registracˇnı´ databa´zı´).
9.5
Zava´deˇcı´ programy
´ kolem Kazˇdy´ operacˇnı´ syste´m obvykle obsahuje alesponˇ jeden zava´deˇcı´ program. U zava´deˇcı´ho programu je prˇedevsˇ´ım tento operacˇnı´ syste´m zave´st, tedy ve stanovene´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 operacˇ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, neumozˇ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 jine´ho disku nezˇ C:. Je to jednoduchy´ boot manager, ktery´ vsˇak doka´zˇe pracovat 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 jine´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 posloupnosti 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ˇedevsˇ´ı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 platformeˇ 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 naprˇ´ı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 ). 4
HW platforma s procesory Intel od i386 do Pentium IV a AMD procesory do 32-bitovy´ch vcˇetneˇ. Jiny´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. 5
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 konfigurovat 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 projevily. 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 konfiguracˇ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 (architektura sparc), yaBoot (architektura ppc – PowerPC), PALO (architekruta hppa), ... XOSL, OS Selector, EasyBoot, Smart Boot Manager, . . . jsou univerza´lnı´ boot manazˇ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 operacˇ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´ vyzˇ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ˇ nakonfigurujeme, 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 samostatny´ 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 ktere´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 instalacı´ (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 zavadeˇ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 Windows 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 instalaci), 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 Linuxem 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 instalovat 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ı´ emula´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 volbami, 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ˇktery´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ı´ implementaci 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´ struktury 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ˇivatelem 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ˇedevsˇ´ım monitoru a graficke´ karty, nepracuje s okny. Obsluha oken se zaby´va´ spra´vou oken a vesˇkery´mi operacemi s nimi – vykreslova´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 Procesy
138 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 operacˇ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 instalovany´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 pravidlem). Kazˇde´ okno ma´ sve´ho vlastnı´ka, cozˇ je proces toto okno vyuzˇ´ıvajı´cı´ (a obvykle 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ˇkolikana´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 ´ cˇelem bylo vyvinout graficke´ prostrˇedı´ syste´mu Apple Macintosh i Windows. U 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 zobrazujı´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 (korˇ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 vrstvou 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 knihovna´ch, sada´ch prvku˚. Widgety jsou drobne´ prvky, ze ktery´ch se skla´da´ graficke´ prostrˇ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 knihovnu, 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´ aplikace 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´ konfiguracˇnı´ na´stroje a neˇkolik jednoduchy´ch aplikacı´. Ostatneˇ samotny´ syste´m X Window 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´ zameˇ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 nazvane´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 pouzˇ´ı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´lnı´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. ´ cˇelem je prˇedevsˇ´ım akcelerace (urychlenı´) prˇ´ıstupu ke graficke´mu (obecneˇ U 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. Naprˇ´ı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ˇ´ıtacˇ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ˇ´ıvaneˇ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ˇ´ıstupovy´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 1
viz 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 dostaneme 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 operacı´ 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).
ˇ I´LOHA A PR 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. ˇNI ´! Nebyl zada UPOZORNE ´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 9601772 30344 0 179832 65536 5546160
kB kB kB kB kB kB kB
mı ´sta na disku celkem. v 102634 souborech uz ˇivatele. v 9969 rejstr ˇı ´cı ´ch. v chybny ´ch sektorech. pouz ˇı ´va ´ syste ´m. zabı ´ra ´ soubor s protokolem. na disku je volny ´ch.
144
KAPITOLA A
VY´STUPY NEˇKTERY´CH DISKOVY´CH NA´STROJU˚ PRO WINDOWS
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 drivetype volumeinfo ntfsinfo statistics
Vytvor ˇı ´ seznam vs ˇech jednotek. Odes ˇle dotaz na typ dane ´ jednotky. Odes ˇle dotaz na informace o svazku. Odes ˇle dotaz na informace o svazku NTFS. 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:\>
145
LITERATURA
[1] CˇADA, O.: Operacˇnı´ syste´my. Praha, Grada, 1993. ´ SˇIL, F.: Operacˇnı´ syste´my. Praha, CˇVUT, 1983. [2] PLA ´ SˇIL, F. - STAUDEK, J.: Operacˇnı´ syste´my. Praha, SNTL, 1991. [3] PLA [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. ´ vod do .NET Framework. Brno, Computer Press, 2000. Soubory ke [23] Pokorny´, J.: U 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/files/html/ch09.html ˇ eha´k, M.: Operacˇnı´ syste´my. [31] R 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/konfigurace 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
ˇ I´K REJSTR
buffer omezeny´ . . . . . . . . . . . . . . . 73, 74, 87 Symbols cacls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 beˇh procesu . . . . . . . . . . . . . . . . . . . . . . . . . 71 A ACL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 adresa absolutnı´ . . . . . . . . . . . . . . . . . . 31, 38 adresa relativnı´ . . . . . . . . . . . . . . . . . . . . . . 31 adresa´rˇ . . . . . . . . . . . . . . . . . . . . . . . . 112, 131 adresa´rˇ korˇenovy´ . . . . . . . . . . . . . . . . . . . 112 algoritmus hodinovy´ . . . . . . . . . . . . . . . . 44 algoritmus pekarˇu˚v . . . . . . . . . . . . . . . . . . 83 API. . . . . . . . . . . . . . . . . . . . . . . . .9, 21, 29, 90 API graficke´ . . . . . . . . . . . . . . . . . . . . . . . . 151 aplikace distribuovana´ . . . . . . . . . . . . . . . 14 architektura hardwarova´ . . . . . . . . . . . 144 B Bakery algorithm . . . . . . . . . . . . . . . . . . . . 83 best fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 bestfit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 136 blitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 boot loader . . . . . . . . . . . . . . . . . . . . . . . . . 139 boot manazˇer . . . . . . . . . . . . . . . . . . 139, 144 boot sektor . . . . . . . . . . . . . . . . 118, 138, 139 bootblock . . . . . . . . . . . . . . . . . . . . . . . . . . 129 broadcast . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 bra´na . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 buffer neomezeny´ . . . . . . . . . . . . . . . . 73, 74
C cluster . . . . . . . . . . . . . . . . . . . . . . . . . 111, 118 cylindr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 D delta-list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 deskriptor . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 DirectFB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 DirectX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 disk dynamicky´ . . . . . . . . . . . . . . . . . . . . 137 disk logicky´ . . . . . . . . . . . . . . . 111, 137, 140 dispetcher . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 DOS Extender . . . . . . . . . . . . . . . . . . . . . . . 20 dostavenı´cˇko . . . . . . . . . . . . . . . . . . . . . . . . 89 E EBR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 emulace operacˇnı´ho syste´mu . . . . . . . 147 exekutiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 F FAT tabulka . . . . . . . . . . . . . . . . . . . . . . . . 118 fdisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 first fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 flexibilita distribuovane´ho OS . . . . . . . 15 fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 fragmentace . . . . . . . . . . . . . . . . . 36, 39, 117
149
LITERATURA
150
funkce operacˇnı´ho syste´mu . . . . . . . . . . . 9 konzistence dat . . . . . . . . . . . . . . . . . . 69, 76 konzument . . . . . . . . . . . . . . . . . . . 73, 76, 87 G krok u´lohy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 GDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 kvantum . . . . . . . . . . . . . . . . . . 61, 62, 64, 65 GPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 granularita distribuovanosti . . . . . . . . . 13 L grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 last fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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/O rozhranı´ . . . . . . . . . . . . . . . . . . . . . . . 104 MFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 I/O zarˇ´ızenı´ . . . . . . . . . . . . . . . . . . . . . . . . 104 mikroja´dro . . . . . . . . . . . . . . . . . . . . . . . . . . 12 image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 mikrokernel . . . . . . . . . . . . . . . . . . . . . . . . . 18 instrukce . . . . . . . . . . . . . . . . . . . . . . . . . 7, 107 minikernel . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 instrukce swap . . . . . . . . . . . . . . . . . . . . . . 84 monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 instrukce TSL . . . . . . . . . . . . . . . . . . . . . . . . 84 multicast . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 instrukce XCHG . . . . . . . . . . . . . . . . . . . . . 84 multiprocessing asymetricky´ . . . . . . . . 10 interpret prˇ´ıkazu˚ . . . . . . . . . . . . . . . . . . . 151 multiprocessing symetricky´ . . . . . . . . . . 10 IPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 multitasking . . . . . . . . . . . . . . . . . . . . . 11, 53 IRQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 multitasking kooperativnı´ . . . . . . . . . . . 55 multitasking preemptivnı´ . . . . . . . . . . . . 56 J job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 multithreading . . . . . . . . . . . . . . . . . . . . . . 58 ja´dro . . . . . . . . . . . . . . . . . . . . . . 20, 23, 24, 27 mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 mı´sto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 K kernel mode . . . . . . . . . . . . . . . . . . . . . . . . . 27 O kernel-thread . . . . . . . . . . . . . . . . . . . . . . . . 59 obsluha oken . . . . . . . . . . . . . . . . . . . . . . . 150 klient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 oddı´l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 klient-server . . . . . . . . . . . . . . . . . . . . . 12, 18 oddı´l aktivnı´ . . . . . . . . . . . . . . . . . . . . . . . 138 knihovna dynamicky linkovana´ . . . . . 21 oddı´l datovy´ . . . . . . . . . . . . . . . . . . . . . . . 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 odkaz pevny´ . . . . . . . . . . . . . . . . . . . 125, 131 komunikace symetricka´ . . . . . . . . . . 67, 75 odkaz symbolicky´ . . . . . . . . . . . . . . . . . . 131 komunikace synchronnı´ . . 67, 74, 75, 80, offset . . . . . . . . . . . . . . . . . 36, 38, 45, 47, 109 okno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 89, 90 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 page fault . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 proud dat . . . . . . . . . . . . . . . . . . . . . . . . . . 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 plocha pracovnı´ . . . . . . . . . . . . . . . . . . . . 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 priorita staticka´ . . . . . . . . . . . . . . . . . . . . . . 65 sekce kriticka´ . . . . . . . . . . . . . . . . . . . . 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 semafor obecny´ . . . . . . . . . . . . . . . . . . . . . . 86 producent - konzument . . . . . . . . . . . . . 107 server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 program rezidentnı´ . . . . . . . . . . . . . . . . . . 46 shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
LITERATURA sluzˇba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 soubor . . . . . . . . . . . . . . . . . . . . . . . . . 112, 115 soubor odkla´dacı´ . . . . . . . . . . . . . . . . . . . . 48 soubor rˇ´ıdky´ . . . . . . . . . . . . . . . . . . . . . . . 125 souborovy´ syste´m zˇurna´lovacı´ . . . . . . 123 spra´va oken a grafiky . . . . . . . . . . . . . . . . 26 spra´vce IFS . . . . . . . . . . . . . . . . . . . . . . . . . . 22 spra´vce konfigurace . . . . . . . . . . . . . . . . . 22 spra´vce oken . . . . . . . . . . . . . . . . . . . . . . . 153 spra´vce periferiı´ . . . . . . . . . . . . . . . . . . . . 105 spra´vce programu˚ . . . . . . . . . . . . . . . . . . . 21 spra´vce virtua´lnı´ch zarˇ´ızenı´ . . . . . . 20, 22 stav konzistentnı´ . . . . . . . . . . . . . . . . . . . . 69 stav procesu . . . . . . . . . . . . . . . . . . . . . . . . . 71 stopa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 stroj virtua´lnı´ . . . . . . . . . . . . . . . . . . . . . . . . 17 struktura abstraktnı´ pocˇ´ıtacˇ . . . . . . . . . . 18 struktura hierarchicka´ . . . . . . . . . . . . . . . 17 struktura klient-server . . . . . . . . . . . 18, 27 struktura modula´rnı´ . . . . . . . . . . . . . . . . . 26 struktura monoliticka´ . . . . . . . . . . . . . . . . 17 struktura stavebnicova´ . . . . . . . . . . . . . . 18 struktura virtua´lnı´ pocˇ´ıtacˇ . . . . . . . . . . . 17 struktura vrstvena´ . . . . . . . . . . . . . . . 17, 26 stra´nka . . . . . . . . . . . . . . . . . . . . . . . . . . . 37, 41 stra´nkova´nı´ . . . . . . . . . . . . . . . . . . . . . . . . . . 37 strˇ´ıda´nı´ procesu˚ . . . . . . . . . . . . . . . . . . . . . 82 subsyste´m graficky´ . . . . . . . . . . . . . . . . . 150 subsyste´m prostrˇedı´ . . . . . . . . . . . . . . . . . 24 superblok . . . . . . . . . . . . . . . . . . . . . . . . . . 129 svazek . . . . . . . . . . . . . . . . . . . . . . . . . 125, 137 svazek dyniamicky´ . . . . . . . . . . . . . . . . . 137 synchronizace procesu˚ . . . . . . . . . . . 72, 80 syste´m distribuovany´ . . . . . . . . . . . . . . . . 13 syste´m I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 syste´m jednoprocesorovy´ . . . . . . . . .10, 19 syste´m jednoprogramovy´ . . . . . . . . 11, 19 syste´m jednouzˇivatelsky´ . . . . . . . . . 10, 19 syste´m jednou´lohovy´ . . . . . . . . . . . . . . . . 11
152 syste´m loka´lnı´ . . . . . . . . . . . . . . . . . . . . 11, 19 syste´m multitaskovy´ . . . . . . . . . . 11, 24, 27 syste´m operacˇnı´ . . . . . . . . . . . . . . . . . . . . . . 8 syste´m operacˇnı´ distribuovany´ . . . . . . 15 syste´m realtimovy´ . . . . . . . . . . . . . . . . 11, 76 syste´m souborovy´ . . 22, 28, 115, 117, 118, 121, 123, 128, 129 syste´m souborovy´ virtua´lnı´ . . . . 117, 133 syste´m souborovy´ zˇurna´lovacı´ . 116, 131, 132 syste´m specia´lnı´ . . . . . . . . . . . . . . . . . . . . . 11 syste´m sı´t’ovy´ . . . . . . . . . . . . . . . . . 11, 24, 27 syste´m univerza´lnı´ . . . . . . . . 11, 19, 24, 27 syste´m V/V . . . . . . . . . . . . . . . . . . . . . . . . . . 8 syste´m vı´ceprocesorovy´ . . . 10, 24, 27, 88 syste´m vı´ceprogramovy´ . . . . . . . . . . . . . 11 syste´m vı´ceuzˇivatelsky´ . . . . . . . 10, 24, 27 syste´m vı´ceu´lohovy´ . . . . . . . . . . . . . . . . . 11 syste´m vy´pocˇetnı´ . . . . . . . . . . . . . . . . . . . . . 7 T tabulka deskriptoru˚ . . . . . . . . . . . . . . . . . 47 tabulka rozsˇ´ırˇenı´ disku . . . . . . . . . . . . . 138 tabulka stra´nek . . . . . . . . . . . . . . . . . . . . . . 41 transparentnost distribuovane´ho OS . 15 TSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46, 55 U unicast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 used bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 user-thread . . . . . . . . . . . . . . . . . . . . . . . . . . 59 uzˇivatel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 V V/V zarˇ´ızenı´ . . . . . . . . . . . . . . . . . . . . . . . 104 vektor prˇerusˇenı´ . . . . . . . . . . . . . . . . 47, 109 VFAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 VFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 128 videopameˇt’. . . . . . . . . . . . . . . . . . . . . . . . . 31 virtualizace zarˇ´ızenı´ . . . . . . . . . . . . . . . . 105 vla´kno . . . . . . . . . . . . . . . . . . . . . . . . . . . 58, 75 vola´nı´ syste´move´ . . . . . . . . . . . . . . . . . . . . 88
LITERATURA vy´padek stra´nky . . . . . . . . . . . . . . . . . . . . . 42 W widget knihovna . . . . . . . . . . . . . . . . . . . 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´loha Model - 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
153