Operačný systém

Obsah
1. Historický vývoj OS
2. Štruktúra OS
3. Loader
4. Monitor
5. Supervízor
6. Spojovací program
7. Knižnice
8. Príklad




 

 

 

 

 




priamy prístup k počítači

 

 

 




práca (job)

 

spracovanie úloh v dávkach

 

nepriamy prístup k počítači

 

knižnice

 

 

 

 

 

 

 

 

 


viac- úlohový systém

 

 

 

 

 

 

virtuálne zariadenie

 

 

 

 

 

 

 


virtuálna pamäť















zdieľanie času















 

 

 












rezidentný program

 

 

 

 

 

 




















modul

 

 

fáza

   Problematika operačných systémov (operating systems) tvorí dnes samostatnú a značne
rozsiahlu časť vedy o počítačoch (computer science).
Pod pojmom operačný systém rozumieme sústavu programov, ktoré umožňujú a uľahčujú
prácu s počítačom. Tieto programy tvoria základnú časť programového vybavenia a sú dodávané výrobcom súčasne s počítačom. Jeden počítač môže pracovať pod rôznymi operačnými systémami.

Historický vývoj operačných systémov
Operačné systémy sa vyvíjali spolu so zdokonaľovaním počítačov a s ich zavádzaním do praxe.

Prvé počítače žiadny operačný systém nemali. Obsluha bola zaisťovaná výhradne technickým
vybavením počítača prostredníctvom ovládacieho pultu. Postupne boli počítače vybavené
jednoduchými pomocnými programami, ktoré umožňovali zavedenie programu, zapísaného v
strojovom jazyku do pamäti na určenú adresu a riadenie vstupných a výstupných operácií.
Tieto programy tvorili už vlastne jednoduchý operačný systém. Neskoršie k nim pribudli
prekladače programovacích jazykov.

Obsluhu počítača si zaisťoval programátor sám. Hovoríme preto o priamom prístupe k počítači
(open shop). Programy operačného systému boli zapísané na štítkoch alebo na diernej páske.
Programátor musel vyhľadať štítky alebo pásku, na ktorej boli vydierované požadované
programy operačného systému (napr. prekladač) a zaviesť tieto programy do operačnej pamäti.
Potom musel vložiť do snímača štítky alebo pásku so svojím programom, ktorý chcel preložiť,
alebo s údajmi, ktoré chcel spracovať a spustiť program v pamäti.
Pri takom spôsobe obsluhy bol počítač málo využitý. Časové straty vznikali tým, že programátor musel vyhľadávať v krabiciach uložené programy, vkladať ich do snímača a zavádzať do pamäti.

S rozvojom vonkajších pamätí, používajúcich magnetické pásky alebo disky, bolo možné uložiť
systémové programy vo vonkajšej pamäti a obsluhu počítača automatizovať. Podľa toho,
na akom nosiči údajov (médiu) boli systémové programy uložené, hovoríme o páskovom alebo
diskovom operačnom systéme. Programátor teraz zadával svoje požiadavky ako prácu (job).
Práca sa skladala z príkazov operačného systému (prelož program, spusť program ...) a
z vlastného programu, alebo vstupných dát. Príkazy pre operačný systém boli zapísané v jazyku
pre riadenie prác
(job control language-JCL).Operačný systém bolo nutné doplniť programom, ktorý by príkazy jazyka pre riadenie prác analyzoval a vykonával. Podľa týchto príkazov sa na nosiči údajov samočinne vyhľadali potrebné systémové programy a zaviedli sa do operačnej pamäti. Niektoré operačné systémy umožňovali navyše zaviesť do počítačového systému viac prác, ktoré boli združené do dávky a potom postupne spracovávané. Hovoríme potom o spracovaní úloh v dávkach (batch processing).

Časové straty, ktoré vznikali pri obsluhe boli tak odstránené a prítomnosť programátora u počítača sa stala zbytočná, Programátor odovzdal svoje požiadavky vo výpočtovom stredisku,
štítky s programami od rôznych programátorov vkladal do snímača operátor a všetko ostatné
už zaisťoval operačný systém sám. Pretože programátor už nie je prítomný pri spracovaní svojej úlohy, hovoríme o nepriamom prístupe k počítači (closed shop).

Magnetické nosiče údajov s dostatočne veľkou kapacitou umožnili vytvorenie knižníc programov. Do týchto knižníc si  mohol programátor uložiť svoje často používané programy.
Odpadla tak nutnosť manipulovať stále s balíkmi štítkov pri ladení programu alebo pri jeho
spúšťaní. Programátor zadal iba meno programu a operačný systém už tento program sám vyhľadal a vykonal s ním požadované operácie. K funkciám operačného systému tak pribudla
obsluha knižníc.

