S´arkaˇ Vavreˇckov´a

Operaˇcn´ısyst´emy pˇredn´aˇsky

Slezsk´auniverzita v Opavˇe Filozoficko-pˇr´ırodovˇedeck´afakulta Ustav´ informatiky

Opava, posledn´ıaktualizace 25. kvˇetna2017 Anotace: Tento dokument je urˇcenpro studenty druh´ehoroˇcn´ıkuIVT na Ustavu´ infor- matiky Slezsk´euniverzity v Opavˇe. Obsahuje l´atkuprob´ıranouna pˇredn´aˇsk´ach pˇredmˇetu Operaˇcn´ısyst´emy. Prob´ıran´al´atka navazuje na pˇredmˇet Praktikum z operaˇcn´ıch syst´em˚u. Pˇredpokl´ad´ase z´akladn´ıorientace v adres´aˇrov´estruktuˇrea textov´emreˇzimu UNIXov´ych syst´em˚u,nejd˚u- leˇzitˇejˇs´ıch konfiguraˇcn´ıch souborech, z´akladypˇr´ıstupov´ych opr´avnˇen´ıv UNIXov´ych syst´e- mech. Doplnˇen´ımtˇechto skript jsou skripta pro cviˇcen´ı(dva soubory – pro Windows a Linux).

Operaˇcn´ısyst´emy – pˇredn´aˇsky

RNDr. S´arkaˇ Vavreˇckov´a,Ph.D.

Dostupn´ena: http://vavreckova.zam.slu.cz/opsys.html

Ustav´ informatiky Filozoficko-pˇr´ırodovˇedeck´afakulta v Opavˇe Slezsk´auniverzita v Opavˇe Bezruˇcovo n´am.13, Opava

S´azenov syst´emu LATEX

Tato inovace pˇredmˇetu Operaˇcn´ısyst´emy je spolufinancov´anaEvropsk´ymsoci´aln´ımfondem a St´atn´ım rozpoˇctem CR,ˇ projekt ˇc.CZ.1.07/2.3.00/0 9.0197, Pos´ılen´ıkonkurenceschopnosti v´yzkumu a v´yvoje ” informaˇcn´ıch technologi´ıv Moravskoslezsk´emkraji“. Pˇredmluva

Co najdeme v tˇechto skriptech

Tato skripta jsou urˇcenapro studenty informatick´ych obor˚una Ustavu´ informatiky Slezsk´euniverzity v Opavˇe.Na pˇredn´aˇsk´ach pˇredmˇetuOperaˇcn´ısyst´emy prob´ır´amepˇredevˇs´ımteoretick´ekoncepty sou- visej´ıc´ıse strukturou operaˇcn´ıch syst´em˚u,rol´ıjednotliv´ych ˇc´ast´ıj´adraa mechanismy spr´avyproces˚u, pamˇetia zaˇr´ızen´ı,ovˇsemkaˇzd´et´emaje n´aslednˇevztaˇzenona konkr´etn´ıoperaˇcn´ısyst´emy (obvykle Windows a Linux). Doplnˇen´ımteoretick´ev´yukyz pˇredn´aˇsekje praktick´av´yuka na cviˇcen´ıch. Navazujeme na obdobn´askripta z pˇredmˇetuPraktikum z operaˇcn´ıch syst´em˚u,tedy pˇredpokl´adaj´ı se jiˇzz´akladn´ıznalosti pr´acev UNIXov´ych syst´emech, v pˇr´ıstupov´ych opr´avnˇen´ıch a z´akladpr´ace v textov´emreˇzimu. Nˇekter´eoblasti jsou tak´e nav´ıc“ (jsou oznaˇceny ikonami fialov´ebarvy), ty nejsou prob´ır´any a ani ” se neobjev´ına zkouˇsce– jejich ´ukolem je motivovat k dalˇs´ımu samostatn´emu studiu nebo pom´ahat v budoucnu pˇriz´ısk´av´an´ıdalˇs´ıch informac´ıdle potˇreby v zamˇestn´an´ı.

Znaˇcen´ı

Ve skriptech se pouˇz´ıvaj´ın´asleduj´ıc´ıbarevn´eikony:

•  Nov´e pojmy, znaˇcen´ıapod. jsou oznaˇceny modr´ymsymbolem, kter´yvid´ımezde vlevo. Tuto ikonu (stejnˇejako n´asleduj´ıc´ı)najdeme na zaˇc´atkuodstavce, ve kter´emje nov´ypojem zav´adˇen.

• £ Konkr´etn´ı postupy a n´astroje (pˇr´ıkazy, programy, soubory, skripty), zp˚usoby ˇreˇsen´ır˚uzn´ych situac´ı,atd. jsou znaˇceny tak´emodrou ikonou.

• Nˇekter´eˇc´astitextu jsou oznaˇceny fialovou ikonou, coˇzznamen´a,ˇzejde o nepovinn´e´useky, kter´enejsou prob´ır´any (vˇetˇsinou; studenti si je mohou podle z´ajmu vyˇz´adatnebo sami prostudo- vat). Jejich ´uˇcelemje dobrovoln´erozˇs´ıˇren´ıznalost´ıstudent˚uo pokroˇcil´at´emata,na kter´aobvykle pˇriv´yucenezb´yv´amoc ˇcasu.

• Zlutouˇ ikonou jsou oznaˇceny odkazy, na kter´ych lze z´ıskat dalˇs´ıinformace o t´ematu.Nejˇcastˇeji u t´etoikony najdeme webov´eodkazy na str´anky, kde se dan´et´ematicejejich autoˇrivˇenuj´ıpo- drobnˇeji.

•  Cerven´ajeˇ ikona pro upozornˇen´ı a pozn´amky.

iii iv

• J Toto znaˇcen´ıznamen´a,ˇzesi u zkouˇskym˚uˇzetevybrat mezi nˇekolika alternativami. Typicky jde o rozhodnut´ı, zda dan´ypostup, pojem, strukturu apod. vysvˇetl´ıte na Windows nebo na Linuxu.

Pokud je mnoˇzstv´ıtextu patˇr´ıc´ıho k urˇcit´eikonˇevˇetˇs´ı,je cel´yblok ohraniˇcenprostˇred´ıms ikonami na zaˇc´atkui konci, napˇr´ıkladpro definov´an´ınov´ehopojmu:

 Definice V takov´emprostˇred´ıdefinujeme pojem ˇcivysvˇetlujemesice relativnˇezn´am´y,ale komplexn´ıpojem s v´ıcev´yznamy ˇcivlastnostmi. 

Podobnˇem˚uˇzevypadat prostˇred´ıpro delˇs´ıpostup nebo delˇs´ıpozn´amkuˇciv´ıceodkaz˚una dalˇs´ıinfor- mace. Mohou b´ytpouˇzitatak´ejin´aprostˇred´ı:

M Pˇr´ıklad Takto vypad´aprostˇred´ıs pˇr´ıkladem,obvykle nˇejak´ehopostupu. Pˇr´ıkladyjsou obvykle komentov´any, aby byl jasn´ypostup jejich ˇreˇsen´ı. M

C Ukol´ Ot´azkya ´ukoly, n´amˇety na vyzkouˇsen´ı, kter´ese doporuˇcujepˇriprocviˇcov´an´ı uˇciva prov´adˇet,jsou uzavˇreny v tomto prostˇred´ı. Pokud je v prostˇred´ıv´ıce´ukol˚u,jsou ˇc´ıslov´any. C

Pro ´usekyk´odu, pˇr´ıkazy a jejich v´ystupy je pouˇz´ıv´anoneproporcion´aln´ıp´ısmo.

Jak prob´ıh´azkouˇska

Zkouˇska je p´ısemn´a.Na str´ank´ach pˇredmˇetuje k dispozici orientaˇcn´ıseznam ot´azek,kter´ese mohou objevit na p´ısemce, jsou pˇr´ıpustn´ei drobn´emodifikace. Tato skripta plnˇepokr´yvaj´ıodpovˇedina vˇsechny ot´azkyze seznamu a jejich modifikace. Obsah

Pˇredmluva iii

1 Uvod´ do operaˇcn´ıch syst´em˚u1 1.1 Co je to operaˇcn´ısyst´em...... 1 1.2 Funkce operaˇcn´ıhosyst´emu...... 2 1.3 Typy operaˇcn´ıch syst´em˚u...... 3 1.3.1 Z´akladn´ırozdˇelen´ı...... 3 1.3.2 Realtimov´eoperaˇcn´ısyst´emy...... 4 1.3.3 Distribuovan´eoperaˇcn´ısyst´emy...... 6 1.4 Cloud Computing a operaˇcn´ısyst´emy...... 8

2 Struktura operaˇcn´ıch syst´em˚u 11 2.1 Z´akladn´ıtypy architektur...... 11 2.2 Syst´emy MS-DOS a Windows...... 12 2.2.1 MS-DOS a Windows do verze 3.x...... 13 2.2.2 Windows s DOS j´adrem...... 15 2.2.3 Windows ˇradyNT do verze XP...... 16 2.2.4 Windows od verze Vista a Server 2008...... 20 2.3 Syst´emy UNIXov´ehotypu...... 23 2.3.1 Klasick´yUNIX...... 23 2.3.2 Podrobnˇejik j´adruLinuxu...... 25 2.4 Hardwarov´ezabezpeˇcen´ısyst´emu...... 26

3 Spr´ava pamˇeti 27 3.1 Modul spr´avce pamˇeti...... 27 3.2 Re´aln´emetody pˇridˇelov´an´ıpamˇeti...... 28 3.2.1 Pˇridˇelen´ıjedn´esouvisl´eoblasti pamˇeti...... 28 3.2.2 Pˇridˇelov´an´ıblok˚upevn´evelikosti...... 29 3.2.3 Dynamick´epˇridˇelov´an´ıblok˚upamˇeti...... 30 3.2.4 Segmentace...... 31 3.2.5 Jednoduch´estr´ankov´an´ı...... 33

v vi

3.3 Reˇsen´ıfragmentaceˇ pamˇeti...... 34 3.3.1 V´ybˇervhodn´ehobloku pamˇeti...... 34 3.3.2 Setˇr´as´an´ıpamˇeti...... 35 3.4 Virtu´aln´ıpamˇet’ ...... 36 3.4.1 Odkl´adac´ıprostor a str´anky...... 36 3.4.2 Str´ankov´an´ına ˇz´adost...... 36 3.4.3 Segmentace se str´ankov´an´ımna ˇz´adost...... 38 3.4.4 Swapov´an´ıproces˚u...... 39 3.5 Technologie...... 40 3.5.1 Adresov´yprostor a virtu´aln´ıpamˇet’ ...... 40 3.5.2 NUMA architektura...... 40 3.5.3 Little a Big Endian...... 41 3.6 Spr´ava pamˇetiv nˇekter´ych operaˇcn´ıch syst´emech...... 42 3.6.1 MS-DOS...... 42 3.6.2 Windows...... 42 3.6.3 UNIXov´esyst´emy vˇcetnˇeLinuxu...... 44

4 Procesy 47 4.1 Evidence proces˚u...... 47 4.1.1 Pojmy proces a ´uloha...... 47 4.1.2 Bin´arn´ıspustiteln´esoubory...... 48 4.1.3 Datov´estruktury souvisej´ıc´ıs procesy...... 49 4.1.4 Priority proces˚u...... 50 4.1.5 Vznik a z´anikprocesu...... 55 4.1.6 Pˇr´ıstupov´aopr´avnˇen´ıprocesu...... 56 4.2 Bˇehproces˚ua multitasking...... 57 4.2.1 Pseudomultitasking...... 58 4.2.2 Kooperativn´ımultitasking...... 58 4.2.3 Preemptivn´ımultitasking...... 59 4.3 Multithreading...... 60 4.3.1 Princip...... 60 4.3.2 Programov´an´ıv´ıcevl´aknov´ych aplikac´ı...... 62 4.3.3 Dalˇs´ımoˇznostiprogramov´an´ıv´ıcevl´aken...... 65 4.4 Spr´ava front proces˚u...... 65 4.5 Pˇridˇelov´an´ıprocesoru...... 66 4.5.1 Fronta – FCFS...... 67 4.5.2 Cyklick´epl´anov´an´ı– RR...... 68 4.5.3 Nejkratˇs´ı´uloha– SPN...... 68 4.5.4 Pl´anov´an´ıpodle priorit...... 69 4.5.5 Kombinace metod s v´ıcefrontami...... 70 4.6 Pl´anov´an´ıv jednotliv´ych operaˇcn´ıch syst´emech...... 70 4.6.1 Windows...... 70 4.6.2 Linux...... 72 vii

4.7 Komunikace proces˚u...... 74 4.7.1 Princip komunikace proces˚u...... 74 4.7.2 Komunikace ve Windows...... 76 4.7.3 Komunikace v Linuxu...... 78

5 Synchronizace proces˚u 84 5.1 Uvod´ do problematiky...... 84 5.2 Petriho s´ıtˇe...... 85 5.3 Z´akladn´ısynchronizaˇcn´ı´ulohy...... 86 5.3.1 Kritick´asekce...... 86 5.3.2 Producent–konzument...... 87 5.3.3 Model–obraz...... 90 5.3.4 Cten´aˇri–p´ısaˇriˇ ...... 91 5.3.5 Pˇethladov´ych filozof˚u...... 92 5.3.6 Soubˇehproces˚u...... 94 5.3.7 Race-Condition...... 94 5.4 Implementace ˇcek´an´ıpˇredkritickou sekc´ı...... 95 5.4.1 Pasivn´ıˇcek´an´ı...... 95 5.4.2 Aktivn´ıˇcek´an´ı...... 96 5.5 Synchronizaˇcn´ın´astroje operaˇcn´ıhosyst´emu...... 99 5.5.1 Semafory...... 99 5.5.2 Mechanismus zpr´av...... 101 5.5.3 Monitory...... 102 5.5.4 RPC...... 103 5.6 Synchronizaˇcn´ın´astroje v r˚uzn´ych operaˇcn´ıch syst´emech...... 104 5.6.1 Windows...... 104 5.6.2 Linux...... 106

6 Uv´aznut´ıproces˚u(Deadlock) 110 6.1 Z´akladn´ıpojmy...... 110 6.2 Popis stavu pˇridˇelen´ıprostˇredk˚u...... 111 6.3 Podm´ınkyvzniku uv´aznut´ı...... 112 6.4 Prevence uv´aznut´ı...... 112 6.5 Pˇredpov´ıd´an´ıuv´aznut´ı...... 114 6.5.1 Graf n´arok˚ua pˇridˇelen´ıprostˇredk˚u...... 114 6.5.2 Bank´eˇr˚uvalgoritmus...... 115 6.6 Detekce uv´aznut´ı...... 117 6.6.1 Uprava´ grafu pˇridˇelen´ıprostˇredk˚u...... 117 6.6.2 Uprava´ Bank´eˇrova algoritmu...... 118 6.6.3 Reakce pˇrizjiˇstˇen´ızablokov´an´ı...... 118

7 Spr´ava periferi´ı 120 7.1 I/O syst´em...... 120 viii

7.2 Druhy periferi´ı...... 120 7.3 Ovladaˇce...... 121 7.3.1 Struktura ovladaˇc˚u...... 121 7.3.2 Ovladaˇceve Windows...... 122 7.3.3 Ovladaˇcev Linuxu...... 124 7.4 Pˇreruˇsen´ı...... 125 7.4.1 Mechanismus pˇreruˇsen´ıa v´yjimek...... 125 7.4.2 Obsluha pˇreruˇsen´ı...... 126 7.4.3 Spr´ava pˇreruˇsen´ıv r˚uzn´ych syst´emech...... 127 7.5 Casovaˇceˇ ...... 129 7.6 Spr´ava blokov´ych zaˇr´ızen´ı...... 130 7.6.1 Vlastnosti blokov´ych zaˇr´ızen´ı...... 130 7.6.2 Probl´emy s BIOSem...... 130 7.6.3 Struktura MBR disku...... 131 7.6.4 Struktura GPT disku...... 132 7.6.5 N´astroje pro spr´avudisk˚u...... 133 7.6.6 Zav´adˇec´ıprogramy...... 135 7.7 Svazky...... 139 7.8 Moˇznostiinstalace operaˇcn´ıch syst´em˚u...... 140 7.9 Spouˇstˇen´ınenativn´ıch aplikac´ı...... 141 7.9.1 Virtu´aln´ıpoˇc´ıtaˇc...... 141 7.9.2 Emul´atory operaˇcn´ıho syst´emu a podsyst´emy...... 143 7.9.3 Serverov´aa desktopov´avirtualizace...... 144

8 Pamˇet’ov´am´edia 146 8.1 Z´akladn´ıpojmy...... 146 8.2 Adres´aˇrov´astruktura...... 147 8.3 Soubory a syst´emsoubor˚u...... 148 8.4 Souborov´esyst´emy ve Windows...... 152 8.4.1 Starˇs´ıverze souborov´ehosyst´emu typu FAT...... 152 8.4.2 VFAT a FAT32...... 154 8.4.3 Souborov´ysyst´emNTFS...... 155 8.4.4 exFAT...... 158 8.4.5 Srovn´an´ısouborov´ych syst´em˚upro Windows...... 158 8.5 Souborov´esyst´emy pro Linux...... 159 8.5.1 VFS...... 159 8.5.2 Souborov´esyst´emy typu extxfs...... 159 8.5.3 Dalˇs´ıˇzurn´alovac´ısouborov´esyst´emy...... 163 8.5.4 Srovn´an´ılinuxov´ych souborov´ych syst´em˚u...... 164 8.5.5 Virtu´aln´ısouborov´esyst´emy...... 164 8.5.6 V´ymˇenn´aoptick´am´edia...... 165

Literatura 166 Kapitola 1 Uvod´ do operaˇcn´ıch syst´em˚u

Pojem operaˇcn´ısyst´embudeme v n´asleduj´ıc´ımtextu ch´apat trochu ˇs´ıˇrejineˇzje obvykl´e.Zahrneme zde tak´esoftware, kter´yslouˇz´ık ˇr´ızen´ıjak´ehokoliv v´ypoˇcetn´ıhosyst´emu, vˇcetnˇeprogramovan´ych laserov´ych tisk´aren(tj. tak´efirmware). Tato kapitola je ´uvodem do problematiky, sezn´am´ımese zde se z´akladn´ımipojmy, definic´ıoperaˇcn´ı- ho syst´emu, funkcemi a typy operaˇcn´ıch syst´em˚u.

1.1 Co je to operaˇcn´ısyst´em

Pro definov´an´ıoperaˇcn´ıhosyst´emu pouˇzijemen´asleduj´ıc´ıpojmy:  V´ypoˇcetn´ısyst´em (napˇr´ıkladpoˇc´ıtaˇc)je stroj na zpracov´an´ıdat prov´adˇej´ıc´ısamoˇcinnˇepˇredem zadan´eoperace.  Instrukce – nejkratˇs´ı,jiˇzd´alenedˇeliteln´ypovel, tˇemto povel˚umrozum´ıprocesor (viz d´ale).  Zak´azka – pokyn, kter´ym´av´ypoˇcetn´ısyst´emprov´est.  Fyzick´eprostˇredky v´ypoˇcetn´ıhosyst´emu jsou: • procesor – vykon´av´azadan´einstrukce, urˇcuje hardwarovou platformu syst´emu (napˇr.In- tel , x86-64, AMD, AMD64, PowerPC, Alpha, MIPS, atd.), ve v´ypoˇcetn´ım syst´emu pˇredpokl´ad´ameexistenci alespoˇnjednoho procesoru, • v´ıcej´adrov´yprocesor – procesor s v´ıcej´adry, tedy jedin´yintegrovan´yobvod s v´ıcej´adrypro- cesor˚u(na rozd´ılod v´ıceprocesorov´ehosyst´emu, kde m´akaˇzd´e j´adro“ vlastn´ıintegrovan´y ” obvod) – dnes se objevuj´ıdvouj´adrov´eprocesory, nepl´estsi s v´ıceprocesorov´ymsyst´emem, kde kaˇzd´yprocesor m´avlastn´ıintegrovan´yobvod, • vnitˇrn´ıpamˇet’ (operaˇcn´ıpamˇet’) – rychl´a,obvykle chipy, podle r˚uzn´ych vlastnost´ırozliˇsu- jeme RAM (Random Access Memory), ROM (Read-Only Memory), DRAM, SDRAM, atd.), pouˇz´ıv´ase obvykle bˇehem v´ypoˇctua poˇc´ıt´ase s t´ım,ˇzepo dokonˇcen´ıv´ypoˇctubudou zabran´e adresy uvolnˇeny, • vnˇejˇs´ıpamˇet’ – slouˇz´ık uloˇzen´ıdat a program˚u,kter´ezrovna nejsou zpracov´av´any, je st´al´a (relativnˇe),jsou to pevn´edisky (HD – Hard Disk), CD, DVD, diskety, USB flash disky, pamˇet’ov´ekarty, atd., • vstupnˇe-v´ystupn´ı syst´em (V/V, I/O syst´em, perifern´ı zaˇr´ızen´ı) – souhrn vˇsech zaˇr´ızen´ı urˇcen´ych pro komunikaci s okol´ım,napˇr´ıkladmonitor, tisk´arna,kl´avesnice.

1 Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 2

 Logick´eprostˇredky v´ypoˇcetn´ıhosyst´emu jsou: • uˇzivatel – kaˇzd´y,do zad´av´azak´azkuv´ypoˇcetn´ımu syst´emu, • ´uloha (job) – posloupnost (obecnˇesouhrn) ˇcinnost´ıpotˇrebn´ych ke splnˇen´ızak´azky, jde tedy o specifikov´an´ıpostupu ˇreˇsen´ızak´azky, • krok ´ulohy – ˇc´ast´ulohy, prvek posloupnosti proveden´ı´ulohy obvykle pˇredstavuj´ıc´ıspuˇstˇen´ı konkr´etn´ıhoprogramu (´uloha m˚uˇzeb´ytposloupnost´ıv´ıceprogram˚u,jejichˇzpr´aceprob´ıh´a simult´annˇenebo navazuje), • proces – instance ´ulohy nebo kroku ´ulohy, je prov´adˇenve vnitˇrn´ıpamˇetiza pouˇzit´ıkonkr´et- n´ıch dat.  Pamˇet’ov´yprostor urˇcujemnoˇzstv´ıdostupn´epamˇetipro danou entitu. • Pamˇet’ov´yprostor syst´emu je souhrn vˇsech pamˇet´ısyst´emu, vnitˇrn´ı+ vnˇejˇs´ıpamˇeti. • Pamˇet’ov´yprostor procesu je souhrn vˇsech pamˇet’ov´ych moˇznost´ıprocesu, tedy jemu pˇridˇe- len´aoperaˇcn´ıpamˇet’ pro programov´yk´oda data procesu.  Adresov´yprostor procesu je pamˇet’ov´yprostor ve vnitˇrn´ıpamˇeti,kter´yje vyhrazen tomuto procesu a je na nˇemzavedena metrika (adresy, kaˇzd´ybyte je oˇc´ıslov´an).  Hol´ypoˇc´ıtaˇc je v´ypoˇcetn´ısyst´ems pouze nejz´akladnˇejˇs´ımpamˇet’ov´ymvybaven´ım,to se obvykle naz´yv´aBIOS.

 Definice Operaˇcn´ısyst´em v´ypoˇcetn´ıhosyst´emu je spr´avce fyzick´ych prostˇredk˚udan´ehosyst´emu, kter´yzpra- cov´av´apomoc´ı logick´ych prostˇredk˚u´ulohy zadan´euˇzivatelem. Pod pojmem softwarov´aplatforma syst´emu obvykle ch´apeme pr´avˇeoperaˇcn´ısyst´em. 

1.2 Funkce operaˇcn´ıhosyst´emu

Operaˇcn´ısyst´emm´amnoho funkc´ı,z nichˇznˇekter´ejsou nutn´ea vypl´yvaj´ıuˇzz definice operaˇcn´ıho syst´emu, jin´eaˇztak nutn´enejsou a ne kaˇzd´yoperaˇcn´ı syst´emje zajiˇst’uje. N´asleduj´ıc´ı v´yˇcetnen´ı ´upln´y,specializovan´eoperaˇcn´ısyst´emy mohou zajiˇst’ovat i mnoho dalˇs´ıch jin´ych funkc´ı.Nejd˚uleˇzitˇej- ˇs´ımfunkc´ımjsou vyhrazeny samostatn´ekapitoly.  Spr´avapamˇeti pˇredstavuje veden´ıevidence vnitˇrn´ıpamˇeti,pˇridˇelov´an´ıpamˇetiproces˚um,ˇreˇsen´ı situac´ıvznikaj´ıc´ıch pˇrinedostatku pamˇeti,spr´avuvirtu´aln´ıpamˇeti.  Spr´avaproces˚u znamen´aevidenci spuˇstˇen´ych proces˚u,pl´anov´an´ıpˇridˇelov´an´ıprocesoru, sledov´an´ı stavu proces˚u,zajiˇst’ov´an´ıkomunikace mezi procesy.  Spr´avaperiferi´ı zahrnuje vytv´aˇren´ırozhran´ımezi I/O zaˇr´ızen´ımi a procesy, sledov´an´ıstavu zaˇr´ı- zen´ı,pˇridˇelov´an´ızaˇr´ızen´ıproces˚uma ˇreˇsen´ımoˇzn´ych koliz´ıs t´ımsouvisej´ıc´ıch, atd.  Spr´avasyst´emu – v modern´ıch syst´emech je obvykl´erozliˇsov´an´ır˚uzn´ych reˇzim˚upr´acesyst´emu, ale- spoˇnuˇzivatelsk´ya privilegovan´y.V uˇzivatelsk´emreˇzimu prob´ıhaj´ıbˇeˇzn´eˇcinnosti,zat´ımcoprivile- govan´yreˇzimje urˇcenpro ´udrˇzbu,instalaci, konfiguraci. M˚uˇzemezde zahrnout tak´ebezpeˇcnostn´ı funkce syst´emu – ochranu proti ˇskodliv´ymk´od˚um(napˇr.viry), poruch´ama neopr´avnˇen´emu pˇr´ıstupu. Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 3

 Spr´avasoubor˚u (t´yk´ase dat na vnˇejˇs´ıch pamˇet’ov´ych m´edi´ıch) znamen´anejen vytv´aˇren´ırozhran´ı umoˇzˇnuj´ıc´ıhoproces˚umpˇristupovat k soubor˚um(a tak´ejin´ymdat˚um)jednotn´ymzp˚usobem, ale tak´eudrˇzov´an´ıinformac´ıo struktuˇresoubor˚una disku, kontrolu pˇr´ıstupov´ych pr´avproces˚u k soubor˚um.  Spr´avauˇzivatel˚u – syst´emvede informace o uˇzivatel´ıch syst´emu a jejich ˇcinnosti,zajiˇst’uje pˇrihla- ˇsov´an´ıa odhlaˇsov´an´ıuˇzivatel˚u.  Spr´ava´uloh – tot´eˇz,co se t´yk´auˇzivatel˚u,t´yk´ase tak´e´uloh a jejich pr˚ubˇehu.  Uˇzivatelsk´erozhran´ı (user interface – UI) je rozhran´ımezi uˇzivatelem a syst´emem.Jedn´ase o sadu program˚u,kter´eslouˇz´ıke komunikaci mezi uˇzivatelem a operaˇcn´ımsyst´emem.  Programov´erozhran´ı je rozhran´ımezi programy (procesy) a v´ypoˇcetn´ıma operaˇcn´ımsyst´emem, obvykle se oznaˇcujeAPI (Application Programming Interface). Vˇetˇsinouje pˇredstavov´anosa- dou knihoven (ve Windows napˇr.DLL knihovny), kter´em˚uˇzeprogram vyuˇz´ıvat pro svou pr´aci (grafick´eprvky rozhran´ı,dialogov´aokna, funkˇcn´ıprvky, rozhran´ıˇcasovaˇce,atd.).

1.3 Typy operaˇcn´ıch syst´em˚u

1.3.1 Z´akladn´ırozdˇelen´ı

D´aleuvedeme dˇelen´ıoperaˇcn´ıch syst´em˚upodle r˚uzn´ych krit´eri´ı.  Podle poˇctuovl´adan´ych procesor˚u dˇel´ımeoperaˇcn´ısyst´emy na • jednoprocesorov´e (monoprocesorov´e)– Windows s DOS j´adrem(verze 9x, ME), • v´ıceprocesorov´e (multiprocesorov´e)– UNIXov´esyst´emy vˇcetnˇeLinuxu, Windows s NT j´adrem (NT, 2000, XP, Vista), dok´aˇzourozpl´anovat alespoˇnnˇekter´e´ulohy tak, aby mohly b´ytzpra- cov´av´any na v´ıce procesorech z´aroveˇn.UNIXov´esyst´emy obecnˇemohou bˇeˇzetna clusterech s velk´ymmnoˇzstv´ımprocesor˚u,u Windows z´aleˇz´ına konkr´etn´ıedici a licenci (i bˇeˇzn´edeskto- pov´eedice podporuj´ıdva procesory).  V´ıceprocesorov´edˇel´ımena dvˇepodkategorie: • pˇri asymetrick´emmultiprocessingu (ASMP) je jeden procesor vyhrazen pro procesy syst´emu a uˇzivatelsk´eprocesy bˇeˇz´ına ostatn´ıch procesorech, • pˇri symetrick´emmultiprocessingu (SMP) m˚uˇzekter´ykoliv proces bˇeˇzetna kter´emkoliv procesoru. Prakticky vˇsechny modern´ısyst´emy pouˇz´ıvaj´ısymetrick´ymultiprocessing. Ve skuteˇcnosti i v bˇeˇzn´ych desktopov´ych poˇc´ıtaˇc´ıch, kter´eneoznaˇcujemejako v´ıceprocesorov´e,na- jdeme v´ıceprocesor˚u.Jeden z nich je hlavn´ı,ostatn´ıjsou urˇceny pro konkr´etn´ıˇcinnostia jejich ´ukolem je odlehˇcithlavn´ımu procesoru od rutinn´ıch“ nebo speci´aln´ıch ˇcinnost´ıa urychlit pr´acicel´ehosyst´emu. ” Takovou funkci m´anapˇr´ıkladgrafick´yprocesor na grafick´ekartˇe,kter´ypˇreb´ır´azejm´enazpracov´av´an´ı poˇzadavk˚u3D grafiky. Nejde o v´ıceprocesorov´ysyst´em,protoˇzepomocn´eprocesory nezpracov´avaj´ı bˇeˇznousadu instrukc´ı,ale pouze svou specifickou sadu. Pr´avˇes grafick´ymprocesorem pracuj´ıOpenGL, Direct3D apod. D´ase v´ıcej´adrov´ypoˇc´ıtaˇcpoˇc´ıtaˇcbr´atjako v´ıceprocesorov´y?Do urˇcit´em´ıry. J´adrav r´amcijednoho procesoru totiˇznˇekter´eprostˇredkymohou sd´ılet(z´aleˇz´ına konkr´etn´ıarchitektuˇre).  U v´ıceprocesorov´ych syst´em˚u(pˇredevˇs´ım server˚u)se m˚uˇzemesetkat s pojmem NUMA (Non- Uniform Memory Access). Pamˇet’ je rozdˇelenana samostatn´eˇc´asti,uzly, a ke kaˇzd´emu takov´emu Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 4 uzlu je sbˇernic´ıpˇripojen jeden nebo v´ıceprocesor˚u(kaˇzd´yuzel m´asvou pamˇet’ovou sbˇernici).Procesor dok´aˇzek pamˇetive sv´em“ uzlu pˇristupovat velmi rychle, k pamˇetiv jin´ych uzlech m´asice tak´epˇr´ıstup ” povolen, ale je pomalejˇs´ı.Proto by procesor mˇelvyuˇz´ıvat pˇredevˇs´ımpamˇet’ lok´aln´ı,ve sv´emuzlu. Uˇcelemarchitektury´ NUMA je co nejv´ıczefektivnit a ˇsk´alovat komunikaci procesor˚us pamˇet´ı, protoˇzeu v´ıceprocesorov´ych syst´em˚ubez NUMA je pamˇet’ov´asbˇernice´uzk´ymhrdlem, kter´ezpomaluje cel´ysyst´em,nav´ıcpro rozsah adres je limit dan´ypoˇctembit˚uurˇcen´ych pro uloˇzen´ıadresy, a NUMA tento limit umoˇzˇnujeobej´ıt(kaˇzd´yuzel m´avlastn´ıadresaci).

 Podle sloˇzitostispr´avyuˇzivatel˚u dˇel´ımeoperaˇcn´ısyst´emy na • jednouˇzivatelsk´e (monouˇzivatelsk´e)– Windows s DOS j´adrem, • v´ıceuˇzivatelsk´e (multiuˇzivatelsk´e,multiuser) – UNIXov´esyst´emy, Windows s NT j´adrem,maj´ı propracovanou spr´avuuˇzivatel˚u,kter´aumoˇzˇnujev syst´emu pracovat v´ıceuˇzivatel˚umnajednou (tj. ve stejn´yokamˇzik)bez vz´ajemn´ehoovlivˇnov´an´ı,uˇzivatel´ese mohou pˇrihlaˇsovat bud’ pˇr´ımo na zaˇr´ızen´ınebo vzd´alenˇepˇrestermin´alyˇcijinak po s´ıti.Tyto syst´emy pˇredevˇs´ımmus´ızajistit pˇr´ısn´eoddˇelen´ı prostˇredk˚u(napˇr.pamˇeti)vyuˇz´ıvan´ych r˚uzn´ymiuˇzivateli, aby jeden uˇzivatel nemˇelpˇr´ıstupk dat˚uma nastaven´ıjin´ehouˇzivatele.

 Podle poˇctuspuˇstˇen´ych program˚u (podrobnˇejiviz kap. 4.2) rozliˇsujemeoperaˇcn´ısyst´emy • jednoprogramov´e (monoprogramov´e)– v jednom okamˇzikum˚uˇzeb´ytspuˇstˇenjen jeden program, • v´ıceprogramov´e (multiprogramov´e)– v jednom okamˇzikum˚uˇzeb´ytspuˇstˇenoi v´ıceprogram˚u, d´alezde odliˇsujemepodskupinu v´ıce´ulohov´e (multitaskov´e)syst´emy, kter´eumoˇzˇnuj´ıkromˇetoho i sd´ılen´ıprostˇredk˚umezi procesy tˇechto program˚u(spr´ava vnitˇrn´ıpamˇeti,pˇridˇelov´an´ıtisk´arny apod.). V´ıceprogramov´esyst´emy, kter´enejsou v´ıce´ulohov´e(tj. jsou jedno´ulohov´e), ˇreˇs´ıtento probl´em napˇr´ıkladodloˇzen´ımveˇsker´ehopamˇet’ov´ehoprostoru odstaven´eho“ programu na vnˇejˇs´ıpamˇet’ ” nebo do chr´anˇen´eˇc´astivnitˇrn´ıpamˇetia n´asledn´ymobnoven´ımstavu ve chv´ıli, kdy tento program m´apokraˇcovat ve sv´eˇcinnosti.

 Podle m´ıryspecializace existuj´ıoperaˇcn´ısyst´emy • speci´aln´ı – jsou specializovan´ena jeden typ (nebo nˇekolik m´alotyp˚u)´uloh,napˇr´ıkladv s´ıt’ov´ych zaˇr´ızen´ıch (pokud se nejedn´ao Linux), nˇekter´ych embedded zaˇr´ızen´ıch apod., • univerz´aln´ı – bˇeˇzn´eoperaˇcn´ısyst´emy na PC, ˇreˇs´ır˚uzn´etypy ´uloh. Rozliˇsujemetak´epodskupiny operaˇcn´ıch syst´em˚u– realtimov´ea distribuovan´e.

1.3.2 Realtimov´eoperaˇcn´ısyst´emy

 Realtimov´eoperaˇcn´ısyst´emy jsou operaˇcn´ısyst´emy pracuj´ıc´ıt´emˇeˇrv re´aln´emˇcase.Pouˇz´ıvaj´ıse pˇredevˇs´ımtam, kde jsou vysok´epoˇzadavky na interaktivitu syst´emu, zad´avan´e´ulohy mus´ıb´ytvyˇr´ızeny t´emˇeˇrokamˇzitˇenebo ve vhodnˇekr´atk´emˇcase.Jde napˇr´ıklado syst´emy na ˇr´ızen´ıletadel, nˇekter´ych v´yrobn´ıch provoz˚u,laboratoˇr´ı,elektr´arenvˇcetnˇeatomov´ych, v automobilov´empr˚umyslu, atd. Realtimov´ysyst´emnemus´ıreagovat okamˇzitˇe,pouze je pro kaˇzd´ytyp realtimov´ehopoˇzadavku urˇcena horn´ıˇcasov´ahranice“, tedy mus´ıb´ytzaruˇcenamaxim´aln´ıdoba reakce v nejhorˇs´ımmoˇzn´em ” pˇr´ıpadˇe.Bˇeˇzn´eoperaˇcn´ısyst´emy s multitaskingem toto zaruˇcitnemohou, zvl´aˇstˇepokud je spuˇstˇeno hodnˇeproces˚u,tˇrebaˇzeobvykle nab´ızej´ımoˇznostpˇridˇelitprocesu tzv. realtimovou prioritu v´yraznˇe Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 5 vyˇsˇs´ıneˇzje priorita bˇeˇzn´ych proces˚u. Pˇrestojsou moˇznosti,jak tyto operaˇcn´ısyst´emy upravit, aby pracovaly jako realtimov´e. Realtimov´apriorita existuje i u klasick´ych operaˇcn´ıch syst´em˚u,ale na rozd´ılod realtimov´ych zde nelze zaruˇcitmaxim´aln´ıdobu zpracov´an´ıprocesu, tˇrebaˇzetakov´yproces m´apˇrednostpˇredprocesy s jin´ymitypy priorit. Vˇetˇsinarealtimov´ych syst´em˚um´amal´ej´adro(mikroj´adro), kter´epln´ıpouze nejd˚uleˇzitˇejˇs´ıfunkce (pˇredevˇs´ımspr´avuproces˚u,pˇr´ıpadnˇespr´avupamˇetiapod.), zbytek syst´emu je implementov´anjako bˇeˇzn´eprocesy. Tento model odpov´ıd´astruktuˇretypu klient-server (viz kapitolu2). Pokud syst´em vznikl pˇreps´an´ımz klasick´ehosyst´emu, ˇcastoj´adrop˚uvodn´ıhosyst´emu je mikroj´adrem odstaveno“ ” a bˇeˇz´ıpouze jako jeden z proces˚u(to je pˇr´ıpadmnoh´ych upravovan´ych UNIXov´ych syst´em˚u). D´aleuv´ad´ımejeden realtimov´ysyst´emvznikl´ypodstatn´ymupraven´ımUNIXov´ehosyst´emu, jeden vytvoˇren´y´upravou Linuxu a jednu moˇznost,jak pˇridat podporu re´aln´ehoˇcasudo Windows s NT j´adrem.

J QNX (vyslovuj [kju:nix]) je realtimov´ysyst´empostaven´yna hodnˇeupraven´emUNIXov´emklonu, pouˇz´ıv´ase pˇredevˇs´ımv automobilech a r˚uzn´ych embedded zaˇr´ızen´ıch. M´amal´emikroj´adroa nˇekolik nejd˚uleˇzitˇejˇs´ıch server˚u(spr´ava proces˚u,spr´ava pamˇetiapod.), zbytek syst´emu bˇeˇz´ıjako bˇeˇzn´eprocesy. Vyznaˇcujese mimoˇr´adnoustabilitou a rychlost´ı,a to i pˇripr´aciv grafick´emrozhran´ı.Bˇeˇz´ıv´ybornˇei na slabˇs´ıch poˇc´ıtaˇc´ıch. Vyznaˇcujese v´ybornou podporou s´ıtˇe,d´ase tak´epouˇz´ıtpro pˇr´ıstupna internet v pˇr´ıpadˇe,ˇze pevn´ydisk je z nˇejak´ehod˚uvodu nedostupn´y.Je kompatibiln´ıs normou POSIX. Je to komerˇcn´ısyst´em,po urˇcitoudobu byla dostupn´avoln´averze, ale v souˇcasn´edobˇese jedn´a o plnˇeuzavˇren´ysyst´em(pod taktovkou spoleˇcnostiBlackBerry). Nev´yhodou je nedostatek aplikac´ıpro tento syst´em,ale vzhledem k tomu, ˇzejde vlastnˇeo UNIXov´ysyst´em,nen´ıtakov´yprobl´emportovat na QNX UNIXov´eaplikace (na internetu vˇcetnˇestr´anekv´yrobce tohoto syst´emu je k nalezen´ımnoho aplikac´ıtakto upraven´ych pro QNX). http://www.qnx.com/content/qnx/en.html  J RTLinux je upraven´yLinux, byl p˚uvodnˇeurˇcen hlavnˇepro pr˚umysl (ˇr´ızen´ırobot˚uve v´yrobˇe apod.). P˚uvodnˇeto byl komerˇcn´ıprojekt, ale komerˇcn´ıpodpora uˇznen´ıposkytov´ana. M´arealtimov´emikroj´adro,samotn´elinuxov´ej´adrobˇeˇz´ıjako samostatn´yproces s niˇzˇs´ıprioritou. Syst´embyl vytv´aˇrentak, aby z´asah˚udo p˚uvodn´ıhoLinuxu bylo co nejm´enˇe.Zpracov´an´ıpˇreruˇsen´ı1 (tedy poˇzadavk˚u,kter´eby pˇr´ıpadnˇemohly b´yti realtimov´e)prob´ıh´atak, ˇzenejdˇr´ıv je pˇreruˇsen´ı zachyceno mikroj´adrem,a teprve tehdy, kdyˇzˇcas procesoru nevyˇzaduje ˇz´adn´yrealtimov´yproces, je pˇreruˇsen´ı pˇred´anop˚uvodn´ımu linuxov´emu j´adru,kter´eje jiˇzzpracuje klasick´ymzp˚usobem. Tento syst´emje stejnˇejako vˇetˇsinajin´ych Linux˚uvolnˇeke staˇzen´ına internetu. http://www.tldp.org/HOWTO/RTLinux-HOWTO.html  J Realtime Preemption patch (RT-Preempt Patch) je speci´aln´ıaktualizace (patch) pro linuxov´e j´adro,kter´atoto j´adrouprav´ıtak, aby pracovalo realtimovˇe.Jedn´ase hlavnˇeo ´upravu synchronizaˇcn´ıch mechanism˚uj´adra(o synchronizaci je v tˇechto skriptech samostatn´akapitola), ˇcasovaˇc˚ua obsluhy pˇreruˇsen´ı.Jednou z oblast´ıvyuˇzit´ıje tak´epr˚umysl. https://rt.wiki.kernel.org/index.php/RT PREEMPT HOWTO  1Pˇreruˇsen´ıznamen´apˇreruˇsen´ınorm´aln´ıhobˇehu programu. M˚uˇzeto b´ytnapˇr´ıkladpˇreruˇsen´ıgenerovan´ekl´avesnic´ı(po stisku kl´avesy se program o tom mus´ıdovˇedˇeta vhodnˇereagovat). Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 6

J RTX (RealTime eXtension) je modul, kter´yrozˇsiˇrujemoˇznostiWindows s NT j´adrem(NT/2000/ XP/7, jen 32bitov´e)smˇeremk realtimov´ymsyst´em˚um.Nejde tedy o realtimov´ysyst´em,pouze o n´astav- bu pro operaˇcn´ısyst´emklasick´ehotypu (vpodstatˇetakov´ypatch jako u RT-Preempt). K syst´emu je pˇrid´anozvl´aˇstn´ırozˇs´ıˇren´ıvrstvy HAL2 (RTX Real-time HAL Extender), nad kter´ym bˇeˇz´ınov´ysubsyst´emre´aln´ehoˇcasu(RTX RTSS), v tom pracuj´ıprocesy ˇcistˇereal-timov´e.S t´ımto subsyst´ememkomunikuje RTX ovladaˇc,kter´yumoˇzˇnujebˇeˇzettak´eWin32 proces˚ums podporou pro RTX (real-timov´ymproces˚umvyuˇz´ıvaj´ıc´ımtak´eprostˇredkyWindows). http://www.datapartner.cz/platforma-rtos/  1.3.3 Distribuovan´eoperaˇcn´ısyst´emy

 Distribuovan´ysyst´em3 (nejen operaˇcn´ı)je syst´emsplˇnuj´ıc´ıtyto podm´ınky: • pracuje na v´ıceneˇzjednom procesoru (m˚uˇze to b´yti vhodnˇenavrˇzen´aa spravovan´apoˇc´ıtaˇcov´a s´ıt’), • m´asv˚ujprogram rozdˇelenna (samostatn´e) ˇc´asti,kter´evz´ajemnˇekomunikuj´ı(obvykle s´ıt’ov´ymi protokoly nebo pˇresvzd´alen´evol´an´ıprocedur – RPC, je tak´emoˇzn´evyuˇz´ıvat k tomuto ´uˇcelu vytvoˇren´aobjektov´arozhrani – DCOM, CORBA apod.), • kaˇzd´atakov´aˇc´astje (m˚uˇzeb´yt)zpracov´av´anana jin´emprocesoru se zajiˇstˇen´ım co nejvˇetˇs´ı transparentnosti. Distribuovanost tedy znamen´amoˇznostco nejv´ıcerozloˇzitv´ypoˇcetv syst´emu na v´ıcem´ıst,kter´apracuj´ı paralelnˇe.Rozliˇsujemedva druhy distribuovanosti: distribuovanost s hrubou granularitou – ˇc´astisyst´emu jsou sp´ıˇse vˇetˇs´ı,samostatnˇejˇs´ı,m´enˇemezi sebou komunikuj´ı, pouˇziteln´ev pˇr´ıpadˇe,ˇzeje probl´emzajistit dobrou a rychlou komunikaci (horˇs´ı propojen´ıpoˇc´ıtaˇc˚u- procesor˚uv syst´emu), distribuovanost s jemnou granularitou – ˇc´astisyst´emu jsou co nejmenˇs´ı,hodnˇemezi sebou komunikuj´ı. Rozliˇsujemedva druhy distribuovan´ych syst´em˚u– distribuovan´eaplikace a distribuovan´eoperaˇcn´ı syst´emy.

 Distribuovan´aaplikace je distribuovan´ysyst´embˇeˇz´ıc´ına v´ıcepropojen´ych poˇc´ıtaˇc´ıch, kaˇzd´y z poˇc´ıtaˇc˚um´asv˚ujvlastn´ıoperaˇcn´ısyst´em.Tato s´ıt’ poˇc´ıtaˇc˚um˚uˇzeb´yti Internet. S distribuovan´ymi aplikacemi se setk´av´amenapˇr´ıklad v tˇechto pˇr´ıpadech: • distribuce dat – datab´aze,syst´emy pro spr´avuobsahu, informaˇcn´ısyst´emy, atd. – je nutn´esd´ılet data v mnoha poboˇck´ach po cel´emsvˇetˇe, • distribuce v´ypoˇct˚u – sloˇzit´ev´ypoˇcty jsou distribuov´any na v´ıcepoˇc´ıtaˇc˚u, • distribuce prostˇredk˚u – prostˇredkyvlastnˇen´ejedn´ımsubjektem (napˇr´ıkladv´ypoˇcetn´ıv´ykon pro- cesor˚u,pamˇet’ov´a´uloˇziˇstˇe,atd.) mohou b´ytdistribuov´ana(nab´ızena)jin´ymsubjekt˚ums t´ım,ˇze um´ıstˇen´ıa konkr´etn´ızp˚usobpˇr´ıstupuk nim jsou tˇemto subjekt˚umskryty. Typick´ea velmi bˇeˇzn´evyuˇzit´ıdistribuovanosti je v datab´az´ıch a (ˇcastona nˇenavazuj´ıc´ıch) informaˇcn´ıch syst´emech. Velk´edatab´azea informaˇcn´ısyst´emy b´yvaj´ıdistribuov´any na mnoha uzlech i po cel´emsvˇetˇe,

2O vrstvˇeHAL a jej´ıch funkc´ıch se v´ıcedov´ımev kapitole 2.3.1 na stranˇe 23. 3M˚uˇzemetak´enaj´ıtn´azev grid. Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 7 tˇrebaˇzene vˇzdyjde opravdu o distribuovanou aplikaci splˇnuj´ıc´ıpoˇzadavek transparentnosti a flexibility (bude prob´ır´anod´ale). J Jednou z nejzn´amˇejˇs´ıch distribuovan´ych aplikac´ıje BOINC (zkratka pro Berkeley Open Infrastru- cture for Network Computing4) umoˇzˇnuj´ıc´ıkter´emukoliv uˇzivateli poˇc´ıtaˇcepˇripojen´emu k Internetu prop˚ujˇcovat v´ypoˇcetn´ıkapacitu sv´ehopoˇc´ıtaˇcenˇekter´emu z projekt˚uvyuˇzivaj´ıc´ıch tuto aplikaci. Jsou to napˇr´ıklad projekty Climateprediction.net (celosvˇetov´apˇredpovˇed’ poˇcas´ı), SETI@home (anal´yza r´adiov´ych sign´al˚upotenci´alnˇepˇrich´azej´ıc´ıch od mimozemsk´ych civilizac´ı),Einstein@home (hled´an´ıgra- vitaˇcn´ıch vln generovan´ych pulsary), MalariaControl.net (sledov´an´ıa predikce ˇs´ıˇren´ımal´arie),nˇekolik projekt˚uz biomedic´ıny (buˇnky, proteiny apod.), atd. J Grid je moˇzn´evytvoˇriti doma, existuj´ın´astroje pro vytv´aˇren´ıgrid˚uv mal´edom´ac´ıs´ıti (pouˇz´ıvaj´ı se pro ˇcasovˇesloˇzit´eoperace jako je napˇr´ıkladdlouhodob´epˇrekl´ad´an´ısoftwaru ze zdrojov´ych k´od˚u– Gentoo Linux, zpracov´av´an´ımultim´edi´ıapod.). J V souvislosti s Linuxem je tˇrebazm´ınittak´e distribuovan´esyst´emypro spr´avuverz´ı. Syst´empro spr´avuverz´ıumoˇzˇnujeskupinˇeprogram´ator˚udostateˇcnˇeefektivnˇepracovat na tomt´eˇzprojektu. Jde pˇredevˇs´ımo synchronizaci pˇr´ıstup˚ua zmˇenv zdrojov´ych k´odech, syst´emu kaˇzd´ehoregistrovan´eho souboru uchov´av´ahistorii zmˇen,nˇekolik posledn´ıch verz´ı,informace (metadata) o souborech a jejich autorech, a tak´estanoven´ymzp˚usobem reaguje v pˇr´ıpadˇe,ˇzev´ıceuˇzivatel˚usyst´emu chce mˇenittent´yˇz soubor – bud’ prvn´ıpˇristupuj´ıc´ısoubor uzamkne nebo se prov´ad´ıtzv. sluˇcov´an´ızmˇen“. Stav projektu ” je veden ve vˇetv´ıch, sluˇcov´an´ızmˇenm˚uˇzeodpov´ıdatpr´avˇesluˇcov´an´ıtˇechto vˇetv´ı. Na linuxov´ych programech a tak´ena Linuxu samotn´empracuj´ıpomˇernˇerozs´ahl´eskupiny pro- gram´ator˚ufyzicky se nach´azej´ıc´ıch v r˚uzn´ych ˇc´astech svˇeta.Proto je ˇcastopotˇrebapro dostateˇcnˇe rychlou synchronizaci jejich pr´acepouˇz´ıvat syst´empro spr´avuverz´ı,kter´yje distribuovan´y(pro menˇs´ı projekty je vˇsaktato vlastnost zbyteˇcn´a).Doned´avnav´yvoj´aˇriLinuxu pouˇz´ıvali syst´emBitKeeper, ale pˇredevˇs´ımz licenˇcn´ıch d˚uvod˚use pˇrech´az´ına nov´ysyst´em Git vytvoˇren´ysamotn´ymtv˚urcemLinuxu Linusem Torvaldsem. Git nen´ıplnohodnotn´ysyst´empro spr´avuverz´ı,i kdyˇzpro tyto ´uˇcelydostaˇcuje (je to tak´edistribuovan´ysyst´em).Prosazuje se jeho varianta rozˇs´ıˇren´ao dalˇs´ıskripty, Cogito, kter´aje jiˇzplnohodnotn´ymsyst´emempro spr´avuverz´ı(autorem je Petr Baudiˇs).  Distribuovan´yoperaˇcn´ısyst´em je samostatn´yoperaˇcn´ısyst´embˇeˇz´ıc´ına s´ıti procesor˚u, kter´e nesd´ılej´ıspoleˇcnoupamˇet’, a z´aroveˇnposkytuje uˇzivateli dojem jednoho poˇc´ıtaˇce. Tˇrebaˇzeje fyzicky rozm´ıstˇenna r˚uzn´ych poˇc´ıtaˇc´ıch, nem´a(nemˇeloby) to m´ıtvliv na jeho ˇcinnost a uˇzivatel neurˇcuje, kde se konkr´etnˇejeho data zpracov´avaj´ınebo kde ve skuteˇcnostijsou uloˇzena. D´alese jiˇzbudeme vˇenovat pouze distribuovan´ymoperaˇcn´ımsyst´em˚um. Z´akladn´ıvlastnosti distribuovan´ehooperaˇcn´ıhosyst´emu jsou: 1. transparentnost ( pr˚uhlednost“ – strukturu ˇcipostup nen´ıvidˇet), ” 2. flexibilita (pˇrizp˚usobivost), 3. rozˇsiˇritelnost. Transparentnost je nejd˚uleˇzitˇejˇs´ıvlastnost´ıdistribuovan´ehooperaˇcn´ıhosyst´emu, znamen´apro uˇzivate- le a pˇr´ıpadnˇei pro procesy urˇcit´ydojem jednolitosti syst´emu. Tato vlastnost se t´yk´apˇredevˇs´ımvztahu proces˚ua prostˇredk˚ucel´ehosyst´emu. Vyˇzadujese, aby proces jednotn´ymzp˚usobem pˇristupoval k lok´aln´ımi vzd´alen´ymprostˇredk˚um (pˇr´ıstupov´atransparentnost), a z´aroveˇnaby nemusel zn´atfyzick´eum´ıstˇen´ıtohoto prostˇredku(tj. pˇri

4Informace o BOINC najdeme na http://boinc.berkeley.edu. Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 8 konkretizaci prostˇredku,ke kter´emu chce pˇristupovat, neud´av´ajeho um´ıstˇen´ı- adresu, ale identifikuje ho jin´ymzp˚usobem, to se naz´yv´alokaˇcn´ıtransparentnost), prostˇredkymohou b´yt libovolnˇepˇresouv´any a pˇripojov´any k r˚uzn´ymˇc´astemcel´ehosyst´emu bez ovlivnˇen´ıˇcinnostiproces˚u(migraˇcn´ıtransparent- nost), procesy mohou bˇeˇzetna kter´emkoliv procesoru a dokonce mohou b´ytpˇrisv´embˇehu pˇrem´ıstˇeny na jin´yprocesor, aby se vhodnˇevyrovnala z´atˇeˇzr˚uzn´ych ˇc´ast´ısyst´emu (exekuˇcn´ıtransparentnost), atd. Flexibilita znamen´aschopnost syst´emu pˇrizp˚usobovat se veˇsker´ymzmˇen´amprostˇred´ı,ve kter´em pracuje, vˇcetnˇer˚uzn´ych poruch a v´ypadk˚uˇc´ast´ısyst´emu. Souvis´ıtak´es vlastnost´ımigraˇcn´ıtranspa- rentnosti. Aby syst´emdos´ahldostateˇcn´eflexibility, je vhodn´e,aby kaˇzd´aˇc´astsyst´emu byla pokud moˇzno co nejv´ıcesamostatn´ave sv´epr´aci,centr´aln´ırozhodov´an´ım˚uˇzetuto vlastnost naruˇsit.V dostateˇcnˇe flexibiln´ım syst´emu je moˇzn´epˇrem´ıst’ovat prov´adˇen´ı proces˚una ty procesory, kter´ezrovna nejsou vyt´ıˇzen´e,odlehˇcovat pˇr´ıliˇsvyt´ıˇzen´ymprocesor˚um,a tot´eˇzplat´ıi o pˇrem´ıst’ov´an´ıprostˇredk˚umezi ˇc´astmi syst´emu. Rozˇsiˇritelnost souvis´ıs flexibilitou. Distribuovan´yoperaˇcn´ısyst´emby mˇelb´ytschopen rozˇs´ıˇren´ı o (teoreticky) jak´ekoliv mnoˇzstv´ıprocesor˚u.Prakticky je samozˇrejmˇetoto mnoˇzstv´ılimitov´anopˇrede- vˇs´ımprobl´emy pˇrikomunikaci. Nejde jen o propustnost linek, kter´am˚uˇzekomunikaci zdrˇzovat nebo komplikovat, ale tak´eo n´aroˇcnostsynchronizace syst´emu, kde se z d˚uvodu distribuovanosti odbour´av´a centralizovan´eˇr´ızen´ıˇcehokoliv. Proto se velmi rozs´ahl´edistribuovan´esyst´emy buduj´ıpˇredevˇs´ımv ob- lastech, kde tyto probl´emy nejsou podstatn´enebo je lze ˇreˇsit.

1.4 Cloud Computing a operaˇcn´ısyst´emy

V souˇcasn´edobˇese objevuj´ımoˇznostiprovozov´an´ısluˇzeb,aplikac´ıa datov´ych ´uloˇziˇst’ (nebo jin´ych prostˇredk˚u)na Internetu. Souhrnnˇese tento koncept naz´yv´aCloud Computing. N´azevje odvozen od obvykl´ehozobrazov´an´ıprincipu konceptu, kdy poskytovan´eprostˇredkynejr˚uznˇejˇs´ıhodruhu jsou um´ıstˇeny v oblaku“, jehoˇzfyzick´eum´ıstˇen´ıani vnitˇrn´ıorganizace nejsou zvenˇc´ızˇrejm´e.Pro pˇr´ıstup ” k takto nab´ızen´ymsluˇzb´amˇcastostaˇc´ıjen internetov´yprohl´ıˇzeˇca pˇr´ıpadnˇepˇr´ıdavn´ymodul ˇcido- dateˇcn´ysoftware nebo technologii (napˇr´ıklad AJAX, Javu, Flash Player nebo Silverlight). V souvislosti s Cloud Computingem se setk´av´amei s velk´ymifirmami – Google, Microsoft, Amazon, Dell, atd. Tak´ese tento trend osvˇedˇcujev oblasti zabezpeˇcen´ı,nˇekter´efirmy produkuj´ıc´ıbezpeˇcnostn´ı software nab´ızen´ısv´eaplikace ve formˇe Cloud“, tedy aplikace (vˇcetnˇenejnovˇejˇs´ıch aktualizac´ı)bˇeˇz´ı ” v cloudu, skenuje uˇzivatel˚uvpoˇc´ıtaˇcpˇress´ıt’ a t´emˇeˇrnezatˇeˇzujejeho procesor (ovˇsem zatˇeˇzujes´ıt’ov´e pˇripojen´ı). Z hlediska operaˇcn´ıch syst´em˚un´asmohou zaj´ımatoperaˇcn´ısyst´emy, kter´ebˇeˇz´ı v cloudu“, v oblaku ” – cloud operaˇcn´ısyst´emy. Cloud operaˇcn´ısyst´emse liˇs´ıod bˇeˇzn´ehooperaˇcn´ıhosyst´emu pˇredevˇs´ım v tom, ˇzek´odjeho j´adra(a tak´eobvykle k´odt´emˇeˇrvˇsehoostatn´ıho,co syst´emnab´ız´ı)bˇeˇz´ına procesoru nˇekdev cloudu, n´aˇsprocesor nen´ızatˇeˇzov´an,a s poˇc´ıtaˇcem,u kter´ehosed´ıme,komunikuje obvykle pˇress´ıt’ov´eprotokoly (n´aˇspoˇc´ıtaˇcvlastnˇefunguje jako termin´al,vstupnˇe/v´ystupn´ırozhran´ı). Takov´yoperaˇcn´ısyst´emlze bud’ provozovat v internetov´emprohl´ıˇzeˇcipodporuj´ıc´ımpˇr´ısluˇsnou technologii, pak se vlastnˇenejedn´aani tak o operaˇcn´ısyst´em,ale sp´ıˇseo nˇecomezi webovou aplikac´ı a operaˇcn´ımsyst´emem.Jinou moˇznost´ıje provozov´an´ıtakov´ehosyst´emu nad EFI (to je modernˇejˇs´ı n´ahradaBIOSu), kdy vlastnˇena poˇc´ıtaˇciani nemus´ıme operaˇcn´ı syst´eminstalovat (souˇc´ast´ı EFI Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 9 m˚uˇzeb´ytjednoduch´yinternetov´yprohl´ıˇzeˇc).Nˇekter´aˇreˇsen´ınab´ızen´ımoˇznostprovozu na tenk´ych ” klientech“5. Mezi cloud operaˇcn´ısyst´emy patˇr´ınapˇr´ıklad • ICloud OS (http://www.icloud.com) – pˇreswebov´yprohl´ıˇzeˇcpracujeme v syst´emu zaloˇzen´emna Ubuntu Linuxu, jehoˇzgrafick´erozhran´ıje upraveno do viz´aˇzeWindows, m´amek dispozici bˇeˇzn´e aplikace a ´uloˇzn´yprostor. • OOS (http://oos.cc) – jednoduch´ycloud operaˇcn´ısyst´ems viz´aˇz´ıWindows vybaven´yz´akladn´ımi aplikacemi a ´uloˇzn´ymprostorem, v internetov´emprohl´ıˇzeˇcipotˇrebujemeJavaScript a AJAX. • Glide OS (http://glidedigital.com) – cloud operaˇcn´ısyst´emvyuˇz´ıvaj´ıc´ıtechnologii Flash (a tak´e instalaci doplˇnkudo prohl´ıˇzeˇce). • SilveOS (http://www.silveos.com) – vyˇzaduje technologii Silverlight a v internetov´emprohl´ıˇzeˇcibˇeˇz´ı v tzv. sandboxu (coˇzznamen´avyˇsˇs´ı´uroveˇnzabezpeˇcen´ı,ale tak´eodˇr´ıznut´ıod syst´emu re´alnˇe bˇeˇz´ıc´ıhona poˇc´ıtaˇci).Je zaloˇzenna Windows. • myGoya (http://www.mygoya.de) – jednoduch´yoperaˇcn´ısyst´emse z´akladn´ımiaplikacemi a mal´ym ´uloˇzn´ymprostorem, potˇrebujeme Adobe Flash Player a Javu. • Ghost Cloud OS (http://ghost.cc) – funguje ve spolupr´acis port´alemAmazon, pˇr´ıstup je pˇres technologii Adobe Flash. • Eye OS (http://eyeos.org) – nab´ız´ısyst´emzaloˇzen´yna Linuxu s bˇeˇzn´ymiaplikacemi, v interne- tov´emprohl´ıˇzeˇcivyuˇz´ıv´atechnologie AJAX a PHP. • StartForce (http://www.startforce.com) – syst´em,kter´ysv´ymvzhledem pˇripom´ın´aWindows, ale zˇrejmˇejde o vlastn´ısyst´em,m´amek dispozici z´akladn´ıaplikace a ´uloˇzn´yprostor. Vyuˇz´ıv´atech- nologii AJAX. • Nivio nDesktop (http://geneva.nivio.com) – placen´asluˇzba,ve kter´esi pronaj´ım´ame“ Windows ” XP vˇcetnˇeaplikac´ı,vyuˇz´ıv´aJavu a ActiveX (ˇc´ımˇzje d´anavazba na jist´yinternetov´yprohl´ıˇzeˇc). • Windows Azure (http://www.windowsazure.com) – pokus Microsoftu o cloud operaˇcn´ısyst´em,kter´y zde slouˇz´ıjako z´aklad, na kter´emklienti mohou vyv´ıjeta nab´ızetsv´eaplikace. Jde o syst´em odvozen´yod Windows Server (pouˇz´ıv´ase technologie serverov´evirtualizace), a s´amo sobˇeje urˇcenpˇredevˇs´ımprogram´ator˚um aplikac´ı. • Chromium OS (http://www.chromium.org/chromium-os) – produkt firmy Google, kter´yumoˇzˇnuje menˇs´ım zaˇr´ızen´ım pˇristupuj´ıc´ım na Internet pracovat i bez nutnosti instalace, spr´avya tak´e zdlouhav´ehonaˇc´ıt´an´ısyst´emu pˇristartu zaˇr´ızen´ı,je moˇzn´evyuˇz´ıvat nˇekter´einternetov´eaplikace od Googlu (Google Dokumenty, Picasa apod.), verze rozhodnˇejeˇstˇenen´ıfin´aln´ı. To je jen v´yˇcetnejzn´amˇejˇs´ıch ˇreˇsen´ı,cloud operaˇcn´ıch syst´em˚uje v´ıce.Odliˇsuj´ıse kromˇejin´ehosvou licenˇcn´ıpolitikou (nˇekter´ejsou zdarma, vˇetˇsinaposkytuje alespoˇnbezplatnou demonstraˇcn´ıverzi), maj´ır˚uzn´ej´adro,poskytovan´eprostˇredky (vˇcetnˇe´uloˇzn´ehoprostoru) a aplikace, nˇekter´eumoˇzˇnuj´ı mnoˇzstv´ıaplikac´ırozˇsiˇrovat, jin´enikoliv, mohou b´ytuniverz´aln´ınebo urˇcen´ek specifick´emu ´uˇcelu.

5Tenk´yklient je vlastnˇeobdoba termin´alu– poˇc´ıtaˇc,na kter´emnen´ıinstalov´anoperaˇcn´ısyst´em,pracujeme vzd´alenˇe, v operaˇcn´ımsyst´emu nainstalovan´emjinde, obvykle na lok´aln´ımserveru. Tenk´eklienty jsou dobr´ymˇreˇsen´ımpro skupiny poˇc´ıtaˇc˚una kvalitn´ıs´ıt’ov´einfrastruktuˇres rychl´ymserverem, tenk´yklient obvykle ani neb´yv´avybaven pevn´ymdiskem (nejd˚uleˇzitˇejˇs´ıje s´ıt’ov´akarta umoˇzˇnuj´ıc´ıvzd´alen´ebootov´an´ı– naˇc´ıt´an´ısyst´emu). Kapitola 1 Uvod´ do operacnˇ ´ıch system´ ˚u 10

Z´adn´yzˇ v´yˇseuveden´ych syst´em˚u, kter´ejsou koncipov´any jako univerz´aln´ı,zat´ımnem˚uˇzenab´ıdnout tyt´eˇzmoˇznostijako lok´alnˇenainstalovan´ysyst´emnebo syst´embˇeˇz´ıc´ına (jednom) serveru v lok´aln´ıs´ıti (pˇr´ıstupn´yna tenk´ych klientech). Ovˇsemv´yhodou je rychlost bootov´an´ı“ – zprovoznˇen´ısyst´emu po za- ” pnut´ızaˇr´ızen´ıa moˇznostsd´ılen´ıprostˇredk˚uvˇcetnˇesoubor˚uv r´amcit´ehoˇzcloud syst´emu, tedy tento typ syst´em˚uby mohl b´yturˇcennapˇr´ıkladpro PDA, netbooky, smartphony a podobn´azaˇr´ızen´ıs vhodnˇevy- baven´ymfirmwarem (tˇrebaEFI). Ve vˇetˇsinˇepˇr´ıpad˚uby mohl b´ytk´amen´urazuv bezpeˇcnostisyst´emu. Firmy, zejm´enastˇredn´ıvelikosti, na cloudu obecnˇel´ak´apˇredevˇs´ımdostupnost prakticky kdeko- liv (kde je k dispozici s´ıt’ov´akonektivita), d´aleto, ˇzenen´ınutn´eprovozovat a financovat vlastn´ıIT oddˇelen´ı(servis obvykle zajiˇst’uje provozovatel cloudu), a tak´ejednoduch´amoˇznostnavyˇsov´an´ıkapacity a rozˇsiˇrov´an´ısluˇzebs cloudem souvisej´ıc´ıch (pˇriplat´ısi). Kapitola 2 Struktura operaˇcn´ıch syst´em˚u

Abychom mohli porozumˇettomu, jak pracuj´ıoperaˇcn´ısyst´emy, potˇrebujemealespoˇnz´akladn´ıinfor- mace o jejich struktuˇre.U modern´ıch operaˇcn´ıch syst´em˚uje struktura vytv´aˇrenapˇredevˇs´ıms ohledem na bezpeˇcnost a stabilitu cel´ehosyst´emu, vˇzdynajdeme rozdˇelen´ına privilegovanou ˇc´ast(privilegovan´y reˇzim,reˇzimj´adra)a uˇzivatelskou ˇc´ast (uˇzivatelsk´y,neprivilegovan´yreˇzim)s t´ım,ˇzeprocesy bˇeˇz´ıc´ı v uˇzivatelsk´eˇc´astinemaj´ımoˇznostjakkoliv zasahovat do privilegovan´e.Ovˇsemsvou strukturu maj´ı tak´ejednoduˇsˇs´ısyst´emy, jim ˇcastostaˇc´ıjednoduˇsˇs´ıstavba. V t´etokapitole nejdˇr´ıvprobereme z´akladn´ıdruhy struktur, pak si uk´aˇzemestrukturu nˇekter´ych konkr´etn´ıch operaˇcn´ıch syst´em˚urodiny Windows a UNIX.

2.1 Z´akladn´ıtypy architektur

N´asleduj´ıc´ıpojmy (typy struktur) plat´ınejen pro v´ypoˇcetn´ısyst´emy jako celek, jsou obecnˇepouˇz´ıv´any napˇr´ıkladtak´epro strukturu j´adrasyst´emu nebo vrstev v j´adˇre.  Monolitick´astruktura je nejjednoduˇsˇs´ı struktura pouˇz´ıvan´av j´adrech operaˇcn´ıch syst´em˚unebo v zaˇr´ızen´ıch (tisk´arny). Syst´emse skl´ad´az j´adraa rozhran´ı,kter´ezprostˇredkov´av´akomunikaci mezi j´adrema okol´ım. J´adramodern´ıch operaˇcn´ıch syst´em˚ujsou ponejv´ıce monolitick´a(t´yk´ase to prakticky vˇsech UNIXov´ych syst´em˚ua d´aleWindows rodiny NT). Znamen´ato, ˇzesamotn´ej´adroje pˇredstavo- v´anoobvykle jedin´ymsouborem (pˇristartu syst´emu se j´adronaˇc´ıt´az jedin´ehosouboru), jehoˇz funkcionalita je rozˇsiˇrov´anamoduly (knihovnami nebo za bˇehu linkovan´ymimoduly).  Vrstven´a(hierarchick´a)struktura – ˇc´astisyst´emu jsou uspoˇr´ad´any do vrstev, kaˇzd´avrstva vyuˇz´ıv´a sluˇzebniˇzˇs´ıch vrstev, ne naopak. Kaˇzd´avrstva komunikuje pr´avˇejen s okoln´ımivrstvami. Syst´em je budov´anod vnitˇrn´ıch vrstev k vnˇejˇs´ım,proto vnitˇrn´ıvrstvy, kter´ejsou obvykle nejd˚uleˇzitˇejˇs´ı z hlediska stability a bezpeˇcnosti,b´yvaj´ınejl´epe otestov´any. V informatice se s touto architektu- rou setk´av´ametak´eu poˇc´ıtaˇcov´ych s´ıt´ı. Tento typ struktury je u modern´ıch operaˇcn´ıch syst´em˚unejbˇeˇznˇejˇs´ı pˇrireprezentaci syst´emu jako celku. Rozliˇsujemepˇredevˇs´ımdvˇehlavn´ıvrstvy – vrstvu j´adra (chr´anˇen´yreˇzim)a vrstvu uˇzivatelskou.  Virtu´aln´ıpoˇc´ıtaˇce (virtu´aln´ıstroje) – syst´emje rozdˇelendo samostatn´ych modul˚u(virtu´aln´ıch poˇc´ıtaˇc˚u,virtu´aln´ıch zaˇr´ızen´ı),kaˇzd´yz nich je zhruba stejnˇevybaven prostˇredky(ˇcasprocesoru,

11 Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 12

pamˇet’, apod.), obvykle se nemohou pˇr´ıliˇsvz´ajemnˇeovlivˇnovat kromˇez´akladn´ıkomunikace mezi procesy (napˇr.pˇred´av´an´ıdat a jin´ych informac´ı). Pouˇz´ıv´ase v operaˇcn´ıch syst´emech pro podsyst´emy, kter´eje nutn´ez nˇejak´ehod˚uvodu oddˇelit vz´ajemnˇenebo od prostˇredk˚usyst´emu (v tˇechto podsyst´emech mohou napˇr´ıklad bˇeˇzetstarˇs´ı aplikace, kter´eby jinak nemohly na novˇejˇs´ımsyst´emu fungovat). Tento princip na vyˇsˇs´ı´urovni vyuˇz´ıv´ametak´ev softwarov´ea hardwarov´evirtualizaci, kter´ese budeme vˇenovat ke konci se- mestru.  Abstraktn´ıpoˇc´ıtaˇce – syst´emje tak´erozdˇelenna ˇc´asti(resp. nˇekter´eˇc´astijsou vydˇeleny), ale na rozd´ılod virtu´aln´ıch poˇc´ıtaˇc˚uabstraktn´ıpoˇc´ıtaˇcemaj´ıkaˇzd´ysvou specifickou funkci (napˇr. modul, kter´yzprostˇredkov´av´apˇr´ıstupk tisk´arnˇe,udrˇzujetiskovou frontu, sn´ım´az ostatn´ıch pro- ces˚unutnost bˇehem tisku neust´alekomunikovat s tisk´arnoua pos´ılatj´ıdata). Zat´ımcovirtu´aln´ı poˇc´ıtaˇcemaj´ı od kaˇzd´ehoprostˇredkunˇeco“ (ˇc´astpamˇeti,ˇc´astˇcasuprocesoru apod.), abstraktn´ı ” poˇc´ıtaˇcm´apˇridˇelenpouze jeden jedin´yprostˇredek,ale zato v´yhradnˇe(neexistuje jin´yvlastn´ık tohoto prostˇredku). Typick´epouˇzit´ı je v prim´arn´ım rozhran´ı zaˇr´ızen´ı – ovladaˇce.Napˇr´ıklad tisk´arnaje pˇridˇelena pouze jedin´emu procesu – obsluˇzn´emu procesu tisk´arny (ten m˚uˇzeb´yttotoˇzn´ys ovladaˇcem). Obsluˇzn´yproces vede tiskovou frontu tisk´arny a v n´ıeviduje poˇzadavky proces˚una tisk.  Modul´arn´ıstruktura – syst´emje ˇclenˇendo modul˚u,kter´elze podle potˇreby pˇrid´avat (nejl´epe za bˇehu syst´emu). U tohoto typu struktury se pˇredpokl´ad´aunifikovan´erozhran´ımodul˚u,pˇreskter´e m˚uˇzesyst´emkomunikovat i s takov´ymmodulem, kter´yv dobˇevzniku syst´emu jeˇstˇeneexistoval. Moduly, jak bylo dˇr´ıve poznamen´ano,se pouˇz´ıvaj´ıve st´alevˇetˇs´ımrozsahu v j´adrech modern´ıch operaˇcn´ıch syst´em˚u.Jako moduly jsou implementov´any ovladaˇce(tedy ty, kter´ese naˇc´ıtaj´ıdo j´adra),r˚uzn´efiltry (procesy pro zpracov´an´ı dat), s´ıt’ov´eprotokoly (v UNIXov´ych syst´emech a v novˇejˇs´ıch Windows od verze Vista), atd.  Model klient-server – syst´emm´aco nejmenˇs´ıj´adro(minikernel, mikrokernel), kter´eobsahuje pouze z´akladn´ıfunkce (obvykle pouze funkce ˇr´ıd´ıc´ıˇcinnostostatn´ıch ˇc´ast´ısyst´emu, jako je pˇrep´ın´an´ı mezi procesy a ˇr´ızen´ımechanismu zas´ıl´an´ızpr´avmezi procesy), ostatn´ıfunkce syst´emu prov´adˇej´ı speci´aln´ı syst´emov´eprocesy, kter´enaz´yv´ame servery. Procesy, kter´espouˇst´ı uˇzivatel (nejsou syst´emov´e),se naz´yvaj´ı klienty, vyuˇz´ıvaj´ısluˇzebproces˚utypu server. V´yhodou je vyˇsˇs´ıstabilita syst´emu – pokud chyba nastane u nˇekter´ehoserveru, m˚uˇzeb´ytre- setov´an,ale nemus´ıb´ytznovu zav´adˇencel´ysyst´em(pravdˇepodobnost poˇskozen´ıj´adraje mal´a vzhledem k jeho jednoduchosti). Tuto strukturu vyuˇz´ıv´amnoho realtimov´ych syst´em˚u.

2.2 Syst´emy MS-DOS a Windows

Radaˇ Windows s DOS j´adrem zahrnuje Windows 95, 95 OSR2, 98, 98 SE a ME. Tyto verze vznikly ´upravou a vˇclenˇen´ımp˚uvodnˇesamostatn´ehooperaˇcn´ıho syst´emu MS-DOS jako j´adrado Windows, kter´ese t´ımto staly samostatn´ymoperaˇcn´ımsyst´emem1.

1Windows do verze 3.11 byly pouze grafickou n´astavbou MS-DOSu, nikoliv samostatn´ymoperaˇcn´ımsyst´emem.T´ım se staly pr´avˇeaˇzod Windows 95, vnitˇrnˇeWindows 4.0. Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 13

Windows s NT j´adrem(NT 3.x, NT 4.x, 2000, XP, Server 2003, Vista, Server 2008, 7, Server 2008 RC2, atd.) maj´ızcela pˇrepracovan´ej´adroa pˇresznaˇcnouzpˇetnoukompatibilitu se vlastnˇejedn´ao jin´y typ operaˇcn´ıhosyst´emu.

2.2.1 MS-DOS a Windows do verze 3.x

Struktura operaˇcn´ıch syst´em˚uWindows s DOS j´adrem vych´az´ız p˚uvodn´ıhosyst´emu MS-DOS, proto se nejdˇr´ıvpod´ıv´amena strukturu tohoto jednoduch´ehosyst´emu a pak ji rozˇs´ıˇr´ımena tuto ˇraduWindows. MS-DOS je jednoprocesorov´yjednouˇzivatelsk´yjednoprogramov´ylok´aln´ıuniverz´aln´ısyst´em.Sa- motn´yMS-DOS bez spuˇstˇen´en´astavby Windows m´avelmi jednoduchou vrstvenou strukturu. Nejbl´ıˇze hardwaru je BIOS (Basic Input-Output System) a d´ale soubor IO.sys, kter´yse star´ao obsluhu periferi´ı.

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

Komunikace s uzˇivatelem (COMMAND.COM)

Ja´dro (MSDOS.SYS)

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

Hardware

Obr´azek2.1: Struktura MS-DOSu 6.22

BIOS poskytuje program´ator˚umz´akladn´ıovl´ad´an´ıhardwaru (napˇr.kl´avesnice, monitoru) pˇres hardwarov´aa softwarov´apˇreruˇsen´ı. Pokud program´atorpotˇrebujekomunikovat s urˇcit´ymzaˇr´ızen´ım (tˇrebavypsat ˇci vykreslit nˇecona obrazovku), vyvol´apˇr´ısluˇsn´epˇreruˇsen´ı(k tomu jsou v programovac´ıch jazyc´ıch speci´aln´ıpˇr´ıkazy), pˇr´ıpadnˇese m˚uˇzenapojit na nˇekter´epˇreruˇsen´ıa nechat prov´esturˇcitou funkci ve chv´ıli,kdy je pˇreruˇsen´ıvyvol´anojinde neˇzv programu (napˇr´ıkladtakto hl´ıd´astisknut´ıkl´aves nebo pohyb myˇsi). Nad vrstvou pro ovl´ad´an´ıhardwaru je vrstva samotn´ehoj´adrasyst´emu pˇredstavovan´asouborem MSDOS.SYS. Tento syst´emm´atedy monolitick´ej´adrosloˇzen´ez jedin´ehosouboru. J´adroposkytuje dalˇs´ı softwarov´apˇreruˇsen´ı, napˇr´ıkladpro pˇr´ıstupk soubor˚umnebo pokroˇcilejˇs´ıpr´acis grafikou. N´asleduj´ıc´ıvrstva tvoˇren´asouborem COMMAND.COM je textov´erozhran´ımezi uˇzivatelem a syst´emem. Tento program je spuˇstˇenpo celou dobu pr´acesyst´emu a komunikuje s uˇzivatelem (spuˇstˇen´epro- gramy komunikuj´ıs niˇzˇs´ımi vrstvami, coˇzuˇzivatel nedovede, potˇrebuje pˇrekladatele“). Uˇzivatel zad´av´a ” pˇr´ıkazy a rozhran´ına nˇereaguje a vypisuje v´ysledkyˇcichybov´ahl´aˇsen´ı.Samotn´y COMMAND.COM obsa- huje sadu vnitˇrn´ıchpˇr´ıkaz˚u. Ostatn´ıpˇr´ıkazy se naz´yvaj´ı vnˇejˇs´ıpˇr´ıkazy a jsou implementov´any jako programy s pˇr´ıponou .exe nebo .com. Posledn´ıvrstva je urˇcenak zjednoduˇsen´ıpr´ace“ uˇzivatele. Kromˇeuˇzivatelem spuˇstˇen´ych program˚u ” zde bˇeˇz´ıtak´eprogramy pˇredstavuj´ıc´ıvnˇejˇs´ıpˇr´ıkazy a ˇrad´ımezde tak´ekonfiguraˇcn´ısoubory, ve kter´ych si uˇzivatel m˚uˇzeurˇcit,jak m´asyst´emreagovat. Z´akladn´ıkonfiguraˇcn´ısoubory jsou dva – CONFIG.SYS pro nastaven´ıhardwaru (napˇr´ıkladspuˇstˇen´ıurˇcit´ych ovladaˇc˚upro monitor s urˇcen´ımznakov´esady pro ˇceˇstinu) a AUTOEXEC.BAT pro nastaven´ısoftwaru (zde napˇr´ıkladurˇcujeme,kter´eprogramy nebo pˇr´ıkazy se maj´ıspustit po startu syst´emu). Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 14

Kdyˇzv MS-DOSu 6.22 spust´ıme Windows 3.x v rozˇs´ıˇren´emm´odu2, struktura cel´ehosyst´emu se v horn´ıˇc´astizmˇen´ı.Na obr´azku 2.2 je spodn´ıˇc´asttrochu shrnuta (BIOS, MSDOS.SYS). K nim je pˇrid´ansoubor WIN.COM, kter´yslouˇz´ıke spuˇstˇen´ıcel´ych Windows (je tak´eve vˇsech Windows s DOS j´adrem),a d´aleˇradiˇce(ovladaˇce).Windows pˇrid´avaj´ımultitasking, 16bitov´eknihovny a ve verzi 3.11 for Workgroups z´akladn´ıpodporu s´ıtˇe(pouze s´ıt’ peer-to-peer).

Aplikace Win16 Aplikace Win16 Aplikace Win16

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

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

DOS Extender (WIN386.EXE), rˇadicˇe virtua´lnı´ch stroju˚

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

Hardware

Obr´azek2.2: Struktura MS-DOS + Windows 3.x v rozˇs´ıˇren´emm´odu

Radiˇceˇ (ovladaˇce,drivery) ovl´adaj´ıperifern´ızaˇr´ızen´ıpro Windows; ˇradiˇcepˇr´ımopro Windows jsou spouˇstˇeny v souboru SYSTEM.INI pomoc´ıpˇr´ıkazu DEVICE. DOS Extender je modul pro podporu vyuˇzit´ırozˇs´ıˇren´epamˇeti(Extended Memory). Je pˇredstavo- v´ansouborem Win386.EXE. Souˇc´ast´ıtohoto souboru je tak´e Spr´avce virtu´aln´ıchzaˇr´ızen´ı (VMM = Virtual Machine Manager), kter´yovl´ad´amoˇznosti Windows pro soubˇehs programy DOSu. Radiˇcevirtu´aln´ıchˇ zaˇr´ızen´ı (VxD) jsou ˇradiˇce,kter´espr´avce virtu´aln´ıch zaˇr´ızen´ıpotˇrebujepro manipulaci s I/O zaˇr´ızen´ımipro programy DOSu v rozˇs´ıˇren´emm´odu. V dalˇs´ıvrstvˇeje j´adroWindows (pozor, j´adremoperaˇcn´ıhosyst´emu st´alez˚ust´av´a MSDOS.SYS), kter´e zde pracuje jako spr´avce prostˇredk˚uvzhledem k program˚umbˇeˇz´ıc´ımpod Windows (i DOS program˚um zde spuˇstˇen´ym).Skl´ad´ase ze tˇr´ıˇc´ast´ı– soubor˚u: • KRNL386.EXE – pln´ıpˇredevˇs´ım´ulohu spr´avce pamˇeti a spr´avce proces˚u(ˇr´ızen´ıpˇridˇelov´an´ıpamˇeti proces˚um,pˇridˇelov´an´ıprostˇredk˚usyst´emu proces˚um,. . . ), • GDI.EXE – rozhran´ıgrafick´ehozaˇr´ızen´ı(obsahuje funkce pro kreslen´ı´useˇcek,vytv´aˇren´ıkurzoru, ikony, p´ısmo,. . . ), cokoliv souvis´ıse z´akladn´ımifunkcemi pro grafick´yv´ystup(na obrazovku, tisk´arnu apod.), • USER.EXE – uˇzivatelsk´erozhran´ı, zdroje, kter´enepatˇr´ı do GDI (dialogov´aokna, menu, okna, tlaˇc´ıtka, . . . ). V dalˇs´ıvrstvˇenajdeme konfiguraˇcn´ısoubory s pˇr´ıponou .ini. Z nich jsou nejd˚uleˇzitˇejˇs´ı WIN.INI (kon- figurace software a nastaven´ı pro urˇc.uˇzivatele) a SYSTEM.INI (konfigurace hardware). ini soubory mohou m´ıttak´er˚uzn´eprogramy.

2MS-DOS pracuje v re´aln´em m´odu,kde lze pamˇet’ vyuˇz´ıvat pouze do 1 MB. Windows 3.x, aby byly pr´aceschopn´e,se zap´ınaj´ıv rozˇs´ıˇren´emm´odu,dostupn´emaˇzod procesor˚ui386, kde kromˇerozˇs´ıˇren´epamˇetitak´enapˇr´ıkladmohou vyuˇz´ıvat chr´anˇen´ym´odprocesoru pro ochranu pamˇeti. Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 15

N´asledujevrstva, kter´arozhran´ım mezi uˇzivatelem, programy a samotn´ymsyst´emem.Soubor PROGMAN.EXE je Spr´avce program˚u, shell je grafick´ea textov´erozhran´ımezi uˇzivatelem a syst´emem. Zde bychom tak´emohli zaˇraditˇc´ast API rozhran´ı (Application Programming Interface) reprezento- van´eho dynamicky linkovan´ymiknihovnami (obsahuj´ıfunkce, objekty apod.) a vyuˇz´ıvan´ehoprocesy pro pˇr´ıstupk syst´emu. Knihovny cel´eho API rozhran´ıjsou vˇsakrozm´ıstˇeny v r˚uzn´ych vrstv´ach, patˇr´ızde tak´esoubory j´adra KRNL386.EXE, USER.EXE a GDI.EXE. Vˇetˇsinaknihoven m´apˇr´ıponu dll, ale nˇekter´e maj´ıpˇr´ıponu exe, pˇr´ıpona knihoven font˚uzase z´avis´ına typu fontu (napˇr´ıklad ttf pro True-type fonty), atd. Dynamicky linkovan´ymknihovn´amse budeme podrobnˇejivˇenovat na cviˇcen´ıch. Vˇsechny dosud uveden´evrstvy plat´ı zejm´enapro aplikace psan´epro Windows (16bitov´eapli- kace pro Windows do verze 3.x), DOS programy nevˇed´ıo existenci j´adraWindows a ini soubor˚u, proto horn´ıvrstvy nevyuˇz´ıvaj´ı.Protoˇzevˇsakje samotn´yMS-DOS jednoprogramov´ysyst´em(kromˇe ovladaˇc˚ua rezidentn´ıch program˚uje spuˇstˇenvˇzdyjen jeden program), tyto programy jsou naps´any bez jak´ychkoliv ohled˚una moˇznostsd´ılen´ıprostˇredk˚us jin´ymiprocesy. Proto je nutn´e separovat“ je ” do virtu´aln´ıch poˇc´ıtaˇc˚u,kter´eprogram˚umvytvoˇr´ıiluzi v´yluˇcn´eexistence v syst´emu a znemoˇzn´ıjim z´asahy do prostˇredk˚ujin´ych proces˚u.

2.2.2 Windows s DOS j´adrem

Jak jiˇzbylo uvedeno, od verze 4.x (95) jsou Windows jiˇzoperaˇcn´ısyst´emse samostatn´ymj´adrem. Oproti sestavˇeMS-DOS+Windows 3.x je to 32bitov´ysyst´em(ale nˇekter´eknihovny z˚ust´avaj´ı16bitov´e), ostatn´ıvlastnosti z˚ust´avaj´ı.Na obr´azku 2.3 je naznaˇcenazjednoduˇsen´astruktura tohoto syst´emu.

Aplikace Syste´move´ Aplikace Win32 procesy Win16 a sluzˇby, VM VM VM Aplikace Aplikace shell DOS DOS DOS Win16 Win32 1 2 3

Ja´dro Windows Registr (KERNEL, USER, GDI)

IFSM Spra´vce konfigurace VMM

BIOS, ovladacˇe

Hardware

Obr´azek2.3: Struktura Windows 9x/ME

Spodn´ıvrstva (BIOS a ovladaˇce)slouˇz´ık pˇr´ıstupusyst´emu k zaˇr´ızen´ı.N´asleduj´ıc´ıvrstva se tak´e vztahuje k hardwaru, ale jiˇzna abstraktnˇejˇs´ı´urovni. Skl´ad´ase ze tˇr´ız´akladn´ıch modul˚u: • VMM je spr´avce virtu´aln´ıch zaˇr´ızen´ı(Virtual Machine Manager), vytv´aˇr´ıa udrˇzujeprostˇred´ı virtu´aln´ıch poˇc´ıtaˇc˚u(viz stranu 11), • IFSM je spr´avce instalovateln´ych souborov´ych syst´em˚u(Installable File Systems Manager), spra- vuje r˚uzn´etypy souborov´ych syst´em˚u,napˇr.FAT16, VFAT (FAT32 s rozˇs´ıˇren´ımi),CDFS (pro CD-ROM), UDF (pro DVD), atd., pˇrestuto komponentu se komunikuje s pamˇet’ov´ymizaˇr´ızen´ımi (vˇse,co odpov´ıd´astandardu mass storage s takov´ymsouborov´ymsyst´emem,kter´emu IFSM ro- zum´ı), • Spr´avce konfigurace spravuje ovladaˇcehardware na vyˇsˇs´ı´urovni, vˇcetnˇefunkce Plug&Play. Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 16

J´adro se skl´ad´aze tˇr´ımodul˚u,kaˇzd´yz nich m´advˇedynamicky linkovan´eknihovny (jedna pro 16bitov´e aplikace s pˇr´ıponou exe, druh´apro 32bitov´eaplikace s pˇr´ıponou dll): • KERNEL – multithreading, multitasking, spr´ava pamˇeti,synchronizace objekt˚u,vstupu a v´ystu- pu u soubor˚u,atd., • GDI (Graphics Device Interface) – rozhran´ı grafick´ych zaˇr´ızen´ı (obrazovka, tisk´arna,plotter, atd.), zde najdeme z´akladn´ıfunkce pro v´ystupna obrazovku, tisk´arnu apod., tak´espr´avce tisku, spooler, zpracov´an´ıgrafiky, z´akladn´ıgrafick´eobjekty, . . . , • USER – tak´ejako u pˇredchoz´ıhojde o uˇzivatelsk´erozhran´ı(pozor, nejen grafick´e),tedy vstupy z kl´avesnice, myˇsiapod. (ˇr´ızen´epˇreruˇsen´ımi),v´ystupy do uˇzivatelsk´ehografick´ehorozhran´ı(okna, menu, ikony, . . . ), pr´aces ˇcasovaˇcem,atd. Registr (Windows Registry) je centr´aln´ıinformaˇcn´ıdatab´azesyst´emu, najdeme zde vˇetˇsinu toho, co ve Win 3.x bylo v ini souborech (ty jsou vˇsakzachov´any kv˚ulizpˇetn´ekompatibilitˇe).Fyzicky je uloˇzen v souborech SYSTEM.DAT a USER.DAT (pouze ve Win 9x/ME). Jak bˇeˇz´ıprocesy: • Win32 aplikace (psan´epro Windows od verze 95 v´yˇse)bˇeˇz´ıvˇsechny ve spoleˇcn´emvirtu´aln´ım stroji, ale kaˇzd´am´asv˚ujvlastn´ıpamˇet’ov´yprostor (pod tout´eˇzˇc´ıselnouadresou kaˇzd´az tˇechto aplikac´ıvid´ır˚uzn´afyzick´aum´ıstˇen´ıv pamˇeti), • Win16 aplikace (pro Windows 3.11 a niˇzˇs´ı)bˇeˇz´ıvˇsechny ve spoleˇcn´emvirtu´aln´ımstroji z´aroveˇn s Win32 aplikacemi, ale na rozd´ılod Win32 aplikac´ısd´ılej´ıjeden spoleˇcn´ypamˇet’ov´yprostor (spoleˇcn´ypro Win16 aplikace; pod tout´eˇzˇc´ıselnouadresou vid´ıvˇsechny Win16 aplikace tent´yˇz objekt v pamˇeti),3 • DOS aplikace maj´ıkaˇzd´asv˚ujvirtu´aln´ıstroj, v nˇemsv˚ujvlastn´ıpamˇet’ov´yprostor.

2.2.3 Windows ˇradyNT do verze XP

J´adrosyst´emu Windows ˇradyNT vznikalo nez´avislena syst´emu MS-DOS, uˇzpˇrijeho n´avrhu bylo br´ano v ´uvahu typick´epouˇzit´ıtohoto syst´emu jako serveru nebo klienta v s´ıti,a tud´ıˇzhlavn´ımhlediskem je stabilita a moˇznostizabezpeˇcen´ı.Na cel´emkonceptu je vidˇetinspirace UNIXov´ymisyst´emy, nejen co se t´yˇcevrstvy HAL. Syst´embyl navrˇzenjako v´ıceprocesorov´y(SMP – symetrick´ymultiprocessing) v´ıceuˇzivatelsk´ymul- titaskov´yuniverz´aln´ıs´ıt’ov´ysyst´em. Zjednoduˇsen´astruktura syst´emu je naznaˇcenana obr. 2.4. Plat´ıpro Windows NT 4.x, Windows 2000 a XP, ale v hlavn´ıch rysech plat´ıi pro pˇredchoz´ıverzi.  Nˇekter´eprvky jsou podobn´eˇc´astem struktury Windows s DOS j´adrem, ale vnitˇrnˇepracuj´ıjinak. D˚uleˇzit´eje pˇredevˇs´ımrozdˇelen´ıdo dvou z´akladn´ıch ˇc´ast´ı– ˇc´astibˇeˇz´ıc´ıv privilegovan´emreˇzimu (reˇzimu j´adra)a ˇc´astibˇeˇz´ıc´ıv uˇzivatelsk´emreˇzimu.  HAL je vrstva abstrakce hardware (Hardware Abstraction Layer), rozhran´ımezi hardwarem a zbyt- kem j´adrasyst´emu. Pˇristartu syst´emu se naˇc´ıt´aze souboru HAL.DLL. Je oddˇelenaod ostatn´ıch ˇc´ast´ı syst´emu z d˚uvodu snadnˇejˇs´ıpˇrenositelnostisyst´emu mezi (nˇekolika m´alo)hardwarov´ymiplatformami. Ovladaˇcekomunikuj´ıse zaˇr´ızen´ımipouze zprostˇredkovanˇepˇrestuto vrstvu.

3To je kromˇejin´ehoproto, ˇzeWin16 aplikace byly ps´any pro syst´em,kde procesy mohou spolu komunikovat pˇres spoleˇcnoupamˇet’ v DLL knihovn´ach, u Win32 aplikac´ıa 32bitov´ych knihoven to jiˇznen´ımoˇzn´e,byl upˇrednostnˇenmodel v´ıcevyhovuj´ıc´ıpoˇzadavk˚umstability a bezpeˇcnosti syst´emu. Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 17

Sluˇzby, nˇekter´e Aplikace (Win64, Win32, DOS) syst´emov´e procesy Podsyst´emy pro bˇeh proces˚u(CSRSS, WoW64, NTVDM, pˇr´ıpadnˇePOSIX) Dokumentovan´eAPI – knihovny Kernel32, AdvAPI32, User32, GDI32, s´ıt’, protokoly, . . . NTDLL.DLL (nedokumentovan´eAPI) uˇzivatelsk´yreˇzim reˇzim j´adra Rozhran´ısyst´emov´ych vol´an´ı Spr´ava sluˇzeb Bezpeˇcnost Spr´ava soub. Spr´ava objekt˚u Registr Grafick´y (SCM) (LSASS) syst´em˚u(IFSM) subsyst´em, Spr´ava proces˚u Spr´avce spr´ava oken Spr´ava pamˇeti Spr´ava I/O Device Models a vl´aken konfigurace (win32k.sys) Ovladaˇce zaˇr´ızen´ı,souborov´ych syst´em˚u, Kernel (IRQ, pl´anov´an´ıprocesoru, synchronizace) filtry, . . . HAL (Hardware Abstraction Layer) BIOS Hardware

Obr´azek2.4: Struktura Windows s NT j´adremdo verze XP

 Kernel (tzv. tvrd´ej´adro“) a exekutiva jsou fyzicky uloˇzeny v souboru NTOSKRNL.EXE.4 Exekutiva ” nen´ız obr´azkupˇr´ımo patrn´a,m˚uˇzemesi pˇredstavit, ˇzestoj´ıza vˇs´ımv j´adˇre(modr´aoblast) nad HAL kromˇekernelu. Kernel zachyt´av´aa obsluhuje pˇreruˇsen´ı,prov´ad´ıspr´avuprocesor˚u(synchronizace pˇridˇelov´an´ıpro- cesor˚u),apod. Exekutiva je ˇr´ıdic´ıproces operaˇcn´ıho syst´emu, m´ana starosti ˇr´ızen´ıcel´ehoj´adrabˇeˇz´ıc´ıho v privilegovan´emreˇzimu a provoz modul˚u.Kernel i exekutiva se pˇristartu syst´emu naˇc´ıtaj´ıze souboru NTOSKRNL.EXE (jedin´ysoubor, tedy monolitick´ej´adro),ostatn´ısouˇc´astij´adrajsou k j´adrulinkov´any z dynamick´ych knihoven ˇcisoubor˚u.sys (moduly, tedy modul´arn´ıstruktura bˇeˇz´ıc´ıhoj´adra).  Hlavn´ısyst´emov´yproces (v aplikac´ıch pro spr´avuproces˚ujej vid´ımepod n´azvem System“) je ve ” skuteˇcnostiobrazem toho, co bˇeˇz´ıv j´adˇre,exportovan´ymdo uˇzivatelsk´ehoprostoru (re´alnˇesamozˇrejmˇe pˇr´ımodo j´adranevid´ıme).Ve skuteˇcnostinejde o proces, ale o kontejner pro prov´adˇec´ıvl´akna j´adra (o vl´aknech se v´ıcedov´ımev kapitole o spr´avˇeproces˚u).  Ovladaˇce nesouvisej´ıjen se zaˇr´ızen´ımi,obecnˇejde o moduly j´adra,kter´emohou slouˇzitjak k pˇr´ı- stupu k zaˇr´ızen´ım,sbˇernic´ımapod., ale tak´eto mohou b´ytfiltry, pˇreskter´eproch´azej´ıdata (ˇsifrov´an´ı, komprimace, smˇerov´an´ımezi moduly, filtrov´an´ı/zahazov´an´ı/tˇr´ıdˇen´ı,DRM, atd.). Pro pr´acis ovladaˇciexistuje sloˇzit´ysyst´em, do kter´ehose zapojuje rovnou nˇekolik na obr´azku vyznaˇcen´ych souˇc´ast´ı,napˇr´ıklad Device Models (modely ovladaˇc˚u)urˇcuj´ıunifikovan´yzp˚usobzach´azen´ı s ovladaˇci(v´ıcena cviˇcen´ıch z Windows).  Nad ovladaˇci souborov´ych syst´em˚uje syst´empro jejich spr´avu– IFSM (stejnˇejako u dˇr´ıve popisovan´everze Windows) – Installable File Systems Manager, kter´yzajiˇst’uje pˇr´ıstup k (pˇredem

4Ve skuteˇcnostinen´ıjenom NTOSKRNL.EXE. Ve v´ıceprocesorov´em(resp. v´ıcej´adrov´em)syst´emu je nahrazen souborem NTKRNLMP.EXE; v syst´emu se zapnutou funkc´ıPAE (pˇr´ıstupk pamˇetinach´azej´ıc´ıse za adresovatelnou pamˇet´ı)se pouˇz´ıv´a NTKRNLPA.EXE pro jednoprocesorov´ysyst´ema NTKRPAMP.EXE ve v´ıceprocesorov´emsyst´emu. To plat´ıo pojmenov´an´ısou- bor˚una instalaˇcn´ımCD, po instalaci nebo upgradu na v´ıceprocesorov´ysyst´emˇcisyst´ems PAE najdeme v syst´emu pouze n´azvy NTOSKRNL.EXE nebo NTKRNLPA.EXE (p˚uvodnˇejinak pojmenovan´averze je bˇehemkop´ırov´an´ız CD pˇrejmenov´ana). Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 18 urˇcen´ym)souborov´ymsyst´em˚um(NTFS, FAT32, UDF apod.). Je vyuˇz´ıv´anmodulem pro spr´avu vstup˚ua v´ystup˚ua vyrovn´avac´ıpamˇeti.  Spr´avce konfigurace spolupracuje pˇrispr´avˇeovladaˇc˚u,napˇr´ıkladzajiˇst’uje funkce Plug&Play a Hot- Plug, tedy neust´alesleduje stav sbˇernica hl´ıd´apˇripojov´an´ınov´ych ˇcijiˇzdˇr´ıve pˇripojovan´ych zaˇr´ızen´ı, u nov´ych se pokouˇs´ıprov´estinstalaˇcn´ıa inicializaˇcn´ıproceduru.  Moduly pro spr´avuoken a grafiky bˇeˇz´ıve Windows ˇradyNT od verze 4 v reˇzimu j´adraz d˚uvodu urychlen´ıpr´ace aplikac´ıhodnˇevyuˇz´ıvaj´ıc´ıch grafick´azaˇr´ızen´ı.Tato ˇc´astj´adrase naˇc´ıt´aze souboru win32k.sys. Um´ıstˇen´ık´odu grafick´ehorozhran´ıdo reˇzimu j´adraje neobvykl´e.Nev´yhodou tohoto postupu je ovˇsemvˇetˇs´ıbezpeˇcnostn´ıriziko a riziko poruˇsen´ıstability syst´emu pˇrichybn´epr´acitohoto modulu (pra- cuje v reˇzimu j´adra, proto m´apˇr´ıstupdo pamˇetisyst´emov´ych proces˚u).Dalˇs´ınev´yhodou je n´aroˇcnˇejˇs´ı postup v´ymˇeny uˇzivatelsk´ehorozhran´ıza alternativn´ı.Ve Windows Server od verze 2008 je moˇzn´e instalovat syst´embez GUI (a tak´ebez dalˇs´ıch souˇc´ast´ı,kter´ejakkoliv GUI vyˇzaduj´ı) – instalace Server Core. Grafick´ysubsyst´emv j´adˇreje modul GDI, ve Windows XP i jeho n´astavba GDI+. Dynamick´e knihovny gdi32.dll, gdiPlus.dll a gdi32Full.dll jsou pouze pˇr´ıstupov´ymibody k tˇemto modul˚um v uˇzivatelsk´emprostoru. GDI+ ve Windows XP je vylepˇsen´ımp˚uvodn´ıhoGDI (napˇr´ıkladje moˇzn´e pouˇz´ıvat jako souˇradnicei racion´aln´ıˇc´ısla,ne pouze cel´a,byla pˇrid´anapodpora r˚uzn´ych 2D operac´ı, dalˇs´ıch form´at˚usoubor˚uvˇcetnˇe jpeg a png, atd.).  Bezpeˇcnostn´ıpodsyst´em souvis´ıpˇredevˇs´ıms modulem LSASS (Local Security Authority SubSys- tem). Prov´ad´ıautentizaci uˇzivatel˚u, kteˇr´ıse pˇrihlaˇsuj´ılok´alnˇe,a podle datab´azev kl´ıˇciregistru SAM urˇcujepˇr´ıstupov´aopr´avnˇen´ı.  Spr´avce sluˇzebSCM (Service Control Manager) se naˇc´ıt´aze souboru services.exe a zajiˇst’uje bˇeh sluˇzeb a komunikaci s nimi. Samotn´esluˇzby sice bˇeˇz´ıv uˇzivatelsk´emprostoru, ale obvykle s vyˇsˇs´ımi opr´avnˇen´ımia bez vazby na konkr´etn´ıhouˇzivatele, a komunikuje se s nimi pˇredevˇs´ımpˇresmodul SCM.  Od Windows NT verze 4 je j´adrov´ıcem´enˇeobjektov´e,s ˇc´ımˇzjsme se sezn´amiliuˇzv zimn´ım semestru. V j´adˇrese udrˇzuje datab´azeobjekt˚ua objekty exekutivy jsou exportov´any do uˇzivatelsk´eho prostoru. Datab´aziobjekt˚uspravuje Spr´avce objekt˚u. £ Komunikace proces˚us j´adrem (napˇr´ıkladpˇriˇz´adostio otevˇren´ısouboru ˇciˇz´adostio dalˇs´ıoblasti operaˇcn´ıpamˇeti)prob´ıh´aobvykle t´ımto zp˚usobem: • proces spust´ı urˇcitoufunkci ˇciproceduru z dokumentovan´eho nebo nedokumentovan´ehoAPI, pˇr´ıpadnˇedokumentovan´afunkce m˚uˇzezavolat nedokumentovanou funkci, • provede se syst´emov´evol´an´ı v kontextu j´adra, • v r´amcisyst´emov´ehovol´an´ıje poˇzadavek vyˇreˇsen.  Dokumentovan´erozhran´ı pˇredstavuj´ıfunkce a objekty ze syst´emov´ych knihoven, jejichˇzn´azvyby n´ammˇelyb´ytpovˇedom´e– User32.dll, GDI32.dll a dalˇs´ı.Jejich urˇcen´ıje vpodstatˇepodobn´etomu, co jsme se uˇciliu starˇs´ıch syst´em˚u,rozd´ılyjsou ve zp˚usobunaprogramov´an´ı.  Nedokumentovan´eAPI je soubor NTDLL.DLL. Funkce, kter´ese zde nach´azej´ı, jiˇzmohou pˇr´ımo spouˇstˇetsyst´emov´avol´an´ı– mohlo by se tedy zd´at,ˇzeje lepˇs´ıpouˇz´ıvat hned nedokumentovan´eAPI (bylo by to rychlejˇs´ı),ale probl´em je v tom, ˇzefunkce poskytovan´et´ımto rozhran´ımmohou b´yt v kaˇzd´e verzi Windows jin´ea mohou vyˇzadovat jin´yzp˚usobvol´an´ı(spouˇstˇen´ı).Nepˇr´ıjemn´ymd˚usledkem je, Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 19

ˇzeaplikace pouˇz´ıvaj´ıc´ı nedokumentovan´eAPI nemus´ı v nˇekter´ych verz´ıch fungovat v˚ubec nebo se pˇrijej´ımbˇehu m˚uˇzemesetk´avat s r˚uzn´ymiprobl´emy souvisej´ıc´ımis nekompatibilitou. Proto je lepˇs´ı pouˇz´ıvat dokumentovan´eAPI, kter´ese vˇzdy chov´astejnˇe(dokumentovanˇe).Soubor NTDLL.DLL je tedy jak´ymsirozhran´ımmezi j´adrema uˇzivatelsk´ymprostorem, ale obvykle k tomuto rozhran´ıpˇristupujeme zprostˇredkovanˇe.  Podsyst´emy(subsyst´emy)prostˇred´ı jsou rozhran´ızajiˇst’uj´ıc´ıspr´avn´ya bezpeˇcn´ybˇehr˚uzn´ych typ˚u proces˚u.V tˇechto podsyst´emech bˇeˇz´ı aplikace, kter´eani nemus´ı b´ytkompatibiln´ı s Windows NT. Podsyst´emy poskytuj´ıaplikac´ım rozhran´ı,kter´epˇrekl´ad´akomunikaci (poˇzadavky na informace, zdroje, proveden´ıurˇcit´eakce apod.) mezi aplikac´ıa operaˇcn´ımsyst´ememtak, aby si obˇestrany rozumnˇely“. ” Je to pˇredevˇs´ımpodsyst´empro aplikace psan´epro 32bitov´aWindows, MS-DOS a aplikace pro 16bitov´aWindows Win32 (jedin´ypodsyst´empro vˇsechny tyto typy aplikac´ı,v nˇemjsou pak spouˇstˇeny pˇr´ıpadn´evirtu´aln´ıpoˇc´ıtaˇce),podsyst´empro OS/2, POSIX , atd. Podsyst´empro 32bitov´aWindows vˇcetnˇeNT (podsyst´em Win32 , v 64bitov´emsyst´emu se jmenuje prostˇe Windows) je pˇredstavov´ansouborem CSRSS.EXE, pro POSIX je to pˇredevˇs´ımsoubor PXSS.EXE (to je server podsyst´emu). Podsyst´emWin32/Windows je potˇrebn´ytak´epro bˇehmnoha syst´emov´ych proces˚u,proto se jako jedin´yspouˇst´ıhned po startu poˇc´ıtaˇce, ostatn´ıpodsyst´emy jsou spouˇstˇeny aˇz na ˇz´adostpˇrispuˇstˇen´ıaplikace patˇr´ıc´ıtomuto podsyst´emu. Kaˇzd´ypodsyst´empotˇrebujekromˇesv´ehoˇr´ıdic´ıhoprogramu (napˇr´ıklad CSRSS.EXE u Win32) tak´e knihovny, ve kter´ych jsou uloˇzeny funkce a objekty, obsahuj´ıAPI (Application Programming Interface) dan´ehopodsyst´emu. Napˇr´ıkladke knihovn´ampodsyst´emu Win32 patˇr´ıtak´eknihovny KERNEL32.DLL, USER32.DLL a GDI32.DLL. Tyto tˇrimoduly jsou sice urˇceny pro podsyst´emWin32, ale aby nebylo nutn´e tyto funkce implementovat v kaˇzd´empodsyst´emu zvl´aˇst’, je pˇrekl´ad´anovol´an´ıgrafick´ych funkc´ıjin´ych podsyst´em˚una vol´an´ıv podsyst´emu Win32.  Souˇc´ast´ıpodsyst´emu Win32/Windows je mechanismus virtu´aln´ıch poˇc´ıtaˇc˚u.Aplikace, kter´afyzicky zajiˇst’uje bˇehvirtu´aln´ıch poˇc´ıtaˇc˚upro starˇs´ıaplikace (DOS a Win16), je spouˇstˇenasouborem ntvdm.exe (NT Virtual DOS Machine). Pˇripokusu o spuˇstˇen´ıtˇechto aplikac´ıje nejdˇr´ıvspuˇstˇenanov´ainstance ntvdm.exe s parametrem – n´azvem spouˇstˇen´eDOS ˇciWin16 aplikace s cestou, kter´ajiˇz vnitˇrnˇespust´ı“ ” zadanou aplikaci.  Na 64bitov´emsyst´emu je situace jeˇstˇetrochu sloˇzitˇejˇs´ı.Podsyst´emWindows (CSRSS.EXE) slouˇz´ı ke bˇehu 64bitov´ych aplikac´ı.Pro 32bitov´eaplikace m´amejeˇstˇeuvnitˇrpodsyst´emu Windows speci´aln´ı podsyst´em WoW64 (Windows-on-Windows), kter´yslouˇz´ıjako rozhran´ıpro 32bitov´eaplikace (32bitov´y k´odse t´ımto podsyst´emempˇrekl´ad´ana 64bitov´y,kter´ylze jiˇzspouˇstˇetpˇres CSRSS.EXE). Soubor Win32k.sys je sice technicky ˇc´astpodsyst´emu prostˇred´ıWin32/Windows bˇeˇz´ıc´ıv reˇzimu j´adra(vˇsimnˇetesi, m´apˇr´ıponu typickou pro ovladaˇcebˇeˇz´ıc´ıv reˇzimu j´adra),ale ve skuteˇcnostije vyuˇz´ıv´anvˇsemipodsyst´emy prostˇred´ıvˇcetnˇePOSIXu. Obsahuje implementaci n´ızko´urovˇnov´ych funkc´ı pro uˇzivatelsk´erozhran´ı,vol´arutiny v ovladaˇc´ıch GDI zaˇr´ızen´ı.Je pouˇz´ıv´anvˇsemipodsyst´emy prostˇred´ı pˇredevˇs´ımz d˚uvodu usnadnˇen´ıfunkˇcnostitˇechto podsyst´em˚u(aby kaˇzd´yz nich nemusel m´ıtvlastn´ıˇc´ast v j´adˇre),tedy vol´an´ıjednotliv´ych podsyst´em˚ujsou smˇeremdo j´adrapˇrekl´ad´anana vol´an´ıgenerovan´a podsyst´ememWin32. £ Jak je vidˇetna obr. 2.4, Windows ˇradyNT nejsou pˇr´ısnˇevrstven´ysyst´em,ale kombinuj´ıv´ıce r˚uzn´ych architektur pro sv´er˚uzn´eˇc´asti.Jsou to tyto architektury: 1. J´adroje generov´anoz jedin´ehosouboru (NTOSKRNL.EXE), z toho pohledu jde o monolitick´ej´adro. 2. Vrstven´aarchitektura se uplatˇnujepˇredevˇs´ımv rozdˇelen´ına uˇzivatelsk´yreˇzima reˇzimj´adra. Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 20

3. Modul´arn´ıarchitektura – uzavˇren´emoduly, vnitˇrnˇekompaktn´ı,kter´eposkytuj´ısluˇzby pˇresna- definovan´erozhran´ı, komunikace prob´ıh´avolnˇemezi r˚uzn´ymimoduly, tuto architekturu zde pouˇz´ıv´aexekutiva pˇriˇr´ızen´ıspr´avce proces˚u,spr´avce pamˇeti,I/O syst´emu, ovladaˇc˚u,atd. (mo- dul˚ubˇeˇz´ıc´ıch v privilegovan´emreˇzimu). 4. Architektura klient-server se uplatˇnujev API (Application Programming Interface), coˇzje sada dynamicky linkovan´ych knihoven, zde povaˇzovan´ych za servery, procesy z vyˇsˇs´ıch vrstev (klienti) vyuˇz´ıvaj´ıjejich sluˇzeb(pˇresknihovnu NTDLL.DLL).

£ Jak bˇeˇz´ıprocesy: • Win32 aplikace bˇeˇz´ıvˇsechny ve spoleˇcn´emvirtu´aln´ımstroji, kaˇzd´am´asv˚ujvlastn´ıpamˇet’ov´y prostor (pod tout´eˇzˇc´ıselnouadresou kaˇzd´az tˇechto aplikac´ıvid´ır˚uzn´afyzick´aum´ıstˇen´ıv pamˇeti), • DOS a Win16 aplikace maj´ıkaˇzd´asv˚ujvirtu´aln´ıstroj, v r´amcivirtu´aln´ıhostroje sv˚ujvlastn´ı pamˇet’ov´yprostor.

2.2.4 Windows od verze Vista a Server 2008

Obr´azek 2.5 plat´ıpˇredevˇs´ımpro Windows 10, tˇrebaˇzevˇetˇsinaje platn´ai pro verze od Visty v´yˇse(ale napˇr´ıkladUniversal Apps v niˇzˇs´ıch verz´ıch nejsou). Spr´avce oken DWM existuje uˇzod Windows Vista, ale postupnˇebyl hodnˇepˇreprogramov´an(nejvˇetˇs´ızmˇeny jsou ve Windows 7 a pak ve Windows 10).

 Vista. J´adroWindows Vista bylo oproti sv´ympˇredch˚udc˚umzcela pˇrepracov´ano, i kdyˇzz´akladn´ı principy z˚ust´avaj´ızachov´any. M´avnitˇrn´ıstrukturu modul´arn´ıhotypu. D˚uleˇzitouzmˇenouoproti j´adruWindows XP je ve Vistˇeimplementace IPv6. D´aleprakticky cel´y s´ıt’ov´yz´asobn´ık(podpora s´ıtˇe)byl pˇresunut do reˇzimu j´adra,naproti tomu ˇc´astimplementace grafick´eho rozhran´ıbyla z j´adrapˇresunuta do uˇzivatelsk´ehoprostoru.

Sluˇzby, nˇekter´e Aplikace (Win64, Win32, Metro Apps, Universal Apps) syst´emov´e procesy Grafick´epodsyst´emy: WPF, GDI, GDI+, UWP Spr´avce oken DWM API – knihovny Kernel32, AdvAPI32, User32, Crypto API, ... podsyst´emy pro procesy (CSRSS, WoW, NTVDM), .NET API, .NET Framework NTDLL.DLL (nedokumentovan´eAPI) uˇzivatelsk´yreˇzim reˇzim j´adra Rozhran´ısyst´emov´ych vol´an´ı Spr´ava sluˇzeb Bezpeˇcnost Spr´ava soub. Protokolov´y Spr´ava objekt˚u Registr (SCM) (LSASS) syst´em˚u(IFSM) z´asobn´ık Spr´ava proces˚u Spr´avce Spr´ava pamˇeti Spr´ava I/O Device Models Spr´ava s´ıtˇe a vl´aken konfigurace Ovladaˇce zaˇr´ızen´ı,souborov´ych syst´em˚u, filtry, Kernel (IRQ, pl´anov´an´ıprocesoru, synchronizace) ovladaˇc win32k.sys HAL, Boot Manager BIOS, UEFI Hardware

Obr´azek2.5: Struktura Windows od verze Vista Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 21

J´adroVisty je monolitick´estejnˇejako u XP, ale vnitˇrn´ıstruktura je modul´arnˇejˇs´ı(dalˇs´ıkrok ke struktuˇrej´adramodul´arn´ıhotypu), d˚usledky: • snadnˇejˇs´ırozˇsiˇritelnostj´adra, • stejn´einstalaˇcn´ı m´ediumpro vˇsechny varianty Visty (Home Premium, Ultimate, apod.), pˇri instalaci se podle typu licence rozhodne, kter´avarianta bude nainstalov´ana(jsou instalov´any jen vybran´emoduly), • nejsou rozliˇseny jazykov´evarianty, existuje samostatn´ymodul pro jazyk. Takˇzeinstalaˇcn´ıDVD je stejn´epro vˇsechny varianty Windows Vista urˇcen´epro danou architekturu (32bitovou nebo 64bitovou), na DVD jsou tedy vˇsechny moduly (konkr´etnˇe wim soubory s obrazy mo- dul˚u)pro jakoukoliv variantu. Existuj´ıtak´esamostatn´emoduly, ve kter´ych je uloˇzenopouze jazykov´e nastaven´ı,ostatn´ımoduly jsou jazykovˇenez´avisl´e.D˚usledkem je, ˇzetak´eopravn´ebal´ıˇckymohou b´yt jazykovˇenez´avisl´e (tj. v neanglicky mluv´ıc´ıch zem´ıch nen´ınutn´eˇcekat, aˇzbude publikov´anopravn´y bal´ıˇcekpro danou jazykovou variantu Windows). Bˇeheminstalace je urˇceno,kter´emoduly budou nainstalov´any, a to pˇredevˇs´ım typem licence, kter´ainstalaci pˇr´ısluˇs´ı(napˇr´ıkladVista Home Premium znamen´ajinou vybavenost moduly neˇzVista Ultimate).  Od Visty SP1 byla pˇrid´anapodpora UEFI a syst´emstartuje trochu jin´ymzp˚usobem, s ˇc´ımˇzse sezn´am´ımena cviˇcen´ıch. To vˇsakneznamen´a,ˇzeby tyto syst´emy nemohly b´ytinstalov´any na syst´emech bez UEFI (se star´ymBIOSem), instalaˇcn´ıa bootovac´ıprocesy zvl´adaj´ıoboj´ı.  Struktura j´adravypad´apodobnˇejako u starˇs´ıch verz´ı(dˇel´ıse na kernel a exekutivu plus ovladaˇce a dalˇs´ı moduly), pˇriˇcemˇzvˇetˇsina grafick´ehosubsyst´emu se odstˇehovala do uˇzivatelsk´ehoprostoru (k tomu se dostaneme o nˇecopozdˇeji)a naopak implementace s´ıt’ov´ych protokol˚use objevila v j´adˇre (pˇredt´ımbyla v uˇzivatelsk´emprostoru). Odstatn´ımoduly celkem z˚ustaly, jen se trochu zmˇenilajejich pracovn´ın´aplˇn,napˇr´ıkladpostupnˇepˇribyly dalˇs´ımodely ovladaˇc˚ua spr´ava sluˇzebtak´epracuje trochu jinak. Naopak v uˇzivatelsk´emprostoru je zmˇenhodnˇe. C´astjeˇ opˇetshodn´a(tak´em´amepodsyst´emy pro bˇehproces˚ujako CSRSS, WoW apod. a dokumentovan´ea nedokumentovan´erozhran´ı),ovˇsemgrafick´e prostˇred´ıuˇznestoj´ıjen na klasick´emWinAPI (modul GDI), ale stav´ına WPF.  Windows Presentation Foundation (WPF, tak´eAvalon) je souˇc´ast´ırozhran´ı.NET Framework. Je to grafick´ypodsyst´em,tedy pˇredevˇs´ımeviduje okna a jin´egrafick´ekomponenty vkl´adan´edo oken ve stromov´estruktuˇrezohledˇnuj´ıc´ıjejich vnoˇrov´an´ı,a zajiˇst’uje spr´avuoken (a dalˇs´ıch grafick´ych kom- ponent). Tak´eplocha je povaˇzov´anaza okno, podobnˇer˚uzn´epanely vˇcetnˇehlavn´ıhopanelu plochy. Inspiraci zde Microsoft zˇrejmˇenaˇselu syst´emu X Window z UNIXov´ehosvˇeta. Starˇs´ıaplikace maj´ıgrafick´erozhran´ınaprogramov´anov GDI nebo novˇejˇs´ımGDI+, novˇejˇs´ıaplikace jiˇzpouˇz´ıvaj´ıWPF. Od Visty je tak´eGUI syst´emu naprogramov´anos pouˇzit´ımWPF. Ovˇsemmodul WPF vyuˇz´ıv´asluˇzebknihovny/modulu GDI, takˇzekdyˇzse pod´ıv´amena seznam dynamick´ych knihoven naˇcten´ych kteroukoliv aplikac´ıs GUI, najdeme tam gdi32.dll a pˇr´ıpadnˇedalˇs´ı podobn´esoubory. Srovn´an´ı: https://www.leadtools.com/help/leadtools/v19m/dh/to/differencesbetweengdiandwpf.html   Desktop Window Manager (DWM) je kompozitn´ı spr´avce oken (opˇetpˇripom´ınka terminologie v X Window), kter´yprov´ad´ıvykreslov´an´ıoken, jejichˇzstrukturu spravuje WPF. Zat´ımcoWPF se Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 22 star´ao data, DWM vykresluje, zajiˇst’uje jak´esiprimitivn´ı3D zobrazen´ı(Flip3D, pr˚uhlednost apod.), n´ahledy, animace, reaguje pˇrizmˇenˇerozliˇsen´ımonitoru, atd.  Ve Windows od verze Vista je uplatˇnov´anafunkce ASLR (Address Space Load Randomization) – knihovny se pˇrinaˇc´ıt´an´ıdo pamˇeti(po vyˇz´ad´an´ınˇekter´ymprocesem) neukl´adaj´ıvˇzdyna stejn´em´ısto v pamˇetijako v XP, ale na n´ahodnˇezvolenou adresu. Tato funkce by mˇelab´ytobranou proti zneuˇzit´ı pˇreteˇcen´ıpamˇeti(hacker nedok´aˇzeodhadnout, na kterou adresu um´ıstitk´od,aby po pˇreteˇcen´ıpamˇeti byl na vhodn´em“ m´ıstˇe).Ovˇsemtato ochrana byla jiˇzd´avnoprolomena, jen jej´ıobch´azen´ıje ˇcasovˇe ” n´aroˇcn´e.

 Windows 7. V pˇr´ıpadˇeWindows 7 nebylo v j´adˇreprovedeno moc zmˇenco se t´yˇcefunkˇcnosti, vˇetˇsinazmˇenje ve vnitˇrn´ıstruktuˇrej´adra,v ˇr´ızen´ıa provozu grafick´eho rozhran´ı,a tak´eve zp˚usobu vyuˇz´ıv´an´ıa nastaven´ısyst´emu.  Pro j´adrobyl pouˇzitkoncept MinWin – co nejmenˇs´ız´akladn´ıj´adro(t´emˇeˇrmikroj´adro),ostatn´ı ˇc´asti ˇsirˇs´ıhoj´adra“ (tj. toho, co bˇeˇz´ıv privilegovan´emreˇzimu) jsou moduly, tedy opˇetdalˇs´ıkrok ” k modul´arnosti j´adra.Do MinWin patˇr´ıpˇredevˇs´ımkernel (tvrd´ej´adro).MinWin je samostatnˇejˇs´ıneˇz p˚uvodn´ıˇc´astj´adra,d˚usledkem je rychlejˇs´ıstart syst´emu a celkovˇelepˇs´ıodezva (po naˇcten´ıMinWin je jiˇzmoˇzn´epouˇz´ıvat v´ıceneˇzjedno j´adroprocesoru, tedy dalˇs´ıˇc´astisyst´emu mohou b´ytnaˇc´ıt´any paralelnˇe). D´alezde m˚uˇzemevidˇeturˇcit´ezmˇeny v pouˇz´ıv´an´ıAPI, vyuˇz´ıv´an´ıvirtu´aln´ıch DLL knihoven. Re´alnˇe bˇeˇz´ıv´yraznˇem´enˇesluˇzebneˇzve Windows Vista (d´ıkyˇcemuˇztak´ebˇeˇz´ısyst´emsviˇznˇeji,je celkem vhodn´y i pro netbooky) a nastaven´ıjsou celkovˇepˇrizp˚usobena nov´ymtyp˚umhardwaru (napˇr´ıklad Windows 7 dok´aˇz´ıpˇriinstalaci detekovat SSD disk a pˇrizp˚usobittomu nˇekter´anastaven´ıjako napˇr´ıklad vypnut´ı sluˇzby pro defragmentaci a ´uprava funkce SuperFetch). Sluˇzby spuˇstˇen´epˇribˇehu syst´emu mohou b´ytdoˇcasnˇezastaveny, pokud SCM usoud´ı,ˇzezrovna nejsou zapotˇreb´ı.Zmˇeny v grafick´emrozhran´ı pˇredpokl´ad´amnen´ıtˇrebarozv´adˇet.  Ve Windows 7 pˇriˇselMicrosoft se zcela nov´ymˇreˇsen´ım probl´em˚us nekompatibilitou aplikac´ı. U vybran´ych verz´ılze pouˇz´ıtfunkci XP Mode pro provoz starˇs´ıch aplikac´ı.

 Windows 8, 10. Nˇekter´esouˇc´astij´adrabyly pˇrepracov´any, komunikaˇcn´ı struktura se stala sloˇzitˇejˇs´ı(zejm´enaz d˚uvodu podpory DRM u multim´edi´ı),nicm´enˇenic z toho na naˇsemobr´azkunen´ı pˇr´ımovidˇet. Ve Windows 8 se objevily Metro Apps, ve Windows 10 pak Universal Apps. Tak´epro nˇebylo tˇreba vytvoˇritvlastn´ıgrafick´ysubsyst´em(nesouvis´ıs .NET, takˇzeˇz´adn´eWPF) – pro Metro Apps to bylo WinRT API, pro jejich n´astupce Univesal Apps to je Universal Windows Platform (UWP). V obou pˇr´ıpadech jde vlastnˇeo tot´eˇz(jen se to jinak jmenuje) – Metro Apps jsou urˇceny pro r˚uzn´ehardwa- rov´eplatformy (desktopovou i mobiln´ıRT), Univesal Apps takt´eˇzpro r˚uzn´ehardwarov´eplatformy (desktopovou, mobiln´ı,XBox, atd.). Do j´adraWindows 10 se dokonce nastˇehoval Windows subsystem for Linux, kter´ym´aumoˇznit spouˇstˇen´ıaplikac´ıprogramovan´ych pro Linux. Hlavn´ızmˇeny jsou opˇetv uˇzivatelsk´emprostoru a grafick´emrozhran´ı,vˇcetnˇevybavenosti r˚uzn´ymi n´astroji (uˇzivatel´ezaznamenali pˇredevˇs´ımnov´yn´astroj Nastaven´ı, zmˇeny ve spr´avˇeaktualizac´ı,nov´e aplikace ˇcinaopak odstranˇen´ınˇekter´ych aplikac´ınebo nahrazen´ıuniverz´aln´ımi,novou politiku ve sbˇeru a spr´avˇeosobn´ıch informac´ı,vˇetˇs´ıtlak na vyuˇz´ıv´an´ıcloudu i vˇcetnˇeautentizace, atd.). Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 23

 Serverov´eedice Windows. Serverov´eedice Windows pouˇz´ıvaj´ıtot´eˇzj´adrojako desktopov´e edice, jen je jinak nakonfigurov´ano,v registru maj´ınˇekter´epoloˇzkyjinou hodnotu (zejm´enapoloˇzky t´ykaj´ıc´ıse s´ıtˇe)a m´amek dispozici dalˇs´ın´astroje. Pˇr´ımoserverov´ymiedicemi se v tomto pˇredmˇetu nebudeme zab´yvat (jen okrajovˇe).

Verze j´adra Serverov´ysyst´em Desktopov´ysyst´em NT 6.0 Windows Server 2008 Windows Vista NT 6.1 Windows Server 2008 R2 Windows 7 NT 6.2 Windows Server 2012 Windows 8 NT 6.3 Windows Server 2012 R2 Windows 8.1 NT 10.0 Windows Server 2016 Windows 10

Tabulka 2.1: Serverov´ea desktopov´esyst´emy s odpov´ıdaj´ıc´ımij´adry

V tabulce 2.1 vid´ımeoznaˇcen´ıverze j´adraa oznaˇcen´ıverz´ıserverov´ych a desktopov´ych Windows pouˇz´ıvaj´ıc´ıch pˇr´ısluˇsn´ej´adro.

2.3 Syst´emy UNIXov´ehotypu

VˇetˇsinaUNIXov´ych syst´em˚um´ahodnˇepodobnou strukturu (kromˇetˇech, kter´ebyly upraveny pro real- time provoz). J´adrobˇeˇz´ıv privilegovan´emreˇzimu (reˇzimu j´adra),je ˇcastotvoˇrenojedin´ymsouborem a vyuˇz´ıv´ajedin´ysouvisl´yadresov´yprostor (proto je naz´yv´anomonolitick´e,i kdyˇzjeho vnitˇrn´ıstruktura je pˇresnˇerozvrˇzena).Napˇr´ıkladu Linuxu je to soubor s n´azvem podobn´ym /boot/vmlinuz. UNIXov´esyst´emy jsou v´ıceprocesorov´ev´ıceuˇzivatelsk´emultitaskov´euniverz´aln´ıs´ıt’ov´esyst´emy jiˇz od sv´ehopoˇc´atku. Na to byl br´anzˇreteluˇzpˇrinavrhov´an´ıjejich struktury, proto za dlouh´adesetilet´ı existence UNIX˚uani nebylo tˇrebaji v´yraznˇejimˇenit.Tato struktura tak´ezˇrejmˇeposlouˇzilajako jeden ze vzor˚upˇrin´avrhu struktury Windows ˇradyNT.

2.3.1 Klasick´yUNIX

N´akresarchitektury UNIXov´ych syst´em˚uje na obr´azku 2.6. J´adrosyst´emu se skl´ad´aze dvou oddˇelen´ych ˇc´ast´ı– z´avisl´ena konkr´etn´ıarchitektuˇre(HAL – Hardware Abstraction Layer) a kernelu nez´avisl´eho na hardwaru. J´adroje typicky monolitick´e(naˇc´ıt´ase z jednoho souboru a m´asouvisl´yadresn´ıprostor), n´azevpˇr´ısluˇsn´ehosouboru z´avis´ına dan´emsyst´emu.  Vrstva HAL (Hardware Abstraction Layer) slouˇz´ı jako z´akladn´ı rozhran´ı k zaˇr´ızen´ım, kter´eje mimo jin´evyuˇz´ıv´anoovladaˇcike komunikaci se zaˇr´ızen´ımi.Hlavn´ım´ukolem HAL je skr´yttechnick´e detaily zaˇr´ızen´ıpatˇr´ıc´ıch do r˚uzn´ych tˇr´ıd(skupin s charakteristick´ymivlastnostmi). HAL zajiˇst’uje naˇc´ıt´an´ıovladaˇc˚u,vytv´aˇren´ıa odstraˇnov´an´ıpˇr´ıpojn´ych bod˚upro blokov´a(pamˇet’ov´a)zaˇr´ızen´ı,a tak´e provozov´an´ıabstraktn´ıhomodelu hardwaru. Modul HAL existoval ve vˇsech starˇs´ıch UNIXov´ych syst´emech, v nˇekter´ych se vˇsakod jeho pouˇz´ı- v´an´ı upouˇst´ı – ve vˇetˇsinˇedistribuc´ı Linuxu a ve FreeBSD roli HAL pˇrevzalydalˇs´ı moduly j´adra, pˇredevˇs´ımmodul UDEV nebo obdobn´y.  D˚uleˇzit´ymimoduly j´adra jsou ovladaˇce. Existuj´ıovladaˇceblokov´ych a znakov´ych zaˇr´ızen´ıvˇcetnˇe s´ıt’ov´ych a virtu´aln´ıch zaˇr´ızen´ı,a dalˇs´ıspecializovan´eovladaˇce.Tak´esouborov´esyst´emy jsou imple- mentov´any jako ovladaˇce. Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 24

d´emoni, Procesy, aplikace sluˇzby bash, X Window System dalˇs´ıknihovny uˇzivatelsk´yreˇzim reˇzim j´adra Rozhran´ısyst´emov´ych vol´an´ıkompatibiln´ıs POSIX/SUS, r˚uzn´asyst´emov´avol´an´ı (napˇr´ıklad open, ioctl, write, mmap, close, stat, . . . ) Spr´ava proces˚u Implementace Podsyst´emy j´adra Bezpeˇcnostn´ımoduly a vl´aken socket˚u Synchronizace, ’ VFS, ovladaˇce Virtu´aln´ıpamˇet, Protokolov´yz´asobn´ık komunikace (IPC) str´ankov´an´ı souborov´ych syst´em˚u Pl´anov´an´ıprocesoru, Ovladaˇce znakov´ych a blokov´ych zaˇr´ızen´ı, Spr´ava pamˇeti spr´ava IRQ dalˇs´ıovladaˇce HAL a dalˇs´ımoduly pro pr´aci s hardwarem (UDEV apod.) BIOS, UEFI Hardware

Obr´azek2.6: Struktura operaˇcn´ıch syst´em˚uUNIXov´ehotypu

 Souborov´ysyst´em je v UNIXov´ych syst´emech vlastnˇerozhran´ı. Castoˇ se jedn´ao rozhran´ımezi ovladaˇcemvnˇejˇs´ıhopamˇet’ov´ehom´ediaa vyˇsˇs´ımivrstvami j´adra,ale ve skuteˇcnostisouborov´ysyst´em v˚ubec nemus´ıs pamˇet’ov´ymim´ediisouviset. Protoˇzev UNIXov´ych syst´emech plat´ı,ˇze vˇsechno je soubor“, jsou zde nejen souborov´esyst´emy ” pro vnˇejˇs´ıpamˇet’ov´am´edia,ale i dalˇs´ı,abstraktn´ı,zprostˇredkuj´ıc´ıpˇr´ıstupk informac´ımo moment´aln´ım stavu syst´emu, konfiguraci apod. (napˇr.v Linuxu souborov´ysyst´em proc) nebo sdruˇzuj´ıc´ıjin´esoubo- rov´esyst´emy ˇcipˇredstavuj´ıc´ıˇc´astjin´ehosouborov´ehosyst´emu. Souborov´esyst´emy, kter´enen´aleˇzej´ı k ˇz´adn´emu konkr´etn´ımu pamˇet’ov´emu m´ediu,ale pˇrestos nimi takov´ymzp˚usobem zach´az´ıme(pracu- jeme pˇresnˇese soubory nebo t´ım,co jako soubory vypad´a),naz´yv´ame virtu´aln´ısouborov´esyst´emy.  VFS (Virtual File System, virtu´aln´ısouborov´ysyst´em)je nejd˚uleˇzitˇejˇs´ımvirtu´aln´ımsouborov´ym syst´emem. Pˇredstavuje rozhran´ı pro podobn´yzp˚usobpˇr´ıstupu k r˚uzn´ymsouborov´ymsyst´em˚um, vˇsechny souborov´esyst´emy sdruˇzujev jedin´e stromov´e“ struktuˇre.Pokud uˇzivatel chce s konkr´etn´ım ” souborov´ymsyst´emem pracovat, pˇripoj´ıho na stanoven´em´ıstodo t´etostruktury a t´ımho zpˇr´ıstupn´ı (pˇripojov´an´ı je obvykle automatizov´ano,uˇzivatel se o nˇenemus´ı starat). D˚uleˇzitoufunkc´ı VFS je zajiˇstˇen´ı stejn´ehozp˚usobuzach´azen´ı s daty, at’ uˇzse nach´azej´ı v jak´emkoliv souborov´emsyst´emu, tedy uˇzivatel se nemus´ıstarat o fyzick´eum´ıstˇen´ısouboru, atributy (napˇr.nastaven´ıˇcasu posledn´ıho pˇr´ıstupuk souboru), konvence pro pr´acise soubory (jak sdˇelitsouborov´emu syst´emu, ˇzechci otevˇr´ıt urˇcit´ysoubor, apod.). FUSE 5 (FileSystem in User Space) je mechanismus, kter´yumoˇzˇnujebˇehsouborov´ych syst´em˚u v uˇzivatelsk´emprostoru (bˇeˇzn´esouborov´esyst´emy musej´ı b´ytsouˇc´ast´ı j´adra).Spoˇc´ıv´av rozdˇelen´ı souborov´ehosyst´emu do dvou ˇc´ast´ı– spodn´ıˇc´ast,modul FUSE, je pro vˇsechny souborov´esyst´emy tohoto typu spoleˇcn´aa bˇeˇz´ıv reˇzimu j´adra.Horn´ıˇc´astbˇeˇz´ıv uˇzivatelsk´emreˇzimu a vyuˇz´ıv´asluˇzeb modulu FUSE. T´ımto zp˚usobem je v souˇcasn´edobˇeimplementov´anomnoho souborov´ych syst´em˚u (napˇr´ıkladntfs-3g a ntfsmount pro provoz NTFS, souborov´esyst´emy pro kompresi a ˇsifrov´an´ıdat, multimedi´aln´ırozhran´ı,sledov´an´ısyst´emu, spr´ava verz´ı,atd.). 5http://fuse.sourceforge.net/ Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 25

 Implementaci s´ıt’ov´ehoprotokolov´ehoz´asobn´ıku tak´enajdeme v j´adˇre(pˇresnˇejiprotokolov´ych z´asobn´ık˚u,protoˇzenemus´ıj´ıtjen o TCP/IP), a tak´eimplementaci socket˚u.  Podsyst´em˚u(subsyst´em˚u)j´adra existuje pomˇernˇehodnˇe,kaˇzd´ym´asvou specifickou funkci, napˇr´ı- klad ˇsifrovac´ıpodsyst´em, multimedi´aln´ıpodsyst´em (sluˇzby pro pr´acise zvukem a videem), podsyst´em IPC (mechanismy komunikace mezi procesy). Bezpeˇcnostn´ımoduly jsou vlastnˇetak´epodsyst´emy. Z´aleˇz´ına konkr´etn´ımsyst´emu, kter´ebezpeˇc- nostn´ımoduly jsou naˇcteny, obvykle to b´yv´afirewall (napˇr´ıkladv Linuxu NetFilter), d´alemodul pro zv´yˇsen´ızabezpeˇcen´ısyst´emu (v Linuxu ˇcastoSELinux), AppArmor a dalˇs´ı.  Rozhran´ısyst´emov´ychvol´an´ı je rozhran´ımezi j´adrema ˇc´ımkoliv, co m˚uˇzepˇr´ımoovlivnit uˇzivatel (programy, pˇr´ıkazy shellu, skripty). S touto vrstvou lze komunikovat pˇresknihovny obsahuj´ıc´ıdefinice API funkc´ı (Application Programming Interface). Hlavn´ı´ulohouje zajiˇstˇen´ıbezpeˇcnosti,znemoˇznˇen´ı z´asahu uˇzivatele do j´adra. Syst´emov´avol´an´ı jsou vlastnˇefunkce, kter´ymilze komunikovat s j´adrem.  V syst´emu existuje velk´emnoˇzstv´ıknihoven, z nichˇzv Linuxu je nejd˚uleˇzitˇejˇs´ıknihovna glibc (GNU C Library), v dalˇs´ıch UNIXov´ych syst´emech je to libc. Tato knihovna zprostˇredkov´av´akomuni- kaci proces˚uz uˇzivatelsk´eho prostoru s rozhran´ımsyst´emov´ych vol´an´ı,tedy procesy zas´ılaj´ısyst´emov´a vol´an´ıpr´avˇet´etoknihovnˇe.  Shell je rozhran´ıpro komunikaci s uˇzivatelem. UNIXov´esyst´emy obvykle nab´ızej´ıv´ıcer˚uzn´ych shell˚u,v Linuxu m´amevˇetˇsinou bash. Komunikace prob´ıh´av textov´eformˇe(uˇzivatel zad´av´apˇr´ıkazy, syst´emreaguje textov´ymiv´ypisy),ale souˇcasn´eUNIXov´esyst´emy vˇetˇsinoumaj´ıtak´evelmi propra- covan´egrafick´erozhran´ı(obvykle zaloˇzen´ena X Window) a bˇeˇzn´yuˇzivatel s textov´ymshellem ani nemus´ıpˇrij´ıtdo styku.

2.3.2 Podrobnˇejik j´adruLinuxu

Na obr´azku 2.7 je podrobnˇejˇs´ı obr´azeklinuxov´ehoj´adra.Vˇsimnˇetesi, ˇzezde chyb´ı vrstva HAL, v novˇejˇs´ıch verz´ıch Linuxu ji opravdu nenajdete. Jej´ıfunkce pˇrevzalyjin´emoduly j´adra,pˇredevˇs´ım UDEV.

Rozhran´ısyst´emovych´ vol´an´ıkompatibiln´ıs POSIX/SUS VFS, soubory, Sockety, pˇr´ıstup /proc, /dev Znakov´a Procesy a vl´akna Virtu´aln´ıpamˇet’ adres´aˇre k protokol ˚um syscalls zaˇr´ızen´ı Synchronizace, Device Model Bezpeˇcnostn´ı Swap S´ıt’ov´a´uloziˇstˇeˇ komunikace (reprez. zaˇr´ızen´ı) podsyst´emy Pl´anov´an´ı Mapov´an´ı Souborov´e Podsyst´emy pro S´ıt’ov´eprotokoly procesoru pamˇeti syst´emy komunikaci s uzivatelemˇ

Spr´ava pˇreruˇsen´ı Logick´apamˇet’, Spr´ava Virtu´aln´ıs´ıt’ov´a Abstraktn´ızaˇr´ızen´ı, a sys. vol´an´ı str´ankov´an´ı blokovych´ zaˇr´ızen´ı ovladaˇce HID Specifick´epro Spr´ava fyzick´e zaˇr´ızen´ı, ˇradiˇce Ovladaˇce s´ıt’. Ovladaˇce perifern´ıch HW architekturu pamˇeti blok. zaˇr´ızen´ı rozhran´ı zaˇr´ızen´ıa sbˇernic BIOS, UEFI

Procesor Operaˇcn´ıpamˇet’ Vnˇejˇs´ıpamˇeti S´ıt’ov´erozhran´ı Periferie, I/O

Obr´azek2.7: J´adroLinuxu v novˇejˇs´ıch verz´ıch Kapitola 2 Struktura operacnˇ ´ıch system´ ˚u 26

Tento obr´azekje c´ılenˇevytvoˇrentak, aby ve sloupc´ıch byly nad sebou ty souˇc´asti,kter´espolu v´yznamovˇesouvisej´ı,i vˇcetnˇevazby na konkr´etn´ıkus hardwaru. Nˇekter´esouˇc´astisouvisej´ıse dvˇema hardwarov´ymikomponentami, napˇr´ıkladswap (odkl´adac´ıoblast) souvis´ıs operaˇcn´ıpamˇet´ı(protoˇze str´ankyz n´ıse odkl´adaj´ı)a z´aroveˇns pamˇet’ov´ymim´edii(protoˇzena ta se odkl´ad´a).S´ıt’ov´a´uloˇziˇstˇe souvisej´ıse s´ıt´ı(protoˇzese k ni pˇristupujepˇress´ıt’) a z´aroveˇns pamˇet’ov´ymim´edii(protoˇzes nimi sd´ıl´ı zp˚usobzach´azen´ı).Modely zaˇr´ızen´ıse vztahuj´ıjak k s´ıt’ov´ymrozhran´ım,tak i k dalˇs´ımI/O zaˇr´ızen´ım, protoˇzejejich strukturu popisuj´ı.

Dalˇs´ıinformace:  Velmi zaj´ımavou a podrobnou mapu j´adra Linuxu najdeme na adrese http://www.makelinux.net/kernel map (mapu zvˇetˇs´ımerolovac´ımkoleˇckem na myˇsi)nebo http://www.makelinux.net/kernel map poster (souˇc´ast´ıstr´ankyje lupa“). ”



2.4 Hardwarov´ezabezpeˇcen´ısyst´emu

 Modern´ıoperaˇcn´ısyst´emy vyuˇz´ıvaj´ıhardwarovou ochranu prostˇredk˚u.Na procesorech rodiny x86 je tato ochrana implementov´anave formˇeˇctyˇrokruh˚u– Ring 0, Ring 1, Ring 2 a Ring 3. Kaˇzd´yproces bˇeˇz´ıv nˇekter´emz tˇechto okruh˚u,coˇzurˇcujejeho moˇznostipˇr´ıstupuk chr´anˇen´ym prostˇredk˚um,coˇzje pˇredevˇs´ımpamˇet’, I/O porty, obecnˇepˇr´ım´ypˇr´ıstupk hardwaru a d´alepouˇz´ıv´an´ı nˇekter´ych strojov´ych instrukc´ı. Vˇetˇsinaoperaˇcn´ıch syst´em˚upouˇz´ıv´apouze dva okruhy – Ring 0 pro j´adrosyst´emu a Ring 3 pro ostatn´ıprocesy. Ring 0 pˇredstavuje reˇzimj´adra(privilegovan´yreˇzim)a Ring 3 uˇzivatelsk´yreˇzim.Na n´akresech architektur operaˇcn´ıch syst´em˚uv pˇredchoz´ıch sekc´ıch t´etokapitoly jsou oba reˇzimy obvykle barevnˇeodliˇseny (v barv´ach podle obr´azku 2.8). Z v´yˇseuveden´ehovypl´yv´a,ˇzeRing 1 a Ring 2 obvykle nejsou pouˇz´ıv´any. Pˇrestoje lze vyuˇz´ıtpro dalˇs´ırozˇsk´alov´an´ıpˇr´ıstupov´ych opr´avnˇen´ıa napˇr´ıklads Ring 1 se setk´ameu nˇekter´ych virtualizaˇcn´ıch technik, zejm´enana serverech.

Ring 3 Ring 2 Ring 1

Ring 0

Obr´azek2.8: Hardwarov´aochrana prostˇredk˚u Kapitola 3 Spr´ava pamˇeti

Pod pojmem pamˇet’ budeme rozumˇetvnitˇrn´ı (operaˇcn´ı) pamˇet’. V t´etokapitole probereme r˚uzn´e metody, kter´ese pouˇz´ıvaj´ı pˇrispr´avˇepamˇeti,a uk´aˇzemesi, jak jsou implementov´any v nˇekter´ych operaˇcn´ıch syst´emech.

3.1 Modul spr´avce pamˇeti

 Modul spr´avce pamˇetije v operaˇcn´ıch syst´emech vˇetˇsinousouˇc´ast´ıj´adra.Jeho implementace m˚uˇze b´ytr˚uzn´a,ale funkce jsou obvykle podobn´e: 1. Udrˇzujeinformace o pamˇeti(kter´aˇc´astje voln´a,kter´aˇc´astje pˇridˇelena,kter´emu procesu je pˇridˇelena,atd.). 2. Pˇridˇelujepamˇet’ proces˚umna jejich ˇz´adost. 3. Pamˇet’, kterou procesy uvoln´ı,zaˇrazujek voln´epamˇeti. 4. Pokud je to nutn´e,odeb´ır´apamˇet’ proces˚um. 5. Jestliˇzeje moˇzn´edetekovat pˇr´ıpady, kdy proces ukonˇc´ısvou ˇcinnostbez uvolnˇen´ıpamˇeti(napˇr´ı- klad pˇrichybˇev programu nebo pˇrin´asiln´emukonˇcen´ı),pak modul tuto pamˇet’ uvoln´ıs´am. 6. Pokud to dovoluje ´uroveˇnhardwarov´ehovybaven´ı(pˇredevˇs´ımprocesor), m˚uˇzezajiˇst’ovat ochranu pamˇeti,tedy nedovol´ıprocesu pˇr´ıstupdo pamˇet’ov´ehoprostoru jin´ehoprocesu nebo dokonce do pamˇet’ov´ehoprostoru operaˇcn´ıho syst´emu. Ochrana pamˇetije v souˇcasn´ych bˇeˇzn´ych operaˇcn´ıch syst´emech zajiˇst’ov´anahardwarovˇetak, jak je pops´anov kapitole 2.4 na stranˇe 26. Fyzicky je operaˇcn´ıpamˇet’ um´ıstˇenana z´akladn´ıdesce, ale tak´ena rozˇsiˇruj´ıc´ıch kart´ach (desk´ach, adapt´erech). Napˇr´ıkladˇc´astoperaˇcn´ı pamˇeti,kterou naz´yv´ame videopamˇet’, se nach´az´ı na grafick´e kartˇe,ale pˇrestoje souˇc´ast´ıoperaˇcn´ıpamˇetia v nˇekter´ych operaˇcn´ıch syst´emech maj´ıprocesy do t´eto pamˇetipˇr´ım´ypˇr´ıstup (ˇr´ıd´ıtak pˇr´ımo,co se m´azobrazit).  Souhrn tˇechto um´ıstˇen´ıoperaˇcn´ıpamˇetiv r˚uzn´ych ˇc´astech hardwaru v´ypoˇcetn´ıho syst´emu je tˇreba utˇr´ıditdo posloupnosti, kde m´akaˇzd´aˇc´astsv´ejednoznaˇcn´eum´ıstˇen´ı,tedy zav´estmetriku – adresy. Proces k pamˇetipˇristupujepˇresadresy. Adresa m´ıstav pamˇetije poˇcetByt˚uk tomuto m´ıstu od zaˇc´atkut´etoposloupnosti. Prvn´ıByte m´aadresu 0 (pˇredn´ımˇz´adn´yByte nen´ı),druh´yByte m´a adresu 1, atd. Takovou adresu naz´yv´ame absolutn´ıadresa.

27 Kapitola 3 Sprava´ pametiˇ 28

Relativn´ıadresa se nevztahuje k poˇc´atkupamˇeti,ale k urˇcit´eabsolutn´ıadrese (to b´yv´aobvykle zaˇc´atekpamˇet’ov´ehobloku nebo adresov´ehoprostoru procesu) a je to tedy poˇcetByt˚uod t´etoabsolutn´ı adresy.  Kaˇzd´yproces m´apˇridˇelenpamˇet’ov´yprostor v rozsahu urˇcit´ych adres, proto hovoˇr´ımeo adresov´em prostoru. Rozliˇsujeme • fyzick´yadresov´yprostor – adresov´yprostor, kter´yje fyzicky k dispozici ve v´ypoˇcetn´ımsyst´emu, • logick´yadresov´yprostor – adresov´yprostor, kter´ymaj´ık dispozici procesy (kaˇzd´yproces vid´ı“ ” jen sv˚ujlogick´yadresov´yprostor). Logick´yadresov´yprostor m˚uˇzeb´ytmenˇs´ınebo roven fyzick´emu, ale s rostouc´ımipotˇrebamiproces˚u nemus´ıpro jejich pr´acirozsah fyzick´ehoadresov´ehoprostoru dostaˇcovat. Proto m˚uˇzeb´ytoperaˇcn´ı pamˇet’ nastavov´ana“ prostorem na vnˇejˇs´ımpamˇet’ov´emm´ediu(obvykle pevn´em disku), pak je logick´y ” adresov´yprostor vˇetˇs´ıneˇzfyzick´y. Pokud je moˇzn´e,aby logick´yadresov´yprostor byl vˇetˇs´ıneˇzfyzick´y,pak hovoˇr´ımeo virtu´aln´ıch metod´achpˇridˇelov´an´ıpamˇeti.

3.2 Re´aln´emetody pˇridˇelov´an´ıpamˇeti

Zde probereme metody pouˇz´ıvan´ev pˇr´ıpadˇe,ˇze logick´yadresov´yprostor nepˇrekraˇcujefyzick´y,tedy fy- zick´avnitˇrn´ıpamˇet’ dostaˇcujepotˇreb´amproces˚u,a moˇznostiˇreˇsen´ıprobl´em˚uvznikaj´ıc´ıch pˇripouˇz´ıv´an´ı tˇechto metod.

3.2.1 Pˇridˇelen´ıjedn´esouvisl´eoblasti pamˇeti

£ Tato jednoduch´ametoda spoˇc´ıv´av pˇridˇelen´ıveˇsker´ehoadresov´ehoprostoru procesu kromˇeoblasti operaˇcn´ıhosyst´emu. Pamˇet’ je rozdˇelenana tˇriˇc´asti:pamˇet’ vyhrazenou pro operaˇcn´ısyst´em,pamˇet’ vyuˇz´ıvanou procesem a nevyuˇzitoupamˇet’. Pro ochranu pamˇetije vhodn´ealespoˇnpouˇz´ıvat mezn´ıregistr, ve kter´emje uloˇzenaadresa zaˇc´atku pamˇetiprocesu (tedy oddˇelujepamˇet’ operaˇcn´ıhosyst´emu od pamˇetiprocesu), tento registr pak pro- ces nesm´ıpˇrekroˇcit.Pokud proces (vl´akno)ˇz´ad´ao pˇr´ıstupk urˇcit´eadrese, porovn´ametuto adresu s registrem, a jestli je adresa vˇetˇs´ı,pˇr´ıstuppovol´ıme. }

Voln´a,nevyuˇzit´a pamˇet’ Pamˇet’, kterou m´a

{z proces k dispozici Pamˇet’ pouˇz´ıvan´a Mezn´ı procesem registr | ⇒ 2 Pamˇet’ operaˇcn´ıhosyst´emu $000000 Obr´azek3.1: Pˇridˇelen´ıjedn´esouvisl´eoblasti pamˇeti Kapitola 3 Sprava´ pametiˇ 29

V´yhody: • jednoduchost spr´avy, • nevelk´en´aroky na technick´evybaven´ı(funguje to prakticky vˇsude). Nev´yhody: • nemoˇznostm´ıtspuˇstˇenov´ıceproces˚unajednou (jednoprogramov´ysyst´em), • velk´aˇc´astpamˇetim˚uˇzez˚ustatnevyuˇzit´a,pokud ji jeden bˇeˇz´ıc´ıproces nepotˇrebuje,tak´eostatn´ı prostˇredkyv´ypoˇcetn´ıhosyst´emu jsou nedostateˇcnˇevyuˇz´ıv´any (procesor). S m´ırn´ym zv´yˇsen´ımsloˇzitostilze i v tomto pˇr´ıpadˇepouˇz´ıvat omezen´ybˇehv´ıceproces˚u(v´ıceprogramov´y syst´em,ale ne multitaskov´y),a to tak, ˇzekdyˇzm´ab´ytspuˇstˇendalˇs´ıproces, cel´apamˇet’ od mezn´ıho registru (pˇridˇelen´ap˚uvodn´ımu procesu) se uloˇz´ıdo doˇcasn´ehosouboru na pevn´ydisk, pak je pˇridˇelena novˇespuˇstˇen´emu procesu a aˇzpo jeho ukonˇcen´ıje obnovena do stavu pˇred z´alohov´an´ım“ pˇrispouˇstˇen´ı ” dalˇs´ıhoprocesu. Jestliˇzeje takto postupnˇespuˇstˇenov´ıceproces˚u,m˚uˇzeb´yt pro organizaci odloˇzen´ych proces˚upouˇzitprincip z´asobn´ıku. Tuto metodu pouˇz´ıvaly operaˇcn´ısyst´emy, kter´enebyly multitaskov´e(napˇr´ıklad CP/M), pˇr´ıpadnˇe ji m˚uˇzemepouˇz´ıtpˇriprogramov´an´ısloˇzitˇejˇs´ıaplikace, kde chceme rozdˇelitvlastn´ıadresov´yprostor (tˇrebamezi v´ıcevl´aken).

3.2.2 Pˇridˇelov´an´ıblok˚upevn´evelikosti

£ Spr´avce pamˇetipˇrispuˇstˇen´ı operaˇcn´ıho syst´emu rozdˇel´ı operaˇcn´ı pamˇet’ na bloky pevn´ed´elky a ty pak pˇridˇelujeproces˚um.Procesu je pˇrijeho spuˇstˇen´ıpˇridˇelenpamˇet’ov´yblok, adresov´eprostory jednotliv´ych proces˚ujsou tedy oddˇeleny.

Mezn´ı Voln´yblok registr 2 ⇒ } Mezn´ı2 Pamˇet’ pˇridˇelen´a {z registr 1 Pouˇz´ıv´aproces 2 procesu 2 | ⇒ } 2 Pamˇet’ pˇridˇelen´a Pouˇz´ıv´aproces 1 {z procesu 1 |

Pamˇet’ operaˇcn´ıhosyst´emu $000000 Obr´azek3.2: Pˇridˇelov´an´ıblok˚upevn´evelikosti (bˇeˇz´ıproces 2)

Bloky mohou b´ytbud’ vˇsechny stejnˇevelk´enebo r˚uzn´evelikosti. Druh´amoˇznostznamen´atrochu sloˇzitˇejˇs´ıspr´avu,ale umoˇzˇnujel´epe pracovat s pamˇet´ı– procesu pˇridˇelujemetakov´yblok, kter´yje voln´ya jeho velikost nejv´ıceodpov´ıd´apotˇreb´amprocesu (ale je z´aroveˇnvˇetˇs´ınebo rovna poˇzadovan´e velikosti). Protoˇzepoˇcetblok˚uje konstantn´ıpo celou dobu bˇehu syst´emu, je moˇzn´eevidovat bloky v tabulce (statick´empoli z´aznam˚u).Kaˇzd´yblok m´ajeden ˇr´adektabulky, m˚uˇzeb´ytzde uloˇzenapoˇc´ateˇcn´ıadresa bloku, d´elka bloku (pokud maj´ır˚uznouvelikost) a vlastn´ık(proces) nebo informace ˇzejde o voln´yblok. Kapitola 3 Sprava´ pametiˇ 30

 Pozn´amka: Proˇczde p´ıˇseme o statick´em poli? Protoˇzev j´adˇre(nebo kdekoliv, kde m´amed˚uleˇzit´edatov´estruk- tury, ke kter´ympˇr´ıpadnˇem˚uˇzepˇristupovat v´ıcmodul˚u)nelze pouˇz´ıvat nic dynamick´eho– dynamick´e struktury nelze chr´anituzamknut´ım. 

Metoda umoˇzˇnujeimplementaci multitaskingu za pˇredpokladu, ˇze je pouˇzitavhodn´aochrana pamˇeti (napˇr´ıkladdva mezn´ıregistry pro nejniˇzˇs´ıa nejvyˇsˇs´ıadresu pr´avˇebˇeˇz´ıc´ıhoprocesu). V´yhody: • jednoduchost spr´avy, • moˇznostimplementace multitaskingu. Nev´yhody: • proces poˇzaduj´ıc´ıv´ıcepamˇeti,neˇzje d´elka nejvˇetˇs´ıhovoln´ehobloku, nelze spustit, • velk´apravdˇepodobnost fragmentace. Tento typ adresov´an´ıjiˇzdnes nen´ımoc pouˇz´ıv´an,objevil se napˇr´ıkladu OS MFT (bˇeˇzelna stroj´ıch IBM 360). Pouˇzitelnostt´etometody je obdobn´at´epˇredchoz´ı– sp´ıˇsepro naprogramov´an´ıvlastn´ıspr´avy pamˇetipro aplikaci.

3.2.3 Dynamick´epˇridˇelov´an´ıblok˚upamˇeti

£ Nev´yhody pˇredchoz´ımetody vypl´yvaj´ıpˇredevˇs´ımz nemoˇznostiurˇcovat velikost blok˚upr˚ubˇeˇznˇe,za bˇehu syst´emu. Tento probl´emm˚uˇzemeˇreˇsittak, ˇzevelikost pˇridˇelen´ehobloku urˇcujemeaˇzpˇriˇz´adosti procesu o pamˇet’.

- vlastn´ık: voln´e dalˇs´ı:  NULL { Pamˇet’ Pouˇz´ıv´aproces 2 procesu 2 }| vlastn´ık: ID procesu 2 dalˇs´ı: z 

vlastn´ık: voln´e dalˇs´ı:  { Pamˇet’ Pouˇz´ıv´aproces 1 procesu 1 }| vlastn´ık: ID procesu 1 dalˇs´ı: z Pamˇet’ OS $000000 Obr´azek3.3: Dynamick´epˇridˇelov´an´ıblok˚upamˇeti

Proces pˇri sv´emspuˇstˇen´ıpoˇz´ad´ao urˇcit´emnoˇzstv´ıpamˇeti.Spr´avce pamˇetivyhled´avoln´yblok s d´elkou vˇetˇs´ınebo rovnou poˇzadavk˚umprocesu a tuto pamˇet’ pˇridˇel´ı.Pokud se ale nepodaˇr´ınaj´ıt vhodn´yvoln´yblok, proces nelze spustit. Pˇredukonˇcen´ımsv´eˇcinnostiproces mus´ıvr´atitpˇridˇelenou pamˇet’ a ta m˚uˇzeb´ytpˇridˇelenadalˇs´ımu procesu. Kapitola 3 Sprava´ pametiˇ 31

Procesy by mˇelypouˇz´ıvat pouze relativn´ıadresy v r´amcisv´ehopˇridˇelen´ehobloku. Pokud tuto metodu rozˇs´ıˇr´ımeo moˇznostdodateˇcn´ealokace dalˇs´ıhobloku pamˇeti,pak by proces adresoval relativnˇe v prostoru z´ıskan´emsouˇctemjeho pˇridˇelen´ych blok˚u. Protoˇzepoˇceta d´elka blok˚use mˇen´ıbˇehempr´ace syst´emu, evidence blok˚uv tabulce (tj. statick´em poli) nen´ıvhodn´a.Pˇrineust´al´ych zmˇen´ach d´elkytabulky nen´ımoˇzn´epˇredemodhadnout jej´ımaxim´aln´ı velikost. Reˇsen´ıjeˇ v´ıce,napˇr´ıkladvytvoˇren´ıhlaviˇcekblok˚upamˇetinepˇr´ıstupn´ych samotn´emu procesu (tˇrebaˇzeje mu tento blok pˇridˇelen),v hlaviˇccepak uloˇz´ımeinformaci o vlastn´ıkovi nebo o tom, ˇzese jedn´ao voln´yblok, a d´aleadresu poˇc´atkun´asleduj´ıc´ıhobloku (tedy ukazatel na dalˇs´ıblok, jeho z´ahlav´ı). T´ımto zp˚usobem zˇretˇez´ımebloky do dynamick´ehoseznamu (ten nen´ıv j´adˇre,takˇzebez probl´em˚u),se kter´ymse jiˇzd´ajednoduˇsepracovat. Pamˇet’ vyhrazen´apro hlaviˇckubloku nen´ıprocesu pˇr´ıstupn´a(ani o n´ınev´ı). £ Pokud proces ˇz´ad´ao pˇr´ıstupdo sv´epamˇeti,k jeho adresov´emu prostoru se dostaneme jednoduˇse tak, ˇzeod prvn´ıhobloku postupujeme po ukazatel´ıch na n´asleduj´ıc´ıbloky, to tak dlouho, dokud podle informac´ıv hlaviˇck´ach nenalezneme ten blok, kter´yhled´ame.Stejnˇepostupujeme, kdyˇzhled´amevoln´y blok pamˇetipro pˇridˇelen´ınovˇespouˇstˇen´emu procesu. Pˇriuvolˇnov´an´ıbloku pamˇetipostupujeme n´asledovnˇe:kdyˇzje blok obklopen pˇridˇelen´ymibloky, zmˇen´ımepouze informaci o vlastn´ıkovi bloku. Jestliˇzevˇsakpˇrednebo za t´ımto blokem je voln´yblok, mus´ımeuvolˇnovanou oblast k tomuto bloku pˇripojit. Tady je tˇrebajen d´atpozor na to, aby nebyl naruˇsenˇretˇezblok˚u,tedy zvolit vhodnou posloupnost pˇresmˇerov´an´ıa uvolnˇen´ıukazatel˚u. V´yhody: • vˇsechny v´yhody pˇredchoz´ı metody, i kdyˇzspr´ava pamˇetije o nˇecon´aroˇcnˇejˇs´ı a vyhled´av´an´ı konkr´etn´ıhobloku pomalejˇs´ı, • ˇc´asteˇcnˇeodstraˇnujenev´yhody pˇredchoz´ımetody. Nev´yhody: • poˇcetproces˚u,kter´elze spustit, je limitov´anpoˇzadavky jiˇzspuˇstˇen´ych proces˚u,a pokud je pamˇet’ fragmentovan´a,je maxim´aln´ıvelikost poˇzadavku na pamˇet’ limitovan´avelikost´ınejvˇetˇs´ıhovoln´eho bloku, • urˇcit´apravdˇepodobnost fragmentace. Riziko fragmentace se d´asn´ıˇzitmetodami defragmentace pamˇeti,kter´ejsou prob´ır´any v podkapitole 3.3 na str. 34. O pouˇzitelnostimetody plat´ıtot´eˇzco jsme si pˇreˇcetli u pˇredchoz´ıch.

3.2.4 Segmentace

£ Kaˇzd´emu procesu je pˇriˇrazenonˇekolik (r˚uznˇedlouh´ych) blok˚upamˇeti, segment˚u. Pokud je to potˇrebaa je v dan´emsmˇeruvoln´aoblast pamˇeti, segmenty lze prodluˇzovat. Kaˇzd´ysegment obvykle m´ıv´aurˇcit´y´uˇcel,napˇr´ıklad segment pro k´odprocesu (code segment), datov´ysegment (data segment, pro glob´aln´ıkonstanty a promˇenn´e),z´asobn´ıkov´ysegment (stack seg- ment, obsazuje se od nejvyˇsˇs´ıch adres k nejniˇzˇs´ım,pro lok´aln´ıpromˇenn´ea re´aln´eparametry funkc´ı), pˇrekryvn´ysegment (overlay segment, napˇr´ıkladpro dynamick´eknihovny). Konkr´etn´ırozvrˇzen´ıtyp˚u segment˚uz´aleˇz´ına dan´emoperaˇcn´ımsyst´emu. Nˇekter´esegmenty jsou plnˇekonstantn´ı(nemˇen´ıse jejich d´elka ani obsah, napˇr´ıkladsegment pro k´od procesu), jin´emaj´ıkonstantn´ıd´elku,ale promˇenn´yobsah (glob´aln´ıpromˇenn´e),dalˇs´ımaj´ıpromˇennou d´elkui obsah (z´asobn´ık).To lze zohlednit pˇrium´ıst’ov´an´ısegment˚uv pamˇetia ˇreˇsen´ıfragmentace. Kapitola 3 Sprava´ pametiˇ 32

Pokud m´asegment promˇennoud´elku(napˇr.z´asobn´ık),um´ıst’uje se tak, aby pˇripˇr´ıpadn´empˇreteˇcen´ı (posunu hranice aˇztam, kde nem´aco dˇelat)naruˇsilsp´ıˇsepamˇet’ov´yprostor vlastn´ıhoprocesu neˇz pamˇet’ov´yprostor ciz´ıhoprocesu (tj. mˇelby r˚ustsmˇeremk ostatn´ımsegment˚umdan´ehoprocesu). Procesy, kter´ejsou instancemi t´ehoˇzprogramu, mohou sd´ıletplnˇekonstantn´ısegmenty (pokud to syst´emumoˇzˇnuje).  Segment je tedy pamˇet’ov´yblok urˇcen´ypro jeden konkr´etn´ı ´uˇcel,jehoˇzd´elka je dan´emu ´uˇcelu pˇrizp˚usobena. Procesy pouˇz´ıvaj´ırelativn´ıadresy, adresy zaˇc´atkujednotliv´ych segment˚ujsou uloˇzeny v segmen- tov´ychregistrech procesoru (tedy je to opˇethardwarovˇez´avisl´eˇreˇsen´ı,kaˇzd´yprocesor m´ajin´eadre- sov´e/segmentov´eregistry). Absolutn´ıadresa je pak vypoˇctena pomoc´ıobsahu segmentov´ych registr˚u. Adresa objektu z hlediska procesu m´atedy dvˇeˇc´asti– segment (urˇcen´ı,ve kter´emsegmentu se objekt nach´az´ı)a offset (relativn´ıadresa v r´amcisegmentu, prvn´ıByte v segmentu m´aoffset = 0). V´yhodou tohoto ˇreˇsen´ıje, ˇzepˇr´ıpadn´epˇresouv´an´ısegmentu nezp˚usob´ıprocesu probl´emy s adre- sami. Je nutn´ezajiˇst’ovat mapov´an´ırelativn´ıadresy v segmentu na absolutn´ıadresu. Pokud je im- plementov´anmultitasking, je nutn´epˇri v´ymˇenˇe“ proces˚una procesoru uloˇzitobsah segmentov´ych ” registr˚uodstavovan´ehoprocesoru a pˇriznovupˇridˇelen´ıprocesoru tomuto procesu znovu tyto hodnoty do registr˚unaˇc´ıst.  Stack Segment Registry procesoru

Voln´apamˇet’ SS

ES Extended Data Segment  DS Data Segment  CS ... Code Segment 

Pamˇet’ operaˇcn´ıhosyst´emu $000000 Obr´azek3.4: Segmentace pamˇeti(segmenty jedin´ehoprocesu)

V´yhody: • velikost segment˚um˚uˇzeb´ytr˚uzn´a,podle potˇreby procesu, • segmenty je moˇzn´eprodluˇzovat a pˇresouvat, • pokud to spr´avce pamˇetiumoˇzn´ı,nˇekter´esegmenty lze sd´ılet. Nev´yhody: • nutnost hardwarov´epodpory (segmentov´eregistry), • ochrana pamˇetije komplikovanˇejˇs´ı,protoˇzesegmenty maj´ıpromˇennoud´elku, • pamˇet’, kterou lze dalˇs´ımu procesu pˇridˇelit,je omezena velikost´ınejvˇetˇs´ıhosouvisl´ehobloku voln´e pamˇeti, Kapitola 3 Sprava´ pametiˇ 33

• urˇcit´apravdˇepodobnost fragmentace, ta se ale d´aˇreˇsitpˇresouv´an´ımsegment˚u. Metoda segmentace pamˇetise bˇeˇznˇepouˇz´ıv´av modern´ıch operaˇcn´ıch syst´emech (jak ve Windows, tak i v UNIXov´ych syst´emech), ale vˇzdyv kombinaci s jinou metodou. Se zjednoduˇsenouvariantou jsme se mohli setkat u MS-DOSu a dalˇs´ıch operaˇcn´ıch syst´em˚upro prvn´ıminipoˇc´ıtaˇce.

3.2.5 Jednoduch´estr´ankov´an´ı

£ Metoda str´ankov´an´ırozliˇsuje fyzickou adresu objektu v pamˇeti(to je absolutn´ıadresa objektu) a logickou adresu tohoto objektu (s tou pracuj´ı procesy). Pamˇet’ov´yprostor je rozdˇelenna stejnˇe dlouh´e´useky– str´anky, pokud moˇznosp´ıˇsemenˇs´ıvelikosti (obvykle ˇctyˇriKiB), procesu je pˇridˇeleno tolik ´usek˚u,kolik potˇrebuje.Velikost str´ankyby mˇela b´yt mocninou ˇc´ısla2 (typicky 1024 B, 2048 B, nejˇcastˇeji4096 B = 4 KiB, ale mohou b´yti v jednotk´ach MB), aby bylo moˇzn´eprov´adˇetrychl´eoperace s adresami pomoc´ıbitov´ych posun˚u. Procesu se jeho adresov´yprostor jev´ı jako spojit´y,tˇrebaˇzefyzicky spojit´ynemus´ı b´yt.Proces pouˇz´ıv´aze sv´ehohlediska absolutn´ıadresy“, kter´ejsou ve skuteˇcnostipouze logick´ymiadresami (od ” nuly) nebo se jako v pˇr´ıpadˇesegmentace pamˇetiskl´adaj´ıze dvou ˇc´ast´ı– adresy segmentu a offsetu, kter´eje nutno pˇrekl´adat.

Evidence proces˚u ... Proces: Str´anky: ... ID procesu 1 1,3 ... Proces 2 (5) ID procesu 2 2,5 ......

voln´e (4)

Tabulka obsazen´ıpamˇeti Proces 1 (3) 0 voln´e 1 ID procesu 1 Proces 2 (2) 2 ID procesu 2 3 ID procesu 1 4 voln´e Proces 1 (1) 5 ID procesu 2 ... voln´e (0) $000000 Obr´azek3.5: Str´ankov´an´ıpamˇeti

Protoˇzem´amekonstantn´ıpoˇcetstr´anek(pamˇet’ je rozdˇelenajiˇzpˇrispuˇstˇen´ıoperaˇcn´ıhosyst´emu) a nav´ıcjsou vˇsechny stejnˇedlouh´e,m˚uˇzeb´ytevidence str´anekvedena v jednoduch´etabulce, kde kaˇzd´e str´anceje pˇriˇrazenvlastn´ıknebo informace o tom, ˇzejde o volnou str´anku(nemus´ımeani ukl´adat velikost str´anky).U kaˇzd´ehoprocesu je pak evidov´anseznam pˇridˇelen´ych str´anek. Pˇredpokl´adejme,ˇzeproces nahl´ıˇz´ına sv˚ujadresov´yprostor jako na spojit´y.Velikost jeho adre- sov´ehoprostoru je velikost prostoru = poˇcetstr´anekprocesu velikost str´anky × Pak m´ak dispozici adresy v rozmez´ı 0 . . . (velikost prostoru 1). − Kapitola 3 Sprava´ pametiˇ 34

£ Pˇrijak´emkoliv pˇr´ıstupudo pamˇetispr´avce pamˇetiprov´ad´ı pˇrekladadres: • offset = logick´aadresa mod velikost str´anky • index str´ankyprocesu = logick´aadresa div velikost str´anky   • fyzick´aadresa = mapuj str´anku(index str´ankyprocesu) velikost str´anky + offset × Mapov´an´ıstr´anekse prov´ad´ıpodle seznamu str´anekpˇridˇelen´ych procesu. V´yhody: • proces m˚uˇzedostat tolik str´anek,kolik potˇrebuje(pokud jsou voln´e),str´ankynemus´ına sebe navazovat, • nejsou probl´emy s fragmentac´ı. Nev´yhody: • fragmentace uvnitˇrstr´anek(proces nemus´ıpotˇrebovat celou posledn´ıstr´anku), • omezen´ıdan´avelikost´ıfyzick´ehoadresov´ehoprostoru. Metoda str´ankov´an´ıje po rozˇs´ıˇren´ına virtu´aln´ıpamˇet’ a (obvykle) spojen´ıse segmentac´ıbˇeˇznˇepouˇz´ı- v´anav souˇcasn´ych operaˇcn´ıch syst´emech.

3.3 Reˇsen´ıfragmentaceˇ pamˇeti

 Definice Pamˇet’ (vnˇejˇs´ı,napˇr´ıkladpevn´ydisk, i vnitˇrn´ı,tedy operaˇcn´ıpamˇet’) je fragmentovan´a,pokud voln´e oblasti pamˇetinetvoˇr´ısouvisl´yblok. 

Fragmentace na vnˇejˇs´ım pamˇet’ov´em m´ediu vznik´atehdy, kdyˇz smaˇzeme jeden soubor, do takto uvolnˇen´ehom´ıstaje uloˇzennov´ysoubor, ten se rozhodneme prodlouˇzita on se po tomto prodlouˇzen´ı do tohoto m´ıstanevejde, tedy je nutn´ena konci voln´ehom´ıstavytvoˇritodkaz (at’ uˇzjakkoliv) na dalˇs´ı voln´em´ısto,ve kter´emsoubor pokraˇcuje.Aby byla pamˇet’ fragmentovan´a,ale staˇc´ıi mnohem m´enˇe– pokud je pˇriukl´ad´an´ısouboru vyb´ır´ano zbyteˇcnˇevelk´em´ısto. U operaˇcn´ıpamˇetije situace podobn´a,jen m´ıstosoubor˚upracujeme s pamˇet’ov´ymiprostory jed- notliv´ych proces˚u.Pamˇet’ov´eprostory proces˚uobvykle neb´yvaj´ırozdrobeny na v´ıceˇc´ast´ı,ale pˇresto k fragmentaci doch´az´ı.V pˇr´ıpadˇe, ˇzeo pamˇet’ ˇz´ad´anovˇespouˇstˇen´yproces, mus´ıb´ytproch´azenapamˇet’ a hled´anvhodnˇevelk´yvoln´yblok pamˇeti,a v pˇr´ıpadˇe,ˇze nen´ınalezen dostateˇcnˇevelk´yblok, proces nelze spustit. Fragmentace se u re´aln´ych metod pˇridˇelov´an´ıpamˇetid´asn´ıˇzitdvˇemazp˚usoby – vhodnou metodou v´ybˇerubloku pamˇetipˇriˇz´adostiprocesu (alokaˇcn´ıstrategie) nebo setˇr´as´an´ımpamˇeti.

3.3.1 V´ybˇervhodn´ehobloku pamˇeti

£ Kdyˇznovˇespouˇstˇen´yproces poˇz´ad´ao pamˇet’, stejn´ymzp˚usobem tak´ehled´amevhodnˇevelk´yvoln´y blok. Z´akladn´ımpˇredpokladem je, aby se do nalezen´ehobloku poˇzadavek procesu veˇsel,coˇzn´amm˚uˇze d´atv´ıcemoˇznost´ıv´ybˇerubloku: • metoda first fit – spr´avce pamˇetiproch´az´ıbloky od zaˇc´atkuuˇzivatelsk´eoblasti a pˇridˇel´ıpamˇet’ z prvn´ıhovhodn´ehobloku, je to nejrychlejˇs´ımetoda, i kdyˇzne nejoptim´alnˇejˇs´ı(vˇetˇs´ıpravdˇepo- dobnost fragmentace), Kapitola 3 Sprava´ pametiˇ 35

• metoda best fit – spr´avce pamˇetiprojde vˇsechny bloky a hled´atakov´yblok, kter´yje vhodn´y (poˇzadavek se do nˇehovejde) a z´aroveˇnje co nejmenˇs´ı, je to nejoptim´alnˇejˇs´ı metoda (je co nejmenˇs´ı zbytek“), ale ˇcasovˇen´aroˇcnˇejˇs´ıneˇzta pˇredchoz´ı, ” • metoda last fit – spr´avce pamˇetivyhled´aposledn´ıvyhovuj´ıc´ı,tuto metodu pouˇzijeme,pokud pamˇet’ m´ab´ytobsazov´ana smˇeremod nejvyˇsˇs´ıch adres k nejniˇzˇs´ım(pr´aces pamˇet´ıtypu z´asobn´ık). Pokud pouze vol´ımevhodnou metodu v´ybˇerubloku pamˇeti,ˇreˇs´ımefragmentaci jen ˇc´asteˇcnˇe.Spoleˇcnou v´yhodou tˇechto metod je, na rozd´ılod n´asleduj´ıc´ıhoˇreˇsen´ı,ˇzeadresov´yprostor procesu se po celou dobu jeho bˇehu nemˇen´ı.

3.3.2 Setˇr´as´an´ıpamˇeti

£ Setˇr´as´an´ıpamˇeti(pˇresouv´an´ıblok˚upamˇeti)znamen´apˇresouv´an´ıblok˚upamˇeti,kter´ejsou neobsa- zen´e,a to tak, aby po pˇresunut´ıbylo moˇzn´evytvoˇritvˇetˇs´ıvoln´yblok spojen´ımv´ıcemenˇs´ıch voln´ych blok˚u.Abychom mohli spojit voln´ebloky do jednoho velk´ehoadresov´eho prostoru pˇridˇeliteln´ehopro- cesu s velk´ymipamˇet’ov´ymin´aroky, mus´ımeobsazen´ebloky setˇr´ast“ k niˇzˇs´ımadres´am,aby voln´e ” bloky na sebe navazovaly. Je vˇsaknutn´evyˇreˇsitdva probl´emy: • samotn´epˇresouv´an´ıje ˇcasovˇen´aroˇcn´e, • adresov´yprostor procesu, kter´emu je pamˇet’ pˇresouv´ana,se mˇen´ı(nem˚uˇzepouˇz´ıvat absolutn´ı adresy). Prvn´ınev´yhodu vyˇreˇs´ımejednoduˇset´ım,ˇzek pˇresouv´an´ıbude doch´azetpouze tehdy, kdyˇzto bude nutn´e, tedy ve chv´ıli, kdy o pamˇet’ bude ˇz´adatproces s n´arokyvyˇsˇs´ımi neˇz je d´elka nejvˇetˇs´ıho pamˇet’ov´ehobloku, a pˇresouvat budeme jen tak dlouho, dokud nevytvoˇr´ımedostateˇcnˇevelk´yblok. Nav´ıcz´akladn´ıdesky b´yvaj´ıvybaveny moˇznostmi,jak procesor zbavit tohoto typu ´uloh(napˇr´ıklad ˇcip blitter – block bits transfer, pomocn´yprocesor pro pˇresuny pamˇet’ov´ych blok˚u, anebo n´amdobˇre zn´am´yˇradiˇc DMA – Direct Memory Access). £ Druhou nev´yhodu lze ˇreˇsit nˇekolika zp˚usoby: 1. Stanoven´ı pravidel pro adresov´an´ına niˇzˇs´ı´urovni, napˇr´ıkladpouˇz´ıv´an´ı relativn´ıchadres a vzta- hov´an´ık urˇcit´emu registru, ve kter´emje uloˇzenaadresa moment´aln´ıhozaˇc´atkuadresov´ehopro- storu procesu. V´yhodou je pomˇernˇejednoduch´aspr´ava pamˇetia mal´aˇcasov´an´aroˇcnost,nev´yhodou je hard- warov´az´avislost(nen´ı pouˇziteln´epro syst´emy portovan´ena r˚uzn´ehardwarov´earchitektury) a nutnost spolupr´aceprogram´ator˚uaplikac´ı(mus´ıpouˇz´ıvat pouze relativn´ıadresy). 2. Stanoven´ı pravidel adresov´an´ına vyˇsˇs´ı´urovni, napˇr´ıkladpouˇz´ıvat mechanismus zamyk´an´ıbloku pamˇeti po dobu jej´ıhopouˇz´ıv´an´ı. V´yhodou je jednoduch´aspr´ava pamˇeti,nev´yhodou je nutnost spolupr´aceprogram´ator˚uapli- kac´ıa tak´ejejich dobr´av˚ule(program´atortak´em˚uˇzezamknout blok hned pˇrispuˇstˇen´ıprocesu a odemknout ho aˇzpˇriukonˇcov´an´ıjeho bˇehu, t´ımznemoˇzn´ıveˇsker´epˇresouv´an´ı). 3. Pˇredkaˇzd´ympˇresouv´an´ım spr´avce pamˇetiinformuje kaˇzd´yproces, jehoˇzadresov´yprostor je pˇresouv´an,o nov´eadrese zaˇc´atkubloku, a proces si pak pˇrepoˇc´ıt´avˇsechny sv´eabsolutn´ıadresy (obvykle ukazatele). Zpr´ava o pˇresouv´an´ımus´ım´ıtnejvyˇsˇs´ıprioritu, aby se k proces˚umdostala vˇcas. Kapitola 3 Sprava´ pametiˇ 36

Tento zp˚usobˇreˇsen´ıklade vysok´en´arokyna syst´emi procesy, proto se pouˇz´ıv´apouze jako doplnˇek prvn´ıhouveden´ehozp˚usobu,a to pro procesy, kter´emus´ıpouˇz´ıvat absolutn´ıadresy (ovladaˇce, antivirov´eprogramy, apod.).

 Metody setˇr´as´an´ıpamˇetijsou dvˇe: • kooperativn´ısetˇr´as´an´ı – pouˇzit´ıdruh´ehoˇreˇsen´ı,procesy na pˇresunech spolupracuj´ıse syst´emem, ovlivˇnuj´ıje (mus´ızamykat bloky), pouˇz´ıvalo se napˇr´ıkladv Apple MacIntosh do verze 9, • transparentn´ısetˇr´as´an´ı – kombinace prvn´ıhoa tˇret´ıhoˇreˇsen´ı,procesy na pˇresunech nespolupra- cuj´ı,pouˇz´ıvalo se v syst´emech Epoc (kdyˇzjeˇstˇeˇsloo operaˇcn´ısyst´em pro osobn´ıpoˇc´ıtaˇce).

3.4 Virtu´aln´ıpamˇet’

3.4.1 Odkl´adac´ıprostor a str´anky

 Virtu´aln´ıpamˇet’ je koncept, kdy oblast vnitˇrn´ıpamˇetirozˇs´ıˇr´ımeo oblast na vnˇejˇs´ımpamˇet’ov´em m´ediu,obvykle pevn´emdisku. Pro procesy je tento koncept naprosto transparentn´ı(naprosto stejn´ym zp˚usobem se z pohledu procesu zach´az´ıse vˇsemiadresami v pamˇeti,at’ uˇzse fyzicky nach´azej´ıkdekoliv), proto hovoˇr´ımeo virtualizaci pamˇeti.Adresn´ıprostor, kter´y vid´ı“ procesy, se naz´yv´a logick´apamˇet’. ” D˚uvodem virtualizace pamˇetije odstranˇen´ız´akladn´ınev´yhody vˇsech re´aln´ych metod pˇridˇelov´an´ı pamˇeti,nemoˇznostispustit proces, jehoˇzpoˇzadavky na pamˇet’ jsou vyˇsˇs´ıneˇzmnoˇzstv´ımoment´alnˇe voln´e(fyzick´e)operaˇcn´ıpamˇeti. Existuje v´ıcemetod pro pr´acis virtu´aln´ıpamˇet´ı,obvykle vych´azej´ız re´aln´emetody str´ankov´an´ı (pˇr´ıpadnˇev kombinaci s jinou metodou).  Odkl´adac´ıoblast slouˇz´ıc´ık nastaven´ımnoˇzstv´ıvnitˇrn´ıpamˇeti m˚uˇzeb´ytbud’ cel´ydiskov´yodd´ıl nebo jeden ˇciv´ıcesoubor˚u(z´aleˇz´ı,co umoˇzˇnujedan´yoperaˇcn´ısyst´em).Nen´ıvhodn´evytvoˇritodkl´adac´ı oblast na SSD (zbyteˇcnˇese rychleji sniˇzujejeho ˇzivotnost), lepˇs´ıvolbou je klasick´ydisk, tˇrebaˇzeje pomalejˇs´ı.Typicky se odkl´adac´ıoblast oznaˇcujejako swap, odkl´adac´ısoubor/odd´ıl,str´ankovac´ısoubor apod.  Fyzick´avnitˇrn´ıpamˇet’ a tak´eodkl´adac´ıoblast jsou rozdˇeleny na r´amce a logick´apamˇet’ je rozdˇelena na str´anky. Vˇsechny r´amcea str´ankymaj´ıstejnou velikost. Protoˇzelogick´yadresov´yprostor b´yv´a rozs´ahlejˇs´ıneˇzfyzick´y,b´yv´astr´anekobvykle v´ıceneˇzr´amc˚uv operaˇcn´ıpamˇeti. Kaˇzd´astr´anka (coby virtu´aln´ıobjekt) mus´ıb´ytnˇekdefyzicky um´ıstˇena,a to bud’ v r´amciv operaˇcn´ı pamˇeti,nebo v r´amciodkl´adac´ıhoprostoru. Mnoh´epˇridˇelen´estr´ankynejsou zrovna pouˇz´ıv´any, at’ uˇz proto, ˇzeproces, kter´yje vlastn´ı,zrovna nem´apˇridˇelen procesor, tedy nic nedˇel´a“, nebo tento proces ” zrovna nepotˇrebujepracovat s obsahem t´etostr´anky(pracuje s jinou str´ankou). Takov´anepouˇz´ıvan´a str´anka tedy klidnˇem˚uˇzeb´ytum´ıstˇenado r´amcev odkl´adac´ımprostoru a m´ıstov operaˇcn´ıpamˇeti bude pˇrenech´anostr´ance,se kterou se v´ıcepracuje. Evidence pamˇetije vedena v tabulce str´anek, tam kromˇevlastn´ıka str´ankyje uvedeno, kde se moment´alnˇenach´az´ı(oznaˇcen´ır´amce v pamˇetinebo v odkl´adac´ımprostoru).

3.4.2 Str´ankov´an´ına ˇz´adost

£ Kaˇzd´yproces m´apˇridˇelenu jednu nebo v´ıce str´aneklogick´epamˇeti.Oproti ˇreˇsen´ı z´akladn´ıho str´ankov´an´ıje trochu sloˇzitˇejˇs´ıpˇrepoˇc´ıt´av´an´ılogick´ych a fyzick´ych adres, protoˇzese mus´ıˇreˇsiti pˇr´ıpad, Kapitola 3 Sprava´ pametiˇ 37 kdy je str´anka odloˇzen´ana disku. Proces ke sv´ymstr´ank´ampˇristupujetakto: a) Str´ankanach´az´ıve fyzick´epamˇeti: pak t´eto str´anceodpov´ıd´anˇekter´yr´amecve vnitˇrn´ıpamˇeti. V tabulce str´anekje uvedeno ˇc´ıslotohoto r´amcea pak se absolutn´ıadresa vypoˇctez adresy zaˇc´atkur´amce(poˇcetr´amc˚ukr´atvelikost r´amce)a pˇriˇctese offset (relativn´ı adresa uvnitˇr str´anky). b) Str´ankaje odloˇzenana disku: proces vyvol´apˇreruˇsen´ınazvan´e v´ypadek str´anky (page fault), ˇc´ımˇz se pˇreruˇs´ızpracov´av´an´ıjeho ´ulohy, spr´avce pamˇetinajde bud’ voln´yr´amecve vnitˇrn´ıpamˇetinebo str´anku,kter´asice m´apˇriˇrazenr´amec,ale lze ji odloˇzit(tuto str´ankuodloˇz´ına disk), naˇctedo r´amceˇz´adanoustr´ankua pak se zopakuje postup ˇz´adostio pˇr´ıstup do pamˇeti,prob´ıh´ajako v bodu a).

Logick´apamˇet’ Vnˇejˇs´ıpamˇet’ov´e m´edium str´anka 8

- Operaˇcn´ıpamˇet’ str´anka 7 r´amec4  str´anka 6

r´amec3  str´anka 5

r´amec2  str´anka 4 -

r´amec1  str´anka 3 -

r´amec0  str´anka 2

str´anka 1 -

str´anka 0

Obr´azek3.6: Str´ankov´an´ına ˇz´adost

£ Pˇrekladadres prob´ıh´atakto: 1. offset = logick´aadresa mod velikost str´anky 2. index str´ankyprocesu = logick´aadresa div velikost str´anky 3. ˇc´ıslostr´anky = mapuj str´anku(index str´ankyprocesu) 4. ˇc´ıslor´amce = zjisti r´amec(ˇc´ıslostr´anky) r´amecnen´ıve vnitˇrn´ıpamˇeti str´anka je odloˇzena,pˇreruˇsen´ı v´ypadekstr´anky“, opakuj bod 4  ⇒  ” 5. fyzick´aadresa = ˇc´ıslor´amce velikost r´amce + offset × £ Pˇriurˇcov´an´ı, kter´yr´amecm´ab´ytuvolnˇenv pˇr´ıpadˇe,ˇzeje nutn´enˇekteroustr´ankupˇresunout z disku do operaˇcn´ıpamˇeti,pouˇz´ıv´amenˇekterouz metod v´ybˇeruobˇeti: • FIFO (First In, First Out) – je odloˇzenata str´anka, kter´am´apˇriˇrazenr´amecnejd´ele(nejd´elene- byla odloˇzena).Mus´ımev´estfrontu str´anekum´ıstˇen´ych v pamˇeti(kdyˇzstr´anka dostane pˇridˇelen r´amecv pamˇeti,je zaˇrazenana konec fronty); odkl´ad´amestr´anku,kter´aje na zaˇc´atku fronty. Nev´yhodou t´etometody je, ˇzenezohledˇnuje to, jak moc je str´anka vyuˇz´ıv´ana.Velmi ˇcasto pouˇz´ıvan´estr´ankyjsou zbyteˇcnˇeˇcastoodkl´ad´any. Kapitola 3 Sprava´ pametiˇ 38

• LFU (Laft Frequently Used) – je odloˇzena nejm´enˇepouˇz´ıvan´astr´anka. Komplikac´ımetody je urˇcen´ı,kter´ato vlastnˇeje. Ke kaˇzd´estr´anceje tˇrebav´estˇc´ıtaˇczvyˇsovan´yo 1 pˇrikaˇzd´empˇr´ıstupu na str´anku.Tato metoda bohuˇzelpostihuje nejv´ıcˇcerstvˇespuˇstˇen´eprocesy (jejich str´ankydosud nebyly hodnˇepouˇz´ıv´any). • LRU (Last Recently Used) – je odloˇzenastr´anka, kter´abyla nejd´ele nepouˇz´ıvan´a,tedy nejd´ele leˇzelaladem“. Tento algoritmus je z hlediska proces˚unejlepˇs´ı,implementace je vˇsakn´aroˇcn´a ” (i ˇcasovˇe),protoˇzese pˇredpokl´ad´aevidence ˇcasuposledn´ıhopˇr´ıstupuna jednotliv´estr´anky(je tˇrebapro kaˇzdoustr´ankuuloˇzitˇcasov´eraz´ıtko pˇrikaˇzd´emjej´ımpouˇzit´ı,pˇrivyhled´av´an´ıobˇeti pak proch´az´ımeevidenci a hled´amenejstarˇs´ıˇcasov´eraz´ıtko). Proto je pouˇz´ıvanˇejˇs´ızjednoduˇsen´a verze t´etometody, pseudoLRU (NUR). • NUR (Not Used Recently, pseudoLRU, hodinov´yaloritmus) – kaˇzd´astr´anka m´a used bit, jeden bit, kter´yje vˇzdypˇripˇr´ıstupu na str´ankunastaven na 1. Spr´avce pamˇetipak poˇr´addokola proch´az´ıtabulku str´aneka used bity tˇech str´anek,kter´emaj´ıpˇriˇrazeny r´amce,nuluje (str´anka bez r´amcem´alogicky used bit nastaven na 0, proto byla vybr´anajako obˇet’). Kdyˇzspr´avce pˇritomto nulov´an´ızjist´ı,ˇzebit byl nastaven na 0, znamen´ato, ˇzeod posledn´ıho nulov´an´ıstr´anka nebyla pouˇz´ıv´anaa je tedy lepˇs´ımkandid´atemna odloˇzen´ına disk. V okamˇziku vyvol´an´ıpˇreruˇsen´ıv´ypadkustr´ankym˚uˇzeb´ytpˇritomto proch´azen´ına kter´ekoliv str´ance.Pak je za obˇet’ vybr´ananejbliˇzˇs´ın´asleduj´ıc´ıstr´anka s bitem nastaven´ym na 0. T´etometodˇese tak´eˇr´ık´a hodinov´yalgoritmus, protoˇzespr´avce cyklicky v dan´ych intervalech proch´az´ıtabulku str´anek. V souˇcasn´ych operaˇcn´ıch syst´emech se pouˇz´ıv´aobdoba posledn´ıpopsan´emetody (hodinov´yalgorit- mus), ovˇsemupraven´a,aby fungovala ponˇekudoptim´alnˇeji.Nepouˇz´ıvaj´ıse ˇcasov´araz´ıtka, ani jeden bit, ale pro kaˇzdoustr´ankunˇekolik bit˚u.  Ochrana pamˇeti je na vyˇsˇs´ı´urovni pˇredevˇs´ımproto, ˇzed´ıkynutnosti pˇrekladumezi logickou a fy- zickou adresou se procesy bˇeˇzn´ymzp˚usobem nedostanou mimo sv´epamˇet’ov´estr´anky. D´alespr´avce pamˇetim´amoˇznostoznaˇcitnˇekter´e(zejm´enasyst´emov´e)str´ankypouze pro ˇcten´ı(na to staˇc´ıjedin´y bit, coˇznen´ıprobl´em,pokud pouˇz´ıv´ameused bity v metodˇeNUR) a pˇripokusu o z´apisna takovou str´ankuje proces n´asilnˇeukonˇcen. Metoda nen´ızat´ıˇzen´afragmentac´ı,m˚uˇzevznikat pouze vnitˇrn´ıfragmentace – uvnitˇrstr´anek. V´yhody: • vˇsechny v´yhody metody z´akladn´ıhostr´ankov´an´ı, • proces m´ak dispozici tolik pamˇeti,kolik potˇrebuje,nen´ılimitov´anfyzickou pamˇet´ı. Nev´yhody: • fragmentace pamˇetiuvnitˇrstr´anek,ale nev´yznamn´avzhledem k mal´evelikosti str´anek, • hardwarovˇez´avisl´eˇreˇsen´ı. Tato metoda se obvykle kombinuje se segmentac´ı,cel´ypostup (segmentace se str´ankov´an´ımna ˇz´adost) je pops´and´ale.

3.4.3 Segmentace se str´ankov´an´ımna ˇz´adost

£ Tato metoda je v souˇcasnostinejpouˇz´ıvanˇejˇs´ı.Proces m´apˇridˇelenonˇekolik segment˚u,kaˇzd´yseg- ment se m˚uˇzerozkl´adatna nˇekolika str´ank´ach. Oproti pˇredchoz´ımetodˇetedy nen´ına str´ankydˇelen adresov´yprostor procesu jako celek, ale zvl´aˇst’ jeho jednotliv´esegmenty. Kapitola 3 Sprava´ pametiˇ 39

Pamˇet’ je tedy opˇetrozdˇelenana str´anky. Adresa objektu v logick´emadresov´emprostoru je d´ana urˇcen´ımsegmentu, ˇc´ıslemstr´ankya offsetem na str´ance.Spr´avce pamˇetivede u kaˇzd´ehoprocesu zvl´aˇst’ tabulku segment˚u,u kaˇzd´ehosegmentu zde eviduje seznam str´anek,na kter´ych se segment rozkl´ad´a. V tabulce str´anek pak je zachyceno, zda m´akonkr´etn´ıstr´anka pˇridˇelenr´amecve vnitˇrn´ıpamˇetinebo je odloˇzenana disku. Tak´ezde je moˇzn´esd´ıletsegmenty, jejichˇzd´elka ani obsah se nemˇen´ı(obvykle se vˇsaksp´ıˇse mluv´ı o sd´ılen´ıstr´anek,takov´esd´ılen´ıje jednoduˇsˇs´ıa obecnˇejˇs´ı).Fyzick´a(absolutn´ı)adresa v pamˇetise poˇc´ıt´atak, ˇzev tabulce segment˚upro dan´yproces a segment najdeme ˇc´ıslostr´ankyuveden´ev adrese, podle ˇc´ıslapozn´ame,jak´aje adresa zaˇc´atkustr´anky(ˇc´ıslokr´atd´elka str´anky)a pak jen pˇriˇctemeoffset. V´yhody: • vˇsechny v´yhody metody str´ankov´an´ına ˇz´adost, • je moˇzn´esd´ıletsegmenty. Nev´yhody: • sloˇzitostimplementace, • hardwarovˇez´avisl´eˇreˇsen´ı. Jak bylo v´yˇseuvedeno, tato metoda je v souˇcasn´edobˇenejpouˇz´ıvanˇejˇs´ı.

3.4.4 Swapov´an´ıproces˚u

 Swapov´an´ıproces˚uje jednoduch´ametoda virtualizace, kter´aspoˇc´ıv´av tom, ˇzese neodkl´adaj´ı jednotliv´estr´ankypamˇeti,ale vˇzdycel´ypamˇet’ov´yprostor odkl´adan´ehoprocesu. Pamˇet’ vlastnˇeani nemus´ıb´ytrozdˇelenana str´ankyˇcir´amce(ale m˚uˇze),protoˇzese stejnˇevˇzdypracuje s cel´ymadresov´ym prostorem procesu. Princip metody je podobn´yjako u str´ankov´an´ı:pˇrivyhodnocov´an´ıinstrukce vyˇzaduj´ıc´ıpˇr´ıstupdo pamˇetije bud’ tento pˇr´ıstupumoˇznˇen(pokud m´aproces sv˚ujadresov´yprostor v operaˇcn´ıpamˇeti)nebo je vyvol´anopˇreruˇsen´ı.Pˇrioˇsetˇren´ıtohoto pˇreruˇsen´ıje nalezen vhodnˇevelk´yvoln´yprostor v operaˇcn´ı pamˇetinebo je vytvoˇren(stejnˇejako u str´ankov´an´ına ˇz´adost),pamˇet’ pˇresunuta a pak zopakov´ana posledn´ıinstrukce. V´yhody: • je to pomˇernˇejednoduch´ametoda, • V cel´emˇcasov´emintervalu, po kter´yje procesu pˇridˇelenprocesor, je pˇreruˇsen´ısouvisej´ıc´ıs pˇre- sunem pamˇetivyvol´anonejv´yˇsejednou. Nev´yhody: • pˇresouvan´ebloky pamˇetijsou obecnˇer˚uznˇevelk´e,nejsou navz´ajemjednoduˇsezamˇeniteln´e,tedy pro um´ıstˇen´ı dat jednoho procesu je nˇekdynutn´eodloˇzitpamˇet’ nˇekolika m´enˇen´aroˇcn´ych“ ” proces˚ua nav´ıcje nutn´enejdˇr´ıvtento prostor naj´ıt, • pˇresouvaj´ıse zbyteˇcnˇevelk´epamˇet’ov´ebloky, • hardwarovˇez´avisl´eˇreˇsen´ı. Tato metoda se p˚uvodnˇepouˇz´ıvala u star´ych UNIXov´ych syst´em˚una hardwarov´ych architektur´ach bez podpory str´ankov´an´ı. Kapitola 3 Sprava´ pametiˇ 40

3.5 Technologie

3.5.1 Adresov´yprostor a virtu´aln´ıpamˇet’

 C´astadresov´ehoprostoruˇ obvykle zab´ır´asamotn´yoperaˇcn´ısyst´em,jsou to vˇetˇsinouadresy na konci adresov´ehoprostoru a jsou syst´emu napevno pˇridˇeleny. V pˇr´ıpadˇe,ˇzeoperaˇcn´ısyst´empouˇz´ıv´a metody ochrany pamˇetinebo alespoˇnrozliˇsujeprocesy na bˇeˇz´ıc´ı v privilegovan´emreˇzimu a bˇeˇz´ıc´ı v uˇzivatelsk´emreˇzimu, bˇeˇzn´ymproces˚umnen´ıdovolen pˇr´ıstupdo t´etooblasti nebo sem mohou pouze v reˇzimu ˇcten´ı(podle nastaven´ıpˇr´ıstupov´ych opr´avnˇen´ı). Ve Windows i v Linuxu se adresov´yprostor dˇel´ına ˇc´ast,do kter´em˚uˇzeproces jakkoliv zasahovat (niˇzˇs´ı adresy), a na ˇc´ast,do kter´enem˚uˇzezasahovat, ale pouze z n´ıˇc´ıst (vyˇsˇs´ı adresy – zde jsou syst´emov´esoubory a knihovny, kter´eproces potˇrebujeke sv´emu bˇehu, pouze pro ˇcten´ı).U 32bitov´eho syst´emu m´aproces celkem k dispozici 4 GB pamˇeti(ve skuteˇcnostio nˇecom´enˇe),z toho spodn´ı2 nebo 3 GB jsou procesu plnˇek dispozici.  Ve Windows i v mnoha UNIXov´ych syst´emech vˇcetnˇeLinuxu se pouˇz´ıv´avirtu´aln´ıpamˇet’, a to metoda segmentace se str´ankov´an´ımna ˇz´adost. Z d˚uvodu snadnˇejˇs´ı´udrˇzby virtu´aln´ıpamˇeti,odstranˇen´ı nutnosti m´ıtcelou tabulku str´anekv pamˇetia tak´ez d˚uvodu urychlen´ıpˇr´ıstupuk n´ıse pouˇz´ıvaj´ı v´ıce´urovˇnov´estruktury str´anek (obvykle 2–4´urovˇnov´estr´ankov´an´ı).Adresa m´ıstave virtu´aln´ıpamˇeti se skl´ad´az nˇekolika ˇc´ast´ı.Prvn´ıˇc´ast(napˇr´ıklad prvn´ıch 10 bit˚u)je ˇc´ıslov tabulce str´anekprvn´ı´urovnˇe, kter´aobsahuje odkazy na str´ankydruh´e´urovnˇe.Z tˇechto odkaz˚uje vybr´anten, kter´yodpov´ıd´adalˇs´ı ˇc´astiadresy (napˇr´ıkladdalˇs´ıch 10 bit˚u)a dostaneme se na druhou ´uroveˇn.Zde je bud’ pˇr´ımostr´anka s daty, anebo opˇetstr´anka s odkazy na n´asleduj´ıc´ı´uroveˇnstr´anek. V´ıme,ˇzemnoˇzstv´ıadresovateln´ehoprostoru je omezeno d´elkou adresy. Napˇr´ıklad32bitov´ysyst´em pouˇz´ıv´apro uloˇzen´ıadresy pouze 32 bit˚u(4 B) a horn´ıhranice je proto pˇribliˇznˇe4 GB. UNIXov´e syst´emy (a dokonce i nˇekter´everze Windows) vˇsakdovoluj´ı pouˇz´ıvat tak´eprostor nad touto hra- nic´ı(u 64bitov´ehosyst´emu to nem´amoc v´yznam,tam je standardnˇeadresovan´yprostor dostateˇcnˇe rozs´ahl´y,ale u 32bitov´ehosyst´emu to stoj´ıza ´uvahu). Jde o mechanismus PAE (Physical Address Extensions). Zpˇr´ıstupnˇen´ıfunguje doˇcasn´ymmapov´an´ımjedn´ez takov´ychto oblast´ıza horn´ıhranic´ı (obvykle je jich v´ıce)do adresovateln´eˇc´astirozsahu. Do celkem mal´ehoadresovateln´ehoprostoru si namapujeme vˇzdytu ˇc´ast neadresovateln´eho“ prostoru, se kterou pr´avˇechceme pracovat. ”  U novˇejˇs´ıch procesor˚use objevila ochrana proti spouˇstˇen´ık´oduna pamˇet’ov´ych str´ank´ach s daty. U procesor˚uAMD jde o NX bit (Non-Executive), u Intelu XD bit (Execute Disable). Operaˇcn´ısyst´em tento bit eviduje v bˇeˇzn´eevidenci str´anek,vˇzdypˇripˇr´ıstupuna str´ankuse obsah tohoto bitu uloˇz´ı do registru procesoru. Pokud m´astr´anka nastaven tento bit na 1, je povaˇzov´anaza datovou a pˇri pokusu o zach´azen´ıs obsahem str´ankyjako s k´odem(spuˇstˇen´ıinstrukc´ızde uloˇzen´ych) je vyvol´ana v´yjimka, kter´avˇetˇsinoukonˇc´ıukonˇcen´ımprocesu, kter´yse o to pokusil. Uˇcelemje´ zabr´anit´utok˚um typu pˇreteˇcen´ıpamˇeti.

3.5.2 NUMA architektura

Jak Windows, tak i prakticky vˇsechny zn´amˇejˇs´ı UNIXov´esyst´emy vyuˇz´ıvaj´ı na v´ıceprocesorov´em syst´emu symetrick´ymultiprocessing (SMP). To je z vˇetˇsiny hledisek v´yhoda, ale jednu nev´yhodu SMP pˇrecejen m´a:sd´ılenou pamˇet’ proces˚u.To, ˇzevˇsechny procesy sd´ılej´ıstejnou pamˇet’, m˚uˇzeb´yt´uzk´ym hrdlem syst´emu. Kapitola 3 Sprava´ pametiˇ 41

Reˇsen´ımje,ˇ opˇetv r˚uzn´ych operaˇcn´ıch syst´emech, podpora NUMA (podpora mus´ıb´ytsamozˇrejmˇe i na stranˇehardwaru). NUMA (Non-Uniform Memory Access) je architektura, kter´adˇel´ıpamˇet’ na uzly (nodes), coˇzjsou relativnˇesamostatn´eˇc´asti.Ke kaˇzd´emu uzlu je pamˇet’ovou sbˇernic´ıpˇripojen jeden nebo v´ıceprocesor˚u. Procesor m´ak pamˇetive sv´em“ uzlu velmi rychl´ypˇr´ıstup(tato technologie se pouˇz´ıv´azejm´ena ” u server˚u,kde se setk´ame s rychlejˇs´ımipamˇet’ov´ymisbˇernicemineˇzv bˇeˇzn´emdesktopu). M˚uˇzepˇristu- povat i k pamˇetiv jin´ych uzlech, ale jiˇzo dost pomaleji. Uˇcelemje´ tedy vymezen´ıpamˇetipro velmi rychl´ypˇr´ıstupza cenu rychlostn´ıhoomezen´ıpˇr´ıstupuke zbytku pamˇeti.Vedlejˇs´ım pˇr´ıjemn´ymefektem je, ˇzepamˇet’ov´eprostory r˚uzn´ych uzl˚ujsou adresov´any nez´avisle,tedy n´amvyjdou adresy pro mnohem v´ıcpamˇetineˇzbez NUMA.

3.5.3 Little a Big Endian

Pˇredpokl´adejme,ˇzeukl´ad´amevelk´eˇc´ıslo(v´ıceoktet˚u)do pamˇeti.V jak´empoˇrad´ıse jednotliv´eoktety cel´ehodatov´ehotypu ukl´adaj´ı? • Little Endian – nejniˇzˇs´ıoktet se zapisuje na niˇzˇs´ıadresu – , DEC Alpha • Big Endian – nejvyˇsˇs´ıoktet se zapisuje na niˇzˇs´ıadresu – Motorola, SPARC • Mixed Endian – pom´ıchanˇe– PDP PowerPC zvl´ad´aoboj´ı. Rozliˇsujedva m´ody:big a little.

M Pˇr´ıklad Rozd´ılmezi Little a Big Endian si uk´aˇzemena pˇr´ıkladu.Na adresu 400 (hexadecim´alnˇe)uloˇz´ımeˇc´ıslo o d´elce4 oktet˚u(postupujeme pˇresregistr EAX, protoˇzeinstrukce mov obvykle vyˇzaduje,aby alespoˇn jeden parametr byl registr) a pod´ıv´amese, v jak´empoˇrad´ıjsou jednotliv´eoktety uloˇzeny. mov EAX, 1234ABCDh mov [400h], EAX ; EAX je 32bitov´ydatov´yregistr Little Endian: Big Endian: • adresa 400h = CDh • adresa 400h = 12h • adresa 401h = ABh • adresa 401h = 34h • adresa 402h = 34h • adresa 402h = ABh • adresa 403h = 12h • adresa 403h = CDh 400 401 402 403 400 401 402 403 ... CD AB 34 12 ...... 12 34 AB CD ...

Vˇsechna uveden´aˇc´ıslajsou v ˇsestn´actkov´esoustavˇe. M

Probl´emy s Endians mohou nastat napˇr´ıkladpˇrikomunikaci s jin´ympoˇc´ıtaˇcemv s´ıti,kter´ypouˇz´ıv´a jin´epoˇrad´ı,pˇrikomunikaci se zaˇr´ızen´ım,kter´epouˇz´ıv´ajin´epoˇrad´ı(ovladaˇce). Reˇsen´ıvˇ UNIXov´ych syst´emech: • ruˇcn´ı“ konverze, ” • vˇetˇsinazaˇr´ızen´ıje Little Endian, I/O funkce operaˇcn´ıch syst´em˚us t´ımpoˇc´ıtaj´ıa Big Endian syst´emautomaticky prov´ad´ıkonverze, • v UNIXov´ych syst´emech existuj´ıBig Endian varianty I/O funkc´ıpro pˇr´ıpadkomunikace s ta- kov´ymizaˇr´ızen´ımi. Kapitola 3 Sprava´ pametiˇ 42

3.6 Spr´ava pamˇetiv nˇekter´ych operaˇcn´ıch syst´emech

3.6.1 MS-DOS

MS-DOS pouˇz´ıv´az´akladn´ı metodu segmentace pamˇeti,bˇeˇz´ıc´ımu procesu je pˇridˇeleno nˇekolik seg- ment˚u,z nichˇzkaˇzd´ym´astanoven´y´uˇcel (segment k´odu,datov´y,z´asobn´ıkov´y,pˇrekryvn´ypro naˇc´ıtan´e knihovny). Neexistuje prakticky ˇz´adn´amoˇznostochrany pamˇeti.Spuˇstˇen´yproces m˚uˇzepˇristupovat do kter´eko- liv ˇc´astipamˇetivˇcetnˇepamˇetivyhrazen´epro operaˇcn´ısyst´em,ˇcehoˇzse vyuˇz´ıv´apˇredevˇs´ımpˇripˇr´ıstupu k pˇreruˇcen´ım(pro ˇr´ızen´ıperifern´ıch zaˇr´ızen´ıapod.). Spr´ava pamˇetije prov´adˇenakombinac´ısegmentace a pˇridˇelen´ıjedn´esouvisl´eoblasti (je spuˇstˇenjeden bˇeˇzn´yproces a jsou mu pˇridˇeleny segmenty pamˇeti). Jde o jednoprogramov´ysyst´em,tedy m˚uˇzeb´ytspuˇstˇenvˇzdyjen jeden program. Ve skuteˇcnostisice m˚uˇzebˇeˇzetv´ıceprogram˚usouˇcasnˇe,ale pouze tak, ˇzenejdˇr´ıvjsou spuˇstˇeny tzv. rezidentn´ıprogramy (programy z˚ust´avaj´ıc´ıv pamˇetipo ukonˇcen´ısv´enerezidentn´ıˇc´asti– TSR, Terminate and Stay Resident1) a pak (tˇrebai jejich prostˇrednictv´ım)bˇeˇzn´yprogram. Pˇrijeho bˇehu rezidentn´ıprogramy nepracuj´ı,kromˇezpracov´an´ıpˇreruˇsen´ı,na kter´ajsou napojeny. Rezidentn´ıprogramy ˇcastoslouˇz´ık nahrazen´ınˇekter´efunkce operaˇcn´ıhosyst´emu (m´ıstonˇekter´e standardn´ıznakov´esady pro obrazovku pˇresmˇerov´avaj´ına takto pˇridanouspeci´aln´ıznakovou sadu), napojuj´ı se na pˇreruˇsen´ı (napˇr´ıklad antivirov´yprogram m˚uˇzeb´ytnapojen na pˇreruˇsen´ı souvisej´ıc´ı s pˇr´ıstupem k soubor˚um),vylepˇsuj´ıuˇzivatelsk´eprostˇred´ı(grafick´enebo pseudografick´emenu ke spou- ˇstˇen´ıprogram˚u),zabezpeˇcuj´ınˇekter´ed˚uleˇzit´eˇc´astisyst´emu (zabr´anˇen´ıpˇr´ıstupudo nˇekter´ych ˇc´ast´ı pamˇetinebo do MBR disku), rezidentnˇepracuj´ıovladaˇcezaˇr´ızen´ı(myˇs),atd. Napojen´ı se prov´ad´ı zaj´ımav´ym,i kdyˇznepˇr´ıliˇs bezpeˇcn´ymzp˚usobem. Na zaˇc´atkupamˇetije uloˇzenaposloupnost adres (vektor˚upˇreruˇsen´ı) jednotliv´ych rutin zajiˇst’uj´ıc´ıch obecn´eoˇsetˇren´ıurˇcit´eho pˇreruˇsen´ı,kaˇzd´aadresa odpov´ıd´ajednomu typu pˇreruˇsen´ı.Rezidentn´ıprogram nebo bˇeˇzn´yproces sem m˚uˇzem´ıstop˚uvodn´ıadresy uloˇzitadresu nˇekter´esv´efunkce ˇciprocedury, kter´apak bude v pˇr´ıpadˇevy- vol´an´ıtohoto pˇreruˇsen´ıautomaticky spuˇstˇena.Je zvykem, ˇzeproces si uschov´aadresu p˚uvodn´ırutiny a pˇrisv´emukonˇcen´ıji naˇctezpˇet,pˇr´ıpadnˇeji spouˇst´ıuvnitˇrsv´evlastn´ıfunkce pro oˇsetˇren´ıpˇreruˇsen´ı (proˇcnevyuˇz´ıtto, co uˇzje naprogramov´ano,kdyˇzchceme pouze prov´estnˇeconav´ıc). T´ımto zp˚usobem m˚uˇzeb´ytvytvoˇreno zˇretˇezen´ı“ v´ıcefunkc´ır˚uzn´ych TSR program˚ua samotn´ehoprocesu. ”

3.6.2 Windows

 Adresace ve Windows v chr´anˇen´emreˇzimu funguje takto: • pro r˚uzn´eobjekty vˇcetnˇeblok˚u(segment˚u)pamˇetise pouˇz´ıvaj´ı deskriptory (popisovaˇce,d´elka 8 B), kaˇzd´ydeskriptor obsahuje – data souvisej´ıc´ıs pouˇz´ıv´an´ım objektu (napˇr.u segmentu pamˇetium´ıstˇen´ı, velikost, typ, apod., u zaˇr´ızen´ıjeho identifikaci, popis, poˇzadavky na zdroje, atd.) – pˇr´ıstupov´aopr´avnˇen´ı(SID s jejich opr´avnˇen´ımi– ACL) • m´ıstopˇr´ım´ych adres segment˚use pouˇz´ıvaj´ı selektory; selektor je ukazatel na deskriptor (popi- sovaˇc)

1TSR programy maj´ıdvˇeˇc´asti– rezidentn´ıa nerezidentn´ı(doˇcasnou).Pˇristartu programu jsou naˇcteny obˇeˇc´asti, nerezidentn´ıˇc´astprovede jednor´azov´e“ inicializaˇcn´ıakce a je pak odstranˇenaz pamˇeti,z˚ust´av´arezidentn´ıˇc´astobsahuj´ıc´ı ” funkce napojen´ena oˇsetˇrovan´apˇreruˇsen´ı. Kapitola 3 Sprava´ pametiˇ 43 Proces ABCD GDT ... LDT deskriptor (ABCD) - ...... deskriptor (promˇenn´e) ... 6 Operaˇcn´ısyst´em Promˇenn´e - prom selektor offset ......

Instrukce ... read prom ...

Obr´azek3.7: Tabulky deskriptor˚uve Windows

• kaˇzd´yproces (vˇcetnˇesyst´emov´ych) m´asvou vlastn´ı LDT (Local Descriptor Table) s deskriptory vlastn´ıch objekt˚u • existuje tabulka GDT (Global Descriptor Table) veden´asyst´emem, ve kter´ejsou deskriptory tabulek LDT vˇsech proces˚u • selektor je ukazatel do tabulky deskriptor˚u,obsahuje – index ˇr´adkuv dan´etabulce LDT nebo GDT (u pamˇetijde o deskriptor dan´ehosegmentu), – informaci, zda jde o index v GDT (bit je nastaven na 0) nebo LDT (nastaven na 1), – dva bity pro ´uroveˇnopr´avnˇen´ı(u Windows je to 00 pro ring0 nebo 11 pro ring3) • v uˇzivatelsk´emreˇzimu jsou v segmentov´ych registrech selektory, tj. adresujeme dvojic´ı selek- tor:offset • segmenty jsou d´aledˇeleny na str´anky, tj. pˇrekladvirtu´aln´ıadresy selektor:offset na fyzickou je v´ıce´urovˇnov´y

 Sd´ılen´ıpamˇeti. V 16bitov´ych Windows (do verze 3.x) bylo sd´ılen´ıpamˇeti zcela bˇeˇzn´e,a to vˇcetnˇedynamicky linkovan´ych knihoven. Pokud nˇekter´yproces chtˇelvyuˇz´ıvat funkce nebo objekty uloˇzen´ev nˇekter´eknihovnˇe,pˇriprvn´ıˇz´adostio nalinkov´an´ıobsahu t´etoknihovny se jej´ıobsah naˇcetl do operaˇcn´ıpamˇetia proces dostal odkaz na tuto adresu. Pˇriˇz´adostidalˇs´ıhoprocesu se pak knihovna nenaˇc´ıtalado pamˇetiznovu, ale dalˇs´ıproces jen dostal odkaz na tut´eˇzadresu v pamˇeti,tedy oba procesy mohly pˇristupovat k t´eˇzeoblasti pamˇeti.Toho procesy vyuˇz´ıvaly tak´ek meziprocesorov´ekomunikaci. V 32bitov´ych Windows byly jiˇztyto aktivity omezeny. Pokud proces poˇz´ad´ao pˇr´ıstupk dynamicky linkovan´eknihovnˇe(nebo jak´emukoliv jin´emu souboru), je obsah knihovny nejdˇr´ıvzpˇr´ıstupnˇenpro ˇcten´ı,ale pˇripokusu o z´apisje namapov´an do adresov´ehoprostoru tohoto procesu (copy-on-write), tedy proces zapisuje do sv´evlastn´ısoukrom´ekopie. Tak je knihovna v pamˇetinaˇctena i v´ıcekr´at.Jako sd´ılenoupamˇet’ lze vˇsakpouˇz´ıt objekty exekutivy k tomu urˇcen´e(brali jsme na cviˇcen´ıch), kter´ena rozd´ılod knihoven jsou transparentnˇejˇs´ıa poskytuj´ılepˇs´ımoˇznostinastaven´ıpˇr´ıstupov´ych opr´avnˇen´ı. Nicm´enˇesd´ılen´ıpamˇetije moˇzn´ei v novˇejˇs´ıch Windows – existuje objekt pro sd´ılen´y´usekpamˇeti. Kapitola 3 Sprava´ pametiˇ 44

 Rozdˇelen´ıadresov´ehoprostoru. Adresov´yprostor procesu je rozdˇelenna dvˇeˇc´asti– spodn´ı ˇc´ast(niˇzˇs´ıadresy) je mu plnˇek dispozici (k´od,promˇenn´e,z´asobn´ık,vlastn´ıknihovny), m˚uˇzezde ˇc´ıst i zapisovat, pˇristupujese do n´ıv uˇzivatelsk´emreˇzimu. Horn´ıˇc´astje pro ´uˇcelykomunikace s privilego- van´ymreˇzimem,mapuj´ıse zde syst´emov´eknihovny a dalˇs´ıobjekty, m˚uˇzezde pouze ˇc´ıst,resp. volat zde uloˇzen´efunkce. Na 32bitov´emsyst´emu lze adresovat pouze pˇribliˇznˇe4 GB virtu´aln´ıpamˇeti,rozdˇelen´ı2+2 (tj. 2 GB je pro uˇzivatelsk´yreˇzim,tedy pˇr´ımopro proces, dalˇs´ı2 GB je pro privilegovan´yreˇzim).Ve Windows XP, Server 2003 a vyˇsˇs´ıch lze prov´estzmˇenu na 3+1. Na 64bitov´emsyst´emu lze adresovat 16 TB pamˇeti(tˇrebaˇzetechnicky by se dalo v´ıce),z toho opˇet polovina je pˇr´ımopro proces a druh´apro syst´em.  Vˇetˇsinapamˇetiprocesu je str´ankovan´a (paged), tj. m˚uˇzeb´ytodkl´ad´ana,ale procesy (a pˇredevˇs´ım j´adro)maj´ıtak´e nestr´ankovanoupamˇet’ (nonpaged) pouˇz´ıvanou ˇcasovˇekritick´ymifunkcemi (napˇr´ıklad obsluha IRQ nebo vol´an´ıDPC, podrobnˇejiv kapitol´ach o komunikaci proces˚ua spr´avˇezaˇr´ızen´ı).  Virtualizace pamˇeti. Windows pouˇz´ıvaj´ı virtu´aln´ı metodu segmentace se str´ankov´an´ım na ˇz´adost. Kaˇzd´yproces m´apˇridˇeleny sv´esegmenty a ty jsou rozdˇeleny na str´anky. Pˇripotˇrebˇeuvolnˇen´ı r´amc˚uv operaˇcn´ıpamˇetise pro v´ybˇer obˇeti“ pouˇz´ıv´ana jednoprocesorov´ych syst´emech hodinov´y ” algoritmus, na v´ıceprocesorov´ych syst´emech v kombinaci s algoritmem FIFO.  Str´ankovac´ısoubor se obvykle jmenuje pagefile.sys a je na syst´emov´emdisku, ale ve skuteˇcnosti m˚uˇzemem´ıt v´ıce str´ankovac´ıch soubor˚u(v tom pˇr´ıpadˇeby vˇsakkaˇzd´ymˇelb´ytna jin´empevn´em disku). N´azvystr´ankovac´ıch soubor˚unajdeme v kl´ıˇci HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Management, a to v poloˇzcetypu pole ˇretˇezc˚u PagingFiles. Pokud m´amev´ıcestr´ankovac´ıch soubor˚u,mˇel by b´ytkaˇzd´yna jin´em fyzick´em disku (pokud je jich v´ıcna stejn´emfyzick´emdisku, tˇrebai na jin´ych odd´ılech, m˚uˇzeto syst´emdokonce zpomalit). Um´ıstˇen´ıstr´ankovac´ıhosouboru do samostatn´ehoodd´ıluna disku (oddˇelenˇeod odd´ıl˚use syst´emem a daty) m˚uˇzeb´ytuˇziteˇcn´enapˇr´ıkladproto, ˇzetakto nehroz´ıfragmentace str´ankovac´ıhosouboru (ale na druhou stranu tady m´amehorn´ıohraniˇcen´ıpamˇet’ov´eoblasti, kter´am˚uˇzeb´ytpro str´ankov´an´ıvyuˇzita). V tomt´eˇzkl´ıˇcije jeˇstˇejedna zaj´ımav´apoloˇzka – ClearPageFileAtShutdown. Pokud existuje a je nastaven´ana 1, pˇredkaˇzd´ym(regul´ern´ım) vypnut´ım syst´emu se smaˇze str´ankovac´ı soubor. To je d˚uleˇzit´ez hlediska bezpeˇcnosti,protoˇzev str´ankovac´ımsouboru se mohou nach´azetd˚uleˇzit´einformace, kter´eby se nemˇelydostat do nepovolan´ych rukou (jist´averze Windows takto zveˇrejnila“ nezaˇsifrovan´e ” heslo administr´atora). Moˇznostnastavit um´ıstˇen´ıodkl´adac´ıhosouboru v syst´emech s NT j´adremje v´yhodn´av pˇr´ıpadˇe, ˇzem´amenainstalov´anov´ıcesyst´em˚urodiny Windows (napˇr´ıkladWindows 98 a XP) a chceme, aby pouˇz´ıvaly tent´yˇzodkl´adac´ısoubor.

3.6.3 UNIXov´esyst´emy vˇcetnˇeLinuxu

P˚uvodn´ıUNIX bˇeˇzelna hardwaru, kter´ynepodporoval ochranu pamˇeti, segmentaci ani virtualizaci (poˇc´ıtaˇcPDP-7). Spr´ava pamˇetiprob´ıhalaformou podobnou metodˇepˇridˇelov´an´ıjedn´esouvisl´eob- lasti pamˇetis vylepˇsen´ymmultiprogramov´an´ımbl´ızk´ymprav´emu multitaskingu. Pˇrispuˇstˇen´ıdalˇs´ıho procesu byl cel´ypamˇet’ov´yprostor dosud bˇeˇz´ıc´ıhoprocesu odloˇzen(swapov´an)na disk. V pomˇernˇekr´atk´edobˇe,jak byl UNIX portov´an(pˇreloˇzen, pˇreps´an)na dalˇs´ıhardwarov´eplatformy, byla implementov´anapodpora virtu´aln´ıpamˇetise segmentac´ıi ochrany pamˇeti,ale zp˚usobodkl´ad´an´ı Kapitola 3 Sprava´ pametiˇ 45 z˚ustaldlouho podobn´y– odloˇzenbyl vˇzdypamˇet’ov´yprostor cel´eho odkl´adan´ehoprocesu, ne pouze jedna str´anka, tedy byla pouˇz´ıv´anavirtu´aln´ımetoda swapov´an´ıproces˚u.Pˇrestobyly pouˇz´ıv´any i seg- menty, mohou b´ytsd´ıleny.  Rozdˇelen´ıadresov´ehoprostoru. Pokud se jedn´ao 32bitov´ysyst´em(ty se dnes pouˇz´ıvaj´ı sp´ıˇsepro specifick´ehardwarov´earchitektury), je procesu k dispozici 4 GB virtu´aln´ıpamˇeti,pouˇz´ıv´ase obvykle rozdˇelen´ı3+1 (tj. 3GB pro uˇzivatelsk´yprostor, 1 GB pro privilegovan´yreˇzim). Na 64bitov´ych syst´emech je k dispozici 256 TB pamˇetia dˇel´ıse vˇetˇsinouna poloviny (tj. 128 TB pro proces, 128 TB pro privilegovan´yreˇzim). https://www.berthon.eu/wiki/foss:wikishelf:linux:memory   Virtualizace pamˇeti. T´emˇeˇrvˇsechny dneˇsn´ıvˇetˇs´ıUNIXov´esyst´emy vˇcetnˇeLinuxu zvolily jinou formu virtualizace pamˇeti– str´ankov´an´ına ˇz´adostnebo str´ankov´an´ıse segmentac´ına ˇz´adost (to je tak´epˇr´ıpadLinuxu2). Kaˇzd´yproces m´aˇctyˇri segmenty – segment k´odu,segment pro glob´aln´ıdata, z´asobn´ıkpro uˇziva- telsk´yreˇzim,z´asobn´ıkpro reˇzimj´adra.Glob´alnˇealokovan´adata a z´asobn´ıkjsou na adres´ach proti ” sobˇe“ (z´asobn´ıkroste smˇeremk datov´emu segmentu). Pˇrestoˇzejiˇznejde o swapov´an´ı,i nad´alese pouˇz´ıv´apojem swapovac´ısoubor nebo swapovac´ıoblast na disku. Aby se spr´ava str´anekco nejv´ıcezjednoduˇsila,jsou str´ankysdruˇzov´any do skupin. Str´ankov´an´ı je v´ıce´urovˇnov´e(tj. evidence str´aneka jejich zpracov´an´ıje v nˇekolika ´urovn´ıch). Poˇcet´urovn´ıse liˇs´ı na r˚uzn´ych hardwarov´ych platform´ach – na 32bitov´emprocesoru staˇc´ıdvˇe´urovnˇe(glob´aln´ıadres´aˇr str´aneka tabulky str´anek), pˇr´ıpadnˇeje nutn´epˇridattˇret´ı´uroveˇnmezi nˇe(stˇredn´ıadres´aˇrstr´anek),na 64bitov´emprocesoru se pouˇz´ıvaj´ıtˇri(aˇzˇctyˇri)´urovnˇe.  V´ybˇerobˇetije prov´adˇenpomoc´ı modifikace hodinov´ehoalgoritmu (pseudoLRU), s ohledem na v´ıce´urovˇnov´estr´ankov´an´ı.Indikace star´ych“ str´aneknen´ıpouze dvouhodnotov´a,ale pohybuje se v in- ” tervalu 0...20, kdy 0 znamen´a starou“ str´anku velmi vhodnou k odloˇzen´ı.Pˇrikaˇzd´empˇr´ıstupuna ” str´ankuje tato hodnota zv´yˇsena(ve v´ychoz´ımnastaven´ıo 3 aˇzk maximu), spr´avce pamˇetineust´ale (hodinov´yalgoritmus) proch´az´ıvˇsechny tyto hodnoty a sniˇzuje(ve v´ychoz´ımnastaven´ıo 1).

£ Postup M˚uˇzemem´ıt v´ıcodkl´adac´ıch soubor˚u(plus odkl´adac´ıodd´ıl).Dalˇs´ıodkl´adac´ısoubor vytvoˇr´ımetakto: • vytvoˇr´ımesouvisl´ysoubor na disku naplnˇen´ysymboly #0 (ne nulami!), • oznaˇc´ımeho jako swapovac´ı(odkl´adac´ı)soubor, • zapneme swapov´an´ıdo tohoto souboru (m˚uˇzeme kdykoliv vypnout). Napˇr´ıkladpokud chceme vytvoˇritodkl´adac´ısoubor o velikosti 65536 str´anekpo 4 kB (coˇzje 4096 B): dd if=/dev/zero of=/novy_swap bs=4096 count=65536 mkswap /novy_swap swapon /novy_swap

Tak´ebychom mˇelitento soubor zapsat do souboru /etc/fstab:

/novy_swap none swap sw 0 0 £

2V literatuˇrese vˇetˇsinoudoˇcteme,ˇzeLinux pouˇz´ıv´astr´ankov´an´ına ˇz´adost,ale ve skuteˇcnostikaˇzd´yproces m´asv´e segmenty a ty jsou str´ankov´any. Kapitola 3 Sprava´ pametiˇ 46

 Sd´ılen´ıa mapov´an´ı. Tyto syst´emy podporuj´ınˇekolik zaj´ımav´ych prvk˚uspr´avypamˇeti,napˇr´ı- klad vedle n´amjiˇzzn´am´ehoa bˇeˇznˇepouˇz´ıvan´eho copy-on-write se setk´ames mechanismem sd´ılen´ık´odu program˚u: pokud je spuˇstˇenov´ıceproces˚u– instanc´ıjednoho programu, mohou sd´ıletˇc´astpamˇeti,ve kter´eje naˇctenk´odprogramu. Podobnˇepracuje funkce mapov´an´ı soubor˚u, kdy do adresov´ehoprostoru m˚uˇzeb´ytnamapov´an kter´ykoliv soubor. Pro mapov´an´ıobvykle m´amejeden ze dvou d˚uvod˚u: • chceme, aby bylo moˇzn´ese souborem pˇr´ımo na disku (obecnˇevnˇejˇs´ımpamˇet’ov´emm´ediu) pra- covat stejnˇejako kdyby byl naˇctendo operaˇcn´ıpamˇeti(pˇresnˇejichceme se souborem pracovat jako s operaˇcn´ıpamˇet´ı,samozˇrejmˇeaˇzna rychlost), ale ve skuteˇcnostitento soubor v operaˇcn´ı pamˇetinechceme (napˇr´ıkladz d˚uvodu znaˇcn´evelikosti souboru), m˚uˇzej´ıttak´eo spustiteln´yk´od rozs´ahlejˇs´ıhoprogramu (tedy segment k´oduby z˚ustalna disku), • implementace sd´ılen´epamˇeti jak´ekoliv velikosti – sd´ılen´apamˇet’ pˇr´ımo v operaˇcn´ı pamˇetije bezpeˇcnostn´ımrizikem, proto je mnohem jednoduˇsˇs´ıa bezpeˇcnˇejˇs´ıvytvoˇrit(simulovan´y)sd´ılen´y ´usekpamˇetipˇr´ıstupn´yv´ıceproces˚umna vnˇejˇs´ımpamˇet’ov´emm´ediu. Mechanismus mapov´an´ıje velmi univerz´aln´ı,ve skuteˇcnostise pouˇz´ıv´anapˇr´ıkladi pˇripr´acis odkl´a- dac´ımprostorem. VˇetˇsinaUNIXov´ych syst´em˚utak´eumoˇzˇnujev pˇr´ıpadˇepˇr´ıstupuna odloˇzenoustr´ankuv reˇzimu pouze pro ˇcten´ıpˇreˇc´ıstdata pˇr´ımoz odloˇzen´estr´anky(nebo pamˇetiprocesu v pˇr´ıpadˇeswapov´an´ı), coˇzurychluje pˇr´ıstupk odloˇzen´ymdat˚um(nen´ınutn´evyvolat pˇreruˇsen´ı,hledat obˇet’, pˇresouvat bloky pamˇeti). UNIXov´esyst´emy jsou portov´any na mnoha r˚uzn´ych hardwarov´ych platform´ach, proto je ochrana pamˇetina r˚uzn´e´urovni. Obvykle vˇsakUNIXov´esyst´emy vyuˇz´ıvaj´ıvˇsechny moˇznosti,kter´edan´ahard- warov´aarchitektura nab´ız´ı,pˇrinejmenˇs´ımpodporu privilegovan´ehoa uˇzivatelsk´ehoreˇzimu a ochranu segment˚u.

 Adresov´yprostor. Kaˇzd´yproces m´apˇridˇelen deskriptor pamˇeti (jeden nebo v´ıce), coˇzje struktura obsahuj´ıc´ıveˇsker´einformace o virtu´aln´ıpamˇetipˇridˇelen´eprocesu a tak´esouvisej´ıc´ıfunkce (napˇr´ıkladpˇr´ıstupna strukturu usnadˇnuj´ıc´ıvyhled´av´an´ıve str´ank´ach, poˇcetnamapovan´ych oblast´ı,ad- resa prvn´ınamapovan´eoblasti, celkov´avelikost virtu´aln´ıpamˇetinamapovan´eprocesu, synchronizaˇcn´ı objekty souvisej´ıc´ıs pamˇet´ı,funkce pro odmapov´an´ıoblasti, atd.) Deskriptor pamˇetije dostupn´yv deskriptoru procesu.3

Dalˇs´ıinformace:  O principu spr´avypamˇetiv Linuxu se doˇctemenapˇr´ıkladna adres´ach http://www.makelinux.net/reference http://www.nuc.elf.stuba.sk/lit/ldp/04/040-03.htm.



3V deskriptoru procesu najdeme pˇredevˇs´ımstruktury a odkazy souvisej´ıc´ıs pˇridˇelen´ymiprostˇredky a komunikaˇcn´ımi n´astroji, napˇr´ıklad ukazatele na deskriptory soubor˚u,ukazatele na deskriptory pamˇeti,moment´aln´ı pracovn´ı adres´aˇr procesu, termin´al,na kter´emproces bˇeˇz´ı,strukturu pro evidenci sign´al˚u,atd. Kapitola 4 Procesy

V t´etokapitole se sezn´am´ımese z´akladyspr´avyproces˚u.Definujeme proces a jeho vlastnosti, probereme z´akladn´ı formy multitaskingu, budeme se zab´yvatproblematikou pˇridˇelov´an´ı procesoru a moˇznostmi synchronizace proces˚u.

4.1 Evidence proces˚u

4.1.1 Pojmy proces a ´uloha

 Zat´ımco program je jen soubor na vnˇejˇs´ımpamˇet’ov´emm´ediuobsahuj´ıc´ık´od(instrukce) a pˇr´ıpadnˇe nˇejak´akonstantn´ıdata, proces je instance programu urˇcen´anejen jeho k´odem,ale i dalˇs´ımivlastnostmi, jako je jeho stav, priorita, identifikaˇcn´ıˇc´ıslo,programov´yˇc´ıtaˇc,pˇridˇelen´eprostˇredky(vˇcetnˇepamˇeti), atd. Zjednoduˇsenˇese d´aˇr´ıct,ˇzeproces je bˇeˇz´ıc´ıprogram, ale to nen´ı´uplnˇepˇresn´e(proces nemus´ınutnˇe vzniknout z programu, i kdyˇzvˇetˇsinoutomu tak b´yv´a,pˇresnˇejˇs´ıby bylo napˇr´ıklad spuˇstˇen´ız k´odu ” nˇekter´efunkce“). Situace je komplikovanˇejˇs´ıve v´ıcevl´aknov´ych syst´emech. Vl´akny se budeme zab´yvat pozdˇeji,zde zat´ım staˇc´ı, ˇze vl´akno je relativnˇesamostatn´aˇc´astprocesu vykon´avaj´ıc´ı sv˚ujvlastn´ı k´od(vl´akno obvykle vykon´av´anˇekteroufunkci procesu). Proces m´avˇzdynejm´enˇejedno (hlavn´ı) vl´akno,kter´e vykon´av´ajeho hlavn´ıfunkci, a d´alem˚uˇzeprogram´atorrozdˇelitbˇehprocesu na v´ıcevl´aken, kter´apak mohou b´ytvykon´av´ananavz´ajemnez´avisle.  Pokud proces vznikl spuˇstˇen´ımz bin´arn´ıhospustiteln´ehosouboru, pak tento soubor naz´yv´ame obrazem procesu. Obraz je tedy soubor, z nˇehoˇzproces z´ıskal k´od,kter´yprov´ad´ı.Jestliˇzespouˇst´ıme textov´yspustiteln´ysoubor (skript), obrazem je ve skuteˇcnostijeho interpretaˇcn´ıprogram (napˇr´ıklad Pˇr´ıkazov´yˇr´adekve Windows nebo nˇekter´yshell v UNIXov´ych syst´emech).  Proces se m˚uˇzenach´azetv r˚uzn´ych stavech: • nov´y (new) – proces byl pr´avˇevytvoˇren,jsou mu pˇridˇelov´any prostˇredky, • bˇeˇz´ıc´ı (running) – proces m´apr´avˇepˇridˇelenprocesor, tedy jeho k´odje vykon´av´an, • pˇripraven´y (ready) – ˇcek´ana pˇridˇelen´ıprocesoru, • ˇcekaj´ıc´ı (waiting) – ˇcek´ana pˇr´ıstupk I/O prostˇredku,o kter´ypoˇz´adalnebo ˇcek´ana ud´alost (napˇr´ıkladstisknut´ıkl´avesy), • ukonˇcen´y (terminated, zastaven´y)– proces byl ukonˇcen.

47 Kapitola 4 Procesy 48

pˇridˇelenprocesor- nov´y  - pˇripraven´y  bˇeˇz´ıc´ı  inicializace  odebr´anprocesor procesu 6        (pˇridˇelen´ıprostˇredk˚u)     ˇcek´ana ukonˇcen zaˇr´ızen´ıpouˇzitoa uvolnˇeno  pˇridˇelen´ı   I/O zaˇr´ızen´ı ? + nebo ud´alost ˇcekaj´ıc´ı  ukonˇcen´y 

Obr´azek4.1: Pˇrechody mezi stavy procesu  

Proces mezi tˇemitostavy pˇrech´az´ıtak, jak je naznaˇcenona obr´azku 4.1. V r´amcinˇekter´ych operaˇcn´ıch syst´em˚umohou b´ytdefinov´any i dalˇs´ıstavy. Napˇr´ıkladv UNIXov´ych syst´emech m˚uˇzeb´ytproces nav´ıcv jednom z tˇechto stav˚u: • pozastaven´y – prov´adˇen´ıprogramu je pozastaveno (to se prov´ad´ısign´alemSIGTRAP), obvykle poˇzadavkem debuggeru, typicky pˇriladˇen´ıprogramu, • zombie – program byl vpodstatˇeukonˇcen,uˇznem´aˇz´adn´yk´odk prov´adˇen´ıa nedost´av´aprocesor, ale jeho prostˇredky(vˇcetnˇePID) jeˇstˇenebyly uvolnˇeny, to se pouˇz´ıv´anapˇr´ıkladtehdy, kdyˇzsi rodiˇcovsk´yproces tohoto procesu explicitnˇevyˇz´adaltento typ ukonˇcen´ı,aby mˇeldost ˇcasuna vyzvednut´ı“ v´ysledk˚uˇcinnostitohoto sv´ehopotomka, ” • uspan´y (sleeping) – proces (ˇcastˇejivl´akno)ˇcek´ana splnˇen´ıpodm´ınky, napˇr´ıklad uplynut´ıˇcasov´eho intervalu nebo nˇekterouud´alost.  Pojem ´uloha b´yv´avysvˇetlov´anr˚uznˇe(tak´ev r˚uzn´ych operaˇcn´ıch syst´emech). Existuj´ınapˇr´ıklad tak´etiskov´e´ulohy nebo ´ulohy pl´anovan´epro spuˇstˇen´ı,zde vˇsakbudeme hovoˇritsp´ıˇseo ´uloh´ach bˇeˇz´ıc´ıch na procesoru, tj. vznikl´ych spuˇstˇen´ım k´odu(jin´ymislovy, procesor pl´anuje ´ulohy, coˇzjsou obvykle vl´akna). Ve Windows se pojem ´ulohav tomto smyslu moc nepouˇz´ıv´a,ale v UNIXov´ych syst´emech je bˇeˇzn´y a velmi d˚uleˇzit´y. Uloha´ je zde objektem, jehoˇzk´odse sekvenˇcnˇevykon´av´a.B´yv´ato obvykle jedno vl´aknoaplikace, ale v pˇr´ıpadˇevl´aken, jejichˇzk´odje sekvenˇcnˇepropojen (napˇr´ıkladpˇresrouru) mohou b´ytsouˇc´ast´ıt´eˇze´ulohy i dalˇs´ıvl´akna(sekvenˇcnˇena sebe navazuj´ıc´ı).

4.1.2 Bin´arn´ıspustiteln´esoubory

Kaˇzd´ybin´arn´ısoubor m´asv˚ujpˇredepsan´yform´at,a t´yk´ase to tak´ebin´arn´ıch spustiteln´ych soubor˚u a knihoven. Obvykle m´ajedno nebo v´ıcez´ahlav´ıse specifick´ymiinformacemi, napˇr´ıkladpouˇzit´yform´at, pouˇzit´einstrukˇcn´ı sady, odkazy na knihovny, kter´ejsou v k´oduvyˇzadov´any (maj´ı b´ytdynamicky pˇrilinkov´any), atd., tedy vˇse,co potˇrebujespr´avce proces˚uzn´atpˇrispouˇstˇen´ıprocesu z tohoto souboru.  Form´aty ve Windows. Windows PE (Portable Executable) je urˇcenpro 32bitov´enebo 64bitov´e syst´emy Windows (od Windows NT 3.1 a Windows 95). Vedle p˚uvodn´ıhoPE existuj´ırozˇs´ıˇren´ı.NET PE (pro .NET aplikace) a PE+ (tak´eoznaˇcujemePE32+, pro 64bitov´aWindows). Podle z´avislost´ı rozliˇsujeme • PE vyˇzaduj´ıc´ıbˇehv subsyst´emu Win32 (pˇredspuˇstˇen´ımmus´ıb´ytfunkˇcn´ısubsyst´emWin32 /Windows spuˇstˇen´ysouborem csrss.exe), Kapitola 4 Procesy 49

• nativn´ı PE nevyˇzaduj´ıc´ı pˇredemspuˇstˇen´y csrss.exe, napˇr´ıklad smss.exe nebo samotn´ysub- syst´emWin32 (proces csrss.exe). Naprost´avˇetˇsinabin´arn´ıch spustiteln´ych soubor˚ua knihoven ve Windows je prvn´ıhotypu (vyˇzaduj´ı bˇehsubsyt´emu Win32/Windows).

 Form´aty v Linuxu. Form´at ELF (Executable and Linkable Format) je v souˇcasn´edobˇe nejbˇeˇznˇejˇs´ımform´atempro tyto ´uˇcelyv Linuxu, dalˇs´ımobvykl´ym(starˇs´ıma uˇzm´enˇeˇcast´ym) form´atem je a.out.

 Pozn´amka: Pro spr´avnouidentifikaci form´atunen´ıdobr´espol´ehatna pˇr´ıponu souboru. Napˇr´ıkladve Windows pouˇz´ıvaj´ı pˇr´ıponu exe jak PE soubory, tak i starˇs´ı DOS executable soubory, a v Linuxu dokonce spustiteln´esoubory ˇcastonem´ıvaj´ıv˚ubec ˇz´adnoupˇr´ıponu. Z´akladn´ıidentifikace se d´aprov´estobvykle podle prvn´ıch oktet˚usouboru. U Linuxu je to celkem jednoduch´e,ELF soubor m´av prvn´ıch tˇrech oktetech znaky ELF“. U Windows se v pˇr´ıponˇe exe ” setk´amese zaˇc´atkem souboru PE“, to je PE soubor, d´ale MZ“ znamen´astar´yDOS spustiteln´y ” ” soubor, a NE“ (New Executable) pro starˇs´ıWindows do verze 3.11 (a vˇsechny maj´ıopravdu stejnou ” pˇr´ıponu). 

 U obou hlavn´ıch form´at˚uve Windows (PE) a v Linuxu (ELF) rozliˇsujeme • k´odlinkovan´y staticky – pˇripˇrekladuprogramu, je pak souˇc´ast´ı pˇrekl´adan´eho spustiteln´eho souboru ˇciknihovny, podle toho, co pˇrekl´ad´ame, • k´odlinkovan´y dynamicky – linkuje se do k´odupˇrikaˇzd´emnov´emspuˇstˇen´ıprogramu, tento k´od je uloˇzenzvl´aˇst’ v (dynamicky linkovan´ych) knihovn´ach (ve Windows vˇetˇsinou .dll, v Linuxu obvykle .so, m˚uˇzen´asledovat oznaˇcen´ıverze knihovny).

4.1.3 Datov´estruktury souvisej´ıc´ıs procesy

 Spr´avce proces˚uvede tabulku proces˚u(jednu nebo pravdˇepodobnˇejinˇekolik tabulek, navz´ajem se na sebe odkazuj´ıc´ıch), z´aznamv t´etotabulce o konkr´etn´ımprocesu zde budeme pro zjednoduˇsen´ı naz´yvat Process Controll Block (PCB). Je to souhrn vˇsech dat, kter´aoperaˇcn´ısyst´empotˇrebujek ˇr´ızen´ı procesu. Souˇc´ast´ıPCB obvykle b´yvaj´ıtyto informace: • PID (identifikaˇcn´ıˇc´ıslo procesu), pˇr´ıpadnˇedalˇs´ıidentifikaˇcn´ıˇc´ıslaurˇcuj´ıc´ınapˇr´ıklad pˇr´ıstupov´a pr´ava nebo vztah k jin´ymproces˚um, • stav procesu, • programov´yˇc´ıtaˇcurˇcuj´ıc´ı,kter´ainstrukce se pr´avˇeprov´ad´ı(nebo m´ab´ytprovedena), • hodnoty registr˚u, • ukazatele do front, ve kter´ych proces ˇcek´a(procesor, I/O zaˇr´ızen´ı), • informace pro spr´avce pamˇeti(tabulky obsazen´ıpamˇeti,evidence str´anek,segment˚uprocesu), • ´uˇctovac´ıinformace (t´ykaj´ıc´ıse pˇridˇelov´an´ıprocesoru), • dalˇs´ımoment´alnˇepˇridˇelen´eprostˇredky(zaˇr´ızen´ı,otevˇren´esoubory), atd. podle potˇrebsyst´emu. Kapitola 4 Procesy 50

Evidence proces˚uve Windows ˇradyNT. Pouˇz´ıvaj´ıse tyto datov´estruktury: • EPROCESS (blok procesu pro potˇreby exekutivy) – obsahuje nˇekter´evlastnosti procesu (PID, n´azev procesu, stanice oken – viz cviˇcen´ı,atd.) a tak´eodkazy na mnoho dalˇs´ıch datov´ych struktur souvisej´ıc´ıch s procesem (prakticky k ˇcemukoliv, co se t´yk´aprocesu, se d´adostat odsud, vˇcetnˇe vyuˇz´ıv´an´ı pamˇeti a bezpeˇcnostn´ıch informac´ı), tak´eodkaz na z´aznamn´asleduj´ıc´ıho procesu, nach´az´ıse v j´adˇre(oblast exekutivy), • ETHREAD – tot´eˇzpro vl´akno,bloky EPROCESS obsahuj´ı odkazy na bloky ETHREAD vl´aken sv´eho procesu, • PEB (Process Environment Block) – nach´az´ıse pˇr´ımov adresov´emprostoru procesu a je dostupn´y z bloku EPROCESS, obsahuje informace, kter´emusej´ıb´ytdosaˇziteln´ev uˇzivatelsk´emreˇzimu (napˇr. adresu haldy, synchronizaˇcn´ıinformace, seznam knihoven – modul˚u– procesu, tabulku handl˚u GDI objekt˚u– viz cviˇcen´ı, • TEB (Thread Environment Block) – obdoba pro vl´akna, • KPROCESS, tak´e PCB – je souˇc´ast´ı bloku EPROCESS, obsahuje informace potˇrebn´epro pl´anov´an´ı procesoru (ˇcasov´e´udaje, prioritu, afinitu, stav procesu, kvantum, atd.), • atd. (o procesu si vede informace tak´enapˇr´ıkladpodsyst´emWin32, a to zvl´aˇst’ v uˇzivatelsk´em prostoru a zvl´aˇst’ v prostoru j´adra). Jak vid´ıme,jedn´ase o v´ıce´urovˇnovou a pomˇernˇesloˇzitouevidenci, kter´aobsahuje nˇekter´adata redun- dantnˇe. Evidence proces˚uv Linuxu. V Linuxu se setk´ames tˇemitodatov´ymistrukturami: • task – jedn´ase o vektor (pole) ukazatel˚una struktury typu task_struct pro jednotliv´eprocesy, a to v reˇzimu j´adra, • task_struct je hlavn´ıdatov´astruktura procesu, to, co v pˇredchoz´ımv´ykladuoznaˇcujemejako PCB; obsahuje PID, informace o stavu procesu a tak´eo ukonˇcuj´ıc´ımstavu procesu (zde pozn´ame, jestli proces skonˇcil,pˇr´ıpadnˇe,jestli je ve stavu zombie), rodinn´e“ informace (ukazatel na ” sv´ehorodiˇce,sourozence, potomky), pl´anov´an´ı na procesoru, odkazy na struktury souvisej´ıc´ı s pˇridˇelenoupamˇet´ıa dalˇs´ımizdroji, kontext procesu, • dalˇs´ı datov´estruktury, na kter´evede odkaz z task_struct, napˇr´ıklad ve struktuˇre mm_struct (deskriptor pamˇetiprocesu) najdeme vˇse,co souvis´ıse spr´avou pamˇeti pˇridˇelen´eprocesu.

4.1.4 Priority proces˚u

Kaˇzd´yproces m´apˇriˇrazenu svou prioritu. Tato priorita je pouˇz´ıv´anak r˚uzn´ym´uˇcel˚um,pˇredevˇs´ımpˇri pl´anov´an´ıpˇridˇelov´an´ıprocesoru (proces s vyˇsˇs´ıprioritou m´apˇrednostpˇredprocesem s niˇzˇs´ıprioritou).  Obvykle rozliˇsujemeprioritu • z´akladn´ı (base) – proces ji dostane pˇridˇelenoupˇrisv´emvzniku, obvykle se po celou dobu ˇcinnosti procesu nemˇen´ı(vyjma pouˇzit´ık tomu urˇcen´ych pˇr´ıkaz˚u,coˇznen´ıaˇztak obvykl´e), • dynamickou – pohybuje se v ´uzk´emokruhu kolem z´akladn´ıpriority, pouˇz´ıv´ase k doˇcasn´emu zv´yhodˇnov´an´ınebo naopak znev´yhodˇnov´an´ıprocesu v souvislosti s vyuˇz´ıv´an´ımzdroj˚u, • statickou – realtimov´e procesy nepouˇz´ıvaj´ı dynamickou prioritu, jejich priorita se neh´ybe“ ” a z˚ust´av´astejn´ajako b´azov´a,proto hovoˇr´ımeo statick´eprioritˇe. Kapitola 4 Procesy 51

Obr´azek4.2: Process Explorer ve Windows 10 – priority

J Priority ve Windows. Ve Windows je celkov´erozmez´ıpouˇziteln´epro procesy 1–31. Urovnˇe´ 1–15 jsou dynamick´epro bˇeˇzn´eprocesy, ´urovnˇe16–31 jsou pro procesy re´aln´ehoˇcasu.Existuj´ıtyto ´urovnˇepriorit: • 0 – syst´emov´a´uroveˇn,pouˇz´ıv´ase pro vl´aknonulov´estr´anky • 1 – dynamick´aneˇcinn´a(Idle) • kolem 4 – Neˇcinn´a(Lowest) • kolem 6 – Niˇzˇs´ıneˇznorm´aln´ı(Below-normal) • kolem 8 – Norm´aln´ı(Normal) • kolem 10 – Vyˇsˇs´ıneˇznorm´aln´ı(Above-normal) • kolem 13 (max. 15) – Vysok´apriorita (Highest) • 16 – neˇcinn´are´aln´ehoˇcasu • kolem 24 – Re´aln´ehoˇcasu(Time-critical) • 31 – ˇcasovˇekritick´are´aln´ehoˇcasu Uˇzivatelsk´eprocesy maj´ıobvykle b´azovou prioritu 8 (norm´aln´ı).U syst´emov´ych proces˚uvˇcetnˇeproces˚u pro sluˇzby svchost.exe je priorita 8 taky celkem bˇeˇzn´a,jen nˇekter´enejd˚uleˇzitˇejˇs´ı procesy (hlavnˇe nativn´ı)maj´ıvyˇsˇs´ı– napˇr´ıkladsamotn´ypodsyst´emWindows csrss.exe m´atypicky prioritu 13 nebo spr´avce relac´ı smss.exe m´aprioritu 11. Kapitola 4 Procesy 52

Obr´azek4.3: Process Explorer ve Windows 98

£ Prioritu proces˚um˚uˇzemezjistit a ovlivˇnovat bud’ s pouˇzit´ımjednoho n´astroje, kter´yje souˇc´ast´ı Windows, anebo v n´astroji od firmy Sysinternals: 1. Spr´avce ´uloh (Task Manager) – na kartˇe Procesy je seznam proces˚u,sloupec Z´akladn´ı prio- rita (pokud nen´ıtento sloupec zobrazen, v menu zvol´ıme Zobrazit – Vybrat sloupce, zatrhneme pˇr´ısluˇsnoupoloˇzku),najdeme zde pouze slovn´ıurˇcen´ıpriority, 2. Process Explorer – zobrazuje tak´eˇc´ıselnouhodnotu priority, je tˇrebazobrazit sloupec s prioritou. V obou tˇechto n´astroj´ıch m˚uˇzemezmˇenitprioritu procesu (kontextov´emenu ˇr´adkus procesem), ale pouze mezi slovn´ımi“ ´urovnˇemi. ” Na obr´azc´ıch 4.2a 4.3 je Process Explorer spuˇstˇen´yve Windows 10 a Windows 98. Na prvn´ım z tˇechto obr´azk˚uvid´ımetypick´ehodnoty priorit proces˚u,jak bylo pops´anov pˇredchoz´ımtextu. Na obr´azkupro Windows 98 si vˇsimnˇetesloupce oznaˇcen´ehoPID. Zde obsaˇzen´aˇc´ıslave skuteˇcnostinejsou PID, protoˇzesyst´emy s DOS j´adremPID nepouˇz´ıvaj´ı.M´ıstonˇehojsou procesy identifikov´any pouze handlem (manipul´atorem)sv´ehohlavn´ıho okna stejnˇejako kter´ykoliv jin´yobjekt (vˇcetnˇesoubor˚u a oken). £ Pro spuˇstˇen´ıprocesu s konkr´etn´ı´urovn´ıpriority m˚uˇzemevyuˇz´ıtpˇr´ıkaz start. Napˇr´ıkladpokud chceme spustit proces z obrazu notepad.exe s n´ızkou prioritou, zad´ame start /low notepad.exe

J Priority v Linuxu. V Linuxu je rozsah priorit 1–40 pro bˇeˇzn´eprocesy, pro realtimov´eprocesy se pouˇz´ıv´astatick´apriorita v rozsahu 1–99 (realtimov´eprocesy jsou od bˇeˇzn´ych v´ıceoddˇeleny neˇzve Windows, maj´ıvlastn´ıalgoritmus, pl´anovaˇc,pro pˇridˇelov´an´ıprocesoru). Realtimov´eprocesy mohou b´yt spouˇstˇeny pouze superuˇzivatelem (administr´atorem).D´alese budeme zab´yvat pouze bˇeˇzn´ymiprocesy.  Z pohledu uˇzivatele se priority mapuj´ına rozsah pˇridat–odebrat“, naz´yvan´y nice. Nice je vlastnˇe ” b´azov´apriorita, dynamick´ase pohybuje kolem s odchylkou pˇribliˇznˇe5. Hodnoty nice jsou ch´ap´any Kapitola 4 Procesy 53 pˇresnˇeopaˇcnˇeneˇzhodnoty priorit: ˇc´ımvyˇsˇs´ıpriorita, t´ımniˇzˇs´ıhodnota nice. Tuto metriku si m˚uˇzeme pˇredstavit jako stupeˇn pˇr´ıjemnosti“ procesu vzhledem k jin´ymproces˚um,tedy proces s vyˇsˇs´ıhodnotou ” nice je k ostatn´ım proces˚um pˇr´ıjemnˇejˇs´ı“, nech´av´ajim v´ıceˇcasuprocesoru, kdeˇztoproces s niˇzˇs´ı ” hodnotou nice je k ostatn´ımproces˚umm´enˇe pˇr´ıjemn´y“, v´ıceˇcasuprocesoru si nech´av´apro sebe. ” Nice se vyjadˇrujeˇc´ıslemn´asledovnˇe: • 0 – bˇeˇzn´apriorita, • 1. . . 19 – zvyˇsujeme nice, proces je hodnˇejˇs´ı“ k ostatn´ımproces˚um,jeho skuteˇcn´apriorita je ” sniˇzov´ana, • ( 20). . . ( 1) – proces je m´enˇehodn´y“, tj. jeho priorita se zvyˇsuje. − − ” Obecnˇeplat´ı,ˇzekaˇzd´yuˇzivatel m˚uˇzesniˇzovat prioritu (zvyˇsovat hodnotu nice) sv´ych proces˚u,ale zvyˇsovat prioritu (sniˇzovat nice) sm´ı jen superuˇzivatel (administr´ator,obvykle root). Je to logick´e bezpeˇcnostn´ıopatˇren´ıpro v´ıceuˇzivatelsk´ysyst´em(bˇeˇzn´yuˇzivatel by nemˇelsv´evolnˇeub´ıratˇcasproce- soru proces˚umjin´ych uˇzivatel˚unebo dokonce syst´emu). £ Prioritu procesu v Linuxu lze zjistit v grafick´emi textov´emprostˇred´ı,a to takto: 1. V n´astroj´ıch pro grafick´erozhran´ı(podle zvolen´ehografick´ehorozhran´ı). M˚uˇzemepouˇz´ıtna- pˇr´ıklad program KSysGuard (v prostˇred´ı KDE, obr´azek 4.5) nebo GNOME System Monitor (prostˇred´ı GNOME, obr´azek 4.4), pˇr´ıpadnˇese tento n´astroj jinak jmenuje, ale bin´arnˇeje to nˇekter´yz uveden´ych.

Obr´azek4.4: Program GNOME System Monitor v prostˇred´ıGNOME

2. Priority si m˚uˇzemeprohl´ednout ve v´ystupupˇr´ıkaz˚uzobrazuj´ıc´ıch seznam spuˇstˇen´ych proces˚u s r˚uzn´ymi´udaji, kromˇejin´ehoi jejich prioritou: top ps -le (prvn´ıje pravidelnˇese aktualizuj´ıc´ıseznam, tedy interaktivn´ıproces, druh´yjednor´azovˇevyp´ıˇse poˇzadovan´e´udaje). V´ystupprocesu top je na obr´azku 4.6. Kapitola 4 Procesy 54

Obr´azek4.5: Program KSysGuard v prostˇred´ıKDE

Obr´azek4.6: V´ystuppˇr´ıkazu top

£ Prioritu spuˇstˇen´ehoprocesu m˚uˇzemeovlivnit bud’ v grafick´emreˇzimu, anebo v textov´emreˇzimu: • spuˇstˇen´ıs danou prioritou (resp. hodnotou nice): nice -n hodnota_nice spouˇstˇen´a_aplikace, napˇr´ıklad nice -n 10 ps nebo nice -n -10 ps (zvyˇsujemenebo sniˇzujemeprioritu procesu ps, a to o hodnotu 10) Kapitola 4 Procesy 55

• zmˇenapriority jiˇzspuˇstˇen´eaplikace: renice hodnota_nice_se_znam´enkemPID_procesu, napˇr´ıklad renice +10 512 (prioritu jiˇzbˇeˇz´ıc´ıhoprocesu s PID 512 jsme sn´ıˇzili,pˇridali jsme nice“, o 10) ” Mechanismus nice“ pro pr´aci s prioritami je pouˇz´ıv´anve vˇetˇsinˇeUNIXov´ych syst´em˚u. ”

4.1.5 Vznik a z´anikprocesu

 Proces m˚uˇzevzniknout nˇekolika zp˚usoby: • spuˇstˇen´ımprogramu jin´ymprocesem (kromˇeprvn´ıhospuˇstˇen´ehoprocesu v syst´emu samozˇrejmˇe), pak kaˇzd´yz proces˚um´ajin´yprogramov´yk´od, • klonov´an´ımjiˇzspuˇstˇen´ehoprocesu (fork) – cel´ypamˇet’ov´yprostor p˚uvodn´ıhoprocesu je zkop´ı- rov´ando nov´ehoadresov´ehoprostoru, pak je nov´emu procesu vytvoˇrenvlastn´ız´aznamv tabulce proces˚u(PCB) s nˇekter´ymi´udaji p˚uvodn´ımia nˇekter´yminov´ymi,t´ımje mu pˇridˇelenovlastn´ı PID, pak oba procesy pokraˇcuj´ısoubˇeˇznˇeod stejn´ehom´ısta. Obˇemoˇznostise ve vˇetˇsinˇeoperaˇcn´ıch syst´em˚uprov´adˇej´ıprakticky stejnˇe,jen v prvn´ımpˇr´ıpadˇese po operaci fork (a pˇredzmˇenouv nov´emPCB) provede dalˇs´ıvol´an´ıj´adra,tentokr´atpro naˇcten´ık´odu jin´ehoprogramu do pamˇetispuˇstˇen´ehoprocesu. £ Ve Windows se nov´yproces spouˇst´ıfunkc´ı CreateProcess(), v Linuxu se pouˇz´ıv´akombinace funkc´ı fork() a exec() ˇcinˇekter´emodifikace t´etofunkce, nejˇcastˇeji execve(). Tyto funkce maj´ıparametry potˇrebn´eke spuˇstˇen´ıprocesu.

£ Postup Spuˇstˇen´ınov´ehoprocesu v Linuxu m˚uˇzeprob´ıhattakto:

// rozdˇelmˇe(tento proces) na dva t´emˇeˇrstejn´e(aˇzna PID): if (fork() == 0) { // v druh´ekopii nahrad’ p˚uvodn´ı(m˚uj)k´odk´odemspouˇstˇen´ehoprogramu: execve(...) }

V k´odubyla vol´anafunkce fork(). Tato funkce vytvoˇr´ıkopii p˚uvodn´ıhoprocesu, ve kter´emje vol´ana, tedy po vol´an´ıfunkce m´amedva t´emˇeˇridentick´eprocesy.1 Jedna kopie je rodiˇcovsk´yproces, druh´aje potomek. V rodiˇcovsk´emprocesu funkce fork() vrac´ıPID vytvoˇren´ehopotomka, v potomkovi vrac´ı0, tedy proces pˇresn´avratovou hodnotu pozn´a,k´ymje“. Proto pouze potomek zavolal funkci execve() ” (nebo podobnou, je jich v´ıce), kterou z´ıskal sv˚ujvlastn´ık´ododliˇsn´yod rodiˇce. £

Zat´ımv´ıme,ˇc´ımje spuˇstˇen´ıprocesu iniciov´ano.Samotn´ypr˚ubˇehspouˇstˇen´ıse liˇs´ına r˚uzn´ych operaˇcn´ıch syst´emech.  Nˇekter´eoperaˇcn´ısyst´emy (napˇr´ıkladUNIXov´esyst´emy) vytv´aˇrej´ı stromovou strukturu proces˚u, ve kter´eje zachyceno, kter´yproces byl kter´ymspuˇstˇen.Spouˇstˇej´ıc´ıproces (nadˇr´ızen´yuzel) se naz´yv´arodiˇc

1Jejich k´odv k´odov´emsegmentu je identick´y,zat´ımmaj´ıspoleˇcn´ei datov´esegmenty, coˇzje ˇreˇsenomechanismem copy-on-write. Shodn´aje tak´ehodnota v registru ˇc´ıtaˇceinstrukc´ı. Kapitola 4 Procesy 56

(parent), spouˇstˇen´yproces je jeho synovsk´ym(dceˇrin´ym,child) procesem. V koˇrenistromu je prapro- ” ces“, kter´ybud’ pˇr´ımonebo zprostˇredkovanˇespustil vˇsechny ostatn´ıbˇeˇz´ıc´ıprocesy. Kaˇzd´ydalˇs´ıproces m´akromˇesv´ehovlastn´ıho identifikaˇcn´ıho ˇc´ısla (PID) tak´euloˇzenoidentifikaˇcn´ıˇc´ıslo rodiˇcovsk´eho procesu (PPID – Parent PID), toto ˇc´ıslose pr´avˇepouˇz´ıv´apˇrikonstrukci stromu proces˚u. Ve Windows je pojet´ıstruktury proces˚uznaˇcnˇevoln´e,vlastnˇezde ani neexistuje strom proces˚us je- din´ymkoˇrenem.Naopak v UNIXov´ych syst´emech je stromov´astruktura striktnˇedodrˇzov´ana,procesem v koˇreni stromu proces˚uje init. Mezi rodiˇcovsk´yma synovsk´ymprocesem existuje jist´yvztah z´avislosti.Obvykle po ukonˇcen´ı rodiˇcovsk´ehoprocesu b´yvaj´ıukonˇceny vˇsechny procesy jeho podstromu, tedy vˇsechny jeho synovsk´e procesy, aˇzna vyj´ımky, kter´ez dobr´ych d˚uvod˚umaj´ıpokraˇcovat v pr´aci(napˇr´ıkladz´alohov´an´ınebo dlouhodob´ev´ypoˇcty). Typick´ympˇr´ıklademje ukonˇcen´ıvˇsech proces˚uspuˇstˇen´ych uˇzivatelem po jeho odhl´aˇsen´ı(vˇsechny jsou v podstromˇejeho pˇrihlaˇsovac´ıhoˇciinicializaˇcn´ıhoprocesu). £ To znamen´a,ˇzepo ukonˇcen´ıprocesu • jsou potomci tak´eukonˇceni, • se jeho (b´yval´ı)potomci stanou potomky procesu v koˇrenistromu, pokraˇcuj´ıve sv´eˇcinnosti, • se vˇsichni potomci stanou sirotky, nemaj´ıˇz´adn´yrodiˇcovsk´yproces. Ve Windows se setk´amevˇetˇsinous tˇret´ımoˇznost´ı,i kdyˇzrodiˇcovsk´yproces m˚uˇzetak´eukonˇcitsv´eho potomka pˇrisv´emukonˇcen´ı(nen´ıto obvykl´e).Proto zde m´ıstostromu proces˚um´amevlastnˇenˇekolik nez´avisl´ych strom˚u,jedin´ykoˇrenneexistuje. V UNIXov´ych syst´emech vˇcetnˇeLinuxu se naopak setk´ames prvn´ımi dvˇema moˇznostmi.Pro vˇetˇsinu proces˚uplat´ı,ˇzekdyˇzje jejich rodiˇcukonˇcen, jsou tak´eukonˇceni(sign´alk ukonˇcen´ıˇcinnosti se pos´ıl´arekurz´ıvnˇedo cel´eho podstromu. Jestliˇzenˇekter´yproces m´apokraˇcovat ve sv´eˇcinnostii po ukonˇcen´ısv´ehorodiˇcovsk´ehoprocesu, je tˇrebaho touto vlastnost´ıpˇredemoznaˇcit(je spuˇstˇenpˇr´ıkazem nohup), tento proces se hned po takov´emto spuˇstˇen´ıst´av´apˇr´ım´ympotomkem procesu init. £ Proces m˚uˇzeb´ytukonˇcenjedn´ımz tˇechto zp˚usob˚u: • ukonˇc´ıs´amsebe, napˇr´ıkladvol´an´ımfunkce exit(), • pˇriukonˇcen´ırodiˇcovsk´ehoprocesu, pokud se nem´ast´atsirotkem, • je ukonˇcen sv´ymrodiˇcem(rodiˇcovsk´yproces zavol´afunkci abort()), • je odstranˇenuˇzivatelem ˇcisyst´emem,a to bud’ dobrovolnˇe“ nebo je ukonˇcenbez sv´espolupr´ace ” (n´asilnˇe,napˇr´ıkladpˇrizamrznut´ıprocesu nebo po v´yjimce). Ve Windows se obvykle setk´ames prvn´ım a posledn´ım zp˚usobem ukonˇcen´ı, i kdyˇz,jak bylo v´yˇse uvedeno, proces m˚uˇzeb´ytukonˇcen tak´esv´ymrodiˇcem(a to i tˇesnˇepˇredukonˇcen´ımtoho rodiˇce). V UNIXov´ych syst´emech se bˇeˇznˇepouˇz´ıvaj´ıvˇsechny ˇctyˇrimoˇznosti,pro ukonˇcen´ıprocesu podle po- sledn´ıhobodu lze pouˇz´ıtnapˇr´ıkladpˇr´ıkaz (funkci) kill nebo jeho varianty. Rodiˇcovsk´yproces m˚uˇzepoˇckat na dokonˇcen´ı pr´acepotomka (pouˇzijevol´an´ı j´adra wait) nebo pokraˇcovat ve sv´eˇcinnostibez ohledu na to, co potomek dˇel´a.M˚uˇzetakt´eˇzv kter´emkoliv okamˇziku potomka ukonˇcit(abort), napˇr´ıkladtehdy, kdyˇzpotomek splnil sv˚uj´ukol, pro kter´ybyl spuˇstˇen.

4.1.6 Pˇr´ıstupov´aopr´avnˇen´ıprocesu

 Proces sv´apˇr´ıstupov´aopr´avnˇen´ıobvykle z´ısk´av´az jednoho z tˇechto zdroj˚u: • od sv´ehorodiˇcovsk´ehoprocesu, tj. zprostˇredkovanˇeod uˇzivatele (pr´ava se rekurz´ıvnˇedˇed´ıod procesu, kter´yje prvn´ımspuˇstˇen´ymprocesem uˇzivatele), Kapitola 4 Procesy 57

• od sv´ehoobrazu (tj. spustiteln´ehosouboru), napˇr´ıkladv UNIXov´ych syst´emech to lze prov´est pomoc´ıSUID nebo SGID bitu, • z´ısk´an´ımopr´avnˇen´ıjin´ehouˇzivatele pˇrisv´emspuˇstˇen´ınebo jejich zmˇenouza bˇehu. Posledn´ımoˇznostje vyuˇzit´ımechanismu z´ısk´an´ıodliˇsn´ych pˇr´ıstupov´ych opr´avnˇen´ı,ˇcastojde o nav´yˇsen´ı pˇr´ıstupov´ych opr´avnˇen´ı(spouˇst´ımeproces s pr´avyadministr´atora).Ve Windows se jedn´ao mechanis- mus RunAs (v re´alu Spustit jako spr´avce“), v Linuxu o mechanismus su nebo sudo. Tˇemitomoˇznostmi ” se budeme zab´yvat na cviˇcen´ıch.

4.2 Bˇehproces˚ua multitasking

 Kontext procesu je souhrn bˇehov´ych informac´ıo procesu. Pˇrir˚uzn´ych typech multitaskingu zde ˇrad´ımer˚uzn´einformace, obvykle jsou souˇc´ast´ıkontextu tato data: • obsah adresov´ych registr˚u(programov´yˇc´ıtaˇc2, segmentov´eregistry, z´asobn´ıkov´yregistr3), • registr pˇr´ıznak˚u4, • pokud program nen´ı ps´antak, aby poˇc´ıtal s pˇr´ıpadn´ymizmˇenamiv datov´ych registrech pˇri pˇrepnut´ıkontextu, uloˇz´ımezde i obsah datov´ych registr˚u, • stav koprocesoru, pokud ho proces pouˇz´ıv´a, • stav dalˇs´ıch zaˇr´ızen´ı,kter´aproces pouˇz´ıv´aa nejsou ˇr´ızena syst´emem. Druh informac´ı, kter´ejsou souˇc´ast´ı kontextu procesu, z´aleˇz´ı pˇredevˇs´ım na typu multitaskingu, ve kter´emprocesy pracuj´ı.  Procesy mohou bˇeˇzet nˇekolika zp˚usoby: • sekvenˇcnˇe – dalˇs´ıproces m˚uˇzeb´ytspuˇstˇenaˇzpo ukonˇcen´ıˇcinnostipˇredchoz´ıho, • sekvenˇcnˇe-paralelnˇe – je spuˇstˇeno v´ıce proces˚u,kter´e se dˇel´ı o ˇcas procesoru (napˇr´ıklad se v urˇcit´ych intervalech stˇr´ıdaj´ıpˇrijeho vyuˇz´ıv´an´ı) multitaskov´ysyst´em, ⇒ • paralelnˇe – procesy pracuj´ısoubˇeˇznˇe,kaˇzd´ym˚uˇzebˇeˇzetna jin´emprocesoru multiprocesorov´y ⇒ syst´ems multitaskingem. Pokud m´amev´ıceprocesorov´ysyst´emnebo syst´ems jedn´ım v´ıcej´adrov´ymprocesorem, mohou procesy bˇeˇzetparalelnˇe(tˇret´ızp˚usob),pˇriˇcemˇzse uplatˇnuje i sekvenˇcnˇe-paraleln´ıbˇeh,protoˇzeˇcastom´ame v´ıc spuˇstˇen´ych proces˚uneˇzjader procesoru.  Kdyˇzse procesy stˇr´ıdaj´ına jednom procesoru (k tomu m˚uˇzedoj´ıtv druh´emnebo tˇret´ımpˇr´ıpadˇe), doch´az´ık pˇrep´ın´an´ıkontextu, tedy zmˇenˇebˇehov´ych informac´ıo procesu uloˇzen´ych na glob´aln´ıch“ ” m´ıstech (napˇr´ıklad registry procesoru), proto je nutn´ekontext dosud bˇeˇz´ıc´ıho procesu pˇrikaˇzd´em pˇrepnut´ıuloˇzit, napˇr´ıkladdo PCB (tedy tabulky proces˚u)nebo do pamˇet’ov´ehoprostoru pˇr´ısluˇsn´eho procesu – do jeho z´asobn´ıku. Pˇripˇrep´ın´an´ıkontextu se uloˇz´ıkontext p˚uvodnˇebˇeˇz´ıc´ıhoprocesu a obnov´ı kontext n´asleduj´ıc´ıhoprocesu.

2Programov´yˇc´ıtaˇc(Instruction Pointer, IP) je adresa n´asleduj´ıc´ıinstrukce v k´oduprocesu, kter´am´ab´ytzpracov´ana. 3Z´asobn´ıkov´yregistr (Stack Pointer, SP) obsahuje adresu vrcholu z´asobn´ıku.Do z´asobn´ıkuse ukl´adaj´ıpˇredevˇs´ımdata souvisej´ıc´ıs vol´an´ımfunkc´ı– skuteˇcn´eparametry funkce, lok´aln´ıpromˇenn´e,n´avratov´ehodnoty apod. 4V registru pˇr´ıznak˚ujsou pˇr´ıznakyd˚usledk˚uposledn´ıproveden´einstrukce k´odu,napˇr´ıkladzda je v´ysledkem v´ypoˇctu 0, bit znam´enka v´ysledku, maskov´an´ıpˇreruˇsen´ı,bˇehv reˇzimu trasov´an´ı(krokov´an´ı)atd., u nˇekter´ych procesor˚uje zde tak´eindikace bˇehu v reˇzimu j´adra(Motorola). Kapitola 4 Procesy 58

 Multitasking je postaven na pseudoparalelismu – prostˇredky(vˇcetnˇepamˇetia ˇcasuprocesoru) jsou vyhrazeny v´ıceproces˚um,proces˚umje procesor pˇridˇelov´anstˇr´ıdavˇepodle urˇcit´ehoalgoritmu, na uˇzivatele tato metoda p˚usob´ıdojmem paraleln´ıpr´acetˇechto proces˚u(jsou spuˇstˇeny a uˇzivatel si m˚uˇze vybrat, se kter´ymbude pracovat). U v´ıceprocesorov´ehosyst´emu nebo syst´emu s v´ıcej´adryjsou procesorov´aj´adrapˇridˇelov´anapro- ces˚um(kter´ych je obvykle v´ıcneˇzjader) podobn´ymzp˚usobem, taky se jedn´ao multitasking.

4.2.1 Pseudomultitasking

 Pseudomultitasking (multiprogramov´an´ı,kter´enen´ıpˇr´ımomultitaskingem, ale jeho pˇredch˚udcem) m˚uˇzeb´ytnˇekolika druh˚u: • vz´ajemn´evol´an´ı – implementuj´ıprocesy, nikoliv syst´em, procesu je pˇridˇelenprocesor, pokud je vol´anjin´ym(pr´avˇebˇeˇz´ıc´ım)procesem, urˇcitouformu t´eto metody najdeme u syst´emu MS-DOS, kdy TSR programy (viz str. 42) po inicializaci sv´erezidentn´ıˇc´astipˇred´avaj´ıaktivitu pˇr´ıkazov´emu interpretu (obvykle command.com), aby mohl b´ytspuˇstˇen dalˇs´ıTSR program nebo bˇeˇzn´yproces, • omezen´epˇrep´ın´an´ı – syst´empˇrep´ın´amezi jedn´ımbˇeˇzn´ymprocesem a speci´aln´ımiprogramy, kter´e se naz´yvaj´ı pom˚ucky (accessories), pom˚ucky mus´ıb´ytpro tento ´uˇcelspeci´alnˇeprogramov´any a b´yvaj´ıdod´av´any s operaˇcn´ımsyst´ememjako drobn´epomocn´eprogr´amkyzjednoduˇsuj´ıc´ıuˇziva- teli pr´aci(jednoduch´ytextov´yeditor, grafick´yeditor, kalkulaˇcka apod.), tuto moˇznostpouˇz´ıvaly nejstarˇs´ıverze Apple MacOS, kde pˇrep´ın´an´ırealizoval modul Finder, • neomezen´epˇrep´ın´an´ı – je moˇzn´epˇrep´ınat mezi jak´ymikoliv bˇeˇz´ıc´ımi procesy, tuto moˇznost pouˇz´ıvaly o nˇeconovˇejˇs´ıverze Apple MacOS, kde pˇrep´ın´an´ırealizoval modul MultiFinder. Pˇripˇrep´ın´an´ı,at’ uˇzomezen´emnebo neomezen´em,proces d´av´asyst´emu na vˇedom´ı,ˇzem˚uˇzeb´ytve sv´eˇcinnostipˇreruˇsen,a pokud uˇzivatel rozhodne, ˇzechce pracovat s jin´ymprocesem, pak tak´etento proces pˇreruˇsenje. Aby byly procesy nuceny“ dostateˇcnˇeˇcasto sdˇelovat syst´emu, ˇzejim zrovna m˚uˇze ” b´ytodebr´anprocesor, b´yv´atento stav (moˇznostodebrat procesor) ˇcastospojena s jin´ymisluˇzbami syst´emu, napˇr´ıkladˇcek´an´ına stisk kl´avesy na kl´avesnici (proces m˚uˇzeˇcekat na stisk kl´avesy jen tehdy, kdyˇzumoˇzn´ıodebr´an´ıprocesoru). U vz´ajemn´ehovol´an´ınen´ıpotˇrebapouˇz´ıvat kontext, u pˇrep´ın´an´ıje souˇc´ast´ıkontextu pˇredevˇs´ım vrchol z´asobn´ıku a dalˇs´ı ´udaje z´avis´ı na konkr´etn´ımˇreˇsen´ı (procesy samy urˇcuj´ı, kdy mohou b´yt pˇrepnuty, mohou vˇcas dokonˇcitpr´acise zaˇr´ızen´ımia uloˇzitpotˇrebn´einformace).

4.2.2 Kooperativn´ımultitasking

 Kooperativn´ımultitasking je vylepˇsen´ımneomezen´eho pˇrep´ın´an´ı,pˇriˇcemˇzse uˇztechnicky jedn´a o multitasking. Jeden proces bˇeˇz´ı na popˇred´ı, ostatn´ı procesy jsou spuˇstˇeny na pozad´ı. Proces na popˇred´ım´apˇridˇelenprocesor, ale pokud ho zrovna nevyuˇz´ıv´a(napˇr´ıkladˇcek´ana ud´alost,tˇrebavstup z kl´avesnice), m˚uˇzeb´ytprocesor pˇridˇelennˇekter´emu procesu na pozad´ı,ale jen na kr´atkou dobu. Po uplynut´ıt´etodoby je procesor vr´acenprocesu na popˇred´ıanebo, pokud tento proces poˇr´adˇcek´ana ud´alost,opˇetnˇekter´emu procesu na pozad´ı.Uˇzivatel urˇcuje,kter´yproces bude na popˇred´ı(napˇr´ıklad pˇresunese z textov´ehoeditoru ke kalkulaˇcce). Na rozd´ılod neomezen´ehopˇrep´ın´an´ıje pˇrikooperativn´ımmultitaskingu dovoleno bˇeˇzetproces˚um na pozad´ı,kdyˇzproces na popˇred´ınevyuˇz´ıv´aprocesor. Procesy mus´ına multitaskingu spolupracovat, Kapitola 4 Procesy 59 a to odevzd´avat procesor vol´an´ım sluˇzby syst´emu (proces na popˇred´ı, kdyˇznepotˇrebujeprocesor, procesy na pozad´ıpo uplynut´ıvyhrazen´ehokr´atk´ehoˇcasupˇridˇelen´ıprocesoru). Je vˇsakna samotn´em procesu (jeho program´atorovi), zda pˇr´ısluˇsnousluˇzbusyst´emu zavol´a,a pokud se t´ımnebude obtˇeˇzovat, dost´av´amese zpˇetna ´uroveˇnneomezen´ehopˇrep´ın´an´ı.O obsahu kontextu plat´ıtot´eˇzco u neomezen´eho pˇrep´ın´an´ı. V kooperativn´ımmultitaskingu pracovaly napˇr´ıkladWindows s DOS j´adremverze 3.x nebo novˇejˇs´ı verze Apple MacOS pˇredverz´ıX. V´yhody: • moˇznostspuˇstˇen´ıv´ıceproces˚u,moˇznostspolupr´acea komunikace proces˚u, • lepˇs´ıvyuˇzit´ıprostˇredk˚uv syst´emu (pamˇet’, ˇcasprocesoru, atd.), • moˇznostimplementovat v´ıceuˇzivatelsk´ysyst´em(ale pouze na primitivn´ı´urovni, plnohodnotnˇe pracovat m˚uˇzepouze jeden uˇzivatel), • procesy vˇed´ı“, kdy jsou pˇrepnuty (samy vyvol´avaj´ıpˇreruˇsen´ıvedouc´ık odebr´an´ıprocesoru), ” a proto kontext nemus´ıb´yttak obs´ahl´y. Nev´yhody: • vˇetˇs´ın´arokyna hardware, • nutnost ˇreˇsitprobl´emy s bezpeˇcnost´ıa stabilitou syst´emu, • pokud dojde k chybˇev procesu bˇeˇz´ıc´ım na pozad´ı (zacyklen´ı v nekoneˇcn´esmyˇcce),nedojde k vol´an´ıpˇreruˇsen´ı,nen´ıodevzd´anprocesor a cel´ysyst´em zamrzne“, tot´eˇzplat´ıi pro proces ” bˇeˇz´ıc´ına popˇred´ı, • pokud program´atornevol´asluˇzbusyst´emu umoˇzˇnuj´ıc´ıpˇridˇelitprocesor jin´emu procesu, syst´em pˇrest´av´ab´ytmultitaskov´ya jde pouze o pseudomultitasking s neomezen´ympˇrep´ın´an´ım, • n´aroˇcnˇejˇs´ırealizace neˇzu n´asleduj´ıc´ıhotypu multitaskingu.

4.2.3 Preemptivn´ımultitasking

 Preemptivn´ımultitasking spoˇc´ıv´av neust´al´empˇrep´ın´an´ımezi procesy. Procesy na multitaskingu nespolupracuj´ı(a dokonce o nˇem ani nemus´ıvˇedˇet),kaˇzd´yproces m˚uˇzeb´ytkdykoliv pˇreruˇsen.Pˇreruˇsen´ı odebr´an´ıprocesoru je vygenerov´anopˇrikaˇzd´eud´alostiv syst´emu a procesor je pˇridˇelentomu procesu, kter´ehose pˇreruˇsen´ıt´yk´a(napˇr´ıklad po pˇreruˇsen´ıod kl´avesnice je procesor pˇridˇelentomu procesu, kter´emu patˇrilostisknut´ıkl´avesy na kl´avesnici, tˇreba textov´emu editoru). Nen´ıˇreˇceno,ˇzese kontext pˇrep´ın´apo kaˇzd´empˇreruˇsen´ı,protoˇze pˇreruˇsen´ım˚uˇzeb´yt(a ˇcastob´yv´a)urˇcenomoment´alnˇeaktivn´ımu procesu. Preemptivn´ı“ znamen´apˇredv´ıdav´y,pˇredj´ımaj´ıc´ı,tj. procesy mus´ıpˇredpokl´adat(pˇredv´ıdat),ˇze ” mohou b´ytkdykoliv pˇrepnuty, nesm´ıspol´ehatna to, ˇzebudou m´ıtjakkoliv dlouho k dispozici pro- cesor. Re´alnˇeto znamen´a,ˇzeprocesy ani netuˇs´ı“, ˇzejsou pˇrep´ın´any, ˇcasna procesoru berou spojitˇe ” (nepoˇc´ıtaj´ıpˇrest´avky). Kontext procesu mus´ıobsahovat i takov´e´udaje jako stav registr˚uprocesoru a koprocesoru, protoˇze proces po odebr´an´ıa znovupˇridˇelen´ıprocesoru nemus´ıb´ytinformov´ano tom, ˇzejeho ˇcinnostnen´ıˇcasovˇe souvisl´aa pˇredchv´ıl´ıregistry vyuˇz´ıval jin´yproces. D´aleje tˇrebavyˇreˇsitpˇridˇelov´an´ıprostˇredk˚u,coˇz obvykle b´yv´aˇreˇsenoarchitekturou klient-server pro pˇr´ıstupk ovladaˇc˚umzaˇr´ızen´ı(procesy – klienti pˇristupuj´ık zaˇr´ızen´ımpˇresspeci´aln´ıprocesy – servery, servery dok´aˇzouspolupracovat s kter´ymkoliv klientem). Kapitola 4 Procesy 60

 Preemptivn´ımultitasking se sd´ılen´ımˇcasu (time slicing) je vylepˇsen´ımpˇredchoz´ımetody. K pˇrepnut´ıkontextu doch´az´ınejen pˇrivygenerov´an´ınˇejak´eud´alosti,ale nav´ıci v dan´ych ˇcasov´ych intervalech, a to velmi mal´ych (jednotky aˇzdes´ıtkymilisekund). Procesy se ve vyuˇz´ıv´an´ıprocesoru stˇr´ıdaj´ı, a to tak rychle, ˇzena uˇzivatele to p˚usob´ı dojmem paraleln´ıho zpracov´an´ı ´uloh.Proces je pˇreruˇsenpo uplynut´ıurˇcit´ehoˇcasov´ehointervalu anebo jeˇstˇedˇr´ıv,pokud v jemu pˇridˇelen´emintervalu doˇslok pˇreruˇsen´ıgeneruj´ıc´ımu ud´alost,anebo kdyˇzsvou pr´acidokonˇc´ıpˇredkoncem intervalu. Tuto metodu pouˇz´ıvaj´ıprakticky vˇsechny modern´ıoperaˇcn´ısyst´emy – UNIXov´esyst´emy vˇcetnˇe Linuxu (pro bˇeˇzn´eprocesy), Windows NT a Windows s DOS j´adremod verze 4 (95), MacOS X. V´yhody: • moˇznostspuˇstˇen´ıv´ıceproces˚u,moˇznostspolupr´acea komunikace proces˚u, • lepˇs´ıvyuˇzit´ıprostˇredk˚uv syst´emu (pamˇet’, ˇcasprocesoru, atd.), • moˇznostimplementovat v´ıceuˇzivatelsk´ysyst´em, • moˇznostimplementovat modern´ıinteraktivn´ıgrafick´erozhran´ı, • snadnˇejˇs´ıimplementace bezpeˇcnostn´ıch mechanism˚u, • snadnˇejˇs´ıimplementovatelnost (ve srovn´an´ıs kooperativn´ımmultitaskingem), • metoda nen´ız´avisl´ana bˇehu proces˚ua dobr´ev˚uliprogram´ator˚u. Nev´yhody: • vˇetˇs´ın´arokyna hardware, • kontext mus´ıb´yto nˇecorozs´ahlejˇs´ıneˇzu kooperativn´ıhomultitaskingu.

4.3 Multithreading

 Multithreading je vlastnˇeparaleln´ızpracov´an´ıv´ıce ˇc´ast´ıv r´amci jednoho procesu, tedy nˇecojako multitasking uvnitˇrprocesu. Rozdˇelen´ıprocesu na v´ıcetakov´ych ˇc´ast´ı,podproces˚u,vl´aken (thread) je v´yhodn´e,pokud se proces skl´ad´az v´ıcenez´avisl´ych kus˚uk´odu(navz´ajemse neovlivˇnuj´ı,je jedno, v jak´empoˇrad´ıbudou provedeny). Typick´ympˇr´ıklademje aplikace, kter´akomunikuje s uˇzivatelem, umoˇzˇnujemu pr´acinebo ho bav´ı (jedno vl´akno) a na pozad´ı“ tˇrebakop´ırujesoubory (druh´evl´akno).Kaˇzd´ez tˇechto vl´aken pracuje ” samostatnˇe,jedno nem´avliv na ˇcinnost druh´ehokromˇepˇr´ıpadn´ekomunikace (prvn´ı vl´aknom˚uˇze uˇzivateli na vhodn´emgrafick´emprvku ukazovat, jak daleko je druh´evl´akno v kop´ırov´an´ı,druh´evl´akno prvn´ımu vˇzdypo zkop´ırov´an´ıjednoho souboru nebo urˇcit´ehokvanta Byt˚uzas´ıl´azpr´avu).

4.3.1 Princip

 V operaˇcn´ıch syst´emech podporuj´ıc´ıch multithreading se proces (´uloha)skl´ad´az jednoho nebo v´ıce podproces˚unaz´yvan´ych vl´akna (thread), jedno vl´aknob´yv´ahlavn´ıa je spuˇstˇenopˇrispuˇstˇen´ıprocesu. Proces je pouze pasivn´ıvlastn´ıkpamˇet’ov´ehoprostoru, veˇskerou ˇcinnostprov´adˇej´ıvl´akna.Proto proces, kter´ynem´aˇz´adn´evl´akno,m˚uˇzeb´ytukonˇcen.Tak jako proces m´asv´eˇc´ısloPID, tak i kaˇzd´ythread m´a pˇridˇelenoˇc´ısloTID, kter´ev operaˇcn´ıch syst´emech b´yv´ajednoznaˇcn´epro cel´ysyst´em. Procesor nen´ı pˇridˇelov´anproces˚um,ale vl´akn˚um.Kaˇzd´evl´aknom´asv˚ujk´od(nebo m˚uˇzeb´yt sd´ılen´yv r´amciprocesu, z´aleˇz´ına implementaci) a ukazatel do nˇeho(programov´yˇc´ıtaˇc),z´asobn´ık, ˇcasprocesoru, kontext. Vl´aknamohou m´ıtkaˇzd´esv˚ujpamˇet’ov´yprostor nebo mohou pˇristupovat ke spoleˇcn´emu pamˇet’ov´emu prostoru (to je obvyklejˇs´ı),nen´ınutn´emezi vl´akny uplatˇnovat tak pˇr´ısn´e mechanismy ochrany pamˇetiani dalˇs´ıbezpeˇcnostn´ımetody (vl´aknapatˇr´ıt´emuˇzprocesu, spolupracuj´ı, Kapitola 4 Procesy 61 nekonkuruj´ısi), nicm´enˇeurˇcit´asynchronizace pˇripˇr´ıstupuk prostˇredk˚umdostupn´ymv´ıcevl´akn˚um t´ehoˇzprocesu m˚uˇze b´ytzapotˇreb´ı. Kaˇzd´evl´aknopracuje zvl´aˇst’, ale spolupr´acemezi vl´akny jednoho procesu je uˇzˇs´ıneˇzspolupr´ace s vl´aknem ciz´ıho“ procesu. Tato spolupr´acese net´yk´ajen sd´ılen´eˇc´astipamˇet’ov´ehoprostoru, ale tak´e ” ˇcasuprocesoru – kdyˇzvl´aknopˇrestanepouˇz´ıvat procesor jeˇstˇedˇr´ıvneˇzvyprˇs´ıjeho ˇcasov´yinterval pˇridˇelen´ıprocesoru, nemus´ızbyl´yˇcas zahodit“, ale m˚uˇzeho pˇrenechat jin´emu vl´aknu t´ehoˇzprocesu. ” Vl´aknamohou b´ytimplementov´ananˇekolika zp˚usoby. £ Model 1:1. Vl´aknajsou implementov´anav j´adˇre syst´emu. J´adro s vl´akny zach´az´ıjako s pro- cesy, tedy pˇrep´ın´an´ıkontextu se prov´ad´ına ´urovni vl´aken. Toto ˇreˇsen´ızvyˇsujepropustnost syst´emu (syst´emreaguje pruˇznˇeji,m˚uˇzeb´ytzpracov´anov´ıcesyst´emov´ych vol´an´ız´aroveˇn,pokud je j´adrotak´e v´ıcevl´aknov´e),ale je n´aroˇcnˇejˇs´ıˇreˇsitprobl´emy souvisej´ıc´ıse synchronizac´ısyst´emov´ych vl´aken (t´ykaj´ıc´ı se sd´ılen´ych syst´emov´ych dat). Tato metoda je pouˇz´ıv´ananapˇr´ıkladsyst´ememOS Mach, a proto tak´eMacOS X, d´aletak´eve Windows ˇradyNT a v Linuxu (v Linuxu je vˇsakimplicitnˇesamotn´ej´adrojednovl´aknov´e)s knihovnou NPTL (Native Posix Threads Library). Tato specifikace je souˇc´ast´ınormy POSIX. £ Model N:1. Vl´aknajsou realizov´ana na uˇzivatelsk´e´urovni. Podpora vl´aken je realizov´anav kni- hovn´ach, j´adroje pouze jednovl´aknov´ea vid´ı“ pouze procesy, nikoliv vl´akna.Syst´emvl´aknanepod- ” poruje, implementace je pouze na stranˇeproces˚u.Vl´aknajednoho procesu se dˇel´ı o ˇcasprocesoru pˇridˇelen´ytomuto procesu. Vl´aknajednoho procesu nemohou bˇeˇzetna v´ıceprocesorech, proto tento model nen´ıvhodn´ypro v´ıceprocesorov´esyst´emy. Protoˇzepˇrep´ın´an´ıvl´aken t´ehoˇzprocesu nen´ırealizov´ano centr´alnˇe“, je mnohem rychlejˇs´ı(pokud ” proces pˇr´ıliˇsmnoho nekomunikuje s j´adrem),proto je lepˇs´ıodezva jednotliv´ych uˇzivatelsk´ych aplikac´ı. V´yhodou jsou menˇs´ıkomplikace pˇripˇr´ıstupuk syst´emov´ymdat˚um,nev´yhodou je v r´amcij´adra moˇznostnajednou zpracovat jen jedin´esyst´emov´evol´an´ı.Kdyˇznˇekter´evl´aknoprovede vol´an´ısluˇzeb j´adra(syst´emov´evol´an´ı),zastav´ıse vˇsechna vl´aknaprocesu. Toto ˇreˇsen´ıje pouˇz´ıv´anov nˇekter´ych jazyc´ıch jako vlastn´ıimplementace vl´aken (napˇr´ıkladv Javˇe nebo Ruby). D´alese s n´ımsetk´ameve formˇe Windows Fibers ( vl´ak´enka“) – ve Windows totiˇzkromˇe ” vl´aken (threads) existuj´ıtak´evl´ak´enka, jejichˇzpl´anov´an´ıje plnˇev reˇziiaplikace (tedy jsou viditeln´a pouze v uˇzivatelsk´emprostoru), a to funkc´ı SwitchToFiber. £ Model N:M. Hybridn´ıpˇr´ıstup.Vl´aknajsou implementov´anana ´urovni j´adra (kernel-thread) i na ´urovni bˇeˇzn´ych proces˚u(user-thread). Tento model odstraˇnujenev´yhody pˇredchoz´ıch dvou model˚u – pˇrep´ın´an´ıvl´aken je rychl´e,vl´aknamohou bˇeˇzetna v´ıceprocesorech, j´adrom˚uˇzenajednou obsluhovat v´ıcesyst´emov´ych vol´an´ı). Kaˇzd´euˇzivatelsk´evl´aknoprocesu, kter´eprov´ad´ınˇejak´esyst´emov´evol´an´ı,je napojeno na nˇekter´e vl´aknoj´adra,ostatn´ıuˇzivatelsk´avl´akna,kter´as j´adremnekomunikuj´ı,toto napojen´ınepotˇrebuj´ı. Tento model je pouˇzitve vˇetˇsinˇekomerˇcn´ıch UNIX˚u(napˇr´ıkladSolaris).

 Pozn´amka: Jednotliv´emodely jsou odvozeny od toho, kolik kter´ych typ˚uvl´aken je mapov´anomezi uˇzivatelsk´ym prostorem a j´adrem. Model 1:1 znamen´a,ˇze jedno vl´aknov uˇzivatelsk´emprostoru je mapov´anona jedno vl´akno v j´adˇre (tj. j´adropracuje pˇr´ımos uˇzivatelsk´ymivl´akny). Model N:1 znamen´a,ˇzev´ıceuˇzivatelsk´ych vl´aken (tj. Kapitola 4 Procesy 62 vl´aknajednoho procesu) je mapov´anona jedno spoleˇcn´evl´akno j´adra(j´adronevid´ıvl´akna,jen procesy). Model N:M pˇredstavuje ˇreˇsen´ı,ve kter´emmnoˇzinauˇzivatelsk´ych vl´aken m˚uˇze b´ytmapov´ana na (obecnˇe r˚uznˇepoˇcetnou)mnoˇzinu vl´aken j´adra,tedy m˚uˇzenastat dokonce situace, kdy jedno uˇzivatelsk´evl´akno je napojeno na v´ıcevl´aken j´adra,coˇzby v pˇredchoz´ıch modelech bylo nemoˇzn´e. 

4.3.2 Programov´an´ıv´ıcevl´aknov´ych aplikac´ı

 Ve v´ıcevl´aknov´eaplikaci mohou nastat tyto (krajn´ı)situace: 1. Vl´aknajsou vz´ajemnˇenez´avisl´a,nesd´ılej´ıspoleˇcn´eprostˇredky, navz´ajemnekomunikuj´ı:ide´aln´ı pˇr´ıpad,mohou bez probl´em˚ubˇeˇzetz´aroveˇnna r˚uzn´ych procesorech nebo j´adrech. 2. Vl´aknasd´ılej´ı prostˇredkynebo jin´ymzp˚usobem navz´ajemkomunikuj´ı: nutno synchronizovat, vz´ajemn´eˇcek´an´ı,nemohou bˇeˇzetneust´alez´aroveˇn. V´ıcej´adrov´yprocesor vyuˇzij´ınapˇr´ıkladtyto aplikace, pokud jsou v´ıcevl´aknov´e: • hry, • videokodeky (napˇr´ıkladkodek H.264 dok´aˇzetakto efektivnˇevyuˇz´ıtaˇz8 jader), animaˇcn´ıpro- gramy, multimedi´aln´ıaplikace, • matematick´eprogramy, n´aroˇcn´ev´ypoˇcty, • komprimace, ˇsifrov´an´ı, • jak´ekoliv aplikace programovan´etechnologi´ı Model–View–Controller nebo dalˇs´ımitechnologiemi dˇel´ıc´ımiˇcinnostido r˚uzn´ych vl´aken, atd.

£ Pˇriprogramov´an´ıv´ıcevl´aknov´ych aplikac´ısi pˇredevˇs´ımmus´ımed´atpozor na tyto probl´emy: • Waiting (ˇcek´an´ı)– vl´aknopotˇrebujek dalˇs´ıpr´aciv´ysledekˇcinnostijin´ehovl´akna,coˇzznamen´a degradaci paralelismu na sekvenˇcn´ızpracov´an´ı. • Synchronizaˇcn´ıprobl´em – vl´aknopotˇrebujev´ysledekv´ypoˇctujin´ehovl´akna,ale nen´ımu zn´amo, ˇzedruh´evl´aknotento v´ysledekjeˇstˇenedodalo je moˇzn´e,ˇzepracuje se ˇspatn´ymihodnotami. ⇒ • Deadlock (uv´aznut´ı)– vl´aknoˇcek´ana prostˇredek,kter´yblokuje jin´evl´akno,to tˇrebaˇcek´ana prostˇredekblokovan´yprvn´ımvl´aknem. . . • Race-Condition – dvˇevl´akna chtˇej´ıtent´yˇzprostˇredek,kter´yvˇsak m˚uˇzeb´ytvyuˇz´ıv´anjen jedn´ım– bud’ je vygenerov´anachyba ˇciv´yjimka, tˇrebaˇzeobˇevl´aknapracuj´ıspr´avnˇe,nebo dojde k uv´aznut´ı, nebo zv´ıtˇez´ı rychlejˇs´ı“ a druh´evl´aknomus´ıpoˇckat, anebo druh´emus´ıhledat jin´yprostˇredek ” (pokud je to moˇzn´e),z´avis´ına pl´anovac´ımalgoritmu pl´anovaˇceprocesoru. Program´atoˇriˇcastopouˇz´ıvaj´ıvl´aknatam, kde to nejen nen´ıpotˇreba,ale dokonce si takto lze vyrobit“ ” mnoho probl´em˚u.Pouˇz´ıv´an´ıvl´aken je tˇrebavelmi d˚ukladnˇezv´aˇzit,abychom zbyteˇcnˇenezhorˇsovali v´ykon a odezvu sv´eaplikace.

Programov´an´ıv´ıce vl´aken ve Windows: Po vytvoˇren´ıprocesu (funkc´ı CreateProcess) existuje jedno implicitn´ı“ hlavn´ıvl´akno,dalˇs´ıvl´aknalze kdykoliv vytvoˇritvol´an´ımAPI funkce CreateThread ” – Win API funkce. Ovˇsempokud pracujeme v nˇekter´emrozs´ahlejˇs´ım v´yvojov´emprostˇred´ı, je vhodnˇejˇs´ı pouˇz´ıvat funkce a tˇr´ıdynab´ızen´et´ımto prostˇred´ım,protoˇze v konstruktorech a dalˇs´ıch souvisej´ıc´ıch funkc´ıch Kapitola 4 Procesy 63

Obr´azek4.7: Vlastnosti nˇekter´ych v´ıcevl´aknov´ych aplikac´ıv Processs Exploreru

ˇcimetod´ach jsou vytv´aˇreny a inicializov´any dalˇs´ısouvisej´ıc´ıobjekty, kter´eby pˇripouˇzit´ıAPI funkc´ı nefungovaly spr´avnˇe.

M Pˇr´ıklad Napˇr´ıkladv Delphi existuje tˇr´ıda TThread; v unitˇepro nov´evl´aknovytvoˇr´ımepotomka t´etotˇr´ıdy(jako datov´ytyp), pak pˇret´ıˇz´ımeproceduru Execute, do kter´evloˇz´ımesamotn´yk´odvl´akna: type TMyThread = class(TThread) private ... protected procedure Execute; override; ... public constructor Create(CreateSuspended: Boolean); ... end;

Zb´yv´ainicializace, k´odvl´aknaa ´uklidov´afunkce. V C++ (multiplatformn´ım)rozliˇsujemeWindows vl´aknaa POSIX vl´akna,a tak´eexistuje imple- mentace pro .NET. Pouˇziteln´ev .NET: public class MyObject { public void Run() { ... k´odvl´akna } }

MyObject muj_objekt = new MyObject(); Thread vlakno = new Thread(new ThreadStart(muj_objekt.Run)); vlakno.Start();

V C++ (multiplatformn´ım)rozliˇsujemeWindows vl´aknaa POSIX vl´akna,a tak´eexistuje implementace pro .NET. Ve Visual C++ se pouˇz´ıv´atˇr´ıda CWinThread nebo jej´ıpotomek CWinApp. Rozliˇsuj´ıse dva typy vl´aken – pracovn´ı“ vl´akna(Worker Threads) a vl´aknauˇzivatelsk´ehorozhran´ı(User-interface Threads). ” M Kapitola 4 Procesy 64

Programov´an´ıv´ıcevl´aken v Linuxu: V Linuxu se dˇr´ıvm´ıstovl´aken pouˇz´ıvala struktura podproces˚u,tedy vol´an´ı fork a exec: • nov´e vl´akno“ m´ak´odve zvl´aˇstn´ımspustiteln´emsouboru, ” • vol´an´ım fork proces vytvoˇr´ısvou kopii, vol´an´ım exec j´ıpˇred´ak´odz dan´ehospustiteln´ehosouboru, • p˚uvodn´ıproces je rodiˇcemnov´ehoprocesu, m´anad n´ımplnou kontrolu.

M Pˇr´ıklad Takto se dˇr´ıve vytv´aˇrela pseudovl´akna“ v Linuxu: ” pid_t child_pid; child_pid = fork(); if (child_pid == 0) { // jsme v nov´emprocesu // v kopii nahrad’ k´odk´odemspouˇstˇen´ehoprogramu: execvp(n´azev_programu,arg_list); } else ... // tento k´odpatˇr´ırodiˇci M

V souˇcasn´edobˇese vˇsakbˇeˇznˇepouˇz´ıvaj´ıprav´avl´akna,vˇetˇsinouz knihovny, jej´ıˇzhlaviˇckov´ysoubor je pthread.h.

M Pˇr´ıklad Takto se vytv´aˇrej´ıvl´aknav souˇcasn´emLinuxu: pthread_t id_cislo_threadu; pthread_create (&id_cislo_threadu, NULL, &funkce_threadu, NULL);

Jednotliv´eparametry jsou 1. reference na promˇennou,do kter´ese uloˇz´ıTID vl´akna, 2. ukazatel na objekt atribut vl´akna“, ve kter´emlze urˇcitzp˚usob,jak´ymbude vl´aknokomunikovat ” s ostatn´ımivl´akny, hodnota NULL nastav´ıv´ychoz´ıhodnoty, 3. reference na funkci s k´odem, kter´ybude vl´aknovykon´avat, obvykle typu void *, 4. ukazatel na argument dat pˇred´avan´ych vl´aknu (typu void *), m˚uˇzeb´yt NULL. D´aleje tˇrebaprogram pˇreloˇzit.Kromˇev´yvojov´ych prostˇred´ı(napˇr´ıkladKDevelop) m´amek dispozici pˇredevˇs´ımpˇrekladaˇc gcc (pro zdroje v C) nebo g++ (pro zdroje v C++), s pˇrep´ınaˇcem -pthread nebo -threads (podle hardwarov´ea softwarov´earchitektury). Napˇr´ıklad: gcc -pthread -o vystupni_soubor zdroj.c M

Dalˇs´ıinformace:  Dalˇs´ızdroje o programov´an´ıv´ıcevl´aken v Linuxu: • man gcc • http://www.root.cz/serialy/programovani-pod-linuxem-pro-vsechny/ • http://www.advancedlinuxprogramming.com/ • http://www.linux.cz/noviny/1998-0809/index.html

 Kapitola 4 Procesy 65

4.3.3 Dalˇs´ımoˇznostiprogramov´an´ıv´ıcevl´aken

Multiplatformn´ıˇreˇsen´ı. Nˇekter´emultiplatformn´ıjazyky obsahuj´ıtak´epodporu vl´aken, napˇr´ıklad 1. Java podporuje dva typy vl´aken: • native threads – vyuˇz´ıv´amoˇznostioperaˇcn´ıhosyst´emu, jde obvykle o kernel threads, • green threads – vlastn´ıˇreˇsen´ı. 2. Skriptovac´ıjazyky ˇcastoimplementuj´ıvlastn´ıvl´akna(ve vlastn´ıreˇzii,ve skuteˇcnostinˇecojako user threads), napˇr´ıklad Lua (Coroutines), Ruby (tˇr´ıda Thread). Intel Parallelism Exploration Compiler5 analyzuje k´odprogramu a automaticky jej rozloˇz´ı do v´ıce vl´aken, pokud to jde, program´atorm˚uˇzepouˇz´ıt speci´aln´ı kl´ıˇcov´aslova souvisej´ıc´ı s paralelismem. Rozkl´ad´ana vl´aknapouze tehdy, kdyˇzje nulov´apravdˇepodobnost deadlocku a race-condition. Je urˇcenpro jazyky C/C++ a jde o komerˇcn´ıaplikaci (je k dispozici 30denn´ıdemonstraˇcn´ıverze). OpenMP6 je na rozd´ılod pˇredchoz´ıaplikace volnˇeˇsiˇriteln´ysoftware. Slouˇz´ık t´emuˇz´uˇcelu(rozdˇelen´ı aplikace ve zdrojov´emk´odu do vl´aken), ale program´atorm˚uˇzepˇr´ımourˇcit,zda konkr´etn´ıprvky mohou b´ytparalelizov´any. Je urˇcenpro programovac´ıjazyky C/C++ a Fortran.

4.4 Spr´ava front proces˚u

Spr´ava front proces˚uje z´akladempro spoustu dalˇs´ıch ´ukol˚u,kter´ese v syst´emu mus´ıˇreˇsit.Fronty obvykle slouˇz´ık ˇcek´an´ıproces˚una prostˇredkyv syst´emu. Spr´avce front udrˇzujefronty – vytv´aˇr´ıfronty a pˇr´ıpadnˇeje ruˇs´ı(pˇriodebr´an´ıprostˇredkuze syst´emu), pˇrid´av´aprocesy do fronty, odeb´ır´aprocesy z fronty (pˇridˇelen´ıprostˇredkujiˇzm´ana starosti jin´ymodul syst´emu).  Existuje v´ıcer˚uzn´ych druh˚ufront: Bˇeˇzn´afronta je fronta funguj´ıc´ızp˚usobem First-in first-out. Prioritn´ıfronta je fronta, ve kter´ejsou zohledˇnov´any priority proces˚u.Procesy jsou zaˇrazov´any podle sv´epriority pˇredvˇsechny procesy s niˇzˇs´ıprioritou, za vˇsechny s vˇetˇs´ınebo stejnou prioritou. Fronta typu delta-list je pouˇz´ıv´anapro procesy, kter´eˇcekaj´ına uplynut´ıurˇcit´ehoˇcasov´ehointervalu. U kaˇzd´epoloˇzkyfronty tedy m´amedva ´udaje – prvn´ıje ukazatel na proces (nebo sloˇzitˇejˇs´ıdatov´a struktura reprezentuj´ıc´ıkonkr´etn´ıproces), druh´yje doba, po kterou m´aproces ˇcekat. Aby u fronty typu delta-list nebylo nutn´ev pravideln´ych intervalech mˇenitdobu ˇcek´an´ıu vˇsech proces˚u ve frontˇe,pouˇz´ıv´ase tato forma evidence ˇcasu: dobu ˇcek´an´ıevidujeme pouze u prvn´ıhoprocesu ve frontˇe,u ostatn´ıch je zachycen pouze rozd´ıloproti pˇredchoz´ımu procesu ve frontˇe,pravidelnˇese zkracuje pouze ´udaj u prvn´ıhoprocesu.

M Pˇr´ıklad

M´ameve frontˇeˇctyˇriprocesy: P1 m´aˇcekat 30 ms, P2 m´aˇcekat 65 ms, P3 m´aˇcekat 14 ms, P4 142 ms.

P3 P1 P2 P4 Procesy seˇrad´ımepodle doby ˇcek´an´ı,m´ametoto poˇrad´ı: 14 30 65 142 P3 P1 P2 P4 Fronta bude obsahovat tyto ´udaje: 14 16 35 77 M

5http://www.intel.com, informace na http://whatif.intel.com. 6http://www.openmp.org Kapitola 4 Procesy 66

Udrˇzov´an´ıtakov´efronty je jednoduch´e.V urˇcit´ych ˇcasov´ych intervalech je sniˇzov´an´udaj u prvn´ıho procesu ve frontˇe,a kdyˇzdos´ahnenuly, proces je probuzen“, odstranˇenz fronty. Protoˇzeu druh´eho ” procesu v poˇrad´ıbyl evidov´anrozd´ılvlastn´ıhoˇcasuˇcek´an´ıa ˇcasuˇcek´an´ıprvn´ıhoprocesu, kter´yje ted’ 0, rozd´ılov´eˇc´ıslose ted’ st´av´askuteˇcn´ymˇcasemˇcek´an´ıprocesu. Fronty tak´em˚uˇzemedˇelit podle postˇredk˚u, na kter´ev nich procesy ˇcekaj´ı– fronta pˇripraven´ych proces˚u(ˇcekaj´ına pˇridˇelen´ıprocesoru), blokovan´ych (pro urˇcit´ezaˇr´ızen´ı,napˇr.tisk´arnu nebo disk), sp´ıc´ıch proces˚u(je implementov´anafrontou typu delta-list). £ Jeden proces ve skuteˇcnostinem˚uˇzeb´ytve v´ıceneˇzjedn´efrontˇe(nen´ıv ˇz´adn´efrontˇe,pokud zrovna pouˇz´ıv´anˇekter´yprostˇredekvˇcetnˇeprocesoru), proto v jednoduˇsˇs´ımpˇr´ıpadˇe,kdy nechceme v r˚uzn´ych front´ach evidovat r˚uzn´etypy informac´ı,staˇc´ıv´esttabulku spuˇstˇen´ych proces˚u,a u kaˇzd´ehoidentifik´ator fronty, ve kter´eˇcek´a. Cast´ymzp˚usobemˇ implementace je sada ukazatel˚uv PCB proces˚u,kdy v PCB jednoho procesu je ukazatel na n´asleduj´ıc´ıproces v dan´efrontˇe,samotn´afronta je pak reprezentov´anapouze ukazatelem na PCB prvn´ıho(pro odeb´ır´an´ız fronty) a posledn´ıho(pro pˇrid´av´an´ı)procesu ve frontˇe.Protoˇzeproces m˚uˇzeb´ytv jednom okamˇzikujen v jedn´efrontˇe,m˚uˇzeb´yttento ukazatel v kaˇzd´emPCB jen jeden.

 Ve Windows m´amedva typy front – fronty pˇripraven´ych proces˚u(ˇcekaj´ına procesor) a fronty proces˚uˇcekaj´ıc´ıch na konkr´etn´ızaˇr´ızen´ı(I/O fronty, kaˇzd´ezaˇr´ızen´ım˚uˇzem´ıtsvou frontu).

 V UNIXov´ych syst´emech je spr´ava front pomˇernˇeflexibiln´ı. Existuj´ı samozˇrejmˇefronty pˇripraven´ych proces˚ua I/O fronty, ale tak´efronta typu delta-list pro procesy ˇcekaj´ıc´ına uplynut´ı stanoven´edoby (tu spravuje tzv. time manager) a fronty souvisej´ıc´ıse s´ıt’ov´ymisluˇzbami(UNIXov´e syst´emy jsou ostatnˇeˇcastonasazov´any na mezilehl´es´ıt’ov´eprvky).

4.5 Pˇridˇelov´an´ıprocesoru

U pˇridˇelov´an´ı procesoru budeme obecnˇehovoˇrito procesech, ale ve vˇetˇsinˇesouˇcasn´ych operaˇcn´ıch syst´em˚use procesor pˇridˇelujevl´akn˚um.  Na pˇridˇelov´an´ıprocesoru se pod´ılej´ıdva moduly syst´emu: • pl´anovaˇcprocesoru (CPU Scheduler) pouˇz´ıv´afrontu (fronty) pˇripraven´ych proces˚ua urˇcuje, kter´emu procesu je pˇridˇelenprocesor a na jak dlouho, • dispatcher prov´ad´ı vlastn´ı pˇrepnut´ı kontextu a pˇridˇelen´ı procesoru, tedy uloˇz´ı kontext dosud bˇeˇz´ıc´ıhoprocesu vˇcetnˇeprogramov´ehoˇc´ıtaˇce,naˇctekontext procesu, kter´emu je procesor pr´avˇe pˇridˇelov´an,zjist´ıhodnotu programov´ehoˇc´ıtaˇcea podle nˇehourˇc´ı, od kter´ehom´ıstav k´odupro- cesu m´atento proces bˇeˇzet,a pokud je podporov´anov´ıcereˇzim˚upr´aceprocesoru (privilegovan´y, uˇzivatelsk´y),pak dispatcher prov´ad´ıpˇrep´ın´an´ımezi tˇemitom´ody.

 S dobou, kterou proces (nebo vl´akno)str´av´ına procesoru, souvis´ıpojem ˇcasov´ekvantum. Tento pojem se pouˇz´ıv´ave dvou v´yznamech: • souvisl´adoba, kterou proces str´av´ına procesoru, to m˚uˇze b´ytv rozsahu des´ıtekaˇzstovek mili- sekund, • pˇredplacen´a“ doba, kterou proces m˚uˇzestr´avitna procesoru, pˇriˇcemˇzse z t´etodoby postupnˇe ” ukrajuje – v multitaskingu proces dost´av´aprocesor vˇzdyna urˇcitoukr´atkou dobu a potom o nˇej doˇcasnˇepˇrich´az´ı,tedy skuteˇcnˇestr´aven´adoba se z kvanta po odebr´an´ıprocesoru odeˇcte. Kapitola 4 Procesy 67

V n´asleduj´ıc´ımtextu bude pojem kvantum pouˇz´ıv´anv obou v´yznamech, konkr´etn´ıv´yznamby mˇelb´yt zˇrejm´yz kontextu ve vˇetˇe,pˇr´ıpadnˇeje v´yznamuveden. Na vhodn´ed´elceˇcasov´ehokvanta v prvn´ım v´yznamu (kr´atk´asouvisl´adoba) z´avis´ı funkˇcnost multitaskingu a tedy i kvalita zvolen´emetody pˇridˇelov´an´ıprocesoru. Pokud je pˇr´ıliˇskr´atk´e,je ˇcasov´a reˇziespojen´as pˇrep´ın´an´ımvysok´ave srovn´an´ıse skuteˇcnoudobou bˇehu proces˚u,a tedy syst´emje ne´umˇernˇepomal´y.Jestliˇzeje naopak ˇcasov´ekvantum zbyteˇcnˇevelk´e,pak procesy hodnˇepouˇz´ıvaj´ıc´ı I/O zaˇr´ızen´ıvyuˇz´ıvaj´ıjen malou ˇc´astpˇridˇelen´ehokvanta a procesor mus´ıb´ytstejnˇepˇrep´ın´anˇcastˇeji, a nav´ıcje syst´emm´enˇeinteraktivn´ı.  Procesy m˚uˇzemerozdˇelitna • CPU-bound – procesy, kter´ehodnˇevyuˇz´ıvaj´ıprocesor (napˇr´ıkladv´ypoˇcetn´ı´ulohy nebo sluˇzby), • I/O-bound – interaktivn´ıprocesy, kter´ev´ıcevyuˇz´ıvaj´ıI/O zaˇr´ızen´ı(vˇcetnˇegrafick´eho v´ystupu nebo r˚uzn´ych typ˚uvstupu), • realtimov´eprocesy (vlastnˇeje to specifick´apodmnoˇzinaprvn´ıskupiny). Kaˇzd´yz tˇechto typ˚uproces˚um´atrochu jin´en´arokyna procesor, CPU-bound procesy obvykle vyuˇzij´ı cel´epˇridˇelen´ekvantum v druh´em( pˇredplacen´em“) v´yznamu, u I/O-bound proces˚uje zase mnohem ” vˇetˇs´ıpravdˇepodobnost pˇreruˇsen´ıbˇehu, realtimov´eprocesy jsou ve sv´ych poˇzadavc´ıch jeˇstˇestriktnˇejˇs´ı neˇzCPU-bound. Pl´anovaˇcprocesoru by mˇelrozliˇsovat mezi tˇemitoskupinami proces˚u,aby bylo vyuˇzit´ı procesoru optim´aln´ıa aby byl pˇridˇelov´anproces˚umze skupin rovnomˇernˇe.  Pl´anov´an´ıproces˚um˚uˇzeme rozdˇelitdo tˇr´ıoblast´ı: 1. Dlouhodob´epl´anov´an´ı souvis´ıse samotn´ymn´avrhemmultitaskingu, s urˇcen´ımtoho, co se m´a prov´estpˇrivytvoˇren´ıprocesu a pl´anov´an´ımzach´azen´ıs CPU-bound a I/O-bound procesy. 2. Stˇrednˇedob´epl´anov´an´ı prov´ad´ıspr´avce pamˇeti,jde napˇr´ıklado rozhodov´an´ı,kter´yproces bude v konkr´etn´ısituaci odloˇzen(suspended, resp. jeho pamˇet’ov´estr´anky)a tedy mu nen´ıpo urˇcitou dobu pˇridˇelov´anprocesor. 3. Kr´atkodob´epl´anov´an´ı pˇredstavuje samotn´epl´anov´an´ıprocesoru, kdy se urˇcujenapˇr´ıkladˇcasov´e kvantum proces˚u,frekvence pˇreruˇsen´ıgenerovan´ych ˇcasovaˇcempro pˇreruˇsen´ıbˇehu procesu, atd.

 Pl´anov´an´ım˚uˇzeb´yt • preemptivn´ınebo • nepreemptivn´ı. Jestliˇzeje pouˇzitametoda nepreemptivn´ıhopl´anov´an´ı, pak bˇeˇz´ıc´ıproces vyuˇz´ıv´aprocesor tak dlouho, jak s´ampotˇrebujenebo do vygenerov´an´ıpˇreruˇsen´ı,tedy procesor je odejmut aˇzpo nˇekter´emsyst´e- mov´emvol´an´ı,u preemptivn´ıhopl´anov´an´ı m˚uˇzeb´ytprocesor odebr´anpl´anovaˇcemdˇr´ıve, napˇr´ıkladpˇri pˇreruˇsen´ıgenerovan´emˇcasovaˇcem. D´aleprobereme z´akladn´ımetody pl´anov´an´ıprocesoru. Samotn´epopisovan´emetody jsou pouze z´akladem,typick´epouˇzit´ıje kombinace nˇekolika tˇechto metod, coˇzuvid´ımena konkr´etn´ıch implemen- tac´ıch pro Windows a Linux.

4.5.1 Fronta – FCFS

 Pˇripouˇzit´ımetody FCFS (First Come First Served, tak´eFIFO) je fronta pˇripraven´ych proces˚u organizov´anajako klasick´aFIFO struktura, tedy procesy jsou ˇrazeny na konec fronty a vyb´ır´any ze zaˇc´atku. Kapitola 4 Procesy 68

Je to nepreemptivn´ımetoda, procesy pouˇz´ıvaj´ıprocesor tak dlouho, dokud nen´ı vygenerov´ano pˇreruˇsen´ı nebo pokud samy neodevzdaj´ı procesor. Do fronty jsou procesy ˇrazeny i z jin´ych front (napˇr´ıkladpˇredt´ımmohl proces vyuˇz´ıvat I/O zaˇr´ızen´ı). Nev´yhodou je, ˇzeCPU-bound procesy si vyhrazuj´ıpˇr´ıliˇsmnoho ˇcasuprocesoru a tedy I/O-bound procesy jsou znev´yhodnˇeny. Tato metoda je proto implementovateln´apouze v kombinaci s prioritami proces˚u(I/O-bound procesy by mˇelym´ıtvyˇsˇs´ıprioritu).

4.5.2 Cyklick´epl´anov´an´ı– RR

 Metoda cyklick´ehopl´anov´an´ı(Round Robin, RR) je podobn´apˇredchoz´ı,tak´epouˇz´ıv´amefrontu s organizac´ıFIFO. Rozd´ılje v tom, ˇzekaˇzd´yproces m˚uˇzebˇeˇzetna procesoru jen po stanovenou dobu, ˇcasov´ekvantum, je to tedy preemptivn´ımetoda. Po ukonˇcen´ıbˇehu procesu je tento proces zaˇrazenna konec fronty pˇripraven´ych proces˚u,pokud nen´ı(napˇr´ıkladpˇripˇreruˇsen´ıjemu urˇcen´ım)zaˇrazendo jin´e fronty nebo pˇreveden do stavu sleeping ˇcisuspended7. Kaˇzd´emu procesu je procesor pˇridˇelenna stejnou dobu (ˇcasov´ekvantum). Pokud je ˇcasov´ekvantum pˇr´ıliˇsvelk´e,metoda svou funkˇcnost´ıodpov´ıd´apˇredchoz´ımetodˇe.Opˇetjsou zv´yhodnˇeny CPU-bound procesy, protoˇzepˇredb´ıhaj´ıI/O-bound procesy ˇcekaj´ıc´ına pˇridˇelen´ızaˇr´ızen´ı. Metodu lze br´atjako z´akladpro dalˇs´ı pokroˇcilejˇs´ı preemptivn´ı metody pl´anov´an´ı a lze ji vy- lepˇsitnapˇr´ıkladtak, ˇzepokud byl bˇeˇz´ıc´ımu procesu procesor odejmut po pˇreruˇsen´ısouvisej´ıc´ıms I/O zaˇr´ızen´ım,je pak proces s nevyuˇzitouˇc´ast´ıˇcasov´ehokvanta zaˇrazenm´ıstohlavn´ıfronty pˇripraven´ych proces˚udo pomocn´efronty, kter´am´apˇridˇelenu vyˇsˇs´ı prioritu, a tedy zbyl´eˇcasov´ekvantum m˚uˇze vyˇcerpatdˇr´ıve neˇzkdyby byla metoda uplatnˇenav z´akladn´ı verzi. Po vyˇcerp´an´ı zbytku ˇcasov´eho kvanta je proces zaˇrazen opˇetdo hlavn´ıfronty pˇripraven´ych proces˚u.

4.5.3 Nejkratˇs´ı´uloha– SPN

 Tak´ese naz´yv´aShortest Process Next, SJF – Shortest Job First. Procesor je pˇridˇelentomu procesu, u kter´ehose pˇredpokl´ad´anejkratˇs´ıdoba jeho vyuˇz´ıv´an´ı(nejmenˇs´ıˇcasov´ekvantum). Fronta je vedena jako prioritn´ıs t´ım,ˇzepriority jsou zde urˇceny velikost´ıpˇredpokl´adan´ehovyuˇzit´ehokvanta. Metoda m´apreemptivn´ı i nepreemptivn´ı verzi. Pokud je do fronty pˇripraven´ych ˇrazenproces, u nˇehoˇzse pˇredpokl´ad´amenˇs´ıˇcasov´ekvantum neˇzu pr´avˇebˇeˇz´ıc´ıho procesu, pˇrinepreemptivn´ım pl´anov´an´ıbˇeˇz´ıc´ıproces m˚uˇzebˇeˇzeti d´alea teprve kdyˇz(nepreemptivnˇe)pˇrijdeo procesor, pak m˚uˇze bˇeˇzetnovˇeˇrazen´yproces, pˇripreemptivn´ımpl´anov´an´ıje v takov´empˇr´ıpadˇebˇeˇz´ıc´ıproces okamˇzitˇe pˇreruˇsena procesor je pˇridˇelendalˇs´ımu procesu. Je nutn´eco nejl´epe odhadnout ˇcasov´ekvantum (to kr´atk´e)pro aktu´aln´ı(nast´avaj´ıc´ı)´usekbˇehu procesu. Pro odhadnut´ıˇcasov´ehokvanta existuje v´ıcemoˇznost´ı(oznaˇcme n poˇcetdosavadn´ıch pˇridˇelen´ı procesoru dan´emu procesu, R pole hodnot skuteˇcn´ych ˇcasov´ych kvant, zat´ımo d´elce n, a S pole odhad˚u ˇcasov´ych kvant): 1. N´asleduj´ıc´ıˇcasov´ekvantum b´yv´aˇcastostejn´ejako pˇredchoz´ı,tedy budeme pˇredpokl´adat,ˇzepˇri n´asleduj´ıc´ımpˇridˇelen´ıprocesoru bude proces potˇrebovat asi tolik ˇcasukolik vyuˇzilpˇriposledn´ım pˇridˇelen´ı. S[n + 1] = R[n] (4.1) 7Proces se dostane do stavu sleeping (sp´ıc´ı),pokud je zaˇrazendo fronty typu delta-list, do stavu suspended (suspen- dov´an,odloˇzen)se dost´av´anapˇr´ıkladpˇriodloˇzen´ıvˇsech ˇc´ast´ısv´ehoadresov´ehoprostoru do odkl´adac´ıoblasti. Kapitola 4 Procesy 69

2. Exponenci´aln´ıpr˚umˇerov´an´ı– u kaˇzd´ehoprocesu zaznamen´av´amed´elkuskuteˇcnˇevyuˇzit´edoby pˇridˇelen´ıprocesoru v minulosti a vhodn´eˇcasov´ekvantum odhadujeme v´ypoˇctemaritmetick´eho pr˚umˇeruvˇsech pˇredchoz´ıch skuteˇcn´ych ˇcasov´ych kvant. Aby nebylo nutn´evˇzdypoˇc´ıtataritme- tick´ypr˚umˇervˇsech hodnot, lze vzorec zjednoduˇsitvyuˇzit´ımpˇredchoz´ıhoodhadu a odpov´ıdaj´ıc´ıho skuteˇcn´ehoˇcasov´ehokvanta. n 1 X S[n + 1] = R[i] (4.2) n · · i=1 n−1 1 1 X = R[n] + R[i] n · n · i=1 1 n 1 = R[n] + − S[n] (4.3) n · n · 3. Zkombinujeme oba pˇr´ıstupy (podle vzorc˚u 4.1a 4.3), tedy budeme pˇredpokl´adat,ˇzedalˇs´ıˇcasov´e kvantum se nebude pˇr´ıliˇsliˇsitod pˇredchoz´ıho,ale vezmeme v ´uvahu i pˇredchoz´ıd´elky´usek˚u, tˇrebaˇzes menˇs´ıvahou. Vol´ımevhodnou konstantu c, 0 < c < 1. Pokud je tato konstanta bl´ıˇzejedniˇcce,m´av´yraznˇe vˇetˇs´ıv´ahu d´elka posledn´ıhoskuteˇcn´ehoˇcasov´ehokvanta, a ˇc´ımbl´ıˇzeje nule, t´ımvˇetˇs´ıv´ahu maj´ı rozd´ılyv dˇr´ıvˇejˇs´ıch kvantech. Prvn´ıodhad (S[1]) je obvykle nastaven na 0.

S[n + 1] = c R[n] + (1 c) S[n] (4.4) · − · V´yznamkonstanty c je zˇrejm´yz rekurzivn´ıhorozloˇzen´ı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 zv´yhodˇnujeI/O-bound procesy, jejichˇzˇcasov´ekvantum b´yv´amenˇs´ı,a v´yraznˇezne- v´yhodˇnujeCPU-bound, zvl´aˇstˇekdyˇzjde o dlouho bˇeˇz´ıc´ıprocesy. D´elebˇeˇz´ıc´ıprocesy mohou st´arnout, tedy jejich bˇehpˇrest´av´ab´ytaktu´aln´ı(ztr´acej´ıv´yznam).Pokud je v procesu chyba (nekoneˇcn´ycyklus), pak chybnˇebˇeˇz´ıc´ıproces neblokuje procesor a lze ho snadno detekovat (z˚ust´av´ana konci fronty, je neust´aleodstavov´an).

4.5.4 Pl´anov´an´ıpodle priorit

Pˇriuplatnˇen´ıt´etometody pˇridˇelujemeprocesor procesu s nejvyˇsˇs´ıprioritou, tedy pouˇz´ıv´ameprioritn´ı frontu. Metoda m´aopˇetpreemptivn´ıi nepreemptivn´ıvariantu, stejnˇejako pˇredchoz´ı.Za variantu t´eto metody m˚uˇzemepovaˇzovat tak´emetodu SPN (pˇredchoz´ı),kde se priorita odv´ıj´ıod ˇcasov´ehokvanta procesu (ˇc´ımmenˇs´ıkvantum, t´ımvyˇsˇs´ıpriorita).  Priorita procesu m˚uˇzeb´yturˇcenastaticky (statick´apriorita, nemˇen´ıse za bˇehu procesu) nebo dynamicky (dynamick´apriorita, mˇen´ıse za bˇehu procesu). Dynamick´apriorita pˇrivhodn´empouˇzit´ı sniˇzujenebezpeˇc´ı st´arnut´ı proces˚us n´ızkou prioritou, priorita m˚uˇzeb´ytu d´eleˇcekaj´ıc´ıch proces˚u postupnˇezvyˇsov´ana. Kapitola 4 Procesy 70

£ Priority jsou bˇeˇznousouˇc´ast´ıalgoritm˚upl´anov´an´ıprocesoru v souˇcasn´ych operaˇcn´ıch syst´emech. Windows do verze XP pracuj´ıpouze s prioritami proces˚una procesoru, v UNIXov´ych syst´emech a ve Windows od verze Vista a Server 2008 existuj´ıtak´eI/O priority (pro pl´anovaˇcpˇr´ıstupuke zdroj˚um, napˇr´ıkladpamˇetiˇcidisku).

4.5.5 Kombinace metod s v´ıcefrontami

Je vedeno v´ıcefront pˇripraven´ych proces˚u,procesy jsou rozdˇelov´any dle urˇcit´evlastnosti (vˇetˇsinou podle priority). Pro kaˇzdoufrontu je stanovena nˇekter´ametoda pl´anov´an´ı,a d´alejedna z metod je uplatˇnov´anapˇrirozhodov´an´ımezi frontami.  Jednoduch´yalgoritmus ˇrazen´ı proces˚udo jednotliv´ych front spoˇc´ıv´av tom, ˇzekaˇzd´afronta je urˇcenapro urˇcit´ytyp proces˚u(syst´emov´e,interaktivn´ı,d´avkov´e,ostatn´ı)s t´ım,ˇze jednotliv´efronty jsou organizov´any metodou RR (cyklick´epl´anov´an´ı),FCFS (fronta) nebo pouˇzit´ımdynamick´epriority. Kaˇzd´afronta m´astanovenu prioritu (net´ykaj´ıc´ıse jednotliv´ych proces˚u,ale cel´efronty), a pˇrednostnˇe jsou br´any procesy z fronty s nejvyˇsˇs´ıprioritou.  Efektivnˇejˇs´ıalgoritmus umoˇzˇnujepˇresouv´an´ıproces˚umezi frontami, fronty nejsou urˇceny pouze pro konkr´etn´ıtyp proces˚u.Fronty jsou uspoˇr´ad´any do posloupnosti s klesaj´ıc´ıprioritou (tj. prvn´ıfronta v posloupnosti m´anejvyˇsˇs´ıprioritu). Proces je nejdˇr´ıvzaˇrazendo prvn´ıfronty, kdyˇzvyˇcerp´asv´eˇcasov´e kvantum, je pro ˇcek´an´ına pˇridˇelen´ıdalˇs´ıhoˇcasov´ehokvanta zaˇrezendo druh´efronty, pak do tˇret´ı,atd. Pˇripˇreruˇsen´ıbˇehu I/O zaˇr´ızen´ımse po opˇetovn´empˇrechodu procesu do stavu pˇripraven´yproces zaˇrad´ı do prvn´ıfronty. Pl´anovaˇcprocesoru zaˇcnepracovat s n´asleduj´ıc´ıfrontou aˇztehdy, kdyˇzjsou vˇsechny pˇredchoz´ıfronty pr´azdn´e.Posledn´ıfronta je organizov´anametodou RR, ostatn´ımetodou FCFS. Tento algoritmus zv´yhodˇnujeI/O-bound procesy, protoˇzety se po kaˇzd´empouˇzit´ıI/O zaˇr´ızen´ı vracej´ıdo prvn´ıfronty, CPU-bound procesy s ˇcasempostupuj´ıdo n´asleduj´ıc´ıch front s menˇs´ıprioritou.

4.6 Pl´anov´an´ıv jednotliv´ych operaˇcn´ıch syst´emech

Je tˇrebasi uvˇedomit,ˇzepl´anovaˇcprocesoru je vlastnˇejednou z nejd˚uleˇzitˇejˇs´ıch komponent j´adra – na nˇemz´aleˇz´ı, jak efektivnˇebude pracovat syst´emi procesy. V operaˇcn´ıch syst´emech m˚uˇzeb´yt i v´ıcpl´anovaˇc˚u,pˇriˇcemˇzkaˇzd´ym˚uˇzeb´ytvhodn´ypro jin´yzp˚usobvyuˇzit´ısyst´emu (klasick´y,server, embedded, atd.), podle toho, jak´etypy proces˚uje tˇrebaupˇrednostˇnovat, aby byl bˇehsyst´emu co nejplynulejˇs´ıa aby procesy pracovaly efektivnˇe. Pl´anovaˇc(scheduler) je vlastnˇeimplementac´ıvˇseho,co jsme si dosud ˇreklio multitaskingu a mul- tithreadingu: urˇcuje,jak se bude zach´azets frontami proces˚u/vl´aken, jak to je s prioritami proces˚u, kdy se m´apˇrep´ınatkontext, jak´em´ab´ytkvantum, . . .

4.6.1 J Windows

£ Pl´anovaˇcprocesoru ve Windows (CPU Scheduler) pl´anuje v´yhradnˇevl´aknabez ohledu na poˇcet vl´aken v jednotliv´ych procesech (tj. vl´aknaˇcekaj´ıve front´ach). V j´adruexistuje modul pro pl´anov´an´ı pˇridˇelov´an´ıprocesoru (jeho jader) vl´akn˚um, a od verze Vista tak´escheduler pro I/O (pl´anuje pˇr´ıstup k dalˇs´ımprostˇredk˚um). Dispatcher, kter´yprov´ad´ıpˇrep´ın´an´ıkontextu podle poˇzadavk˚uscheduleru, nen´ıkonkr´etn´ıfunkce ˇciknihovna, jeho souˇc´asti jsou v r˚uzn´ych modulech j´adra.Vych´az´ıse z toho, ˇzepˇrep´ın´an´ıprob´ıh´apˇri ud´alosti(ud´alostmiˇr´ızen´epˇrep´ın´an´ı). Kapitola 4 Procesy 71

£ Pˇripl´anov´an´ıvl´aken se pouˇz´ıv´apreemptivn´ıpl´anov´an´ıs v´ıcefrontami, vl´aknona procesoru m˚uˇze b´ytkdykoliv pˇreruˇseno,pokud o procesor ˇz´ad´avl´akno s vyˇsˇs´ıprioritou. Pokud vl´aknonevyuˇzijecel´y interval, po kter´ym´apˇridˇelenprocesor, m˚uˇzepˇrenechat tento nevyuˇzit´yˇcasjin´emu vl´aknu z t´ehoˇz procesu vol´an´ımfunkce SwitchToThread. Pro kaˇzdouprioritu existuje jedna fronta pˇripraven´ych proces˚u,tedy celkem 32 priorit, 0–31. Pokud m´avl´aknoˇcekat na procesor, je zaˇrazenodo fronty podle sv´edynamick´epriority (z´akladn´ıprioritu vl´aknadˇed´ıod sv´ehoprocesu). Vl´aknas vyˇsˇs´ıprioritou maj´ıvˇzdypˇrednostpˇredvl´akny s niˇzˇs´ıprioritou, tedy pˇrednostnˇeje procesor pˇridˇelov´anvl´akn˚umˇcekaj´ıc´ımve front´ach s vyˇsˇs´ımiˇc´ıslypriorit. Procesor je pˇridˇelov´anna dobu odvozenou od intervalu tiku syst´emov´ychhodin. Tento interval je pevnˇestanoven na hodnotu nˇekdemezi 10–15 ms, skuteˇcnouhodnotu lze zjistit napˇr´ıkladprogramem clockres od Sysinternals. Standardnˇebˇeˇz´ıvl´aknopo dobu 2 interval˚una desktopu (na serveru 12). Pˇrikaˇzd´em dalˇs´ımtiku se odeˇctez kvanta bˇeˇz´ıc´ıhovl´aknapevn´ahodnota, kvantum se m´ırnˇesniˇzuje i pˇriˇcek´an´ına zaˇr´ızen´ı.Po vyˇcerp´an´ıkvanta je vl´aknu pˇridˇelenonov´ekvantum. £ Dynamick´apriorita vl´aknam˚uˇzeb´ytsn´ıˇzena,kdyˇzvl´aknovyˇcerp´adˇr´ıve pˇridˇelen´ekvantum a je mu pˇridˇelenonov´e.Priorita m˚uˇze b´ytnaopak vl´aknu zv´yˇsenanapˇr´ıkladpˇridokonˇcen´ıI/O operace nebo interaktivn´ımu vl´aknu pˇriprobuzen´ıv d˚usledkuud´alostiv oknˇe.Realtimov´eprocesy pouˇz´ıvaj´ı statickou prioritu, tedy nemˇen´ı ji po celou dobu sv´ehobˇehu (aˇzna z´asahy zvenˇc´ı“, napˇr´ıklad od ” uˇzivatele nebo od j´adra). Kr´atk´ekvantum je v´yhodn´ev syst´emu s mnoha interaktivn´ımi procesy (zvyˇsuje propustnost syst´emu, typicky na desktopu se spoustou okenn´ıch aplikac´ı“), dlouh´ekvantum je v´yhodn´epro syst´em ” s mnoha v´ypoˇcetn´ımiprocesy ˇcastobˇeˇz´ıc´ımina pozad´ı(coˇzjsou typicky servery).

M Pˇr´ıklad V grafick´emrozhran´ı m˚uˇzeme urˇcit,zda bude v´ychoz´ı d´elka kvanta kr´atk´a(2 tiky) nebo dlouh´a (12 tik˚u),a to v n´astroji Syst´em, d´aleodkaz Upˇresnitnastaven´ı syst´emu, karta Upˇresnit, tlaˇc´ıtko Nastaven´ı, jak vid´ıme na obr´azku 4.8 vlevo.

Obr´azek4.8: Stanoven´ıd´elkykvanta vl´aknaa nastaven´ıkvanta v registru

Podrobnˇejˇs´ınastaven´ıvyuˇz´ıv´an´ıkvant se prov´ad´ıv registru v kl´ıˇci HKLM/System/CurrentControlSet /Control/PriorityControl, kde najdeme hodnotu Win32PrioritySeparation (na obr´azkuvpravo) – skl´ad´ase z 6 bit˚u,jejich hodnoty urˇcuj´ı,zda m´ab´ytd´elka kvanta kr´atk´anebo dlouh´a,promˇenn´a nebo pevn´a,zda lze nav´yˇsitkvanta proces˚una popˇred´ı. M

Jak bylo v´yˇseuvedeno (v sekci o vl´aknech), ve Windows jsou kromˇevl´aken (thread) tak´e vl´ak´enka (fibers). Pl´anov´an´ıvl´ak´enekneprov´ad´ıcentr´aln´ıpl´anovaˇcz j´adra,ale prov´ad´ıje samotn´aaplikace ve vlastn´ıreˇzii. Toto pl´anov´an´ıje nepreemptivn´ı,vl´aknoskl´adaj´ıc´ıse z v´ıcefiber˚upˇrepnena jin´yfiber Kapitola 4 Procesy 72

(vˇsev ˇcasuprocesoru tohoto vl´akna),aˇzkdyˇzp˚uvodn´ıfiber dobrovolnˇe“ odevzd´aprocesor dalˇs´ımu ” vl´ak´enkuv r´amci tohoto vl´aknavol´an´ım funkce SwitchToFiber.

 Afinita procesu ˇcivl´aknaje urˇcen´ıprocesor˚u(nebo jader procesoru), na kter´ych m˚uˇzeproce- sor bˇeˇzet.Tuto mnoˇzinu procesor˚u(jader) lze omezit nastaven´ım masky afinity, napˇr´ıkladv Process Exploreru (v kontextov´emmenu procesu, volba Set Affinity) – vid´ımena obr´azku 4.9. V programu lze pouˇz´ıtbud’ API funkci SetThreadAffinityMask nebo SetProcessAffinityMask. Toto se naz´yv´a hard ” affinity“ (napevno omezujeme mnoˇzinu procesor˚u), soft affinity“ pˇredstavuje pravidlo, ˇzevl´aknoje ” pˇrednostnˇepl´anov´anona ten procesor (j´adro),na kter´embˇeˇzelonaposledy.

Obr´azek4.9: Nastaven´ımasky afinity procesu v Process Exploreru

4.6.2 J Linux

V uˇzivatelsk´emprostoru se pouˇz´ıv´apreemptivn´ımultitasking. Samotn´ej´adroje pˇriv´ychoz´ımtypu pˇrekladuj´adranepreemptivn´ı,tj. proces bˇeˇz´ıc´ıv reˇzimu j´adranem˚uˇzeb´ytpˇreruˇsen(ostatn´ıano), j´adrolze pˇreloˇzits pˇr´ıznakem urˇcuj´ıc´ımpreempci j´adra,pak bude preemptivn´ıcel´ysyst´em. Procesy bˇeˇz´ıc´ıv uˇzivatelsk´emprostoru jsou pl´anov´any preemptivnˇe.J´adro se m˚uˇzechovat bud’ plnˇenepreemptivnˇe(pˇr´ıznak CONFIG_PREEMPT_NONE pˇripˇrekladuj´adra),nebo plnˇepreemptivnˇe(pˇr´ıznak CONFIG_PREEMPT) anebo dobrovolnˇepreemptivnˇe(pˇr´ıznak CONFIG_PREEMPT_VOLUNTARY). Pokud jde o desk- topov´ysyst´em,je pro j´adrovhodn´avolba dobrovolnˇepreemptivn´ıhochov´an´ı(´ulohabˇeˇz´ıc´ıv reˇzimu j´adra,tˇrebaobsluha syst´emov´ehovol´an´ı, se m˚uˇzedobrovolnˇevzd´atprocesoru), pro server se do- poruˇcujenepreemptivn´ıchov´an´ı(´ulohy v j´adˇrese nevzd´avaj´ıprocesoru samy, ale protoˇzejsou velmi kr´atk´ea dobˇreodladˇen´e,nevad´ıto a procesor je l´epe vyuˇz´ıv´an,m´enˇezatˇeˇzov´anreˇzi´ıpˇrep´ın´an´ı).Plnˇe preemptivn´ıchov´an´ıznamen´avysokou odezvu, ale vyˇsˇs´ıreˇziipˇrep´ın´an´ı(ˇcastˇejidoch´az´ık pˇrep´ın´an´ı kontextu), je vhodn´enapˇr´ıkladpro embedded syst´emy.  V Linuxu se procesor pl´anuje vˇzdyna dobu, kterou naz´yv´ame epocha. Na zaˇc´atkuepochy kaˇzd´ypro- ces dostane pˇridˇelenoˇcasov´ekvantum, kter´epostupnˇespotˇrebov´av´a.Kdyˇzvˇsechny procesy spotˇrebuj´ı sv´eˇcasov´ekvantum, zaˇcnenov´aepocha a vˇsechny procesy dostanou dalˇs´ıˇcasov´ekvantum. Pro bˇeˇzn´avl´akna(´ulohy) se pouˇz´ıvaj´ı dynamick´epriority – priorita dlouho ˇcekaj´ıc´ı´ulohy roste, priorita dosud dlouho bˇeˇz´ıc´ı´ulohy kles´a.Realtimov´e´ulohy jsou pl´anov´any se statickou prioritou. Existuje v´ıcefront pˇripraven´ych proces˚u(sp´ıˇse vl´aken, pouˇz´ıv´ase pojem ´uloha),kaˇzd´az nich m˚uˇze m´ıtvlastn´ıpl´anovaˇc. Kapitola 4 Procesy 73

Existuj´ıtyto pl´anovaˇce: • SCHED_OTHER – pro bˇeˇzn´e´ulohy, pouˇz´ıv´av´yˇsepopsan´ysyst´em nice v kombinaci s dynamick´ymi prioritami (zohledˇnujese, jak moc ´ulohavyuˇz´ıv´aprocesor), dynamick´apriorita m´avliv na d´elku kvanta. Nem˚uˇzese st´at,aby ´ulohy s nejniˇzˇs´ıprioritou nedostaly v epoˇseprocesor. • SCHED_BATCH – pl´anovaˇcvhodn´ypro d´avkov´e´ulohy (neinteraktivn´ıv´ypoˇcetn´ıvl´akna,kter´aˇcasto bˇeˇz´ına pozad´ı),jin´ymzp˚usobem se zach´az´ıs dynamickou prioritou. • SCHED_FIFO – pro realtimov´e´ulohy. Pl´anuje nepreemptivnˇea pouˇz´ıv´a99 ´urovn´ıstatick´ych priorit (hodnoty 1–99). Realtimov´e´ulohy jsou vˇzdyupˇrednostnˇeny, a to i pˇred´ulohami pl´anovan´ymi jin´ympl´anovaˇcem. • SCHED_RR (Round Robin) – podobnˇejako pˇredchoz´ı(tak´e99 statick´ych priorit), ale pl´anuje pre- emptivnˇe Prvn´ıdva pl´anovaˇcemohou b´ytvyuˇzity pro bˇeˇzn´e´ulohy, zbyl´edva pro realtimov´e´ulohy. Rozd´ılmezi pl´anovaˇcipro bˇeˇzn´e´ulohy je v tom, ˇze SCHED_BATCH v´ıcediskriminuje ´ulohu pˇripˇridˇelov´an´ıˇcasov´ych kvant, aby pˇr´ıliˇsnezatˇeˇzovaly procesor a nesniˇzovaly propustnost syst´emu. Rozd´ılmezi realtimov´ymi pl´anovaˇcije v tom, ˇze SCHED_FIFO pouˇz´ıv´amepro ´ulohy, kter´enutnˇepotˇrebuj´ıbˇeˇzetvˇzdypo dan´yˇcas bez pˇreruˇsen´ı, SCHED_RR se naproti tomu pouˇzijepro ´ulohy, kter´emohou b´ytpˇreruˇseny a na procesoru nahrazeny jinou ´ulohouse stejnou nebo vyˇsˇs´ıprioritou. Proces (resp. jeho program´ator)m˚uˇzevolit pl´anovaˇc,prioritu a afinitu (na kter´ych procesorech ˇcij´adrech m´aproces bˇeˇzet).Existuj´ıfunkce pro zjiˇstˇen´ıpouˇz´ıvan´ehopl´anovaˇce,jeho nastaven´ı(pro zjiˇstˇen´ı je funkce sched_getscheduler(), pro nastaven´ı je funkce sched_setscheduler()) a podobnˇe pro afinitu (napˇr´ıkladpro nastaven´ıje funkce sched_setaffinity()). O ovlivˇnov´an´ıhodnoty nice bylo ps´anov sekci o priorit´ach proces˚u(str. 52). Dalˇs´ıfunkc´ıpro nastaven´ıpriority (obecnˇejˇs´ı,nastavuje nejen nice bˇeˇzn´ych ´uloh,ale i prioritu realtimov´ych ´uloh)je setpriority.  To, zda je ´uloha interaktivn´ı, syst´emurˇcujepodle pr˚umˇern´edoby, kterou ´ulohastr´avilave stavu sp´anku(sleep_avg, je to poloˇzka v task_struct) – interaktivn´ı´ulohy str´av´ıv reˇzimu sp´ankuhodnˇe ˇcasu,protoˇzehodnˇeˇcekaj´ınapˇr´ıkladna to, neˇzuˇzivatel klepne na tlaˇc´ıtko na kl´avesnici nebo pohne myˇs´ı.Hodnota se zvyˇsujepˇrikaˇzd´emprobuzen´ıze sp´ankuo hodnotu odpov´ıdaj´ıc´ıdobˇesp´anku,sniˇzuje se za bˇehu ´ulohy na procesoru. Pomoc´ıhodnoty sleep_avg se d´atak´epodchytit (zjistit) proces, kter´y zamrzl, protoˇzespotˇrebov´av´avelmi mnoho ˇcasuprocesoru a nikdy nesp´ı“. ” Pl´anov´an´ı procesoru se liˇs´ı v r˚uzn´ych verz´ıch jader Linuxu. Ve verzi 2.6 byl algoritmus hodnˇe vylepˇsen,m´avelmi dobrou sloˇzitost– O(1). O sloˇzitostialgoritm˚use budeme uˇcitv pˇredmˇetu Vyˇc´ıslitel- nost a sloˇzitost, zde n´amstaˇc´ıinformace, ˇzetato sloˇzitostzaruˇcujedobrou propustnost syst´emu i pˇri vysok´empoˇctuproces˚u.D´alese budeme zab´yvat pouze pl´anov´an´ımv j´adrech verze 2.6 a vyˇsˇs´ı.  Fronty pˇripraven´ych proces˚ujsou ve dvou pol´ıch front – active (aktivn´ı´ulohy, mohou b´ytv epoˇse pl´anov´any) a expired (´ulohy, jimˇzv epoˇsevyprˇselokvantum). Samotn´efronty jsou realizov´any jako obousmˇernˇezˇretˇezen´yseznam z´aznam˚uo ´uloh´ach, pro kaˇzdouprioritu (ˇcinice) je v poli jedna fronta. Po seˇcten´ıvˇsech r˚uzn´ych hodnot priorit (0, nice pro bˇeˇzn´e´ulohy 40, statick´apro realtimov´e´ulohy 99) zjist´ıme,ˇzev cel´estruktuˇreje 2 140 front. × Procesor dost´avaj´ıpouze ´ulohy ve front´ach pole aktivn´ıch ´uloh,a to podle sv´epriority (zaˇrazen´ı do konkr´etn´ıfronty podle dynamick´epriority) a zvolen´eho pl´anovaˇce(ten ˇr´ıd´ıpreempci a d´elkuˇcasu na procesoru). Uloha,´ kter´aspotˇrebovala sv´ekvantum, je pˇresunuta do fronty pro svou prioritu v poli Kapitola 4 Procesy 74

. . . . úloha úloha priorita 2 priorita 2 úloha úloha · · · · · · úloha úloha priorita 1 priorita 1 úloha úloha · · · · · · úloha priorita 0 priorita 0 úloha

active expired

Obr´azek4.10: Pl´anov´an´ıprocesoru v Linuxu expired. Ulohy,´ kter´ebyly usp´any, nejsou v ˇz´adn´ez tˇechto front (logicky – jsou ve frontˇeuspan´ych proces˚u/´uloh). Kdyˇzuˇzjsou vˇsechny pˇripraven´e´ulohy v poli expired (tj. ˇz´adn´ev poli active), konˇc´ıepocha. Ze zaˇc´atkem nov´eepochy dostanou vˇsechny ´ulohy nov´ekvantum, pole active a expired se vymˇen´ı(aby nebylo nutn´epˇresouvat vˇsechny ´ulohy) a pˇridˇelov´an´ıprocesoru pokraˇcuje. Pole se vymˇeˇnuj´ıtak´ev pˇr´ıpadˇe,ˇzeod zaˇc´atkuepochy ubˇehladoba pˇresahuj´ıc´ıpˇredemstanoven´y limit. Tento mechanismus m´azabr´anittomu, aby pˇrivelk´empoˇctuinteraktivn´ıch ´uloh(kter´ejsou mezi bˇeˇzn´ymi´ulohamiupˇrednostˇnov´any) nebyly ostatn´ı´ulohy pˇr´ıliˇspenalizov´any (jinak by byly velmi ˇcasto v poli expired).  Zat´ımcodynamick´epriority urˇcuj´ıfrontu, do kter´eje ´ulohazaˇrazena,statick´epriority (nice) maj´ı vliv na d´elkukvanta. Kdyˇzje vytvoˇrenanov´a´uloha, z´ısk´aplnou hodnotu kvanta, at’ uˇzje vytvoˇrena v kter´ekoliv f´aziepochy, ale aby tento fakt nezp˚usobilpˇr´ıliˇsn´ezv´yhodˇnov´an´ınov´ych ´uloh,podˇel´ıse nov´a´ulohao sv´ekvantum se sv´ymrodiˇcem.Pokud je naopak ´ulohaukonˇcov´ana,zb´yvaj´ıc´ınevyuˇzit´e kvantum cel´epˇred´asv´emu rodiˇci.  Uloha´ s prioritou 0 je idle. Nem´aˇz´adn´yk´od,kter´yby opakovanˇevykon´avala, pouze vytvoˇr´ıproces init a je pl´anov´anav dobˇe,kdy ˇz´adn´ajin´a´ulohanebˇeˇz´ı. Pˇrep´ın´an´ıkontextu (samotn´ydispatcher) je implementov´anojako funkce schedule(). Prov´ad´ıse tehdy, kdyˇzbˇeˇz´ıc´ı´uloha vyˇcerp´asv´ekvantum, mus´ıˇcekat na ud´alostnebo se sama vzd´aprocesoru.  Na v´ıceprocesorov´em(v´ıcej´adrov´em)syst´emu existuje pro kaˇzd´yprocesor (j´adro)samostatn´astruk- tura front. Mezi tˇemitostrukturami se ´ulohapˇresouv´anapˇr´ıkladtehdy, kdyˇzje zmˇenˇenaafinita ´ulohy, vypne se procesor ˇcij´adro,je tˇrebaspustit algoritmus vyvaˇzov´an´ız´atˇeˇzenebo z d˚uvodu efektivnˇejˇs´ıho vyuˇzit´ıpamˇeti(u NUMA architektury).

4.7 Komunikace proces˚u

4.7.1 Princip komunikace proces˚u

Jednou z v´yhod multitaskingu je moˇznostsnadn´ekomunikace proces˚u– meziprocesov´ekomunikace (IPC, Interprocess Communication).  Rozliˇsujeme proces odes´ılaj´ıc´ı (odes´ılatel,sender) a proces pˇrij´ımaj´ıc´ı (pˇr´ıjemce,receiver). Odes´ılatel m˚uˇzeposlat • data ˇcitextov´yˇretˇezec(pˇr´ıpadnˇes d´elkou omezenou urˇcitoukonstantou), • odkaz na data (adresa v pamˇetinebo na pevn´empamˇet’ov´emm´ediu,m˚uˇzej´ıto doˇcasn´ysoubor), • sign´al(ˇc´ıslos urˇcit´ymv´yznamem,napˇr´ıkladinformace o tom, ˇzem´aproces ukonˇcitsvou ˇcinnost). Kapitola 4 Procesy 75

 Rozliˇsujemedva z´akladn´ıtypy komunikace: • pˇr´ım´a– pˇr´ıjemce je pˇredemzn´am(zas´ıl´an´ızpr´av), • nepˇr´ım´a– pˇr´ıjemcenen´ıurˇcenodes´ılatelempˇriodes´ıl´an´ıdat, ale aˇzbˇehemsamotn´ehopˇresunu (schr´anka, sd´ılen´apamˇet’) nebo nav´az´an´ımspojen´ımzvnˇejˇsku(roury – pipes). Pokud je pˇr´ıjemcepouze jeden a odes´ılatelho pˇr´ımoadresuje, model komunikace naz´yv´ame unicast, jestliˇzeje zpr´ava (nebo jak´akoliv data) urˇcenavˇsem,kdo mohou komunikovat, a to bez konkr´etn´ı adresace, pak je to model broadcast, pokud je v´ıcekonkr´etn´ıch adresovan´ych pˇr´ıjemc˚u,jde o model multicast.  Pˇr´ım´akomunikace (zas´ıl´an´ızpr´av)m´av´yhodu pˇredevˇs´ımv ˇsirˇs´ıch moˇznostech pouˇzit´ı.Zpr´avy lze zas´ılattak´eproces˚umbˇeˇz´ıc´ımna jin´emprocesoru nebo poˇc´ıtaˇci,nejsme v´az´anipodm´ınkou existence sd´ılen´ehopamˇet’ov´ehoprostoru pro odes´ılatelea pˇr´ıjemce.Zas´ıl´an´ızpr´avje realizov´anon´asleduj´ıc´ımi funkcemi: • send(P,zpr´ava) – proces odeˇslepˇr´ıjemci– procesu P – zpr´avu, • receive(Q,zpr´ava) – proces pˇrijme(vyzvedne si) zpr´avuod odes´ılatele Q, zpr´ava se naˇctedo druh´ehoparametru.  Pˇr´ımoukomunikaci dˇel´ımedo dvou skupin: • symetrick´a – odes´ılatela pˇr´ıjemcezpr´avyse navz´ajemdok´aˇzouidentifikovat, kaˇzd´yv´ı,s k´ym komunikuje, lze realizovat napˇr´ıklad prioritn´ı frontou, ze kter´ese pˇrednostnˇevyb´ıraj´ı zpr´avy urˇcit´ehoodes´ılatele, • asymetrick´a – pˇr´ıjemce nemus´ızn´atodes´ılatele,jen odes´ılatelv´ı,komu zpr´avupos´ıl´a.Potom pˇr´ıjemcenezad´av´aidentifikaci odes´ılateledo prvn´ıhoparametru funkce receive, ale tento ´udaj je do tohoto parametru naˇctenstejnˇejako samotn´azpr´ava (odpov´ıd´ajednoduch´emu vyb´ır´an´ı zpr´avz fronty).  Pˇr´ımoukomunikaci d´aledˇel´ımena • asynchronn´ı – odes´ılaj´ıc´ıproces nemus´ıˇcekat na odpovˇed’, • synchronn´ı – odes´ılaj´ıc´ıproces mus´ıˇcekat na potvrzen´ızpr´avynebo odpovˇed’ (do t´edoby je blokov´an,obvykle ve stavu suspended). Zas´ıl´an´ızpr´avlze implementovat mnoha zp˚usoby, napˇr´ıkladtak, ˇzeodes´ılan´azpr´ava je uloˇzenaodes´ıla- telem do fronty ve spoleˇcn´eˇcisyst´emov´epamˇeti,z kter´ejsou zpr´avyk tomu urˇcen´ymmodulem spr´avy proces˚upostupnˇevyb´ır´any a odes´ıl´any, tedy kop´ırov´any do pamˇet’ov´ehoprostoru pˇr´ıjemce(jeho fronty zpr´av). Synchronn´ıkomunikace b´yv´anˇekdyimplementov´anatˇremifunkcemi – kromˇedˇr´ıve uveden´ych send a receive jeˇstˇe reply(P,zpr´ava) pro potvrzen´ıpˇrijet´ızpr´avyod procesu P. Odes´ılatelje po odesl´an´ı zpr´avysuspendov´ana m˚uˇzepokraˇcovat aˇzpo obdrˇzen´ıpotvrzen´ıvyslan´ehopˇr´ıjemcempomoc´ıfunkce reply. Tak funguje napˇr´ıklad RPC (Remote Procedure Call, vol´an´ıvzd´alen´eprocedury, tedy procedury nepatˇr´ıc´ıdo k´oduvolaj´ıc´ıhoprocesu). Odes´ılatelje proces volaj´ıc´ıvzd´alenouproceduru, pˇr´ıjemceje proces, v jehoˇzk´oduse tato procedura nach´az´ı.Odes´ılatelje blokov´anaˇzdo chv´ıle,kdy pˇr´ıjemceodeˇsle reply o proveden´ıvolan´eprocedury.  Nepˇr´ım´akomunikace prob´ıh´apˇresrozhran´ıpˇredstavovan´ebodem spojen´ı,naz´yvan´ymobvykle port (br´ana,socket, schr´anka). Kapitola 4 Procesy 76

Socket v s´ıt’ov´em(ale tak´elok´aln´ım) smyslu slova je tedy br´ana,pˇreskterou prob´ıh´akomunikace. M˚uˇzeb´ytvytvoˇrenkter´ymkoliv procesem nebo operaˇcn´ımsyst´emem.Vlastn´ıkem socketu je ten proces, kter´yho vytvoˇril,nebo m˚uˇzeb´ytvlastnictv´ıpˇrevedeno na jin´yproces. Do socketu m˚uˇzezapisovat jen vlastn´ık(odes´ılatel),ostatn´ıprocesy, kter´ymje k socketu dovolen pˇr´ıstup, mohou jen ˇc´ıst(pˇr´ıjemci). Komunikace prob´ıh´apomoc´ıfunkc´ı • send(ID_portu,zpr´ava) – odes´ılateluloˇz´ıdo zadan´ehoportu zpr´avu, • receive(ID_portu,zpr´ava) – pˇr´ıjemcevyzvedne zpr´avuz dan´ehoportu. Speci´aln´ıtyp socketu (portu) je pipe (roura). Jde o soubor pevn´ed´elky(v UNIXov´ych syst´emech), kter´yobvykle ani neb´yv´auloˇzenna disk, z˚ust´av´av operaˇcn´ıpamˇeti,neb´yv´aani str´ankov´an.Odes´ılatel ho vytvoˇr´ı(syst´empro tento ´uˇcelobvykle nab´ız´ınˇekter´esyst´emov´evol´an´ı)a postupnˇenaplˇnujedaty. Po naplnˇen´ı je odes´ılatel blokov´an,dokud pˇr´ıjemce nepˇreˇctecel´ytento soubor, jeho obsah je pak smaz´ana odes´ılatelm˚uˇzepokraˇcovat.

4.7.2 J Komunikace ve Windows

 Zpr´avyokn˚um. Komunikace v uˇzivatelsk´emprostoru prob´ıh´apˇredevˇs´ımpomoc´ızpr´avokn˚um. Kaˇzd´eokno m´aproceduru naz´yvanou Window procedure (procedura okna), kter´aje vol´anavˇzdy, kdyˇz tomuto oknu byla doruˇcenazpr´ava. D˚uleˇzitouroli hraje pˇredevˇs´ımprocedura hlavn´ıhookna aplikace – pokud pˇrestaneodpov´ıdat(vyzved´avat si zpr´avy),syst´emz toho usoud´ı,ˇzeaplikace neodpov´ıd´a“, ” tedy moˇzn´azamrzla. Kaˇzd´eokno je jednoznaˇcnˇeidentifikov´ano sv´ymmanipul´atorem(handle), jako ostatnˇekter´ykoliv jin´yobjekt ve Windows. Souˇc´ast´ı pos´ılan´ezpr´avyje handle okna, kter´emu je zpr´ava urˇcena, d´ale identifik´atorzpr´avy(napˇr´ıklad WM_PAINT pro informaci, ˇzeaplikace m´atoto okno pˇrekreslit,protoˇze doˇsloke zmˇenˇedat, kter´ajsou v nˇemzobrazena), a dalˇs´ıparametry upˇresˇnuj´ıc´ıobsah zpr´avy(obvykle data nebo hodnota NULL). Zpr´avyokn˚ummohou b´ytod syst´emu nebo od aplikac´ı.Takovou zpr´avutedy m˚uˇzeposlat i aplikace (sama sobˇenebo jin´eaplikaci), ale jen tehdy, pokud zn´ahandle okna (pokud moˇznohandle hlavn´ıho okna aplikace).

Proces pro nová zpracování zpráva přerušení

Win32 Win32 . . . Win16 Win16 . . . aplikace aplikace aplikace aplikace

Obr´azek4.11: Fronty zpr´avve Windows

 Zpr´avysouvisej´ıs ud´alostmi – aplikace jsou ud´alostmiˇr´ızen´e,a pˇrivzniku ˇcivygenerov´an´ıud´alosti, kter´ase t´yk´akonkr´etn´ıaplikace, je tato aplikace informov´anazpr´avou. Proto je window procedure velmi Kapitola 4 Procesy 77 d˚uleˇzit´asouˇc´astaplikace a ve struktuˇre k´odustoj´ıvelmi vysoko. Cyklicky (v dobˇe,kdy aplikace nem´a dalˇs´ık´odna vykon´av´an´ı)kontroluje, zda je aplikaci doruˇcenanov´azpr´ava, kdyˇzano, pak tuto zpr´avu vyzvedne a zpracuje. Jde o cyklus typu while, v podm´ıncecyklu je ˇcek´an´ına vyzvednut´ızpr´avy, v tˇele cyklu jsou funkce zpracov´an´ızpr´avy(zprostˇredkovanˇese volaj´ıobsluˇzn´efunkce, napˇr´ıkladpro akce pˇri stisknut´ıkl´avesy, klepnut´ımyˇs´ınebo pˇrekreslen´ıokna). Ve Windows ˇrady NT m´akaˇzd´aWin32 aplikace svou vlastn´ı frontu zpr´av.Struktura cel´eho doruˇcov´an´ızpr´avje zn´azornˇenana obr´azku 4.11 – ud´alostijsou nejdˇr´ıvzaˇrazeny do hlavn´ıfronty, odkud je postupnˇevyb´ır´aproces zpracov´avaj´ıc´ıpˇreruˇsen´ı,vytv´aˇr´ızpr´avya zas´ıl´aje do front jednot- liv´ych aplikac´ı.Starˇs´ıWin16 aplikace nemaj´ısv´evlastn´ıfronty zpr´av(neumˇej´ıs nimi zach´azet,ve Windows do verze 3.11 neexistovaly vlastn´ıfronty), maj´ıjednu spoleˇcnou. Zpr´avyse dˇel´ıdo dvou kategori´ı: • zpr´avyk zaˇrazen´ıdo fronty zpr´av, • zpr´avy, kter´ese nezaˇrazuj´ıdo fronty zpr´av. Z toho vypl´yv´a,ˇzene vˇsechny fronty jsou ˇrazeny do fronty zpr´av.Vˇetˇsina ano (napˇr´ıklad v´yˇse zm´ınˇen´a WM_PAINT, WM_KEYDOWN nebo WM_QUIT pro regul´ern´ıuzavˇren´ıokna ˇciukonˇcen´ıaplikace), to jsou zpr´avy, kter´emohou chv´ıli poˇckat“, kdyby aplikace byla pˇr´ıliˇszanepr´azdnˇen´aa nestaˇcilaby rychle ” vyprazdˇnovat frontu zpr´av. Existuj´ıvˇsakˇcasovˇekritick´ezpr´avy, kter´enemohou ˇcekat ve frontˇea je tˇrebaje zpracovat hned, napˇr´ıklad WM_SETFOCUS (okno z´ıskalo zamˇeˇren´ıod kl´avesnice, vstup z kl´avesnice je smˇerov´ando tohoto okna), WM_WINDOWPOSCHANGED (zmˇenapozice okna), WM_ACTIVE (okno bylo aktivov´ano,at’ uˇzpˇrepnut´ım z kl´avesnice nebo klepnut´ımmyˇs´ı),atd. Tyto zpr´avyjsou pos´ıl´any pˇr´ımoproceduˇreokna, do fronty nejsou v˚ubec ukl´ad´any.

 Pozn´amka: Standardn´ıukonˇcen´ıaplikace (vˇcetnˇetoho, kdyˇzklepneme na kˇr´ıˇzek“ v rohu okna) je zpr´ava zaˇrazo- ” van´ado fronty (aby aplikace mˇelamoˇznostprov´estk´odpˇri sv´emukonˇcen´ı,napˇr´ıkladuzavˇr´ıtotevˇren´e soubory), coˇzje jeden z d˚uvod˚u,proˇczamrzlou aplikaci nelze takto ukonˇcit. 

 Syst´emov´avol´an´ı. Stejnˇejako v jin´ych operaˇcn´ıch syst´emech, tak´eve Windows komunikuje bˇeˇzn´yproces s j´adremformou syst´emov´ych vol´an´ı.Syst´emov´avol´an´ıjsou vlastnˇefunkce v API, kter´e jsou dokumentovan´e(to znamen´a,ˇzeje m˚uˇze zn´at“ a pouˇz´ıvat kaˇzd´yproces a vl´akno),vl´aknaje ” pouˇz´ıvaj´ı,kdyˇzje tˇrebaprov´estk´odj´adra.Nemaj´ımoˇznost pˇr´ımovolat k´odj´adra,syst´emov´avol´an´ı jsou jak´ymsipˇrekladatelem ˇcizabezpeˇcen´ymrozhran´ım.  LPC (Local Procedure Call). Tento mechanismus nen´ı podporov´anv API, jde o vnitˇrn´ı mechanismus j´adra(konkr´etnˇeje sice implementov´anv NTDLL.DLL, ale je nedokumentov´an,tud´ıˇzbˇeˇzn´e uˇzivatelsk´eprocesy k nˇemu nemaj´ı pˇr´ıstup). Je to komunikace typu klient-server, tj. jednosmˇern´a, rozliˇsujese odes´ılaj´ıc´ıa pˇrij´ımaj´ıc´ıstrana. Slouˇz´ı pˇredevˇs´ım ke komunikaci v r´amcij´adra(napˇr´ıklad Winlogon, stejnˇejako dalˇs´ı procesy vl´akna,takto komunikuje s podsyst´ememLSASS). Syst´emov´eprocesy bˇeˇz´ıc´ıv uˇzivatelsk´emreˇzimu maj´ık tomuto mechanismu pˇr´ıstup, uˇzivatelsk´eprocesy ne. Napˇr´ıkladproces CSRSS.EXE (Client-Server Runtime Subsystem, ˇc´astpodsyst´emu Windows bˇeˇz´ıc´ıv uˇzivatelsk´emreˇzimu) vyuˇz´ıv´aLPC ke komu- nikaci s nˇekter´ymiknihovnami pˇresj´adro. Kapitola 4 Procesy 78

 RPC (Remote Procedure Call). Jde o vol´an´ıprocedury, kter´am˚uˇzeb´ytv adresov´emprostoru jin´ehoprocesu (vl´akna).M˚uˇzej´ıto lok´aln´ıvol´an´ı(v r´amcijednoho syst´emu, nepl´estsi s LPC – to je nˇecojin´eho)nebo o fyzicky vzd´alen´evol´an´ı(na jin´ypoˇc´ıtaˇcv s´ıti).Ovˇsemvzd´alenˇelze volat proceduru bˇeˇz´ıc´ına jin´empoˇc´ıtaˇcijen tehdy, kdyˇzje spuˇstˇenasluˇzbaRemote Procedure Call (Vzd´alen´evol´an´ı procedur). RPC je podporov´ano v API, je tedy urˇcenoi pro procesy bˇeˇz´ıc´ıv uˇzivatelsk´emreˇzimu (pˇredevˇs´ım pro nˇe).

 APC (Asynchronous Procedure Call). APC je mechanismus, kter´yumoˇzˇnujeprov´adˇet extern´ı“ k´od(nepatˇr´ıc´ıdo aplikace) v kontextu t´etoaplikace. Kdyˇzproces ˇcek´ana ud´alost(tˇreba ” I/O), m˚uˇzeˇcasˇcek´an´ıvymˇenitza obsluhu vol´an´ıAPC, tedy ve sv´emkontextu nechat bˇeˇzetciz´ık´od. Rozliˇsujemesyst´emov´ea uˇzivatelsk´eprocedury APC (pro uˇzivatelsk´emus´ıexistovat povolen´ı“ ” od vl´aknavlastn´ıc´ıhodan´yadresov´yprostor). Vˇetˇsinoujde o prov´adˇen´ıobsluhy syst´emov´ehovol´an´ı (to je k´odz j´adra,tedy extern´ı)v kontextu vl´akna,kter´etoto vol´an´ıprovedlo (technicky to znamen´a, ˇzevl´aknozavolalo funkci, kter´aje implementov´anav j´adˇre,a tedy poskytuje sv´ezdroje pro bˇeht´eto funkce). Vol´an´ıAPC jsou pˇrij´ım´anapouze tehdy, kdyˇznejsou zak´az´ana,a pˇredevˇs´ımv dobˇe,kdy vl´akno ˇcek´as moˇznost´ıupozornˇen´ına APC.

 DPC (Deferred Procedure Call). DPC (zpoˇzdˇen´evol´an´ıprocedury) je dodateˇcn´aobsluha pˇreruˇsen´ı,kdy by samotn´aobsluha pˇreruˇsen´ıtrvala pˇr´ıliˇsdlouho. Obvykle to prob´ıh´atakto: pokud obsluha pˇreruˇsen´ıvyˇzadujevˇetˇs´ıtransfery dat, kter´ejsou ˇcasovˇen´aroˇcn´e,nebo nastala chyba a nˇekterou ˇcinnostje nutn´eopakovat ˇcioˇsetˇritchybu, ˇc´astobsluhy pˇreruˇsen´ıbude ve formˇeDPC ˇcekat na procesor jako bˇeˇzn´eprocesy (pˇrednostna procesoru mezi bˇeˇzn´ymiprioritami a hardwarov´ymipˇreruˇsen´ımi).

4.7.3 J Komunikace v Linuxu

V UNIXov´ych syst´emech maj´ıprocesy k dispozici velmi mnoho r˚uzn´ych komunikaˇcn´ıch prostˇredk˚u. Zde najdeme jen ty nejd˚uleˇzitˇejˇs´ı,ale pˇrestobude tato podsekce velmi dlouh´a.

 Syst´emov´avol´an´ı. Tak´ev Linuxu existuj´ı syst´emov´avol´an´ı, slouˇz´ı ke komunikaci bˇeˇzn´eho procesu (vl´akna)s j´adrem. Kdyˇzse prov´ad´ısyst´emov´evol´an´ı,pˇrech´az´ıse do oblasti, kde je k dispozici zcela jin´yadresov´y prostor (prostor j´adra),obecnˇejsou k dispozici zcela jin´eprostˇredky. Proto tento pˇrechod mus´ıb´yt pˇredevˇs´ımdobˇrezabezpeˇcen a volaj´ıc´ıproces se dostane pouze k v´ysledn´ehodnotˇevol´an´ı(obvykle nula nebo kladn´ahodnota pro ´uspˇeˇsn´evyhodnocen´ı,z´aporn´ahodnota pro ne´uspˇech), na pr˚ubˇehnem´a ˇz´adn´yvliv. Argumenty funkce pˇredstavuj´ıc´ısyst´emov´evol´an´ıse pˇren´aˇsej´ıpˇresregistry, pˇr´ıpadnˇem˚uˇze b´ytv registru adresa vˇetˇs´ıhomnoˇzstv´ıdat.

 Sign´aly. Pro vz´ajemnoukomunikaci mezi procesy (vl´akny) se velmi ˇcasto pouˇz´ıvaj´ısign´aly. Jsou ide´aln´ıpro pos´ıl´an´ıjednoduch´einformace, kter´ase d´acel´areprezentovat mal´ymˇc´ıslem.S praktick´ym pouˇzit´ımsign´al˚use sezn´am´ımena cviˇcen´ıch. Poˇcettyp˚usign´al˚uz´avis´ına hardwarov´earchitektuˇre(pˇredevˇs´ım32/64), obvykle se setk´ames ale- spoˇn30 typy sign´al˚u.Jsou reprezentov´any ˇc´ıslemnebo slovn´ımoznaˇcen´ım(v pˇr´ıkazech lze pouˇz´ıvat obˇe formy, podle toho, co si l´epe pamatujeme). Obvykl´ehodnoty najdeme v tabulce 4.1. Nˇekter´esign´aly (SIGUSR1, SIGUSR2) lze definovat podle vlastn´ıch poˇzadavk˚u,napˇr´ıkladrodiˇcovsk´yproces si definuje vlastn´ıv´yznamtˇechto sign´al˚upro komunikaci se sv´ymipotomky. Kapitola 4 Procesy 79

N´azev C´ısloˇ V´yznam SIGHUP 1 zmˇenav nadˇr´ızen´emprocesu (napˇr´ıkladbyl ukonˇcen),naˇctiznovu sv´ekon- figuraˇcn´ısoubory (pro d´emony) nebo se ukonˇci(bˇeˇzn´eprocesy), v souˇcasn´e dobˇese pouˇz´ıv´asp´ıˇseu d´emon˚u SIGINT 2 pˇreruˇsen´ı(ukonˇcen´ı)bˇehu procesu z kl´avesnice, tot´eˇz,jako kdyˇzzad´ame Ctrl+C SIGILL 4 Nespr´avn´a(ileg´aln´ı)instrukce SIGFPE 8 v´yjimka souvisej´ıc´ıs racion´aln´ımiˇcisly(floating point exception) SIGKILL 9 sign´alpro okamˇzit´eukonˇcen´ı(proces je nem˚uˇzeignorovat, ˇcastoani nestaˇc´ı uklidit pˇridˇelen´eprostˇredky)– pouˇz´ıv´ase u nereaguj´ıc´ıhoprocesu SIGTERM 15 ukonˇcise (regul´ern´ıukonˇcen´ı,proces staˇc´ıuklidit sv´eprostˇredky),tento sign´alm˚uˇzeproces ignorovat (nemˇelby) SIGPIPE 13 z´apisdo roury, ze kter´enikdo neˇcte SIGUSR1 30,10,16 uˇzivatelem (procesem) definovan´ysign´al SIGUSR2 31,12,17 uˇzivatelem (procesem) definovan´ysign´al SIGCHLD 20,17,18 potomek ukonˇcen,vyzvedni si v´ysledek SIGSTOP 19,23 pozastav se (ekvivalent kl´avesy Ctrl+Z ) SIGCONT 18,25 pokud jsi byl pˇredt´ımpozastaven, pokraˇcujv ˇcinnosti

Tabulka 4.1: Obvykl´esign´alyv UNIXov´ych syst´emech

Sign´alm˚uˇzepˇrij´ıt kdykoliv, je to vlastnˇetyp pˇreruˇsen´ı, program´ators t´ım mus´ı poˇc´ıtat. Do- konce i syst´emov´evol´an´ım˚uˇzeb´ytpˇreruˇsenosign´alem(obvyklou reakc´ıje okamˇzit´eukonˇcen´ıoˇsetˇren´ı syst´emov´ehovol´an´ıs t´ım,ˇzese toto vol´an´ıd´abud’ nav´azatnebo restartovat). £ Proces m˚uˇzeu konkr´etn´ıhosign´alu • tento sign´al ignorovat (proces v˚ubec nereaguje) – tato akce je u nˇekter´ych sign´al˚uv´ychoz´ı, napˇr´ıkladu SIGCHILD, protoˇzetento sign´alnapˇr´ıkladnem´apro dan´yproces v´yznam,ale nˇekter´e sign´alyignorovat nelze (napˇr´ıkladSIGKILL), • blokovat s pozdˇejˇs´ımdoruˇcen´ım– sign´alnen´ı zahozen“, ale ˇcek´ana odblokov´an´ı,pak je zpra- ” cov´an, • nechat zpracovat implicitn´ıobsluˇznourutinou – ta u vˇetˇsiny sign´al˚uukonˇc´ıproces, napˇr´ıkladpro SIGTERM nebo SIGHUP, pozastav´ıproces (SIGSTOP), nebo ukonˇc´ıproces a spust´ıdebugger (SIGILL, SIGFPE), • implementovat vlastn´ıobsluˇznourutinu – napˇr´ıkladpˇriobdrˇzen´ıSIGTERM chceme uzavˇr´ıtsou- bory, s nimiˇzpracujeme. Sign´alylze ch´apatjako ˇr´ızen´ıjednoduch´ymiud´alostmibez nutnosti vytv´aˇren´ıobsluˇzn´ehocyklu. Ob- sluˇzn´arutina by vˇzdy mˇelab´yt co nejkratˇs´ı,vlastnˇepro ni plat´ıtot´eˇzjako pro obsluhu hardwarov´ych pˇreruˇsen´ı. £ Sign´allze poslat procesu, jehoˇzPID zn´ame.To lze prov´estjak v bin´arn´ımk´oduspuˇstˇen´ehoprocesu, tak i napˇr´ıkladv textov´emshellu (m´ame k dispozici funkce kill, killall, pkill apod.). Parametrem je ˇc´ıslonebo slovn´ıoznaˇcen´ısign´alu(bez SIG“), a d´aleurˇcen´ıprocesu, kter´emu je sign´alurˇcen. To je ” obvykle PID, ale funkce pkill pˇrij´ım´atak´ejin´etypy identifikace procesu – n´azevprocesu, PID, GID, SID, apod., tedy tento pˇr´ıkaz m˚uˇzemevyuˇz´ıttak´ek ukonˇcen´ıcel´ehopodstromu proces˚u. Kapitola 4 Procesy 80

 Rodiˇcovsk´yproces m˚uˇzese sv´ymipotomky tvoˇrittzv. skupinu proces˚u, a to pˇredevˇs´ımza ´uˇcelem snadnˇejˇs´ıkomunikace, napˇr´ıkladpomoc´ısign´al˚u.Kaˇzd´askupina m´apˇridˇelenoˇc´ısloPGID (Process Group ID), coˇzje vlastnˇePID hlavn´ıhoprocesu skupiny (tj. rodiˇcovsk´ehoprocesu v koˇrenipodstromu skupiny). Na vyˇsˇs´ı´urovni neˇzskupina proces˚uje relace (session). Kaˇzd´arelace m´atak´epˇriˇrazenoidentifikaˇcn´ı ˇc´ıslo(SID – Session ID), coˇzje PID hlavn´ıho procesu relace. Typicky se jedn´ao podstrom proces˚u spouˇstˇen´ych na spoleˇcn´emtermin´alu. Pokud proces nem´ab´ytukonˇcens koncem relace, mus´ımeprov´estjednu ze dvou akc´ı: 1. Spust´ımetento proces v jin´erelaci – vol´an´ıj´adra setsid(), to je pouˇziteln´epouze tehdy, kdyˇz volaj´ıc´ıproces nen´ıhlavn´ımprocesem skupiny. 2. Zajist´ıme,aby proces nebyl v seznamu aktivn´ıch ´uloha nebyl mu zas´ıl´ansign´alSIGTERM (pˇr´ıp. SIGKILL) – m´amek dispozici pˇr´ıkazy nohup a disown:

nohup nˇejak´y_program& disown %ˇc´ıslo_´ulohy_nˇejak´y_program Kdyˇzsi pak vyp´ıˇsemeseznam ´uloh,tato v seznamu nebude (protoˇzenen´ıaktivn´ı). Na cviˇcen´ıch se problematikou skupin a relac´ıvˇcetnˇev´ypisuinformac´ıo nich budeme zab´yvat po- drobnˇeji.  Roury (pipes). Vyn´alezcemmechanismu roury je Doug McIlroy, jeden z nejd˚uleˇzitˇejˇs´ıch tv˚urc˚u ran´ehoUNIXu. S mechanismem rour jsme se uˇzsezn´amilina cviˇcen´ıch, tedy uˇzv´ıme,co to je a jak to funguje. Zaktivnˇen´ıa po ukonˇcen´ıkomunikace odpojen´ıse prov´ad´ıjen v jednom procesu (obvykle rodiˇcovsk´em),otevˇren´ıa uzavˇren´ıje nutn´eprov´estv obou komunikuj´ıc´ıch procesech. Roury mohou b´ytbud’ pojmenovan´enebo nepojmenovan´e.S pojmenovan´ymirourami se zach´az´ı naprosto stejnˇejako s jin´ymisoubory, je to vlastnˇesoubor typu pipe. To znamen´a,ˇzepo zaktivnˇen´ı souboru roury (pˇr´ıkazem mkfifo) tuto rouru (soubor) otevˇreme pˇr´ıkazem fopen (jako jak´ykoliv jin´ysoubor) v jenom procesu pro ˇcten´ı, v druh´empro z´apis,a aˇz je otevˇrena“ na obou konc´ıch, m˚uˇzemepˇren´aˇsetdata. Po pouˇzit´ısoubor uzavˇremea pak odpoj´ıme ” pˇr´ıkazem unlink.  Nepojmenovan´e (anonymn´ı) roury jsou jen obdoba doˇcasn´ych soubor˚ua na rozd´ılod pojmeno- van´ych je jejich velikost omezen´a(ve starˇs´ıch j´adrech na 4 KB, v novˇejˇs´ıch na 64 KB). Nepojmenovan´a roura se d´avytvoˇritfunkc´ı pipe.

£ Postup Uk´aˇzemesi nˇekolik bˇeˇzn´ych i m´enˇebˇeˇzn´ych uk´azekvyuˇzit´ırour: ls | more v´ystuppˇr´ıkazu ls (obdoba dir ve Windows) bude str´ankov´an ls -lR | grep "honza" | sort v t´etorouˇrem´amecelkem tˇripˇr´ıkazy; prvn´ıprovede rekurzivn´ıv´ypis vˇsech soubor˚uv pracovn´ımadres´aˇri, kaˇzd´yna jeden ˇr´adek(tj. m˚uˇzeto b´ytvelmi dlouh´yseznam, podle toho, kter´yadres´aˇrje pracovn´ı),druh´yz v´ystupuprvn´ıhopˇr´ıkazu vybere pouze ty ˇr´adky, kter´eobsahuj´ızadan´yˇretˇezec,tˇret´ıtento probran´y“ v´ystupsetˇr´ıd´ıpodle abecedy ” bc | speak mluv´ıc´ıkalkulaˇcka“; pokud m´amenainstalov´andruh´ypˇr´ıkaz roury, pak prvn´ımu pˇr´ıka- ” zu na vstup zad´av´amematematick´ev´yrazy na pˇr´ıkazov´emˇr´adku(jde o velmi pokroˇciloukal- kulaˇcku),v´ysledekse pak dozv´ımez reproduktor˚u(slovnˇe) £ Kapitola 4 Procesy 81

 Program (pˇr´ıkaz), kter´ylze pouˇz´ıvat v rouˇre,se naz´yv´a filtr. Tyto programy vyuˇz´ıvaj´ımechanismus, se kter´ympˇriˇslipoprv´epr´avˇetv˚urciUNIXu – roury, podle myˇslenky dˇelejjednu vˇec,ale dˇelejji ” dobˇre“, kter´ase dodnes odsvˇedˇcujev pruˇzn´emeziprocesov´ekomunikaci. Jde o to, ˇzeprogram m´asv˚uj standardn´ıvstup a standardn´ıv´ystup,a nemus´ıse starat o to, kam zrovna tyto kan´alym´ıˇr´ı(soubor, obrazovka, apod.), bez ohledu na zdroj/c´ılzach´az´ıprogram s tˇemitokan´alypoˇr´adstejnˇe. Ukolem´ filtru je pak sv˚ujstandardn´ıvstup transformovat (napˇr´ıkladpozmˇenit,seˇradit,nˇecovyhledat, rozdˇelitna str´anky, vytisknout, pˇreloˇzitapod.) a pak pˇredatna sv˚ujstandardn´ıv´ystup.Standardn´ıvstup m´a deskriptor 0, standardn´ıv´ystupdeskriptor 1. Moˇznostivyuˇzit´ırour jsou rozs´ahleprob´ır´any jak na mnoha str´ank´ach na internetu, tak i napˇr´ıklad ve zdroji [36] (najdeme v seznamu literatury).

£ Postup Anonymn´ıroura je pomˇernˇebˇeˇzn´yzp˚usobkomunikace v UNIXov´ych syst´emech. Nejde jen o vyuˇzit´ı pˇriˇretˇezen´ıv textov´emshellu, ale pˇredevˇs´ımby rouru mˇelumˇetpouˇz´ıvat program´ator.Uk´aˇzemesi vytvoˇren´ıanonymn´ıroury. int roura_deskriptory[2]; int roura_vstup; int roura_vystup;

// vytvoˇren´ıroury, v~parametru m´amedeskriptory pro konce roury: pipe (roura_deskriptory); roura_vstup = roura_deskriptory[0]; // konec roury pro ˇcten´ı,v´ystup roura_vystup = roura_deskriptory[1]; // konec roury pro z´apis,vstup

D´ales deskriptory zach´az´ımestejnˇejako s deskriptory souboru, tj. pouˇz´ıv´ameje ve funkc´ıch pro z´apis do souboru nebo ˇcten´ıze souboru. £

£ Postup Anonymn´ıroura ˇcastoslouˇz´ıke komunikaci mezi rodiˇcovsk´ymprocesem a jeho potomkem.

... // vloˇz´ımestdlib.h, stdio.h a~unistd.h int main() { int r_deskriptory[2]; pid_t pid_potomka;

pipe(r_deskriptory); pid_potomka = fork(); if (pid_potomka == (pid_t) 0) { // *** child *** FILE *soubor; char buffer[1024]; close(r_deskriptory[1]); soubor = fdopen (r_deskriptory[0], "r"); while (!feof (soubor) && !ferror (soubor) && fgets (buffer, sizeof (buffer), soubor) != NULL) zpracuj(buffer); // nˇecoprov´ad´ı close (r_deskriptory[0]); } else { // *** parent *** FILE *soubor; close (r_deskriptory[0]); Kapitola 4 Procesy 82

soubor = fdopen (r_deskriptory[1], "w"); ... // z´apis close (r_deskriptory[1]); } return 0; }

£

 Pozn´amka: Roury existuj´ıtak´ev syst´emech MS-DOS a Windows, ale jejich implementace je zcela jin´a: • V pˇr´ıpadˇeUNIXov´ych rour jde vlastnˇeo zˇretˇezen´ıprogram˚u,kter´ebˇeˇz´ıparalelnˇe(napˇr´ıklad pˇristr´ankov´an´ıvelmi dlouh´ehov´ystupunˇekter´ehoprogramu generuje prvn´ıprogram pr˚ubˇeˇznˇe v´ystup,kter´yd´avkovˇepos´ıl´ana sv˚ujv´ystup).N´asledn´ypˇr´ıkaz postupnˇe pˇreb´ır´ana sv´emvstupu v´ystuppˇredchoz´ıhopˇr´ıkazu a zabr´anaje pouze vyrovn´avac´ıpamˇet’ s danou maxim´aln´ıhranic´ı). Zde jde o opravdovou komunikaci, i kdyˇzjednosmˇernou. • Ve Windows programy propojen´epˇresrouru bˇeˇz´ıˇcistˇesekvenˇcnˇe.Nejdˇr´ıvje spuˇstˇenproces na zaˇc´atkuroury, cel´yjeho v´ystupse ukl´ad´ado doˇcasn´ehosouboru (at’ uˇzje jakkoliv dlouh´y), pak se spust´ıproces na konci roury, na jehoˇzvstup je d´antento doˇcasn´ysoubor. Tyto procesy tedy re´alnˇenekomunikuj´ı,ani jednosmˇernˇe,syst´empouze vezme (cel´y)v´ystupjednoho a pˇred´a n´asleduj´ıc´ımu procesu.



 Sockety. Sockety jsou v Linuxu implementov´any v knihovnˇe sys/socket.h. P˚uvodnˇese pouˇz´ıvaly pˇredevˇs´ımpˇrikomunikaci v s´ıti,ale mechanismus je natolik pruˇzn´ya transparentn´ı,ˇzese v nˇekter´ych pˇr´ıpadech pouˇz´ıvaj´ıi lok´alnˇe(zaj´ımav´ymprojektem vyuˇz´ıvaj´ıc´ımsockety je napˇr´ıklad netlink). Socket si m˚uˇzemepˇredstavit jako rouru s mnoha vlastnostmi nav´ıc.Tak´ese jedn´ao pouˇz´ıv´an´ı pˇredemdefinovan´ych komunikaˇcn´ıch bod˚u(bran) a jedn´ase o komunikaci typu klient-server. Komu- nikace m˚uˇzeb´ytspojov´a(streamov´a),kter´apracuje podobnˇejako roura (pos´ıl´ase proud dat), anebo datagramov´a,kdy se nejdˇr´ıvsestav´ıbal´ıkdat (datagram) a pak se odeˇslejako celek – d´avka. Po vytvoˇren´ıa aktivov´an´ı(obvykle na stranˇeserveru) se z´ıskan´yidentifik´atorpouˇz´ıv´ajako deskrip- tor souboru (vlastnˇejde o deskriptor). Server na socketu naslouch´a,kdyˇzzjist´ı,ˇzeklient se pokouˇs´ı o spojen´ı,akceptuje spojen´ıa pˇrijmedata. Po ukonˇcen´ıkomunukace je nutn´esocket zavˇr´ıta na stranˇe serveru odpojit.

 Zpr´avy(POSIX Message Queues). Tento mechanismus umoˇzˇnujeproces˚umvytv´aˇretvlastn´ı (pojmenovan´e)fronty zpr´av.Kaˇzd´azpr´ava m´aurˇcitouprioritu (pouˇz´ıv´ase nejm´enˇe32 ´urovn´ıpriorit, ale m˚uˇzeb´yt i v´ıce,v Linuxu aˇz32 768 ´urovn´ı),zpr´avys vyˇsˇs´ıprioritou jsou doruˇcov´any pˇrednostnˇe. Vytvoˇren´ıfronty zpr´avje obdobou vytvoˇren´ısouboru (vˇcetnˇepˇr´ıstupov´ych opr´avnˇen´ı),a s fron- tami se tak´ezach´az´ıpodobnˇejako se soubory nebo sp´ıˇse s rourami (ale n´azvyfunkc´ıjsou odliˇsn´e). V atributech fronty je zad´anad´elka fronty (maxim´aln´ıpoˇcetzpr´av)a maxim´aln´ıd´elka zpr´avy. Pˇri naˇcten´ızpr´avyz fronty se naˇcteblok dat ve formˇe(dlouh´eho)ˇretˇezceukonˇcen´ehonulov´ymsymbolem. Proces si sv´efronty m˚uˇzebud’ hl´ıdats´am,anebo lze nastavit upozorˇnov´an´ıformou sign´aluanebo pˇr´ımozadat obsluˇznoufunkci (ta se spust´ıautomaticky, pokud do fronty doraz´ınov´azpr´ava). Kapitola 4 Procesy 83

Dalˇs´ı. V linuxu je moˇzn´etak´epouˇz´ıvat RPC (vol´an´ıfunkc´ıimplementovan´ych v knihovn´ach nebo jin´ych programech). D´aleexistuje mechanismus IPC zpr´av (InterProcess Communication), coˇz je obdoba v´yˇsepopsan´ych zpr´av,ale od tohoto mechanismu se upouˇst´ıa je sp´ıˇsenahrazov´anmecha- nismem POSIX Message Queues. D´alejsou k dispozici sd´ılen´esoubory (ty jsou vˇsakpovaˇzov´any za bezpeˇcnostn´ıriziko) nebo coby lepˇs´ıˇreˇsen´ısd´ılen´apamˇet’ vytv´aˇren´afunkc´ı mmap(). M˚uˇzemese setkat s pojmem pˇrenesen´ı´ulohyna specializovan´yprogram (shelling out). Nen´ıto nic jin´ehoneˇzspuˇstˇen´ıpotomka a n´asledn´akomunikace s n´ımpˇresk tomu ´uˇceluvytvoˇrenourouru (pˇr´ıkaz popen, se kter´ymjsme se sezn´amiliv jednom z pˇr´ıklad˚u). Dalˇs´ızaj´ımav´ypojem je Bernsteinovo zˇretˇezen´ı. Je pojmenov´anopo sv´emvyn´alezci,Danielovi J. Bernsteinovi. Je to obdoba roury, ale opatˇren´apodm´ınkou. Typick´epouˇzit´ıje pˇrikontrole z´ısk´av´an´ıˇci uplatˇnov´an´ıvyˇsˇs´ıch pˇr´ıstupov´ych opr´avnˇen´ı.Jedn´ase o kombinaci vˇetvic´ıch pˇr´ıkaz˚ua spouˇstˇen´ıkon- trolovan´ych program˚upomoc´ıpˇr´ıkazu exec v jednotliv´ych vˇetv´ıch rozhodov´an´ı.Pouˇz´ıv´ase napˇr´ıklad v POP3 serveru qmail. Kapitola 5 Synchronizace proces˚u

V multitaskov´emsyst´emu se bˇeˇznˇest´av´a,ˇzev´ıceproces˚upotˇrebujepˇristupovat ke stejn´emu prostˇredku. T´ımto prostˇredkem m˚uˇzeb´ytbˇeˇzn´eI/O zaˇr´ızen´ı,jako je obrazovka, kl´avesnice ˇcitisk´arna,ale tak´e sd´ılen´aoblast pamˇeti.V t´etokapitole si pop´ıˇsemez´akladn´ıprobl´emy souvisej´ıc´ıse synchronizac´ıpro- ces˚ua metody, kter´ymi je lze ˇreˇsit.

5.1 Uvod´ do problematiky

 Pˇripˇr´ıstupuv´ıceproces˚uk t´emuˇzprostˇredkuje hlavn´ımprobl´emem zajiˇstˇen´ı konzistentn´ıhostavu prostˇredku. V pˇr´ıpadˇesd´ılen´epamˇetijde o konzistenci dat, tedy pokud nˇekter´yproces zapisuje do t´etopamˇeti,jin´yby nemˇelˇc´ıst,dokud zapisuj´ıc´ıproces nedokonˇc´ısvou pr´aci,protoˇze by mohl naˇc´ıst jen zˇc´astimodifikovan´adata. Data jsou v konzistentn´ımstavu pˇredzaˇc´atkem z´apisua po dokonˇcen´ı z´apisu.  Krit´eriempro pˇr´ıstup k prostˇredk˚umjsou Bernsteinovy podm´ınky. Oznaˇcme • read(P,t) mnoˇzinu vˇsech prostˇredk˚uvˇcetnˇepamˇet’ov´ych m´ıst,ze kter´ych se proces P pokouˇs´ıˇc´ıst v ˇcase(okamˇziku) t, • write(P,t) mnoˇzinu vˇsech prostˇredk˚u,na kter´ese proces P pokouˇs´ıv ˇcase t zapisovat (prov´adˇet jak´ekoliv zmˇeny). Bernsteinovy podm´ınkypro jak´ekoliv dva procesy P, Q jsou n´asleduj´ıc´ı:

read(P, t) write(Q, t) = (5.1) ∩ ∅ write(P, t) write(Q, t) = (5.2) ∩ ∅ Znamen´ato, ˇzeje zak´az´anopˇristupovat k t´emuˇzbodu (portu, socketu, zaˇr´ızen´ı, m´ıstu v pamˇeti, souboru), at’ uˇzpro ˇcten´ınebo z´apis,pokud zde v t´echv´ıliprov´ad´ız´apisjin´yproces. Bernsteinovy podm´ınkyˇr´ıkaj´ı jen ˇcehoje nutn´edos´ahnout,ale uˇznic neˇr´ıkaj´ı o tom, jak´ym zp˚usobem se toho d´ados´ahnout.Proto se obvykle pouˇz´ıvaj´ıjin´etypy reprezentace pˇr´ıstupuk prostˇred- k˚um,kter´epˇr´ımourˇcuj´ı,jak by cel´ymechanismus mˇelfungovat. V n´asleduj´ıc´ımtestu hovoˇr´ımeobvykle o procesech. V souˇcasn´ych operaˇcn´ıch syst´emech se, zvl´aˇstˇe v uˇzivatelsk´emreˇzimu, synchronizuj´ısp´ıˇsevl´akna.Pojem proces je zde pouˇz´ıv´ansp´ıˇsez d˚uvodu obec- nosti.

84 Kapitola 5 Synchronizace proces˚u 85

5.2 Petriho s´ıtˇe

 Petriho s´ıtˇe jsou vizualizaˇcn´ıprostˇredek,kter´ypˇrehlednˇezachycuje tok dat nebo jak´ekoliv paraleln´ı ˇcipseudoparaleln´ıpostupy na abstraktn´ı´urovni. Zde je budeme pouˇz´ıvat pro prvn´ıf´azin´avrhu ˇreˇsen´ı probl´em˚uvznikaj´ıc´ıch pˇrisynchronizaci prostˇredk˚u,tedy pro popis synchronizaˇcn´ıch ´uloh. Petriho s´ıt’ je orientovan´ygraf s dvˇematypy uzl˚u:

m´ısta, pˇredstavuj´ıstavy procesu nebo stavy syst´emu,   pˇrechody, pˇredstavuj´ı urˇcitouˇcinnostprocesu nebo syst´emu prob´ıhaj´ıc´ı mezi dvˇemastavy (pˇredstavovan´ymim´ısty). M´ıstaa pˇrechody se v s´ıtistˇr´ıdaj´ı,nesm´ıb´ytpˇr´ımoza sebou dva uzly stejn´ehotypu. V m´ıstech mohou b´yt teˇcky (tokeny) pˇredstavuj´ıc´ı povolen´ı“ pokraˇcovat v grafu d´ale.Kaˇzd´ahrana je ohodnocena ” pˇrirozen´ymˇc´ıslem(pokud nen´ıˇc´ıslouvedeno, je to 1), toto ˇc´ısloznamen´an´asobnosthrany. Aby pˇrechod mohl b´ytproveden, mus´ı b´ytv kaˇzd´emm´ıstˇe,z nˇehoˇzdo pˇrechodu vede hrana, nejm´enˇetolik teˇcek,jak´eje ohodnocen´ıt´eto hrany. Proveden´ıpˇrechodu prob´ıh´atakto: 1) z kaˇzd´ehom´ısta,z nˇehoˇzdo pˇrechodu vede cesta (ˇsipka) ohodnocen´aˇc´ıslem n, ubere n teˇcek, 2) do kaˇzd´ehom´ısta,do kter´ehoz nˇejvede cesta ohodnocen´aˇc´ıslem m, pˇrid´a m teˇcek.

B  P A 1 P D -  2 PPq P s 1 -  PP   s Pq  s  s  C   Obr´azek5.1: Pˇr´ıkladPetriho s´ıtˇe

Na obr´azku 5.1 jsou dva pˇrechody, z nichˇzje v tomto stavu s´ıtˇeprovediteln´ypouze ten prvn´ı, druh´ynen´ıprovediteln´y,protoˇzev m´ıstˇe C nen´ıˇz´adn´ateˇcka a v m´ıstˇe B je pouze jedna, mus´ıb´ytdvˇe. Pˇriproveden´ıprvn´ıhopˇrechodu se z m´ısta A odebere teˇcka (pouze jedna, hrana nen´ıoznaˇcenaˇc´ıslem) a do m´ıst B a C se pˇrid´apo jedn´eteˇcce.Ted’ uˇzje provediteln´ydruh´ypˇrechod. Pˇrijeho proveden´ıse z m´ısta B odeberou dvˇeteˇckya z m´ısta C jedna teˇcka a pˇrid´ase teˇcka do m´ıst B a D. V m´ıstˇe D ted’ budou tˇriteˇcky.

M Pˇr´ıklad Na obr´azku 5.2 je uk´azka petriho s´ıtˇepopisuj´ıc´ızjednoduˇsen´ybˇehprocesu vyuˇz´ıvaj´ıc´ıho pouze procesor s t´ım,ˇzeˇz´adn´yjin´yproces nebˇeˇz´ı.

pˇridˇelen´ı pˇridˇelen´ı ukonˇcen´ı nov´y prostˇredk˚u pˇripraven´y procesoru bˇeˇz´ıc´ı procesu ukonˇcen ------     s 6   voln´y ? odebr´an´ı   procesor procesoru 6s 

Obr´azek5.2: Petriho s´ıt’ popisuj´ıc´ıbˇehvelmi jednoduch´ehoprocesu Kapitola 5 Synchronizace proces˚u 86

Teˇckuv m´ıstˇeoznaˇcen´em nov´y m˚uˇzemech´apatjako stav, ve kter´emse moment´alnˇenach´az´ıvy- kon´av´an´ıprocesu. Vˇsechny pˇrechody jsou ohodnoceny ˇc´ıslem1 (ˇc´ıslo1 se nemus´ıuv´adˇet). M´ısto voln´yprocesor pˇredstavuje stav syst´emu, ve kter´emm˚uˇzeb´ytpˇridˇelenprocesor. Obsahuje teˇckupouze tehdy, kdyˇzje procesor voln´ya m˚uˇzeprobˇehnoutjeho pˇridˇelen´ı.Po proveden´ıpˇrechodu pˇridˇelen´ıprocesoru se odebere teˇcka z m´ıst pˇripraven´y a voln´yprocesor a pˇrid´ase teˇcka do m´ısta bˇeˇz´ıc´ı. Pak m˚uˇzeb´ytproveden pˇrechod odebr´an´ıprocesoru, pˇriˇcemˇzse odebere teˇcka z m´ısta bˇeˇz´ıc´ı a pˇrid´a se do m´ıst voln´yprocesor a pˇripraven´y. V pˇr´ıpadˇe,ˇzeje spuˇstˇenov´ıceproces˚u,vˇsechny tyto procesy vyuˇz´ıvaj´ım´ısto voln´yprocesor (jejich vlastn´ı stavy by tvoˇrilycesty soubˇeˇzn´es cesou zobrazen´ehoprocesu). Kdykoliv se nˇekter´yproces dostane do stavu bˇeˇz´ıc´ı,odebere teˇckuz tohoto m´ıstaa ostatn´ıprocesy mus´ıpoˇckat ve stavu pˇripraven´y, tedy v m´ıstˇe pˇripraven´y dan´ehoprocesu, dokud bˇeˇz´ıc´ıproces teˇckunevr´at´ı. M

Petriho s´ıt’ plnˇepopisuj´ıc´ıbˇeha synchronizaci proces˚uby byla pˇr´ıliˇssloˇzit´aa rozs´ahl´a,proto budeme pouˇz´ıvat zjednoduˇsen´asch´emata,kde jednotliv´am´ıstaa pˇrechody mohou pˇredstavovat pods´ıtˇe,jejichˇz v´ypoˇceta stavy nepotˇrebujemerozliˇsovat.

5.3 Z´akladn´ısynchronizaˇcn´ı´ulohy

Postupnˇeprobereme z´akladn´ı´ulohy, kter´ese ˇreˇs´ıpˇrisynchronizaci proces˚u,a naznaˇc´ımejejich ˇreˇsen´ı na abstraktn´ı´urovni pomoc´ıpetriho s´ıt´ı.V souˇcasn´ych operaˇcn´ıch syst´emech se synchronizuj´ısp´ıˇse vl´akna,pˇrestobudeme pro obecnost pouˇz´ıvat pojem proces.

5.3.1 Kritick´asekce

 Ulohu´ typu kritick´asekce je tˇrebavyˇreˇsit,pokud chceme umoˇznitv´yluˇcn´ypˇr´ıstupke sd´ılen´emu prostˇredku– kritick´esekci (napˇr´ıklad sd´ılen´emu m´ıstu v pamˇeti).Je tˇrebazajistit, aby k tomuto prostˇredkuv jednom okamˇzikupˇristupoval nejv´yˇsejeden proces a aby tento prostˇredekmohl bez pˇreruˇsen´ıvyuˇz´ıvat po potˇrebnounebo pˇredemstanovenou dobu. Na obr´azku 5.3 je probl´emuk´az´anna petriho s´ıti. £ Aby proces mohl prov´estsvou ˇc´astk´odupˇristupuj´ıc´ıke kritick´esekci, mus´ıb´ytve str´aˇzn´ımm´ıstˇe teˇcka. V naˇsempˇr´ıpadˇek pˇrechodu pro vstup do kritick´esekce pˇrich´az´ıproces P2, a protoˇzeje ve str´aˇzn´ımm´ıstˇeteˇcka, znamen´ato, ˇzeke sd´ılen´emu prostˇredkuzrovna nepˇristupuje jin´yproces a tedy P2 m˚uˇzed´alpokraˇcovat. Po vyhodnocen´ıvstupn´ıhopˇrechodu je odebr´anateˇcka nejen z m´ıstaprocesu pˇredkritickou sekc´ı, ale tak´eze str´aˇzn´ıhom´ısta,a pˇrid´anado m´ıstauvnitˇrvyhodnocen´ıkritick´esekce procesem P2. Pak je proces ve stavu vyhodnocov´an´ıkritick´esekce, v m´ıstˇeP2.KS(). Po proveden´ıpˇrechodu znamenaj´ıc´ıho opuˇstˇen´ıkritick´esekce je teˇcka vr´acena do str´aˇzn´ıhom´ıstaa tak´epˇrid´anado m´ıstaprocesu P2 za kritickou sekc´ı,tedy proces pokraˇcujeve sv´eˇcinnostia do kritick´esekce m˚uˇzevstoupit dalˇs´ıproces. Kdyby dalˇs´ıproces chtˇelvstoupit do kritick´esekce v dobˇe,kdy se v n´ınach´az´ıproces P2 (a tedy ve str´aˇzn´ımm´ıstˇenen´ıteˇcka), mus´ıpoˇckat, dokud proces P2 nevr´at´ıteˇckudo str´aˇzn´ıhom´ısta,a teprve potom pokraˇcovat. £ Poˇzadavky na ˇreˇsen´ıjsou: • data mus´ıb´ytv konzistentn´ımstavu, pokud to proces pˇredpokl´ad´a, • v kritick´esekci sm´ıb´ytnejv´yˇsejeden proces, Kapitola 5 Synchronizace proces˚u 87

Proces P1 Proces P2 Proces Pn

? ? ? ...    s    ?? ?? ??

? ? ? P1.KS() P2.KS() Pn.KS() Str´aˇzn´ı    m´ısto 66s6     ? ? ?

? ? ?

  

? ? ?

Obr´azek5.3: Petriho s´ıt’ pro ´ulohu Kritick´asekce

• proces se nach´az´ıv kritick´esekci koneˇcnoudobu, • proces ˇcek´ana vstup do kritick´esekce koneˇcnoudobu (z´avis´ına pˇredchoz´ım). Tato ´ulohaje z´akladempro dalˇs´ı´ulohy, v podstatˇevˇzdyjde o to – jak zajistit konzistentnost dat, ke kter´ympˇristupujev´ıcer˚uzn´ych proces˚unebo vl´aken.

 Pozn´amka: Jak nˇecotakov´ehonaprogramovat? Napˇr´ıklad str´aˇzn´ım´ısto reprezentujeme celoˇc´ıselnoupromˇennou, poˇcetteˇcekve str´aˇzn´ımm´ıstˇebude odpov´ıdathodnotˇet´etopromˇenn´e.V nejjednoduˇsˇs´ımpˇr´ıpadˇeby kaˇzd´yproces pˇredvstupem do t´etosekce v cyklu testoval promˇennou(dokud je jej´ıhodnota 0, cyklus pokraˇcuje),po ukonˇcen´ıcyklu (vˇetˇs´ıneˇz0, tj. nejm´enˇejeden token ve str´aˇzn´ımm´ıstˇe)by sn´ıˇzilhodnotu promˇenn´eo 1, provedl by k´odkritick´esekce a n´aslednˇeby zpˇetnˇezv´yˇsilhodnotu promˇenn´eo 1. Tak by to ˇslojen v pˇr´ıpadˇe,ˇzesi procesy navz´ajemd˚uvˇeˇruj´ı(coˇznen´ızcela bˇeˇzn´e,snad jen mezi vl´akny t´ehoˇzprocesu). Nav´ıcby mohl nastat probl´emna syst´emu s v´ıcej´adrov´ymprocesorem, protoˇze pak by mohla nastat situace, kdy se dva paralelnˇebˇeˇz´ıc´ıprocesy (vl´akna)pokus´ız´aroveˇn sebrat“ ” posledn´ı token, tedy dekrementovat promˇennouna 0. Zp˚usoby ˇreˇsen´ı tˇechto probl´em˚use budeme zab´yvat v dalˇs´ıˇc´astit´etokapitoly. 

5.3.2 Producent–konzument

 Producent je proces produkuj´ıc´ıdata a konzument je proces, kter´ytato data pˇrij´ım´aa d´alezpra- cov´av´a. Uˇcelemje,´ aby producent (producenti) a konzument (konzumenti) mohli pracovat kaˇzd´yjinou rychlost´ı,do urˇcit´em´ıryna sobˇenez´avisle,tedy obvykle asynchronnˇe. Kapitola 5 Synchronizace proces˚u 88

D´alebude popisov´anpˇr´ıpads jedn´ımproducentem a jedn´ımkonzumentem, ale tento pˇr´ıpadlze rozˇs´ıˇritna prakticky jak´ykoliv poˇcetproducent˚ui konzument˚u. Ulohu´ lze ˇreˇsitnˇekolika zp˚usoby v z´avislostina tom, kolik m´amek dispozici sd´ılen´epamˇeti,do kter´emaj´ıpˇr´ıstupvˇsechny z´uˇcastnˇen´eprocesy: 1) Neomezen´ybuffer – m´amek dispozici jak´ekoliv mnoˇzstv´ıpamˇeti(dynamick´adatov´astruktura). 2) Omezen´ybuffer – m´amek dispozici urˇcit´ypoˇcetpamˇet’ov´ych m´ıst,je stanovena horn´ıhranice (statick´adatov´astruktura). 3) Synchronizace zpr´avami – ˇz´adn´asd´ılen´apamˇet’, nutnost synchronn´ıkomunikace.

£ ad. 1) Neomezen´ybuffer. Reˇsen´ıjeˇ naznaˇcenopetriho s´ıt´ına obr´azku 5.4. M´amek dispozici frontu poloˇzek,jej´ıˇzd´elka se dynamicky mˇen´ı,poˇzadavkem je zajistit, aby se konzument zastavil ve chv´ıli,kdy je fronta pr´azdn´a,a aby data za kaˇzd´ych okolnost´ız˚ustalakonzistentn´ı.Na obr´azku 5.4 je syst´emve stavu, kdy ve frontˇejsou ˇctyˇripoloˇzkya jsou provediteln´epˇrechody zapiˇs a ˇcti (tedy pracovat mohou oba procesy).

producent konzument

? ?? produkuj ˇcti

vyprodukov´ano ? ?naˇcteno stav fronty    ss s 6ss    ? ? zapiˇs zpracuj

zaps´ano ? ?zpracov´ano

  s  

Obr´azek5.4: Petriho s´ıt’ pro ´ulohu Producent–konzument, neomezen´ybuffer

£ Jak bychom ´ulohu rozˇs´ıˇrilina v´ıcneˇzjednoho producenta a konzumenta? Jednoduˇsebychom dalˇs´ı producenty a konzumenty napojili na m´ısto stav fronty stejn´ymzp˚usobem jako st´avaj´ıc´ı. £ Poˇzadavky na ˇreˇsen´ı: • zachov´an´ıkonzistence dat, • konzument se zastav´ı,kdyˇzje buffer pr´azdn´y.

 Pozn´amka: Jak to naprogramovat? Budeme potˇrebovat celoˇc´ıselnoupromˇennoureprezentuj´ıc´ım´ısto stav fronty, pak samotnou frontu (tˇrebajako dynamick´yseznam, podle toho, co n´ampˇr´ısluˇsn´yprogramovac´ıjazyk nab´ıdne). Producent nejdˇr´ıv uloˇz´ınov´yprvek do fronty a pak zv´yˇs´ıhodnotu promˇenn´eo 1 (poˇrad´ıje d˚uleˇzit´e, aby byla zachov´anakonzistentnost dat, hlavnˇepro pˇr´ıpad,ˇzepˇredukl´ad´an´ımbyla fronta pr´azdn´a). Kapitola 5 Synchronizace proces˚u 89

Konzument nejdˇr´ıv naˇcte(odstran´ı)prvek z fronty a pak sn´ıˇz´ıhodnotu promˇenn´eo 1 (poˇrad´ıje d˚uleˇzit´e ze stejn´ehod˚uvodu – zachov´an´ıkonzistence dat, tentokr´atpˇri pln´efrontˇe,aby se producent nepokouˇsel pˇrid´avat nov´yprvek do fronty, ve kter´ezat´ımnen´ım´ısto). 

£ ad. 2) Omezen´ybuffer. Reˇsen´ıjeˇ naznaˇcenopetriho s´ıt´ına obr´azku 5.5. Omezen´ybuffer m˚uˇze b´ytimplementov´anjako statick´akruhov´afronta. Na obr´azku 5.5 je provediteln´ypouze pˇrechod zapiˇs, konzument mus´ıˇcekat pˇredpˇrechodem ˇcti (nen´ınic ke ˇcten´ı,fronta je pr´azdn´a).Po proveden´ıpˇrechodu zapiˇs budou provediteln´epˇrechody produ- kuj a ˇcti. Celkov´ypoˇcetm´ıstve frontˇeje souˇcetteˇcekv m´ıstech voln´e, obsazen´e, vyprodukov´ano a naˇcteno. producent konzument

?? ?? produkuj ˇcti voln´e  vyprodukov´ano ? ss @I ?naˇcteno ss @  @  s @   @  @ ? 6obsazen´e ? zapiˇs  @ zpracuj @

zaps´ano ? ?zpracov´ano

  s  

Obr´azek5.5: Petriho s´ıt’ pro ´ulohu Producent–konzument, omezen´ybuffer

£ Jsou zde tˇripoˇzadavky na ˇreˇsen´ı: • zachov´an´ıkonzistence dat, • producent se zastav´ı,kdyˇzje buffer pln´y, • konzument se zastav´ı,kdyˇzje buffer pr´azdn´y.

 Pozn´amka: Zp˚usobnaprogramov´an´ıby byl podobn´y,jen budeme potˇrebovat dvˇepromˇenn´e,pro kaˇzd´esd´ılen´e m´ıstojednu, a pak tu statickou frontu (pole apod.). Poˇrad´ıoperac´ı(ukl´ad´an´ıˇcivyj´ım´an´ıprvku a pr´ace s promˇenn´ymi)jsou podobn´ejako v pˇredchoz´ımpˇr´ıpadˇe,´uˇcelemje zachov´an´ıkonzistence dat v dan´em prvku fronty (prvn´ımnebo posledn´ım). 

£ ad. 3) Synchronizace zpr´avami. Tato metoda je pouˇziteln´av pˇr´ıpadˇe,ˇzeprocesy nemohou sd´ıletˇz´adnoupamˇet’, napˇr´ıkladv distribuovan´ych syst´emech nebo v pˇr´ıpadˇev´ıceprocesorov´ych syst´em˚u bez spoleˇcn´epamˇeti. Kapitola 5 Synchronizace proces˚u 90

producent konzument

?? @ ?? produkuj ˇcti @ @ @ vyprodukov´ano ? @ ?naˇcteno @  @  s @  @  @ ? ? zapiˇs @ zpracuj @@

zaps´ano ? ?zpracov´ano

  s  

Obr´azek5.6: Petriho s´ıt’ pro ´ulohu Producent–konzument, synchronizace zpr´avami

Producent a konzument si navz´ajempos´ılaj´ızpr´avy, producent pos´ıl´apoloˇzkya konzument potvr- zen´ıo zpracov´an´ı(ˇz´adosto dalˇs´ıpoloˇzku).Jedn´ase tedy o symetrickou synchronn´ıkomunikaci. Reˇsen´ıˇ petriho s´ıt´ıje na obr´azku 5.6, procesy na sebe navz´ajemˇcekaj´ı. £ Protoˇzenem´amefrontu (sd´ılen´ybuffer), jedin´ympoˇzadavkem je zachov´an´ıkonzistence dat.

5.3.3 Model–obraz

Tato ´ulohaje podobn´a´ulozeProducent–konzument. Reˇs´ımeji,ˇ kdyˇzje potˇrebasledovat a zpracov´avat nikoliv vˇsechny poloˇzky, ale vˇzdypr´avˇeaktu´aln´ıstav.  Typick´epouˇzit´ıje napˇr´ıkladtakov´e,kdy producent sleduje stav nˇekter´ehoˇcidla(teplota, vlhkost, mnoˇzstv´ıˇcehokoliv, apod.), zjiˇstˇenouhodnotu ukl´ad´ado sd´ılen´epromˇenn´e(jen jedin´e,ˇz´adn´afronta),

producent konzument

?? ?? produkuj ˇcti

vyprodukov´ano ? ?naˇcteno str´aˇzn´ım´ısto    s 66    ? ? zapiˇs zpracuj

zaps´ano ? ?zpracov´ano

  s  

Obr´azek5.7: Petriho s´ıt’ pro ´ulohu Model–obraz Kapitola 5 Synchronizace proces˚u 91 a konzument v pravideln´ych intervalech (nebo kdy st´ıh´a)prov´ad´ı naˇc´ıt´an´ıhodnoty t´etopromˇenn´e (vˇzdym´ak dispozici jej´ıaktu´aln´ıstav) napˇr´ıkladpro ´uˇcelyzobrazen´ınebo spuˇstˇen´ıalarmu. Jedna skupina proces˚uneust´aleprov´ad´ızmˇeny na datech a dalˇs´ıskupina proces˚uzobrazuje aktu´aln´ı stav tˇechto dat. Kdybychom trvali na zpracov´an´ıvˇsech poloˇzek,kter´eprodukuj´ıc´ıprocesy vytvoˇr´ı, zpracov´an´ıby se zdrˇzovalo a pˇr´ıpadn´ezobrazov´an´ıdat na monitoru by mohlo problik´avat“ nebo by ” se tak rychle mˇenilo,ˇzeby ´udaje byly neˇciteln´e. Ulohy´ tohoto typu jsou typick´etak´epro realtimov´e syst´emy. £ Na obr´azku 5.7 je pˇr´ıpadjednoho producenta a jednoho konzumenta, kteˇr´ıpˇristupuj´ık pamˇet’ov´emu m´ıstuurˇcuj´ıc´ımu moment´aln´ıstav dat (str´aˇzn´ım´ısto). Pokud je v str´aˇzn´ımm´ıstˇeteˇcka, znamen´ato, ˇzedata jsou v konzistentn´ımstavu a pr´avˇek nim nepˇristupujeproducent ani konzument, v naˇsem pˇr´ıpadˇek dat˚umpˇristupujeproducent, kter´yze str´aˇzn´ıho m´ıstateˇckuodebral. Kaˇzd´yproces m˚uˇze pracovat jin´ymtempem. £ Poˇzadavky na ˇreˇsen´ı: • zachov´an´ıkonzistence dat, • producent se zastav´ı,kdyˇzzrovna konzument ˇctedata, • konzument se zastav´ı,kdyˇzzrovna producent modifikuje data.

 Pozn´amka: Zde by staˇciljeden prvek pro data (nemus´ıb´ytcel´afronta), tento prvek by byl producentem neust´ale pˇrepisov´an(aktualizov´an).D´alebychom potˇrebovali celoˇc´ıselnoupromˇennoupro str´aˇzn´ım´ısto (vlastnˇe by staˇcily jen dvˇehodnoty, jako ˇcerven´aa zelen´ana semaforu, takˇzeklidnˇetyp boolean tˇrebas n´azvem obsazeno, prokud v programovac´ımjazyce nˇecotakov´ehom´ame).Jak producent, tak i konzument, bude v cyklu ˇcekat, dokud v promˇenn´ebude 0 (false), pak ji dekrementuje (nastav´ına true), provede pˇr´ısluˇsnouoperaci a n´aslednˇeinkrementuje (nastav´ına false). 

5.3.4 Cten´aˇri–p´ısaˇriˇ

 V t´eto´ulozejsou procesy rozdˇeleny vzhledem k pˇr´ıstupu ke sd´ılen´emu prostˇredku(pamˇeti)do dvou skupin – skupiny ˇcten´aˇr˚u a skupiny p´ısaˇr˚u. Cten´aˇrizdeˇ mohou ˇc´ıst,p´ısaˇrimohou zapisovat. Mus´ıme m´ıtneust´alepˇrehledo tom, kolik je ˇcten´aˇr˚u(ˇctouc´ıch proces˚u). V dobˇe,kdy nˇekter´yproces zapisuje, nesm´ıprob´ıhatˇz´adn´eˇcten´ıani z´apisjin´ymprocesem, zat´ımco operac´ıˇcten´ım˚uˇzeprob´ıhatv´ıcez´aroveˇn(nenaruˇsuj´ıkonzistentnost dat). £ Na obr´azku 5.8 je ´ulohaˇreˇsenapro ˇctyˇriˇcten´aˇrea jednoho p´ısaˇre.Kaˇzd´yˇcten´aˇrsi pˇredˇcten´ım vyzvedne token ze str´aˇzn´ıhom´ısta.Zapisuj´ıc´ıproces (p´ısaˇr)si pˇripokusu o z´apismus´ıvyzvednout ˇctyˇritokeny, tedy tolik, kolik je celkem ˇcten´aˇr˚u.T´ımje zajiˇstˇeno,ˇzezapisovat lze pouze tehdy, kdyˇz ˇz´adn´yˇcten´aˇrneˇcte(ve str´aˇzn´ımm´ıstˇejsou vˇsechny tokeny). Pokud nˇekter´yp´ısaˇrzapisuje, mus´ıvˇsichni ˇcten´aˇripoˇckat, aˇzp´ısaˇrdokonˇc´ız´apisa vr´at´ıtokeny do str´aˇzn´ıhom´ısta. Kdyby bylo v´ıcep´ısaˇr˚u,opˇetby kter´ykoliv p´ısaˇrbyl zablokov´anjak v pˇr´ıpadˇe,ˇzenˇekter´yˇcten´aˇrˇcte, tak i v pˇr´ıpadˇe,ˇzenˇekter´yjin´yp´ısaˇrzapisuje. Ze str´aˇzn´ıhom´ıstaby k nˇemu vedla hrana ohodnocen´a poˇctemproces˚uschopn´ych ˇcten´ı. Kapitola 5 Synchronizace proces˚u 92

Proces P1 Proces P4 Proces Pz

? ? ? ...    4    ?? ?? ??

? ? ? P1.ˇcti() P4.ˇcti()Str´aˇzn´ı Pz.piˇs()   m´ısto  s s 6s6s6     ? ? ?

4 ? ? ?

  

? ? ?

Obr´azek5.8: Petriho s´ıt’ pro ´ulohu Cten´aˇri–p´ısaˇriˇ

Pokud bychom tento mechanismus vyuˇzilinapˇr´ıkladve v´ıcevl´aknov´emprocesu pro synchronizaci pˇr´ıstupuk prostˇredku (tˇrebapromˇenn´e)sd´ılen´emu vˇsemivl´akny procesu a nechtˇelibychom vl´akna klasifikovat na pouze ˇctouc´ı a pouze zapisuj´ıc´ı, ve str´aˇzn´ım m´ıstˇe by bylo tolik token˚ukolik je vl´aken. Kaˇzd´evl´aknoby pˇripˇr´ıstupupro ˇcten´ı(tj. v k´odutˇesnˇepˇredpˇr´ıkazem ˇcten´ıze sd´ılen´eho prostˇredku)vzalo jeden token, kdeˇztopˇripˇr´ıstupupro z´apis(v k´odutˇesnˇepˇredpˇr´ıkazem z´apisu)by vzalo pln´ypoˇcettoken˚u(podle poˇctuvl´aken). Tent´yˇzpoˇcet token˚uby po proveden´ıoperace vr´atilo. £ Poˇzadavky na ˇreˇsen´ıjsou n´asleduj´ıc´ı: • data mus´ız˚ustatv konzistentn´ımstavu, • operace z´apisuje vylouˇcenas jakoukoliv jinou operac´ı(ˇcten´ıi z´apisu), • operace ˇcten´ınejsou navz´ajemvylouˇceny.

 Pozn´amka: Nyn´ık implementaci. Nejjendoduˇsˇs´ımoˇznostnaprogramov´an´ıby byla opˇetceloˇc´ıseln´apromˇenn´a.Pˇred pˇr´ıstupem do sd´ılen´esekce by proces (vl´akno)ve smyˇcceˇcekal, neˇzpromˇenn´anabyde hodnoty 1 (pro ˇcten´ı)nebo maximum (pro z´apis),pak je tˇrebapromˇennoudekrementovat o 1 nebo maximum, prov´est operaci a inkrementovat o 1 nebo maximum. 

5.3.5 Pˇethladov´ych filozof˚u

Je to typick´a´ulohaparaleln´ıhoprogramov´an´ı.N´azev ´ulohy je odvozen ze zn´am´ehoprobl´emu: u kulat´eho stolu sed´ıpˇetfilozof˚ua stˇr´ıdavˇepˇrem´yˇsl´ıa j´ı.Kaˇzd´yk j´ıdlupotˇrebujedvˇeh˚ulky, ale na stole je pouze Kapitola 5 Synchronizace proces˚u 93 pˇeth˚ulek,mezi kaˇzdousoused´ıc´ıdvojic´ıfilozof˚ujedna. Pokud filozof nem´ak dispozici h˚ulkupo prav´e i lev´eruce, nezb´yv´amu neˇzpˇrem´yˇslet. Filozof, jehoˇz soused´e mu stˇr´ıdavˇe berou h˚ulky, nem´aˇsanci se naj´ıst,doch´az´ıke st´arnut´ıproces˚u (proces neust´aleˇcek´ana potˇrebn´e zdroje). Pokud vˇsichni najednou zvednou h˚ulkupo sv´eprav´eruce, do- jde k uv´aznut´ı,protoˇzevˇsichni drˇz´ıv prav´eruce h˚ulkua ˇcekaj´ına levou, kter´aje vˇsakzrovna drˇzena lev´ymsousedem, a tedy nedostupn´a. Po aplikaci na procesy m´amepˇet(obecnˇe n) prostˇredk˚u(h˚ulek) vyuˇz´ıvan´ych pˇeti (obecnˇe n) procesy (filozofy). Pˇredpokl´ad´a se, ˇze tyto prostˇredkyjsou vz´ajemnˇezamˇeniteln´e(je jedno, o kterou h˚ulku konkr´etnˇejde, at’ uˇzto zn´ıjakkoliv nehygienicky). Reˇsen´ıprobl´emuˇ spoˇc´ıv´av tom, ˇzeke stolu nepust´ımevˇsech pˇet Obr´azek5.9: Pˇethladov´ych filozof˚unajednou (a tedy k n prostˇredk˚umnepust´ımevˇsechny procesy filozof˚u najednou), ale maxim´alnˇeˇctyˇri(n 1). D˚usledkem je, ˇzealespoˇnjeden − filozof se naj´ıv kaˇzd´empˇr´ıpadˇe,tedy i kdyby vˇsichni najednou vzali h˚ulkupravou (nebo levou) rukou, u proces˚ualespoˇnjeden proces m˚uˇzepouˇz´ıtpotˇrebn´eprostˇredkya uvolnit je pak pro dalˇs´ıproces. Jinou moˇznost´ıje naˇr´ıditjednomu filozofovi, aby bral h˚ulkyv opaˇcn´empoˇrad´ıneˇzostatn´ı(coˇzu proces˚u nen´ıaplikovateln´e).

Proces P1 Proces P2 Proces P3

? ? ?

      ?? ?? ??

? ? ? Str´aˇzn´ı    m´ısto s 66s6     ? ? ?

? ? ?

  

? ? ?

Obr´azek5.10: Petriho s´ıt’ pro ´ulohu Pˇetfilozof˚u(pro tˇriprocesy a tˇriprostˇredky)

Na obr´azku 5.10 je ˇreˇsen´ınaznaˇcenona skupinˇetˇr´ıproces˚ua tˇr´ıprostˇredk˚u.Je dovoleno najednou pracovat pouze dvˇemaproces˚um,aby mohly vyuˇz´ıtty prostˇredky, kter´epotˇrebuj´ı.Obecnˇeje mnoˇzstv´ı proces˚uirelevantn´ı,d˚uleˇzit´eje, ˇzeve str´aˇzn´ımm´ıstˇe m´amemaxim´alnˇeo 1 token m´enˇeneˇzkolik je prostˇredk˚u. Kapitola 5 Synchronizace proces˚u 94

£ Poˇzadavky na ˇreˇsen´ı: • v jednom okamˇzikum˚uˇzeb´ytpˇridˇelenojen n 1 prostˇredk˚u(celkem je jich n), − • zachov´an´ıkonzistence dat (tj. je d˚uleˇzit´e,v jak´empoˇrad´ıse prov´adˇej´ıoperace a pr´aces ˇc´ıselnou promˇennou).

5.3.6 Soubˇehproces˚u

Uloha´ soubˇehu proces˚uje ˇreˇsenav paraleln´ım syst´emu, kdy je tˇrebasynchronizovat ˇcinnostdvou proces˚ubˇeˇz´ıc´ıch na r˚uzn´ych procesorech nebo na r˚uzn´ych uzlech v s´ıti (tedy soubˇeˇznˇepracuj´ıc´ıch proces˚u).Tyto procesy je tˇrebasesynchronizovat tak, aby urˇcitouˇc´astk´oduprov´adˇelyspoleˇcnˇe. Pokud se jeden proces ke spoleˇcn´eˇc´astik´odudostane dˇr´ıvneˇzdruh´y,mus´ıpoˇckat (na obr´azku 5.11 mus´ıˇcekat proces P2), tento k´odlze prov´estaˇzve chv´ıli,kdy k pˇrechodu na zaˇc´atkuspoleˇcn´e ˇc´astidospˇej´ıoba procesy.

Proces P1 Proces P2

? ?

  s   ??

? spoleˇcn´y pr˚ubˇeh  proces˚u  ?

? ?

 

? ?

Obr´azek5.11: Petriho s´ıt’ pro ´ulohu Soubˇeh proces˚u

Tato metoda synchronizace proces˚use m˚uˇzepouˇz´ıvat napˇr´ıkladv mechanismu RPC (vol´an´ıvzd´a- len´eprocedury, na obr´azku 5.11 vol´aproces P2 proceduru procesu P1) nebo pˇrijak´ekoliv synchronn´ı v´ymˇenˇedat paraleln´ıch proces˚u.

5.3.7 Race-Condition

 Race-Condition (soubˇehs nejednoznaˇcn´ymiprioritami, z´avod o prvenstv´ı“) vlastnˇenen´ıani tak ” synchronizaˇcn´ı´ulohou,jako sp´ıˇseprobl´emem,kter´yje nutno ˇreˇsit.Nast´av´atehdy, kdyˇzdva procesy (ˇci vl´akna)doraz´ıke sd´ılen´emu prostˇredkuv nerozliˇsiteln´empoˇrad´ı,tedy nelze spolehlivˇea jednoznaˇcnˇe urˇcit,kdo m´apˇrednost. Kapitola 5 Synchronizace proces˚u 95

Tento probl´emm˚uˇzenastat ve v´ıceprocesorov´em(v´ıcej´adrov´em)syst´emu, za urˇcit´ych okolnost´ı tak´eve v´ıce´ulohov´em jednoprocesorov´emsyst´emu. Je prakticky neˇreˇsiteln´y,proto je v tˇechto pˇr´ıpadech d˚uleˇzit´aprevence – tato situace by nemˇelanastat. M˚uˇzemenapˇr´ıkladpouˇz´ıvat atomick´epromˇenn´e a atomick´eoperace, aby pr´aces promˇenn´ymibyla co nejrychlejˇs´ı,pˇr´ıpadnˇetak´euzavˇr´ıtrizikov´eobjekty do kritick´ych sekc´ı. Race-Condition ˇcastoneb´yv´apatrn´ana prvn´ıpohled. Napˇr´ıkladse m˚uˇzeskr´yvat za nepˇredv´ıdan´ym chov´an´ımza urˇcit´ych (tˇeˇzko definovateln´ych) okolnost´ı– jenom nˇekdy, nebo za t´ım,ˇzez nezn´am´ych d˚uvod˚uprogram d´av´apˇrikaˇzd´emspuˇstˇen´ıtrochu jin´ev´ysledky, i kdyˇzby mˇeld´avat v´ysledkystejn´e. Nˇekter´ez d´aleprob´ıran´ych metod tento probl´emdok´aˇzouˇreˇsit.

5.4 Implementace ˇcek´an´ıpˇredkritickou sekc´ı

Jak vypl´yv´az popisu ˇreˇsen´ısynchronizaˇcn´ıch ´ulohpomoc´ıpetriho s´ıt´ı,procesy mus´ıtr´aviturˇcitoudobu ˇcek´an´ım.Toto ˇcek´an´ılze implementovat r˚uzn´ymizp˚usoby, kter´em˚uˇzeme rozdˇelitdo dvou skupin – pasivn´ıˇcek´an´ıa aktivn´ıˇcek´an´ı..Pasivnˇeˇcekaj´ıc´ıproces nedost´av´apˇridˇelenprocesor (tj. je suspendov´an, blokov´an),aktivnˇeˇcekaj´ıc´ıproces dost´av´apˇridˇelenprocesor bud’ na ˇcekac´ısmyˇcku“ nebo na prov´adˇen´ı ” jin´eˇcinnosti.

5.4.1 Pasivn´ıˇcek´an´ı

Pˇripasivn´ımˇcek´an´ıje proces blokov´annebo suspendov´an,s´amse nepod´ıl´ına ˇcek´an´ı.D´aleprobereme r˚uzn´emoˇznostiimplementace pasivn´ıhoˇcek´an´ıpˇredkritickou sekc´ı.  Z´akaz pˇreruˇsen´ı (maskov´an´ı pˇreruˇsen´ı). Proces, kter´yvyuˇz´ıv´adan´yprostˇredek,zak´aˇze pˇreruˇsen´ı a t´ım znemoˇzn´ı pˇrep´ın´an´ı kontext˚u,procesor nem˚uˇzeb´ytpˇridˇelenjin´emu procesu (tedy ani ˇz´adn´emu z ˇcekaj´ıc´ıch). Jde o hardwarovˇez´avisl´eˇreˇsen´ıpouˇziteln´epouze na jednoprocesorov´em syst´emu. Nev´yhodou je, ˇzene vˇsechna pˇreruˇsen´ılze zak´azat(napˇr´ıklad pˇreruˇsen´ıpˇridˇelen´ınulou) a nav´ıc pˇreruˇsen´ı vygenerovan´abˇehemz´akazu pˇreruˇsen´ı se mohou ztratit (nen´ı vyvol´anafunkce oˇsetˇruj´ıc´ı toto pˇreruˇsen´ı).D˚usledkem je kromˇejin´ehoi to, ˇzeproces, kter´yzak´azalpˇreruˇsen´ı,nelze obvykl´ym zp˚usobem ukonˇcitani pˇreruˇsit,m˚uˇzedoj´ıtk uv´aznut´ıa st´arnut´ıproces˚u.Toto ˇreˇsen´ısniˇzujepropust- nost syst´emu.  Z´akaz pˇrepnut´ıkontextu. Operaˇcn´ısyst´emm˚uˇzenab´ızetsyst´emov´evol´an´ızakazuj´ıc´ıpˇrepnut´ı kontextu. Oproti pˇredchoz´ımu ˇreˇsen´ıse neztr´acej´ıpˇreruˇsen´ı(jsou obvykle urˇcena bˇeˇz´ıc´ımu procesu), nav´ıcje to softwarov´eˇreˇsen´ına ´urovni operaˇcn´ıhosyst´emu, tedy nen´ıhardwarovˇez´avisl´e. Nev´yhoda nebezpeˇc´ıuv´aznut´ıa st´arnut´ıproces˚uz˚ust´av´a,re´alnˇese degraduje multitasking (pre- emptivn´ıse mˇen´ına nepreemptivn´ıformu).  Nav´yˇsen´ı priority. Nˇekter´eoperaˇcn´ı syst´emy ˇreˇs´ı omezen´ı pˇrepnut´ı kontextu ponˇekudele- gantnˇejˇs´ımzp˚usobem. Pokud proces vyuˇz´ıv´asd´ılen´yprostˇredek,k nˇemuˇzmus´ıb´ytsynchronizov´an pˇr´ıstup,je tomuto procesu priorita zv´yˇsenanad ´uroveˇnvˇsech proces˚u,kter´emaj´ıopr´avnˇen´ıo tento prostˇredekˇz´adat.Proces m´ana procesoru vˇzdypˇrednostpˇred vˇsemiprocesy, kter´emaj´ıniˇzˇs´ıprioritu, ˇc´ımˇzje zaruˇcenjeho v´yhradn´ıpˇr´ıstuppˇrivyuˇz´ıv´an´ıprostˇredku. Ovˇsemm˚uˇzedoch´azetke st´arnut´ıproces˚u,pokud syst´emnem´amechanismus kontroly doby str´ave- n´eprocesem na procesoru. Kapitola 5 Synchronizace proces˚u 96

 Mutex (mutual exclusion, vz´ajemn´evylouˇcen´ı). Mutex je mechanismus zamknut´ıprostˇred- ku. Pokud proces poˇz´ad´ao pr˚uchod mutexem (resp. pokus´ıse mutex uzamknout) a pˇritomje mutex pr´avˇeuzamknut´y,tento proces bude suspendov´an(odloˇzenmezi ˇcekaj´ıc´ıprocesy). Mutex nemus´ıb´ytjen pasivn´ımetodou ˇcek´an´ı,v nˇekter´ych operaˇcn´ıch syst´emech existuje i vari- anta, kdy proces pravidelnˇetestuje stav mutexu a mezi testov´an´ımm˚uˇzeprov´adˇetsv˚ujk´od.

5.4.2 Aktivn´ıˇcek´an´ı

Pˇriaktivn´ımˇcek´an´ıse proces pod´ıl´ına ˇcek´an´ı(nebo prov´ad´ıjinou ˇcinnostpodle sv´ehok´odu),m˚uˇze j´ıto nˇekterouvariantu cyklu s pr´azdnouoperac´ı.  Sd´ılen´azamykac´ıpromˇenn´a. Promˇenn´a obsazeno m˚uˇzeb´ytnastavena na 0 (false, volno) nebo 1 (true, obsazeno). Pokud je nastavena na 1, proces prov´ad´ıpr´azdnou smyˇcku.

M Pˇr´ıklad Pod´ıv´amese na implementaci sd´ılen´ezamykac´ıpromˇenn´e. shared int obsazeno = 0; ... // uvnitˇrprocesu: while (obsazeno) {}; // ˇcek´ames pr´azdn´ymcyklem, dokud je obsazeno // uˇzneˇcek´a: obsazeno = 1; // rezervujeme si prostˇredek KS(); // pouˇz´ıv´ameprostˇredek(kritick´asekce) obsazeno = 0; // uvolnili jsme prostˇredek

V kritick´esekci se m˚uˇzenach´azet pouze jeden proces, ale nen´ıvyˇreˇsenapodm´ınka koneˇcnostipr˚ubˇehu kritick´esekce ani koneˇcnostˇcek´an´ıostatn´ıch proces˚u(z´aleˇz´ına tom, v jak´em poˇrad´ıse prov´ad´ıtest while(obsazeno) ˇcekaj´ıc´ıch proces˚u,do kritick´esekce se dostane jednoduˇseten proces, jehoˇztest se prov´ad´ıjako prvn´ıpo nastaven´ıpromˇenn´e obsazeno na 0, coˇzje do urˇcit´em´ıryn´ahoda). M

Tento mechanismus m˚uˇzeselhat na syst´emu s v´ıceprocesory nebo s v´ıcej´adrov´ymprocesorem – m˚uˇze nastat situace, kdy dva paralelnˇebˇeˇz´ıc´ıprocesy z´aroveˇn zjist´ı“, ˇzeje kritick´asekce voln´a,a z´aroveˇn ” se tedy pokus´ıpˇrenastavit promˇennou obsazeno.  Stˇr´ıd´an´ıproces˚u. Prostˇredekje stˇr´ıdavˇepˇriˇrazov´anvˇsemproces˚um.Pokud proces prostˇredek zrovna nepotˇrebuje,zbyteˇcnˇezdrˇzujeostatn´ıprocesy, tedy metoda sniˇzujepropustnost syst´emu a do- ch´az´ık uv´aznut´ı. Reˇsen´ıjeˇ pouˇziteln´ev pˇr´ıpadˇe,kdy m´amejen m´aloproces˚u(pokud moˇznodva), coˇz je v operaˇcn´ımsyst´emu velmi nepravdˇepodobn´e.

M Pˇr´ıklad Pro i-t´yproces: shared int pridelen = 0; ... while (pridelen != i) {}; // ˇcek´ame,dokud nedostaneme prostˇredekpˇridˇelen KS(); // m´amepˇridˇelenprostˇredek,prov´ad´ımek´od pridelen ++; // skonˇcilijsme, pˇred´ameprostˇredekdalˇs´ımu if (pridelen == n) // promˇenn´a"pˇretekla",v kruhov´empoli pridelen = 0; // se vrac´ımena index prvn´ıhoprocesu M Kapitola 5 Synchronizace proces˚u 97

M Pˇr´ıklad Malou zmˇenoulze odstranit uv´aznut´ıv pˇr´ıpadˇe,ˇzenˇekter´yproces nechce prostˇredekvyuˇz´ıvat – pˇrid´ame pole hodnot 0, 1 (false, true), kde pro kaˇzd´yproces bude jedna poloˇzka. V tomto poli d´aproces na vˇedom´ı,ˇzechce vyuˇz´ıvat dan´yprostˇredek,nastaven´ımsv´epoloˇzkyna 1, a m´ıstopˇridˇelen´ın´asleduj´ıc´ımu procesu se ve smyˇccepˇreskoˇc´ıty procesy, kter´eo prostˇredeknestoj´ı.Pro i-t´yproces: shared int pridelen = 0; shared int priznaky[n] = (0,0,...,0); ... priznaky[i] = 1; // poˇz´ad´ameo prostˇredek while (pridelen != i) {}; // ˇcek´ame,dokud ho nedostaneme pˇridˇelen KS(); // m´amepˇridˇelenprostˇredek,prov´ad´ımek´od pridelen[i] = 0; // uˇzprostˇredeknepotˇrebujeme do { pridelen ++; // skonˇcilijsme, pˇred´ameprostˇredekdalˇs´ımu if (pridelen == n) // promˇenn´a"pˇretekla",v kruhov´empoli pridelen = 0; // se vrac´ımena index prvn´ıhoprocesu } while (!priznaky[pridelen]); // pˇridˇel´ımepouze procesu, kter´y // o~prostˇredekpoˇz´adal

I po t´eto´upravˇevˇsakdoch´az´ıke zbyteˇcn´emu zdrˇzov´an´ıˇcasovou reˇzi´ıpˇriˇrazov´an´ıprostˇredku.Zvl´aˇstˇe pokud delˇs´ı dobu ˇz´adn´yproces o prostˇredeknepoˇz´ad´a,posledn´ı vlastn´ık prostˇredkuje ne´umˇernˇe zatˇeˇzov´anprohled´av´an´ıma nem˚uˇzepokraˇcovat ve sv´eˇcinnosti. M

 Bakery Algorithm (Pekaˇr˚uvalgoritmus). Procesu je pˇriˇz´adostio pˇr´ıstupdo kritick´esekce pˇridˇelenopoˇradov´eˇc´ıslo.Pˇrednostm´aproces s nejniˇzˇs´ımpoˇradov´ymˇc´ıslem,a v pˇr´ıpadˇe,ˇzedva procesy maj´ıstejn´epoˇradov´eˇc´ıslo,rozhoduje se mezi nimi podle dalˇs´ıhokrit´eria(PID nebo porovn´an´ıjmen proces˚upodle abecedy). Algoritmus pracuje takto: v poli poradi m´akaˇzd´yproces ˇcekaj´ıc´ına prostˇredekpˇriˇrazeno poˇradov´e ˇc´ıslo(pokud o prostˇredekneˇz´ad´a,je zde ˇc´ıslo0), v poli prirazuje je u dan´ehoprocesu ˇc´ıslo1, pokud zrovna prob´ıh´apˇriˇrazov´an´ıpoˇrad´ıpro tento proces, po proveden´ıpˇriˇrazen´ıje hodnota vr´acenazpˇet na 0. T´ımje zajiˇstˇeno,ˇzesice je moˇzn´epˇridˇelitdvˇemaproces˚umstejn´epoˇrad´ı,ale bˇehemtohoto pˇriˇrazov´an´ı,kdy ˇc´ıslonen´ı konzistentn´ı“, nen´ızjiˇst’ov´anahodnota tohoto ˇc´ıslajin´ymprocesem (ˇcek´an´ı ” while(prirazuje[j]), tedy dokud je dan´ahodnota rovna 1). Cekaj´ıc´ıprocesˇ pak proch´az´ıpole poradi, a pokud naraz´ına proces, jehoˇzpoˇradov´eˇc´ısloje menˇs´ı (nebo stejn´e,ale m´aniˇzˇs´ıPID), pak v pr´azdn´emcyklu ˇcek´a,aˇztento proces ukonˇc´ıˇcek´an´ıa zpracuje svou ˇc´astk´oduv kritick´esekci. Kdyˇzproces takto projde cel´epole, pak uˇzˇz´adn´yjin´yproces nem´a niˇzˇs´ıpoˇradov´eˇc´ıslo(ˇz´adn´yz nich uˇzneˇcek´ana tento prostˇredek),a proto i tento proces m˚uˇze prov´est k´odkritick´esekce. Pak nastav´ısv´epoˇrad´ına 0 a t´ımd´anajevo, ˇzeuˇzprostˇredeknepouˇz´ıv´a.

M Pˇr´ıklad Implementace pekaˇrova algoritmu je n´asleduj´ıc´ı: shared int poradi[n] = (0,0,...,0); shared int prirazuje[n] = (0,0,...,0); ... prirazuje[i] = 1; // po dobu pˇriˇrazov´an´ıpoˇrad´ıbudeme "chr´anˇeni" poradi[i] = DejNejvyssi(poradi) + 1; // z´ısk´amepoˇradov´eˇc´ıslo prirazuje[i] = 0; // konec pˇriˇrazov´an´ıpoˇradov´ehoˇc´ısla Kapitola 5 Synchronizace proces˚u 98 for (j=0; j

M

Pekaˇr˚uvalgoritmus je pouˇziteln´yi pro v´ıceprocesorov´esyst´emy. Je to jednoznaˇcn´ya pˇritomjednoduch´y algoritmus, kter´yzamezuje st´arnut´ıproces˚u.Je pouˇziteln´ynapˇr´ıkladtehdy, kdyˇzje procesor pl´anov´an metodou FCFS.  Hardwarov´eˇreˇsen´ı. Nˇekter´eprocesory nab´ızej´ıhardwarov´eˇreˇsen´ıpro aktivn´ıˇcek´an´ı,instrukci TSL (Test and Set Lock), swap nebo XCHG (na r˚uzn´ych hardwarov´ych architektur´ach). Vˇsechny tyto instrukce nˇejak´ymzp˚usobem prov´adˇej´ıv´ymˇenu hodnoty z´amkukritick´esekce a dan´e promˇenn´e.Pouˇz´ıvaj´ıse tak, ˇzeneust´alenastavuj´ız´amekna 1 (zamˇceno)a zjiˇst’uj´ı,jak´abyla p˚uvodn´ı hodnota pˇredt´ımto nastaven´ım. Mohou b´ytpouˇzity jako souˇc´ast sloˇzitˇejˇs´ıho prostˇredkuaktivn´ıho ˇcek´an´ı.

£ Postup Uk´aˇzemesi zp˚usobvyuˇzit´ıinstrukce XCHG.

// promˇenn´azamek je sd´ılenouzamykac´ıpromˇennou,kdyˇz= 1, je zamˇceno KS: mov EAX, 1h // do registru EAX uloˇz´ımehodnotu 1 xchg zamek, EAX // vol´ameinstrukci, kter´apˇrehod´ıobsah parametr˚u jnz KS // cyklus -- Jump if Not Zero (dokud se do EAX nedostane 0) // pokud pˇriv´ymˇenˇebyla v~z´amkup˚uvodnˇe0, pˇrehozen´ımse tam dostane 1, tedy // odemknut´yz´amekokamˇzitˇeznovu zamkneme a~pokraˇcujemeza cyklem sv´ymk´odem ... // pouˇz´ıv´ameprostˇredek odchod: mov zamek, 0h // pˇrisv´emodchodu z kritick´esekce odemkneme £

Operaˇcn´ısyst´emy tak´eobvykle nab´ızej´ısyst´emov´avol´an´ı(funkce) zapouzdˇruj´ıc´ıpodobnou instrukci, protoˇzeobecnˇev souˇcasn´ych operaˇcn´ıch syst´emech m´aprogram´atorjen omezen´ypˇr´ıstupk instrukc´ım procesoru.

M Pˇr´ıklad Pˇriprogramov´an´ıse v r˚uzn´ych jazyc´ıch m˚uˇzemesetkat se syst´emov´ymvol´an´ım swap: shared int zamek = 0; ... // v k´oduprocesu: int kontrola; // kontroln´ıpromˇenn´apro v´ymˇenu ... kontrola = 1; while (kontrola = 1) swap (zamek, kontrola); // kontrola m´ahodnotu 0, konec ˇcek´an´ı: ... // kritick´asekce, pouˇz´ıv´ameprostˇredek zamek = 0;

M Kapitola 5 Synchronizace proces˚u 99

5.5 Synchronizaˇcn´ın´astroje operaˇcn´ıhosyst´emu

Prostˇredkypopsan´ev´yˇse v podkapitole 5.4 jsou vˇetˇsinou bud’ hardwarovˇez´avisl´enebo se implementuj´ı na stranˇeprocesu, coˇzomezuje moˇznostijejich pouˇzit´ı.Operaˇcn´ısyst´emy ve sv´emj´adˇreobvykle nab´ızej´ı komplexnˇejˇs´ısynchronizaˇcn´ın´astroje dostupn´epomoc´ısyst´emov´ych vol´an´ı.Jsou to pˇredevˇs´ımtyto n´astroje: • semafory, • mechanismus zpr´av, • monitory, • vol´an´ıvzd´alen´eprocedury (RPC).

5.5.1 Semafory

 Semafory povoluj´ınebo zabraˇnuj´ıpˇr´ıstupudo kritick´esekce. Semafor je obvykle implementov´an strukturou obsahuj´ıc´ı promˇennouse stavem semaforu a dalˇs´ı promˇennoupro implementaci fronty proces˚u. Cekaj´ıc´ıprocesyˇ jsou blokov´any (suspendov´any) a zaˇrazeny do t´etofronty, tedy jde o pasivn´ı ˇcek´an´ı,kter´eje zajiˇst’ov´anooperaˇcn´ımsyst´emem.Fronta m˚uˇzeb´ytklasick´aFIFO nebo s prioritami. Pro ˇreˇsen´ı´ulohz kapitoly 5.3 se pouˇz´ıv´ajeden nebo v´ıcesemafor˚u. Semafor samotn´ysi m˚uˇzemepˇredstavit jako tuto datovou strukturu: typedef struct TSemafor { int stav; // stav semaforu (volno, obsazeno, apod.) TFrontaProcesu fronta; // fronta, ve kter´eˇcekaj´ıprocesy } extern struct TSemafor semafor;

£ Semafor je kromˇeinicializaˇcn´ıfunkce obsluhov´andvˇemafunkcemi: • funkci wait (pˇr´ıp. down, lock) spouˇst´ıproces ˇz´adaj´ıc´ıo vstup do kritick´esekce; pokud do kritick´e sekce nelze vstupit, je v r´amcit´etofunkce proces blokov´an(suspendov´an)a zaˇrazendo fronty, jinak funkce konˇc´ıbez tohoto d˚usledku, • funkci signal (pˇr´ıp. send, up, unlock) spouˇst´ıproces vystupuj´ıc´ız kritick´esekce a slouˇz´ık vybr´an´ı n´asleduj´ıc´ıhoprocesu z fronty a jeho posl´an´ıdo kritick´esekce, tedy ukonˇc´ıjeho blokov´an´ıa zaˇrad´ı do fronty pˇripraven´ych. Proces nejdˇr´ıvzavol´afunkci wait (a pˇr´ıpadnˇeje blokov´an),pak provede k´odkritick´esekce a potom zavol´afunkci signal povoluj´ıc´ıdalˇs´ımu prostˇredkupˇr´ıstupdo kritick´esekce. Posloupnost operac´ıpro proces ˇz´adaj´ıc´ıo vstup do kritick´esekce a dan´ysemafor je n´asleduj´ıc´ı: ... wait (semafor); // ˇz´ad´ameo prostˇredek,pokud nen´ıvoln´y,jdeme do fronty KS(); // pracujeme s prostˇredkem signal (semafor); // prostˇredekvr´at´ımea pokraˇcujemeve sv´emk´odu ...

Funkce wait a signal by mˇelyb´ytatomick´e(nedˇeliteln´e,nepˇreruˇsiteln´e),a tak´ek frontˇesemaforu by mˇelb´ytv´yhradn´ıpˇr´ıstup(pˇripˇrid´av´an´ınebo vyb´ır´an´ız fronty)1. 1Nepˇreruˇsitelnostfunkc´ı wait a signal lze jednoduˇsezaˇr´ıdit na jednoprocesorov´emsyst´emu (napˇr´ıklad zak´az´an´ım pˇreruˇsen´ı bˇehemvykon´av´an´ı k´odufunkce), ale ve v´ıceprocesorov´emsyst´emu tuto jednoduchou metodu nelze pouˇz´ıt. Obvykle se tento probl´emˇreˇs´ıoznaˇcen´ımtˇechto funkc´ısamotn´ych za kritick´esekce a jejich softwarov´ymˇreˇsen´ım. Takt´eˇzv´yhradn´ıpˇr´ıstupk frontˇese tˇeˇzko ˇreˇs´ı,a to v pˇr´ıpadˇe,kdy je fronta dynamick´a.Proto se v takov´ychto pˇr´ıpadech (sd´ılen´apamˇet’) pouˇz´ıvaj´ısp´ıˇsestatick´epamˇet’ov´estruktury pˇresˇradujejich nev´yhod oproti dynamick´ym. Kapitola 5 Synchronizace proces˚u 100

Existuj´ıdva typy semafor˚u– bin´arn´ıa obecn´e.

 Bin´arn´ısemafor m´adva stavy: 0 (ˇcerven´a)pro z´akaz vstupu, 1 (zelen´a)pro povolen´ıvstupu. V tˇechto stavech se reaguje takto: 0 (ˇcerven´a): Pokud nyn´ınˇekter´yproces spust´ıfunkci wait, je blokov´ana zaˇrazendo fronty. Pˇrivol´an´ıfunkce signal se zkontroluje, zda nˇekter´yproces ˇcek´ave frontˇe.Jestliˇzeano, je prvn´ı ˇcekaj´ıc´ıproces zaˇrazendo fronty pˇripraven´ych a t´ımje mu povoleno vstupit do kritick´esekce, kdyˇzje fronta pr´azdn´a,semafor se pouze nastav´ına 1. 1 (zelen´a): Na proces volaj´ıc´ı funkci wait tato funkce nem´aˇz´adn´yvliv, jen nastav´ı semafor na 0. Funkce signal v tomto stavu nen´ıvol´ana.

 Obecn´ysemafor si m˚uˇzeme pˇredstavit jako strukturu obsahuj´ıc´ıˇc´ıtaˇc,kter´ym˚uˇzenab´yvat r˚uzn´ych celoˇc´ıseln´ych hodnot. Z hlediska procesu se obecn´esemafory pouˇz´ıvaj´ıstejnˇejako bin´arn´ı,ale oproti bin´arn´ımsemafor˚um uchov´avaj´ıdalˇs´ıinformace nav´ıc. Obvykle z´aporn´ahodnota semaforu urˇcuje,kolik proces˚uˇcek´ave frontˇe,kladn´anaopak znamen´a,ˇzesemafor je pˇredplacen“, urˇcuje,kolikr´atje moˇznokolem semaforu ” proj´ıtbez ˇcek´an´ı.Hodnota 0 m´astejn´yv´yznamjako u bin´arn´ıch semafor˚u,tedy prostˇredekje nˇekter´ym procesem vyuˇz´ıv´an(ˇcerven´a). Obecn´esemafory se pouˇz´ıvaj´ıve dvou variant´ach: a) ˇc´ıtaˇcnab´yv´ahodnot 0 (nez´aporn´ych) – oproti bin´arn´ımu pˇrid´av´ajen funkci pˇredplacen´ı“. ≥ ” Funkce wait a signal jsou implementov´any n´asledovnˇe: • wait pˇrihodnotˇeˇc´ıtaˇcesemaforu > 0 sn´ıˇz´ıhodnotu ˇc´ıtaˇceo 1 a ukonˇc´ıse (proces nen´ı blokov´an),pˇrihodnotˇe= 0 zablokuje proces a zaˇrad´ıho do fronty. • signal zkontroluje frontu. Kdyˇzje fronta pr´azdn´a,zv´yˇs´ıˇc´ıtaˇco 1, a kdyˇznen´ıpr´azdn´a(tedy ˇc´ıtaˇcje = 0), odblokuje prvn´ıˇcekaj´ıc´ıproces a poˇsleho do fronty pˇripraven´ych. b) ˇc´ıtaˇcnab´yv´ai z´aporn´ych hodnot – funkce wait a signal jsou implementov´any takto: • wait sn´ıˇz´ıˇc´ıtaˇco 1. Pokud pˇredt´ımto sn´ıˇzen´ımbyl ˇc´ıtaˇc 0 (ˇz´adn´yˇcekaj´ıc´ıproces), hned ≥ se ukonˇc´ı(a proces m˚uˇzepokraˇcovat do kritick´esekce), kdyˇzbyl ˇc´ıtaˇc < 0, zablokuje proces a zaˇrad´ıho do fronty. • signal zv´yˇs´ıˇc´ıtaˇco 1. Pokud byl ˇc´ıtaˇcpˇred zv´yˇsen´ım < 0 (po zv´yˇsen´ı 0), pak zkontro- ≤ luje frontu; pokud fronta nen´ıpr´azdn´a,prvn´ıˇcekaj´ıc´ıproces odblokuje a poˇsle do fronty pˇripraven´ych.

M Pˇr´ıklad Pouˇzit´ıobecn´ych semafor˚usi uk´aˇzemena ˇreˇsen´ısynchronizaˇcn´ı´ulohy Producent–konzument s ome- zen´ymbufferem. Potˇrebujemedva semafory: extern struct TSemafor volne, obsazene; V´yznamtˇechto semafor˚uje n´asleduj´ıc´ı: • semafor volne zakazuje producentovi pˇrekroˇcitvelikost bufferu, iniciujeme ho na poˇcetpoloˇzek, kter´ese vejdou do sd´ılen´epamˇeti(tedy pˇredplat´ıme“), ” • semafor obsazene zakazuje konzumentovi vyb´ırat z bufferu, kdyˇzje zrovna pr´azdn´y,iniciujeme ho na 0. Kapitola 5 Synchronizace proces˚u 101

Producent: Konzument: do { do { produkuj (data); wait (obsazene); wait (volne); cti (data); zapis (volne); signal (volne); signal (obsazene); zpracuj (data); } while (1); } while (1);

M

£ Postup Dalˇs´ıpˇr´ıkladje ˇreˇsen´ım´ulohy Pˇethladov´ych filozof˚u. Pro N prostˇredk˚um´ameN kritick´ych sekc´ı,tedy budeme m´ıtpole N semafor˚u.Vˇsechny iniciujeme na 1. Dalˇs´ısemafor bude hl´ıdat,aby prostˇredkyvyuˇz´ıvalo pouze N-1 proces˚u(je inicializov´anna N-1). N´asleduj´ıc´ık´odje pro i-t´yproces:

#define N 5 // poˇcetsd´ılen´ychprostˇredk˚unastaven na 5 struct TSemafor sem[N]; // semafory pro hl´ıd´an´ıprostˇredk˚u(h˚ulek) struct TSemafor S; // semafor pro hl´ıd´an´ıpoˇctuproces˚u for (i=0; i

// pro i-t´yproces: do { mysli(i); // i-t´yproces zat´ımprostˇredkynepotˇrebuje wait (S); // uˇzano, tedy sn´ıˇz´ımepˇredplacen´ıpoˇctuproces˚u wait (sem[i]); // rezervujeme jeden prostˇredek(h˚ulku) wait (sem[(i+1)%5]); // jeˇstˇedalˇs´ı jez (i); // m´ameoba, tedy je pouˇz´ıv´ame signal (sem(i+1)%5]); // vr´at´ımeoba prostˇredky,ale v obr´acen´empoˇrad´ı signal (sem[i]); signal (S); // d´ameˇsancidalˇs´ımuprocesu } while (1); £

5.5.2 Mechanismus zpr´av

Procesy mohou b´ytsynchronizov´any tak´emechanismem zpr´av.Pod t´ımto pojmem rozum´ımenejen pˇr´ım´ezas´ıl´an´ızpr´av(send a receive), ale tak´enepˇr´ımoukomunikaci pos´ıl´an´ızpr´avpˇresporty (sockety). Metoda je vhodn´ai pro v´ıceprocesorov´eˇcidistribuovan´eprostˇred´ıvˇcetnˇesynchronizace v r´amci poˇc´ıtaˇcov´es´ıtˇe.Tomu mus´ıb´ytpˇrizp˚usobena adresace komunikuj´ıc´ıch proces˚uˇciobjekt˚u. £ Procesy se zpr´avami pracuj´ıpomoc´ıfunkc´ı(syst´emov´ych vol´an´ı)obvykle nazvan´ych send a receive. Pˇripouˇzit´ıpˇr´ım´ehoadresov´an´ıkomunikace funguje v´yˇsepopsan´ymzp˚usobem (kapitola 4.7), u nepˇr´ı- m´ehoadresov´an´ıtyto funkce pracuj´ın´asledovnˇe: • funkce send zkontroluje, zda schr´anka nen´ıpln´a;pokud nen´ıpln´a,odes´ılaj´ıc´ıproces poˇslezpr´avu, jinak je proces zablokov´ana zpr´ava je posl´anaaˇzpo jeho odblokov´an´ı(po uvolnˇen´ım´ıstave schr´ance), Kapitola 5 Synchronizace proces˚u 102

• funkce receive volan´aadres´atemzkontroluje, zda schr´anka nen´ıpr´azdn´a;pokud nen´ıpr´azdn´a, pˇrijmezpr´avu,jinak je proces zablokov´anaˇzdo doby, kdy je do schr´ankydoruˇcenazpr´ava, a ta je pak pˇrijata.

M Pˇr´ıklad N´asleduj´ıc´ıuk´azka je ˇreˇsen´ım ´ulohy Producent–konzument pro buffer pevn´ed´elky. Jsou definov´any dvˇe schr´anky: • volne – kdyˇzse producentovi podaˇr´ız t´etoschr´anky z´ıskat zpr´avu,m˚uˇzeprodukovat, na zaˇc´atku je cel´anaplnˇenazpr´avami informuj´ıc´ımio moˇznostiprodukovat, konzument zde zaˇslezpr´avupo kaˇzd´emzpracov´an´ıpoloˇzky, • obsazene – zde producent zas´ıl´azpr´avys vyprodukovan´ymipoloˇzkami. #define MAX 20 // maxim´aln´ıpoˇcetzpr´avve schr´ance struct TSchranka volne, obsazene; // schr´anky for (i=0; i

Producent: Konzument: do { do { receive (volne, data); receive (obsazene, data); produkuj (data); zpracuj (data); send (obsazene, data); send (volne, NULL); } while (1); } while (1); M

 Pokud m´aschr´anka velikost 0, jde vlastnˇeo variantu pˇr´ım´eho adresov´an´ıa tento pˇr´ıpadse naz´yv´a dostaven´ıˇcko (randez-vous). Vol´an´ıfunkce send nebo receive zp˚usob´ızablokov´an´ıvolaj´ıc´ıhoprocesu, proces je odblokov´antehdy, kdyˇzje vol´anap´arov´afunkce, tedy aˇzkdyˇzjsou vol´any obˇefunkce send a receive, m˚uˇzekomunikace probˇehnout(vz´ajemn´eˇcek´an´ı).

M Pˇr´ıklad N´asleduj´ıc´ık´odje ˇreˇsen´ım´ulohy Producent–konzument bez sd´ılen´epamˇeti.Oproti pˇredchoz´ımˇreˇsen´ım mus´ıb´ytkomunikace synchronn´ı.Vˇsimnˇetesi, ˇzenedeklarujeme ˇz´adn´esd´ılen´epromˇenn´eani datov´e struktury.

Producent: Konzument: do { do { produkuj (data); receive (producent, data); send (konzument, data); zpracuj (data); receive (konzument, ok); send (producent, ok); } while (1); } while (1); M

5.5.3 Monitory

 Monitor je synchronizaˇcn´ıprostˇredekna vyˇsˇs´ı´urovni. Zapouzdˇrujev sobˇeskupinu datov´ych struk- tur, procesy k nim mohou pˇristupovat pouze pˇresrozhran´ıurˇcen´epˇr´ıstupov´ymifunkcemi. Funkc´ım˚uˇze b´ytjak´ykoliv poˇceta urˇcuj´ır˚uzn´ezp˚usoby pr´aces daty monitoru. Kapitola 5 Synchronizace proces˚u 103

Datov´estruktury zapouzdˇren´ev monitoru b´yvaj´ı oznaˇcov´any jako podm´ınky. Tyto podm´ınky mohou b´ytimplementov´any pomoc´ı semafor˚ua semaforov´eoperace wait a signal jsou pouˇz´ıv´any pˇr´ıstupov´ymifunkcemi monitoru (nikoliv procesy), kaˇzd´apˇr´ıstupov´afunkce vyuˇz´ıv´ajednu nebo v´ıce r˚uzn´ych podm´ınek. £ Jde o to, aby kaˇzd´apodm´ınka mohla b´ytv jednom okamˇzikuvyuˇz´ıv´anapouze jedn´ımprocesem (je- dinou funkc´ı).Proto pˇr´ıstupov´afunkce okamˇzitˇepo sv´emspuˇstˇen´ızavol´afunkci wait kaˇzd´epodm´ınky, kterou bude pouˇz´ıvat, a t´ımzabrzd´ıspuˇstˇen´ıkter´ekoliv dalˇs´ıfunkce, kter´aby tuto podm´ınku tak´e chtˇelapouˇz´ıvat. Tˇesnˇepˇredsv´ymukonˇcen´ımpak funkce opˇetrezervovan´epodm´ınkyodblokuje jejich funkcemi signal.

Sem 1 Podmínka 1 Funkce 1 Proces 1 Sem 2 Podmínka 2

Sem 3 Funkce 2  Proces 2 Podmínka 3

Sem 1 Podmínka 1 Funkce 1 Proces 1 Sem 2 Podmínka 2

Sem 3 Funkce 2 Proces 2 Podmínka 3

Obr´azek5.12: Jednoduch´ymonitor se dvˇemapˇr´ıstupov´ymifunkcemi

Na obr´azku 5.12 nahoˇreje jednoduch´ymonitor, ve kter´emprvn´ıproces vol´afunkci 1. Tato funkce uzamkne (nastav´ına ˇcervenou) jeden ze semafor˚u,a tedy znemoˇzn´ıvol´an´ıdruh´efunkce (tu vol´adruh´y proces). Druh´afunkce ˇcek´a,aˇzbude tento semafor odemknut, a aˇzpak m˚uˇzeprov´est sv˚ujk´od(ke sv´e ˇcinnostipotˇrebujepro sebe uzamknout vˇsechny tˇri semafory), coˇzvid´ımena tomt´eˇzobr´azkudole.

5.5.4 RPC

RPC (Remote Procedure Call, vol´an´ıvzd´alen´eprocedury) rozum´ımepostup, kdy proces vol´aproceduru jin´ehoprocesu. M˚uˇzese jednat nejen o vol´an´ıprocedury (funkce) naprogramovan´ev spustiteln´emsou- boru, ale tak´eo proceduru (funkci) nach´azej´ıc´ıse v knihovnˇe(vˇcetnˇeknihoven API rozhran´ıoperaˇcn´ıho syst´emu). RPC se obvykle realizuje pomoc´ısynchronn´ıch zpr´av,kdy ˇz´adaj´ıc´ıproces poˇsleprocesu, kter´y je majitelem dotyˇcn´eprocedury, zpr´avuobsahuj´ıc´ıtak´epˇr´ıpadn´eskuteˇcn´eparametry pro danou pro- ceduru a ˇcek´ana odpovˇed’. Druh´yproces obdrˇz´ızpr´avu,vyvol´aproceduru a volaj´ıc´ımu procesu odeˇsle zpr´avus v´ysledkem proveden´ıprocedury. Kapitola 5 Synchronizace proces˚u 104

5.6 Synchronizaˇcn´ın´astroje v r˚uzn´ych operaˇcn´ıch syst´emech

Z hlediska program´atorajsou zaj´ımav´epˇredevˇs´ımsynchronizaˇcn´ımechanismy pro synchronizaci pˇr´ı- stupu k objektu sd´ılen´emu vl´akny jednoho procesu, pˇr´ıpadnˇezajiˇstˇen´ısd´ılen´ıobjektu pˇresnˇekolik pˇr´ıbuzn´ych“ proces˚u. ” V jak´emkoliv operaˇcn´ımsyst´emu si program´atorm˚uˇzevytvoˇrit jednoduchou sd´ılenoupromˇennou, kterou budou vl´aknatestovat pˇripˇr´ıstupuke sd´ılen´emu objektu. To je ovˇsemsp´ıˇseprimitivn´ımetoda, kter´anen´ıvˇzdybez probl´em˚u,zvl´aˇstˇena v´ıceprocesorov´em syst´emu. Tak´enen´ıprobl´emnaprogramovat kter´ykoliv z algoritm˚u,kter´ebyly popisov´any v´yˇsev t´etokapitole.

5.6.1 J Windows

Ve Windows m´amek dispozici tyto synchronizaˇcn´ıprostˇredky: • maskov´an´ıpˇreruˇsen´ı,to je povoleno pouze na jednoprocesorov´emsyst´emu (resp. s jedn´ımproce- sorem, kter´ym´apouze jedno j´adro), • otoˇcn´yz´amek(spinlock), funguje i na v´ıceprocesorov´ych syst´emech, • mutexy a semafory (souhrnnˇenaz´yvan´edispatcher objects), • ud´alosti(podm´ınˇen´epromˇenn´e),atd.

 Urovnˇepˇreruˇsen´ıIRQL.´ Maskov´an´ıpˇreruˇsen´ıpomoc´ıIRQL m´av´yznampˇredevˇs´ımna jedno- procesorov´em(jednoj´adrov´em)syst´emu, ale obecnˇefunguje i na v´ıceprocesorov´ych syst´emech. Vyuˇz´ıv´a rozdˇelen´ıpˇreruˇsen´ı(IRQ) do tzv. ´urovn´ı(levels) – IRQL (Interrupt Request Level).

31 Vysok´a    30 Selh´an´ınap´ajen´ı   29 Meziprocesorov´epˇreruˇsen´ı Hardwarov´a 28 Hodiny pˇreruˇsen´ı  27 Profily a synchronizace   .  . Zaˇr´ızen´ı ) 2 DPC (Dereferenced Procedure Call), pl´anov´an´ı Softwarov´a Pro priority  1 APC pˇreruˇsen´ı vl´aken 0–31 0 N´ızk´a

Tabulka 5.1: UrovnˇeIRQL´

Zde pozor – mechanismus IRQL je nˇecotrochu jin´ehoneˇzIRQ a priority proces˚u,je na vyˇsˇs´ı ´urovni. V tabulce 5.1 jsou existuj´ıc´ı ´urovnˇeIRQL. Uˇzivatelsk´eprocesy (bˇeˇz´ıc´ıv user mode) s bˇeˇznou prioritou maj´ıIRQL 0 (to znamen´a,ˇzebˇeˇz´ına IRQL 0). Vl´aknaj´adraprov´adˇej´ıc´ıvol´an´ıAPC jsou na IRQL 1, vyˇsˇs´ıIRQL souvisej´ıpak s dalˇs´ımiˇcinnostmi v j´adˇreprov´adˇen´ymi v souvislosti s oˇsetˇren´ım vˇetˇsinouhardwarov´ych pˇreruˇsen´ı. Uroveˇn´ vysok´a“ je pouˇzitapro ukonˇcov´an´ı syst´emu vˇetˇsinouv d˚usledku v´aˇzn´echyby v j´adˇre ” (BSOD), proces ukonˇcov´an´ım´apˇredvˇs´ımostatn´ımpˇrednost. Uroveˇn30´ je sice dokumentov´ana,ale nepouˇz´ıv´ase, teoreticky by se do n´ımˇelopˇrech´azetpˇriv´ypadkuproudu. Uroveˇn29´ slouˇz´ıke komunikaci s jin´ymiprocesory. Uroveˇn28´ je naopak pouˇz´ıv´anabˇeˇznˇe– pro aktualizaci syst´emov´ych hodin a obecnˇe pro r˚uzn´eˇcinnostisouvisej´ıc´ıs pˇridˇelov´an´ımˇcasu.Profilov´an´ı(IRQL 27) je metoda vzorkov´an´ıstavu Kapitola 5 Synchronizace proces˚u 105 vykon´av´an´ıprocesu, je tedy moˇzn´esledovat ˇcinnostvybran´ehoprocesu. IRQL 3–26 jsou urˇcenapro priorizaci pˇreruˇsen´ıod zaˇr´ızen´ı. £ Pˇripouˇzit´ımechanismu IRQL lze maskovat vˇzdy vˇsechna IRQL aˇzdo urˇcit´e´urovnˇe.Napˇr´ıklad pokud jsou maskov´anaIRQL do 27, tak jsou ignorov´any poˇzadavky vˇsech bˇeˇzn´ych proces˚u(IRQL 0), vol´an´ıAPC (IRQL 1), atd., aˇzdo ´urovnˇe27, vyˇsˇs´ıˇc´ıslaIRQL jiˇznejsou maskov´ana.Z toho vypl´yvaj´ı pˇrednostizpracov´an´ı– APC m´apˇrednostpˇredbˇeˇzn´ymprocesem, hardwarov´apˇreruˇsen´ımaj´ıpˇrednost pˇredsoftwarov´ymi.Po vˇetˇsinu ˇcasubˇehu syst´emu je pouˇz´ıv´anaIRQL 0. Procesory (j´adra)si pˇriv´yskytu pˇreruˇsen´ıvyˇz´adaj´ıindex do v´yˇseuveden´etabulky. Tento index jim ˇr´ık´a,aˇzpo kterou ´uroveˇnjsou pˇreruˇsen´ımaskov´ana,tedy kter´ase maj´ıignorovat.

 Pozn´amka: Vˇsev´yˇseuveden´eplat´ıpro 32bitov´ysyst´em.Na 64bitov´emsyst´emu vypad´atabulka IRQL trochu jinak (paradoxnˇem´am´enˇe´urovn´ı– jen do 15). 

Mechanismus IRQL je ponˇekudnepruˇzn´y.V pln´es´ıleje pouˇziteln´yjen pro synchronizaci v r´amcij´adra.

 Spinlock (otoˇcn´yz´amek). Otoˇcn´ez´amkyse pouˇz´ıvaj´ı pouze v j´adˇre k synchronizaci ve v´ıceprocesorov´emsyst´emu a sv´ymzaloˇzen´ım jsou vlastnˇemutexy. Maj´ı dva stavy – volno a obsa- zeno (zamˇcenoa odemˇceno).Samotn´yotoˇcn´yz´amekje velmi jednoduch´astruktura a pouˇz´ıv´ase vˇzdy z´aroveˇns jinou sloˇzitˇejˇs´ıglob´aln´ıdatovou strukturou, jej´ıˇzkonzistentnost chr´an´ı,typicky frontou vol´an´ı procedur nebo datov´ymistrukturami ke konkr´etn´ımu zaˇr´ızen´ı. Napˇr´ıkladpokud ve v´ıceprocesorov´emsyst´emu procesor vyb´ır´az fronty poˇzadavk˚una vol´an´ıpro- cedur (DPC) poloˇzku,aby mohla b´ytspuˇstˇena,tato fronta mus´ıb´ytbˇehemvyb´ır´an´ıvl´aknauzamknuta spinlockem a odemknuta aˇzpo dokonˇcen´ıvyjmut´ız fronty, kdy je tato fronta v konzistentn´ımstavu. Nebo pokud ovladaˇczaˇr´ızen´ı,kter´ypr´avˇebˇeˇz´ına jednom procesoru, pracuje s datov´ymistrukturami sv´ehozaˇr´ızen´ı(napˇr´ıkladpos´ıl´adata na vstup zaˇr´ızen´ı),tyto struktury uzamkne, protoˇzeve stejnou chv´ıliby jin´aˇc´asttohoto ovladaˇcebˇeˇz´ıc´ına jin´emprocesoru tak´emohla s tˇemitostrukturami cht´ıt pracovat. Spinlocky v j´adˇreobvykle maj´ıpˇriˇrazenu ´uroveˇnIRQL 2 (DPC) nebo vyˇsˇs´ı.

 Mutexy a semafory. Semafor je ve Windows vn´ım´anjako mutex, kter´yumoˇzˇnujepˇredplacen´ı (resp. naopak mutex m˚uˇzeb´ytbr´anjako bin´arn´ısemafor). Jsou vˇzdyspojeny s konkr´etn´ımobjektem, k nˇemuˇzje synchronizov´anpˇr´ıstup.V uˇzivatelsk´emprostoru jsou typicky pouˇz´ıv´any pro synchronizaci ˇcinnostivl´aken v jednom procesu. Mutex se vytvoˇr´ıvol´an´ımfunkce CreateMutex(), mezi jej´ımiˇzatributy je tak´eˇretˇezec identifikuj´ıc´ı mutex (promˇenn´a).Tato funkce vr´at´ıhandle na vytvoˇren´ymutex (je to objekt). Dalˇs´ıvl´aknavolaj´ı tut´eˇzfunkci nebo funkci OpenMutex() se stejn´ymˇretˇezcem.Pˇrihl´aˇsen´ıse k mutexu se prov´ad´ıvol´an´ım funkce ReleaseMutex(), jej´ımˇzparametrem je handle mutexu. D´alem˚uˇzeb´ytmutex pouˇz´ıv´anpomoc´ı vol´an´ı funkc´ı WaitForSingleObject() nebo v pˇr´ıpadˇe v´ıceobjekt˚u WaitForMultipleObjects(), kter´ejako jeden z parametr˚uvyˇzaduj´ızad´an´ıhandlu (ma- nipul´atoru)objektu mutextu. Kdyˇzuˇzmutex nen´ı potˇreba, je uvolnˇenpodobnˇejako jin´eobjekty funkc´ı CloseHandle(). Se semafory se zach´az´ıpodobnˇe,jen se v n´azvech funkc´ım´ıstoˇretˇezce Mutex“ objevuje ˇretˇezec ” Semaphore“ a parametr˚uje v´ıce. ” Kapitola 5 Synchronizace proces˚u 106

 V reˇzimu j´adrase m´ıstopojmu mutex“ tak´epouˇz´ıv´apojem mutant“. Existuje nˇekolik druh˚u ” ” mutex˚u(napˇr´ıkladrychl´emutexy), tˇemto odliˇsnostemse vˇsakjiˇznebudeme vˇenovat.

 Kritick´asekce. Zˇrejmˇenejjednoduˇsˇs´ımmechanismem je samotn´a kritick´asekce. Nejde o objekt, tedy inicializaˇcn´ıfunkce nevrac´ıhandle. Kritickou sekci inicializujeme funkc´ı InitializeCriticalSection(&prom), tedy jako parametr pou- ˇzijemeobjekt, kter´ychceme synchronizovat. D´alese pouˇz´ıvaj´ıfunkce EnterCriticalSection(&prom) pro vstup do sekce a LeaveCriticalSection(&prom) pro opuˇstˇen´ısekce. Jak vid´ıme,kritick´esekce jsou urˇceny pro synchronizaci jednoduch´ych objekt˚uˇcipromˇenn´ych, napˇr´ıkladˇc´ıtaˇc˚u.

 Event. Lze vytvoˇritud´alostsouvisej´ıc´ıprakticky s ˇc´ımkoliv u r˚uzn´ych objekt˚u, na tuto ud´alostse pak napojuj´ıvl´akna(ˇcekaj´ına v´yskytud´alostise zadan´ymiparametry). Na rozd´ılod kritick´esekce je Event bl´ıˇzemutex˚uma semafor˚um,jedn´ase objekt a v obsluˇzn´ych funkc´ıch pouˇz´ıv´amehandle tohoto objektu. Ve Windows lze tak´eˇcekat na ukonˇcen´ıkonkr´etn´ıhoprocesu ˇcivl´akna,na I/O operaci (obvykle souvis´ıs pouˇz´ıv´an´ımsoubor˚u),na ˇcasovaˇc(Timer), atd.

5.6.2 J Linux

Sice to nebylo v´yˇserozeb´ır´ano(ani na cviˇcen´ıch), ale v Linuxu existuj´ıtak´eobjekty. K objekt˚umj´adra patˇr´ıkromˇejin´eho tak´esynchronizaˇcn´ıobjekty jako je napˇr´ıkladmutex.

 Mutex a futex. Z´akladn´ım synchronizaˇcn´ım objektem je mutex. Mutexy jako takov´ejsou objekty j´adra,ale mohou b´ytexportov´any do uˇzivatelsk´ehoprostoru, kde se jim ˇr´ık´a futex (fast mutex, rychl´ymutex). Futexy jsou reprezentov´any atomicky mˇenitelnoupromˇennou(tj. deklarovanou jako atomic), ´uˇcelemexistence t´etopromˇenn´eje urychlit zjiˇst’ov´an´ımoment´aln´ıhostavu mutexu (jinak by se zjiˇst’ov´an´ımuselo prov´adˇetsyst´emov´ymivol´an´ımi,kter´ajsou ˇcasovˇen´aroˇcn´a). Na futexech je zaloˇzenavˇetˇsinaostatn´ıch synchronizaˇcn´ıch mechanism˚u,atomick´apromˇenn´afu- texu je praktick´ea rychl´eˇreˇsen´ı.Implementaci najdeme v knihovnˇe libthread (protoˇzese v uˇzivatel- sk´emprostoru obvykle synchronizuj´ıvl´aknajednoho procesu). Mutexy lze pouˇz´ıtpro aktivn´ıi pasivn´ıˇcek´an´ı.

£ Postup Uk´aˇzemesi, jak vytvoˇritmutex (futex) pro synchronizaci vl´aken a jak ho pouˇz´ıvat. Pˇredpokl´adejme, ˇzeje naˇctena potˇrebn´aknihovna – libthread. pthread_mutex_t mujmutex; // datov´ytyp pro mutexy if (pthread_mutex_init (&mujmutex, NULL) != 0) { ... // oˇsetˇren´ıchyby pˇrivytv´aˇren´ımutexu } pthread_mutex_lock (&mujmutex); // zamknut´ımutexu ... // k´odv "kritick´esekci" pthread_mutex_unlock (&mujmutex); // odemknut´ımutexu ... pthread_mutex_destroy (&mujmutex); // mutex uˇznepotˇrebujeme

Pokud pˇrivol´an´ızamykac´ıfunkce je mutex zamknut´yjin´ymvl´aknem,m´ıstoopˇetovn´ehozamknut´ı proces pˇrech´az´ıdo pasivn´ıhoˇcek´an´ı,je suspendov´an. Kapitola 5 Synchronizace proces˚u 107

Pˇredpokl´adejme,ˇzechceme vyuˇz´ıvat aktivn´ıˇcek´an´ı.Pak m´ıstovol´an´ıuzamykac´ıfunkce budeme pouze testovat stav mutexu a podle n´avratov´ehodnoty pozn´ame, zda byl odemknut´y(pokud byl, tak ho tato testovac´ıfunkce rovnou uzamkne, tentokr´atpro n´as):

... // deklarace, inicializace if (pthread_mutex_trylock (&mujmutex) == 0) { // je odemknuto? ... // k´odv "kritick´esekci" pthread_mutex_unlock (&mujmutex); // odemknut´ımutexu } ... £

Mutexy jsou v Linuxu rozs´ahlekonfigurovateln´e.Existuje napˇr´ıkladverze pro zamyk´an´ıs ˇcasov´ym limitem (objekt je vˇzdyuzamknut na zadan´yˇcasov´yinterval), verze nerekurz´ıvn´ı, kter´adovoluje v´ıcen´asobn´euzamknut´ı mutexu, robustn´ı mutex schopn´yfungovat i po ukonˇcen´ı vl´akna,kter´eho uzamklo a pak uˇzneodemklo, atd.

 Priority. Jednou z vlastnost´ımutexu je tak´emoˇznostnastaven´ı stropu priorit. Priorita procesu (vl´akna),kter´yprovedl uzamknut´ı,m˚uˇzeb´ytdoˇcasnˇezv´yˇsenanad ´uroveˇnvˇsech ostatn´ıch proces˚u (vl´aken), kter´ese pˇrihl´asily k pouˇz´ıv´an´ıtohoto mutexu. Funkce pthread_mutex_getprioceiling() slouˇz´ı ke zjiˇstˇen´ıstropu priorit pro dan´ymutex, obdobn´afunkce (set m´ısto get) tento strop mˇen´ı.

 Rwlock. Tento mechanismus umoˇzˇnujerozliˇsitmezi uzamknut´ımpro ˇcten´ıa uzamknut´ımpro z´apis,je to tedy obdoba ˇreˇsen´ı´ulohy Cten´aˇri–p´ısaˇriˇ .

£ Postup Uk´aˇzemesi pouˇzit´ız´amkutypu rwlock. Vˇsimnˇetesi rozd´ıluv uzamyk´an´ıpro ˇcten´ıˇciz´apis.Uzamyk´an´ı pro ˇcten´ıse mus´ıprov´adˇet ve smyˇcce,protoˇze poˇcetmoˇzn´ych uzamknut´ıjednoho z´amkupro ˇcten´ıje omezen a vl´aknotedy mus´ıtak dlouho uzamykat, dokud nebude propuˇstˇeno“ d´aldo k´odu,kter´yje takto chr´anˇen,nebo ” suspendov´ano.U zamyk´an´ıpro z´apisto nen´ıpotˇreba,protoˇzetento typ uzamknut´ım˚uˇzeprov´estjen jedno vl´akno(ostatn´ıjsou hned suspendov´ana). pthread_rwlock_t zamek; if (pthread_rwlock_init (&zamek, NULL) != NULL) { ... // oˇsetˇren´ıchyby pˇrivytv´aˇren´ız´amku }

// zamyk´amepro ˇcten´ı(read -> rd): if (pthread_rwlock_rdlock (&zamek) == EAGAIN) {} ... // pouˇz´ıv´amepro ˇcten´ı pthread_rwlock_unlock (&zamek);

// zamyk´amepro z´apis(write -> wr): pthread_rwlock_wrlock (&zamek); ... // pouˇz´ıv´amepro z´apis pthread_rwlock_unlock (&zamek); ... pthread_rwlock_destroy (&zamek); £ Kapitola 5 Synchronizace proces˚u 108

 Spinlock. Je to synchronizaˇcn´ıobjekt pouˇz´ıvan´ysp´ıˇsev j´adˇre,a pˇredstavuje moˇznostaktivn´ıho ˇcek´an´ı. Nedoporuˇcuje se ho pouˇz´ıvat pˇr´ıliˇsˇcasto(mutexy jsou ve vˇetˇsinˇepˇr´ıpad˚ulepˇs´ı), je urˇcen sp´ıˇsepro zajiˇst’ov´an´ımeziprocesorov´ych operac´ı(ostatnˇejako ve Windows). Se spinlockem se zach´az´ı podobnˇejako s mutexem, jen se v n´azvech funkc´ım´ıstoˇretˇezce mutex“ vyskytuje ˇretˇezec spinlock“ ” ” a pˇriˇcek´an´ıje nutn´epouˇz´ıtsmyˇcku(napˇr´ıklads pr´azdn´ympˇr´ıkazem, i kdyˇzobecnˇetam m˚uˇzeb´yt jak´akoliv sada pˇr´ıkaz˚u).

Bari´era. Jde o jednoduch´ysynchronizaˇcn´ıobjekt, kter´yse moc nepouˇz´ıv´a.Slouˇz´ınikoliv k syn- chronizaci pˇr´ıstupu k objektu, ale sp´ıˇse k synchronizaci dosaˇzen´ıurˇcit´ehobodu v k´odu.Bari´eraje uzamˇcenaaˇzdo chv´ıle,kdy zadan´ehobodu ve sv´ych k´odech dos´ahnouvˇsechna synchronizovan´avl´akna. Typick´epouˇzit´ıje pˇripotˇrebˇedobˇehnut´ıvˇsech vl´aken k bodu, ze kter´ehomaj´ıpokraˇcovat spoleˇcnˇe, pˇr´ıpadnˇeve kter´emmaj´ıprov´estnˇekter´yspoleˇcn´yk´od(vzpomeˇntesi na synchronizaˇcn´ı´ulohu Soubˇeh ” proces˚u“).

 Podm´ınkov´apromˇenn´a(ud´alost). Podm´ınkov´epromˇenn´e(condition) jsou obdobou ud´alost´ı (event) ve Windows. Pouˇz´ıv´ame je tehdy, kdyˇzchceme probuzen´ıjednoho nebo v´ıcestanoven´ych vl´aken podm´ınitsplnˇen´ımurˇcit´epodm´ınky. Pˇr´ısluˇsn´apromˇenn´aje vl´aknemotestov´ana,a pokud m´ahodnotu nesplnˇeno“, testuj´ıc´ıvl´aknoje automaticky suspendov´ano. ” Protoˇzemus´ıb´ytzajiˇstˇenakonzistence t´etopodm´ınky, pˇrikaˇzd´empˇr´ıstupuk n´ıvˇcetnˇetestov´an´ı jej´ıhodnoty a tak´ezmˇeny pˇrisplnˇen´ıpodm´ınkyje nutn´epouˇz´ıvat mutex.

 Semafor. Semafory jsou zobecnˇen´emutexy. Ale zat´ımco vˇsechny v´yˇsezm´ınˇen´esynchronizaˇcn´ı mechanismy pˇriˇslydo Linuxu z normy POSIX, semafory poch´azej´ız System V, proto se zde setk´av´ame s jinou syntax´ı. Existuj´ıdva druhy semafor˚u– pojmenovan´ea anonymn´ı(nepojmenovan´e).

£ Postup Uk´aˇzemesi pr´acis pojmenovan´ymsemaforem. Semafor je tˇrebanejen deklarovat, ale i inicializovat, tak´emus´ımepoˇc´ıtats pˇr´ıpadnouchybou pˇriinicializaci.

// deklarujeme a inicalizujeme semafor, pˇredplacen´ına hodnotu 5: sem_t *semafor = sem_open ("/mujsemafor", O_CREAT, S_IWUSR | S_IRUSR, 5); if (semafor == SEM_FAILED) { ... // oˇsetˇren´ıchyby pˇriinicializaci semaforu } if (sem_wait (semafor) == 0) { ... // k´od,kter´ychceme prov´adˇets chr´anˇen´ymobjektem sem_post (semafor); // konec ˇcinnostiv chr´anˇen´eoblasti }

// uzavˇren´ıa odpojen´ısemaforu: sem_close (semafor); sem_unlink ("/mujsemafor"); £

Pojmenovan´esemafory maj´ısv´ejm´eno,kter´ejsme uvedli jako parametr pˇrivytv´aˇren´ıa odpojov´an´ı. Toto jm´enoje vlastnˇespeci´aln´ısoubor, kter´ybychom naˇsliv adres´aˇri /dev/shm. Kapitola 5 Synchronizace proces˚u 109

£ Postup Anonymn´ısemafory jsou vlastnˇen´astavba nad sd´ılenouoblast´ıpamˇeti.Lze takto ˇr´ıdittak´edynamicky alokovanou pamˇet’ (resp. pˇr´ıstupk n´ı),vl´aknaby mˇelaopˇetzn´atjak sd´ılenoupamˇet’, tak i semafor. V pˇr´ıkladuje semafor opˇetpˇredplacenna hodnotu 5.

// vytvoˇr´ımepamˇet’, kter´abude z´akladempro semafor: void *pamet = ...... // nˇejak´avhodn´afunkce pro alokaci // deklarujeme a inicalizujeme semafor: sem_t *semafor = pamet; if (sem_init (semafor, 1, 5) != 0) { ... // oˇsetˇren´ıchyby } if (sem_wait (semafor) == 0) { ... sem_post (semafor); } sem_destroy (semafor); // uzavˇren´ı semaforu ... // pˇr´ıpadn´euvolnˇen´ıalokovan´epamˇeti

Vid´ıme,ˇzepouˇzit´ıanonymn´ıhosemaforu je podobn´e,liˇs´ıse jen ve zp˚usobupouˇz´ıv´an´ı.Vˇsimnˇetesi zp˚usobupropojen´ısemaforu s pamˇet´ıpˇrideklaraci. £

 Vˇsechny v´yˇsepopsan´esynchronizaˇcn´ıobjekty lze sd´ılet nejen mezi vl´akny jednoho procesu, ale tak´emezi procesy. Aby to bylo moˇzn´e,je potˇrebapodle toho nastavit atributy dan´ehoobjektu (po- volit sd´ılen´ı)a umoˇznitjin´ym(vybran´ym)proces˚umpˇr´ıstupdo synchronizovan´epamˇeti.Popis tˇechto technik je vˇsaknad r´amectohoto textu. Vˇsechny programovac´ıtechniky, kter´ejsme si zde popsali, jsou urˇceny pro synchronizaci v uˇziva- telsk´emreˇzimu (kromˇespinlocku). V j´adˇrese tak´epouˇz´ıvaj´ımutexy, semafory a dalˇs´ısynchronizaˇcn´ı mechanismy, ale s vyuˇzit´ımjin´ych datov´ych struktur a funkc´ı. V j´adˇrenajdeme tak´edalˇs´ımechanismy, kter´ese v uˇzivatelsk´emreˇzimu nepouˇz´ıvaj´ı, napˇr´ıklad sekvenˇcn´ı z´amky, RCU (Read-Copy-Update, pro data, kter´ase ˇcasto ˇctou,ale m´alomˇen´ı),Completion (dokonˇcen´ı,ˇcek´an´ına dokonˇcen´ıˇcinnosti prov´adˇen´ejinou ´ulohou), atd. Kapitola 6 Uv´aznut´ıproces˚u(Deadlock)

K uv´aznut´ıproces˚udoch´az´ı,kdyˇznˇekter´yproces ˇcek´ana prostˇredek,kter´yje pˇridˇelenjin´ymˇcekaj´ıc´ım proces˚um. Uv´aznut´ı je samozˇrejmˇeneˇz´adouc´ı, proto je vhodn´ebud’ navrhnout syst´emtak, aby nemohlo nastat, nebo t´etosituaci pˇredch´azetpokusy o pˇredpov´ıd´an´ıuv´aznut´ı,anebo, pokud nastane, ji ˇreˇsitco nejˇsetrnˇejivzhledem k syst´emu i proces˚um.

6.1 Z´akladn´ıpojmy

 Pokud proces chce pouˇz´ıvat prostˇredek,mus´ıo tento prostˇredeknejdˇr´ıv poˇz´adat. Jeho ˇz´adost m˚uˇze b´ytvyplnˇena,a potom je procesu tento prostˇredek pˇridˇelen, proces ho m˚uˇze pouˇz´ıvat v r´amcijeho moˇznost´ıa bezpeˇcnostn´ıch opatˇren´ı,kdyˇzuˇzproces tento prostˇredeknepouˇz´ıv´a,mˇelby ho uvolnit. Pokud ˇz´adost procesu o prostˇredek z nˇejak´ehod˚uvodu nem˚uˇzeb´ytvyplnˇena,proces ˇcek´a na prostˇredek.  Prostˇredkyrozdˇel´ımedo tˇr´ıd, v jedn´etˇr´ıdˇemohou b´ytpouze prostˇredkynavz´ajemzamˇeniteln´e, tedy proces bude vˇzdyˇz´adatprostˇredek z urˇcit´etˇr´ıdya m˚uˇzemu b´ytjedno, kter´ykonkr´etn´ıprostˇredek z t´etotˇr´ıdydostane. Konkr´etn´ıprostˇredkyz urˇcit´etˇr´ıdybudeme naz´yvat instance. Napˇr´ıkladtˇr´ıda operaˇcn´ıpamˇet’ m´ajako instance jednotliv´ebloky (str´anky, segmenty) pamˇeti, tˇr´ıda tisk´arny obsahuje r˚uzn´etisk´arny, kter´ejsou v rozumn´e“ vzd´alenostiod dan´ehouˇzivatele a tedy ” zamˇeniteln´e,tˇr´ıdˇe ˇcasCPU pˇr´ısluˇsej´ıjako instance ˇcasov´ecykly procesoru, kter´emohou b´ytproces˚um pˇridˇelov´any, . . .

 Definice Mnoˇzinaproces˚uje ve stavu uv´aznut´ı, pokud kaˇzd´yproces v t´etomnoˇzinˇeˇcek´ana ud´alost,kterou m˚uˇzevyvolat pouze nˇekter´yz proces˚uv t´eˇzemnoˇzinˇe. 

Jedn´ase zde pˇredevˇs´ım o ˇcek´an´ı na ud´alostuvolnˇen´ı prostˇredkupouˇz´ıvan´ehonˇekter´ymprocesem, pˇr´ıpadnˇenˇekter´etypy komunikace (ˇcek´an´ına potvrzen´ızpr´avy). Probl´emuv´aznut´ıse ˇreˇs´ıbud’ nˇekteroumetodou pˇredch´azen´ıuv´aznut´ınebo pˇredpov´ıd´an´ıuv´aznut´ı, nebo se neˇreˇs´ıv˚ubec a nanejv´yˇsjsou implementov´any postupy zjiˇstˇen´ıuv´aznut´ı.

110 Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 111

6.2 Popis stavu pˇridˇelen´ıprostˇredk˚u

 Stav pˇridˇelen´ı prostˇredk˚ulze popsat grafem pˇridˇelen´ıprostˇredk˚u. Je to orientovan´ygraf, jehoˇz vrcholy jsou dvoj´ıhodruhu: • procesy – kaˇzd´yproces syst´emu m´azde sv˚ujvrchol, tyto vrcholy maj´ıtvar kruhov´y, • prostˇredky – kaˇzd´atˇr´ıdaprostˇredk˚um´azde sv˚ujvrchol tvaru obd´eln´ıku,v nˇemje pro kaˇzdou instanci tˇr´ıdy(tj. konkr´etn´ıprostˇredek)jedna teˇcka. Orientovan´ehrany jsou tak´edvoj´ıhodruhu: • hrana ˇz´adostio prostˇredek vede od procesu, kter´yˇz´ad´ao prostˇredek,k vrcholu tˇr´ıdyprostˇredku, o kter´yˇz´ad´a, • hrana pˇridˇelen´ıprostˇredku vede od instance tˇr´ıdyprostˇredku(tedy od teˇckyve vrcholu tˇr´ıdy) k procesu, kter´emu byl prostˇredekpˇridˇelen.

M Pˇr´ıklad

V syst´emu jsou procesy P1,P2 a P3 a prostˇredky R1 se dvˇemainstancemi, R2 s jednou instanc´ıa R3 se

ˇctyˇrmiinstancemi. Proces P1 m´apˇridˇelenu jednu instanci prostˇredku R1 a ˇz´ad´ao prostˇredek R2, proces

P2 m´apˇridˇeleny dvˇeinstance prostˇredku R3 a ˇz´ad´ao prostˇredek R1, proces P3 m´apˇridˇelenu jednu instanci prostˇredku R1 a jednu instanci prostˇredku R2 a moment´alnˇeneˇz´ad´ao ˇz´adn´edalˇs´ıprostˇredky.

P1 P2 P3 3 So  6 @ SoS S   @   SS @ S S @   S S @  S S @  S S  @ S S  @ ©  @R S S  S S R1 R2 R3 r r r r r r r Obr´azek6.1: Graf pˇridˇelen´ıprostˇredk˚u

Co z grafu na obr´azku 6.1 m˚uˇzemevyˇc´ıst?Pokud v grafu nen´ıˇz´adn´akruˇznice,ˇz´adn´yproces nen´ı blokov´anˇcek´an´ımna prostˇredek.Jestliˇzeje v grafu nˇejak´akruˇznice,m˚uˇze,ale nemus´ıdoj´ıtk uv´aznut´ı. K uv´aznut´ıv pˇr´ıpadˇekruˇznicedojde, pokud kaˇzd´atˇr´ıdaprostˇredk˚una kruˇznicim´apr´avˇejednu instanci.

V grafu nen´ıˇz´adn´akruˇznice,proto ˇz´adn´yproces neuv´azl.Kdyby prostˇredektˇr´ıdy R2 byl pˇridˇelen procesu P2 m´ıstoprocesu P3, v grafu by byla kruˇznice P1 R2 P2 R1 P1, ale nedoˇsloby → → → → k uv´aznut´ı,protoˇzeaˇzproces P3 nebude potˇrebovat pˇridˇelenouinstanci prostˇredku R1, uvoln´ıji a tato instance m˚uˇzeb´ytpˇridˇelenaprocesu P2, kter´yo tento prostˇredekˇz´ad´a,a t´ımje kruˇzniceodstranˇena (hrana ˇz´adostio prostˇredekse zmˇen´ına hranu pˇridˇelen´ıprostˇredku,kter´am´aopaˇcnouorientaci).

Kdyby ale pˇrisituaci v grafu na obr´azku 6.1 proces P3 poˇz´adalo dalˇs´ıprostˇredek R1, vznikl´a kruˇzniceby znamenala uv´aznut´ı,protoˇzevˇsechny instance prostˇredk˚upatˇr´ıc´ıch do kruˇznicedrˇz´ıpr´avˇe uv´azl´eprocesy P1 a P3, ˇz´adn´yz nich nem˚uˇzeb´ytuvolnˇen. M Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 112

6.3 Podm´ınkyvzniku uv´aznut´ı

£ K uv´aznut´ıdojde, pokud jsou splnˇeny vˇsechny n´asleduj´ıc´ıpodm´ınky: 1. Existence prostˇredk˚u,kter´enelze sd´ılet(prostˇredk˚u,kter´ev jednom okamˇzikum˚uˇzepouˇz´ıvat nejv´yˇsejeden proces). 2. Existuje alespoˇnjeden proces, kter´ym´apˇridˇelennˇejak´yprostˇredeka ˇcek´ana pˇridˇelen´ıjin´eho prostˇredku,kter´yje pˇridˇelenjin´emu procesu. 3. Pˇrispr´avˇeprostˇredk˚uje pouˇz´ıv´anonepreemptivn´ıpl´anov´an´ı,tedy k uvolnˇen´ıpˇridˇelen´ych pro- stˇredk˚udoch´az´ıpouze ze strany proces˚u,prostˇredkynejsou n´asilnˇe“ odeb´ır´any. ” 4. Dojde ke kruhov´emuˇcek´an´ı – existuje takov´aposloupnost proces˚u P0,P1,...,Pn,Pn+1, ˇzekaˇzd´y

proces Pi ˇcek´ana prostˇredekpˇridˇelen´yprocesu Pi+1 v t´etoposloupnosti, 0 i n), Pn+1 = P0 ≤ ≤ (jin´ymislovy: kaˇzd´yproces ˇcek´a,aˇzten, kter´yje v posloupnosti za n´ım,uvoln´ıurˇcit´yprostˇredek, posledn´ıje totoˇzn´ys prvn´ım).

 Pozn´amka: S nebezpeˇc´ımuv´aznut´ıse d´avypoˇr´adattˇremir˚uzn´ymizp˚usoby: • prevence uv´aznut´ı – uˇzpˇrin´avrhu syst´emu je snaha omezit riziko uv´aznut´ı,za bˇehu syst´emu se uˇznic moc neˇreˇs´ı;metoda spoˇc´ıv´av potlaˇcen´ıvzniku nˇekter´ez v´yˇsejmenovan´ych podm´ınek vzniku uv´aznut´ı, • pˇredpov´ıd´an´ıuv´aznut´ı – ˇreˇs´ımevˇzdy, kdyˇznˇekter´yproces ˇz´ad´ao dalˇs´ıprostˇredek,provedeme simulaci a podle jej´ıhov´ysledku bud’ prostˇredekpˇridˇel´ıme(kdyˇzje nulov´eriziko uv´aznut´ı)nebo nech´ameproces ˇcekat, • detekce uv´aznut´ı – nepokouˇs´ımese uv´aznut´ızabr´anit,ale pravidelnˇenebo podle potˇreby testu- jeme, zda uˇzk uv´aznut´ınedoˇslo;kdyˇzano, pokus´ımese uv´aznut´eprocesy uvolnit. Prvn´ımoˇznost je do urˇcit´epouˇziteln´ana nˇekter´etypy prostˇredk˚u,druh´aje pˇr´ıliˇsrestriktivn´ı(vyˇzaduje po procesech, aby pˇrisv´emspuˇstˇen´ıdeklarovaly veˇsker´esv´emoˇzn´ebudouc´ıpoˇzadavky na procesy), tˇret´ıje vcelku dobˇreimplementovateln´aa pouˇz´ıvan´a. 

6.4 Prevence uv´aznut´ı

Uˇcelemje´ zajistit, aby nemohla nastat nˇekter´az podm´ınekvzniku uv´aznut´ı(staˇc´ı,kdyˇznem˚uˇzena- stat jedna z nich, protoˇzek uv´aznut´ıdojde pouze tehdy, kdyˇznastanou vˇsechny z´aroveˇn).Postupnˇe probereme jednotliv´epodm´ınky.

J Prostˇredky, kter´enelze sd´ılet: C´asteˇcn´ymˇreˇsen´ımjeˇ vytvoˇren´ı rozhran´ık prostˇredku, kter´e pˇrevezme ´ukoly proces˚u,kter´eby jinak musely o prostˇredekˇz´adat.Toto ˇreˇsen´ım˚uˇzemepouˇz´ıtnapˇr´ıklad u tisk´arny, kdy vytvoˇr´ımespeci´aln´ıobsluˇzn´yproces (abstraktn´ıpoˇc´ıtaˇc),kter´ybude obsluhovat tis- kovou frontu tisk´arny – pˇrijmeod procesu data, kter´amaj´ıb´ytvytisknuta, zaˇrad´ıdo fronty a pak postupnˇetisk´arnˇepos´ıl´adata v d´avk´ach se stanovenou strukturou a d´elkou. Obecnˇevˇsaktento probl´emnelze ˇreˇsit,u nˇekter´ych typ˚uprostˇredk˚uneexistuje moˇznosttakov´e rozhran´ıvytvoˇrit. Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 113

J Proces m´apˇridˇelenprostˇredeka ˇcek´ana jin´y: Tento probl´emlze ˇreˇsitdvˇemazp˚usoby, kaˇzd´yz nich je pouˇziteln´ypro jin´ytyp prostˇredk˚u: 1. Pˇredvlastn´ımspuˇstˇen´ımprocesu mu budou pˇridˇeleny vˇsechny prostˇredky, kter´eby mohl potˇre- bovat (pouˇzijese pro prostˇredky, kter´elze sd´ılet,napˇr´ıkladpamˇet’). 2. Umoˇzn´ımeprocesu ˇz´adato dalˇs´ıprostˇredkyaˇzkdyˇzuvoln´ıvˇsechny prostˇredky, kter´emˇelpˇridˇe- len´e(mus´ıuvolnit vˇsechny prostˇredky, kter´ebyly pˇridˇeleny postupem z tohoto bodu). Pro kaˇzdoutˇr´ıduprostˇredk˚use bude pouˇz´ıvat jeden z tˇechto dvou zp˚usob˚uˇreˇsen´ı. Hlavn´ınev´yhodou t´etometody je, ˇzeprostˇredkypˇridˇelen´epodle prvn´ıhobodu mohou b´ytzbyteˇcnˇe m´alovyuˇz´ıv´any (napˇr´ıkladˇcasprocesoru u procesu, kter´yje interaktivn´ı,tedy ˇcastoˇcek´ana reakci uˇzivatele), je tak´evelk´apravdˇepodobnost st´arnut´ınˇekter´ych proces˚u(proces ˇcek´ana prostˇredek,kter´y je neust´alepˇridˇelov´anjin´ymproces˚um,kter´enapˇr´ıkladmaj´ıvyˇsˇs´ıprioritu). J Nepreemptivn´ıpl´anov´an´ı: Reˇsen´ımjeˇ vyuˇzit´ınˇekter´ych prvk˚upreemptivn´ıhopl´anov´an´ı(tj. pouˇzijememoˇznostodebrat prostˇredek procesu, tˇrebaˇzeproces by jeˇstˇechtˇelprostˇredekpouˇz´ıvat).

M Pˇr´ıklad Symbolicky m˚uˇzemepostup zapsat takto (oznaˇc´ıme R, S prostˇredkya P, Q procesy, proces P ˇz´ad´a o prostˇredek R): if (voln´y(R)) { pˇridˇel(P, R) } else if (exists Q: (pouˇz´ıv´a(Q,R) && exists S: (ˇcek´a(Q,S))) { uvolni (R), pˇridˇel(P, R) }

Slovnˇe:pokud prostˇredek,o kter´yproces ˇz´ad´a,je voln´y,pˇridˇel´ımemu ho, ale pokud ne, zjist´ıme,kter´y proces tento prostˇredekm´apˇridˇelena pˇritomˇcek´ana pˇridelˇen´ıjin´ehoprostˇredku.Pokud takov´yproces (Q) najdeme, odebereme mu prostˇredek(pˇredpokl´adejme,ˇzeo tento prostˇredekm˚uˇzeznovu poˇz´adat, aˇzho bude potˇrebovat), a pˇridˇel´ımeho ˇz´adaj´ıc´ımu procesu P. Kdyˇznenajdeme ˇz´adn´yproces Q, kter´emu bychom mohli zabavit“ ˇz´adan´yprostˇredek,proces P bude muset poˇckat. ” M

£ Tato metoda je opˇetvhodn´apouze pro nˇekter´etˇr´ıdyprostˇredk˚u,a to pro takov´e,kter´elze odebrat bez nebezpeˇc´ıpoˇskozen´ıdosavadn´ıˇcinnostiprocesu – bud’ pˇreruˇsen´ıjejich pouˇz´ıv´an´ınem´avliv na ˇcinnostprocesu a nav´az´an´ıˇcinnostipo opˇetovn´empˇridˇelen´ınen´ıprobl´em, nebo lze stav pouˇz´ıv´an´ı prostˇredkusnadno zaznamenat a po znovupˇridˇelen´ıpomoc´ıtohoto z´aznamu nav´azat(napˇr´ıkladˇcas procesoru nebo pamˇet’ pˇripouˇzit´ıstr´ankov´an´ı). J Kruhov´eˇcek´an´ı: Vytvoˇr´ımeposloupnost tˇr´ıdprostˇredk˚us pˇresnˇestanoven´ympoˇrad´ım,kaˇzd´y proces m˚uˇzeˇz´adatpouze o takov´eprostˇredky, kter´ejsou v posloupnosti aˇzza tˇemi,kter´ejiˇzm´a pˇridˇelen´e. Pokud chce proces poˇz´adato prostˇredektˇr´ıdy, kter´aje v posloupnosti pˇrednˇekter´ymprostˇredkem, kter´yjiˇzm´apˇridˇelen,mus´ıuvolnit vˇsechny prostˇredky, kter´eby ten ˇz´adan´ymohly v posloupnosti n´asledovat. Z´adostioˇ prostˇredkyz t´eˇzetˇr´ıdy mus´ıb´ytsdruˇzeny, tedy jestliˇzeproces ˇspatnˇeodhadl“ mnoˇzstv´ı ” prostˇredk˚uz jedn´etˇr´ıdy, kter´ebude potˇrebovat k ˇr´adn´emu dokonˇcen´ısv´eˇcinnosti,pˇreddalˇs´ıˇz´adost´ı o dostateˇcn´emnoˇzstv´ıprostˇredk˚ut´etotˇr´ıdymus´ıto, co jiˇzmˇelpˇridˇeleno,uvolnit. Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 114

Napˇr´ıkladm´ameposloupnost R = (R1,R2,...,Rn) tˇr´ıdprostˇredk˚u.Proces m´apˇridˇeleny prostˇred- ky tˇr´ıd R1,R3 a R8. Bez probl´em˚um˚uˇzepoˇz´adato prostˇredkyz tˇr´ıd R9,R10,..., ale pokud bude cht´ıtpoˇz´adato prostˇredekz tˇr´ıdy R2, mus´ıuvolnit pˇridˇelen´eprostˇredkyz tˇr´ıd R3 a R8. Jestliˇzechce poˇz´adato dalˇs´ıprostˇredkytˇr´ıdy R3, mus´ıuvolnit nejen prostˇredkytˇr´ıdy R8, ale i tˇr´ıdy R3. Efektivnost t´etometody je do znaˇcn´em´ıryd´anapoˇrad´ımtˇr´ıdprostˇredk˚uv posloupnosti. Pokud je poˇrad´ıˇspatnˇenavrˇzeno,procesy t´emˇeˇrneust´aleˇcekaj´ıa m˚uˇze doch´azetk jejich st´arnut´ı.Poˇrad´ıje vhodn´enavrhovat pˇredevˇs´ıms ohledem na obvykl´epoˇrad´ıvyuˇz´ıv´an´ızdroj˚u, napˇr´ıkladvnˇejˇs´ıpamˇeti (obecnˇevstupn´ıperiferie) by mˇelyb´ytv posloupnosti pˇredobvykl´ymiv´ystupn´ımiperiferiemi vˇcetnˇe tisk´arny.

6.5 Pˇredpov´ıd´an´ıuv´aznut´ı

Pˇripouˇzit´ıtohoto postupu nejsou procesy nuceny (obvykle) pˇredˇcasnˇeuvolˇnovat pˇridˇelen´eprostˇred- ky, ale principem je spr´avnˇeodhadnout, kdy by pˇridˇelen´ıdalˇs´ıch prostˇredk˚umohlo zp˚usobituv´aznut´ı a takov´epˇridˇelen´ıpozdrˇzet.

 Definice Stav syst´emu je bezpeˇcn´y, jestliˇzeexistuje alespoˇnjedno poˇrad´ıpˇridˇelov´an´ıprostˇredk˚u,pˇrikter´em vˇsechny procesy mohou ´uspˇeˇsnˇedokonˇcitsvou ˇcinnostbez uv´aznut´ı.Stav, kter´ynen´ıbezpeˇcn´y,jeˇstˇe nemus´ıznamenat uv´aznut´ı,ale m˚uˇzek nˇemu v´est. 

£ Uˇcelempˇredpov´ıd´an´ıuv´aznut´ıje´ udrˇzetsyst´emv bezpeˇcn´emstavu. Jsou dvˇemoˇzn´aˇreˇsen´ı: • pouˇzit´ıgrafu n´arok˚ua pˇridˇelen´ıprostˇredk˚u, • Bank´eˇr˚uvalgoritmus. Prvn´ıˇreˇsen´ıje pouˇziteln´epro syst´em,kde kaˇzd´atˇr´ıdaprostˇredk˚um´apr´avˇejednu instanci (vyuˇz´ıv´ame graf pˇridˇelen´ıprostˇredk˚u),druh´eje o nˇecon´aroˇcnˇejˇs´ı,ale je pouˇziteln´ei pro syst´em, kde tˇr´ıdymohou m´ıtv´ıceneˇzjednu instanci. V obou pˇr´ıpadech jde o to, ˇzev reakci na ˇz´adosto prostˇredekv r´amci simulace zjiˇst’ujeme, jestli pˇridˇelen´ımprostˇredkunepˇrestaneb´ytstav syst´emu bezpeˇcn´ym(tj. zda riziko uv´aznut´ıpˇrestaneb´ytnulov´e). Procesy musej´ıpˇredem(pˇri sv´emspuˇstˇen´ı)deklarovat, kter´eprostˇredky(a v jak´emmnoˇzstv´ı) mohou za sv´ehobˇehu potˇrebovat – n´aroky. C´astzˇ nich si mohou vyˇz´adathned, s ˇc´ast´ıpoˇc´ıtaj´ı do bu- ” doucna“. Je to jak´esimaximum, kter´eza sv´ehobˇehu nesmˇej´ıpˇrekroˇcit(napˇr´ıkladmaxim´aln´ımnoˇzstv´ı pamˇeti,kter´eza sv´ehobˇehu budou potˇrebovat).

6.5.1 Graf n´arok˚ua pˇridˇelen´ıprostˇredk˚u

£ Vytvoˇr´ıme graf n´arok˚ua pˇridˇelen´ıprostˇredk˚u ´upravou grafu pˇridˇelen´ıprostˇredk˚u.Pˇrid´amenov´y typ hrany, budeme m´ıttedy celkem tˇritypy hran: • hrana ˇz´adostio prostˇredek vede od procesu, kter´yˇz´ad´ao prostˇredek,k vrcholu tˇr´ıdyprostˇredku, o kter´yˇz´ad´a, • hrana pˇridˇelen´ıprostˇredku vede od prostˇredkuk procesu, kter´emu byl prostˇredekpˇridˇelen, • hrana n´aroku vede od procesu k prostˇredku,znamen´a,ˇzeproces m˚uˇzepoˇz´adato tento prostˇredek (v´yhled do budoucna“). ” Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 115

Abychom hrany n´arokuodliˇsiliod hran ˇz´adosti,budeme je znaˇcitteˇckovanˇe. Hrany n´arokupro urˇcit´yproces vznikaj´ıpˇrispuˇstˇen´ıtohoto procesu, pokud proces poˇz´ad´ao pro- stˇredek,ke kter´emu od nˇehovede hrana n´aroku(nem˚uˇzepoˇz´adato prostˇredek,ke kter´emu hrana n´arokunevede), tato hrana se zmˇen´ına hranu ˇz´adostio prostˇredek,v pˇr´ıpadˇepˇridˇelen´ıprostˇredkuse mˇen´ına hranu pˇridˇelen´ıprostˇredku(mˇen´ıse orientace hrany) a po uvolnˇen´ıse opˇetmˇen´ına hranu n´aroku(znovu zmˇenaorientace).

P1 P2

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

R1 R2 R3

Obr´azek6.2: Graf n´arok˚ua pˇridˇelen´ıprostˇredk˚u

Hrana ˇz´adosti o prostˇredek se m˚uˇzezmˇenitna hranu pˇridˇelen´ı prostˇredku(a tedy prostˇredek je pˇridˇelen)pouze tehdy, kdyˇzse touto zmˇenounevytvoˇr´ıkruˇznice– zmˇenatotiˇzznamen´azmˇenu orientace hrany. Algoritmus tedy pouze simuluje“ zmˇenu orientace hrany a spust´ıpostup detekce ” kruˇznicev grafu. Na obr´azku 6.2 je zn´azornˇenstav syst´emu se dvˇemaprocesy a tˇremir˚uzn´ymiprostˇredky. Prvn´ı proces nem´apˇridˇeleny ˇz´adn´eprostˇredky, ale ˇz´ad´ao prostˇredek R2, m´an´arokpoˇz´adato prostˇredek

R1. Druh´yproces m´apˇridˇeleny prostˇredky R2 a R3, m´an´arokpoˇz´adato prostˇredek R1. V grafu nen´ı ˇz´adn´akruˇznice.

£ Kdyˇzproces P1 poˇz´ad´ao prostˇredek R1 a ten je tomuto procesu pˇridˇelen,vznikne v grafu kruˇznice

P1 R2 P2 R1 P1, coˇzznamen´anebezpeˇcn´ystav. Kdyby v tomto nebezpeˇcn´emstavu poˇz´adal → → → → proces P2 o prostˇredek R1, doˇsloby k uv´aznut´ı,proto je nutn´enedopustit ani vznik kruˇznice.

6.5.2 Bank´eˇr˚uvalgoritmus

Kaˇzd´yproces mus´ı pˇredem ozn´amit,kolik kter´ych prostˇredk˚umaxim´alnˇebude pro svou ˇcinnost potˇrebovat. Kdykoliv pak takov´yproces ˇz´ad´ao prostˇredky, syst´emzjist´ı,kolik by jeˇstˇeostatn´ıpro- cesy mohly potˇrebovat, a pokud dospˇejek n´azoru,ˇzepˇridˇelen´ıˇz´adan´ych prostˇredk˚unepovede do nebezpeˇcn´ehostavu, pˇridˇel´ıje. £ Pˇredpokl´adejme,ˇzev syst´emu pracuje n proces˚ua je k dispozici m r˚uzn´ych tˇr´ıd prostˇredk˚u. Potˇrebujemen´asleduj´ıc´ıdatov´estruktury: VOLNE – vektor o d´elce m, je v nˇempro kaˇzd´yprostˇredekuloˇzenpoˇcetnepˇridˇelen´ych instanc´ı, PRIDELENO – matice s n ˇr´adkya m sloupci urˇcuj´ıc´ı,kolik prostˇredk˚um´akter´yproces pˇridˇeleno,budeme ch´apatjako vektor vektor˚uo d´elce m, kde kaˇzd´yvektor pˇr´ısluˇs´ıjednomu procesu (tedy prostˇredky

pˇridˇelen´eprocesu Pi jsou ve vektoru PRIDELENO[i]), POTREBUJE – matice s n ˇr´adkya m sloupci urˇcuj´ıc´ı,kolik prostˇredk˚ubude kter´yproces jeˇstˇepotˇrebovat k dokonˇcen´ısv´eˇcinnosti,tedy po seˇcten´ıdvou matic PRIDELENO + POTREBUJE dostaneme matici Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 116

obsahuj´ıc´ı ´udaj o tom, kolik kter´ych prostˇredk˚uurˇcit´yproces maxim´alnˇepotˇrebujepro svou

ˇcinnostod spuˇstˇen´ıaˇzpo ukonˇcen´ıprocesu (pro proces Pi je to vektor POTREBUJE[i]), POZADAVKY – matice s n ˇr´adkya m sloupci poˇzadavk˚ujednotliv´ych proces˚uo prostˇredky, pokud jsou poˇzadavky procesu vyplnˇeny, data se pˇriˇctouk pˇr´ısluˇsn´emu ˇr´adkumatice PRIDELENO. Po spuˇstˇen´ıprocesu je pˇr´ısluˇsn´yˇr´adekmatice POTREBUJE naplnˇen´udaji o tom, kolik kter´ehoprostˇredku maxim´alnˇebude moci proces poˇzadovat. Pˇrikaˇzd´empˇridˇelen´ıprostˇredkuje pˇridˇelen´ypoˇcet instanc´ı pˇresunut z matice POTREBUJE do matice PRIDELENO, tedy proces postupnˇespotˇrebov´av´apˇridˇelen´epro- stˇredky.

 Pozn´amka:

D´alebudeme pro zjednoduˇsen´ız´apisupouˇz´ıvat relaci pro vektory definovanou takto: necht’ V1 a V2 ≤ jsou vektory o d´elce m. V1 V2 pr´avˇetehdy kdyˇz i(V1[i] V2[i]), 1 i m. Slovy: prvn´ıvektor ≤ ∀ ≤ ≤ ≤ je menˇs´ınebo roven druh´emu, jestliˇzevˇsechny jeho prvky jsou menˇs´ınebo rovny prvk˚um se stejn´ym indexem druh´ehovektoru. D´alese v postupu objev´ıoperace sˇc´ıt´an´ıa odeˇc´ıt´an´ıvektor˚ua matic. 

£ Kdyˇzproces Pi ˇz´ad´ao pˇridˇelen´ıprostˇredku,provede se tento algoritmus: 1. Poˇzadavek procesu je pˇrid´ando i-t´ehoˇr´adkumatice POZADAVKY (je pˇrid´ando vektoru POZADAVKY[i]). 2. Jestliˇze POZADAVKY[i] POTREBUJE[i], pokraˇcujbodem3, jinak odm´ıtnipˇridˇelitprostˇredek(proces ≤ sv´ympoˇzadavkem pˇrekroˇcilmaximum prostˇredk˚u,kter´eohl´asilpˇrisv´emspuˇstˇen´ı).

3. Jestliˇze POZADAVKY[i] VOLNE, pokraˇcujbodem4, jinak dej procesu Pi na vˇedom´ı,ˇzebude ˇcekat ≤ (proces ˇz´ad´ao v´ıc,neˇzkolik je moment´alnˇek dispozici, proces mus´ıpoˇckat, aˇznˇekter´ydalˇs´ı proces uvoln´ıprostˇredky). 4. Simuluj pˇridˇelen´ıprostˇredk˚u:

VOLNE=VOLNE POZADAVKY[i] − PRIDELENO[i] =PRIDELENO[i]+POZADAVKY[i] POTREBUJE[i] =POTREBUJE[i] POZADAVKY[i] − 5. Vytvoˇrpomocn´edatov´estruktury, kter´ebudou slouˇzitk simulaci dalˇs´ıhopr˚ubˇehu stavu syst´emu v pˇr´ıpadˇe,ˇze prostˇredkybudou pˇridˇeleny: SIMVOLNE – vektor, ve kter´emjsou pˇrisimulaci stejn´adata, jako v pˇr´ıpadˇeskuteˇcn´ehopr˚ubˇehu ve vektoru VOLNE, tento vektor inicializujeme hodnotami vektoru VOLNE, tedy SIMVOLNE=VOLNE, KONEC – vektor o n prvc´ıch, kter´ejsou inicializov´any na false, pokud v pr˚ubˇehu simulace proces

Pj bezpeˇcnˇeukonˇc´ısvou ˇcinnost, j-t´yprvek tohoto vektoru se nastav´ına true. 6. Najdi index j, pro kter´yplat´ıobˇen´asleduj´ıc´ıpodm´ınky: (a) KONEC[j] = false ...... jeˇstˇepracuje (neskonˇcil) (b) POTREBUJE[j] SIMVOLNE ...... nebude potˇrebovat v´ıcneˇzje k dispozici ≤ Jestli takov´yindex neexistuje, pokraˇcujbodem8, jinak pokraˇcujbodem7. 7. Proved’ n´asleduj´ıc´ıoperace: SIMVOLNE=SIMVOLNE+PRIDELENO[j]...... uvoln´ıme“ prostˇredkypˇridˇelen´eprocesu P ” j KONEC[j] = true ...... ukonˇc´ıme“ proces P ” j Pokraˇcujbodem6. Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 117

8. Jestliˇzevektor KONEC obsahuje pouze hodnoty true, potom pˇrisimulaci nedoˇslok zablokov´an´ı a vˇsechny procesy dok´azalybez probl´em˚uukonˇcitsvou ˇcinnost,syst´em je v bezpeˇcn´emstavu, v opaˇcn´empˇr´ıpadˇe(alespoˇnjedna hodnota false) by se syst´empo pˇridˇelen´ı poˇzadovan´ych

prostˇredk˚uprocesu Pi dostal do nebezpeˇcn´ehostavu.

Jestliˇzepo simulaci stav bezpeˇcn´y,syst´empˇridˇel´ıpoˇzadovan´eprostˇredkyprocesu Pi (vlastnˇeto uˇz udˇelalv bodu4), jinak proces mus´ıˇcekat, neˇzbude zase dostatek prostˇredk˚ua je nutn´evr´atitzmˇeny z bodu4 (vektor POZADAVKY[i] bude nad´ale obsahovat nevyplnˇen´epoˇzadavky procesu).

6.6 Detekce uv´aznut´ı

Opˇetrozliˇs´ımedva pˇr´ıpady:prvn´ımetoda (s pouˇzit´ımgrafu) je urˇcenapro syst´em,kde v kaˇzd´etˇr´ıdˇe prostˇredk˚uje pr´avˇejeden prostˇredek,druh´ametoda (modifikace Bank´eˇrova algoritmu) pro syst´em, kde je ve tˇr´ıd´ach prostˇredk˚upovoleno i v´ıceinstanc´ı.

6.6.1 Uprava´ grafu pˇridˇelen´ıprostˇredk˚u

£ Vytvoˇr´ıme graf ˇcek´an´ı, ve kter´embude zachyceno vz´ajemn´eˇcek´an´ımezi procesy (jeden proces ˇcek´a,aˇzjin´yuvoln´ınˇejak´yprostˇredek).Protoˇzen´asmoment´alnˇezaj´ım´ajen to, kter´yproces uv´azl,ne- potˇrebujemeinformaci o tom, na kter´eprostˇredkykter´eprocesy ˇcekaj´ı(snadnˇejise detekuje kruˇznice).

P1 P2

6@ 6 @  @ - @ P1 P2 @ @@R   R1 R2

Obr´azek6.3: Graf pˇridˇelen´ıprostˇredk˚ua ekvivalentn´ıgraf ˇcek´an´ı

£ Graf ˇcek´an´ız´ısk´amez grafu pˇridˇelen´ızdroj˚utak, ˇzeodstran´ımevˇsechny uzly odpov´ıdaj´ıc´ıprostˇred- k˚uma nech´amehrany, kter´edo nich a z nich vedly, zkolabovat (tedy hrana, kter´avedla od procesu k prostˇredku,se pˇresmˇerujena vˇsechny uzly – procesy, ke kter´ymvedly hrany pˇridˇelen´ıprostˇredku). Na obr´azku 6.3 je uk´azka vytvoˇren´ıgrafu ˇcek´an´ıpro graf pˇridˇelen´ıprostˇredk˚u. Je to obdoba grafu n´arok˚uprostˇredk˚una obr´azku 6.2 ze strany 115 bez prostˇredku R3, kter´ynem´avliv na uv´aznut´ı, s pˇridˇelen´ımpoˇzadovan´eho prostˇredku R1 procesu P1. V grafu ˇcek´an´ınen´ıkruˇznice,proto bude tento prostˇredekpˇridˇelen.Kdyby byl pouˇz´ıv´anpostup pˇredpov´ıd´an´ıuv´aznut´ı,k pˇridˇelen´ıby nedoˇslo,tady vˇsakneprov´ad´ımepredikci, ale pouze detekci jiˇzexistuj´ıc´ıhouv´aznut´ı.

£ Na obr´azku 6.4 je v grafu pˇridˇelen´ıprostˇredk˚ustav, kdy proces P2 ˇz´ad´ao pˇridˇelen´ıprostˇredku R1, a ekvivalentn´ıgraf ˇcek´an´ı.V obou grafech je kruˇznice, v tom druh´em je sn´azezjistiteln´a(m´amem´enˇe uzl˚uv grafu), detekovali jsme uv´aznut´ısyst´emu. Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 118

P1 P2

6@ 6 @  @ R @ P1 P2 @ I @@R ©   R1 R2

Obr´azek6.4: Graf pˇridˇelen´ıprostˇredk˚ua ekvivalentn´ıgraf ˇcek´an´ı

6.6.2 Uprava´ Bank´eˇrova algoritmu

£ Bank´eˇr˚uvalgoritmus slouˇz´ık pˇredv´ıd´an´ıuv´aznut´ı,pro detekci staˇc´ıjeho zjednoduˇsen´ı.Pouˇzijeme n´asleduj´ıc´ıdatov´estruktury definovan´etak jako u Bank´eˇrova algoritmu: • VOLNE • PRIDELENE • POZADAVKY Algoritmus pro zjiˇstˇen´ıuv´aznut´ıje n´asleduj´ıc´ı: 1. Vytvoˇrpomocn´edatov´estruktury, kter´ebudou slouˇzitk simulaci dalˇs´ıhopr˚ubˇehu stavu syst´emu v pˇr´ıpadˇe,ˇze prostˇredkybudou pˇridˇeleny: SIMVOLNE – inicializujeme hodnotami vektoru VOLNE, SIMVOLNE=VOLNE, KONEC – vektor o n prvc´ıch, kter´ejsou inicializov´any na false. 2. Najdi index j, pro kter´yplat´ıobˇen´asleduj´ıc´ıpodm´ınky: (a) KONEC[j] = false ...... jeˇstˇepracuje (neskonˇcil) (b) POZADAVKY[j] SIMVOLNE ...... neˇz´ad´av´ıcneˇzje k dispozici ≤ Jestli takov´yindex neexistuje, pokraˇcujbodem4, jinak pokraˇcujbodem3. 3. Proved’ n´asleduj´ıc´ıoperace: SIMVOLNE=SIMVOLNE+PRIDELENO[j]...... uvoln´ıme“ prostˇredkypˇridˇelen´eprocesu P ” j KONEC[j] = true ...... ukonˇc´ıme“ proces P ” j Pokraˇcujbodem2. 4. Jestliˇzevektor KONEC obsahuje pouze hodnoty true, potom nedoˇslok uv´aznut´ı,v opaˇcn´empˇr´ıpadˇe (alespoˇnjedna hodnota false) doˇslok uv´aznut´ı,a to tˇech proces˚u,pro jejichˇzindex je hodnota ve vektoru KONEC rovna false.

6.6.3 Reakce pˇrizjiˇstˇen´ızablokov´an´ı

Nˇekter´ymz algoritm˚uz pˇredchoz´ıkapitoly bylo zjiˇstˇenouv´aznut´ıa v´ımetak´e,kter´eprocesy uv´azly (v pˇr´ıpadˇeprvn´ıhoalgoritmu jsou to procesy na detekovan´ekruˇznici,u druh´ehoalgoritmu procesy, jejichˇzindex ve vektoru KONEC je nastaven na false). Dalˇs´ıreakce z´avis´ına tom, zda s prostˇredky pracujeme preemptivnˇenebo nepreemptivnˇe. Kapitola 6 Uvaznut´ ´ı proces˚u (Deadlock) 119

£ Pˇri preemptivn´ıpr´aci s prostˇredkypostupnˇeuvolˇnujemeprostˇredky, kter´emaj´ıpˇridˇeleny uv´aznut´e procesy, a pˇridˇelujemeje jin´ymproces˚umtak dlouho, dokud se neodstran´ıuv´aznut´ı.Kl´ıˇcov´yje v´ybˇer ” obˇeti“, tedy proces˚u,kter´ymbudou prostˇredkypostupnˇeodeb´ır´any, mˇeloby b´yttak´ezajiˇstˇeno, aby po odstranˇen´ıuv´aznut´ıtyto procesy mohly postupnˇeprostˇredkyopˇetdost´avat a ukonˇcittak svou pr´aci. £ Pokud pouˇz´ıv´ame nepreemptivn´ıpl´anov´an´ı, jedin´ymˇreˇsen´ım je ukonˇcovat procesy tak dlouho, do- kud existuje uv´aznut´ı,pˇritakov´emn´asiln´emukonˇcen´ıprocesu jsou jeho prostˇredkyuvolnˇeny a pˇridˇeleny jin´ymproces˚um.Opˇetje d˚uleˇzit´e,jak vyb´ır´ame obˇet’“, protoˇzen´asilnˇeukonˇcen´yproces samozˇrejmˇe ” nem˚uˇzedokonˇcitsvou pr´aci.Existuj´ıprocesy, kter´etakto m˚uˇzemeukonˇcita pak restartovat bez ne- bezpeˇc´ıztr´aty dat nebo nekonzistence dat ˇcistavu syst´emu, u jin´ych bohuˇzeltoto nebezpeˇc´ıje. Kapitola 7 Spr´ava periferi´ı

Periferie se tak´enaz´yvaj´ı vstupnˇe-v´ystupn´ı zaˇr´ızen´ı (V/V zaˇr´ızen´ı, I/O zaˇr´ızen´ı). V t´etokapitole se nejdˇr´ıv pod´ıv´amestrukturu I/O syst´emu, druhy periferi´ı, ovladaˇce a potom se budeme kr´atce vˇenovat problematice n´ızko´urovˇnov´ehopˇr´ıstupuk periferi´ımpomoc´ıpˇreruˇsen´ı.Zb´yvaj´ıc´ıˇc´astkapi- toly je vˇenov´anablokov´ymzaˇr´ızen´ım.

7.1 I/O syst´em

 Obvykl´astruktura I/O syst´emu je ve vˇetˇsinˇemodern´ıch operaˇcn´ıch syst´em˚un´asleduj´ıc´ı:

Procesy a ovladaˇcebˇeˇz´ıc´ıv uˇzivatelsk´emreˇzimu

I/O rozhran´ı(I/O API) Uˇzivatelsk´yreˇzim

Spr´avci I/O Privilegovan´yreˇzim Ovladaˇcebˇeˇz´ıc´ıv reˇzimu j´adra HAL (Hardware Abstraction Layer) nebo podobn´avrstva HW (perifern´ızaˇr´ızen´ı) Obr´azek7.1: Struktura I/O syst´emu

I/O rozhran´ı je sada rutin (funkc´ı)a objekt˚uposkytovan´aoperaˇcn´ımsyst´ememproces˚umpro pˇr´ıstupk periferi´ım,jin´ymzp˚usobem obvykle bˇeˇzn´eprocesy s periferiemi komunikovat nemohou. Spr´avciperiferi´ı jsou moduly syst´emu, kter´eprov´adˇej´ıspr´avuurˇcit´ehozaˇr´ızen´ı,napˇr´ıklad spr´avce tisku nebo spr´avce pro nˇekter´ydisk, b´yvaj´ı uspoˇr´ad´anido stromov´estruktury, ve kter´enadˇr´ızen´y spr´avce ˇr´ıd´ıˇcinnostostatn´ıch spr´avc˚u.

7.2 Druhy periferi´ı

 Zaˇr´ızen´ıdˇel´ımena vstupn´ı a v´ystupn´ı, ale toto dˇelen´ınen´ı´uplnˇedisjunktn´ı– existuj´ızaˇr´ızen´ı,kter´a patˇr´ıdo obou tˇechto skupin (pak je naz´yv´amevstupnˇe-v´ystupn´ı).Vstupn´ıje napˇr´ıkladkl´avesnice, v´ystupn´ı bˇeˇzn´ymonitor nebo tisk´arna, vstupnˇe-v´ystupn´ı jsou tˇreba diskov´epamˇetinebo dotykov´a obrazovka.

120 Kapitola 7 Sprava´ periferi´ı 121

 Z hlediska moˇznost´ıvyuˇz´ıv´an´ıprocesy dˇel´ımeperiferie do tˇr´ıskupin: • Vyhrazen´azaˇr´ızen´ı – tato zaˇr´ızen´ı nemohou slouˇzitv´ıce proces˚umnajednou, je to napˇr´ıklad tisk´arna.Spr´avce tohoto zaˇr´ızen´ımus´ızajistit, aby procesy nebyly zbyteˇcnˇezdrˇzov´ani.Pro to existuj´ıdvˇez´akladn´ımoˇznosti: – vyhrazov´an´ızaˇr´ızen´ı– jednoduˇsˇs´ımoˇznost,kter´aale moc probl´em˚uneˇreˇs´ı– jeden proces pouˇz´ıv´azaˇr´ızen´ı,ostatn´ımus´ıpoˇckat tˇrebave frontˇe,aˇzproces s´amzaˇr´ızen´ıuvoln´ı, – virtualizace zaˇr´ızen´ı (ovladaˇctypu server, viz d´ale)– proces ve skuteˇcnostikomunikuje s jakousi virtu´aln´ın´ahradou“, speci´aln´ımprocesem, a teprve tento proces komunikuje se ” samotn´ymzaˇr´ızen´ım, komunikace s procesem je rychlejˇs´ı neˇzse zaˇr´ızen´ım a nav´ıc d´ıky r˚uzn´ymtechnologi´ımvˇcetnˇemultithreadingu m˚uˇzespeci´aln´ıproces komunikovat s v´ıcepro- cesy najednou; toto ˇreˇsen´ıtak´ezn´amepod n´azvem abstraktn´ıpoˇc´ıtaˇc“. ” • Sd´ılen´azaˇr´ızen´ı – tato zaˇr´ızen´ı mohou slouˇzitnajednou v´ıce proces˚ums t´ım,ˇzekaˇzd´ypro- ces m´avyhrazenu svou vlastn´ıˇc´ast,typick´ypˇr´ıkladje operaˇcn´ıpamˇet’ nebo vnˇejˇs´ıpamˇet’ov´a m´edia.Spr´avce pˇridˇeluje,odeb´ır´aa eviduje ˇc´astizaˇr´ızen´ıpˇridˇelen´ejednotliv´ymproces˚uma mus´ı pˇredevˇs´ımzajistit, aby procesy pˇristupovaly pouze tam, kam je jim pˇr´ıstuppovolen. • Spoleˇcn´azaˇr´ızen´ı – k tˇemto zaˇr´ızen´ımm˚uˇzebez probl´em˚upˇristupovat v´ıceproces˚unajednou, jejich stav neb´yv´az vnˇejˇskumˇenˇena proto nevyˇzaduj´ıˇcasto ani synchronizaci pˇr´ıstupu.Je to napˇr´ıkladmikrofon nebo nˇekter´ytyp ˇcidla(tˇrebateplomˇerˇcivlhkomˇer).

 Periferie dˇel´ımepodle rozs´ahlostidat, se kter´ymidok´aˇzounajednou pracovat jejich ovladaˇce,na • znakov´a – kl´avesnice, tisk´arna,myˇs,termin´al,apod., komunikace prob´ıh´apo jednotliv´ych okte- tech (1 B) nebo pevnˇedan´ych skupin´ach nˇekolika oktet˚u, • blokov´a – pamˇet’ov´azaˇr´ızen´ıjako je tˇrebapevn´ydisk, data jsou pos´ıl´anav bloc´ıch (s d´elkou obvykle v n´asobc´ıch 512 B), obvykle je nutn´akomunikace na vyˇsˇs´ı´urovni (metadata), • speci´aln´ı – napˇr´ıkladˇcasovaˇc,zde m˚uˇzemezaˇradittak´enˇekter´avirtu´aln´ızaˇr´ızen´ı.

7.3 Ovladaˇce

7.3.1 Struktura ovladaˇc˚u

 Ovladaˇczaˇr´ızen´ı je program (proces po spuˇstˇen´ı),kter´yslouˇz´ıjako rozhran´ımezi zaˇr´ızen´ıma pro- cesy, nebo jin´ymiovladaˇcia moduly j´adra. Jednou z ´ulohovladaˇceje zprostˇredkov´avat komunikaci mezi propojen´ymientitami tak, aby bylo moˇzn´estejn´ym zp˚usobem pˇristupovat k r˚uzn´ymzaˇr´ızen´ım t´ehoˇztypu, napˇr´ıklad u dvou r˚uzn´ych tisk´arenby nemˇelb´ytproces nucen zjiˇst’ovat, jak pˇresnˇemaj´ıb´ytform´atov´anadata, jak´eparame- try maj´ıb´yttisk´arnˇezad´any a v jak´empoˇrad´ı,atd. Proto spr´avce zaˇr´ızen´ıposkytuje proces˚umsadu sluˇzeb(funkc´ı),kter´ejsou vˇzdypro jak´ekoliv zaˇr´ızen´ıstejnˇenazv´any, jen pokaˇzd´ejinak pracuj´ı.  Typicky m´amev operaˇcn´ıch syst´emech unifikovanˇepojmenovan´efunkce, jejichˇzskuteˇcn´afunkˇcnost z´avis´ına ovladaˇci.Napˇr´ıklad: Init(zaˇr´ızen´ı) inicializuje zaˇr´ızen´ı,funkce obvykle vrac´ıjeho stav (pˇripraveno nebo chyba), Open(zaˇr´ızen´ı) otevˇrekomunikaˇcn´ıkan´almezi zaˇr´ızen´ıma procesem, nav´aˇzespojen´ı,funkce vrac´ı identifikaci komunikaˇcn´ıhokan´alu(ˇc´ıslo,kter´ebude nad´alepro komunikaci pouˇz´ıv´ano), Close(zaˇr´ızen´ı) uzavˇrekomunikaˇcn´ıkan´al,zruˇs´ıspojen´ı, Kapitola 7 Sprava´ periferi´ı 122

Read(zaˇr´ızen´ı,Blok),Write(zaˇr´ızen´ı,Blok) pˇrenos dat mezi blokov´ymzaˇr´ızen´ım a procesem – ˇcten´ıbloku dat ze zaˇr´ızen´ı,z´apisbloku dat, Getc(zaˇr´ızen´ı),Putc(zaˇr´ızen´ı,Zn) tot´eˇzpro znakov´azaˇr´ızen´ı– ˇcten´ıznaku ze zaˇr´ızen´ı,posl´an´ı znaku na zaˇr´ızen´ı, Seek(zaˇr´ızen´ı,param) pˇresunna zadanou pozici v r´amciposlan´ych dat, Cntl(parametry) (tak´e ioctl()) pˇr´ıstupk dalˇs´ımmoˇznostemzaˇr´ızen´ı,m´ar˚uzn´eparametry podle toho, co zaˇr´ızen´ınab´ız´ı(vˇsechny funkce, kter´ese nevejdou“ do pˇredchoz´ıch). ”  Je obvykl´e,ˇzeovladaˇcimplementuje nˇekolik d˚uleˇzit´ych funkc´ı.Funkce pro komunikaci s procesy byly naznaˇceny v´yˇse,ale k d˚uleˇzit´ymfunkc´ımpatˇr´ıtak´ety vztahuj´ıc´ıse k syst´emu: • rutina obsluhy pˇreruˇsen´ı – k´od,kter´yse m´aprov´est,pokud zaˇr´ızen´ıovladaˇcevygeneruje pˇreruˇsen´ı, • inicializaˇcn´ırutina – k´od,kter´yse m´aprov´estpˇriinicializaci ovladaˇce(napˇr´ıkladrutina pro pˇrid´an´ızaˇr´ızen´ı,kter´aje pouˇz´ıv´anaspr´avcem Plug-and-Play).

 Z mnoha d˚uvod˚uje dobr´erozdˇelitovladaˇcna dvˇeˇc´asti,kter´emezi sebou komunikuj´ı stylem Producent–konzument: • horn´ıˇc´ast je Producent, pˇreb´ır´adata od proces˚ua ukl´ad´aje do fronty (u vstupn´ıch zaˇr´ızen´ızase pˇreb´ır´adata z druh´eˇc´asti,kompletuje je a zas´ıl´aadres´atovi), • doln´ıˇc´ast je Konzument, komunikuje pˇr´ımose zaˇr´ızen´ım– vyb´ır´az fronty data a podle poˇzadavk˚u zaˇr´ızen´ımu je pos´ıl´a(u vstupn´ıch zaˇr´ızen´ıpˇreb´ır´adata ze zaˇr´ızen´ıa ˇrad´ıdo fronty). Doln´ıpolovina je hardwarovˇez´avisl´a,proto kdyˇzchceme napsat ovladaˇcpro nˇekolik druh˚ut´ehoˇztypu zaˇr´ızen´ı(napˇr.nˇekolik r˚uzn´ych tisk´aren),staˇc´ıpˇrepsatdoln´ıˇc´asta do horn´ıt´emˇeˇrnemus´ımezasahovat.  V souˇcasn´ych operaˇcn´ıch syst´emech jsou ovladaˇceˇcastoprogramov´any jako moduly j´adra.To znamen´a,ˇzej´adrojako takov´eje ve sv´emk´oduneobsahuje, ale naˇc´ıtaj´ıse pˇrinab´ıh´an´ısyst´emu ze soubor˚u,kter´ejsou obdobou dynamicky linkovan´ych knihoven (linkuj´ıse do j´adra). Existuj´ı tak´eprojekty, jejichˇz´uˇcelemje pˇren´estco nejv´ıc z funkcionality ovladaˇc˚uz j´adrado uˇzivatelsk´ehoprostoru. To je velmi uˇziteˇcn´e,protoˇzevˇetˇsinachyb pˇribˇehu j´adranebo dokonce jeho p´ad˚uje zavinˇenapr´avˇeˇspatnˇenapsan´ymiovladaˇci(vˇse,co bˇeˇz´ıv reˇzimu j´adra,se dostane opravdu kamkoliv, tedy poˇskozen´ıdatov´ych struktur j´adraje docela dobˇremoˇzn´e).P˚uvodnˇese tyto snahy obje- vily sp´ıˇse v UNIXov´ych syst´emech, ale v souˇcasn´edobˇese ovladaˇcev uˇzivatelsk´emprostoru pouˇz´ıvaj´ı i ve Windows (viz cviˇcen´ı).

7.3.2 J Ovladaˇceve Windows

Ve Windows rozliˇsujemer˚uzn´edruhy ovladaˇc˚upodle r˚uzn´ych krit´eri´ı.Celkov´astruktura je pomˇernˇe sloˇzit´a,zde si ji trochu zjednoduˇs´ıme.  Dˇelen´ıpodle modelu (tj. zp˚usobu,jak je ovladaˇcnaprogramov´an,co vˇsem˚uˇzeimplementovat a jak komunikuje se sv´ymokol´ım): • ovladaˇcepodle modelu WDM (Windows Driver Model) – vˇetˇsinaovladaˇc˚ubˇeˇzn´ych zaˇr´ızen´ı (kl´avesnice, zvukov´akarta apod.), pouˇz´ıv´ase od Windows 2000, • ovladaˇcepodle modelu WDDM (Windows Display Driver Model) – speci´aln´ımodel pro multi- medi´aln´ıovladaˇce(grafick´ekarty apod.), existuje od verze Vista, • starˇs´ıovladaˇce(pˇredch˚udciWDM) – napˇr´ıkladPMD (Protected Mode Driver), RMD (Real Mode Driver), pro velmi star´azaˇr´ızen´ı,dnes se uˇzs nimi obvykle nesetk´ame. Kapitola 7 Sprava´ periferi´ı 123

U model˚uWDM a WDDM existuj´ır˚uzn´everze, jejich specifikace se m˚uˇzem´ırnˇeliˇsit.  Dˇelen´ıpodle um´ıstˇen´ık´odu (resp. formy komunikace se syst´emem): • ovladaˇcebˇeˇz´ıc´ıv reˇzimu j´adra(Kernel-Mode Drivers) – tyto ovladaˇcejsou vlastnˇemoduly j´adra, vˇetˇsinouse naˇc´ıtaj´ıze soubor˚us pˇr´ıponou .sys, • ovladaˇcebˇeˇz´ıc´ı v uˇzivatelsk´emprostoru (User-Mode Drivers) – obdoba sluˇzeb,obvykle bˇeˇz´ı v nˇekter´emhostitelsk´emprocesu, ˇcastov svchost. V reˇzimu j´adrabˇeˇz´ıtak´enapˇr´ıkladovladaˇcsouborov´ehosyst´emu NTFS naˇc´ıtan´yze souboru ntfs.sys. Pro kaˇzd´yz tˇechto dvou typ˚uovladaˇc˚uexistuje pomocn´ypodsyst´em,kter´yzajiˇst’uje jejich bˇeh: • Kernel-Mode Driver Framework (KMDF) – podsyst´empro ovladaˇcebˇeˇz´ıc´ıv reˇzimu j´adra, • User-Mode Driver Framework (UMDF) – podsyst´em pro ovladaˇcebˇeˇz´ıc´ıv uˇzivatelsk´emreˇzimu, jeho souˇc´ast´ıje i modul Driver Manager zajiˇst’uj´ıc´ımimo jin´ei komunikaci ovladaˇc˚us okol´ım (obdoba SCM od sluˇzeb). Ovladaˇcebˇeˇz´ıc´ıv reˇzimu j´adramaj´ına jednu stranu lepˇs´ımoˇznostikomunikace (jak se zaˇr´ızen´ım,tak i s jin´ymimoduly j´adra),coˇzm´avliv hlavnˇena propustnost komunikace (nen´ınutn´etak ˇcastopˇrep´ınat mezi reˇzimemj´adraa uˇzivatelsk´ymreˇzimem),ale na druhou stranu jsou pro j´adrorizikem – cokoliv se pokaz´ıv j´adˇre,to ovlivn´ıcel´ysyst´em(modr´aobrazovka apod.). Bezpeˇcnˇejˇs´ıjsou ovladaˇcebˇeˇz´ıc´ı v uˇzivatelsk´emprostoru, proto jejich pouˇz´ıv´an´ıMicrosoft v posledn´ıdobˇehodnˇepodporuje.  Ovladaˇced´aledˇel´ımedo dvou skupin podle toho, zda podporuj´ı zjednoduˇsenouinstalaci: • ovladaˇcePlug-and-Play – souvisej´ıs konkr´etn´ımzaˇr´ızen´ım,u kter´ehom´asmysl uvaˇzovat o t´eto funkci (v´ymˇenn´epamˇeti,nˇekter´etypy rozˇsiˇruj´ıc´ıch karet, kl´avesnice, myˇsi,tisk´arny, apod.), pˇredpokl´ad´ase tak´ekomunikace se spr´avcem nap´ajen´ı, • ovladaˇcenon-Plug-and-Play (rozˇs´ıˇren´ı j´adra)– obvykle nesouvisej´ı s konkr´etn´ım hardwarem, nebo sice ano, ale se zaˇr´ızen´ım komunikuj´ı jeˇstˇepˇresdalˇs´ı ovladaˇc(typicky ovladaˇcekomu- nikaˇcn´ıch protokol˚u).

 OvladaˇceWDM m˚uˇzemedˇelit podle konkr´etn´ıfunkce, kterou v syst´emu pln´ı,a tak´epodle zaˇclenˇen´ı do komunikaˇcn´ıstruktury v j´adˇre: • ovladaˇcefunkce – tyto ovladaˇcekomunikuj´ı pˇr´ımo s konkr´etn´ım zaˇr´ızen´ım, jejich ´ukolem je zajiˇst’ovat rozhran´ık zaˇr´ızen´ı, • ovladaˇcesbˇernice – spravuj´ıfyzick´ea logick´esbˇernice(napˇr´ıkladovladaˇcPCI nebo USB), tyto ovladaˇcedetekuj´ızaˇr´ızen´ıpˇripojovan´ek dan´esbˇernicipodle standardu Plug-and-Play, zajiˇst’uj´ı spr´avn´enap´ajen´ısbˇerniceapod., • ovladaˇcefiltru – ovlivˇnuj´ıkomunikaci od nebo do ovladaˇcefunkce, tedy bud’ rozˇsiˇruj´ıfunkˇcnost nav´azan´ehoovladaˇcefunkce nebo ji nˇejak´ymzp˚usobem mˇen´ı;m˚uˇzej´ıtnapˇr´ıklado ˇsifrov´an´ı, nejr˚uznˇejˇs´ıkonverze, sledov´an´ı,atd.

 Jak bylo v´yˇsenaznaˇceno,struktura ovladaˇc˚uve Windows je pomˇernˇesloˇzit´a, v t´etostruktuˇre se rozliˇsuj´ıtyto typy ovladaˇc˚u uspoˇr´adan´ych do vrstev nebo jeˇstˇesloˇzitˇeji: 1. ovladaˇcetˇr´ıdy – vych´azej´ıze tˇr´ıdˇen´ızaˇr´ızen´ıdo logick´ych tˇr´ıd,kde v r´amcijedn´etˇr´ıdyexistuj´ı standardizovan´epostupy, funkce a datov´estruktury (napˇr´ıkladexistuje tˇr´ıdapro pevn´edisky), tyto ovladaˇceumoˇzˇnuj´ıstandardizovan´ymzp˚usobem pˇristupovat k zaˇr´ızen´ımod r˚uzn´ych v´yrobc˚u tak, aby zaˇr´ızen´ıfungovalo, i kdyˇznebudou jeho funkce plnˇevyuˇzity, Kapitola 7 Sprava´ periferi´ı 124

2. ovladaˇceportu – jedn´ase o ovladaˇcerealizuj´ıc´ırozhran´ık nˇekter´emu I/O portu, napˇr´ıkladUSB nebo SCSI, obvykle nejde o klasick´eovladaˇce,ale sp´ıˇseo dynamicky linkovan´eknihovny, 3. ovladaˇceminiportu – propojuj´ıkomunikaˇcn´ıcestu mezi portem nˇekter´ehorozhran´ıa konkr´etn´ım adapt´erem(rozˇsiˇruj´ıc´ıkartou) na tomto rozhran´ı,jedn´ase o skuteˇcn´eovladaˇcezaˇr´ızen´ı,kter´ese napojuj´ına funkce ovladaˇceportu. Navrstven´eovladaˇceve skuteˇcnostinavz´ajemnekomunikuj´ıpˇr´ımo, komunikace mezi dvˇemaovladaˇci vˇzdyvede pˇres spr´avce I/O – pˇr´ısluˇsn´ypodsyst´em(v novˇejˇs´ıch Windows to je KMDF nebo UMDF). £ K ovladaˇc˚umse m˚uˇzemedostat na nˇekolika m´ıstech: • stejnˇejako u sluˇzeb,informace o ovladaˇc´ıch najdeme v registru, d´alepˇressluˇzbuWMI, pˇr´ıkaz sc apod. (prob´ıralijsme na cviˇcen´ıch), • Process Explorer (od Sysinternals) – Pokud ve spodn´ımpodoknˇezobraz´ımeseznam DLL a pak v horn´ımpodoknˇeklepneme na proces System, z´ısk´amepˇrehledo vˇetˇsinˇeovladaˇc˚uv j´adˇre. • WinObj (od Sysinternals) – zde m´amepˇrehledo objektech ovladaˇc˚u(pˇredevˇs´ımv kontejnerech Driver a FileSystem).

7.3.3 J Ovladaˇcev Linuxu

 V Linuxu existuj´ıdva z´akladn´ıtypy ovladaˇc˚u,podle um´ıstˇen´ık´odu: • ovladaˇcebˇeˇz´ıc´ıv reˇzimu j´adra(Kernel Drivers) – funguj´ıjako moduly j´adra,pro komunikaci vyuˇz´ıvaj´ıinfrastrukturu nab´ızenouj´adrem, • ovladaˇcebˇeˇz´ıc´ıv uˇzivatelsk´emprostoru (User-Space Drivers) – v j´adˇremaj´ıjen sv´eho agenta“, ” kter´yjim zprostˇredkov´av´apˇr´ıstupk prostˇredk˚umj´adra,ale samy bˇeˇz´ıv uˇzivatelsk´emprostoru, vˇetˇsinoujako sluˇzby/d´emoni. Prvn´ıtyp ovladaˇc˚um´asamozˇrejmˇev´yhodu pˇr´ım´ehopˇr´ıstupu ke struktur´amj´adra a r˚uzn´ymmoˇznostem komunikace s jin´ymimoduly j´adra,ale na druhou stranu je tˇrebajejich k´odvelmi d˚ukladnˇeodladit, protoˇzejak´akoliv chyba by mohla fat´alnˇeovlivnit fungov´an´ıj´adra.Je tˇrebavelmi db´atna pouˇz´ıv´an´ı mutex˚u,spinlock˚ua jin´ych synchronizaˇcn´ıch mechanism˚u(na spr´avn´emm´ıstˇe,ve spr´avn´yˇcas),kromˇe zamyk´an´ıtaky odemykat, podrobovat d˚ukladn´eanal´yzecokoliv, co pˇrijde zvenˇc´ı“ (tˇrebaze vstupn´ıho ” zaˇr´ızen´ı),protoˇzeby pˇr´ıpadnˇemohlo j´ıto hackersk´y´utok. Moduly pro naˇcten´ı do j´adrajsou uloˇzeny v souborech s pˇr´ıponou .ko (kernel object), a to /lib/modules/ˇc´ıslo_j´adra /kernel/drivers/kategorie_modulu /n´azev_modulu.ko. Oproti tomu ovladaˇcebˇeˇz´ıc´ıv uˇzivatelsk´emprostoru maj´ıv´yhodu v menˇs´ıch probl´emech s bez- peˇcnost´ı(coˇzale neznamen´a,ˇzeby se jejich programov´an´ımohlo odfl´aknout),ale na druhou stranu se nˇejak“ mus´ıdo j´adradost´avat. K tomu vˇetˇsinouslouˇz´ı modul j´adra FUSE (FileSystem in UserSpace), ” kter´ypr´avˇepln´ıroli styˇcn´ehod˚ustojn´ıka“ pro komunikaci s j´adrem. ”

 Pozn´amka: PˇresFUSE je dnes ˇreˇsenoobrovsk´emnoˇzstv´ı ovladaˇc˚u,pr´avˇez d˚uvodu bezpeˇcnosti(a tak´ese to snadnˇejiprogramuje, jsou k dispozici knihovny s pˇredpˇripraven´ymk´odem).Jedn´ase vˇetˇsinouo re´aln´e nebo virtu´aln´ısouborov´esyst´emy ˇcicokoliv, co prostˇefunguje jako filtr dat (to vˇseje ve skuteˇcnosti v UNIXov´ych syst´emech br´anojako souborov´ysyst´em),tak´epro ˇsifrov´an´ı,kompresi, logov´an´ı,atd. Z nejzn´amˇejˇs´ıch napˇr´ıkladntfs-3g (ovladaˇcsouborov´ehosyst´emu NTFS), EncFS (souborov´ysyst´em Kapitola 7 Sprava´ periferi´ı 125 nab´ızej´ıc´ıˇsifrov´an´ı),FuseCompress (komprese, kromˇejin´eho tak´ealgoritmem gzip), ClamFS (antivi- rov´akontrola pˇripˇr´ıstupuk soubor˚um), sshfs (implementace SSH), atd. 

https://github.com/libfuse/libfuse/wiki/Filesystems  Dalˇs´ınev´yhody ovladaˇc˚uv uˇzivatelsk´emprostoru jsou podobn´ejako u bˇeˇzn´ych proces˚u,napˇr´ıklad v pˇr´ıpadˇenutnosti mohou b´ytjejich pamˇet’ov´estr´ankyodloˇzeny (swapov´any). Jejich komunikace s ˇc´ımkoliv v j´adˇreje pomalejˇs´ı(je tˇrebaprov´adˇetpˇrep´ın´an´ımezi reˇzimy) – to je pozorovateln´enapˇr´ıklad u gigabitov´ych ethernetov´ych karet, pokud jsou jejich ovladaˇcetakto ˇreˇseny.  Moduly mohou m´ıttak´eparametry, coˇzse vyuˇz´ıv´ahlavnˇeu tzv. watchdog˚u, tedy modul˚uhl´ıdaj´ıc´ıch nˇekter´efunkce zaˇr´ızen´ıa syst´emu.  Pˇrinaˇc´ıt´an´ınebo provozu modulu mohou b´ytnastaveny nˇekter´ez tzv. tained pˇr´ıznak˚uj´adra. Tyto pˇr´ıznakyj´adra indikuj´ı,ˇzenˇecov j´adˇrenen´ı´uplnˇev poˇr´adkua existuje moˇznostnaruˇsen´ıstability nebo v´ykonu j´adra.Nˇekter´ez tained pˇr´ıznak˚ujsou celkem nevinn´ea nen´ıd˚uvod si jich v´ıcevˇs´ımat,napˇr´ıklad pˇr´ıznak P“ (naˇctenmodul s propriet´aln´ınebo neuvedenou, a tedy zˇrejmˇetak´epropriet´aln´ı,licenc´ı). ” Jin´epˇr´ıznakyvˇsakrozhodnˇezasluhuj´ıpozornost, napˇr´ıkladpˇr´ıznak B“ (pamˇet’ov´astr´anka nˇekter´eho ” procesu je poˇskozena) nebo H“ (doˇslok v´aˇzn´ehardwarov´echybˇe,napˇr´ıklad pˇrehˇr´at´ıprocesoru). ” £ Ulohu´ spr´avce I/O pln´ıu starˇs´ıch syst´em˚upˇredevˇs´ımvrstva HAL a modul udev. Pr´acise speci´aln´ımi zaˇr´ızen´ımim´av kompetenci udev, zbytek je na vrstvˇeHAL. Tato vrstva napˇr´ıkladprov´ad´ısamotn´e naˇc´ıt´an´ımodul˚us ovladaˇci,pˇripojuje souborov´esyst´emy, pln´ıroli spr´avce Plug-and-Play (hl´ıd´aa za- jiˇst’uje pˇripojov´an´ızaˇr´ızen´ı).V neposledn´ıˇradˇevytv´aˇr´ıjednotn´yvirtu´aln´ıpohled na strukturu zaˇr´ızen´ı (podobnˇejako existuje struktura soubor˚u)a exportuje ho proces˚um.Jedn´ase o stromovou strukturu dostupnou pˇressouborov´ysyst´em sysfs v adres´aˇri /sys. V novˇejˇs´ıch syst´emech jiˇzneexistuje vrstva HAL, vˇsevˇcetnˇepr´aces adres´aˇrem /sys je v reˇzii modulu udev.  Kaˇzd´ezaˇr´ızen´ı(vˇcetnˇevirtu´aln´ıch) m´asv˚ujvlastn´ı objekt. Tento objekt obsahuje veˇsker´einformace o zaˇr´ızen´ıvˇcetnˇekategorie, ´udaj˚uo ˇr´ızen´ıpˇr´ıstupu,rodiˇce,n´azvuapod.

7.4 Pˇreruˇsen´ı

7.4.1 Mechanismus pˇreruˇsen´ıa v´yjimek

 Pod pojmem pˇreruˇsen´ı ch´apeme pˇreruˇsen´ınorm´aln´ıhobˇehu procesu (posloupnosti vykon´avan´ych instrukc´ıjeho programu). V multitaskov´emsyst´emu pˇreruˇsen´ızp˚usob´ızmˇenu stavu bˇeˇz´ıc´ıhoprocesu (je odebr´anprocesor), ale aˇzpo dokonˇcen´ıpr´avˇezpracov´avan´einstrukce1.  Pˇreruˇsen´ım˚uˇzeb´ytgenerov´anobud’ hardwarovˇe,pak hovoˇr´ımeo hardwarov´empˇreruˇsen´ı, tato pˇreruˇsen´ımaj´ıpˇridˇelenaˇc´ısla IRQ (Interrupt Request – poˇzadavek pˇreruˇsen´ı),nebo softwarovˇeope- raˇcn´ımsyst´ememnebo bˇeˇz´ıc´ımprocesem2, pak jde o softwarov´epˇreruˇsen´ı.

1Instrukce je nejmenˇs´ıa d´alenedˇeliteln´ypovel, kter´emu rozum´ıjiˇzpˇr´ımoprocesor, program je posloupnost tˇechto instrukc´ı.Jednomu pˇr´ıkazu vyˇsˇs´ıhoprogramovac´ıhojazyka odpov´ıd´aobvykle cel´ysled instrukc´ı.Typicky jde o pˇresuny jedno- ˇcinˇekolikabytov´ych ´udaj˚umezi registrem procesoru a pamˇet´ı,jednoduch´earitmetick´eoperace apod. 2V zabezpeˇcenˇejˇs´ıch“ operaˇcn´ıch syst´emech bˇeˇzn´eprocesy nemohou generovat pˇreruˇsen´ıpˇr´ımo,ale vol´an´ımj´adra. ” Kapitola 7 Sprava´ periferi´ı 126

Hardwarov´apˇreruˇsen´ıjsou napˇr´ıkladgenerov´anaI/O zaˇr´ızen´ımijako je kl´avesnice (stisk kl´avesy) nebo myˇs(pohyb ˇcistisknut´ıtlaˇc´ıtka), ale tˇrebatak´eprocesorem, pˇreruˇsen´ıgenerovan´aˇcasovaˇcem (v pravideln´ych intervalech, pˇredemnastaven´ych), pˇrihardwarov´eimplementaci ochrany pamˇeti je procesorem generov´anopˇreruˇsen´ıpˇrineopr´avnˇen´empˇr´ıstupudo chr´anˇen´epamˇeti. Softwarov´apˇreruˇsen´ıjsou generov´anaprocesem napˇr´ıkladpˇriˇz´adostio prostˇredek(vˇcetnˇev´ystupu na obrazovku) nebo pˇripokusu vyvolat urˇcitouud´alosta t´ımi jej´ıobsluˇznourutinu (uvnitˇrprocesu nebo i u jin´ehoprocesu ˇcioperaˇcn´ıhosyst´emu), operaˇcn´ımsyst´ememnapˇr´ıkladpˇriporuˇsen´ıbezpeˇcnosti syst´emu. Z´akladn´ıcharakteristikou pˇreruˇsen´ıje, ˇzepˇrich´az´ı neˇcekanˇe“, bez pˇr´ım´en´avaznosti na prov´adˇen´y ” programov´yk´od.  V´yjimka je obdoba pˇreruˇsen´ı(oznamuje situaci, na kterou je tˇrebareagovat), ale na rozd´ılod pˇreruˇsen´ıvypl´yv´az prov´adˇen´ehok´odua pˇriopakov´an´ıt´ehoˇzk´oduza stejn´esituace (pˇribˇehu stejn´ych proces˚uapod.) se stejn´ymidaty by byla generov´anaznovu. V´yjimkytak´edˇel´ımena hardwarov´ea soft- warov´e(napˇr´ıkladchyba dˇelen´ınulou je softwarov´av´yjimka, chyba na sbˇernicije hardwarov´av´yjimka) – i kdyˇzu hardwarov´ych v´yjimekje hranice mezi v´yjimkou a pˇreruˇsen´ımneostr´a. Rozliˇsujemev´yjimkynechybov´e(trap), opraviteln´e(fault) a neopraviteln´e(abort).  Kan´alypˇreruˇsen´ı jsou hardwarov´ysyst´empro signalizaci pˇreruˇsen´ı.Jednotliv´ekan´aly jsou repre- zentov´any ˇc´ıslyIRQ (Interrupt Request). Na jednom IRQ kan´alum˚uˇzeb´ytnapojeno v´ıcezaˇr´ızen´ı ⇒ sd´ılen´ykan´al,sd´ılen´eIRQ. Jejich provoz zajiˇst’uje speci´aln´ıobvod ˇradiˇcpˇreruˇsen´ı (IC – Interrupt Controller, resp. PIC (Pro- grammable IC), kter´yje bud’ souˇc´ast´ıprocesoru nebo m˚uˇzej´ıto samostatn´yobvod, kter´ynapˇr´ıklad souvis´ıs konkr´etn´ısbˇernic´ı. Radiˇcpˇreruˇsen´ızajiˇstˇ ’uje nˇekolik moˇzn´ych realizac´ıIRQ (hl´aˇsen´ı´urovn´ısign´alu,hl´aˇsen´ıhranou, hybridn´ı,hl´aˇsen´ızpr´avou), na pouˇzit´emtypu realizace z´avis´ınapˇr.i to, zda m˚uˇzeb´ytkan´alsd´ılen. Typicky se tyto odliˇsnostidaj´ıpozorovat mezi sbˇernicemiPCI a ISA, kdy na PCI je sd´ılen´ıIRQ celkem bezprobl´emov´e,na sbˇerniciISA je na nˇekter´ych architektur´ach dokonce nemoˇzn´e.  V j´adˇreoperaˇcn´ıhosyst´emu pak najdeme modul pro obsluhu pˇreruˇsen´ı (Interrupt Handler), kter´y zajiˇst’uje vyˇr´ızen´ı(obsluhu) pˇreruˇsen´ız pohledu operaˇcn´ıhosyst´emu.

7.4.2 Obsluha pˇreruˇsen´ı

 Aby zaˇr´ızen´ımohlo procesoru pos´ılatsign´alypˇreruˇsen´ı,mus´ızaregistrovat obsluˇznourutinu pˇre- ruˇsen´ı (handler), a tot´eˇzplat´ıi pro v´yjimky. Obsluˇzn´arutina obsahuje k´od,kter´ym´ab´ytproveden, kdyˇzzaˇr´ızen´ıvygeneruje toto pˇreruˇsen´ı.  Obsluˇzn´arutina nesm´ıdlouho blokovat procesor, a protoˇzetak´eˇcastom´apr´avo pˇristupovat k syn- chronizovan´ymobjekt˚umj´adra,jsou na ni kladeny pˇr´ısn´epoˇzadavky: • mus´ıb´ytco nejkratˇs´ı, • pouˇz´ıvat pokud moˇznopouze statick´edatov´estruktury, • atomick´eoperace. Pokud je tˇrebaprov´estk´od,kter´yje delˇs´ınebo jinak neodpov´ıd´apoˇzadavk˚um,rozdˇel´ıse na ˇc´asti: • horn´ıpolovina (mus´ıse prov´est okamˇzitˇe,odpov´ıd´apoˇzadavk˚umna obsluˇznourutinu), • doln´ıpolovina (ˇcasovˇen´aroˇcn´e,ale ne kritick´eoperace apod.). Kapitola 7 Sprava´ periferi´ı 127

Doln´ıpolovina (ta m´enˇekritick´a)se m˚uˇzeimplementovat nˇekolika r˚uzn´ymizp˚usoby (z´aleˇz´ına kon- kr´etn´ımoperaˇcn´ımsyst´emu), obvykle m´ana procesoru menˇs´ıpˇrednostneˇzsamotn´aobsluha pˇreruˇsen´ı, ale vˇetˇs´ıneˇzbˇeˇzn´eprocesy.  Za urˇcit´ych okolnost´ınesm´ıb´ytoˇsetˇrena(tj. mus´ıb´ytignorov´ana)pˇreruˇsen´ıurˇcen´adan´emu pro- cesu, napˇr.z d˚uvod˚usynchronizace, pak hovoˇr´ımeo z´akazupˇreruˇsen´ı. Zak´azan´apˇreruˇsen´ıjsou tzv. maskov´ana (maskovan´epˇreruˇsen´ıje ignorov´ano),nˇekter´apˇreruˇsen´ıvˇsaknelze maskovat a proces o nich mus´ıobdrˇzetzpr´avu(napˇr´ıkladdˇelen´ınulou). To znamen´a,ˇzepˇreruˇsen´ım˚uˇzemerozdˇelitdo dvou sku- pin: • maskovateln´apˇreruˇsen´ı (maskable interrupt) – zde patˇr´ıvˇetˇsinapˇreruˇsen´ıod r˚uzn´ych zaˇr´ızen´ı, • nemaskovateln´apˇreruˇsen´ı (nonmaskable interrupt, NMI) – nikdy nejsou maskov´ana,napˇr´ıklad pˇreruˇsen´ısignalizuj´ıc´ıprobl´emy hardwaru, v UNIXov´ych syst´emech tak´epˇreruˇsen´ızp˚usobuj´ıc´ı restart po zamrznut´ısyst´emu.

V UNIXov´ych syst´emech plat´ı,ˇzesd´ılen´apˇreruˇsen´ınelze maskovat. Maskov´an´ıse obvykle pouˇz´ıv´a na jedno konkr´etn´ı pˇreruˇsen´ı, i kdyˇzlze lok´alnˇe(na jednom procesoru ˇcij´adˇre)zak´azatvˇsechna pˇreruˇsen´ı,u kter´aje to moˇzn´e,najednou. Doporuˇcujese zakazovat jedno pˇreruˇsen´ıjen v naprosto nevyhnuteln´ych pˇr´ıpadech, a o to v´ıcese doporuˇcujepokud moˇznose vyh´ybatploˇsn´emu maskov´an´ı pˇreruˇsen´ı.

7.4.3 Spr´ava pˇreruˇsen´ıv r˚uzn´ych syst´emech

 MS-DOS. Spr´ava periferi´ımus´ıpˇredevˇs´ımzajistit spr´avnouobsluhu pˇreruˇsen´ı.V nejjednoduˇsˇs´ım pˇr´ıpadˇese prov´ad´ıpomoc´ı vektor˚upˇreruˇsen´ı ud´avaj´ıc´ıch adresu obsluˇzn´erutiny. V syst´emu MS-DOS je spr´ava pˇreruˇsen´ıprov´adˇenan´asledovnˇe: • pro kaˇzd´epˇreruˇsen´ıje nadefinov´anprogramov´yk´od(obsluˇzn´arutina – program, funkce, rutina, tj. ovladaˇcpˇreruˇsen´ı),kter´yse m´aspustit v pˇr´ıpadˇe, ˇzeje toto pˇreruˇsen´ıgenerov´ano, • vektor pˇreruˇsen´ı je uspoˇr´adan´advojice (vektor o dvou prvc´ıch) [segment,offset], kter´aud´av´a adresu v pamˇeti(tj. je to vlastnˇepointer), na kter´eje pr´avˇetento programov´yk´od,a kdyˇzv´ıme, kde hledat tento vektor, pak snadno m˚uˇzemespustit obsluhu pˇreruˇsen´ı,kter´enastalo, • vektory pˇreruˇsen´ı jsou uloˇzeny od adresy, kter´aje zn´am´anejen syst´emu, ale tak´evˇsempro- gram˚um,kaˇzd´yvektor obsahuje dva ´udaje, kaˇzd´yzab´ır´a2 B, tedy celkem vektor zab´ır´a4 B pamˇeti, • vektory jsou naskl´ad´any za sebou (v tabulce vektor˚upˇreruˇsen´ı, jej´ıˇzspr´avum´ana starosti BIOS), proto kdyˇzzn´ameˇc´ıslopˇreruˇsen´ı,kter´enastalo (pˇreruˇsen´ıjsou oˇc´ıslov´anaod 0), staˇc´ıprov´est v´ypoˇcet v´ychoz´ıadresa + ˇc´ıslopˇreruˇsen´ı 4, ∗ z´ısk´ameadresu, na kter´eje vektor pˇreruˇsen´ıs adresou k´oduobsluhuj´ıc´ıhopˇreruˇsen´ıs t´ımto ˇc´ıslem, • pokud je generov´anopˇreruˇsen´ı, je pˇreruˇsenbˇehprogramu a je zpracov´anaobsluha pˇreruˇsen´ı urˇcen´avektorem, potom m˚uˇzebˇehprogramu zase pokraˇcovat (MS-DOS nen´ımultitaskov´ysyst´em, plnohodnotnˇem˚uˇzebˇeˇzetjen jedin´yproces). Kapitola 7 Sprava´ periferi´ı 128

Pokud je implementov´anmultitasking, je samozˇrejmˇenutn´eobsluhu pˇreruˇsen´ırozˇs´ıˇrit,protoˇze generovan´epˇreruˇsen´ınemus´ıb´yturˇcenobˇeˇz´ıc´ıaplikaci a nav´ıcm˚uˇzeb´ytnadefinov´anovelk´emnoˇzstv´ı softwarov´ych pˇreruˇsen´ı.Potom se v´yˇsepopsan´ymzp˚usobem spravuj´ıpouze z´akladn´ıdruhy pˇreruˇsen´ı a vektory pˇreruˇsen´ı ukazuj´ı na ˇc´astimodulu obsluhy pˇreruˇsen´ı, kter´yshrom´aˇzd´ı informace o typu pˇreruˇsen´ı,adres´atovi a dalˇs´ıdata a to vˇsepoˇsle(napˇr´ıkladjako zpr´avu)adres´atovi. Adres´at(proces, kter´emu je pˇreruˇsen´ıurˇceno)m´apak definov´any vlastn´ıobsluˇzn´erutiny, kter´epak zpr´avud´alezpracuj´ı.  Linux. Po vykon´an´ıkaˇzd´einstrukce procesor zjist´ı,zda bˇehemjej´ıhovykon´av´an´ınedoˇslok vy- generov´an´ıpˇreruˇsen´ı,a jestliˇzeano, postupuje se n´asledovnˇe: 1. Bˇeˇz´ıc´ıproces je pˇreruˇsena zaˇrazendo nˇekter´efronty (obvykle fronta pˇripraven´ych proces˚u),jeho kontext je uloˇzen. 2. R´ızen´ıpˇrevezmeˇ operaˇcn´ısyst´em,resp. jeho modul pro obsluhu pˇreruˇsen´ı,kter´yzjist´ı,o jak´e pˇreruˇsen´ıjde a vytvoˇr´ıdatovou strukturu s ´udaji t´ykaj´ıc´ımise pˇreruˇsen´ı(typ, jak bylo vyvol´ano, souvisej´ıc´ıdata, . . . ), pokud takov´etostruktury jsou vyˇzadov´any. 3. Pokud kan´alpˇreruˇsen´ıpro dan´eIRQ nen´ısd´ılen,pˇr´ımose zavol´aobsluˇzn´arutina, pokud vˇsak je kan´alsd´ılen,volaj´ıse postupnˇevˇsechny obsluˇzn´erutiny registrovan´ena tento kan´al,dokud procesor nedostane ozn´amen´ı,ˇzebylo pˇreruˇsen´ıobslouˇzeno souˇc´ast´ıobsluˇzn´erutiny by mˇelob´ytzjiˇstˇen´ı,zda opravdu pˇreruˇsen´ıpoch´az´ıod zaˇr´ızen´ıpˇr´ıslu- ⇒ ˇsej´ıc´ıhodan´emu ovladaˇci. 4. Po proveden´ıobsluˇzn´erutiny je procesor pˇridˇelennˇekter´emu z pˇripraven´ych proces˚u(m˚uˇzeto b´yttent´yˇz,kter´ybyl pˇreruˇsen). Jak bylo v´yˇsenaps´ano,(sloˇzitˇejˇs´ı)ovladaˇcm˚uˇzeb´ytrozdˇelenna dvˇepoloviny – horn´ıkritickou, kter´a se mus´ıprov´esthned, a doln´ım´enˇekritickou, kter´a m˚uˇzechv´ılipoˇckat“. Doln´ıpolovina se d´aimple- ” mentovat nˇekolika r˚uzn´ymizp˚usoby. Nejbˇeˇznˇejˇs´ıjsou tyto: • tasklet (ˇcasov´akritiˇcnostnˇekdemezi obsluˇznourutinou a bˇeˇzn´ymprocesem, priorita m´ırnˇeniˇzˇs´ı neˇzobsluˇzn´arutina), spouˇst´ıse jako softwarov´epˇreruˇsen´ı na stejn´emprocesoru jako p˚uvodn´ı pˇreruˇsen´ı, • pracovn´ıfronta (priorita niˇzˇs´ı,obdobn´ajako u bˇeˇzn´ych proces˚u),bˇeˇz´ıv kontextu vl´aknaj´adra, je bˇeˇzn´ymzp˚usobem pl´anov´anana kter´emkoliv procesoru, • proveden´ı v r´amcisyst´emov´ehovol´an´ı, to znamen´av kontextu bˇeˇzn´ehoprocesu (nez´aleˇz´ı na rychlosti).

 Z´aklademevedence pˇreruˇsen´ıje tabulka deskriptor˚upˇreruˇsen´ı (Interrupt Descriptor Table, IDT, je plnˇev reˇziioperaˇcn´ıhosyst´emu), kter´apln´ıprakticky stejnou roli jako tabulka vektor˚upˇreruˇsen´ı MS-DOSu – ke kaˇzd´emu pˇreruˇsen´ıjsou zde vˇsechny potˇrebn´einformace, ale tˇech informac´ıje ponˇekud v´ıce.Ke kaˇzd´emu pˇreruˇsen´ıevidujeme adresy obsluˇzn´ych rutin (vˇcetnˇepotˇrebn´ych dat, jde o zˇretˇezen´y seznam, kaˇzd´apoloˇzka m´aukazatel na n´asleduj´ıc´ı),d´alestavov´einformace, statistick´einformace, a tak´e spinlock pro zajiˇstˇen´ıpostupn´ehovol´an´ıobsluˇzn´ych rutin. O zˇretˇezen´yseznam se jedn´a,protoˇzek jednomu IRQ se m˚uˇzev´azatv´ıceregistrac´ı(v´ıceregistro- van´ych zaˇr´ızen´ı)– sd´ılen´ı– a je tˇrebapro vˇsechny tyto registrace m´ıtuloˇzeny obsluˇzn´erutiny a dalˇs´ı informace. £ Na v´ıceprocesorov´em (v´ıcej´adrov´em)syst´emu existuje hlavn´ıˇradiˇcpˇreruˇsen´ıa pak kaˇzd´yprocesor (j´adro)m´asv˚uj vlastn´ılok´aln´ıˇradiˇcpˇreruˇsen´ı.Hlavn´ıˇradiˇcpˇreruˇsen´ırozdˇeluje pˇreruˇsen´ına jednotliv´e Kapitola 7 Sprava´ periferi´ı 129 procesory. Distribuce pˇreruˇsen´ıje zajiˇstˇena tabulkou pˇrerozdˇelov´an´ıpˇreruˇsen´ı (Interrupt Redirection Table, IRT), ve kter´eje stanoveno pro kaˇzd´epˇreruˇsen´ı,kter´eprocesory maj´ıtoto pˇreruˇsen´ıoˇsetˇrit. Pˇreruˇsen´ım˚uˇzeb´ytpˇreposl´anojednomu konkr´etn´ımu procesoru, nˇekolika vybran´ymprocesor˚um,vˇsem anebo tomu procesoru, na kter´empr´avˇebˇeˇz´ı´ulohas nejniˇzˇs´ıprioritou. Kromˇebˇeˇzn´ych pˇreruˇsen´ınajdeme ve v´ıceprocesorov´ych syst´emech nav´ıcpˇreruˇsen´ı,kter´aslouˇz´ı k zajiˇstˇen´ıkomunikace mezi procesory (meziprocesorov´apˇreruˇsen´ı). Moˇznostpouˇz´ıv´an´ıvlastn´ıtabulky deskriptor˚upˇreruˇsen´ısouvis´ıse schopnost´ıoperaˇcn´ıhosyst´emu vyuˇz´ıvat ACPI.

 Windows. Ve Windows obecnˇeplat´ıo pˇreruˇsen´ıch velk´aˇc´asttoho, co bylo naps´anov´yˇseo Linuxu, ale s urˇcit´ymiodliˇsnostmi. Pˇrisd´ılen´ı pˇreruˇsen´ı je takt´eˇztˇrebaevidovat pro kaˇzd´eIRQ cel´yseznam z´aznam˚u(registrac´ı, pro r˚uzn´azaˇr´ızen´ına toto IRQ nav´azan´a),pˇriˇcemˇzpokud pˇrijde pˇreruˇsen´ıs urˇcit´ymIRQ, mus´ıb´yt spuˇstˇenajedna konkr´etn´ı(ta spr´avn´a)obsluˇzn´arutina. Zat´ımcov UNIXov´ych syst´emech jsou postupnˇe spouˇstˇeny obsluˇzn´erutiny registrovan´ena dan´eIRQ a kaˇzd´az nich mus´ıtestovat, zda pˇreruˇsen´ıpˇriˇslo ˇcinepˇriˇslood n´ı,ve Windows je m´ıstotoho po sbˇernicipos´ıl´andotaz na zjiˇstˇen´ı,kter´ezaˇr´ızen´ıve skuteˇcnostisign´alposlalo, a spust´ıse jen ta jedin´aobsluˇzn´arutina. Dalˇs´ıodliˇsnostje ve zp˚usobuvyuˇz´ıv´an´ıpriorit v souvislosti s pˇreruˇsen´ımi.Ve Windows se setk´ame s ´urovnˇemiIRQL (jsou podrobnˇejipops´any v kapitole o synchronizaci, na stranˇe 104). Oproti tomu v Linuxu (a obecnˇev UNIXov´ych syst´emech) tento mechanismus nenajdeme, protoˇzenen´ıpˇrenositeln´y na r˚uzn´ehardwarov´eplatformy. Windows totiˇzbˇeˇz´ıjen na nˇekolika m´alor˚uzn´ych hardwarov´ych plat- form´ach, kdeˇzto UNIXov´esyst´emy existuj´ıpro velk´emnoˇzstv´ıplatforem.

7.5 Casovaˇceˇ

 Ve v´ypoˇcetn´ıch syst´emech rozliˇsujemenˇekolik r˚uzn´ych druh˚uˇcasu. Z´akladn´ıjsou • re´aln´yˇcas – zajiˇst’uj´ıho hodiny re´aln´ehoˇcasu(Real-Time Clock, RTC) nebo se zjiˇst’uje ze s´ıtˇe protokolem NTP (Network Time Protocol) nebo SNTP, znamen´apoˇcetsekund od roku 1970, • monot´onn´ıˇcas – poˇc´ıt´ase od startu syst´emu do jeho vypnut´ı, • ˇcasspotˇrebovan´yprocesorem – je odvozen od ˇcasu,po kter´ypracuje procesor (od sv´ehozapnut´ı). Re´aln´yˇcasse pouˇz´ıv´anapˇr´ıkladpro ˇcasov´araz´ıtka nebo pˇripl´anov´an´ıspouˇstˇen´ı ´ulohv konkr´etn´ı dobu. Monot´onn´ıˇcasse pouˇz´ıv´avˇsude,kde vad´ıpˇr´ıpadn´e´upravy ˇcasu,coˇzse u re´aln´ehoˇcasum˚uˇzest´at. Setk´amese s n´ımpˇrihl´ıd´an´ıˇcasovˇeomezen´ych nebo pravidelnˇese opakuj´ıc´ıch operac´ı. Casˇ spotˇrebovan´yprocesorem se pouˇz´ıv´apˇrisledov´an´ız´atˇeˇzesyst´emu a vyuˇz´ıv´an´ıprocesoru pro- cesy ˇcivl´akny.  Syst´emov´yˇcasovaˇc je obvod, kter´ygeneruje v pravideln´ych intervalech pˇreruˇsen´ı(tzv. pˇreruˇsen´ı od ˇcasovaˇce),tyto sign´alyse tak´enaz´yvaj´ı syst´emov´ytik. Je v´yznamn´ypro monot´onn´ıˇcas. Casˇ se vyuˇz´ıv´atak´epˇrivynucen´ıˇcek´an´ına zadanou dobu. Uloha´ m˚uˇzeb´ytusp´anana zadanou dobu, coˇzznamen´apasivn´ıˇcek´an´ı.V operaˇcn´ıch syst´emech obvykle m´amek dispozici funkci, kter´a volaj´ıc´ıproces (vl´akno)usp´ına zadanou dobu, napˇr´ıkladv Linuxu se setk´ames funkc´ı msleep(poˇcetmilisekund). Kapitola 7 Sprava´ periferi´ı 130

7.6 Spr´ava blokov´ych zaˇr´ızen´ı

7.6.1 Vlastnosti blokov´ych zaˇr´ızen´ı

 Blokov´azaˇr´ızen´ıse liˇs´ıod znakov´ych v mnoha ohledech. Kromˇebˇeˇzn´ehomnoˇzstv´ıpˇren´aˇsen´ych dat tak´eodliˇsn´ymzp˚usobem pˇr´ıstupuk tˇemto dat˚um,napˇr´ıkladje moˇzn´ese v proudu dat posouvat tak´ezpˇetnebo obecnˇena zadanou adresu (seek). Jeˇstˇev´yraznˇejˇs´ıodliˇsnostje ve zp˚usobupˇr´ıstupuk dat˚um.Zat´ımcopˇr´ıstupke znakov´ymzaˇr´ızen´ım b´yv´aobecnˇejednoduˇsˇs´ıa snadnˇejˇs´ı,pˇripˇr´ıstupuk blokov´ymzaˇr´ızen´ımobvykle (ne vˇzdy)vyuˇz´ıv´ame rozhran´ınab´ızen´esouborov´ymisyst´emy. Pamˇet’ov´am´edia jsou typick´ymz´astupcem blokov´ych zaˇr´ızen´ı, proto se zde budeme vˇenovat pˇredevˇs´ımtomuto typu zaˇr´ızen´ı.K blokov´ymzaˇr´ızen´ımm˚uˇzemetak´eˇradit nˇekter´avirtu´aln´ızaˇr´ızen´ı, napˇr´ıkladˇsifrovac´ımodul j´adra. Pˇr´ıstupk blokov´ymzaˇr´ızen´ımmus´ıb´ytˇr´adnˇepl´anov´ana synchronizov´an.K tomu ´uˇceluobvykle souˇz´ımodul j´adrazvan´yI/O Scheduler (I/O pl´anovaˇc).Tento modul spravuje fronty poˇzadavk˚una blokov´azaˇr´ızen´ıa s pouˇzit´ımtˇechto front pos´ıl´apoˇzadavky ovladaˇc˚umzaˇr´ızen´ı.  Jeden fyzick´ydisk m˚uˇzeb´ytrozdˇelenna v´ıce odd´ıl˚u (partitions, oblast´ı,svazk˚u,. . . ). Odd´ılymohou b´yt prim´arn´ı (primary partition), jeden z nich m˚uˇzeb´ytoznaˇcenjako rozˇs´ıˇren´y (extended partition) a d´alerozdˇelenna prakticky jak´ekoliv mnoˇzstv´ıodd´ıl˚u– pododd´ıl˚u“, kter´enaz´yv´amelogick´edisky. ” Na kaˇzd´emodd´ılum˚uˇzeb´ytnainstalov´anoperaˇcn´ısyst´em(pak jde o bootovac´ıodd´ıl)nebo to m˚uˇze b´ytdatov´yodd´ıl(bez operaˇcn´ıhosyst´emu).  Pˇriadresov´an´ıLBA m´akaˇzd´ysektor na disku svou adresu, coˇzje jedno ˇc´ıslo; kapacita disku a odd´ılu je omezena jak poˇctembit˚u, do kter´ych lze adresu sektoru uloˇzit,tak i velikost´ıtohoto sektoru. Takˇze pro zv´yˇsen´ımaxim´aln´ıkapacity disku a odd´ılum´amedvˇemoˇznosti– zv´yˇsitpoˇcetbit˚uadresy (coˇz m˚uˇzeb´ytprobl´em)nebo zvˇetˇsitvelikost sektoru. Sektor na bˇeˇzn´emdisku typicky obsahuje 512 B (1/2 KiB) dat. To vˇsakneplat´ıpro disky oznaˇcovan´e jako Advanced Format – tyto disky pouˇz´ıvaj´ı8 vˇetˇs´ısektory, do jednoho sektoru se vejdou 4 KiB dat. × Takˇzeposledn´ısektor, kter´yje nutn´ena nejniˇzˇs´ı´urovni adresovat pomoc´ıLBA, m˚uˇzeb´ytna disku d´al“ neˇzpˇripouˇzit´ıp˚uvodn´ıch kratˇs´ıch sektor˚u. ”  Dnes existuj´ıdva z´akladn´ıdruhy disk˚u: • bˇeˇzn´edisky MBR (Master Boot Record) • disky s dˇelen´ım GPT (GUID Partition Table) dˇr´ıve pouˇz´ıvan´ena platformˇeItanium (pro 64bitov´e servery), dnes ˇc´ımd´albˇeˇznˇejˇs´ıi na desktopech. MBR disky mohou m´ıtmaxim´alnˇe4 prim´arn´ıodd´ıly, z nichˇzjeden m˚uˇzeb´ytoznaˇcenjako rozˇs´ıˇren´y, v nˇemlze vytvoˇrit jak´ykoliv poˇcetlogick´ych disk˚u.GPT disky maj´ıtrochu jinou strukturu, mohou obsahovat aˇz128 odd´ıl˚u(rozˇs´ıˇren´eodd´ılya logick´edisky nejsou pouˇz´ıv´any).

7.6.2 Probl´emy s BIOSem

Pˇr´ıstupk disku p˚uvodnˇeprob´ıhalpˇres sluˇzby BIOSu. BIOS ve sv´estandardn´ıpodobˇevˇsaknedok´aˇze zpˇr´ıstupnitˇc´astidisku nad 8 GB (1024 cylindr˚u), proto v tomto starˇs´ımBIOS rozhran´ınemohou b´yt pouˇz´ıv´any vˇetˇs´ı disky. To se t´yk´adisk˚us rozhran´ım ATA a SATA, disky s rozhran´ım SCSI tento probl´emnemaj´ı. Kapitola 7 Sprava´ periferi´ı 131

Novˇejˇs´ırozhran´ıBIOSu jiˇznab´ız´ıpˇr´ıstupnad tuto hranici (pouˇz´ıv´atechnologii LBA – Logical Block Addressing), nen´ıvˇsakzpˇetnˇekompatibiln´ıa operaˇcn´ısyst´emy vyvinut´ebez podpory tohoto novˇejˇs´ıhorozhran´ınemohou tyto sluˇzby vyuˇz´ıvat. T´yk´ase to napˇr´ıkladMS-DOSu a Windows s DOS j´adrem(starˇs´ıch verz´ı). Novˇejˇs´ıoperaˇcn´ısyst´emy probl´emy s BIOSem ˇreˇs´ıpˇredevˇs´ımtak, ˇzepro pˇr´ıstupna disk pouˇz´ıvaj´ı m´ıstosluˇzebBIOSu vlastn´ıovladaˇce.BIOS je ale potˇrebapˇredvlastn´ımzaveden´ımtakov´ehooperaˇcn´ıho syst´emu, proto teoreticky zav´adˇec´ız´aznamoperaˇcn´ıhosyst´emu mus´ıb´ytna prvn´ıch 1024 cylindrech, prakticky nemus´ı,jak zjist´ımepozdˇeji.Nicm´enˇe,na novˇejˇs´ıch poˇc´ıtaˇc´ıch (z´akladn´ıch desk´ach) se jiˇz m´ıstoBIOSu setk´av´ames UEFI, kde v´yˇsepopsan´eprobl´emy nejsou.

7.6.3 Struktura MBR disku

 Do adresov´ych pol´ıve struktur´ach na MBR disku je moˇzn´euloˇzit jen ˇc´ısla,kter´ase vejdou do 32 bit˚u– pokud pouˇz´ıv´ameadresaci LBA. Z toho d˚uvodu je maxim´aln´ıvelikost odd´ılujen cca 2 TiB a adresa zaˇc´atkuodd´ıluse tak´emus´ıvej´ıtdo 32 bit˚u(tj. posledn´ıodd´ılna disku mus´ızaˇc´ınatna adres´ach pˇribliˇznˇekolem 2 TiB a jeho velikost je maxim´alnˇekolem 2 TiB, tj. celkov´avelikost disku je maxim´alnˇecca 4 TiB). Na obr´azku 7.2 je naznaˇcenastruktura MBR disku, kter´ybyl rozdˇelentakto: nejdˇr´ıvjsme vytvoˇrili dva prim´arn´ıodd´ıly, pak rozˇs´ıˇren´yodd´ıl,a potom dalˇs´ıprim´arn´ıodd´ıl.Pak jsme v rozˇs´ıˇren´emodd´ılu vytvoˇrilipostupnˇetˇrilogick´eodd´ıly. Pop´ıˇsemesi nˇekter´eˇc´astit´etostruktury.  Zkratka MBR znamen´a Master Boot Record – hlavn´ızav´adˇec´ız´aznamdisku. Zde najdeme hlavn´ı zav´adˇec´ız´aznam(instrukce pro BIOS, kter´eˇr´ıkaj´ı,co se m´ast´at,kdyˇzje poˇc´ıtaˇcspuˇstˇena m´ase

Prim´arn´ı Prim´arn´ı Prim´arn´ı odd´ıl1 odd´ıl2 Rozˇs´ıˇren´yodd´ıl(Prim. 3) odd´ıl4 z }| { z }| { z }| { z }| {

M E E E B B B B B B B B B B S S S S S S R R R R | {z } | {z } | {z } Logick´ydisk Logick´ydisk Logick´ydisk p p p p p p p p p p p | {z } p p p p p p vloˇzen´yrozˇs.odd´ıl p p p p p p p p p p p p p p p p p p p p p p p p p p| p {z } p p p p p p p p p vloˇzen´yrozˇs´ıˇren´yodd´ıl p p p p p p p p p p p Windows:p p p p p p p p p p p p p p p p p p p p p p p p p p p p C: p D: p p F: p p G: p p H: p E: p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p pLinux: p p p p p p p p p p p p p p p p p p p p p p p /dev/sdap p p p p p p p p p p p p p p p p p p p p p p p p p p /dev/sda1 p /dev/sda2 p p /dev/sda3 p p p /dev/sda4 p p p p p p p p p p p p p /dev/sda5 p p /dev/sda6 p p /dev/sda7 p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p pFreeBSD, MacOSp X: p p p p p p p p p p p p p p p p p p p p p p /dev/disk0p p p p p p p p p p p p p p p p p p p p p p p p p p p /dev/disk0s1 p /dev/disk0s2 p p /dev/disk0s3 p p p /dev/disk0s4 p p p p p p p p p p p p p/dev/disk0s3a p p/dev/disk0s3bp p /dev/disk0s3c p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p Obr´azek7.2:p Struktura MBRp p disku a oznaˇcen´ıvp p r˚uzn´ychp p operaˇcn´ıch syst´emechp p Kapitola 7 Sprava´ periferi´ı 132 zav´estoperaˇcn´ısyst´em),a tak´etabulku rozdˇelen´ıdisku. Hlavn´ızav´adˇec´ız´aznamzjist´ı,kter´yodd´ılje oznaˇcenjako aktivn´ı, a pak se pokus´ız tohoto odd´ıluzav´estoperaˇcn´ısyst´em(spust´ızav´adˇec´ıprogram tohoto odd´ılu).  Tabulka rozdˇelen´ıdisku (Partition Table) zab´ır´ana disku 64 B. M´aˇctyˇriz´aznamy (jeden pro kaˇzd´y prim´arn´ıodd´ıl– rozˇs´ıˇren´yodd´ıltak´epovaˇzujeme za prim´arn´ı),a v kaˇzd´emz´aznamu jsou o pˇr´ısluˇsn´em prim´arn´ımodd´ılutyto informace: • zda je aktivn´ı(aktivn´ıodd´ılm´azde hexadecim´aln´ıˇc´ıslo80, jinak 0), • kde se nach´az´ıboot sektor odd´ılu(tedy adresa zaˇc´atkuodd´ılu), • typ odd´ılu, zp˚usobjeho organizace (zde se rozliˇsuje,zda jde o rozˇs´ıˇren´yodd´ıl nebo o odd´ıl s nˇejak´ymkonkr´etn´ımsouborov´ymsyst´emem,kaˇzd´ysouborov´ysyst´emm´asv´eidentifikaˇcn´ıˇc´ıslo), • dalˇs´ı metriky (adresa konce odd´ılu, poˇcetsektor˚uod MBR k zaˇc´atkuodd´ılu, velikost odd´ılu v sektorech).  Zkratka BS znamen´a Boot Sector – zav´adˇec´ısektor odd´ılu.Je to ˇc´astodd´ılu,do kter´ebˇeˇznˇeuˇzivatel nem´apˇr´ıstup.V pˇr´ıpadˇe,ˇzeje na tomto odd´ılunainstalov´annˇekter´yoperaˇcn´ısyst´em,najdeme zde zav´adˇec´ıprogram tohoto operaˇcn´ıhosyst´emu. Zav´adˇec´ıprogram (boot loader, zavadˇeˇc)je program, jehoˇz´ukolem je zav´estoperaˇcn´ısyst´empˇri startu poˇc´ıtaˇcenebo v pˇr´ıpadˇeinstalace v´ıceoperaˇcn´ıch syst´em˚una disku umoˇznitv´ybˇerjednoho operaˇcn´ıhosyst´emu ze seznamu a spustit zav´adˇec´ıprogram vybran´ehooperaˇcn´ıhosyst´emu (pak se naz´yv´a boot manaˇzer). Pokud m´ameinstalov´anov´ıceoperaˇcn´ıch syst´em˚una v´ıceodd´ılech, pˇristartu poˇc´ıtaˇcese z MBR spust´ızav´adˇec´ıprogram pouze jednoho z nich. Tento program by pak mˇelumoˇznit pˇr´ıstupi k zav´adˇec´ımprogram˚umostatn´ıch syst´em˚u.  Zkratka EBR znamen´a Extended Boot Record – zav´adˇec´ız´aznamrozˇs´ıˇren´ehoodd´ılu.Je to obdoba MBR, obsahuje podobn´einformace. Tak´eje tu tabulka rozdˇelen´ı,tentokr´atrozˇs´ıˇren´ehoodd´ılu,a je zde m´ıstopro dva z´aznamy: pro jeden logick´ydisk (logick´yodd´ıl)a pak bud’ pro druh´ylogick´ydisk nebo pro vloˇzen´yrozˇs´ıˇren´yodd´ıl.Tento vloˇzen´yrozˇs´ıˇren´yodd´ılm˚uˇzeb´ytopˇetrozdˇelenna dvˇeˇc´asti (logick´ydisk a bud’ dalˇs´ılogick´ydisk nebo vnitˇrn´ıvloˇzen´yrozˇs´ıˇren´yodd´ıl),atd. To znamen´a,ˇzerozˇs´ıˇren´yodd´ılobsahuje jeden logick´ydisk (s n´ımse pak ve vˇetˇsinˇepˇr´ıpad˚uzach´az´ı stejnˇejako s prim´arn´ımiodd´ıly),a pokud tento logick´ydisk nezab´ır´acel´yrozˇs´ıˇren´yodd´ıl, ve voln´em m´ıstˇem˚uˇzeb´ytvnoˇren´yrozˇs´ıˇren´yodd´ıls vlastn´ımEBR. Ten opˇetm˚uˇzeobsahovat kromˇelogick´eho disku dalˇs´ıvnoˇren´yrozˇs´ıˇren´yodd´ıl,atd. Rozˇs´ıˇren´eodd´ılylze vnoˇrovat prakticky do jak´ekoliv ´urovnˇe a tak tvoˇritjak´ykoliv poˇcetlogick´ych disk˚ua t´ımi odd´ıl˚u.Kaˇzd´ylogick´ydisk tak´em´asv˚ujboot sektor.

7.6.4 Struktura GPT disku

 GPT je souˇc´aststandardu UEFI od spoleˇcnostiIntel. Jedn´ase jiˇzo 64bitov´ykoncept, coˇzd´av´a v´ıcemoˇznost´ıpˇriadresaci (tj. odd´ılymohou b´yti hodnˇevelk´e).Na GPT disc´ıch se pouˇz´ıv´av´yhradnˇe LBA adresace (CHS nen´ıv˚ubec podporov´ana). M˚uˇzemem´ıtaˇz128 odd´ıl˚una jednom GPT disku. Jeden odd´ılm˚uˇzepodle standardu zabrat aˇz 9.4 1021 B = 8 ZiB, ale tak velk´eodd´ılynejsou podporov´any operaˇcn´ımisyst´emy (tj. operaˇcn´ısyst´em × by mˇelprobl´ems vyuˇz´ıv´an´ıma adresov´an´ımtohoto odd´ılu),napˇr´ıkladWindows zvl´adnou max. odd´ıl o velikosti 18 EB.  Struktura GPT disku je naznaˇcenav tabulce 7.1. GPT tabulka (tabulka rozdˇelen´ı GPT disku zab´ır´acelkem 34 sektor˚u,z toho jeden sektor naz´yv´ame Protective MBR a jeho ´uˇcelemje zajiˇstˇen´ı Kapitola 7 Sprava´ periferi´ı 133

Protective MBR (1 sektor) zbytek GPT z´ahlav´ı(33 sektor˚u)

odd´ıly

kopie GPT z´ahlav´ı(34 sektor˚u)

Tabulka 7.1: Z´akladn´ıstruktura GPT disku kompatibility se starˇs´ımisyst´emy. Operaˇcn´ısyst´em,kter´ynepodporuje GPT, povaˇzujetakov´ydisk za bˇeˇzn´yMBR disk s jedn´ımodd´ılem,v nˇemˇzjsou pro nˇejneˇciteln´adata (ale pozn´a,ˇzejde o disk, a to staˇc´ı).Zbytek GPT z´ahlav´ıje prim´arn´ıGPT tabulka. V prim´arn´ıGPT tabulce najdeme tyto informace: • verze GPT, velikost z´ahlav´ı, • kontroln´ısouˇcetz´ahlav´ı(poˇc´ıt´ase s t´ımto polem nulov´ym), • LBA adresa tohoto a z´aloˇzn´ıhoGPT z´ahlav´ı(to z´aloˇzn´ıje na konci disku), • LBA adresa prvn´ıhoodd´ılu,posledn´ıadresa LBA pouˇziteln´apro odd´ıly(tj. posledn´ısektor tˇesnˇe pˇredz´aloˇzn´ıGPT tabulkou), • GUID disku, v UNIXov´ych syst´emech se oznaˇcujeUUID, • ´udaje o odd´ılech (pole z´aznam˚uo odd´ılech, pˇredt´ımto polem jsou ´udaje o samotn´empoli – poˇcet poloˇzekapod.).

 V poli z´aznam˚uo odd´ılech (na konci GPT tabulky a vlastnˇecel´ehoGPT z´ahlav´ı)najdeme poloˇzky ke kaˇzd´emu odd´ıluna disku, poloˇzka obsahuje tyto informace: • GUID typu odd´ılu,pak GUID samotn´ehoodd´ılu(kaˇzd´y16 B), • adresa zaˇc´atkua konce odd´ılu(kaˇzd´a8 B), • atributy (8 B), napˇr´ıkladread-only, syst´emov´y,skryt´y, • n´azevodd´ılu(72 B). N´asleduj´ıodd´ılya na konci disku je z´aloˇzn´ıGPT z´ahlav´ı(kopie prim´arn´ıhoz´ahlav´ı).

 Pozn´amka: Aby operaˇcn´ısyst´embyl schopen k disku pˇristupovat a ide´alnˇez nˇejtak´ebootovat, mus´ıs n´ımb´yt kompatibiln´ı.V pˇr´ıpadˇeWindows to je od verze Vista, u Linuxu a jin´ych UNIXov´ych syst´em˚unen´ı probl´ems jakoukoliv novˇejˇs´ıverz´ı(starˇs´ısamozˇrejmˇeinstalovat nebudeme). Co se t´yˇcezavadˇeˇc˚u,Grub verze 2 podporuje GPT disky. 

7.6.5 N´astroje pro spr´avudisk˚u

Pro MBR disky plat´ı,ˇzemohou m´ıtnejv´yˇse4 prim´arn´ıodd´ıly(primary partition), z nichˇzjeden m˚uˇze b´ytrozˇs´ıˇren´y(extended partition) a v nˇemjak´ykoliv poˇcetlogick´ych disk˚u(logical volume, logical disk, Kapitola 7 Sprava´ periferi´ı 134 logical partition, . . . ). Odd´ılm˚uˇzeb´ytsyst´emov´y(s instalovan´ymoperaˇcn´ımsyst´emem)nebo datov´y (obsahuje pouze data) nebo odkl´adac´ı(swap, obvykl´eu UNIXov´ych syst´em˚u). N´astroje pro spr´avudisk˚uby pˇredevˇs´ımmˇelyumˇetvytv´aˇreta ruˇsitvˇsechny tyto druhy odd´ıl˚u. Castoˇ m´ıvaj´ıjeˇstˇejin´efunkce. Nˇekter´ez nich jsou urˇceny pro pr´aciv urˇcit´emoperaˇcn´ımsyst´emu a jsou s n´ımdod´av´any, jin´ejsou v tomto ohledu nez´avisl´e.U vˇetˇsiny n´astroj˚upro pr´acis odd´ılyna disku plat´ı,ˇzebychom mˇelipˇredemodpojit kaˇzd´yodd´ıl,kter´ychceme modifikovat (zruˇsitnebo zmˇenit velikost). J N´astroje pro Windows. Nejdˇr´ıvse pod´ıv´amena n´astroje pro manipulaci s disky a diskov´ymi odd´ıly: fdisk firmy Microsoft: N´azev fdisk je u program˚us t´ımto urˇcen´ımcelkem obvykl´y.fdisk od firmy Microsoft, kter´yje dod´av´ans Windows ˇradys DOS j´adrem,m´ajen velmi omezen´evlastnosti. Pracujeme v textov´emreˇzimu, na pevn´emdisku m˚uˇzemevytvoˇritpouze jedin´yprim´arn´ıodd´ıl a jedin´yrozˇs´ıˇren´y,v tom pak jak´ekoliv mnoˇzstv´ılogick´ych. Neumoˇzˇnujenedestruktivn´ızmˇenu hranic odd´ılu(na modifikovan´ych odd´ılech jsou data prakticky zniˇcena). Konzola Spr´avadisk˚u: Ve Windows ˇradyNT existuje n´astroj s grafick´ymrozhran´ım.Spust´ımeho pˇr´ıkazem diskmgmt.msc nebo v grafick´emrozhran´ıho najdeme napˇr´ıkladv konzole Spr´avapoˇc´ıtaˇce (kontextov´emenu ikony Tento poˇc´ıtaˇc, volba Spravovat). Na rozd´ılod samotn´ehofdisku zde nav´ıc m˚uˇzemepro odd´ılzvolit urˇcit´ysouborov´ysyst´em(FAT32, NTFS). Diskpart je souˇc´ast´ıWindows od verze Vista a Server 2008. Jedn´ase o interaktivn´ıtextovou konzolu pro pokroˇciloupr´acis disky a odd´ılyna disku. FSUtil je n´astroj umoˇzˇnuj´ıc´ı pracovat pˇredevˇs´ım se souborov´ymsyst´ememNTFS (ale i s FAT syst´emy), lze j´ımprov´adˇetprakticky cokoliv, co souvis´ıs tˇemitosouborov´ymisyst´emy (vˇcetnˇe spr´avykv´ot). mountvol dok´aˇzepˇripojit odd´ılnejen pod p´ısmenem,ale tak´edo adres´aˇre(pˇr´ıpojn´ybod) stejnˇejak je to bˇeˇzn´ev UNIXov´ych syst´emech. fips je progr´amek,kter´yum´ızmenˇsitWindows odd´ıly. Je dod´av´antak´es nˇekter´ymilinuxov´ymidis- tribucemi, coˇzje uˇziteˇcn´e,kdyˇzpotˇrebujemena disku zmenˇsitm´ısto,kter´edo t´edoby uzurpovaly Windows, a nainstalovat tam jin´yoperaˇcn´ısyst´em. Partition Magic je komerˇcn´ı program pracuj´ıc´ı pod Windows. Vyznaˇcujese propracovan´ymgra- fick´ymprostˇred´ım,umoˇzˇnuje kromˇevytv´aˇren´ıa ruˇsen´ıodd´ıl˚utak´ezmˇenu jejich velikosti (nede- struktivn´ı,data z˚ustanouzachov´ana). Dalˇs´ı: Ranish Partition Manager, DiskDrake, . . . , a tak´enˇekter´eboot manaˇzeryv sobˇezahrnuj´ı moˇznostpracovat s odd´ılydisk˚u. K program˚umpro spr´avudisku m˚uˇzemeˇradit tak´eprogramy vytv´aˇrej´ıc´ı obraz disku (diskov´eho odd´ılu).Nˇekter´eprogramy dok´aˇzoupracovat pouze s odd´ılys urˇcit´ymisouborov´ymisyst´emy, jin´ym je to celkem jedno. Tato funkce m˚uˇzeb´ytzahrnuta v univerz´alnˇejˇs´ımprogramu urˇcen´emobecnˇepro spr´avudisk˚u,nebo lze pouˇz´ıtspecializovan´eprogramy. Z nejzn´amˇejˇs´ıch pro Windows: Norton Ghost, Drive Image, True Image, Power Quest, Drive Backup. £ Speci´aln´ımtypem n´astroj˚upro pr´acis disky jsou n´astroje pro zajiˇstˇen´ıintegrity dat. Ve Windows se setk´ame s tˇemito: • chkntfs – ˇr´ızen´ınapl´anov´an´ıkontroly disk˚upˇredspuˇstˇen´ım Windows, tak´em˚uˇzemezjistit, jestli disk nen´ıoznaˇcenjako dirty“ (nastaven´ıdirty bitu) ” Kapitola 7 Sprava´ periferi´ı 135

• autochk – spouˇst´ıse vˇzdypˇredstartem syst´emu a kontroluje, jestli nˇekter´ydisk nem´anastaven dirty bit, nelze spustit, kdyˇzbˇeˇz´ıWindows • chkdsk – prov´ad´ısamotnou kontrolu disku, b´yv´aspuˇstˇenprogramem autochk pˇredstartem Win- dows, pokud je zjiˇstˇennˇekter´ydirty bit Tyto n´astroje nejsou ˇcasto povaˇzov´any za dostaˇcuj´ıc´ı, proto se pro tyto ´uˇcelyˇcastopoˇrizuj´ı jin´e n´astroje. Firmy obvykle pouˇz´ıvaj´ı nˇekter´ykomerˇcn´ı produkt, ale existuj´ı i kvalitn´ı volnˇeˇsiˇriteln´e n´astroje (napˇr´ıkladMHDD nebo HDDScan). J N´astroje pro Linux. Opˇetse nejdˇr´ıvpod´ıv´amena n´astroje pro manipulaci s disky a diskov´ymi odd´ıly: fdisk dod´avan´ys Linuxem: Program fdisk dod´avan´ys Linuxem sice tak´epˇrij´ım´apˇr´ıkazy v textov´em reˇzimu (vyb´ır´amez textov´ehomenu tisknut´ım kl´aves na kl´avesnici), um´ı vˇsakmnohem v´ıce. Kromˇevytv´aˇren´ı a ruˇsen´ı odd´ıl˚um˚uˇzemeurˇcitsouborov´ysyst´emodd´ılu (jsou podporov´any r˚uzn´esouborov´esyst´emy vˇcetnˇenelinuxov´ych a tak´eswap pro Linux). Existuje uˇzivatelsky ” pˇr´ıvˇetivˇejˇs´ı“ varianta – cfdisk. Program fdisk spouˇst´ımeobvykle s urˇcen´ımpevn´ehodisku, se kter´ymchceme pracovat, napˇr. fdisk /dev/sda. GNU Parted, QtParted, GParted jsou programy pracuj´ıc´ı pod Linuxem. GNU Parted je nejjed- noduˇsˇs´ı,kromˇevytv´aˇren´ı,ruˇsen´ıa zmˇeny velikosti odd´ıl˚uumoˇzˇnujenapˇr´ıkladtak´evytvoˇren´ı obrazu disku (odd´ılu).GParted (Gnome Partition Editor) je program dod´avan´ys prostˇred´ım Gnome, v konkr´etn´ıdistribuci m˚uˇzeexistovat pod jin´ym n´azvem. Jeho grafick´erozhran´ıa moˇz- nosti jsou podobn´ePartition Magicu. QtParted je obdobou GParted pro prostˇred´ıKDE. PartImage je n´astroj pro vytv´aˇren´ıobraz˚udisk˚u,i kdyˇzlze pouˇz´ıtuniverz´aln´ıtextov´eˇreˇsen´ı(pˇr´ıkaz dd, kter´yvytvoˇr´ısouvisl´ysoubor, do nˇehoˇznasmˇerujemevstup z pˇr´ısluˇsn´ehospeci´aln´ıhosou- boru). Existuje pomˇernˇemnoho linuxov´ych distribuc´ıurˇcen´ych pˇr´ımopro spr´avu(z´achranu) disk˚u,napˇr´ıklad System Rescue CD (zachraˇnujenejen Linux, ale i Windows, jsou zde i n´astroje pro pr´acis registrem). £ Obecnˇeplat´ı,ˇzev Linuxu najdeme velk´emnoˇzstv´ın´astroj˚upro pr´acis disky. Napˇr´ıkladv textov´em shellu m˚uˇzemepro jejich (ne zcela ´upln´y)v´ypispouˇz´ıtpˇr´ıkaz apropos disk, v jehoˇzv´ystupubude hodnˇe pˇr´ıkaz˚upro pr´acis disky. Nˇekter´ez nich zn´ame,s jin´ymijsme se jeˇstˇenesetkali. Napˇr´ıklad: • pˇripojov´an´ıa odpojov´an´ıodd´ıl˚us r˚uzn´ymivlastnostmi (mount), • sledov´an´ıS.M.A.R.T (smartctl), • pr´acis LVM (napˇr. LVM2 tools), • vytv´aˇren´ısouborov´ych syst´em˚u(mkfs a varianty pro r˚uzn´esouborov´esyst´emy), • kontrolu souborov´ych syst´em˚u(fsck a varianty pro r˚uzn´esouborov´esyst´emy), • pr´acis DOS/Win odd´ıly (mtools, r˚uzn´eovladaˇceWin souborov´ych syst´em˚u),atd.

7.6.6 Zav´adˇec´ıprogramy

 Kaˇzd´yoperaˇcn´ısyst´emobvykle obsahuje alespoˇnjeden zav´adˇec´ıprogram. Ukolem´ zav´adˇec´ıhopro- gramu je pˇredevˇs´ımtento operaˇcn´ısyst´emzav´est,tedy ve stanoven´empoˇrad´ıspustit procesy potˇrebn´e k bˇehu syst´emu vˇcetnˇeproces˚uj´adra.To je ovˇsemhodnˇezjednoduˇsen´ypopis ˇcinnosti zav´adˇec´ıhopro- gramu, protoˇzekaˇzd´yoperaˇcn´ısyst´emm´apro sv´espouˇstˇen´ıurˇcit´aspecifika a tedy i kaˇzd´yzav´adˇec´ı Kapitola 7 Sprava´ periferi´ı 136 program pracuje ´uplnˇejin´ymzp˚usobem, nav´ıcto, co se prov´ad´ıpˇredvlastn´ımspuˇstˇen´ımj´adra,ˇcasto jeˇstˇenelze nazvat procesem (nem´asv´ePID, nem´aoperaˇcn´ımsyst´emem pˇridˇelen´esyst´emov´ezdroje, atd.).  Boot Manaˇzer je program, kter´yumoˇzˇnujespravovat zav´adˇen´ısyst´em˚una vyˇsˇs´ı´urovni. Obvykle nab´ız´ıpˇredevˇs´ımmoˇznostv´ybˇeruz nainstalovan´ych syst´em˚u(pokud je jich v´ıce),pˇr´ıpadnˇeskr´yv´an´ı nˇekter´ych diskov´ych oblast´ı. Protoˇzedneˇsn´ızavadˇeˇcejsou ponˇekudrozs´ahlejˇs´ıa kromˇevlastn´ıhoprogramu potˇrebuj´ıtak´epro- stor pro sv´ekonfiguraˇcn´ısoubory, b´yvaj´ı v´ıcestupˇnov´e: • Prvn´ıstupeˇnje v MBR; protoˇzeje zde jen velmi m´alom´ısta,najdeme v MBR pouze nejz´akladnˇejˇs´ı k´od. • Druh´ystupeˇnje v Boot Sektoru (Boot Bloku) odd´ılu,na kter´emje operaˇcn´ısyst´emnainstalov´an, 512 B. Pro nˇekter´ejednoduˇsˇs´ızavadˇeˇceto staˇc´ı. • Tˇret´ıstupeˇnse nach´az´ıv bˇeˇzn´emsouboru uvnitˇrodd´ılu.Tato ´uroveˇnje typick´apro rozs´ahlejˇs´ı zavadˇeˇces grafick´ymrozhran´ım. Probereme si postupnˇenˇekter´ezavadˇeˇcea jejich vlastnosti. ZavadˇeˇcWindows 9x/ME je jednoduch´yzavadˇeˇc,kter´ykromˇesv´ehovlastn´ıhooperaˇcn´ıho syst´emu dok´aˇzezav´estnanejv´yˇsstarˇs´ıverzi Windows (MS-DOSu), napˇr.MS-DOS + Windows 3.1. Konfigurace se prov´ad´ıv souboru BOOT.INI na disku C:, zavadˇeˇcse vˇzdynainstaluje do MBR a boot sektoru disku C:. Vyˇzaduje,aby disk C: byl prim´arn´ı odd´ıl. Zobrazuje pouze textov´yv´ystup,ne- umoˇzˇnujet´emˇeˇrˇz´adnoukonfiguraci (pseudo)grafick´ehoprostˇred´ı(aˇzna barvy). V omezen´em´ıˇrelze ve starˇs´ıch Windows pouˇz´ıvat menu urˇcuj´ıc´ı, co m´ab´ytspuˇstˇeno(vˇcetnˇe Windows), a to v konfiguraˇcn´ıch souborech CONFIG.SYS a AUTOEXEC.BAT (informace viz [29], [25]). Pokud byl pˇreps´anMBR obsahuj´ıc´ıprvn´ıf´azitohoto zavadˇeˇce(vlastnˇecel´ytento zavadˇeˇc),pouˇzi- jeme bootovac´ım´edium(typicky disketu) obsahuj´ıc´ıprogram fdisk a zad´amepˇr´ıkaz fdisk /mbr. Obsah MBR bude automaticky opraven (naplnˇent´ımto zavadˇeˇcem). J ZavadˇeˇcWindows NT/2000/XP (NTLoader) um´ıspouˇstˇetsv˚ujoperaˇcn´ısyst´emi z jin´eho disku neˇzC:. Je to jednoduch´yboot manaˇzer,kter´yvˇsakdok´aˇzepracovat pouze s Windows odd´ıly ( vid´ı“ pouze odd´ıly se souborov´ymsyst´ememFAT nebo NTFS). Instaluje se vˇzdydo MBR a boot ” sektoru pˇr´ısluˇsn´ehodisku se syst´emem(napˇr.D:). £ O konfiguraci grafick´eho/pseudografick´ehoprostˇred´ıplat´ınˇecopodobn´ehojako u zavadˇeˇceWin- dows 9x/ME, konfigurovatelnost je velmi omezen´a.Kromˇez´aznamu v MBR je v souboru ntldr do- stupn´ydruh´ystupeˇn(fyzicky se nach´az´ıv boot bloku), a patˇr´ızde tak´epomocn´esoubory boot.ini a bootfont.bin, to vˇseje vˇzdyna disku C: (i v pˇr´ıpadˇe, ˇzeoperaˇcn´ısyst´emzavadˇeˇceje na jin´em disku). Konfiguraci prov´ad´ımebud’ pˇr´ımov souboru boot.ini anebo na nˇekter´ych m´ıstech v grafick´em rozhran´ı(napˇr´ıkladk obsahu tohoto souboru se tak´edostaneme z Vlastnost´ı pˇresikonu Tento poˇc´ıtaˇc). Pokud byl z´aznamv MBR pˇreps´an,pak v Konzole pro zotaven´ı(z instalaˇcn´ıhoCD) zad´ame fixmbr, pˇr´ıpadnˇe fixboot. Tam tak´enajdeme program bootcfg. Pokud je tento zavadˇeˇc(vlastnˇei pˇredchoz´ı)instalov´anaˇzpo instalaci jin´ehozavadˇeˇce(napˇr.linu- xov´eho),bez skrupul´ıpˇrep´ıˇsestarˇs´ıodkaz v MBR, takˇzese ˇcastoproti v˚uliuˇzivatele stane prim´arn´ım zavadˇeˇcem.D˚usledkem je pak nemoˇznostspustit p˚uvodn´ızavadˇeˇca t´ımi p˚uvodn´ıoperaˇcn´ısyst´em. Tento probl´emje sice ˇreˇsiteln´y,ale je lepˇs´ı mu pˇredej´ıt vhodn´ymˇclenˇen´ım posloupnosti instalace syst´em˚unebo alespoˇnvˇcasn´ymz´alohov´an´ımp˚uvodn´ıhozavadˇeˇcena extern´ım´edium. Kapitola 7 Sprava´ periferi´ı 137

J ZavadˇeˇcWindows Vista SP1 a 7 je oproti pˇredchoz´ımu rozdˇelenna dvˇeˇc´asti: 1. BootManager (soubor bootmgr), kter´ypln´ıroli boot manaˇzera(umoˇzˇnujevyb´ıratze seznamu nainstalovan´ych syst´em˚u), 2. Windows Loader (winldr.exe je vlastn´ı zavadˇeˇcWindows, k nˇemu se tak´eˇrad´ı program pro obnovu z hibernace (winresume.exe) a dalˇs´ıpomocn´esoubory. Pˇredopravn´ymbal´ıˇckem SP1 se pouˇz´ıval p˚uvodn´ı ntldr. D´ıkyt´eto´upravˇesi Windows od verze Vista SP1 rozum´ıs novˇejˇs´ıgenerac´ıBIOSu, EFI. £ Konfigurace se prov´ad´ı n´astrojem BCDEdit.exe (textov´erozhran´ı), ale existuj´ı i n´astroje volnˇe ke st´ahnut´ına Internetu – obl´ıben´ymn´astrojem je napˇr´ıklad EasyBCD od NeoSmart Technologies (grafick´erozhran´ı)dostupn´yna http://neosmart.net/EasyBCD/. Opravu lze prov´adˇetz prostˇred´ıWindows PE, o kter´emjsme si ˇr´ıkali na cviˇcen´ıch.

J ZavadˇeˇcWindows 8 a vyˇsˇs´ıch verz´ı funguje stejnˇejako zavadˇeˇcWindows 7, vˇcetnˇemoˇznost´ı konfigurace. Rozd´ılje v tom, ˇzetento zavadˇeˇcjiˇzvynucuje pouˇzit´ıEFI/UEFI m´ıstostar´ehoBIOSu.  Od Windows 8 Microsoft zav´ad´ıfunkci Secure Boot (tak´eTrusted Boot). Tato funkce stav´ına moˇznostech (U)EFI a spoˇc´ıv´av tom, ˇzeje blokov´anaˇcinnost ˇcehokoliv, co nem´aten spr´avn´ycertifik´at. Typicky se tento fakt m˚uˇzeprojevovat n´asledovnˇe:Koup´ımesi certifikovan´y poˇc´ıtaˇcs pˇredinstalovan´ym syst´ememWindows 8. Pokus o instalaci jin´ehooperaˇcn´ıhosyst´emu (at’ uˇzm´ıstoWindows 8 nebo vedle Windows 8) se nepovede. FunkˇcnostSecure Bootu spoˇc´ıv´av tom, ˇzev´yrobce hardwaru vloˇz´ıdo firmwaru certifik´at,kter´y slouˇz´ı ke kontrole, zda bootuje (l´epe ˇreˇcenopracuje v Ring0, tedy se jedn´ao jakoukoliv ˇcinnost v reˇzimu j´adra)syst´empodepsan´yt´ımto certifik´atem.Pokud dotyˇcn´yk´odnen´ıpodeps´an,nelze ho spustit (syst´emby se mˇelrestartovat a umoˇznitbootov´an´ınˇeˇcemu, co je podeps´ano)a vlastnˇeani nainstalovat. Moˇznostiˇreˇsen´ı: 1. Producent jin´ehooperaˇcn´ıhosyst´emu koup´ıod Microsoftu povolen´ıpouˇz´ıvat jeho certifik´at,resp. nech´asi sv˚ujcertifik´atMicrosoftem podepsat. 2. Tak jako Microsoft pˇrimˇelv´yrobce hardwaru, aby do firmwaru vloˇzilijeho certifik´at,jin´yprodu- cent tak´em˚uˇzepˇresvˇedˇcovat v´yrobce hardwaru, aby tot´eˇzudˇelalis jeho certifik´atem.Ovˇsem– v´yrobc˚uje spousta a nen´ıˇreˇceno,ˇzedistributor˚umLinuxu budou vych´azet vstˇr´ıc.V´ıme,v jak´em stavu je napˇr´ıkladpodpora programov´an´ıovladaˇc˚u. 3. Funkci Secure Boot by mˇelob´ytmoˇzn´evypnout v BIOS Setup (vlastnˇev rozhran´ıEFI). To vˇsak nelze u procesor˚uARM, a na jin´ych architektur´ach (x86, amd64) z´aleˇz´ına v´yrobci (vyskytuj´ıse i pˇr´ıpadystroj˚us touto architekturou, kde Secure Boot nelze vypnout). 4. Vedlejˇs´ımefektem nˇekter´ych aktualizac´ıfirmwaru m˚uˇzeb´ytpoˇskozen´ıˇcinnostialgoritmu Secure Boot, d˚usledkem je stejn´echov´an´ı,jako kdyˇzje Secure Boot vypnuta. Ale k tomuto efektu doch´az´ı naprosto nahodile, nem˚uˇzemeˇr´ıct,ˇzekdyˇznainstalujeme urˇcitoukonkr´etn´ıaktualizaci, Secure Boot pˇrestaneprovˇeˇrovat k´od.

Pokud m´ameinstalov´any Windows 8, je tˇrebapouˇz´ıttento postup: na panelu S´emˇ zvol´ıme Zmˇenit nastaven´ıpoˇc´ıtaˇce ¶ Obecn´e ¶ Spuˇstˇen´ıs upˇresnˇen´ymnastaven´ım ¶ Restartovat ted’, po restartov´an´ı poˇc´ıtaˇcese zobraz´ıstartovac´ınab´ıdka, ve kter´evybereme Pouˇz´ıtzaˇr´ızen´ı ¶ EFI USB Device. A nav´ıc je moˇzn´e,ˇzepˇrecejen budeme muset nˇekter´ymz v´yˇseuveden´ych zp˚usob˚uvyˇraditSecure Boot. Kapitola 7 Sprava´ periferi´ı 138

 Pozn´amka: Dnes uˇzvˇetˇs´ılinuxov´edistribuce (vˇcetnˇeUbuntu) maj´ık dispozici certifik´at,takˇzese Secure Boot neb´yv´aaˇztakov´yprobl´em. 

Dalˇs´ıinformace:  • https://wiki.ubuntu.com/SecurityTeam/SecureBoot • http://www.root.cz/clanky/secure-boot-nepodepsanym-systemum-vstup-zakazan/ • http://www.pcworld.com/article/2027864/secure-boot-loader-now-available-to-allow-linux-to-work-on-windows- 8-pcs.html

 J LILO (LInux LOader) je zavadˇeˇcpouˇz´ıvan´ypro Linux na HW platformˇex86 a amd64. Je to univerz´aln´ızavadˇeˇcschopn´yspolupr´aces prakticky vˇsemizn´amˇejˇs´ımisouborov´ymisyst´emy, tedy neb´yv´aprobl´ems jeho pouˇz´ıv´an´ım. £ Konfigurace je uloˇzenav souboru /etc/lilo.conf, konfiguruje se zde pˇredevˇs´ımobsah menu (kter´e syst´emy se maj´ızav´esta kde je hledat). M´amena vybranou mezi LILO v textov´emreˇzimu a LILO v grafick´em reˇzimu. O konfiguraci LILO jsou informace napˇr.na [42]. Velkou nev´yhodou LILO je pˇredevˇs´ımnutnost po kaˇzd´ekonfiguraci pˇreinstalovat tento zavadˇeˇc(to se prov´ad´ıspuˇstˇen´ımprogramu /sbin/lilo), tedy po kaˇzd´ezmˇenˇev konfiguraˇcn´ıch souborech je pˇreps´anMBR sektor i Boot blok.

J GRUB (GRand Unified Boot loader) je zavadˇeˇcpouˇz´ıvan´ypro Linux na HW platformˇex86 a amd64. Je to univerz´aln´ızavadˇeˇcspolupracuj´ıc´ıse vˇsemibˇeˇzn´ymisouborov´ymisyst´emy. V´yhodou je v´ybornˇepropracovan´eskr´yv´an´ı odd´ıl˚u,kter´em˚uˇzeslouˇzitnapˇr´ıklad pˇriinstalaci dalˇs´ıhooperaˇcn´ıhosyst´emu, pokud tento syst´emchceme pˇresvˇedˇcit,ˇzeje instalov´anna prvn´ıprim´arn´ı odd´ıl,i kdyˇzve skuteˇcnostitomu tak nen´ı. Dalˇs´ıv´yhodou, ˇcastovyuˇz´ıvanou program´atory, je moˇznostsi pˇristartu syst´emu urˇcit,kter´ej´adro Linuxu bude naˇcteno.M˚uˇzemem´ıtinstalov´anov´ıcer˚uzn´ych jader s r˚uzn´ymivlastnostmi (napˇr´ıklad pˇreloˇzen´ejako preemptivn´ınebo nepreemptivn´ı,r˚uzn´everze, apod.) a pˇristartu Linuxu pouˇz´ıtkter´ekoliv z tˇechto jader. £ Prvn´ıverze GRUBu se konfigurovala ponˇekudtˇeˇzkop´adnˇe,ale dnes se prakticky v´yhradnˇepouˇz´ıv´a GRUB verze 2, jehoˇzkonfigurace je uloˇzenapˇredevˇs´ımv souboru /boot/grub/grub.cfg. Ovˇsem tento soubor se pˇr´ımonesm´ıeditovat. Konfigurace se d´amˇenit • v grafick´emrozhran´ı(z´aleˇz´ı,jakou m´amedistribuci), je to program grub-customizer (m˚uˇzese jmenovat trochu jinak, vˇetˇsinoupˇreloˇzen´ydo pˇr´ısluˇsn´ehojazyka), • v souboru /etc/default/grub (to nen´ıprobl´em, je dobˇreokomentovan´y),pˇriˇcemˇzpo proveden´ı zmˇenspust´ımeprogram update-grub (coˇzje i poznamen´anov z´ahlav´ıkonfiguraˇcn´ıhosouboru).

Skripty spouˇstˇen´epˇrivolbˇekonkr´etn´ıch poloˇzekv grub menu najdeme v adres´aˇri /etc/grub.d. V n´azvu skript˚uje tak´eurˇcenopoˇrad´ı,v jak´emse maj´ızobrazovat v nab´ıdce. Kapitola 7 Sprava´ periferi´ı 139

GRUB se vyznaˇcujevlastn´ımn´azvoslov´ımt´ykaj´ıc´ımse identifikace disk˚u.Pevn´edisky oznaˇcuje postupnˇe hd0 (m´ısto sda), hd1 (m´ısto sdb), . . . , odd´ılyna disc´ıch se znaˇc´ıˇc´ıslyod 0. Vznikl´edvojice (pevn´ydisk, odd´ıl)mohou b´ytnapˇr´ıklad • (hd0,0) = nult´yodd´ılna prvn´ımdisku = sda0, u pevn´ehodisku MBR sektor, • (hd0,1) = prvn´ıodd´ılna prvn´ımdisku = sda1, • (hd1,1) = prvn´ıodd´ılna druh´emdisku = sdb1, • (fd0) = disketa, atd.

Dalˇs´ılinuxov´ezavadˇeˇce: aBoot, MILO (oba pro architekturu alpha), SILO (architektura sparc), yaBoot (architektura ppc – PowerPC), PALO (architekruta hppa), . . .

XOSL, OS Selector, EasyBoot, Smart Boot Manager, . . . jsou univerz´aln´ıboot manaˇzery. Nˇekter´ekomerˇcn´ı (napˇr.OS Selector), jin´evolnˇeˇsiˇriteln´e(napˇr.XOSL). Kaˇzd´ym´asv´especifick´e vlastnosti. Obvykle dovoluj´ıvybrat ze seznamu operaˇcn´ıch syst´em˚u,po v´ybˇeruspust´ıpˇr´ısluˇsn´yzavadˇeˇc. Vˇetˇsinoudok´aˇzoutak´eskr´yvat odd´ılystejnˇejako GRUB. Omezen´ıse t´ykaj´ıvˇetˇsinousouborov´eho syst´emu nebo odd´ılu,na kter´yjsou tyto programy instalov´any (mnoh´evyˇzaduj´ıinstalaci na Windows odd´ılus FAT, i kdyˇzdok´aˇzouspustit zavadˇeˇcsyst´emu instalovan´yna ´uplnˇejin´emsouborov´emsyst´emu a odd´ılu). Pokud napˇr´ıkladXOSL nainstalujeme (na Windows odd´ıl)a vhodnˇenakonfigurujeme, pak se pˇri startu poˇc´ıtaˇcezobraz´ınab´ıdka s moˇznostmispuˇstˇen´ıinstalovan´ych operaˇcn´ıch syst´em˚u.Po vybr´an´ıse pak spust´ızav´adˇec´ız´aznamvybran´ehosyst´emu. Pˇrikonfiguraci urˇcujeme,jak´esyst´emy m´amea kde se nach´az´ıjejich zav´adˇec´ız´aznam (ve kter´emboot sektoru), p˚uvodn´ıprim´arn´ızavadˇeˇcz MBR je obvykle detekov´anautomaticky.

7.7 Svazky

 Svazek (volume) je seskupen´ıjednoho nebo v´ıcediskov´ych odd´ıl˚u.Uˇzivatel vid´ıvˇzdysvazek jako celek, nemus´ıse zab´yvat hranicemi mezi jednotliv´ymiodd´ılyve svazku (a tak´eje moˇzn´esvazek libovolnˇe rozˇsiˇrovat o dalˇs´ıodd´ıly),coˇzje hlavn´ıv´yhoda pouˇz´ıv´an´ısvazk˚u– transparentnost pˇr´ıstupuk odd´ıl˚um. Odd´ıly ve svazku obvykle b´yvaj´ı v nˇekter´emtypu pole RAID. Pouˇz´ıv´ase bud’ zrcadlen´ı (pro zajiˇstˇen´ıbezpeˇcnostidat) nebo prokl´ad´an´ı(pro zajiˇstˇen´ıtransparentnosti vyuˇz´ıv´an´ıodd´ıl˚uve svazku).

 Dynamick´esvazky ve Windows: Dynamick´ysvazek se skl´ad´az jedn´enebo v´ıce logick´ych jednotek (odd´ılnebo logick´ydisk). Castoˇ se pouˇz´ıv´av kombinaci s RAID, ve Windows se vol´ıRAID-5 – prokl´adan´ysvazek s uchov´av´an´ımparitn´ıinformace.

 LVM v Linuxu: LVM (Logical Volume Manager) je spr´avce virtu´aln´ıch svazk˚u,v jednom virtu´aln´ımsvazku b´yv´av´ıcelogick´ych jednotek (prim´arn´ıch odd´ıl˚unebo logick´ych disk˚u,je to jedno). Procesy pracuj´ıs virtu´aln´ımisvazky, jedn´ase o mezivrstvu“ mezi procesy a skuteˇcn´ymijednotkami. ” Je moˇzn´edynamicky mˇenitvelikost virtu´aln´ıch svazk˚u. Pouˇz´ıv´ase obvykle s RAID-1 (zrcadlen´ı,data jsou uloˇzena redundantnˇena v´ıcedisc´ıch v RAID poli, coˇzznamen´avyˇsˇs´ırychlost ˇcten´ı– ˇctese z v´ıcem´ıstz´aroveˇn. Kapitola 7 Sprava´ periferi´ı 140

7.8 Moˇznosti instalace operaˇcn´ıch syst´em˚u

 Dnes je obvykl´ea v´ıcem´enˇevyˇzadovan´einstalovat kaˇzd´yoperaˇcn´ısyst´emna samostatn´yodd´ıl. Pokud chceme m´ıtinstalov´anov´ıceoperaˇcn´ıch syst´em˚una jednom poˇc´ıtaˇci,mus´ımebr´atohled na poˇzadavky tˇechto syst´em˚u.Napˇr´ıklad • Windows s DOS j´adrem(vˇcetnˇeWindows 9x/ME) v˚ubec nepoˇc´ıtaj´ıs t´ım,ˇzena disku budou jeˇstˇenˇejak´edalˇs´ıoperaˇcn´ısyst´emy, bez ptan´ıpˇrep´ıˇsouMBR a boot sektor prvn´ıhoprim´arn´ıho odd´ılu. • Windows s NT j´adrem(Windows NT/2000/XP) sice umoˇzˇnuj´ıinstalaci na jin´yneˇzprvn´ıodd´ıl, ale mˇelby b´ytprim´arn´ı.Nav´ıctento syst´emdok´aˇzedetekovat pouze Microsoft´ıoperaˇcn´ısyst´emy, takˇzepokud je v MBR z´aznamjin´ehoneˇzWindows zavadˇeˇce,odm´ıtnouho vz´ıtna vˇedom´ıa tento zavadˇeˇcje prostˇepˇreps´an. • UNIXov´eoperaˇcn´ısyst´emy vˇcetnˇeLinuxu mohou b´ytinstalov´any t´emˇeˇrna kter´emkoliv odd´ılu vˇcetnˇelogick´ehona rozˇs´ıˇren´emodd´ılu, respektuj´ı zavadˇeˇcejin´ehosyst´emu, neb´yvaj´ı s nimi probl´emy (s urˇcit´ymi ˇcern´ymi“ vyj´ımkami, jako tˇrebastarˇs´ıverze Solaris pro urˇcitouskupinu ” pˇredemnainstalovan´ych syst´em˚u).Konkr´etn´ıchov´an´ız´avis´ına volbˇezavdˇeˇce (LILO, GRUB, . . . ). Samostatnou kapitolou je instalace Windows 8, tam n´amm˚uˇzezkomplikovat ˇzivot funkce Secure Boot (jak bylo naznaˇcenov sekci o zavadˇeˇc´ıch operaˇcn´ıch syst´em˚u,viz str. 137. Takˇzepokud nechceme pouˇz´ıvat skr´yv´an´ıodd´ıl˚u,vol´ımetuto posloupnost instalac´ı(samozˇrejmˇe kter´ykoliv ˇclen posloupnosti m˚uˇzeb´ytvynech´an): 1. Windows syst´emy s DOS j´adrem 2. Windows syst´emy s NT j´adrem 3. Linux, jin´eUNIXov´esyst´emy Pokud m´ameinstalov´anov´ıce operaˇcn´ıch syst´em˚u,kaˇzd´yz nich m´asv˚ujzavadˇeˇc.Jeden z nich je prim´arn´ı,jeho z´aznamje v MBR, a z nˇehojsou spouˇstˇeny ostatn´ızavadˇeˇce.Tak vznik´a stromov´a ” struktura“ zavadˇeˇc˚u,napˇr´ıkladkdyˇzm´ameWindows 98, Windows XP a nˇekter´yLinux, prim´arn´ıje obvykle linuxov´yzavadˇeˇc(napˇr.LILO). Pokud v nˇemvybereme spuˇstˇen´ıLinuxu, tato akce se provede hned, pokud ale vybereme spuˇstˇen´ıWindows, spust´ıse zavadˇeˇcWindows XP, ve kter´emsi m˚uˇzeme vybrat mezi Windows 98 a Windows XP. £ Jestliˇzeje na poˇc´ıtaˇciprovozov´anov´ıceoperaˇcn´ıch syst´em˚u,je vhodn´emyslet i na to, abychom z nich mˇeli pˇr´ıstupk naˇsim dat˚um. Tak´ez d˚uvodu bezpeˇcnostidat m´ab´ytalespoˇnjeden diskov´yodd´ıl vyhrazen pouze pro data, souborov´ysyst´emvol´ımetakov´y,se kter´ymdok´aˇzoupracovat vˇsechny insta- lovan´eoperaˇcn´ısyst´emy. Linux dok´aˇzepracovat se vˇsemibˇeˇzn´ymisouborov´ymisyst´emy (doned´avna byly probl´emy s NTFS, ty jsou v nejnovˇejˇs´ıch j´adrech odstranˇeny – nebylo moˇzn´emˇenitd´elku sou- bor˚u),Windows ˇradyNT bez vhodn´ych berliˇcekpouze s FAT a NTFS, Windows 95 OSR2/98/ME si rozum´ıjen s FAT vˇcetnˇeFAT32, Windows 95 a starˇs´ıpouze FAT16. Windows a Linux mohou sd´ıletdata po s´ıtinapˇr´ıkladpomoc´ıprotokolu smb. Obvykl´eje m´ıtLinux instalov´anna serveru a Windows na pracovn´ıstanici, na Linuxu bˇeˇz´ısluˇzba(d´emon) samba. £ Co se sd´ılen´ı instalace aplikac´ı t´yˇce,je situace trochu horˇs´ı. Ve Windows zp˚usobuj´ı probl´emy pˇredevˇs´ım´udaje v registru (registr nelze mezi r˚uzn´ymiinstalacemi sd´ılet)a nˇekdytak´eform´atdyna- mick´ych knihoven (m˚uˇzeb´ytjin´ynapˇr´ıkladpro Windows 98 a XP), proto je obvykle nutn´eaplikaci Kapitola 7 Sprava´ periferi´ı 141 v kaˇzd´ych Windows instalovat zvl´aˇst’ (nˇekdyje moˇzn´ezvolit stejn´yadres´aˇr/sloˇzkupro um´ıstˇen´ısou- bor˚uaplikace, jen ´udaje v registrech jsou pro kaˇzdouinstalaci zvl´aˇst’). R˚uzn´everze Windows mohou sd´ılettent´yˇzodkl´adac´ısoubor. V´ıcelinuxov´ych distribuc´ım˚uˇzesd´ılettot´eˇzj´adro(to vˇetˇsinoulze urˇcitpˇriinstalaci), odkl´adac´ı (swap) odd´ılˇci soubor, pˇr´ıpadnˇedalˇs´ıodd´ıly(tˇreba home), za urˇcit´ych okolnost´ılze sd´ıleti jin´eaplikace. \ Sd´ılen´ıaplikac´ımezi Windows a Linuxem obvykle nen´ımoˇzn´e,vyj´ımkou jsou multiplatformn´ıaplikace psan´ev Javˇenebo pomoc´ıtechnologie .NET (pˇr´ıpadnˇev Pythonu, Lispu ˇciv jin´eminterpretaˇcn´ım jazyku).

7.9 Spouˇstˇen´ınenativn´ıch aplikac´ı

Pro pˇripomenut´ı:nenativn´ıaplikace jsou aplikace psan´epro jin´yoperaˇcn´ısyst´em. Pˇredchoz´ıstr´ankyse t´ykaly pˇredevˇs´ımpˇr´ıpadu,kdy m´amena disku instalov´anov´ıceoperaˇcn´ıch syst´em˚ua poˇc´ıt´ames t´ım,ˇzev jednom okamˇzikupouˇz´ıv´amejen jeden z nich a pˇripotˇrebˇezmˇeny restar- tujeme syst´em.Nˇekdyvˇsakpotˇrebujemepracovat s v´ıceoperaˇcn´ımisyst´emy najednou. Pak pouˇzijeme program (ˇci rozhran´ı),kter´ybˇeˇz´ıjako proces (procesy) v jednom operaˇcn´ımsyst´emu a simuluje bˇeh jin´ehooperaˇcn´ıhosyst´emu (ten bˇeˇz´ı v oknˇe“). ”  Programy, kter´em˚uˇzeme pro tento ´uˇcelvyuˇz´ıt,m˚uˇzemerozdˇelitdo nˇekolika skupin: • virtu´aln´ı poˇc´ıtaˇc – prov´ad´ı simulaci poˇc´ıtaˇce(m˚uˇzej´ıt o ´uplnˇejinou HW platformu neˇzna kter´esyst´embˇeˇz´ı v re´alu“), na tomto poˇc´ıtaˇcim˚uˇzemem´ıtinstalov´anjak´ykoliv poˇcetjin´ych ” operaˇcn´ıch syst´em˚u,na nˇeˇzvlastn´ımelicenci, • emul´atoroperaˇcn´ıhosyst´emu – simuluje konkr´etn´ıoperaˇcn´ısyst´em, • podsyst´em pro spouˇstˇen´ıaplikac´ıjin´ehooperaˇcn´ıhosyst´emu.  Nˇekter´eprodukty mohou fungovat v tzv. bezeˇsv´emm´odu. To znamen´a,ˇzeaplikace spouˇstˇen´a virtualizovanˇe zapad´a“ do prostˇred´ıre´aln´ehooperaˇcn´ıhosyst´emu, tedy m´avlastn´ıokno a samotn´y ” virtualizaˇcn´ıprodukt je pro uˇzivatele prakticky neviditeln´y,s aplikac´ıje moˇzn´ezach´azetstejnˇejako kdyby byla instalov´anapˇr´ımov hostitelsk´emsyst´emu.

7.9.1 Virtu´aln´ıpoˇc´ıtaˇc

 Tento typ emul´ator˚uje nejsloˇzitˇejˇs´ıa ˇcastoi nejpomalejˇs´ı.Po instalaci obvykle m˚uˇzemenakonfigu- rovat simulovan´yhardware (kterou HW platformu chceme pouˇz´ıvat, kter´yhardware bude k dispozici a jak se jeho pouˇz´ıv´an´ıprojev´ına skuteˇcn´em“ hardwaru, napˇr´ıkladnapoj´ımetisk´arnu), d´alenastav´ıme ” BIOS, a pak m˚uˇzemeinstalovat operaˇcn´ısyst´emy. Nˇekter´eprogramy vyˇzaduj´ıjist´e pˇredupraven´ı“ ” zdroje operaˇcn´ıhosyst´emu do tzv. image (obraz, nˇecojako obraz CD). Kaˇzd´yz tˇechto program˚um´asv´etypick´evlastnosti, napˇr´ıkladexistuj´ıemul´atoryslouˇz´ıc´ıˇcistˇe k emulaci konkr´etn´ıhardwarov´eplatformy (pro Amigu, ZX Spectrum, PowerPC, kapesn´ıpoˇc´ıtaˇce– vyuˇz´ıvaj´ıpˇredevˇs´ımprogram´atoˇritˇechto zaˇr´ızen´ı,hern´ıch konzol´ı,apod.) nebo umoˇzˇnuj´ıc´ıvolit mezi nˇekolika platformami (instalace nov´eplatformy se pak prov´ad´ı instalov´an´ım pˇr´ısluˇsn´ehomodulu), pˇr´ıpadnˇes volbou HW platformy vol´ımei operaˇcn´ısyst´em(na nˇekter´eplatformˇe nen´ız ˇcehovyb´ırat“, ” napˇr´ıkladu Amigy).  U nˇekter´ych produkt˚use setk´av´ames podporou tzv. paravirtualizace. Emul´atornemus´ıvirtuali- zovat hardware, ale pouze vytvoˇr´ıkomunikaˇcn´ırozhran´ıuvnitˇrhostitelsk´ehosyst´emu, kter´epˇrekl´ad´a Kapitola 7 Sprava´ periferi´ı 142 poˇzadavky na hardware od hostovan´eho(vnitˇrn´ıho)operaˇcn´ıhosyst´emu na poˇzadavky, kter´ymrozum´ı skuteˇcn´yhardware poˇc´ıtaˇce.Tato technologie vyˇzadujepˇr´ımou podporu v hostitelsk´emoperaˇcn´ım syst´emu a je nutn´etuto podporu dodat ´upravou j´adra.V pˇr´ıpadˇeopen-source operaˇcn´ıch syst´em˚u to nen´ıprobl´em,ale paravirtualizaci ve Windows jako hostitelsk´emsyst´emu mohou provozovat pouze virtualizaˇcn´ıˇreˇsen´ıod Microsoftu, protoˇzeostatn´ınemaj´ıpˇr´ıstupke zdrojov´ymk´od˚um.  Souˇcasn´e procesory obsahuj´ı hardwarovou podporu virtualizace (jej´ı podpora je pak ale nutn´a i u jin´ehohardwaru, pˇredevˇs´ımz´akladn´ıdesky a s´ıt’ov´ych karet). Pokud virtualizaˇcn´ıˇreˇsen´ıbˇeˇz´ınad procesorem podporuj´ıc´ımvirtualizaci, je rozd´ılv odezvˇeskuteˇcn´eho(hostitelsk´eho)a virtualizovan´eho operaˇcn´ıhosyst´emu t´emˇeˇrnepostˇrehnuteln´y. J Z nejzn´amˇejˇs´ıch program˚u: VMWare Workstation, VMWare Player bˇeˇz´ıpod Windows i Linuxem (hostitelsk´esyst´emy), jako hostovan´esyst´emy mohou b´ytdovnitˇrnainstalov´any prakticky kter´ekoliv. Je to jeden z nej- lepˇs´ıch a nejobl´ıbenˇejˇs´ıch univerz´aln´ıch simul´ator˚u,komerˇcn´ı(existuje volnˇeˇsiˇriteln´avarianta pro osobn´ınekomerˇcn´ıpouˇzit´ı,kter´aum´ıpouze spouˇstˇetpˇredpˇripraven´eobrazy syst´em˚u– Pla- yer). Podporuje bezeˇsv´ym´od. Produkty spoleˇcnostiVMWare b´yvaj´ıtradiˇcnˇev ˇcelev´yvoje v t´etooblasti – zde se totiˇzkomerˇcnˇe ´uspˇeˇsn´avirtualizace zaˇcalavyv´ıjet. MS Virtual PC je distribuov´anMicrosoftem (p˚uvodnˇebyl vyv´ıjenjinou firmou, Microsoft tuto firmu odkoupil), bˇeˇz´ıpouze pod Windows, komerˇcn´ı.V nejnovˇejˇs´ıch verz´ıch je ofici´alnˇepodporov´an pouze bˇehr˚uzn´ych verz´ıWindows coby hostovan´ych (vnitˇrn´ıch syst´em˚u),neofici´alnˇelze do to- hoto produktu nainstalovat i Linux, ale na vlastn´ı nebezpeˇc´ı. Moˇznostinastaven´ı jsou sp´ıˇse podpr˚umˇern´e,a dokonce pˇrekvapivˇenepodporuje Direct3D. Bochs bˇeˇz´ıpod Windows i Linuxem, je to freeware. Je to velmi dobr´yprogram s mnoha volbami, ale pomˇernˇesloˇzit´y. Qemu je o nˇecorychlejˇs´ıa ovladatelnˇejˇs´ıneˇzBochs, bˇeˇz´ıpod Linuxem, Windows i MacOSX, je volnˇedostupn´yna Internetu. Xen je obdoba Bochs, ale na rozd´ılod nˇehopˇrej´ım´ahardwarovou platformu od poˇc´ıtaˇce,na kter´em bˇeˇz´ı,jinak m˚uˇzemeinstalovat jak´ekoliv operaˇcn´ısyst´emy (starˇs´ıverze vyˇzaduj´ıvytvoˇren´ıobrazu tohoto syst´emu). Oproti Bochs m´av´yhodu tak´ev rychlosti (nemus´ısimulovat veˇsker´yhardware). Volnˇeˇsiˇriteln´y,pro Linux a nˇekter´edalˇs´ıUNIXov´esyst´emy. VirtualBox je volnˇeˇsiˇriteln´yprodukt firmy Sun, bˇeˇz´ına Windows, v Linuxu a MacOS X. Uvnitˇr mohou bˇeˇzetjak Windows, tak i Linux a r˚uzn´eUNIXov´esyst´emy. Podporuje i bezeˇsv´ym´od. Parallels Desktop je virtualizaˇcn´ın´astroj bˇeˇz´ıc´ına MacOS X.

 Ve firemn´ımprostˇred´ı,pˇredevˇs´ımv datov´ych centrech, se setk´av´ames plnou (nativn´ı)virtualizac´ı. To znamen´a,ˇzenejniˇzˇs´ıvrstva cel´ehosyst´emu (nejbl´ıˇzehardwaru) nen´ıj´adronˇekter´ehooperaˇcn´ıho syst´emu, ale je zde nativn´ıhypervizor – tenk´avrstva, kter´aje vpodstatˇeobdobou j´adra. Z´adn´yzˇ na- instalovan´ych operaˇcn´ıch syst´em˚unen´ıupˇrednostˇnov´an(alespoˇnu vˇetˇsiny tˇechto ˇreˇsen´ı).Nad hyper- vizorem pak bˇeˇz´ıvirtu´aln´ıstroje a v nich konkr´etn´ıoperaˇcn´ısyst´emy. Hypervizor je vlastnˇerozhran´ı, kter´ezajiˇst’uje transparentn´ıprovoz operaˇcn´ıch syst´em˚u.Veˇsker´epoˇzadavky operaˇcn´ıch syst´em˚una hardware jsou smˇerov´any hypervizorovi a syst´emy uzavˇren´eve virtu´aln´ıch poˇc´ıtaˇc´ıch se navz´ajem nevid´ı. Kapitola 7 Sprava´ periferi´ı 143

Z d˚uvodu zabezpeˇcen´ıhypervizoru se nˇekdytrochu jin´ymzp˚usobem vyuˇz´ıvaj´ıbezpeˇcnostn´ıokruhy, kter´ezn´amez kapitoly o struktuˇresyst´em˚u(strana 26). Hypervizor bˇeˇz´ıv Ring0, j´adravirtualizovan´ych syst´em˚ubˇeˇz´ıv Ring1 a uˇzivatelsk´eprocesy v Ring3. Produkty vyuˇz´ıvaj´ıc´ıhardwarovou virtualizaci s nativn´ımhypervizorem jsou • VMWare ESXi Server, • Citrix XenServer, • Microsoft Hyper-V. U vˇsech existuje zdarma dostupn´avarianta nebo alespoˇndemonstraˇcn´ıˇcasovˇeomezen´averze.

7.9.2 Emul´atoryoperaˇcn´ıhosyst´emu a podsyst´emy

 Tyto programy simuluj´ıbˇehkonkr´etn´ıhooperaˇcn´ıhosyst´emu, tedy nov´yoperaˇcn´ısyst´emsamotn´y nemus´ımejiˇzinstalovat. Pokud je emulov´anoperaˇcn´ısyst´emse vˇs´ımvˇsudy(t´emˇeˇr),m˚uˇzemev tomto operaˇcn´ımsyst´emu pracovat se vˇs´ımvˇsudyvˇcetnˇekonfigurace (syst´embˇeˇz´ıv oknˇecel´y,v r´amcitohoto okna pak jeho aplikace). Jestliˇzese vˇsakjedn´ao podsyst´em,´uˇcelemje pˇredevˇs´ımmoˇznostspouˇstˇetaplikace urˇcen´e pro ciz´ı“ operaˇcn´ısyst´em (kaˇzd´aaplikace m´ıv´aobvykle vlastn´ıokno/okna). ” Kdyˇzsi nainstalujeme emul´atoroperaˇcn´ıhosyst´emu nebo podsyst´em,pak samozˇrejmˇenemus´ıme instalovat ˇz´adn´y vnitˇrn´ı“ (hostovan´y)operaˇcn´ısyst´ema ani na nˇejnepotˇrebujemevlastnit licenci. ” Instalujeme pouze aplikace, kter´echceme virtualizovanˇespouˇstˇet,a to pomoc´ın´astroj˚uposkytovan´ych emul´atorem(podsyst´emem).Na aplikace uˇzmus´ıme licenci vlastnit, pokud to licenˇcn´ı podm´ınky vyˇzaduj´ı(EULA apod.). J Z nejzn´amˇejˇs´ıch emul´ator˚ua podsyst´em˚u: Wine je ve skuteˇcnostirekurzivn´ızkratka slov Wine Is Not Emulator“. Autoˇrit´ımto n´azvem chtˇeli ” zd˚uraznit,ˇzenezam´yˇslej´ıemulovat Windows, ale pouze umoˇznitspouˇstˇen´ıprogram˚upsan´ych pro Windows v UNIXov´ych syst´emech. Jde o vlastn´ıimplementaci Win API (rozhran´ı,pˇrekladov´e vrstvy mezi aplikac´ıa j´adremskuteˇcn´ehooperaˇcn´ıhosyst´emu). Na str´ank´ach tv˚urc˚uWine je rozs´ahl´yseznam program˚u,pˇr´ıpadn´ych probl´em˚upˇrijejich provo- zov´an´ıpˇresWine a jejich ˇreˇsen´ı.Nˇekter´eprogramy bohuˇzeltakto nelze zprovoznit nebo doch´az´ı k neodstraniteln´ymprobl´em˚um(ale jde o v´yjimky). Programy, ale i jednotliv´ejejich verze, jsou ˇrazeny do skupin podle n´aroˇcnostizprovoznˇen´ıve Wine – platinum, gold, silver, bronze a ostatn´ı. Wine najdeme prakticky ve vˇsech distribuc´ıch Linuxu a tak´e v mnoha dalˇs´ıch UNIXov´ych syst´emech. Je volnˇeˇsiˇriteln´y.Pokud jde ale o aplikace, kter´edo Wine instalujeme, mus´ımere- spektovat jejich licenci. Cedega je komerˇcn´ıprojekt vych´azej´ıc´ız Wine. Oproti Wine obsahuje nav´ıcnˇekter´ekomerˇcn´ıtech- nologie, dokonce i pˇr´ımood spoleˇcnostiMicrosoft. Je urˇcenke spouˇstˇen´ır˚uzn´ych, i n´aroˇcnˇejˇs´ıch program˚upro Windows, je vyuˇz´ıv´anpˇredevˇs´ımpro spouˇstˇen´ıher. CrossOver je tak´ekomerˇcn´ı varianta pro Wine vyv´ıjen´aspoleˇcnost´ı CodeWeavers, p˚uvodnˇebyl urˇcenpˇredevˇs´ımdo kancel´aˇr´ı,kde se vyuˇz´ıval pro provoz kancel´aˇrsk´ych bal´ık˚u,´uˇcetn´ıch a jin´ych ekonomick´ych aplikac´ı psan´ych pro Windows. V souˇcasn´edobˇeje jiˇzuniverz´alnˇejipouˇz´ıv´an a v seznamu podporovan´ych Win aplikac´ınajdeme i mnoh´ezn´am´ehry, d´aleAdobe Photoshop nebo rozhran´ı.NET Framework. Snadnost zprovoznˇen´ıje tak´ehodnocena medailemi“, podobnˇe ” jako ve Wine. Kapitola 7 Sprava´ periferi´ı 144

CygWin je obdoba pˇredchoz´ıch, ale funguje jako podsyst´emve Windows pro spouˇstˇen´ılinuxov´ych aplikac´ı(podobn´ymzp˚usobem jako Wine v Linuxu – sada knihoven plus mechanismus pˇrekladu API). Je volnˇedostupn´ya je ˇcastopouˇz´ıv´ani tehdy, kdyˇzchceme vyuˇz´ıvat n´astroje Linuxu pod Windows (vˇcetnˇeshellu). CygWin zahrnuje spoustu r˚uzn´ych n´astroj˚u(pr´aces textem, programovac´ın´astroje, pr´acese s´ıt´ı, dokonce i grafick´eprostˇred´ıa spoustu dalˇs´ıch) a bˇeheminstalace rozhodujeme, kter´ez tˇechto n´astroj˚usi nainstalujeme. DosEmu, DosBox jsou programy emuluj´ıc´ıDOS pod Linuxem. Neobsahuj´ıinstalaci MS-DOSu, kter´y je zat´ıˇzenlicenc´ıEULA a tedy pro tyto ´uˇcelynepouˇziteln´y,ale DosEmu vyuˇz´ıv´ainstalaci syst´emu freeDOS a DosBox m´avlastn´ıimplementaci DOSu (pouze nejz´akladnˇejˇs´ıpˇr´ıkazy). Vyuˇz´ıvaj´ıse napˇr´ıkladke zprovoznˇen´ıDOSovsk´ych ´uˇcetn´ıch program˚u(DosEmu) a her (DosBox). Ve Windows 10 existuje modul pro emulaci Linuxu (Ubuntu), jehoˇz´uˇcelemje spouˇstˇen´ılinuxov´ych aplikac´ıvˇcetnˇeshellu bash.

Dalˇs´ıinformace:  • http://appdb.winehq.org/objectManager.php?sClass=application (seznam podporovan´ych aplikac´ı pro Wine, v´ıceneˇz10 tis´ıc) • http://www.codeweavers.com/compatibility/browse/name/ (seznam podporovan´ych aplikac´ıpro Cros- sOver) • http://cygwin.com/cygwin-ug-net/cygwin-ug-net.pdf (CygWin User’s Guide)



7.9.3 Serverov´aa desktopov´avirtualizace

 Serverov´avirtualizace. O serverov´evirtualizaci se zde uˇzpsalo. Jedn´ase vpodstatˇeo plnou (na- tivn´ı)virtualizaci, kdy pod cel´ej´adrosyst´emu (vlastnˇeobvykle v´ıcer˚uzn´ych jader operaˇcn´ıch syst´em˚u) je podsunut nativn´ıhypervizor bˇeˇz´ıc´ıv Ring 0. Pouze hypervizor m´apˇr´ım´ypˇr´ıstupk hardwaru a me- chanismu pˇridˇelov´an´ızdroj˚u.Nad hypervizorem bˇeˇz´ıj´adravirtualizovan´ych operaˇcn´ıch syst´em˚u,a to v Ring 1. Bˇeˇzn´eprocesy pak najdeme v Ring 3. D´ıkytomu, ˇzepouze hypervizor m´av´yhran´ıpˇr´ıstupke zdroj˚um,kter´erozdˇelujejednotliv´ymOS, jednotliv´eOS se navz´ajemneomezuj´ı, nevˇed´ı o sobˇe“. Obvykle dokonce bˇeˇz´ı z´aroveˇn(na serveru ” m´ıv´amev´ıceneˇzjeden procesor), a obrovskou v´yhodou je moˇznostbez probl´em˚uprovozovat aplikace nativn´ıv r˚uzn´ych OS bez vz´ajemn´ehoovlivˇnov´an´ı. Produkty: VMWare ESXi Server (tak´eVMWare vSphere a dalˇs´ı souvisej´ıc´ı produkty), Citrix XenServer, Microsoft Hyper-V Ve vˇsech tˇechto pˇr´ıpadech existuje volnˇeˇsiˇriteln´avarianta, na kter´esi m˚uˇzemevyzkouˇset,jak serverov´avirtualizace funguje.

 Desktopov´avirtualizace. V datov´em´uloˇziˇstijsou uloˇzeny obecn´enebo personalizovan´eobrazy desktop˚u(pln´ych instalac´ıOS a aplikac´ı).Uˇzivatel m´abud’ tenk´ehoklienta nebo jak´ykoliv poˇc´ıtaˇc s pˇr´ısluˇsn´ymsoftwarem (specializovan´ySW nebo stanoven´ywebov´yklient, podle ˇreˇsen´ı).Uˇzivatel se pˇrihl´as´ı“ do firemn´ıs´ıtˇe,vzd´alenˇepracuje se sv´ym“ desktopem. ” ” Kapitola 7 Sprava´ periferi´ı 145

Existuj´ıdvˇevarianty – centralizovan´aa distribuovan´a.U centralizovan´evarianty pracuje pˇredevˇs´ım procesor datov´ehocentra (princip hypervizora), na stranˇeklienta je jen rozhran´ı.V druh´empˇr´ıpadˇe klient pracuje na plnohodnotn´empoˇc´ıtaˇci,kde spust´ıobraz sv´ehodesktopu (obrazy mohou b´yt distri- buov´any i na v´ymˇenn´ych m´edi´ıch). Uˇcelemdesktopov´evirtualizace´ je pˇredevˇs´ım moˇznostjednoduch´ehromadn´espr´avy desktop˚u, moˇznostprovozovat tent´yˇzdesktop na r˚uzn´ych zaˇr´ızen´ıch podle moment´aln´ıpozice, a pˇrivzd´alen´em pˇr´ıstuputak´emoˇznostpr´acez domova na tomt´eˇzdesktopu. Opˇetse setk´av´amepˇredevˇs´ıms produkty spoleˇcnost´ıVMWare, Citrix, Microsoft.

Dalˇs´ıinformace:  • http://www.vmware.com • http://www.vmware.com/support/ (zde je moˇzn´est´ahnoutsi volnˇeˇsiˇriteln´evarianty produkt˚u) • http://www.citrix.cz/ • http://www.citrix.cz/downloads.html (staˇzen´ıvolnˇeˇsiˇriteln´ych variant) • http://www.microsoft.com/en-us/server-cloud/windows-server/server-virtualization.aspx • http://www.microsoft.com/en-us/server-cloud/hyper-v-server/default.aspx (staˇzen´ıvolnˇeˇsiˇriteln´evarianty)

 Kapitola 8 Pamˇet’ov´am´edia

Pamˇet’ov´am´ediatak´epatˇr´ımezi perifern´ızaˇr´ızen´ı,ale protoˇzejejich spr´ava je nejn´aroˇcnˇejˇs´ı,nejfrek- ventovanˇejˇs´ıa kl´ıˇcov´apro pr´acicel´ehooperaˇcn´ıhosyst´emu (operaˇcn´ısyst´emje koneckonc˚uuloˇzenna pevn´emdisku, coˇzje pamˇet’ov´em´edium),budeme se jim vˇenovat podrobnˇejizde a pak jeˇstˇev n´asleduj´ıc´ı kapitole o spr´avˇedisk˚u.

8.1 Z´akladn´ıpojmy

Pamˇet’ov´am´ediamohou b´ytbud’ napevno pˇripojena datov´ymkabelem nebo pˇresjin´erozhran´ı(tˇreba M.2) k z´akladn´ı desce poˇc´ıtaˇce,ˇcasto pˇr´ımo ve skˇr´ıni poˇc´ıtaˇce(napˇr´ıklad bˇeˇzn´ypevn´ydisk) nebo mohou b´ytvymˇeniteln´aa pˇripojuj´ıse pˇresnˇekter´erozhran´ıvnˇeskˇr´ınˇe(napˇr´ıkladpˇres USB). M´ediamohou b´ytbud’ se sekvenˇcn´ımpˇr´ıstupem (p´asky)nebo mohou umoˇzˇnovat pˇr´ıstupna kte- roukoliv svou ˇc´ast(pˇredevˇs´ımdisky).  V dalˇs´ımtextu budeme pouˇz´ıvat pojmy t´ykaj´ıc´ıse struktury disku (mˇelibychom je uˇzzn´atz jin´eho pˇredmˇetu): Stopy jsou soustˇredn´ekruˇznicena disku. Sektory jsou v´yseˇcekruˇznic,kaˇzd´ysektor obsahuje 512 B dat (tj. 1/2 KiB). Sektory v disku vyuˇz´ıva- j´ıc´ımAdvanced Format zab´ıraj´ı4 KiB. Disk samotn´ydok´aˇzepracovat vˇzdyjen s cel´ymisektory, neum´ıje rozdˇelitna ˇc´asti. Plotny a povrchy – pevn´ydisk se skl´ad´az v´ıceploten (desek) na jedn´eose, kaˇzd´aplotna m´adva povrchy. Hlava (ˇctec´ıa z´apisov´a)je jedna pro kaˇzdoudvojici protilehl´ych povrch˚u(tj. v kaˇzd´e ˇstˇerbinˇe“ ” jedna). Cylindr (z angl. cylinder, v´alec)je tat´aˇzstopa na vˇsech povrˇs´ıch (tedy ze vˇsech povrch˚uvezmeme stopu s dan´ympolomˇerem,a to je tak´epolomˇercylindru). Cluster (ˇctese [klastr]) je jeden nebo v´ıcesektor˚u,a stejnˇejako samotn´ydisk dok´aˇzepracovat jen s cel´ymisektory, souborov´ysyst´emv syst´emu Windows dok´aˇzepracovat pouze s cel´ymiclustery (napˇr´ıkladsoubor, i kdyˇzzab´ır´atˇrebajen 3 B, mus´ımeuloˇzitdo cel´ehoclusteru, zbytek clusteru z˚ustanenevyuˇzit).Je to tedy nejmenˇs´ıˇc´astdisku, se kterou dok´aˇzepracovat operaˇcn´ısyst´em. Blok je obdoba clusteru pro UNIXov´esyst´emy, je to tedy tak´eurˇcit´ypoˇcetsektor˚u,kter´ejsou operaˇcn´ımsyst´ememadresov´any vcelku.

146 Kapitola 8 Pametˇ ’ova´ media´ 147

 Aby mohlo b´ytpamˇet’ov´em´ediumpouˇz´ıv´ano,mus´ına nˇemb´ytpˇredpˇripravena urˇcit´astruktura (form´at),mus´ıb´yt form´atov´ano. N´ızko´urovˇnov´eform´atov´an´ı je z´apisznaˇcekpro sektory a stopy na magnetick´emm´ediu(pevn´ydisk, disketa, apod.), prov´ad´ıobvykle v´yrobce. Vysoko´urovˇnov´eform´atov´an´ı je vytvoˇren´ı souborov´ehosyst´emu, urˇc´ıme, jak´ymzp˚usobem budou na m´ediudata ukl´ad´anaa vytvoˇr´ımenˇekter´enezbytn´edatov´estruktury (napˇr. pro souborov´y syst´emFAT je vytvoˇrenaFAT tabulka a dalˇs´ıpotˇrebn´estruktury). Pro tento ´ukon se pojem form´atov´an´ı“ pouˇz´ıv´aprakticky jen ve Windows, v jin´ych operaˇcn´ıch syst´emech se pouˇz´ıv´a ” pojem vytvoˇren´ısouborov´ehosyst´emu“. ” Pˇredvytvoˇren´ımsouborov´ehosyst´emu m˚uˇzemepamˇet’ov´em´edium,typicky pevn´ydisk, rozdˇelit na odd´ıly (svazky, oblasti, partitions podle terminologie v r˚uzn´ych operaˇcn´ıch syst´emech), na jednom fyzick´emdisku je vˇzdyalespoˇnjeden odd´ıl. £ Rozdˇelen´ıse prov´ad´ıpomoc´ık tomu urˇcen´ych n´astroj˚u,v kaˇzd´emoperaˇcn´ımsyst´emu m´ametakov´y. Bohuˇzeljsou do urˇcit´em´ırynavz´ajemnekompatibiln´ıa m˚uˇzese st´at,ˇzedisk rozdˇelen´yfdiskem jednoho operaˇcn´ıhosyst´emu (tˇrebaLinuxu) dˇel´aprobl´emy jin´emu operaˇcn´ımu syst´emu (Windows, proto se doporuˇcujev pˇr´ıpadˇe,ˇzeuˇzivatel chce m´ıtna jednom disku Windows i Linux, pro z´akladn´ırozdˇelen´ı a nadefinov´an´ıWindows oblast´ıpouˇz´ıtn´astroj z Windows a teprve pro zbytek disku n´astroj z Linuxu). Nˇekter´en´astroje na rozdˇelen´ıdisku nedok´aˇzoumˇenit hranice oblast´ıbez ztr´aty dat (tj. data mus´ıme z´alohovat), ale nˇekter´eLinuxov´en´astroje a nˇekter´eprogramy pro Windows (zde vˇetˇsinoukomerˇcn´ı) dok´aˇzous hranicemi oblast´ıpracovat bez ztr´aty dat (ale z´alohovan´aby pro jistotu b´ytmˇela).

8.2 Adres´aˇrov´astruktura

Pamˇet’ov´am´ediamohou obsahovat velmi mnoho dat, a aby bylo v˚ubec moˇzn´ese v tˇechto datech vyznat, vyhled´avat, pouˇz´ıvat je, pˇrid´avat dalˇs´ınebo nˇekter´aodstraˇnovat, mus´ıb´ytvhodnˇeorganizov´ana.  Data se obvykle nach´azej´ı v jednotk´ach, kter´enaz´yv´amesoubory. Soubor je tedy posloupnost dat s vlastn´ımv´yznamem,dat, kter´ak sobˇenˇejak´ymzp˚usobem patˇr´ı(tˇrebadokument, obr´azeknebo tabulka).  Soubor˚um˚uˇzeb´ytopˇetvelmi mnoho, proto tak´emus´ıb´yttˇr´ıdˇeny. Tˇr´ıdˇen´ıse prov´ad´ıdo jednotek, kter´ymˇr´ık´ame adres´aˇre. Adres´aˇrobvykle obsahuje ´udaje o souborech, kter´ejsou do nˇehovloˇzeny, vˇcetnˇejejich fyzick´ehoum´ıstˇen´ına disku (adresy), od toho i n´azev.Protoˇzeadres´aˇrje vlastnˇesouhrn dat o souborech, v mnoha operaˇcn´ıch syst´emech je transparentnˇech´ap´antak´ejako soubor, tˇrebaˇzese speci´aln´ımv´yznamem.  Adres´aˇretvoˇr´ı strukturu, kter´anab´yv´ar˚uzn´ych stupˇn˚usloˇzitosti.Adres´aˇr,kter´yobsahuje vˇse ostatn´ı,co se na m´ediunach´az´ı,se naz´yv´a koˇrenov´yadres´aˇr (root). Podle toho, do jak´em´ırym˚uˇze b´ytadres´aˇrov´astruktura sloˇzit´aa jej´ıprvky navz´ajemvnoˇren´e.Rozliˇsujemetyto druhy adres´aˇrov´ych struktur: Jedno´urovˇnov´astruktura – existuje pouze jedin´yadres´aˇr,root, vˇsechny soubory jsou v nˇem.Tuto koncepci pouˇz´ıval operaˇcn´ısyst´emCP/M. Dvou´urovˇnov´astruktura – v rootu mohou b´ytodkazy na adres´aˇre,tyto adres´aˇrevˇsaknemohou obsa- hovat dalˇs´ıadres´aˇre,jen soubory. Je to vylepˇsen´ıjedno´urovˇnov´estruktury o rozdˇelen´ısoubor˚u jednotliv´ych uˇzivatel˚ua syst´emu. Kapitola 8 Pametˇ ’ova´ media´ 148

Stromov´astruktura – v adres´aˇrimohou b´ytdalˇs´ıadres´aˇre,kter´ese naz´yvaj´ı podadres´aˇre, v kter´emkoliv adres´aˇrimohou b´ytsoubory. Cel´astruktura tvoˇr´ı strom s jedn´ım koˇrenem– koˇrenov´ym ad- res´aˇrem.Tuto strukturu pouˇz´ıv´apro sv´esouborov´esyst´emy Windows. Acyklick´astruktura – oproti stromov´estruktuˇrenav´ıcpˇrid´av´amoˇznostm´ıtsoubory a nˇekter´eadres´aˇre uloˇzeny ve v´ıceadres´aˇr´ıch, tedy k nˇekter´ympoloˇzk´amm˚uˇzev´estv´ıceneˇzjedna cesta. Je nutn´e zajistit acykliˇcnost,aby pˇrivyhled´av´an´ınedoch´azelok zacyklen´ıvyhled´avac´ıhoalgoritmu. Poloˇzka (soubor nebo podadres´aˇr)je fyzicky pouze jednou na adrese, kter´am˚uˇzeb´ytuvedena ve v´ıce adres´aˇr´ıch. V´yhodou je pˇredevˇs´ım snadn´ypˇr´ıstup k t´emuˇzsouboru z r˚uzn´ych adres´aˇr˚u (napˇr´ıklad z adres´aˇr˚upatˇr´ıc´ıch r˚uzn´ymuˇzivatel˚um).Pouˇz´ıv´ase v UNIXov´ych souborov´ych syst´emech. Cyklick´astruktura – k poloˇzk´amm˚uˇzeexistovat v´ıceneˇzjedna cesta, na rozd´ılod pˇredchoz´ıhoˇreˇsen´ı jsou dovoleny i cykly, pouˇz´ıv´ase pouze jako virtu´aln´ın´astavba pro jednoduˇsˇs´ıstruktury. M˚uˇze j´ıtnapˇr´ıklad o syst´emsymbolick´ych odkaz˚uv UNIXov´ych souborov´ych syst´emech nebo z´astupc˚u ve Windows. Tyto odkazy jsou kr´atk´esoubory s informac´ıo skuteˇcn´eadrese poloˇzkya pˇr´ıpadnˇe dalˇs´ımiinformacemi. Na obr´azku 8.1 na stranˇe 149 je uk´azka vˇsech tˇechto adres´aˇrov´ych struktur kromˇejedno´urovˇnov´e. £ U acyklick´estruktury m˚uˇzeb´ytprobl´emem zachov´an´ıacykliˇcnostigrafu pˇripˇrid´av´an´ınov´ych adres do adres´aˇr˚u.To lze ˇreˇsitv´ıcezp˚usoby. Nejjednoduˇsˇs´ımzp˚usobem je omezen´ıt´ykaj´ıc´ıse v´ıcen´asobn´ych adres – ve v´ıceadres´aˇr´ıch m˚uˇzeb´ytjen soubor, nikoliv adres´aˇr(tj. kdyˇzvytv´aˇr´ımealternativn´ıcesty, mohou v´estjen na bˇeˇzn´esoubory, ne na adres´aˇre),nebo je moˇzn´e pˇribrat“ nˇekter´eadres´aˇrese ” zvl´aˇstn´ımv´yznamem.Napˇr´ıkladpro snazˇs´ıpohyb ve struktuˇrem˚uˇzev adres´aˇrib´ytodkaz na sebe sama a na nadˇr´ızen´yadres´aˇr,tradiˇcnˇenazvan´e . a .., vyhled´avac´ıalgoritmus si pak nevˇs´ım´aadres´aˇr˚u takto pojmenovan´ych, protoˇzejde pouze o dalˇs´ıalternativn´ıcesty k tˇemto adres´aˇr˚um. £ V t´etostruktuˇred´alemus´ıb´ytvyˇreˇsenoruˇsen´ıpoloˇzektak, aby nevznikali sirotci“ bez jak´ehokoliv ” um´ıstˇen´ı,a tedy nevyhledateln´ı,tˇrebaˇzezab´ıraj´ıc´ım´ıstona disku. To lze ˇreˇsitdvˇemazp˚usoby: a) Kaˇzd´apoloˇzka (soubor i adres´aˇr,kter´ym˚uˇzeb´ytve v´ıceadres´aˇr´ıch) m´aˇc´ıtaˇc,kter´yzachycuje poˇcetodkaz˚una tuto poloˇzku(poˇcetv´yskyt˚uadresy t´etopoloˇzkyv r˚uzn´ych adres´aˇr´ıch). Pˇri ruˇsen´ıpoloˇzkyje nejdˇr´ıvjej´ıˇc´ıtaˇcsn´ıˇzeno 1. Pokud po tomto sn´ıˇzen´ım´ahodnotu 0, je poloˇzka fyzicky vymaz´ana, jinak je ponech´ana. b) Kromˇev´yskyt˚uadres v adres´aˇr´ıch jsou poloˇzky evidov´any syst´ememjeˇstˇezvl´aˇst’. Pˇrimaz´an´ı poloˇzkyse odstran´ıpouze jej´ız´aznamv tom adres´aˇri,ze kter´ehomaˇzeme, tedy odstran´ıse pouze jeden odkaz na poloˇzku.Syst´empak pravidelnˇeproch´az´ıvˇsechny poloˇzkya fyzicky odstraˇnuje ty, kter´enejsou v ˇz´adn´emadres´aˇri,na kter´enevede ˇz´adn´yodkaz. V UNIXov´ych syst´emech, kde jsou bˇeˇzn´eacyklick´esouborov´esyst´emy, se pouˇz´ıv´asp´ıˇseprvn´ızp˚usob (tj. ˇc´ıtaˇc,v re´aluˇc´ıtaˇcpevn´ych odkaz˚una soubor).

8.3 Soubory a syst´emsoubor˚u

 Rozezn´av´ametyto z´akladn´ıtypy soubor˚u: • standardn´ı(dokumenty, spustiteln´esoubory), • adres´aˇrecoby kontejnery soubor˚ua jin´ych adres´aˇr˚u, Kapitola 8 Pametˇ ’ova´ media´ 149

(a) dvou´urovˇnov´astruktura: (b) stromov´astruktura:

 Q ¡ A  ¡ Q ¡ A  ¡ Q  Qs ¡ A + ¡ ¡ ¡ A  A ¡ ? A ¡ A A A  ¡ A A AAU © A ¡ ¡ AAU AAU  £ £ ?  ? ? £ ¡ A   ££ ¡ A ¡ A ? ? ?    ¡ ¡ ? AAU        (c) acyklick´astruktura: (d) cyklick´astruktura:

 Q  Q  ¡ Q  ¡ Q  ¡ QQs  ¡ QQs  ¡  ¡ + ¡ + ¡   £ A  £ A A £ A A £ A   © A £ AAU © A £ AAU A £ A £ AAU ££  AAU ££  £ A A £ A A £ A AAU ?  £ A AAU ?  £ A ¡ A £ A ¡ A   ££ A ¡ A ££ A ¡ A A ¡ A A ¡ A A ¡ A A ¡ A  AU ¡ ? AU  AU ¡ ? AU       Obr´azek8.1: R˚uzn´etypy struktur adres´aˇr˚u

• simulovan´e(pro pˇr´ıstupk I/O zaˇr´ızen´ınebo pro mechanismus pipes), • odkl´adac´ısoubory pro virtu´aln´ıpamˇet’.  Souborov´ysyst´em (syst´emsoubor˚u)jsou metody a struktury dat, pomoc´ıkter´ych operaˇcn´ısyst´em udrˇzujez´aznamy o souborech. Data se na disk ukl´adaj´ıline´arnˇe(jeden bit za druh´ym),souborov´e syst´emy potˇrebujemejako jednoduch´edatab´aze,kter´eumoˇzˇnuj´ıpˇr´ıstupke konkr´etn´ımdat˚um,tˇr´ıdˇen´ı (do adres´aˇr˚u)a udrˇzov´an´ıinformac´ıo tˇechto datech. V kaˇzd´emoperaˇcn´ımsyst´emu jsou u soubor˚uevidov´any trochu jin´evlastnosti. Kromˇen´azvusou- boru a jeho pˇr´ıpony je tˇrebaurˇcovat pˇr´ıstupov´apr´ava k tomuto souboru nebo atributy. To je realizov´ano r˚uzn´ymizp˚usoby, z nichˇznˇekter´ebudou podrobnˇejipops´any d´ale.  Nˇekter´emoˇznostievidovan´ych poloˇzek: a) Souborov´esyst´emy typu FAT (Windows s DOS j´adrema jin´esyst´emy) – urˇcuj´ıse pouze atri- buty, ˇz´adn´aochrana pˇr´ıstupu,jsou to atributy A (k archivaci), D (adres´aˇr),L (popisek disku), S (syst´emov´y),H (skryt´y),R (pouze pro ˇcten´ı). b) Multics – kaˇzd´ysoubor obsahuje jako metadata kompletn´ıseznam uˇzivatel˚us jejich pˇr´ıstupov´ymi pr´avy. Kapitola 8 Pametˇ ’ova´ media´ 150

vytvorˇı´me symbolicky´odkaz [sarka@sarka Ä]$ ln -s /etc/fstab ./pripojitelnamedia  [sarka@sarka Ä]$ ln .bash_profile mujprofil  vytvorˇı´me pevny´odkaz [sarka@sarka Ä]$ ls -la pocˇet pevny´ch odkazu˚: total 136 ? 22 vcˇ. podadresa´rˇu˚, pu˚vodnı´cesty a odkazu na sebe sama drwx------. 22 sarka sarka 4096 Apr 30 10:53 . pevny´odkaz na sebe (/home/sarka) drwxrwxr-x.§ 3¤ root root 4096 Nov 21 16:57 .. /home Xy pevny´odkaz na nadrˇı´zeny´adresa´rˇ( ) .... ¦§ ¤¥X adresa´rˇ /home ma´3 vcˇ. podadresa´rˇe, pu˚v. cesty a odkazu na sebe sama -rw-r--r--.¦ 1¥ sarka sarka 18 Apr 23 2012 .bash_logout -rw-r--r--. 2 sarka sarka 193 Apr 23 2012 .bash_profile § Xy¤XX .... 9 na tento soubor existujı´dva pevne´odkazy: .bash_profile a mujprofil -rw-r--r--.¦ 2¥ sarka sarka 193 Apr 23 2012 mujprofil .... § ¤ lrwxrwxrwx.¦ 1¥ sarka sarka 10 Apr 30 10:53 pripojitelnamedia -> /etc/fstab XyX .... § ¤ X je to jen symbolicky´odkaz, nevytva´rˇı´novou cestu k cı´li, ¦ ¥ tedy beˇzˇny´soubor s vlastnı´cestou/pevny´m odkazem

Oveˇrˇme si pocˇet podadresa´rˇu˚v adresa´rˇı´ch /home a /home/sarka – nejdrˇı´v vypı´sˇeme cely´ obsah, pak vyfiltrujeme pouze ty rˇa´dky,ktere´zacˇı´najı´ „d“ a za´rovenˇkoncˇı´neˇcˇı´m jiny´m nezˇtecˇkou (vsˇimneˇte si escape sekvence), a pak to prozˇeneme pocˇı´tacı´m filtrem:

[sarka@sarka Ä]$ ls -la /home/sarka | grep Ãd.*[Ã\.]$ | wc -l 20 [sarka@sarka Ä]$ ls -la /home | grep Ãd.*[Ã\.]$ | wc -l 1

Potom pocˇet pevny´ch odkazu˚na /home/sarka je 20 + 1 (prvnı´vytvorˇena´cesta k souboru vedoucı´prˇes /home) + 1 (odkaz na sebe sama) = 22 (podobneˇpro adresa´rˇ /home,tamtoje1+1+1=3)

Obr´azek8.2: Uk´azka zjiˇstˇen´ıpoˇctupevn´ych odkaz˚una soubor v Linuxu

c) Souborov´ysyst´emNTFS (Windows s NT j´adrem)– pˇr´ıstupov´apr´ava n (ˇz´adn´e), r (pr´avo ˇcten´ı), w (z´apisu), c (zmˇeny), f (veˇsker´apr´ava) a zvl´aˇstn´ıopr´avnˇen´ı,pr´ava se pˇriˇrazuj´ıuˇzivatel˚umnebo skupin´am(a tedy vˇsemˇclen˚umdan´eskupiny). Daj´ıse dˇedit,tedy nen´ınutn´edefinovat je pro kaˇzdoupoloˇzkuzvl´aˇst’. Pouˇz´ıv´ame bezpeˇcnostn´ıdeskriptory, pˇr´ıstupov´etokeny. d) UNIXov´esouborov´esyst´emy – pr´ava r (ˇc´ıst), w (zapisovat), x (spouˇstˇet).Kaˇzd´epoloˇzcese pˇriˇrazuj´ıtato pr´ava pro vlastn´ıka, pˇridruˇzenouskupinu a pro ostatn´ı,tedy ve vlastnostech sou- boru jsou tˇri´udaje, kaˇzd´yz nich obsahuje kombinaci pr´av rwx (tˇribity, pokud je pr´avo pˇridˇeleno, je bit nastaven na 1). Evidov´anje tak´evlastn´ıksouboru a skupina. Nav´ıcjsou k dispozici ACL, atributy, PAM apod.

 Odolnost v˚uˇcihav´ari´ım. Syst´emy soubor˚um˚uˇzemeˇclenitpodle r˚uzn´ych krit´eri´ı,uvedeme si ˇclenˇen´ıpodle odolnosti v˚uˇcihav´ari´ım: 1. Souborov´esyst´emys okamˇzit´ymz´apisem (FAT, FAT32) – pokud aplikace chce zapisovat na disk a z´aroveˇnprob´ıh´ajin´adiskov´aoperace, mus´ıpoˇckat. V´yhodou je bezpeˇcnost(data se nemohou neoˇcek´avanˇeztratit bez toho, aby to aplikace nevˇedˇela“), nev´yhodou sn´ıˇzen´ıv´ykonnosti (ˇcek´an´ı ” pˇripr´acis diskov´ymodd´ılem). 2. Souborov´esyst´emys opatrn´ymz´apisem (HPFS) – rozdˇel´ız´apisdo posloupnosti d´ılˇc´ıch operac´ı, u kter´ych nen´ıpravdˇepodobn´e,ˇzeby mohly b´ytpˇreruˇseny (trvaj´ıvelmi kr´atkou dobu). Kdyˇz dojde s selh´an´ıpˇriz´apisu,data z˚ustanoukonzistentn´ı(ˇz´adn´ad´ılˇc´ıoperace nez˚ustane viset“). ” Vlastnˇese jedn´ao jednoduch´ydatab´azov´ysyst´ems definovan´ymitransakcemi. Kapitola 8 Pametˇ ’ova´ media´ 151

3. Souborov´esyst´emys opoˇzdˇen´ymz´apisem – pouˇz´ıvaj´ıcache pamˇet’ (vyrovn´avac´ıpamˇet’), tedy data se nejdˇr´ıvzapisuj´ıdo cache pamˇeti,zapisuj´ıc´ıaplikace m˚uˇzed´alepracovat, z cache pamˇeti se data zap´ıˇsouna disk aˇztehdy, kdyˇzdisk dokonˇc´ıpˇredchoz´ıprob´ıhaj´ıc´ıoperaci. V´yhodou je zv´yˇsen´ıv´ykonnosti syst´emu (procesy nejsou zdrˇzov´any z´apisemna disk), nev´yhodou je moˇznost ztr´aty dat pˇrihav´arii. 4. Zurn´alovac´ısouborov´esyst´emyˇ (journalized, zotaviteln´e– NTFS a vˇetˇsinalinuxov´ych soubo- rov´ych syst´em˚u)si uchov´avaj´ıinformace o operac´ıch, kter´ebyly provedeny (tak jako v syst´emech s opatrn´ymz´apisem,plus soubor s evidenc´ı),aby bylo moˇzn´ev pˇr´ıpadˇev´ypadkudostat data zpˇetdo konzistentn´ıhostavu.

 Zmˇeny jsou evidov´any podobnˇejako v datab´az´ıch jako transakce. Transakce se skl´ad´az jedno- duch´ych (atomick´ych) operac´ı,navz´ajemoddˇeliteln´ych, tyto operace se postupnˇeeviduj´ı.Po pro- veden´ıvˇsech operac´ı,ze kter´ych se transakce skl´ad´a,je odesl´ano potvrzen´ı,kter´eznamen´a´uspˇeˇsn´e ukonˇcen´ıtransakce, jednotliv´eoperace transakce se z ˇzurn´aluvymaˇzou(uˇznejsou potˇreba).Po- kud syst´em spadne“, tˇrebadojde k n´ahl´emu v´ypadkuel. proudu, m˚uˇzemese u nedokonˇcen´ych ” transakc´ıvr´atitzpˇetpodle zaznamenan´ych operac´ı.

M Pˇr´ıklad V pˇr´ıpadˇeNTFS ˇzurn´alov´an´ıprob´ıh´atakto: • bˇehemkaˇzd´eoperace na disku jsou d´ılˇc´ıoperace zaznamen´av´any do ˇzurn´alu(logu), po ukonˇcen´ı operace vˇcetnˇevymaz´an´ız cache jsou vˇsechny tyto d´ılˇc´ıoperace z logu vymaz´any, • po startu syst´emu se proch´az´ıtento log soubor a opakuj´ıse vˇsechny dokonˇcen´etransakce (aby bylo jist´e,ˇzebyly zaps´any z cache pamˇetina disk) a ruˇs´ıvˇsechny nedokonˇcen´e, • mohou se pouˇz´ıvat kontroln´ıbody (m´ısto,kdy jsou vˇzdyvˇsechny transakce provedeny, v pravi- deln´ych ˇcasov´ych intervalech, od tohoto bodu lze prov´estzotaven´ı). M

 Virtu´aln´ı souborov´ysyst´em je takov´ysouborov´ysyst´em,kter´ynem´apˇr´ımou podporu na konkr´etn´ımpamˇet’ov´emm´ediu.Virtu´aln´ısouborov´esyst´emy se pouˇz´ıvaj´ık abstrakci pˇr´ıstupuk ostatn´ım souborov´ymsyst´em˚um(pˇredevˇs´ımv UNIXov´ych syst´emech) nebo pro snadnˇejˇs´ıpˇr´ıstupk dat˚um,kter´a pˇr´ımonesouvisej´ıs jedn´ımfyzick´ymzaˇr´ızen´ım(napˇr´ıkladbˇehov´e´udaje o stavu syst´emu v UNIXov´ych syst´emech). Jde vlastnˇeo jak´esivirtu´aln´ıkomunikaˇcn´ırozhran´ı.

 Fragmentace je zp˚usobena pˇredevˇs´ımt´ım,ˇzepokud je soubor pˇr´ıliˇsdlouh´y,mohou b´ytjeho ˇc´asti(fragmenty) uloˇzeny na r˚uzn´ych ˇc´astech disku. Fragmentace se mus´ıˇcastoˇreˇsitv souborov´ych syst´emech, kter´eve snaze rychle naj´ıt voln´em´ısto pˇriukl´ad´an´ı souboru vezmou prvn´ıvoln´yblok, zaˇcnouukl´adat,kdyˇznestaˇc´ı,najdou dalˇs´ıvoln´yblok, kter´ysamozˇrejmˇem˚uˇzeb´yt´uplnˇejinak um´ıstˇen, pokraˇcuj´ıv ukl´ad´an´ı,pak dalˇs´ıvoln´yblok, . . .

 Souborov´esyst´emy pro vymˇeniteln´am´edia: Na vymˇeniteln´ych m´edi´ıch se pouˇz´ıvaj´ıobvykle takov´esouborov´esyst´emy, kter´ym rozum´ı“ pokud moˇznovˇsechny operaˇcn´ısyst´emy nebo alespoˇnten ” operaˇcn´ısyst´em,kter´ym´amenainstalov´an.Pro CD je to obvykle CDFS (Compact Disk File System), pro DVD, ale i pro CD, je to UDF (Universal Disk Format) nebo nˇekter´yFAT, USB flash disky m´ıvaj´ı nˇekter´ysouborov´ysyst´emtypu FAT nebo ext2fs. Kapitola 8 Pametˇ ’ova´ media´ 152

8.4 Souborov´esyst´emy ve Windows

8.4.1 Starˇs´ıverze souborov´ehosyst´emu typu FAT

Souborov´esyst´emy typu FAT byly vyvinuty pro operaˇcn´ısyst´emy MS-DOS a Windows. FAT je zkratka z File Allocation Table, syst´emje zaloˇzenna evidenci um´ıstˇen´ısoubor˚ua adres´aˇr˚uv tabulce na zaˇc´atku disku. Nejdˇr´ıvse pod´ıv´amena strukturu jednoduˇsˇs´ıvarianty (FAT16) a pak si uk´aˇzeme, co nav´ıcfunguje v novˇejˇs´ım FAT32.

 FAT16 byl urˇcenpro pevn´edisky. D´elka clusteru je pro velmi mal´edisky obvykle 2 sektory (1 KB), se zvyˇsuj´ıc´ıse kapacitou disku je tato hodnota v´yraznˇevyˇsˇs´ı,urˇcujese napevno podle velikosti disku. Struktura odd´ıluse souborov´ymsyst´ememFAT16 je n´asleduj´ıc´ı: • boot sektor (zav´adˇec´ısektor, odkaz na zav´adˇec´ız´aznam= um´ıstˇen´ıprogramu, kter´ypo zapnut´ı nebo restartu poˇc´ıtaˇcezavede operaˇcn´ısyst´em) • FAT (File Allocation Table), tabulka obsazen´ılogick´ehodisku • jej´ıkopie (pouˇziteln´av pˇr´ıpadˇe,ˇzese prvn´ıFAT poˇskod´ı) • root (hlavn´ıadres´aˇrdisku) – zvl´aˇstn´ıstruktura s pevnou d´elkou, proto v hlavn´ımadres´aˇri disku m˚uˇzeb´ytpouze limitovan´ypoˇcetobjekt˚u(soubor˚unebo adres´aˇr˚u) • clustery – zde jsou ukl´ad´any soubory a dalˇs´ıadres´aˇre.Adres´aˇrejsou uspoˇr´ad´any do stromov´e struktury. Clustery jsou oˇc´ıslov´any (od 1), kaˇzd´ym´apodle sv´ehopoˇradov´ehoˇc´ısla pˇriˇrazenjeden z´aznamve FAT tabulce.

 Obsah FAT tabulky. Jednotliv´eclustery datov´eoblasti jsou oˇc´ıslov´any, FAT obsahuje pro kaˇzd´y cluster jeden z´aznamzab´ıraj´ıc´ı2 B (od toho n´azevFAT 16, 2 B = 16 bit˚u,ale ve skuteˇcnostise pro ˇc´ıslacluster˚unepouˇz´ıvaj´ıvˇsechny moˇzn´ehodnoty, nˇekter´ejsou vyhrazeny a vytv´aˇrej´ıspeci´aln´ık´ody napˇr´ıkladpro vadn´ycluster). Obsah z´aznam˚uv tabulce urˇcuje,co v pˇr´ısluˇsn´emclusteru najdeme. Jestliˇze je cluster voln´y,je zde ˇc´ıslo 0x0000, vadn´y– ˇc´ıslo0xFFF7 (toto ˇc´ıslozde zapisuj´ıprogramy pro kontrolu povrchu disku). Pokud je v clusteru uloˇzenaˇc´astnˇekter´ehosouboru nebo adres´aˇre,v tabulce je na tomto m´ıstˇeiden- tifikace n´asleduj´ıc´ıhoclusteru (tedy napˇr´ıkladpro soubor cluster, ve kter´empokraˇcuje,jde o zˇretˇezen´ı). Jestliˇzejde o posledn´ıcluster souboru nebo adres´aˇre(a proto ˇz´adn´ycluster nen´asleduje“), je v z´aznamu ” FAT ˇc´ıslo0xFFFF.

M Pˇr´ıklad Soubor zaˇc´ın´ana clusteru s ˇc´ıslem 0x0021, pokraˇcujepostupnˇena clusterech 0x0027, 0x0025, 0x0026, 0x0029. Cluster 0x0022 je poˇskozen´y,ostatn´ıaˇzpo cluster 0x002A jsou voln´e.FAT tabulka od z´aznamu 21 po z´aznam2A vypad´atakto:

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

Tabulka 8.1: Pˇr´ıklad struktury FAT tabulky v souborov´emsyst´emu FAT16

M Kapitola 8 Pametˇ ’ova´ media´ 153

Pokud chceme naˇc´ıst urˇcit´ysoubor (nebo adres´aˇr),mus´ıme pˇrednˇezn´atˇc´ıslo clusteru, na kter´em zaˇc´ın´a.V z´aznamu ve FAT tabulce pro tento cluster zjist´ıme,na kter´emclusteru pokraˇcuje,v jeho z´aznamu najdeme ˇc´ıslo dalˇs´ıhoˇcl´ankuv ˇretˇezci,atd. Retˇezen´ıcluster˚um˚uˇzeb´ytv´yhodouˇ (organizace nezab´ır´apˇr´ıliˇsmnoho m´ıstana disku), ale tak´e nev´yhodou (poˇskozen´ıjednoho ´udaje ve FAT vede k tomu, ˇzeztrat´ımecel´yzbytek souboru).

 Datov´aoblast. Pod t´ımto pojmem budeme rozumˇetvˇse,co je za FAT tabulkami, tedy root a clustery. Root obsahuje odkazy na adres´aˇre,adres´aˇremohou podle stromov´estruktury obsahovat odkazy na dalˇs´ıadres´aˇrenebo odkazy na soubory, root tak´em˚uˇzeobsahovat soubory. Root tak´em˚uˇze obsahovat poloˇzkutypu label (popisek), kter´ypˇredstavuje jm´enodisku (diskety). Zat´ımcobˇeˇzn´ysoubor obsahuje jak´akoliv data, adres´aˇrse skl´ad´az poloˇzeko d´elce32 B popisuj´ıc´ıch soubory a podadres´aˇrepro dan´yadres´aˇr,v poloˇzk´ach jsou evidov´any n´asleduj´ıc´ıinformace: • n´azevsouboru ˇcipodadres´aˇre(8 B), • pˇr´ıpona souboru (3 B), • pokud poloˇzka pˇredstavuje label, tedy n´azevdisku, tento n´azevzab´ır´acel´ych pˇredchoz´ıch 11 (8+3) B, • atributy (1 B), jednotliv´ebity znamenaj´ı xxADLSHR, kde x voln´ebity, nepouˇz´ıvaj´ıse, A k archivaci, D directory – adres´aˇr, L label – n´azevdisku, atribut˚umpˇredch´az´ısamotn´yn´azev, S syst´emov´y, H skryt´y, R pouze pro ˇcten´ı. • ˇcasa datum vytvoˇren´ıa datum posledn´ıho pˇr´ıstupu(3+2+2 B), • ˇcasa datum posledn´ızmˇeny, tj. z´apisudo souboru nebo zmˇeny struktury adres´aˇre(2+2 B), • prvn´ıcluster souboru nebo adres´aˇre(pro label nem´av´yznam,= 0) (2 B), • d´elka souboru nebo adres´aˇre(pro label nem´av´yznam)(4 B), zbytek rezervov´an.

£ Pokud napˇr´ıkladje v nˇejak´emadres´aˇri5 podadres´aˇr˚ua 2 soubory, najdeme v clusteru, kter´yje pro tento adres´aˇrpˇridˇelen,celkem 7 poloˇzek,z nich 5 m´aatribut nastaven na 00010000 (pokud nen´ı pro cel´yadres´aˇrzapnuta archivace), zbyl´edvˇepoloˇzkyjsou odkazy na soubor a atribut mohou m´ıt napˇr´ıkladve tvaru 00100000. Ve vˇsech 7 poloˇzk´ach je d˚uleˇzit´ym´udajem tak´eto, co je ve v´yˇctuuvedeno v pˇredposledn´ıodr´aˇzce, cluster, na kter´emzaˇc´ınaj´ıdata souboru nebo adres´aˇre.Ve FAT tabulce pak nalezneme z´aznams t´ımto ˇc´ıslem a zjist´ıme, jestli se jedn´ao posledn´ı cluster (obsahuje ˇc´ıslo 0xFFFF) nebo kter´ymclusterem posloupnost pokraˇcuje. Velikost clusteru je pro disky velikosti od 512 MB do 1 GB stanovena na 16 KB, pro vˇetˇs´ı(do 2 GB) na 32 KB. Ud´av´ase, ˇzesyst´emFAT16 nen´ıpouˇziteln´ypro logick´edisky vˇetˇs´ıneˇz4 GB, a nen´ı prakticky pouˇziteln´ypro disky vˇetˇs´ıneˇz2 GB (pro max. velikost clusteru 32 KB, tedy 16 sektor˚u, kter´aje pouˇzitav DOSu a starˇs´ıch Windows s DOS j´adrem)nebo 4GB (ve Windows NT – umoˇzˇnuj´ı vyuˇz´ıtmaxim´aln´ıvelikost clusteru 64 KB, tedy 32 sektor˚u). Kapitola 8 Pametˇ ’ova´ media´ 154

8.4.2 VFAT a FAT32

 VFAT je zkratka z Virtual FAT a je to n´astavba pro FAT16, kter´ak vlastnostem tohoto sou- borov´ehosyst´emu pˇrid´av´apˇredevˇs´ımpodporu dlouh´ych n´azv˚usoubor˚u(t´yk´ase tak´edelˇs´ıch pˇr´ıpon soubor˚u,jako je tˇreba HTML) a moˇznostpouˇz´ıvat v n´azvech nˇekter´edalˇs´ıznaky (jako tˇrebaznaky n´arodn´ıch abeced nebo mezery). Jde o virtu´aln´ı ovladaˇc,pˇreskter´yjde komunikace se syst´emem FAT16, najdeme ho od Windows 95. Tedy pokud ve Windows od t´etoverze, v ˇradˇeNT od verze 3.5, pouˇz´ıv´ameFAT16, jde o VFAT. T´ımto term´ınemb´yv´atak´eoznaˇcov´ansyst´emFAT32, kter´ym´a podobn´evlastnosti, ale jiˇzinternˇe,bez potˇreby n´astavby. N´azevsouboru nebo adres´aˇreve VFAT maxim´alnˇe255 znak˚u,nˇekter´ezdroje uv´adˇej´ı,ˇzetato d´elka je vˇcetnˇecesty k souboru. Omezen´ı je nutn´e,protoˇzen´azev souboru (v´ıcem´enˇeˇcastovˇcetnˇecesty k souboru) je pouˇz´ıv´anjako parametr mnoha funkc´ıpˇriprogramov´an´ı,mus´ıse vej´ıtdo pamˇet’ov´eho prostoru vymezen´ehodan´ymdatov´ymtypem. Samotn´apodpora dlouh´ych n´azv˚uje realizov´anatak, ˇzepro delˇs´ın´azevje vyuˇzitan´asleduj´ıc´ıpoloˇzka (poloˇzky)v adres´aˇri.  Poloˇzkyadres´aˇremaj´ıtrochu jinou formu, rozezn´av´ameˇctyˇritypy: • poloˇzkypro soubory, • poloˇzkypro adres´aˇre, • poloˇzky(-a) pro label (jmenovku) disku, • poloˇzka pro rozˇs´ıˇren´yn´azevsouboru nebo adres´aˇre. Poloˇzka pro rozˇs´ıˇren´yn´azevsouboru nebo adres´aˇrem´aspecifickou formu. D´elka je stejn´ajako u ostat- n´ıch (32 B), ale obsahuje nˇekter´edalˇs´ıparametry a 13 symbol˚upro rozˇs´ıˇren´yn´azev,stejnˇejako u sou- bor˚ujsou tyto poloˇzkyzˇretˇezeny (ve FAT tabulce), n´asleduj´ıc´ı poloˇzka v ˇretˇezciobsahuje dalˇs´ıch 13 znak˚u,. . . V p˚uvodn´ı poloˇzcesouboru nebo adres´aˇreje n´azev souboru pro DOS ve formˇe8.3 odvozen´y z dlouh´ehojm´enakonverz´ı(vypuˇstˇen´ımezer a dalˇs´ıch v DOSu nedovolen´ych znak˚u“, pˇr´ıpadnˇeje- ” jich nahrazen´ı,konec je odˇr´ıznut a nahrazen identifikac´ırozliˇsuj´ıc´ısoubory nebo adres´aˇrese stejn´ym zkr´acen´ymn´azvem. Microsoft uv´ad´ı,ˇzedlouh´ejm´enolze pouˇz´ıti pro label disku, ovˇsemre´alnˇemohou nastat probl´emy s kompatibilitou disku pro r˚uzn´eoperaˇcn´ısyst´emy.

 FAT32 je pouˇziteln´yv operaˇcn´ıch syst´emech Windows 95 OSR2, 98, ME, 2000, XP a novˇejˇs´ıch. Verze Windows 95, Windows NT do 4.x vˇcetnˇea starˇs´ıs n´ımnedok´aˇzoupracovat. FAT32 pˇrej´ım´avˇsechny vlastnosti VFAT vˇcetnˇepodpory dlouh´en´azvysoubor˚u.Lze nadefinovat r˚uznouvelikost cluster˚uv rozmez´ıMIN–16 (nebo 32) sektor˚u,podle verze Windows, kde hodnota MIN se ˇr´ıd´ıvelikost´ıdisku:

Velikost disku Nejmenˇs´ıvelikost clusteru 512 MB – 8 GB 4 KB 8 GB – 16 GB 8 KB 16 GB – 32 GB 16 KB 32 GB – 2 TB 32 KB = 16 sektor˚u

Tabulka 8.2: Nejmenˇs´ıvelikost clusteru pro souborov´ysyst´emFAT32 Kapitola 8 Pametˇ ’ova´ media´ 155

Pˇrivytv´aˇren´ısouborov´ehosyst´emu tedy m˚uˇzemevolit kteroukoliv hodnotu v tomto rozmezi. Do- poruˇcujese nevolit pˇr´ıliˇsn´ızkou hodnotu, protoˇzeto zvyˇsuje n´arokyna spr´avusouborov´ehosyst´emu (velk´aFAT tabulka, pomaleji se v n´ıhled´a),vyˇsˇs´ıneˇzpotˇrebn´ahodnota zase nen´ıv´yhodn´a,pokud m´amehodnˇemal´ych soubor˚u(kaˇzd´ysoubor zab´ır´anejm´enˇejeden cluster). Proto se doporuˇcujezvolit nˇejak´yvhodn´ykompromis.  FAT32 m´aoproti FAT16 tyto v´yhody: • je moˇzn´estanovit pˇriform´atov´an´ıi menˇs´ıvelikost clusteru, takˇzepokud m´amemnoho mal´ych“ ” soubor˚u,je disk optim´alnˇeji vyuˇzit, • je pouˇziteln´apro disky vˇetˇs´ıneˇz2 GB (ale pro logick´edisky menˇs´ıneˇz512 MB ji nelze pouˇz´ıt), • velikost FAT tabulky m˚uˇzeb´ytjak´akoliv, internˇese s n´ızach´az´ıjako se souborem, proto je moˇzn´e ji prodluˇzovat, • root se skl´ad´az bˇeˇzn´ych cluster˚u,m˚uˇzeb´ytproto jakkoliv dlouh´ya takt´eˇzpˇresouv´anna jin´e m´ısto, • syst´emreaguje rychleji a je l´epe chr´anˇenproti chyb´am, • podporuje dlouh´en´azvysoubor˚u.

 Ve FAT tabulce se tedy nach´azej´ız´aznamy o clusterech a jde o 32bitov´aˇc´ısla.Pokud jde o z´aznamy urˇcuj´ıc´ı,na kter´emclusteru pokraˇcujesoubor ˇci adres´aˇr,ve skuteˇcnostijsou uloˇzeny v 28 bitech tohoto ˇc´ısla,zbytek je opˇetvyhrazen speci´aln´ımk´od˚um. Napˇr´ıklad: • 0x00000000, 0x10000000, 0xF0000000 znamenaj´ı,ˇzecluster je voln´y(spodn´ıch 28 bit˚uje 0, zbyl´e mohou obsahovat cokoliv), • 0x0FFFFFF7 je chybn´ycluster, • 0xFFFFFFFF znamen´aposledn´ıcluster souboru nebo adres´aˇre.

8.4.3 Souborov´ysyst´emNTFS

 NTFS (New Technology File System) je ˇzurn´alovac´ı souborov´ysyst´emvyvinut´ypro Windows ˇradyNT. Byl pouˇz´ıv´anjiˇzv prvn´ıch verz´ıch (3.x), ale pˇripˇrechodu na verzi 4 byl znaˇcnˇepˇrepracov´an, proto mnoh´en´astroje, kter´enˇejak´ymzp˚usobem z´avisej´ı na NTFS, ˇcastovyˇzaduj´ı alespoˇnverzi 4 (napˇr´ıkladn´astroje pro zmˇenu velikosti odd´ılu).Hlavn´ımpoˇzadavkem pˇrijeho vyv´ıjen´ıbylo zajiˇstˇen´ı vˇetˇs´ıbezpeˇcnostidat, pˇredevˇs´ımmoˇznostdefinov´an´ıpˇr´ıstupov´ych pr´avpro r˚uzn´euˇzivatele. Je urˇcen pro velk´edisky, lze ho pouˇz´ıti na mal´edisky, ale ne na diskety. V souborov´emsyst´emu NTFS m´amemoˇznostˇr´ıditpˇr´ıstupk soubor˚uma sloˇzk´amdefinov´an´ım pˇr´ıstupov´ych pr´avpro r˚uzn´euˇzivatele a skupiny. Kaˇzd´emu souboru nebo sloˇzce je pˇriˇrazen Access Control List (ACL, seznam ˇr´ızen´ıpˇr´ıstupu)se seznamem uˇzivatel˚ua skupin a jejich pˇr´ıstupov´ymi pr´avy. Druhy pˇr´ıstupov´ych pr´avjsou n (nen´ıdovolen ˇz´adn´ypˇr´ıstup), r (pr´avo ˇcten´ı), w (tak´epr´avo z´apisu), c (pr´avo zmˇeny), f (´upln´eˇr´ızen´ı),vˇzdy pro urˇcit´ehouˇzivatele nebo skupinu. £ Pˇr´ıstupov´apr´ava se definuj´ı v grafick´emrozhran´ı ve Vlastnostech souboru (sloˇzky),karta Za- bezpeˇcen´ı, nebo v Pˇr´ıkazov´em ˇr´adkupˇr´ıkazem cacls (existuj´ıjeˇstˇedalˇs´ımoˇznosti,pˇrehledn´astroj˚u a jejich pouˇz´ıv´an´ıjsme mˇelina cviˇcen´ıch). Kapitola 8 Pametˇ ’ova´ media´ 156

Aby nebylo nutn´edefinovat pln´yACL pro kaˇzd´ysoubor nebo adres´aˇr,pˇr´ıstupov´apr´ava se mohou dˇedit.Pro urˇcen´ı, jak m´adˇedˇen´ı fungovat, se pouˇz´ıv´au sloˇzekparametr /t, kter´yzp˚usob´ı zmˇenu i u podsloˇzekzpracov´avan´esloˇzky. U soubor˚u,kter´enejsou sloˇzkami, se samozˇrejmˇedˇedˇen´ınepouˇz´ıv´a. £ Kdyˇzpˇr´ıkazem cacls sloˇzka vyp´ıˇsemeACL t´etosloˇzky, dˇedˇen´ıje zachyceno tˇemitozkratkami: OI plat´ıpro tuto sloˇzkua vˇsechny soubory v n´ı(ne pro podsloˇzky), CI plat´ıpro tuto sloˇzkua vˇsechny podsloˇzkyv n´ı(ne pro soubory v n´ı), IO neplat´ıpro tuto sloˇzku. Zkratky jsou ve v´ypisuzkombinov´any takto: (OI)(CI) plat´ıpro tuto sloˇzkua cel´yjej´ıobsah (podsloˇzkyi soubory), (OI)(CI)(IO) plat´ıpro cel´yjej´ıobsah – podsloˇzkyi soubory (ale ne pro samotnou sloˇzku), (CI)(IO) plat´ıjen pro podsloˇzkyv n´ıobsaˇzen´e, (OI)(IO) plat´ıjen pro soubory v n´ıobsaˇzen´e.

 Vlastnosti NTFS: • Vˇsechno je soubor (tedy tak´evˇsechny implicitn´ıstruktury na disku jsou implementov´any jako speci´aln´ısoubory). • Moˇznostˇr´ıditpˇr´ıstupk soubor˚uma sloˇzk´amdefinov´an´ımpˇr´ıstupov´ych pr´avpro r˚uzn´euˇzivatele a skupiny. • Podpora n´asobn´ychproud˚udat (stream˚u)– kaˇzd´ysoubor m˚uˇzeobsahovat v´ıcedatov´ych proud˚u (nejm´enˇejeden). Jeden z nich je hlavn´ı,nen´ıpojmenov´an,jde vlastnˇepˇr´ımoo data souboru, ostatn´ı proudy jsou pojmenovan´e(napˇr´ıklad stream s n´azvem STREAM5 u souboru SOU- BOR.XYZ je SOUBOR.XYZ:STREAM5). V proudech m˚uˇzeb´ytcokoliv, ve Windows 2000 se v sekund´arn´ıch proudech napˇr´ıkladukl´ad´aautor a informace o obsahu souboru, celkovˇeale z´aleˇz´ı na program´atorovi aplikace vytv´aˇrej´ıc´ısoubor. O streamech a tak´emoˇznostech jejich zneuˇzit´ı jsme se uˇcilina cviˇcen´ıch. • N´azvysoubor˚umohou b´ytv UNICODE (sice zaberou v´ıcem´ıstana disku, ale neb´yvaj´ıtak velk´e probl´emy se znaky nepatˇr´ıc´ımido anglick´en´arodn´ıznakov´esady). • Moˇznost indexace podle r˚uzn´ych typ˚udat (nejen n´azevsouboru, ale tak´epˇr´ıstupov´apr´ava, ˇcasvytvoˇren´ı souboru, . . . ), zrychluje vyhled´av´an´ı dat na disku (NTFS implementuje vpod- statˇedatab´azov´efunkce). Indexace m˚uˇzem´ıtale tak´enegativn´ıefekt, protoˇzecelkovˇezpomaluje v´ykonnost syst´emu (udrˇzov´an´ıindex˚uvyˇzaduje,aby pˇrikaˇzd´ezmˇenˇeurˇcit´ych ´udaj˚ubyl zmˇenˇen i indexov´ysoubor). Pokud nastane tento probl´em,je moˇzn´eindexov´an´ıvypnout (vypneme sluˇzbu Indexing Services). • Dynamick´epˇremapov´an´ıvadn´ychsektor˚u (vadn´ysektor se nahrad´ıjin´ym,pokud jsou data re- dundantn´ı,pak se pˇripoˇskozen´ızkop´ıruj´ı ze z´alohy“). ” • Sifrov´an´ıaˇ komprese. Sifrov´an´ıjeˇ podporov´anoaˇzod Windows 2000, pouˇz´ıv´aEFS (Encrypting File System) zaloˇzen´yna symetrick´ych kl´ıˇc´ıch, je prov´adˇeno za bˇehu“, pˇripr´aciuˇzivatele. ” • Pevn´eodkazy – tyto odkazy z˚ust´avaj´ıfunkˇcn´ıi po pˇresunu objektu, na kter´yukazuj´ı(souboru, adres´aˇre),ale na rozd´ılod pevn´ych odkaz˚una UNIXov´ych souborov´ych syst´emech nejsou rovno- cenn´es p˚uvodn´ımobjektem. Mohou b´ytdefinov´any pouze v r´amcijednoho svazku, a to napˇr´ıklad pˇr´ıkazem fsutil hardlink create. Kapitola 8 Pametˇ ’ova´ media´ 157

• R´ıdk´esouboryˇ – soubory, kter´eobsahuj´ırozs´ahlejˇs´ıoblasti s nulovou informaˇcn´ıhodnotou (oblasti vyplnˇen´e0), mohou b´ytuloˇzeny tak, ˇzetyto pr´azdn´e“ oblasti na disku nezab´ıraj´ıˇz´adn´em´ısto. ” Velikost (implicitn´ı)cluster˚uje stejnˇejako v FAT syst´emech odvozena od velikosti svazku podle tabulky (tab. 8.3), ale m˚uˇzemepˇrivytv´aˇren´ısouborov´ehosyst´emu stanovit prakticky jakoukoliv (ud´av´ase do 64 KB, tj. 32 sektor˚u).

Velikost svazku Velikost clusteru 512 MB nebo m´enˇe 512 B 512 MB – 1 GB 1 KB 1 GB – 2 GB 2 KB 2 GB nebo v´ıce 4 KB

Tabulka 8.3: Velikost clusteru pro souborov´ysyst´emNTFS

 Na disku jsou mimo samotn´adata tak´eimplicitn´ıstruktury, kter´ezde oznaˇcujemejako metadata (jde o soubory). Jsou to napˇr´ıklad:

$MFT (Master File Table) – obdoba FAT tabulky ve FAT syst´emech. Z´aznamv t´etotabulce m´a obvykle 1 KB, ale m˚uˇzeb´ytjakkoliv prodlouˇzen.Najdeme zde z´aznamy pro vˇsechny soubory na disku (MFT je tak´esoubor, proto jsou zde informace i o n´ı),v kaˇzd´em z´aznamu je pˇredevˇs´ım odkaz za um´ıstˇen´ızaˇc´atkusouboru, bezpeˇcnostn´ınastaven´ı,atributy, . . . $LOGFILE – log soubor (ˇzurn´al),do kter´ehose ukl´adaj´ıtransakˇcn´ıinformace. $BITMAP – je to pole bit˚u,pro kaˇzd´ycluster na disku je zde vyhrazen jeden bit. Pokud je bit nastaven na 0, je cluster voln´y,1 znamen´a,ˇzeje obsazen´y. $BADCLUS – obdobn´ymzp˚usobem jsou zachyceny vadn´eclustery. Atd. V bˇeˇzn´ych souborov´ych manaˇzerech, ve kter´ych pracujeme se soubory, jsou tyto speci´aln´ı soubory neviditeln´e,i kdyˇzexistuje zp˚usob,jak je zviditelnit (pˇresPˇr´ıkazov´yˇr´adek).Neviditeln´ejsou tak´e vˇsechny datov´eproudy souboru kromˇehlavn´ıho,zobrazovan´ad´elka souboru se tak´et´yk´ahlavn´ıho proudu, takˇzepo smaz´an´ıjednoho mal´ehosouboru by se teoreticky mohlo st´at,ˇzena disku je najednou o nˇekolik KB v´ıcevoln´ehom´ısta. NTFS se br´an´ıfragmentaci tak, ˇzepro uloˇzen´ısouboru hled´avˇzdyne nejbliˇzˇs´ı,ale nejbliˇzˇs´ıvhodnou posloupnost navazuj´ıc´ıch cluster˚u(ve kter´eje tolik m´ısta,ˇzese tam soubor vejde, obdoba metody BestFit pro operaˇcn´ıpamˇet’, viz kap. 3.3.1, str. 35), takˇzefragmentace vznik´apouze tehdy, kdyˇzje na disku pˇr´ıliˇsm´alovoln´ehom´ısta(nen´ıˇz´adn´a vhodnˇevelk´a“ posloupnost cluster˚u)nebo kdyˇzje soubor ” po zmˇenˇeprodlouˇzena za jeho clustery nen´ıvoln´ycluster. Fragmentace by byla probl´emem pˇredevˇs´ım u MFT, protoˇzeta se m˚uˇzelibovolnˇeprodluˇzovat s t´ım, jak roste poˇceta d´elka v n´ı obsaˇzen´ych z´aznam˚u.NTFS to ˇreˇs´ı tak, ˇzekolem MFT nech´av´anˇekter´eclustery voln´e,nedovoluje nikomu je zabrat a vyhrazuje je pro MFT.

 Pozn´amka: NTFS ve sv´eimplicitn´ı podobˇesniˇzujepropustnost syst´emu. Na rychlejˇs´ıch poˇc´ıtaˇc´ıch to nevad´ı, ale jinak existuj´ızp˚usoby, jak jeho pr´acizrychlit. Uˇziteˇcn´ya celkem logick´yje tento zp˚usob:NTFS dokonce i pˇriproch´azen´ı adres´aˇrovou strukturou aktualizuje datum a ˇcasposledn´ıho pˇr´ıstupu. To Kapitola 8 Pametˇ ’ova´ media´ 158 m˚uˇzemevypnout tak, ˇzev registru najdeme hodnotu NtfsDisableLastAccessUpdate a zmˇen´ımeji na 1. Tato ´uprava je velmi vhodn´atak´eu SSD. 

8.4.4 exFAT

 exFAT (Extended FAT) trochu vyboˇcujez ˇradyjin´ych souborov´ych syst´em˚uod Microsoftu. Je optimalizov´anpro USB flash disky a SD karty. D´ase ˇr´ıct,ˇzesv´ymivlastnostmi stoj´ı nˇekdemezi FAT32 a NTFS. Je v´yraznˇejednoduˇsˇs´ıneˇzNTFS (tak´erychlejˇs´ı)a zapisuje m´enˇemetadat na m´edium,tedy m´enˇe opotˇrebov´av´aflash ˇcip(v´ıme,ˇzeflash pamˇetimaj´ıomezenou ˇzivotnost co se t´yˇcemaxim´aln´ıhopoˇctu z´apisu,pamˇet’ov´ebuˇnky se opotˇrebov´avaj´ı). Oproti FAT32 je exFAT schopen ukl´adatvˇetˇs´ısoubory, velikost svazku (odd´ılu) m˚uˇzeb´ytvˇetˇs´ı, takt´eˇzvelikost clusteru (coˇzsouvis´ı). Ve specifikaci najdeme i podporu ACL, ale net´yk´ase vˇsech podporovan´ych operaˇcn´ıch syst´em˚u.Podporuje sice transakce (ˇzurn´alov´an´ı),ale jen tehdy, kdyˇzje tato vlastnost implementov´anav´yrobcem dotyˇcn´ehozaˇr´ızen´ı. Stejnˇejako u FAT32, i zde se setk´ames FAT tabulkami (tak´ev podobn´emv´yznamu – zˇretˇezen´ı cluster˚u),ale existuj´ıi dalˇs´ıstruktury. Podobnˇejako NTFS, i zde existuje struktura eviduj´ıc´ıvoln´e clustery (ta v FAT32 nen´ı). £ Jedn´ase o propriet´arn´ı souborov´ysyst´em,jeho specifikace nen´ı veˇrejnˇepˇr´ıstupn´a.Od toho se odv´ıj´ıomezenˇejˇs´ıpodpora v nˇekter´ych operaˇcn´ıch syst´emech. Obecnˇeplat´ı,ˇzeexFAT je podporov´an ve Windows od verze Vista SP1 a novˇejˇs´ıch, do Windows XP, Visty a Windows Server 2003 existuje z´aplatapˇrid´avaj´ıc´ıovladaˇcpro exFAT. MacOS X podporuje exFAT od verze 10.6.5. Pro Linux existuje ovladaˇcvyuˇz´ıvaj´ıc´ımodul FUSE.

8.4.5 Srovn´an´ısouborov´ych syst´em˚upro Windows

Pro velikost logick´ehodisku a maxim´aln´ımoˇznouvelikost souboru plat´ıtabulka 8.4.

Max. velikost Poˇcet Max. objekt˚u Max. d´elka Max. poˇcet odd´ılu cluster˚u v rootu souboru soubor˚u FAT16 2 (4 v NT) GB max. 216 512 4 GB bez 1 B 216 FAT32 512 MB – 2 TB min. 216 65 534 232 B bez 1 B t´emˇeˇr232 (XP: do 32 GB) NTFS 256 TB bez 64 KB 264 1 nedef. 264 B bez 1 KB 232 1 − − (pro 64KB cluster) (XP: 232 1) (XP: 244 B − 16 TB bez 4 KB bez 64 KB) (pro 4KB cluster) exFAT 128 PB cca 232 nedef. 16 EB nedef.

Tabulka 8.4: Srovn´an´ısouborov´ych syst´em˚upro Windows

http://www.ntfs.com/ntfs vs fat.htm  Kapitola 8 Pametˇ ’ova´ media´ 159

8.5 Souborov´esyst´emy pro Linux

8.5.1 VFS

 Linux pracuje s virtu´aln´ım souborov´ymsyst´emem VFS (Virtual File System), pˇreskter´yjsou pˇr´ıstupn´evˇsechny re´aln´e“ souborov´esyst´emy na poˇc´ıtaˇci.Jde o modul j´adra,pˇreskter´yjdou vˇsechna ” vol´an´ıdiskov´ych sluˇzeb,zastˇreˇsujesouborov´esyst´emy na vˇsech svazc´ıch a disc´ıch pˇr´ıtomn´ych v syst´emu (vˇcetnˇedisket a CD) a v pˇr´ıpadˇepotˇreby pˇred´av´aˇr´ızen´ı(l´epe ˇreˇcenopoˇzadavky) vˇzdykonkr´etn´ımu souborov´emu syst´emu, se kter´ymse pracuje. PˇresVFS uˇzivatel jednotnˇepˇristupuje tak´eke vˇsem zaˇr´ızen´ıma vˇseje zahrnuto v jedn´eadres´aˇrov´estruktuˇres jedin´ymkoˇrenem(root). £ Pokud chceme diskov´yodd´ıl pouˇz´ıvat, mus´ıme ho pˇripojit (mount) do VFS bud’ v grafick´em rozhran´ınebo v konzole pˇr´ıkazem mount. Syst´emov´yodd´ılje pˇripojen uˇzpˇristartu syst´emu, o ten se tedy nemus´ımestarat, ostatn´ısvazky na pevn´ych disc´ıch obvykle tak´eb´yvaj´ıpˇripojeny automaticky (z´aleˇz´ına distribuci). Pˇripojit je tˇrebav´ymˇenn´am´edia(disketa, CD-ROM), v grafick´emprostˇred´ıje to opˇetvˇetˇsinouˇreˇsenoautomaticky.  V Linuxu se na odd´ılech pevn´ych disk˚unejˇcastˇejipouˇz´ıvaj´ısouborov´esyst´emy ext3fs a ReiserFS, m˚uˇzemepouˇz´ıvat tak´esouborov´esyst´emy Windows a jin´ych operaˇcn´ıch syst´em˚u,jsou mapov´any pod tˇemiton´azvy: msdos kompatibiln´ıs FAT12 nebo FAT16 bez VFAT, vfat pro FAT32 nebo FAT16 s n´astavbou VFAT, ntfs kompatibiln´ı s NTFS Windows NT, ˇcastob´yv´aimplicitnˇenastavena pouze moˇznostˇcten´ı, obvykle ovladaˇc ntfs-3g nebo jin´ypodobn´y, iso9660 CD-ROM, tot´eˇzco pod Windows CDFS, hpfs kompatibiln´ıs HPFS v OS/2, procfs, sysfs, tmpfs, ramfs, devfs, udev dalˇs´ıvirtu´aln´ısouborov´esyst´emy pˇripojen´edo VFS, FUSE v uˇzivatelsk´emprostoru, NFS s´ıt’ov´ysouborov´ysyst´em.

Souborov´ymsyst´ememje tak´e swap, kter´yje urˇcenpro swap odd´ıl.

 Pozn´amka: V UNIXu a Linuxu plat´ı,ˇze vˇsechno je soubor“ (snad kromˇeuˇzivatele :-), tedy i adres´aˇre,se zaˇr´ızen´ımi ” se tak´epracuje jako se soubory. 

8.5.2 Souborov´esyst´emy typu extxfs

 ext2fs: Odd´ıls t´ımto souborov´ymsyst´ememje rozdˇelenna bloky, jejichˇzvelikost je moˇzn´epˇredem stanovit (obvykle 1024, 2048 nebo 4096 B). Prvn´ıtento blok, bootblok, na syst´emov´emsvazku obsahuje zav´adˇec´ıprogram, na jin´ych svazc´ıch z˚ust´av´anepouˇzit. Dalˇs´ıbloky jsou rozdˇeleny do skupin blok˚u. Kaˇzd´askupina obsahuje speci´aln´ıblok, tzv. superblok, s informacemi o souborov´emsyst´emu jako celku (napˇr´ıkladvelikost souborov´ehosyst´emu, poˇceti-uzl˚u Kapitola 8 Pametˇ ’ova´ media´ 160

– viz d´ale,poˇcetblok˚u,. . . ), n´asledujeblok s popisem t´etoskupiny, bloky zaznamen´avaj´ıc´ıobsazenost blok˚ua i-uzl˚u, tabulka i-uzl˚ua pak teprve bloky s daty. To, ˇzed˚uleˇzit´einformace o syst´emu jsou pˇr´ıtomny v kaˇzd´eskupinˇe,a tedy vlastnˇez´alohov´any, umoˇzˇnujenejen efektivnˇejˇs´ıpr´aciv syst´emu, ale tak´eje to bezpeˇcnˇejˇs´ı. V tabulce 8.5 je zachyceno, jak m˚uˇzevypadat struktura od s ext2, kter´aje dlouh´a20 MB s d´elkou bloku 1024 B.

Zaˇc´atek Poˇcet Popis (ˇc.bloku) blok˚u 0 1 boot blok skupina blok˚u0 1 1 superblok 2 1 popis skupiny blok˚u 3 1 bitmapa pouˇzit´ych blok˚uve skupinˇe(pro kaˇzd´yblok 1 bit, pokud = 0, voln´y) 4 1 bitmapa pouˇzit´ych i-uzl˚uskupiny, bit urˇcit´ehoi-uzlu najdeme podle jeho indexu v tabulce i-uzl˚u 5 214 tabulka i-uzl˚u,obsahuje jednotliv´ei-uzly, tedy i-uzel je jednoznaˇcnˇeidentifi- kov´anindexem v t´etotabulce 219 7974 bloky s daty skupina blok˚u1 8193 1 superblok – z´aloha 8194 1 popis skupiny blok˚u 8195 1 bitmapa pouˇzit´ych blok˚uve skupinˇe 8196 1 bitmapa pouˇzit´ych i-uzl˚uskupiny 8197 214 tabulka i-uzl˚u 8408 7974 bloky s daty skupina blok˚u2 16385 1 superblok – z´aloha 16386 1 popis skupiny blok˚u 16387 214 tabulka i-uzl˚u 16601 3879 bloky s daty

Tabulka 8.5: Struktura partition se souborov´ymsyst´ememext2fs

Jak je vidˇet,nˇekter´eˇc´astiskupiny blok˚ujsou nepovinn´e(napˇr´ıklad bitmapa pouˇzit´ych blok˚u). To, jestli je ve skupinˇepˇr´ıtomnaurˇcit´aˇc´ast,a tak´ena kter´emm´ıstˇev pamˇeti,se m˚uˇzemedovˇedˇet v popisu skupiny blok˚u(za superblokem), pozici cel´eskupiny a popisu skupiny najdeme v superbloku (samozˇrejmˇekter´emkoliv). Nejd˚uleˇzitˇejˇs´ımpojmem pro UNIXov´esouborov´esyst´emy je i-node (i-uzel).  I-uzel je struktura obsahuj´ıc´ıd˚uleˇzit´einformace o souboru (ID vlastn´ıka, d´elka souboru, ˇcaspo- sledn´ıhoz´apisu,posledn´ıhootevˇren´ı, vytvoˇren´ı,. . . ) a odkazy na 15 blok˚u.Z nich • 12 blok˚uobsahuje data souboru (1. ´uroveˇn) • 13. blok m˚uˇzeobsahovat odkazy na dalˇs´ıbloky, ve kter´ych jsou uloˇzenadata souboru (2. ´uroveˇn) • 14. blok m˚uˇzeobsahovat odkazy na bloky obsahuj´ıc´ıodkazy na bloky s daty (3. ´uroveˇn) Kapitola 8 Pametˇ ’ova´ media´ 161

• 15. blok m˚uˇzeobsahovat odkazy na bloky obsahuj´ıc´ıodkazy na bloky s odkazy na bloky s daty (4. ´uroveˇn). Soubor pouˇzijebloky jen po tu ´uroveˇn,kter´amu staˇc´ı. Obr´azek 8.3 je zkr´acenouuk´azkou struktury souboru v souborov´emsyst´emu ext2.

data Data i-uzel  data v prvn´ı´urovni  info

... Data Data  B B v druh´e´urovni v tˇret´ı´urovni BN B data ¨¨* data ... B ¨ BN ¨¨ data ¨ : data ¨¨  ¨  B 1 ¨  ...  CB  ... C B  : H  @ H C B  HHj BN ... @ data Data C @ v tˇret´ı´urovni C @R data CCW ... Z H Z HH Z H Z HHj ... Z ZZ~ ... Z H Z HH Z H Z HHj ... Z ZZ~ ... Z HH Data Z H v ˇctvrt´e´urovni Z HH Z Hj Z data ZZ~ data

Obr´azek8.3: Struktura souboru v souborov´emsyst´emu ext2fs

M Pˇr´ıklad Pˇredpokl´adejme,ˇzepro adresy se pouˇz´ıv´a32 bit˚u,tedy 4B, a d´elka bloku je 1024 B (1 KB). Pod´ıv´ame se na moˇzn´elimity. • prvn´ı´uroveˇnstaˇc´ıpro soubory s d´elkou do 12288 B (12*1024 B), tj. 12 KB, alokov´anoje 1–12 blok˚upodle potˇreby, • druh´a´uroveˇnstaˇc´ıpro soubory s d´elkou do 12 KB + 256*1024 B = 268 KB, • tˇret´ı´uroveˇnstaˇc´ıpro soubory s d´elkou do 268 KB + 256*256*1024 B = 65804 KB = 64 MB a 268 KB, • ˇctvrt´a´uroveˇnstaˇc´ıpro soubory s d´elkou do 65804 KB + 256*256*256*1024 B = 16 GB a 64 MB a 268 KB. Tento pˇr´ıkladje pouze ilustrativn´ı,ve skuteˇcnostije tato struktura jeˇstˇetrochu sloˇzitˇejˇs´ıa samozˇrejmˇe m˚uˇzeb´ytzvolena (a taky provdˇepodobnˇebude) jin´avelikost blok˚uneˇz1024 B. M Kapitola 8 Pametˇ ’ova´ media´ 162

 Kaˇzd´y adres´aˇr m˚uˇzeobsahovat soubory nebo dalˇs´ıadres´aˇre.Adres´aˇrejsou speci´aln´ısoubory ob- sahuj´ıc´ıseznam z´aznam˚upromˇenn´ed´elky. Kaˇzd´yz´aznamobsahuje ˇc´ısloi-uzlu, d´elkuz´aznamu, n´azev souboru a d´elkusouboru. Z´aznamy jsou promˇenn´ed´elky, aby bylo moˇzn´epouˇz´ıvat dlouh´en´azvysou- bor˚u– pokud bychom mˇeli pevnˇedanou d´elkuz´aznamu, bylo by hodnˇem´ıstav pamˇetinevyuˇzit´eho. Adres´aˇre,stejnˇejako kaˇzd´ajin´astruktura na odd´ılu,je tak´ech´ap´anjako soubor, proto m´asv˚uji-uzel a m˚uˇzeb´ytrozprostˇrenve v´ıcebloc´ıch stejnˇejako jin´esoubory. M˚uˇzemepouˇz´ıvat tak´e odkazy (links).  U pevn´ehoodkazu (hard link) nˇekolik n´azv˚usouboru m˚uˇzeb´ytasociov´anos jedin´ymi-uzlem a tedy vˇsechny ukazuj´ına tent´yˇzfyzick´ysoubor. U kaˇzd´ehoi-uzlu je informace o poˇctuodkaz˚u,pˇrimaz´an´ı souboru je soubor fyzicky smaz´anaˇztehdy, kdyˇztento poˇcet klesne na 0, tedy kdyˇzjsou uˇzsmaz´any vˇsechny odkazy. Vˇsechny pevn´eodkazy na jeden soubor maj´ıstejnou d˚uleˇzitost,ˇz´adn´yz nich nen´ı hlavn´ı. Pevn´eodkazy maj´ınˇekter´aomezen´ı,kter´amaj´ıpˇredevˇs´ımzajistit, aby v grafu adres´aˇrov´estruktury nevznikl cyklus: pevn´yodkaz nesm´ıukazovat na adres´aˇrkromˇesebe sama a nadˇr´ızen´ehoadres´aˇre(to jsou odkazy . a ..), a tak´enesm´ıukazovat na objekty, kter´ejsou v jin´emsouborov´emsyst´emu (tˇreba na jin´eodd´ıly). Symbolick´eodkazy (soft link) jsou obdobou Z´astupc˚uu Windows syst´em˚u,obsahuj´ı(v textov´e podobˇe)´udaj o um´ıstˇen´ı souboru, na kter´yodkazuj´ı. V´yhodou je odbour´an´ı omezen´ı vynucen´ych u pevn´ych odkaz˚u,symbolick´yodkaz m˚uˇzeukazovat na jak´ykoliv uzel v adres´aˇrov´estruktuˇrevˇcetnˇe uzl˚ujin´ych souborov´ych syst´em˚u.  Voln´yprostor je evidov´anv ˇretˇezov´emseznamu, jehoˇzstruktura je podobn´ai-uzl˚um.V jednom z blok˚uskupiny blok˚uje pole, jehoˇzprvky odkazuj´ına voln´ebloky; pokud je tˇechto blok˚uv´ıceneˇzje kapacita pole, potom jeden prvek tohoto pole ukazuje na blok, kter´yobsahuje odkazy na voln´ebloky, . . . Obdobnˇejsou evidov´any tak´evˇsechny i-uzly bloku. Pro ext2fs se ud´av´a,ˇzeje pouˇziteln´ypro disky aˇzdo 4 TB. Podporuje dlouh´en´azvysoubor˚u(aˇz do 255 znak˚u,ale tento limit je moˇzn´eposunout jeˇstˇed´ale,pokud je potˇreba).Tento souborov´ysyst´em se vˇsakdnes uˇzprakticky nepouˇz´ıv´a,jeho n´astupcem je ext3fs. M´asmysl pouze tam, kde je rychlost d˚uleˇzitˇejˇs´ıneˇzzachov´an´ıkonzistence dat pˇrijejich zmˇen´ach, protoˇzeje o nˇecorychlejˇs´ıneˇzext3fs (tj. pro ty adres´aˇre,jejichˇzobsah se prakticky nemˇen´ı,ale ˇcastonebo na dlouh´yˇcasov´yokamˇzikse k nim pˇristupuje,napˇr. /boot). D˚uvodem vˇetˇs´ırychlosti je, ˇzese nepouˇz´ıv´aˇzurn´al.  ext3fs je vylepˇsen´ımext2fs. Je zpˇetnˇekompatibiln´ı(pˇresnˇejikompatibiln´ıv obou smˇerech), za- chov´av´avˇsechny struktury ext2, ale nav´ıcjde o ˇzurn´alovac´ısouborov´ysyst´em(Journal File System). Pokud m´amena partition souborov´ysyst´emext2, staˇc´ıvytvoˇritˇzurn´alovac´ısoubor a pˇrinov´einici- alizaci syst´emu m˚uˇzemepartition pˇripojit jako ext3, a naopak, pokud m´amepartition nadefinovanou jako ext3, m˚uˇzemeji pˇri dalˇs´ımstartu syst´emu pˇripojit jako ext2.  ext4fs je dalˇs´ıverze souborov´ych syst´em˚uext. Je tak´ezpˇetnˇekompatibiln´ıs urˇcit´ymiomezen´ımi. Oproti ext3 m´akromˇejin´ehotyto vlastnosti: • limity ud´avan´epro ext3 navyˇsujepro pouˇzit´ına 64bitov´ych syst´emech, • ˇcasov´araz´ıtka v ˇzurn´alujsou pˇresnˇejˇs´ı(1 ns), • pouˇz´ıv´a extenty – extent je souhrn v´ıceblok˚uza sebou n´asleduj´ıc´ıch, m´ıstoukazatele na blok dat lze pouˇz´ıtukazatel na extent (d˚usledkem je moˇznostuloˇzen´ırozs´ahlejˇs´ıch soubor˚us menˇs´ı fragmentac´ı). Souborov´ysyst´emext4 lze pˇripojit jako ext3, pokud nejsou pouˇz´ıv´any extenty. Kapitola 8 Pametˇ ’ova´ media´ 163

8.5.3 Dalˇs´ıˇzurn´alovac´ısouborov´esyst´emy

 ReiserFS je dalˇs´ım z pouˇz´ıvan´ych linuxov´ych souborov´ych syst´em˚u.P˚uvodnˇebyl implicitnˇe nab´ızenpˇriinstalaci nˇekter´ych distribuc´ı,napˇr´ıkladSUSE (RedHat a Mandrake zase prosazuj´ısp´ıˇse ext3), v souˇcasn´edobˇeje uˇzbohuˇzelna ´ustupu. Je to ˇzurn´alovac´ısouborov´ysyst´em,tedy pˇriv´ypadkuje vˇetˇs´ıpravdˇepodobnost, ˇzedata na disku z˚ustanoukonzistentn´ı. ReiserFS je zaloˇzenna rychl´emvyv´aˇzen´emstromu (ballanced tree), coˇzzrychluje pr´acis velk´ym mnoˇzstv´ımsoubor˚uv adres´aˇri.Dalˇs´ıv´ybornou vlastnost´ıje, ˇzeje moˇzn´euloˇzitnˇekolik mal´ych sou- bor˚u(nebo zbytk˚uvelk´ych soubor˚u,kter´ese neveˇsly do cel´ych blok˚u)do jednoho bloku (jin´esou- borov´esyst´emy vˇcetnˇeext2, ext3, FAT, NTFS kaˇzd´yblok vyhrazuj´ıpro urˇcit´ysoubor, soubor m˚uˇze m´ıtv´ıceblok˚u,ale ne naopak), takˇzena disku nevznik´azbyteˇcnˇemnoho velk´ych nedosaˇziteln´ych“ ” dˇer.Nev´yhodou je moˇznostsn´ıˇzen´ıv´ykonu syst´emu, kter´ytento souborov´ysyst´emˇc´asteˇcnˇevylepˇsuje r˚uzn´ymitechnikami pouˇz´ıvan´ymiv datab´azov´ych syst´emech. Pro syst´em,kde pracujeme pˇredevˇs´ım s velmi mal´ymisoubory, je to vˇsakdobr´avolba. Dalˇs´ızaj´ımavou vlastnost´ıje moˇznostzmˇeny velikosti partition s t´ımto souborov´ymsyst´emem, a to dokonce bez nutnosti odmontov´an´ısyst´emu (jistˇejˇs´ıje ale syst´empˇredemodpojit a po zmˇenˇe znovu pˇripojit). Pr´acisyst´emu lze zrychlit tak´evolbou urˇcit´ych parametr˚upˇripˇripojov´an´ıdisku (obvykle v souboru fstab), napˇr´ıkladvolba notail zak´aˇzeukl´ad´an´ıkonc˚uv´ıcesoubor˚udo jednoho bloku. T´ımsice ztrat´ıme ˇc´astm´ıstana disku (v dobˇebˇeˇznˇepouˇz´ıvan´ych 80GB disk˚uto nen´ızase aˇztakov´ahr˚uza),ale syst´em se zrychl´ı.

 XFS je ˇzurn´alovac´ısouborov´ysyst´em,kter´yse sv´ymipˇr´ıstupov´ymialgoritmy sn´ıˇzitzat´ıˇzen´ı syst´emu zp˚usoben´epouˇz´ıvan´ımˇzurn´alov´an´ı.V re´aluje toho dosaˇzenotak, ˇzese ˇzurn´aluj´ıpouze me- tadata, nikoliv bˇeˇzn´adata. To zvyˇsuje propustnost souborov´ehosyst´emu, ale tak´eje to d˚uvodem nevhodnosti tohoto souborov´ehosyst´emu pro nasazen´ına stroj´ıch s ˇcasto modifikovan´ymidaty. Je to 64bitov´ysouborov´ysyst´em(adresa je uloˇzena v 64 bitech, na rozd´ıl od jinde obvykl´ych 32 bit˚u),takˇze velikost souboru a velikost cel´ehosouborov´ehosyst´emu m˚uˇzeb´yt´uctyhodn´a. M´amnoho zaj´ımav´ych vlastnost´ı,jedna z nich je realtime subvolume, kter´adovoluje proces˚um rezervovat si k souboru pˇr´ıstupov´ep´asmov urˇcit´eˇs´ıˇri(B/s). To je velmi praktick´enapˇr´ıkladpˇripr´aci s multim´edii,kdy k souboru (napˇr.s videem) potˇrebujemest´al´ya rychl´ypˇr´ıstup. Celkovˇeje tento souborov´ysyst´emd´ıkyomezen´ımv ˇzurn´alov´an´ıpovaˇzov´anza m´enˇebezpeˇcn´yneˇz ext3fs nebo ReiserFS. Je ale velmi vhodn´yna ty servery, na kter´ych jsou data pˇredevˇs´ımˇctenaa m´enˇe modifikov´ana.

 BtrFS (B-tree File System) je jeden z nejnovˇejˇs´ıch souborov´ych syst´em˚uurˇcen´ych zejm´enapro servery bˇeˇz´ıc´ına Linuxu od spoleˇcnostiOracle. Je sice jeˇstˇeve v´yvoji, ale uˇzje souˇc´ast´ılinuxov´ych jader nˇekter´ych distribuc´ı. Oproti bˇeˇzn´ymlinuxov´ymsouborov´ymsyst´em˚umje pˇrid´anapodpora vlastnost´ı,kter´ejsou cenˇeny hlavnˇena serverech – spr´ava bez nutnosti odpojen´ı(vˇcetnˇedefragmentace, vyvaˇzov´an´ı– to ostatnˇe napov´ıd´ai n´azev,kv´oty, apod.), vytv´aˇren´ıobrazu svazku (snapshot) bez nutnosti odpojen´ı(vyuˇz´ıv´a moˇznostvytv´aˇren´ıredundantn´ıch kopi´ısoubor˚u),coˇzse d´avyuˇz´ıtpˇrivytv´aˇren´ız´alohvˇcetnˇerozd´ı- lov´ych, nativn´ıpodpora RAID 0, 1 a 10, pouˇz´ıv´an´ıkontroln´ıch souˇct˚u,transparentn´ıkomprese, atd. Kapitola 8 Pametˇ ’ova´ media´ 164

V pl´anu jsou i dalˇs´ıvlastnosti vˇcetnˇeˇsifrov´an´ı. BtrFS je povaˇzov´anza alternativu k ZFS od firmy Sun (ZFS je ˇs´ıˇrenpod licenc´ıCDFS, kter´aje nekompatibiln´ıs GNU GPL, a tedy nen´ımoˇzn´epodporu ZFS pˇr´ımoimplementovat do j´adraLinuxu).

8.5.4 Srovn´an´ılinuxov´ych souborov´ych syst´em˚u

Pod Linuxem m˚uˇzemepouˇz´ıvat samozˇrejmˇei dalˇs´ısouborov´esyst´emy, zde jsme mluvili pouze o nej- pouˇz´ıvanˇejˇs´ıch souborov´ych syst´emech pro lok´aln´ıdisky. Nelze ˇr´ıci,kter´yz uveden´ych souborov´ych syst´em˚uje lepˇs´ınebo horˇs´ı,kaˇzd´ym´asv´ev´yhody i nev´yhody. V´yhodou m˚uˇzeb´ytˇzurn´alov´an´ı,kter´e ale m˚uˇze(nemus´ı)sniˇzovat v´ykon syst´emu, bohuˇzeli u ˇzurn´alovac´ıch souborov´ych syst´em˚use st´av´a, ˇzese pˇriv´ypadkudata ztrat´ı,i kdyˇzne tak ˇcastojako u syst´em˚ubez ˇzurn´alu. V n´asleduj´ıc´ıtabulce je porovn´an´ısyst´em˚upodle krit´eri´ı,kter´apˇr´ımov kapitol´ach uv´adˇenanebyla (´udaje jsou pouze orientaˇcn´ı,ˇc´ıslajsou bohuˇzelr˚uzn´av r˚uzn´ych zdroj´ıch):

ext2fs ext3fs ReiserFS XFS Max. velikost odd´ılu 4 TB 4 TB 16 TB *) 18 210 PB ∗ Velikost bloku 1–4 KB 1–4 KB aˇz64 KB 512 B – 64 KB Max. velikost souboru 2 GB 2 GB aˇz210 PB *) 9 210 PB ∗ *) Z´aleˇz´ına verzi souborov´ehosyst´emu.

Tabulka 8.6: Srovn´an´ıvlastnost´ısouborov´ych syst´em˚upro Linux

Udan´ehodnoty je vˇsaknutn´ebr´ats rezervou, na tom, jak velk´esoubory m˚uˇzesouborov´ysyst´em ukl´adat,z´aleˇz´ıtak´ena VFS.

8.5.5 Virtu´aln´ısouborov´esyst´emy

V Linuxu stejnˇejako v jin´ych UNIXov´ych syst´emech se pouˇz´ıvaj´ıi souborov´esyst´emy bez vazby na konkr´etn´ıdatov´em´edium(pˇr´ıpadnˇev sobˇesdruˇzuj´ıpˇr´ıstupk v´ıcer˚uzn´ymdatov´ymm´edi´ım). N´asledujestruˇcn´yv´yˇcetnˇekter´ych virtu´aln´ıch souborov´ych syst´em˚u,se vˇsemijsme jiˇzobezn´ameni ze cviˇcen´ı.

 procfs zpˇr´ıstupˇnujeveˇsker´einformace t´ykaj´ıc´ıse j´adra,slouˇz´ıke komunikaci s j´adremsyst´emu (pouˇz´ıv´ase v Linuxu). Neodpov´ıd´aˇz´adn´emu fyzick´emu datov´emu m´ediu,je pˇripojov´ando adres´aˇre /proc. Z hlediska uˇzivatele jsou zaj´ımav´epˇredevˇs´ımjeho podadres´aˇre,jejichˇzn´azvyjsou PID vˇsech bˇeˇz´ıc´ıch proces˚u(v takov´emadres´aˇrijsou vˇsechny d˚uleˇzit´einformace o procesu, jehoˇzPID je n´azvem adres´aˇre).

 sysfs je zaloˇzenna podobn´emprincipu jako procfs, slouˇz´ıke zpˇr´ıstupnˇen´ı´udaj˚uo zaˇr´ızen´ıch (v Linuxu). Data zpˇr´ıstupˇnujev adres´aˇri /sys.

 devfs a udev jsou virtu´aln´ısouborov´esyst´emy spravuj´ıc´ıspeci´aln´ısoubory zaˇr´ızen´ıuloˇzen´e v adres´aˇri /dev. V novˇejˇs´ıch verz´ıch j´adraLinuxu modul udev kromˇetoho spravuje souborov´ysyst´em sysfs a obecnˇezaˇr´ızen´ı, ovladaˇce.V MacOS X se dosud pouˇz´ıv´astatick´y devfs.

 ramfs, tmpfs: souborov´ysyst´em ramfs se pouˇz´ıv´apro implementaci RAMdisku (tj. ˇc´astoperaˇcn´ı pamˇetise bude pouˇz´ıvat jako diskov´yodd´ıl;v´yhodou je velk´arychlost, nev´yhodou je, ˇze se obsah po Kapitola 8 Pametˇ ’ova´ media´ 165 vypnut´ıˇcirestartu nezachov´a.Souborov´ysyst´em tmpfs je nˇecopodobn´eho– v operaˇcn´ıpamˇetivytv´aˇr´ı simulovan´ydiskov´yodd´ılpro doˇcasn´adata (v´yhodou je, ˇzeu doˇcasn´ych dat rozhodnˇenevad´ı,kdyˇzse po vypnut´ınebo restartu syst´emu ztrat´ı),pˇriˇcemˇzstav´ına souborov´emsyst´emu ramfs (je to pro nˇej prostˇredek).

 Dalˇs´ı: Nejd˚uleˇzitˇejˇs´ıvirtu´aln´ısouborov´ysyst´emuˇzzn´ame,je to VFS. Je to souˇc´astj´adrasyst´emu, pˇreskterou procesy komunikuj´ıs konkr´etn´ımisouborov´ymisyst´emy. Existuj´ıvˇsaki dalˇs´ıvirtu´aln´ı souborov´esyst´emy slouˇz´ıc´ır˚uzn´ym´uˇcel˚um,maj´ıpˇredevˇs´ımzjednoduˇsitpˇr´ıstup k r˚uzn´ymvirtu´aln´ım zaˇr´ızen´ım.

8.5.6 V´ymˇenn´aoptick´am´edia

 Na USB flash disc´ıch a SD kart´ach se pouˇz´ıv´abud’ FAT32 nebo ext2, m˚uˇzemese tak´esetkat se souborov´ymsyst´ememexFAT (t´ımjsme se nezab´yvali). Souborov´ysyst´emNTFS nen´ıpro tato m´edia vhodn´y,protoˇzezapisuje mnoho metadat a t´ımzbyteˇcnˇesniˇzuje ˇzivotnost m´edia.Pouˇz´ıv´ase jen tehdy, kdyˇzjsme k tomu nuceni (napˇr´ıkladmus´ıme ukl´adatvelmi velk´esoubory, na kter´eFAT32 nestaˇc´ı– i kdyˇzje ot´azkou, jestli by pak nebyl vhodnˇejˇs´ısyst´emexFAT).

 CDFS je souborov´ysyst´empro m´ediaCD. Maxim´aln´ıvelikost souboru je 4 GB, maxim´aln´ı poˇcetadres´aˇr˚uje 65 535. Jin´yn´azevje ISO 9660.

 UDF (Universal Disk Format) je urˇcenpro DVD, ale tak´eCD. Podporuje dlouh´en´azvy adres´aˇr˚ua soubor˚u,tak´ev UNICODE, soubory mohou b´yti ˇr´ıdk´e.Ne vˇsechny operaˇcn´ı syst´emy obsahuj´ıovladaˇcs podporou vˇsech vlastnost´ıUDF (podpora z´apisu, pojmenovan´eproudy, ACL, apod.). Literatura

Z´akladn´ı: [1] Drab´ , M. J´adro syst´emuWindows: Kompletn´ıpr˚uvodce program´atora. Brno, Computer Press, 2011.

[2] Jel´ınek, L. J´adro syst´emuLinux: Kompletn´ıpr˚uvodce program´atora. Brno, Computer Press, 2008.

[3] Russinovich, M. E. – Solomon, D. A. Vnitˇrn´ıarchitektura Microsoft Windows. Z anglick´eho origin´aluWindows Internals. Brno, Computer Press, 2007.

Dalˇs´ı: [4] Aitken, P. G. Windows Script Host 2.0. Praha, Grada Publishing, 2001.

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

[6] Belkaˇ , J. Zaˇc´ın´amebezpeˇcnˇes FreeBSD [online]. Root.cz. Dostupn´ena: http://www.root.cz/serialy/zaciname-bezpecne-s-freebsd/

[7] Bernathov´ a´, A. Linuxov´esouborov´esyst´emy [online]. Linux Express. Dostupn´ena: http://www.linuxexpres.cz/praxe/linuxove-souborove-systemy

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

[9] Caletka, O. Partition Magic, Symantec Ghost a dalˇs´ıutility pro pr´acis pevn´ymdiskem. Brno, Computer Press, 2002.

[10] Cadaˇ , O. Mac OS X Shell krok za krokem. Praha, Grafika Publishing.

[11] Cadaˇ , O. Operaˇcn´ısyst´emy. Praha, Grada, 1993.

[12] Dvorˇak´ , V. WIN95 + RH6.2 = 10GB HDD [online]. Linuxov´enoviny, 2001. Dostupn´ena: http://www.linux.cz/noviny/2001-08/clanek05.html

[13] Horak´ , J. BIOS a Setup. Brno, Computer Press, 2004.

[14] Kacmˇ a´rˇ, D. Programujeme v COM a COM+. Brno, Computer Press, 2000.

[15] Kadlec, Z. Pr˚uvodce nitrem BIOSu. Praha, Grada Publishing, 1996.

166 Literatura 167

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

[17] Kolektiv autor˚u. Linux Dokumentaˇcn´ıprojekt [online]. 3. aktualizovan´evyd´an´ı.Brno, Computer Press, 2003. Soubory ke staˇzen´ına adrese http://knihy.cpress.cz/DataFiles/Book/00000675/Download/K0819.pdf

[18] Kolektiv autor˚u. The Linux Documentation Project [online]. Posledn´ıaktualizace 2006. Dostupn´ena: http://www.tldp.org

[19] Kraval, I. – Ivachiv, P. Z´akladykomponentn´ıtechnologie COM. Brno, Computer Press, 2001.

[20] Kwolek, J. Problematika IRQ – sd´ılen´ı,konflikty, PCI [online]. Zivˇe.cz.Dostupn´ena:ˇ http://www.zive.cz/clanky/problematika-irq—sdileni-konflikty-pci/irq—what-the-hell/sc-3-a-1399 -ch-16552/default.aspx

[21] Lasser, J. Rozum´ımeUNIXu. Praha, Computer Press, 2002.

[22] Lee, J. – Ware, B. OpenSource – v´yvojwebov´ychaplikac´ı. Brno, Computer Press, 2000.

[23] Lucas, M. FreeBSD. Brno, Computer Press, 2003.

[24] Machej, P. GRUB – zavadˇeˇcsyst´emu. Casopisˇ Linux+ 2/05, str. 52–57.

[25] Maturita.cz. Konfigurace poˇc´ıtaˇce [online]. Dostupn´ena: http://www.maturita.cz/prv/konfigurace pocitace.htm

[26] Michl, V. Linux a vl´akna [online]. Linuxov´enoviny 08-09/98. Dostupn´ena: http://www.linux.cz/noviny/1998-0809/clanek11.html

[27] Microsoft Corporation. Microsoft Windows XP Professional Resource Kit. Brno, Computer Press, 2004.

[28] Moskowitz, J. Z´asadyskupiny, profily a IntelliMirror ve Windows 2003, 2000 a XP. Brno, Computer Press, 2006.

[29] Mraz´ , O. Autoexec.bat a Config.sys [online]. Dostupn´ena: http://www.volny.cz/otakarmraz/swPomoc/autocnfg.html

[30] Park, E. B. – Gal´ıcekˇ , R. Dual-Boot Linux a Windows 2000/XP s Grub HOWTO [online]. Dostupn´ena: http://www.volny.cz/galicek/linux%20ver%20XP/grub-w2k-HOWTO-cz.html

[31] Patockaˇ , M. Porovn´an´ısyst´em˚uLinux a FreeBSD [online]. Root.cz. Dostupn´ena: http://www.root.cz/serialy/porovnani-systemu-linux-a-freebsd/

[32] Pla´ˇsil, F. Operaˇcn´ısyst´emy. Praha, CVUT,ˇ 1983.

[33] Pla´ˇsil, F. – Staudek, J.: Operaˇcn´ısyst´emy. Praha, SNTL, 1991.

[34] Pokorny´, J. Uvod´ do .NET Framework. Brno, Computer Press, 2000. Soubory ke staˇzen´ına knihy.cpress.cz/DataFiles/Book/00000896/Download/frameworknet.zip

[35] Price, B. Active Directory. Brno, Computer Press, 2005. Literatura 168

[36] Raymond, E. S. Umˇen´ıprogramov´an´ıv UNIXu. Brno, Computer Press, 2004.

[37] Rehˇ ak´ , M. Operaˇcn´ısyst´emy. Dostupn´ena: http://www.volny.cz/rayer/os/os.htm

[38] Shulyupin, Constantine. Linux Technology Reference [online]. MakeLinux.Net. Dostupn´ena: http://www.makelinux.net/reference

[39] Solomon, D. A. Windows NT pro administr´atorya v´yvoj´aˇre. Brno, Computer Press, 1999.

[40] Stanek, W. R. Pˇr´ıkazov´yˇr´adekMicrosoft Windows. Brno, Computer Press, 2005.

[41] Toxen, B. Bezpeˇcnostv Linuxu. Brno, Computer Press, 2003.

[42] Vondra, T. Gentoo Handbook, konfigurace zavadˇeˇce [online]. Dostupn´ena: http://www.fuzzy.cz/gentoo/files/html/ch09.html

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

[44] Walnum, C. VMWare. Brno, Computer Press, 2004.