Štruktúra operačných systémov
Operačný systém poskytuje prostredie, vo vnútri ktorého programy sú vykonávané. Operačné
systémy sa veľmi líšia v ich zložení, keďže sú organizované podľa veľmi odlišných čŕt. Na operačný
systém sa môžeme pozerať z niekoľkých pohľadov:
1. Skúmanie služieb, ktoré poskytuje. 2. Rozhranie, ktoré ho robí dostupným pre užívateľov a
programátorov. 3. Rozdelenie systému na komponenty a ich vnútorné prepojenie. V tejto
kapitole objasníme všetky tri aspekty operačného systému, ukazujúc pohľady
užívateľa, programátorov a tvorcov operačných systémov. Uvažujeme, ktoré služby operačný
systém poskytuje, ako oni sú poskytované a ktoré metodológie sú pre návrhárov takýchto systémov.
1 Systémové komponenty
Vytvoriť systém taký veľký a komplexný ako je operačný systém, môžeme iba jeho rozdelením do
menších častí. Každá časť by mala byť dobre určená časť systému so starostlivo definovanými
vstupmi, výstupmi a funkciami. Samozrejme, nie všetky systémy majú rovnakú štruktúru. Avšak veľa
moderných systémov podporuje systémové komponenty spomenuté v nasledujúcich Sekciách 1.1 až
1.8.
1.1 Riadenie procesov
Program nerobí nič, až kým jeho inštrukcie nie sú vykonané v CPU. Proces môže byť chápaný ako
program počas vykonávania, ale táto definícia bude rozšírená v nasledujúcej kapitole. Časovo
zdieľaný užívateľský program, taký ako kompilátor, je proces. Program pre spracovanie textu
spustený užívateľom na PC je proces. Systémová úloha ako poslanie výstupu do tlačiarne je tiež
proces. Odteraz môžete uvažovať proces ako job alebo časovo zdieľaný program, ale neskôr sa
naučíte, že pojem proces je všeobecnejší. Ako uvidíme v Kapitole 4, môžeme poskytnúť systémové
volanie, ktoré dovoľuje procesom vytvárať podprocesy vykonávané súbežne. Proces potrebuje isté
zdroje (CPU, pamäť, súbory a I/O zariadenia) na vykonanie svojich úloh. Tieto zdroje sú dané
procesu, keď je vytvorený alebo sa mu priradia, keď beží. Okrem zdrojov, množstvo inicializačných
dát (alebo vstupov) môže byť odovzdané procesu. Zdôrazňujeme, že program sám o sebe nie je
proces, program je pasívna jednotka taká, ako je obsah súboru uloženého na disku, zatiaľ čo proces je
aktívna jednotka s čítačom inštrukcií (Program Counter) určujúcim nasledujúcu inštrukciu na
vykonanie. Vykonanie procesu musí byť sekvenčné. To znamená, že CPU vykonáva jednu
inštrukciu procesu za druhou, až kým nie je proces dokončený. Ďalej, v každom čase najviac jedna
inštrukcia procesu je vykonávaná. Hoci dva procesy môžu byť spájané s rovnakým programom, sú
považované za dve rôzne, vykonávané sekvencie. Je bežné mať program, ktorý pokrýva veľa
procesov počas ich bežania. Proces je jednotka práce v systéme. Taký systém pozostáva z kolekcie
procesov, z ktorých niektoré sú systémové procesy (tie, ktoré vykonávajú systémový kód) a zvyšné
sú užívateľské procesy (tie, ktoré vykonávajú užívateľský kód). Všetky tieto procesy sa môžu
potenciálne vykonávať súbežne prepínaním CPU medzi nimi. Operačný systém je zodpovedný za
nasledujúce aktivity v súvislosti s riadením procesu:
Vytvorenie a odstránenie užívateľského aj systémového procesu.
Zastavenie a pokračovanie procesov.
Poskytovanie mechanizmov pre komunikáciu procesov.
Poskytovanie mechanizmov pre synchronizáciu procesov.
Poskytovanie mechanizmov pre spracovanie uviaznutia. V
Kapitolách 4 až 8 diskutujeme o technikách riadenia procesu.
Studenovský: Operačné systémy 3 Štruktúra 1
1.2 Riadenie hlavnej pamäte
Hlavná pamäť je ústredím operácií moderného počítačového systému. Hlavná pamäť je veľké pole
slov alebo bajtov. Každé slovo alebo bajt má svoju vlastnú adresu. Hlavná pamäť je sklad rýchlo
dostupných údajov, zdieľaných CPU a I/O zariadeniami. Centrálny procesor číta inštrukcie z hlavnej
pamäte a tiež číta a píše údaje z/do hlavnej pamäte. I/O operácie implementované cez DMA tiež
čítajú a píšu údaje v hlavnej pamäti. Hlavná pamäť je iba veľké úložné zariadenie, ktoré CPU je
schopné adresovať a k nemu pristupovať priamo. Napríklad, aby CPU spracovalo údaje z disku,
musia byť tieto údaje prenesené do hlavnej pamäte. Inštrukcie musia byť v pamäti, aby ich CPU
mohla vykonávať. Na to, aby bol program vykonávaný, musí byť mapovaný na absolútne adresy a
zavedený do pamäte. Keď je program vykonávaný, pristupuje k programovým inštrukciám a
údajom z pamäte generovaním týchto absolútnych adries. Napokon program končí, jeho pamäťový
priestor je vyhlásený za dostupný a ďalší program môže byť zavedený a vykonávaný. Na zlepšenie
využitia CPU musíme držať niekoľko programov v pamäti. Je dostupných veľa rôznych schém
riadenia pamäte. Výber schémy riadenia pamäte záleží na množstve faktorov — špeciálne na
hardvérovom návrhu systému. Každá schéma vyžaduje vlastnú hardvérovú podporu. Operačný
systém je zodpovedný za nasledujúce aktivity v súvislosti s riadením pamäte:
Sledovanie, ktoré časti pamäte sú aktuálne požívané a kým.
Rozhodovanie, ktoré procesy budú zavedené do pamäte, keď pamäťový priestor je dostupný.
Pridelenie a odobratie pamäťového priestoru podľa potreby.
Techniky riadenia pamäte budeme preberať v Kapitole 9.
1.3 Riadenie súboru
Riadenie súboru je jeden z najviditeľnejších komponentov operačného systému. Počítače môžu uložiť
informáciu na niekoľko odlišných typov médií. Magnetický disk a optický disk sú najbežnejšie
médiá. Každé z týchto médií má svoje vlastné charakteristiky a fyzickú organizáciu. Každé médium
je riadené zariadením (ako disková jednotka). Zariadenia tiež majú jedinečné charakteristiky. Tieto
vlastnosti zahŕňajú prístupovú rýchlosť, kapacitu, prenosovú rýchlosť a prístupové metódy
(sekvenčné alebo priame). Pre pohodlné využitie počítačového systému, operačný systém poskytuje
rovnaký logický pohľad uloženia informácie. Operačný systém abstrahuje od fyzických vlastnosti
úložných zariadení smerom k definovaniu logickej úložnej jednotky, súboru. Operačný systém
mapuje súbory na fyzické médium a sprístupňuje tieto súbory cez úložné zariadenia.
Súbor je kolekcia spolu súvisiacich informácií definovaných jeho tvorcom. Súbory reprezentujú
programy a dáta. Programy v súboroch môžu byť v zdrojovej aj vykonateľnej forme. Dátové súbory
môžu byť číselné, abecedné alebo abecedno–číselné. Súbory môžu byť voľného formátu (napríklad
textové súbory) alebo môžu byť formátované pevne (napríklad pevné polia). Súbor obsahuje
sekvenciu bitov, bajtov, riadkov alebo záznamov, ktorých významy sú určené ich tvorcom. Pojem
súboru je veľmi všeobecný. Operačný systém implementuje abstraktný pojem súboru manažovaním
úložných médií a zariadení. Tiež súbory sú bežne organizované do adresárov pre ich ľahké použitie.
Keď viacerí užívatelia pristupujú k súborom, chceme riadiť, kým a akými spôsobmi (čítať, písať)
súbory môžu byť sprístupnené. Operačný systém je zodpovedný za nasledujúce aktivity v súvislosti s
riadením súborov:
Vytvorenie a odstránenie súborov.
Vytvorenie a odstránenie adresárov.
Podporovanie primitív pre manipuláciu so súbormi a adresármi.
Mapovanie súborov do sekundárneho úložiska.
Zálohovanie súborov na stále úložné médium. Súborové
riadiace techniky budú popísané v Kapitole 10.
Studenovský: Operačné systémy 3 Štruktúra 2
1.4 Riadenie I/O systému
Jeden z cieľov operačného systému je skryť zvláštnosti špecifického hardvérového zariadenia pred
užívateľom. Napríklad, v UNIX zvláštnosti I/O zariadení sú skryté operačným systémom pomocou
I/O podsystému, ktorý obsahuje:
Riadiaci komponent pamäte, ktorý zahŕňa bufrovanie, caching a spooling.
Univerzálne rozhranie ovládača zariadenia.
Ovládače pre špecifické hardvérové zariadenia. Jedine ovládač zariadenia pozná zvláštnosti
špecifického zariadenia, ku ktorému je priradený.
1.5 Riadenie sekundárneho úložiska
Hlavný cieľ počítačového systému je vykonávanie programov. Tieto programy s údajmi, ktoré
sprístupňujú, musia byť v hlavnej pamäti alebo v primárnom úložisku počas vykonávania. Pretože
hlavná pamäť je príliš malá pre uloženie všetkých údajov a programov a pretože údaje, ktoré drží sa
stratia po vypnutí, počítačový systém musí poskytovať sekundárne úložisko k zálohovaniu hlavnej
pamäte. Väčšina moderných počítačových systémov používa disky ako hlavné, spriahnuté
(On–Line), úložné médium pre programy aj pre údaje. Väčšina programov (vrátane kompilátorov,
assemblerov, editorov) sú uložené na disku, až kým sú zavedené do pamäte a potom využívajú disk
ako zdroj aj ako cieľ svojho spracovania. Preto riadenie diskového úložiska je ústrednou témou
počítačového systému. Operačný systém je zodpovedný za nasledujúce aktivity v súvislosti s
riadením disku:
Riadenie voľného priestoru.
Rozvrhnutie úložiska.
Diskové plánovanie. Pretože sekundárna pamäť je často používaná, musí byť používaná
efektívne. V podstate,
rýchlosť činnosti počítača môže závisieť na rýchlosti diskového podsystému a algoritmov, ktoré
využívajú tento podsystém.
1.6 Riadenie siete
Distribuovaný systém je kolekcia procesorov, ktoré nezdieľajú pamäť, periférne zariadenia alebo
hodiny. Miesto toho, každý procesor má svoju vlastnú lokálnu pamäť a hodiny a procesory
komunikujú jeden s druhým cez rôzne komunikačné linky také, ako vysokorýchlostné zbernice alebo
siete. Procesory v distribuovaných systémoch sa líšia veľkosťou a funkciou. Môžu zahŕňať malé
mikroprocesory, pracovné stanice, minipočítače a veľké všeobecne–účelové počítače. Procesory v
distribuovanom systéme sú spojené cez komunikačnú sieť, ktorá môže byť konfigurovaná
rozličnými spôsobmi. Sieť môže byť úplne alebo čiastočne spojená. Návrh komunikačnej siete musí
uvažovať smerovanie správ, spojovacie stratégie, problémy sporov a ochranu. Distribuovaný
systém sústreďuje fyzicky oddelené, možno rôznorodé systémy do jedného súdržného systému,
poskytujúc užívateľovi prístup k rôznym zdrojom, ktoré systém udržiava. Prístup k zdieľaným
zdrojom umožní zrýchlenie výpočtov, zvýšenú funkčnosť, zvýšenú dostupnosť dát a rozšírenú
spoľahlivosť. Operačné systémy zvyčajne zovšeobecňujú sieťový prístup ako formu súborového
prístupu. Zlepšil sa existujúci File Transfer Protokol (FTP) a Network File–System (NFS),
odstraňujúci potrebu užívateľa prihlásiť sa predtým, ako je mu dovolené používať vzdialené zdroje.
To definovalo nový protokol Hypertext Transfer Protokol (http) na použitie v komunikácii medzi
webovým serverom a webovým prehliadačom. Webový prehliadač potom potrebuje len poslať
žiadosť o informáciu vzdialenému počítaču webového servera a informácia (text, grafika, linky na iné
informácie) sa vráti prehliadaču. Distribuované systémy preberáme v Kapitole 11.
Studenovský: Operačné systémy 3 Štruktúra 3
1.7 Ochranný systém
Ak počítačový systém má viac užívateľov a dovolí súbežné vykonávanie viacerých procesov, potom
rôzne procesy musia byť chránené navzájom. Pre tento účel ochranné mechanizmy zabezpečia, že
súbory, segmenty pamäte, CPU a iné zdroje môžu byť používané iba tými procesmi, ktoré dostali
náležité oprávnenie od operačného systému.
Napríklad, hardvér adresovania pamäte zabezpečí, že proces sa môže vykonávať iba vo vnútri svojho
adresovaného priestoru. Časovač zabezpečí, že žiaden proces nezíska riadenie CPU bez občasného
vzdania sa tohto riadenia. Registre radiča zariadenia nie sú prístupné užívateľom, takže celistvosť
rôznych vonkajších zariadení je chránená.
Ochrana je každý mechanizmus pre riadenie prístupu programov, procesov alebo užívateľov k
zdrojom definovaných počítačovým systémom. Ochrana môže zlepšiť spoľahlivosť zistením
skrytých chýb v prepojeniach medzi komponentmi systému. Skorá detekcia týchto chýb môže často
predísť zamoreniu zdravého subsystému iným subsystémom, ktorý nefunguje správne. Nechránený
zdroj sa nemôže ubrániť proti zneužitiu neoprávneným užívateľom. Na ochranu orientovaný systém
poskytuje prostriedky na rozlišovanie medzi autorizovaným a neautorizovaným použitím.
1.8 Interpreter príkazov
Jeden z najdôležitejších systémových programov je interpreter príkazov, ktorý je rozhraním medzi
užívateľom a operačným systémom. Niektoré operačné systémy zahrnuli interpreter príkazov do
jadra. Iné operačné systémy, ako MS–DOS a UNIX spracovali interpreter príkazov ako špeciálny
program, ktorý sa spustí automaticky, keď sa spustí prvý job alebo, keď sa užívateľ prihlási po prvý
krát v time–sharing systéme. Veľa príkazov je k dispozícii v operačnom systéme ako tzv. riadiace
príkazy. Program, ktorý
číta a interpretuje riadiace príkazy je vykonávaný automaticky. Tento program sa niekedy nazýva
interpreter riadiacich štítkov (Control–Card Interpreter) alebo interpreter príkazového riadku
(Command–Line Interpreter) a je často známy ako shell. Jeho funkcia je jednoduchá: Dostať ďalší
príkaz a vykonať ho. Operačné systémy sú často diferencované v oblasti shellu, a s
užívateľsky–priateľským interpreterom príkazov robia systém príjemnejší pre užívateľov. Jeden
spôsob užívateľsky– priateľského rozhrania je na myši založený „okno s ponukami“ systém
používaný v Microsoft Windows. Myš je presúvaná k umiestneniu ukazovateľa myši na obrázky
alebo ikony na obrazovke, ktoré reprezentujú programy, súbory a systémové funkcie. Kliknutie
tlačidla na myške môže vyvolať program, vybrať súbor alebo adresár (priečinok) alebo otvoriť
rolovaciu miestnu ponuku, ktorá obsahuje príkazy. Silnejšie, komplexnejšie a zložitejšie na učenie
shelly, sú uznávané inými užívateľmi. V niektorých z týchto shellov sa príkazy zadávajú cez
klávesnicu a ukončujú klávesom ENTER signalizujúcim, že príkaz je kompletný a je pripravený
na vykonanie. Takto sa chovajú shelly MS–DOS a UNIX. Riadiace príkazy sa zaoberajú
vytváraním procesu a jeho riadením, ovládaním I/O, riadením sekundárneho úložiska, riadením
hlavnej pamäte, prístupom k súborovému systému, ochranou a sieťovaním.
2 Služby operačného systému
Operačný systém poskytuje prostredie na vykonávanie programov. Poskytuje isté služby programom
a užívateľom týchto programov. Poskytnuté služby sa samozrejme v rôznych operačných systémoch
odlišujú, ale vieme identifikovať spoločné triedy. Tieto služby operačného systému sú poskytnuté pre
pohodlie programátora a pre uľahčenie programovania.
Vykonávanie programu: Systém musí byť schopný zaviesť program do pamäte a spustiť tento
program. Program musí byť schopný skončiť svoje vykonávanie buď normálne alebo abnormálne
(s indikáciou chyby).
I/O operácie: Bežiaci program môže požadovať I/O. Toto I/O môže používať súbor alebo I/O
zariadenie. Pre špecifické zariadenia môžu byť požadované špeciálne funkcie (ako pretočiť
Studenovský: Operačné systémy 3 Štruktúra 4
pásku alebo vymazať obrazovku). Pre efektívnosť a ochranu užívatelia nemôžu ovládať I/O
zariadenia priamo. Preto musí operačný systém poskytnúť prostriedky na robenie I/O.
Manipulácia so súborovým systémom: Obvykle, programy potrebujú čítať a zapisovať
súbory. Programy tiež potrebujú vytvárať a odstraňovať súbory podľa mena.
Komunikácie: Za mnohých okolností si jeden proces potrebuje vymeniť informácie s iným
procesom. Takáto komunikácia sa môže vyskytnúť dvomi spôsobmi. Za prvé, medzi procesmi,
ktoré sa vykonávajú na tom istom počítači, za druhé, medzi procesmi, ktoré sa vykonávajú na
rôznych počítačoch, ktoré sú spojené dokopy počítačovou sieťou. Komunikácie môžu byť
realizované cez zdieľanú pamäť alebo technikou odovzdávania správ.
Zistenie chyby: Operačný systém neustále potrebuje si uvedomovať možné chyby. Chyby sa
môžu vyskytnúť v CPU a pamäti, v I/O zariadeniach (ako chyba parity na magnetickej páske,
zlyhanie pripojenia k sieti, alebo nedostatok papiera v tlačiarni) a v užívateľskom programe (ako
aritmetické pretečenie, pokus o prístup k ilegálnej pozícii pamäte alebo veľmi veľké použitie času
CPU). Pre každý typ chyby by mal operačný systém spraviť vhodnú činnosť pre zabezpečenie
opravy a konzistencie výpočtu.
Okrem toho iná sada funkcií operačného systému existuje, nie pre pomoc užívateľovi, ale pre
zabezpečenie efektívnej činnosti systému samého.
Pridelenie zdrojov: Keď viacero užívateľov je prihlásených v systéme alebo viacero jobov
beží v tom istom čase, zdroje musia byť pridelené každému z nich. Veľa rozličných typov zdrojov
je riadených operačným systémom.
Účtovanie: Chceme sledovať, ktorí užívatelia používajú koľko, a ktoré druhy počítačových
zdrojov. Udržiavanie tohto záznamu môže byť použité pri vyúčtovaní užívateľov alebo na súhrnné
štatistiky používania. Používanie štatistík môže byť cenný nástroj pre výskumníkov, ktorí chcú
prerobiť systém na dokonalejší.
Ochrana: Vlastníci informácií uložených vo viac užívateľskom počítačovom systéme môžu
chcieť riadiť používanie týchto informácií. Keď niekoľko disjunktných procesov sa súbežne
vykonáva, nemalo by byť umožnené, aby jeden proces narušil ostatné procesy alebo operačný
systém samotný. Ochrana zahŕňa zabezpečenie, že všetky prístupy k systémovým zdrojom sú
riadené. Bezpečnosť systému od outsajderov je tiež dôležitá. Taká bezpečnosť začína s každou
užívateľskou autentifikáciou samého seba do systému, zvyčajne prostredníctvom hesla, aby bolo
dovolené pristúpiť k zdrojom.
3 Systémové volania
Systémové volania poskytujú rozhranie (prepojenie) medzi procesom a operačným systémom. Tieto
volania sú obvykle prístupné ako inštrukcie v jazyku assembler a zvyčajne sú uvedené v rôznych
manuáloch. Určité systémy dovoľujú systémové volania robiť priamo z programu v jazyku vyššej
úrovne, v tomto prípade sa tieto volania podobajú volaniam podprogramov. Môžu generovať volanie
pre špeciálny Run–Time podprogram alebo systémové volanie môže byť vytvorené priamo In–Line.
Niekoľko jazykov –– ako C, C
+
a PERL –– boli definované na nahradenie
jazyka assembler pre systémové programovanie. Tieto
+
jazyky dovoľujú systémové volania robiť priamo. Napríklad,
+ Windows sú časťou Win32
UNIX
systémové
volaniavolania
môžu byť
z Microsoft
C
programu.
Systémové
prevyvolané
moderné priamo
platformy
+
alebo C
aplikačného
programového rozhrania (API), ktorý je prístupný aplikáciami písanými pre
Microsoft Windows.
3.1 Príklad použitia systémových volaní
Ako príklad použitia systémových volaní, uvažujme napísanie jednoduchého programu na čítanie dát
z jedného súboru a ich kopírovanie do druhého súboru. Prvý vstup, ktorý bude program potrebovať,
sú mená dvoch súborov: vstupný súbor a výstupný súbor. Tieto mená môžu byť špecifikované
všelijako. Jeden spôsob je, že program sa opýta užívateľa na mená tých dvoch súborov. V
interaktívnom systéme bude tento krok vyžadovať postupnosť systémových volaní, po
Studenovský: Operačné systémy 3 Štruktúra 5
prvé, vypísať vyzývajúcu správu na obrazovku a potom prečítať z klávesnice písmená, ktoré definujú
tieto dva súbory. Ma myši založených „okno s ponukami“ systémoch sa v okne zvyčajne objaví
zoznam s menami súborov. Užívateľ potom môže použiť myšku na vybratie zdrojového mena a
rovnaké okno pre špecifikáciu cieľového mena sa môže otvoriť. Ako náhle sú získané dve mená
súborov, program musí otvoriť vstupný súbor a vytvoriť výstupný súbor. Každá z týchto operácií
vyžaduje iné systémové volanie a môže naraziť na možné chybové podmienky. Keď sa program
snaží otvoriť vstupný súbor, môže sa stať, že žiaden taký súbor neexistuje, alebo je chránený proti
vstupu. V týchto prípadoch by mal program vypísať správu na obrazovku (iná sekvencia
systémových volaní) a potom ukončiť abnormálne (iné systémové volanie). Ak existuje vstupný
súbor, musíme vytvoriť nový výstupný súbor. Môžeme nájsť výstupný súbor s takým istým názvom.
Táto situácia môže spôsobiť ukončenie programu (systémové volanie) alebo môžeme vymazať
existujúci súbor (iné systémové volanie) a vytvoriť nový súbor (iné systémové volanie). V
interaktívnom systéme je iná možnosť, opýtať sa užívateľa (sekvencia systémových volaní na výstup
vyzývajúcej správy a prečítanie odpovede z klávesnice),
či nahradiť existujúci súbor alebo ukončiť program. Teraz, keď sú oba súbory otvorené, vstupujeme
do cyklu, ktorý číta vstupný súbor (systémové volanie) a zapisuje do výstupného súboru (iné
systémové volanie). Každé čítanie a zapisovanie musí vrátiť stav informácií, týkajúcich sa rôznych
možných chybových podmienok. Na vstupe môže program zistiť, že sme dosiahli koniec súboru
alebo, že sa vyskytla hardvérová chyba pri
čítaní (ako chyba parity). Na výstupe sa môžu vyskytnúť rôzne chyby (ako málo priestoru na disku,
fyzický koniec pásky, tlačiareň bez papiera). Konečne, keď je skopírovaný celý súbor, program môže
zavrieť oba súbory (iné systémové volanie), vypísať správu na obrazovku (viac systémových volaní) a
konečne normálne skončiť (posledné systémové volanie). Ako môžeme vidieť, aj jednoduché
programy môžu požadovať náročné použitie operačného systému pomocou systémových volaní.
Väčšina užívateľov nikdy neuvidí takýto detailný záber. Run–time systém (kolekcia funkcií vstavaná
do knižníc) pre väčšinu programovacích jazykov poskytuje oveľa jednoduchšie rozhranie. Teda,
väčšina detailov rozhrania operačného systému je skrytá pred programátorom prostredníctvom
prekladača a run–time systému.
3.2 Odovzdávanie parametrov
Často viac informácií je potrebných ako jednoduchá identifikácia požadovaného systémového
volania. Používajú sa tri základné metódy na odovzdávanie parametrov operačnému systému.
Najjednoduchší prístup je odovzdávanie parametrov v registroch. V niektorých prípadoch tam môže
byť viac parametrov ako registrov. V týchto prípadoch sa parametre obvykle ukladajú do bloku,
čiže tabuľky v pamäti a adresa bloku sa odovzdá ako parameter v registri. Toto je prístup vybraný z
Linux. Parametre tiež môžu byť umiestnené (Push) do zásobníka a vybrané (Pop) zo zásobníka
operačným systémom. Niektoré operačné systémy preferujú blokové alebo zásobníkové metódy,
pretože tieto prístupy neobmedzujú počet alebo dĺžku parametrov, ktoré sú odovzdávané.
3.3 Kategórie systémových volaní
Systémové volania môžu byť zoskupené do piatich hlavných kategórií: riadenie procesov, riadenie
súborov, riadenie zariadení, obsluha informácií a komunikácia. Obrázok 1 sumarizuje typy
systémových volaní normálne poskytovaných operačným systémom.
Riadenie procesov
0 začať, skončiť
0 zaviesť, vykonať
0 vytvoriť, ukončiť
0 získať atribúty procesu, nastaviť atribúty procesu
0 počkať na čas
0 počkať na udalosť, signalizovať udalosť
0 alokovať a uvoľniť pamäť
Riadenie súborov
0 vytvoriť, odstrániť
Studenovský: Operačné systémy 3 Štruktúra 6
0 otvoriť, zatvoriť
0 čítať, písať, repozícia
0 získať atribúty súboru, nastaviť atribúty súboru
Riadenie zariadení
0 vyžiadať, uvoľniť
0 čítať, písať, repozícia
0 získať atribúty zariadenia, nastaviť atribúty zariadenia
0 logicky pripojiť a odpojiť zariadenie
Obsluha informácií
0 získať čas alebo dátum, nastaviť čas alebo dátum
0 získať systémové dáta, nastaviť systémové dáta
0 získať atribúty procesu, súboru alebo zariadenia
0 nastaviť atribúty procesu, súboru alebo zariadenia
Komunikácia
0 vytvoriť, odstrániť komunikačné spojenie
0 poslať, prijať správy
0 preniesť stavovú informáciu
0 pripojiť a odpojiť vzdialené zariadenia
Obrázok 1
volaní.
Typy systémových
4 Systémové programy
Iným aspektom moderných operačných systémov je kolekcia systémových programov. Systémové
programy poskytujú pohodlné prostredie pre vývoj a vykonávanie programov. Niektoré z nich sú
jednoduché užívateľské rozhrania pre systémové volania, iné sú podstatne komplexnejšie.
4.1 Kategórie systémových programov
Systémové programy môžeme rozdeliť do nasledujúcich kategórií:
Správa súborov: Tieto programy vytvárajú, odstraňujú, kopírujú, premenúvajú, tlačia,
vypisujú, listujú a vo všeobecnosti manipulujú so súbormi a adresármi.
Informácie o stave: Niektoré programy jednoducho pýtajú od systému dátum, čas, množstvo
voľnej pamäte alebo miesta na disku, počet užívateľov a podobné stavové informácie. Táto
informácia je potom formátovaná a zobrazená na obrazovke, či v súbore.
Modifikácia súborov: Niektoré textové editory sú schopné vytvárať a modifikovať obsah
súborov uložených na disku.
Podpora programovacích jazykov: Kompilátory, assemblery a interpretery pre bežné
programovacie jazyky (ako C, C++, Java, Visual Basic a PERL) sú často dodávané spolu s
operačným systémom.
Zavedenie programu a jeho spustenie: Po tom, čo je program zostavený a skompilovaný,
musí byť zavedený (Load) do pamäte a až potom môže byť vykonaný. Systém môže poskytnúť
absolútny zavádzač (Loader), relokovateľný zavádzač, prekrývajúci zavádzač (Overlay
Loader) a spojovací editor (Linkage Editor), ktoré vysvetlíme v Kapitole 9. Pre jazyky vyšších
úrovní a strojové jazyky sú potrebné tiež systémy na ladenie (Debugging).
Komunikácia: Tieto programy poskytujú mechanizmus na tvorbu virtuálnych spojení medzi
procesmi, užívateľmi a rozličnými počítačovými systémami. Umožňujú užívateľom vzájomne si
posielať správy, prezerať web stránky, posielať elektronickú poštu, prihlásiť sa k vzdialeným
zdrojom alebo prenášať súbory z jedného počítača na druhý.
Väčšina operačných systémov je vybavená programami, ktoré riešia bežné problémy. Medzi ne
patria napríklad: internetové prehliadače, textové procesory, tabuľkové kalkulátory, databázové
systémy, kompilátory a hry. Tieto programy sú známe ako aplikačné programy (alebo aplikácie).
Studenovský: Operačné systémy 3 Štruktúra 7
4.2 Implementácia interpretera príkazov
Pravdepodobne najdôležitejším systémovým programom je interpreter príkazov, ktorého hlavnou
funkciou je získať a vykonať nasledujúci užívateľom špecifikovaný príkaz. Veľa príkazov
manipuluje so súbormi: vytvára ich, odstraňuje, zobrazuje, tlačí, kopíruje, vykonáva atď. Tieto
príkazy môžu byť implementované dvomi spôsobmi. Pri prvom prístupe sám interpreter príkazov
obsahuje kód na vykonanie príkazu. V takomto prípade počet daných príkazov je určený
veľkosťou interpretera príkazov. Alternatívny prístup — používaný okrem iného v UNIX —
implementuje väčšinu príkazov systémovými programami. V tomto prípade interpreter príkazov
nerozumie príkazu; iba ho použije na identifikáciu súboru, ktorý má byť zavedený do pamäte a
vykonaný. Teda, UNIX príkaz rm na odstránenie súboru s menom G
rm
G a vykoná ho s parametrom G. Funkcia
nájde súbor s názvom rm, zavedie ho do pamäte
asociovaná s príkazom rm bude definovaná kódom v súbore rm. Týmto spôsobom programátori
môžu pridávať nové príkazy jednoducho tak, že vytvoria nové súbory s príslušnými názvami.
Interpreter príkazov, ktorý môže byť malý, nemusí byť menený, ak pridáme nové príkazy. Tento
prístup k návrhu interpretera príkazov má problémy. Za prvé, keďže kód, ktorý sa má vykonať, je
samostatný systémový program, operačný systém musí zabezpečiť mechanizmus na odovzdávanie
parametrov z interpretera príkazov do systémového programu. Táto úloha často môže byť
nemotorná, pretože interpreter príkazov a systémový program nemusia byť súčasne v pamäti. Za
druhé, je tiež pomalšie zaviesť program a vykonávať ho, ako jednoducho skočiť na inú sekciu kódu
programu, ktorý práve beží.
Ďalším problémom je, že interpretácia parametrov je ponechaná na programátora daného
systémového programu. Existuje teda hrozba, že parametre budú poskytované nekonzistentne v
programoch, ktoré sú pre bežného užívateľa veľmi podobné, ale boli napísané v rozdielnom čase,
rozdielnymi programátormi.
4.3 Podoba operačného systému
Podoba operačného systému, ako sa navonok javí väčšine užívateľov, je teda definovaná
systémovými programami a systémovými volaniami. Predstavte si, že používate PC. V prípade, že
používate Microsoft Windows, môžete vidieť príkazový riadok MS–DOS shellu alebo grafické
okno s ponukami. Obidva používajú tú istú množinu systémových volaní, hoci z pohľadu užívateľa
to vyzerá rôzne. Návrh schopného a užívateľsky príjemného rozhrania nie je priamo funkciou
operačného systému. Z pohľadu operačného systému nebudeme rozlišovať medzi užívateľskými
programami a systémovými programami.
5 Systémová štruktúra
Systémy, také rozsiahle a zložité ako moderné operačné systémy, musia byť navrhnuté veľmi
opatrne, ak majú byť funkčné a ľahko modifikovateľné. Najčastejší prístup je rozdelenie tohto
problému na menšie komponenty. Každý z týchto komponentov by mal byť dobre definovanou
časťou systému s dôkladne definovanými vstupmi, výstupmi a funkciami. Už sme v krátkosti prebrali
všeobecné komponenty operačných systémov (Sekcia 1). V tejto sekcii rozoberieme spôsoby,
akými sú tieto komponenty poprepájané a spojené do jadra.
5.1 Jednoduchá štruktúra
Veľa komerčných systémov nemá dobre definovanú štruktúru. Často sa stretávame s prípadom, že
operačné systémy boli vyvíjané ako malé, jednoduché a obmedzené systémy a neskôr prerástli do
zložitých systémov.
MS–DOS je príkladom takéhoto systému. Pôvodne bol navrhnutý a implementovaný malou
skupinou ľudí, ktorí nepredpokladali, že sa stane takým populárnym. Bol napísaný tak, aby
poskytoval čo najväčšiu funkčnosť na najmenšom priestore (pretože používal hardvér s
Studenovský: Operačné systémy 3 Štruktúra 8
ohraničenými možnosťami) a teda nebol pozorne rozdelený na komponenty. Obrázok 2 zobrazuje
jeho štruktúru.
Obrázok 2 Štruktúra vrstiev MS-DOS
Klasický UNIX je iným príkladom operačného systému, ktorý bol pôvodne tiež ohraničený
funkčnosťou hardvéru. Pozostáva z dvoch separátnych častí: jadra a systémových programov. Jadro
je ďalej rozdelené na rozhrania a ovládače zariadení, ktoré boli postupne pridávané a rozširované tak,
ako sa počas rokov UNIX vyvíjal. Na tradičný UNIX sa môžeme pozrieť tak, že sa skladá z
jednotlivých vrstiev (Obrázok 3).
Obrázok 3 Systémová štruktúra klasického UNIX
Všetko pod rozhraniami systémových volaní a nad fyzickým hardvérom je jadro (druhá a tretia vrstva
od spodku). Jadro poskytuje súborový systém, rozvrhovanie CPU, manažment pamäte a iné funkcie
operačného systému cez systémové volania. Dohromady je to enormné množstvo funkčnosti,
skombinovanej na jednej úrovni. To robí UNIX ťažkopádnym na vylepšenie, keďže zmeny v
jednej sekcii môžu škodlivo pôsobiť na iné oblasti. Systémové volania definujú
API UNIX, čo je množina systémových programov, ktorá je bežne prístupná a definuje užívateľské
rozhranie. Programátorské a užívateľské rozhranie definuje obsah, ktorý musí jadro podporovať.
Nové verzie UNIX sú navrhnuté na použitie vyspelejšieho hardvéru. V prípade správnej hardvérovej
podpory môžeme operačné systémy rozdeliť na časti, ktoré sú menšie, ako tie, ktoré boli pôvodne
povolené v originálnom MS–DOS alebo UNIX systémoch. Implementátori majú väčšiu slobodu
robiť zmeny v častiach systému a vo vytváraní modulárnych operačných systémov. V prípade
prístupu zhora–nadol celkové črty a funkčnosť sú separované do komponentov. Toto rozdelenie
dovoľuje programátorom skrývať informáciu. Majú teda slobodu implementovať nízko úrovňové
programy tak, ako uznajú za vhodné.
5.2 Vrstvová štruktúra
Systém môžeme rozdeliť na moduly rôznymi spôsobmi. Jednou z metód je rozdelenie do vrstiev
(Layered Approach), kde operačný systém je rozdelený na niekoľko vrstiev (alebo úrovní), pričom
každá vrstva je vybudovaná nad nižšou vrstvou. Najnižšia vrstva (vrstva 0) je hardvér a najvyššia
vrstva (vrstva N) je užívateľské rozhranie.
Studenovský: Operačné systémy 3 Štruktúra 9
Vrstva operačného systému je implementácia abstraktného objektu, ktorý zapuzdruje dáta a operácie,
ktoré môžu s týmito dátami manipulovať. Typická vrstva operačného systému — povedzme vrstva M
— je zobrazená na Obrázku 4. Pozostáva z dátových štruktúr a množiny rutín (programov), ktoré
môžu byť volané nadradenými vrstvami. Tak isto, vrstva M môže používať operácie z nižších
vrstiev.
Obrázok 4 Vrstvy operačného systému
Hlavnou výhodou vrstvového prístupu je modularita. Vrstvy sú selektované tak, že každá používa
iba funkcie (operácie) a služby vrstiev pod ňou. Takýto prístup zjednodušuje ladenie a verifikáciu
systému. Prvá vrstva môže byť odladená bez ohľadu na zvyšok systému, pretože podľa definície,
používa na implementáciu svojich funkcií iba hardvér (o ktorom predpokladáme, že funguje správne).
Ako náhle prvá vrstva je odladená, môžeme predpokladať, že funguje správne a na tomto základe
odladiť druhú vrstvu atď. V prípade, že počas ladenia nájdeme chybu, tak táto chyba musí byť vo
vrstve, ktorú ladíme, pretože vrstvy pod ňou sú už odladené. Takýmto rozdelením do vrstiev si
zjednodušíme návrh a implementáciu operačného systému. Každá vrstva je implementovaná pomocou
operácií, ktoré jej poskytujú nižšie vrstvy. Táto vrstva nemusí vedieť, ako sú tieto operácie
implementované, stačí jej vedieť, čo tieto operácie vykonávajú. Preto každá vrstva skrýva (zapuzdruje)
existenciu určitých dátových štruktúr, operácií a hardvéru pred vyššími vrstvami. Hlavnou ťažkosťou
pri vrstvovom prístupe je starostlivá definícia vrstiev, pretože každá vrstva môže používať iba služby
vrstiev, ktoré sú v hierarchii nižšie. Posledným problémom vrstvovej implementácie je, že zvykne
byť menej efektívna ako iné typy. Napríklad, keď užívateľský program vykonáva I/O operáciu, on
vykonáva systémové volanie, ktoré je odlúčením od užívateľského programu k I/O vrstve, ktorá volá
funkcie vrstvy pre správu pamäte, ktorá ďalej volá vrstvu pre CPU rozvrhovanie a tá nakoniec
odovzdá požiadavku hardvéru. Na každej vrstve môže dôjsť k zmene parametrov, dáta môžu byť
odovzdávané, atď. Každá z vrstiev pridá svoj doplnok k systémovému volaniu a výsledkom je
systémové volanie, ktorého splnenie trvá dlhšie, ako pri jednovrstvových systémoch. Tieto
obmedzenia spôsobili v posledných rokoch určitú zdržanlivosť voči vrstvovým systémom. Navrhujú
sa vrstvy s väčšou funkčnosťou, čo poskytuje väčšinu výhod modularizovaného kódu, pričom sú
obídené zložité problémy definície vrstiev a ich interakcie. Napríklad, OS/2 je následníkom systému
MS–DOS, ktorý má okrem iných funkcií navyše multitasking a operácie duálneho módu. Kvôli tejto
pridanej komplexnosti a výkonnejšiemu hardvéru, OS/2 bol implementovaný spôsobom viac
využívajúcim vrstvy. Porovnajte štruktúru MS– DOS so štruktúrou na Obrázku 5. OS/2 má výhodu
z pohľadu návrhu systému, tak z pohľadu implementácie.
Ďalším príkladom môže byť história operačného systému Windows NT. Prvá verzia mala vysokú
vrstvovo–orientovanú organizáciu, čo sa odrazilo na nižšej výkonnosti v porovnaní s Windows 95.
Až verzia Windows NT 4.0 čiastočne vyriešila problém s výkonnosťou tak, že posunula vrstvy z
užívateľského priestoru do priestoru jadra a integrovala ich bližšie k sebe.
Studenovský: Operačné systémy 3 Štruktúra 10
Obrázok 5 Štruktúra vrstiev OS/2
5.3 Mikrojadrá
Ako sa operačný systém UNIX rozširoval, jadro sa stalo väčším a ťažším na riadenie. V polovici 80tych rokov vyvinuli operačný systém Mach, ktorý modularizoval jadro použitím mikrokernel
prístupu. Táto metóda štrukturalizuje operačný systém odstránením všetkých nedôležitých
komponentov z jadra a ich implementáciou na úrovni systémových a užívateľských programov.
Výsledkom je menšie jadro. Neexistuje všeobecná zhoda ohľadom toho, ktoré služby by mali zostať v
jadre, a ktoré by mali byť implementované v užívateľskom priestore. Vo všeobecnosti však
mikrojadro poskytuje minimálne správu procesov, správu pamäte a komunikačné funkcie. Hlavnou
funkciou mikrojadra je zabezpečovať komunikáciu medzi klientskym programom a rôznymi
službami, ktoré tiež bežia v užívateľskom priestore. Komunikácia je poskytovaná posielaním správ.
Klientsky program a služba nikdy nekomunikujú priamo. Radšej komunikujú nepriamo, cez
vymieňanie správ s mikrojadrom. Výhodou mikrokernelového prístupu je jednoduchosť
rozširovania operačného systému. Všetky nové služby sú pridané do užívateľského priestoru a teda
nie je potrebné modifikovať jadro. Keď je potrebná modifikácia jadra, tak zmeny zvyknú byť menšie,
keďže mikrokernel je menšie jadro. Výsledný operačný systém je ľahšie prenositeľný z jedného typu
hardvéru na iný. Mikrojadro tiež poskytuje väčšiu bezpečnosť a spoľahlivosť, keďže väčšina služieb
beží ako užívateľské a nie ako kernelové procesy. V prípade, že niektorá zo služieb spadne, zvyšok
operačného systému ostane neporušený. Niekoľko dnešných operačných systémov používa
mikrokernelový prístup. Tru64 UNIX poskytuje UNIX užívateľské rozhranie, ale je
implementovaný s jadrom operačného systému Mach. Operačný systém Apple Mac OS X Server je
tiež založený na Mach kerneli.
6 Virtuálne stroje
Pri vrstvovej štruktúre OS každá vrstva môže nazerať na rozhranie pod sebou ako na počítač
poskytujúci určité služby — inštrukcie. Napríklad, aplikačné programy môžu zavolať funkciu
open na otvorenie súboru, ako keby to bola primitívna operácia počítača (strojová inštrukcia), aj keď
v skutočnosti je implementovaná nižšou vrstvou OS. Principiálne, teda nemusia rozlišovať medzi
takouto funkciou a strojovými inštrukciami — to všetko sú využiteľné služby počítača. Takýto
abstraktný pohľad na počítač ako množinu služieb je základom myšlienky virtuálneho stroja. OS
môže všetkým užívateľským procesom vytvoriť dojem, že majú pre seba kompletný virtuálny
počítač — s CPU, pamäťou aj perifériami a operačným systémom. Samozrejme, sú aj
problémy. Musíme simulovať užívateľský režim aj privilegovaný režim. Budeme teda mať virtuálny
privilegovaný režim (napríklad pri obsluhe virtuálnej tlačiarne) a prechod do ozajstného
privilegovaného režimu nastane až vtedy, keď virtuálna tlačiareň pristúpi k ozajstnej fyzickej
tlačiarni. Problematická je aj komunikácia — samozrejme cez virtuálnu sieť virtuálnych strojov.
Studenovský: Operačné systémy 3 Štruktúra 11
6.1 Java virtuálny stroj
Java je veľmi populárny objektovo–orientovaný jazyk. Okrem špecifikácie jazyka a rozsiahlej API
knižnice, Java poskytuje tiež špecifikáciu pre Java virtuálny stroj (Java Virtual Machine —
JVM). Java program pozostáva z jednej alebo viacerých tried. Pre každú Java triedu, Java
kompilátor
vytvorí architektonicky–neutrálny bajtový kód vo výstupnom .class súbore. JVM povoľuje
.class súboru bežať na akomkoľvek systéme, ktorý má implementovaný JVM.
JVM pozostáva zo zavádzača tried a Java interpretera, ktorý vykonáva bajtový kód. JVM
umožňuje písať programy, ktoré sú architektonicky neutrálne a prenosné. Implementácia JVM je
špecifická pre každý systém (ako Windows alebo UNIX). Implementáciu JVM urobíte
Java Runtime Environment na svojom počítači zo stránky www.sun.com. JVM poskytuje bezpečnú,
nainštalovaním
spoľahlivú, objektovo–orientovanú, prenosnú a architektonicky neutrálnu platformu pre spúšťanie
Java programov. JVM je pravdepodobne najviac rozšíreným virtuálnym strojom. Každý webový
prehliadač má v sebe zabudovaný JVM, aby vedel vykonávať Java applety. Java programy sú buď
klasické aplikácie alebo applety. Applety sú krátke Java programy vykonávané web prehliadačom.
Pred rokmi Microsoft a SUN ohlásili, že vytvoria operačný systém napísaný v Jave, ktorý bude
spoločný pre všetky platformy počítačov na svete. Bohužiaľ, pohádali sa — inak, by sme dnes mali
jeden operačný systém spoločný pre všetky počítače.
7 Zhrnutie
Operačné systémy poskytujú množstvo služieb. Na najnižšej úrovni systémové volania povoľujú
bežiacemu programu robiť požiadavky na operačný systém priamo. Na vyššej úrovni, interpreter
príkazov alebo shell poskytuje mechanizmus pre užívateľa na vydanie žiadosti bez písania programu.
Príkazy môžu prísť zo súborov počas dávkového vykonávania alebo priamo z klávesnice v
interaktívnom alebo time–sharing režime. Systémové programy sú poskytované na uspokojenie
mnohých bežných užívateľových žiadostí. Typy žiadostí sa líšia podľa úrovne žiadosti. Systémová
úroveň musí poskytnúť základné funkcie, ako riadenie procesov a správa súborov a periférií.
Žiadosti vyššieho stupňa, uskutočňované interpreterom príkazov alebo systémovými programami, sú
preložené na sekvencie systémových volaní. Systémové služby môžu byť rozdelené do niekoľkých
kategórií: riadenie programov, stavové požiadavky a I/O požiadavky. Programové chyby môžu byť
považované tiež za požiadavky na službu. Keď už systémové služby sú definované, môže byť
navrhnutá štruktúra operačného systému. Keďže operačný systém je veľký, dôležitá je modulárnosť.
Navrhovať systém ako postupnosť vrstiev alebo využiť mikrokernel, je považované za dobrý prístup.
Koncept virtuálnych strojov využíva vrstvový prístup a pokladá jadro operačného systému a hardvér,
ako keby oni boli celý hardvér. Iné operačné systémy môžu dokonca byť zavedené na vrchol tohto
virtuálneho stroja. Operačné systémy sú dnes skoro vždy písané v systémovo–implementačnom
jazyku alebo v jazyku vyššej úrovne. Táto vlastnosť zlepšuje ich implementáciu, údržbu a
prenositeľnosť. Na vytvorenie operačného systému pre konkrétnu strojovú konfiguráciu musíme
vykonať generovanie systému.
Studenovský: Operačné systémy 3 Štruktúra 12
Download

3 Struktura.pdf