Všetky vylepšenia značne uľahčili obsluhu počítača. Počítač, a najmä jeho procesor nebol ale stále dostatočne využitý. Nové konštrukčné prvky umožnili zostrojiť počítače, ktoré boli schopné vykonávať rádovo 104 až 105 operácií za sekundu. Oproti tomu sa rýchlo vstupných
a výstupných zariadení príliš nezvýšila a pohybovala sa podľa typu zariadenia v rozsahu asi
101 až 103 prenesených znakov za sekundu. Zavedením kanálovej koncepcie bol síce procesor zbavený nutnosti riadiť priamo vstupné a výstupné operácie, ale to malo význam iba vtedy, keď
spracovávaná úloha nemusela čakať na dokončenie prenosu určitej časti údajov a mohlo sa pokračovať vo výpočte. V opačnom prípade sa muselo čakať na dokončenie prenosu údajov
a procesor nebol využitý. Ak sa spracovával krátky program, nebola využitá ani pamäť, pretože v nej zostalo ešte volné miesto, do ktorého by mohol byť uložený iný program.

Ukázalo sa, že by bolo vhodné spracovávať na počítači súčasne viac úloh. V okamihu kedy by
spracovávaná úloha musela čakať na dokončenie vstupnej alebo výstupnej operácie, bolo by
zahájené spracovanie inej úlohy ; ak by aj tá musela čakať na prenos údajov, otvorilo by sa spracovanie ďalšej úlohy atď. Vždy po dokončení vstupnej alebo výstupnej operácie by sa muselo zistiť, ktorú úlohu je možné opäť vybrať na spracovanie.

Táto myšlienka bola realizovaná v multiprogramových systémoch. Na jednom počítači sa spracovávalo súbežne (concurrent) niekoľko úloh, ktoré sa navzájom delili o technické prostriedky počítačového systému (procesor, operačná pamäť, prídavné zariadenia).
Súbežné spracovanie úloh kládlo ďalšie nároky na operačný systém aj na technické vybavenie počítača. Bolo nutné viesť prehľad o jednotlivých úlohách, vyberať podľa určitých kritérií úlohy na spracovanie, prideľovať im potrebné prostriedky a zaistiť, aby sa úlohy nemohli navzájom rušivo ovplyvňovať.

Brzdou pri prevádzke multiprogramového systému sa môže stať nedostatočný počet vstupných
alebo výstupných zariadení alebo ich malá rýchlosť. Ak je k počítači pripojená napríklad iba
jedna tlačiareň a v počítači prebiehajú súbežne dve úlohy, ktoré požadujú tlač väčšieho súboru údajov, musí jedna úloha počkať, kým druhá úloha vytlačí všetko, čo bolo zadané, a iba potom
sa môžu tlačiť údaje druhej úlohy. Nie je samozrejme možné, aby každá úloha tlačila na tlačiarni striedavo vždy jeden riadok .Určité riešenie tejto situácie prinieslo zavedenie nepriameho vstupu a výstupu údajov (SPOOLING - Simultaneous peripheral operation on line). Princíp spočíva v tom , že úlohy nepracujú priamo so vstupnými a výstupnými zariadeniami , ale s virtuálnymi ( pomyselnými ) zariadeniami , ktoré sú v skutočnosti predstavované oblasťami na rýchlej vonkajšej diskovej pamäti. Vstupné údaje úlohy sa najskôr prečítajú maximálnou možnou rýchlosťou napr. zo snímača štítkov a zapíšu sa do vstupnej oblasti na disku, ktorá potom predstavuje virtuálny snímač. Úloha číta podľa potreby obsah jednotlivých štítkov z tejto oblasti a nie zo skutočného snímača, ktorý môže byť využitý pre čítanie ďalšej úlohy alebo údajov. Podobná je aj situácia pri výstupe údajov. Údaje , ktoré sa majú napríklad tlačiť na tlačiarni ,sú ukladané do príslušnej oblasti na disku a ich prenos na skutočnú tlačiareň zaisťuje vo vhodnom okamihu operačný systém. Tlačiareň tak nemusí byť blokovaná po celú dobu spracovania jednej úlohy , ale iba po dobu nezbytnú k tlači . Využitie vstupných a výstupných zariadení sa tak zväčší.

Pri vytváraní rozsiahlych programov (typickým príkladom sú prekladače) môže byť programátor obmedzený veľkosťou miesta v pamäti , ktoré bude môcť používať. Ak by bol program dlhší než je dostupné miesto v pamäti , musel by programátor rozdeliť celý program na určité úseky (segmenty) , ktoré boli uložené vo vonkajšej pamäti a do pamäti boli zavádzané postupne. Delenie programu na menšie celky bolo značne obtiažne a vyžadovalo od programátora veľké skúsenosti . Bola preto snaha preniesť aj túto prácu na operačný systém .

Zatiaľ najlepšie riešia tento problém systémy s virtuálnou pamäťou. Počítač s virtuálnou pamäťou sa správa tak , ako by mal programátor k dispozícii veľmi veľkú pamäť . Programátor preto môže napísať svoj program tak , ako by mohol skutočne tak veľkú pamäť používať. V skutočnosti je však program uložený na vonkajšej diskovej pamäti a operačný systém (spolu s technickým vybavením počítača) automaticky zaisťuje , aby boli do pamäti prenášané iba tie časti programov a údajov , ktoré sú práve potrebné . Táto koncepcia umožňuje efektívne spracovať v relatívne malom priestore pamäti rozsiahle úlohy.

Zatiaľ čo pri priamom prístupe k počítaču mal programátor možnosť sledovať vykonávanie úlohy a v prípade potreby okamžite zasiahnuť , je situácia pri nepriamom prístupe zložitejšia. Doba, ktorá uplynie medzi odovzdaním programu vo výpočtom stredisku a obdržaním
výsledkov , sa často predĺži na niekoľko dní. počítač je síce úplne využitý , ale práca programátora na jednom programu sa značne predlžuje. Boli preto vytvorené operačné systémy, ktoré umožňujú konverzačný styk programátora s počítačom prostredníctvom terminálu. Programátor zadáva s klávesnice príkazy, ktoré systém vykonáva a výsledky sú zobrazované na obrazovke, alebo je možné ich v prípade potreby vytlačiť na tlačiarni. Tento spôsob práce umožňuje veľmi rýchlo vytvárať a ladiť programy. Terminálov môže byť k počítači pripojených niekoľko. Operačný systém potom zaisťuje, aby každý užívateľ mal pri práci u terminálu dojem, že má počítač výhradne pre seba. To je zaistené zdieľaním času (time sharing).
Jednotlivým úlohám je pridelený určitý časový interval (rádovo asi 10-1 - 10-2 s).
Počítač spracováva každú úlohu iba po dobu tohoto intervalu a potom prechádza na spracovanie ďalšej úlohy, až sa nakoniec všetky úlohy v cykle vystriedajú a začína sa opäť spracovávať prvá úloha. Vzhľadom na vysokú rýchlosť počítača sa však zdá, že počítač spracováva všetky úlohy súčasne.

Pre nasadenie počítačov na riadenie technologických procesov bolo nutné vytvoriť operačné systémy pre riadenie v reálnom čase. Riadenie technologických procesov spočíva v podstate v spúšťaní rôznych programov v určitých intervaloch alebo pri príchode určitých signálov.
Pod pojmom riadenie v reálnom čase rozumieme skutočnosť, že odozva počítača na nejaký
signál je dostatočne rýchla na to, aby počítač mohol včas ovplyvniť procesy, ktoré riadi a aby
nedošlo k zhoršeniu kvality výrobku alebo dokonca k havárií technologického zariadenia.

Štruktúra operačného systému
Uvedený príklad je jedným z mnohých, ktoré by sa dali použiť k opisu operačného systému počítačov 3. a 3,5. generácie, umožňujúceho súbežné spracovanie úloh.
Z hľadiska funkcie môžeme rozdeliť operačný systém približne takto:

OPERAČNÝ SYSTÉM
- počiatočný zavádzač
- riadiace programy
   - program pre riadenie úloh (monitor)
   - program pre riadenie výpočtu (supervizor)
- výkonné programy
   - prekladače
   - obsluha knižníc
   - spojovací program
   - pomocné a servisné programy.

Operačný systém býva značne rozsiahly. Najmä riadiace programy. Nie je preto možné, aby
boli tieto programy uložené v pamäti celé. Preto sú v nej trvalo uložené iba tie programy, ktoré sa najčastejšie používajú. Tieto programy sa volajú rezidentné. Patria sem programy pre riadenie prídavných zariadení, zavádzač a program pre vyhľadávanie ostatných programov operačného systému, ktoré sú uložené na disku a do pamäti sú ukladané iba v prípade potreby.

Počiatočný zavádzač (loader)
IPL - Iniciál Program Loader  je jednoduchý program, ktorý umožní zaviesť do určitého miesta
pamäti počítača zo zadaného vstupného zariadenia nejaký program zapísaný v strojovom jazyku.
Obyčajne sa prostredníctvom loadera zavedie do pamäti časť operačného systému, ktorá potom preberie ďalšie riadenie činnosti počítača.

Monitor
Súbor programov ktoré vedú evidenciu o jednotlivých úlohách, ktoré vstupujú do počítačového systému. Monitor určuje kedy bude otvorené ich spracovanie a interpretuje príkazy jazyka pre
riadenie prác. Výber úlohy na spracovanie závisí napríklad od toho, v akom čase úloha do systému vstúpila, akú má prioritu, aké sú jej požiadavky na pamäť a prídavné zariadenia, aký čas bude potrebný na jej spracovanie a podobne. Do monitora obyčajne zaraďujeme aj programy pre komunikáciu s operátorom.

Supervizor
Je to program na riadenie výpočtu. Tento program je jediný, ktorý môže používať pri svojej činnosti všetky inštrukcie bez obmedzenia (teda aj privilegované inštrukcie).
Ak bežný program obsahuje privilegovanú inštrukciu, hlási počítač chybu. Počítač preto môže pracovať v dvoch režimoch - v režime užívateľskom, kedy sa niektoré inštrukcie nesmú používať a v režime supervizora, kedy je "všetko dovolené".
Do supervizora teda patrí predovšetkým správa prostriedkov, ktorá prideľuje prostriedky výpočtového systému (priestor na vonkajších pamätiach, procesor prípadne procesory, ak ich má počítač viac, prídavné zariadenia a operačnú pamäť) jednotlivým úlohám.
Ďalej musí viesť supervizor evidenciu o stave spracovania jednotlivých úloh a vyberať určitú úlohu z tých, ktoré sú schopné ďalšieho spracovania. Supervizor tiež zaisťuje ovládanie prídavných zariadení a zavádzanie požadovaných programov do pamäti.

Spojovací program
Pri preklade zdrojového programu vytvára prekladač program v strojovom jazyku - cieľový program (object program) alebo tiež výsledný program, prípadne tiež modul. Pri preklade jedného zdrojového programu môže vzniknúť aj viac modulov. Pretože sa v každom programe používajú väčšinou určité stále rovnaké programy (práca so súbormi, matematické funkcie a pod.), sú tieto podprogramy uložené vo forme modulov (tj. v strojovom jazyku) v knižnici a sú pripájané k tým programom, ktoré ich požadujú. Spájanie jednotlivých modulov do jedného celku, ktorý je možné zaviesť do pamäti, zaisťuje spojovací program (linkage-editor).
Výsledkom práce spojovacieho programu je fáza (zavádzaný modul). Fáza potom môže byť zavedená do pamäti prostredníctvom zavádzača.

Knižnice
Knižnice sú súbory programov, ktoré sú určitým spôsobom usporiadané. Prácu s knižnicami riadi zvláštny program, nazývaný knihovník (librarian).
Knihovník umožňuje napríklad zapísať program program pod určitým názvom do knižnice programov, umožňuje opravovať, premenovávať, vytvoriť alebo zrušiť nový program z programov (alebo ich častí), ktoré sú už v knižnici uložené a tiež vypísať zoznam programov, ktoré sú v knižnici uložené. Aby bolo možné rýchlo vyhľadať zadaný program, sú knižnice prakticky u všetkých počítačov uložené na disku. Knižnice bývajú obvykle dve - systémová a užívateľská. V systémovej knižnici sú uložené programy operačného systému, do užívateľskej knižnice môžu ukladať svoje programy užívatelia počítača.

Príklad spracovania úlohy v počítačovom systéme
Predpokladajme jednoduchú úlohu, v ktorej programátor požaduje preložiť nejaký program a spustiť ho.

//   začiatok úlohy (názov úlohy, priorita, požiadavky na pamäť, ...)
//   vyvolanie prekladača
     zdrojový program
                 .
                 . 
                 .
//   koniec zdrojového programu
//   vyvolanie zostavovacieho programu
//   spustenie preloženého a zostaveného programu
     vstupné údaje pre program
                  .
                  .
                  .
//   koniec vstupných údajov
//   koniec úlohy

Príkazy jazyka pre riadenie prác sú vyznačené // na začiatku riadku.
Na začiatku spracovania našej úlohy monitor prečíta príkaz "vyvolaj prekladač", obráti sa na supervizor s požiadavkou na aktiváciu zadaného prekladača a supervizor túto požiadavku vykoná. Prekladač preloží zdrojový program a vytvorí z neho cieľový modul.
Po ukončení práce prekladača je znovu vyvolaný monitor. Ten prečíta príkaz "vyvolaj spojovací program" a rovnako ako u prekladača sa vykoná aktivácia spojovacieho programu, ktorý k modulu, získanému prekladom zdrojového programu, pridá v prípade potreby ďalšie moduly z knižnice a vytvorí z nich fázu. Po zostavení programu prečíta monitor ďalší príkaz "spusti program" a požiada supervizor o spustenie zostaveného programu.
Aktivovaný program potom spracuje vstupné údaje a vytlačí požadované výsledky. Po ukončení práce programu je opäť vyvolaný monitor, ktorý po prečítaní príkazu "koniec úlohy" spracovanie úlohy ukončí.