Operačný systém

Operačný systém (OS) je softvér, ktorý spravuje zdroje počítača a poskytuje programátorom rozhranie na prístup k týmto zdrojom. Operačný systém tiež spracúva systémové dáta a vstupy od používateľa a odpovedá alokovaním a spravovaním úloh a interných zdrojov počítača ako služby pre užívateľa. OS vykonáva základné úlohy ako kontrola a alokovanie pamäte, pridelenie priority systémovým požiadavkám, kontrola vstupných a výstupných zariadení, umožnenie pripojenia do siete a správa súborov. Operačné systémy môžeme nájsť takmer vo všetkom, čo obsahuje integrované obvody, od osobných počítačov, cez internetové servery, mobilné telefóny, hudobné prehrávače, routre, switche, herné konzoly, digitálne kamery, až po šijacie stroje či teleskopy.

Vo väčšine prípadov, operačný systém nie je prvým kódom, ktorý sa spúšťa v počítači pri bootovaní. Inicializačný kód, vykonávaný v počítači, je zvyčajne nahratý z firmvéru, ktorý je uložený vo Flash ROM, niekedy označovaný aj ako BIOS alebo boot ROM. Firmvér nahrá a spustí jadro operačného systému (zvyčajne z disku, niekedy aj cez sieť) a zobrazí prvý grafický alebo textový výstup, ktorý užívateľ uvidí.

Najbežnejšie súčasné desktopové operačné systémy sú Microsoft Windows, Mac OS X, Linux, FreeBSD a Solaris. Windows je najpopulárnejší desktopový OS, pričom Linux je najpoužívanejší v serverových prostrediach. Linux, Mac OS X aj Microsoft Windows majú všetky nielen osobné, ale aj serverové varianty. S výnimkou MS Windows, dizajny všetkých spomenutých operačných systémov boli inšpirované, alebo priamo zdedené, z operačného systému Unix. Unix bol vyvinutý v Bell Labs v 60tych rokov a bol základom vzniku mnohých voľných ale aj komerčných operačných systémov.

 

Vykonávanie programu

Najbežnejšia funkcia operačného systému je podpora aplikácií spustených užívateľom. Na operačných systémoch s podporou multiprogramovania, sú bežiace programy označované ako procesy. Správa procesov využíva prostriedky poskytované operačným systémom na umožnenie vytvorenia, vykonania a ukončenia procesov, a zabezpečenie rôznych interakcií. Túto funkcionalitu zabezpečuje jadro operačného systému v spojení s príslušným hardvérom.
Vykonanie programu zahŕňa vytvorenie procesu operačným systémom. Jadro vytvorí proces a buď ho odloží na neskoršie použitie, alebo mu alokuje určitú časť pamäte, nahrá programový kód z disku alebo inej časti pamäte do novo-alokovanej oblasti a spustí jeho beh. Jadro OS ukladá rôzne informácie o bežiacich procesoch. Medzi tieto informácie môže patriť:
  • Jedinečný identifikátor, nazývaný identifikátor procesu (PID)
  • Zoznam pamäte, ktorú program používa, alebo má k nej povolený prístup
  • PID programu, ktorý vyžiadal jeho spustenie, alebo ID rodičovského procesu
  • Meno súboru resp. cesta z ktorej bol program nahratý
  • Súbor registra, obsahujúci posledné hodnoty všetkých CPU registrov
  • Program counter – počítadlo ukazujúce na aktuálnu pozíciu v programe

 

Prerušenia

Prerušenia sú ústrednou časťou operačného systému a umožňujú mu vysporiadať sa s neočakávanými aktivitami bežiacich programov. Sú základnou formou, akou operačný systém priďeľuje čas bežiacim procesom a bývajú priamo podporované väčšinou vyrábaných CPU. Prerušenia poskytujú počítaču spôsob, ako automaticky spustiť určitý kód ako odpoveď na rôzne udalosti. Dokonca aj veľmi jednoduché počítače podporujú hardwarové prerušenia, a umožňujú tak programátorovi špecifikovať kód, ktorý sa má vykonať keď nastane určitá udalosť.
Keď dôjde k prerušeniu, hardware počítača automaticky zastaví bežiaci program a uloží jeho registre a program counter (ukazovateľ aktuálnej pozície v programe). Je možné si to predstaviť ako uloženie záložky do knižky, keď čitateľa preruší telefonát.
V moderných operačných systémoch sú prerušenia spracúvané jadrom operačného systému. Prerušenie môže prísť buď od hardvéru počítača, alebo od bežiaceho programu. Keď nejaké hardvérové zariadenie vyvolá prerušenie, jadro operačného systému sa rozhodne, ako s touto udalosťou naloží, vo všeobecnosti ako rekaciu buď spustí nejaký kód, alebo udalosť odignoruje. Spracovanie hardvérových prerušení je úloha, ktorá je zvyčajne pridelená programu nazývaný ovládač zariadenia, ktorý môže byť súčasťou operačného systému, alebo iného programu, alebo oboje. Ovládače potom môžu ďalej predať informáciu bežiacemu programu rôznymi spôsobmi.
Program môže tiež vyvolať prerušenie v operačnom systéme. Napríklad keď chce pristúpiť k hardvéru počítača, môže vyvolať prerušenie, čo spôsobí odovzdanie kontroly jadru operačného systému. To potom vykoná požiadavku, ktorá obsahuje inštrukcie, ktoré odovzdá hardvéru alebo ovládaču zariadenia. Keď si program žiada alokovať viac pamäte, spustiť alebo komunikovať s iným programom, alebo oznámiť, že už viac nepotrebuje CPU, robí to pomocou prerušení.

 

Chránený mód a mód jadra

Moderné CPU podporujú technológiu nazývanú duálny mód. CPU s touto možnosťou používajú dva módy: chránený mód a mód jadra, ktoré zazpečujú, že určité funkcie CPU môžu byť kontrolované a ovplyvňované len jadrom operačného systému. Tu chránený mód neoznačuje vlastnosť CPU 80286-tky, aj keď vo všobecnosti sú mu chránené módy veľmi podobné. CPU môžu mať taktiež iné módy, podobné 80286-tkovému chránenému módu, napríklad virtuálny 8086 mód 80386-tky.
Avšak, výraz chránený mód je tu použitý všeobecnejšie v teórii operačných systémov, a označuje všetky módy, ktoré obmedzujú možnosti bežiaceho programu, poskytujú prostriedky ako adresovanie virtuálnej pamäte, či obmedzenie prístupu k hardvéru spôsobom určeným programom, ktorý beží v móde jadra. Podobné módy existujú aj u superpočítačov, minipočítačov, či strediskových počítačov, pretože sú nevyhnutné pre podporu UNIX-ových multiužívateľských operačných systémov.
Keď je počítač spustený, najprv sa automaticky spustí v režime jadra. Prvých niekoľko programov spustených na počítači sú BIOS, bootloader, a operačný systém majú neobmedzený prístup k hardvéru. Keď však operačný systém odovzdá riadenie inému programu, prepne CPU do chráneného módu.
V chránenom móde majú programy prístup iba k obmedzenému množstvu CPU inštrukcií. Užívateľský program môže opustiť chránený mód iba vyvolaním prerušenia, ktoré odovzdá kontrolu opäť jadru systému. Týmto spôsobom si operačný systém udržiava výlučnú kontrolu prístupu k hardvéru, či k pamäti.
Termín “prostriedok chráneného módu” vo všeobecnosti označuje jeden alebo viac CPU registrov, ktoré obsahujú informácie, ku ktorým program nemá povolený prístup. Pokusy o zmenu týchto prostriedkov zvyčajne spôsobia prepnutie do režimu jadra.

 

Správa pamäte

Okrem iných vecí, jadro multiprogramového OS je zodpovedné za kontrolu všetkej systémovej pamäte, ktorá je používaná programami. Toto zabezpečuje, že program nemôže narábať s pamäťou, ktorá je už používaná iným programom. Odkedy je možné striedať programy pomocou prerušení, musí mať každý program nezávislý prístup do pamäte.
Kooperatívna správa pamäte, používaná mnohými prvotnými operačnými systémami, predpokladá, že všetky programy budú dobrovoľne využívať správcu pamäte operačného systému, a nebudú presahovať svoju alokovanú pamäť. Tento systém správy pamäte sa už teraz takmer nikde nevyskytuje, keďže programy často obsahujú chyby, ktoré zapríčiňujú, že sa program pokúša zasiahnuť aj mimo svojej alokovanej pamäte. Keď potom program spadne, môže spôsobiť prepísanie pamäte používanej inými programami. Zlomyseľné programy alebo vírusy takto môžu zámerne meniť pamäť iného programu alebo ovplyvniť činnosť samotného operačného systému. U kooperatívnej správy pamäte teda stačí jediný zlý program na pád celého systému.
Ochrana pamäte umožňuje jadru obmedziť procesom prístup do pamäte. Existujú viaceré metódy ochrany pamäte, napríklad segmentácia pamäte a stránkovanie. Všetky metódy vyžadujú určitú úroveň hardvérovej podpory, ktorá nemusí existovať vo všetkých počítačoch.
V oboch metódach – segmentácia aj stránkovanie, registre chráneného módu určujú, ku ktorým pamäťovým adresám môže program pristupovať. Pokusy adresovať inú časť pamäte vyvolajú prerušenie, ktoré spôsobí, že CPU znovu vstúpi do režimu jadra a kontrola bude odovzdaná jadru OS. Toto je nazývané porušenie segmentácie, skrátene seg-V od anglického segmentation violation, a keďže je zvyčajne znakom zlomyseľného programu, jadro ho zvyčajne ukončí a zahlási chybu.
Windows 3.1 – Me mal určitú úroveň ochrany pamäte, ale programy ju mohli veľmi jednoducho obísť. Pod Windows 9x všetky MS-DOS-ovské aplikácie bežali v móde jadra, a tak mali takmer neobmedzenú kontrolu nad počítačom. Chyba všeobecnej ochrany vznikne pri výskyte porušenia segmentácie, avšak systém aj napriek tomu často spadne.

 

Metódy multitaskingu

Multitasking označuje beh viacerých nezávislých programov na jednom počítači, pričom sa javia, že sú vykonávané naraz. Keďže väčšina počítačov v skutočnosti môže naraz vykonávať len jednu, či dve činnosti, je toto zdanie spôsobené „zdieľaním času“, čo znamená, že každý program využíva časť procesorového času na svoj beh.
Jadro operačného systému obsahuje softvér nazývaný scheduler – plánovač, ktorý určuje, koľko času ktorý program dostane na svoje vykonávanie, a v akom poradí sa programy dostanú na rad. Kontrola je odovzdávaná procesu jadrom operačného systému, ktorý zároveň umožní programu prístup k CPU a k pamäti. Neskôr je kontrola opäť odovzdaná naspäť operačnému systému, a zas ďalší program môže využívať CPU a pamäť. Toto predávanie kontroly medzi jadrom a aplikáciami je nazývané prepínanie kontextu (context-switch).
Prvotný model, ktorý priraďoval čas bežiacim programom sa nazýval kooperatívny multitasking. V tomto modeli, keď je kontrola raz odovzdaná programu, tak sa môže vykonávať ako dlho chce, bez toho aby musel vracať kontrolu späť operačnému systému. To znamená, že nesprávne fungujúci program mohol zabrániť ostatným aplikáciám používať CPU.
Filozofia preemptívneho multitaskingu bola zabezpečiť, že všetkým programom bude pridelený rovnaký čas používania CPU. To znamená, že všetky programy musia mať vyhradený limitovaný čas, počas ktorého môžu využívať CPU bez prerušenia. K dosiahnutiu tohto používajú moderné operačné systémy časované prerušenia. Časovač chráneného módu je spustený jadrom, ktoré po uplynutí určitého času vyvolá návrat do módu jadra.
Na mnohých monoužívateľských operačných systémoch je kooperatívny multitasking vhodným riešením, napríklad na domácich počítačoch zvyčajne beží len malé množstvo dobre otestovaných programov. Windows XP Home Edition bola prvá verzia MS Windows pre domáce použitie, ktorá používa plne preemptívny multitasking, hoci už predtým bol použitý vo Windows NT. UNIX, ktorý bol navrhnutý pre viacero užívateľov, podporoval preemptívny multitasking už desaťročia, pokiaľ to hardvér dovoľoval.

 

Sieť

Súčasné operačné systémy podporujú množstvo sieťových protokolov, hardvéru a aplikácií na ich používanie. To znamená, že počítače používajúce rôzne OS môžu pracovať v tej istej sieti, a zdieľať súbory, tlačiarne, skenery používajúc drôtové alebo bezdrôtové pripojenia. Siete v zásade umožňujú prístup počítača ku zdieľaným prostriedkom vzdialeného počítača tak, ako keby boli pripojené priamo k nemu samotnému. Toto zahŕňa všetko od jednoduchej komunikácie, cez používanie sieťových súborových systémov až po zdieľanie grafického, či zvukového hardvéru. Niektoré sieťové služby umožňujú transparentne pristupovať k prostriedkom počítača, ako napríklad SSH, ktoré dovoľuje priamy prístup užívateľom siete k príkazovému riadku.
Sieť typu klient/server vyžaduje program na počítači, ktorý sa chce pripojiť cez sieť k inému počítaču, nazývanému server. Servery, zvyčajne bežiace pod UNIX alebo Linux, ponúkajú rôzne služby užívateľom siete. Tieto sú zvyčajne poskytované cez porty alebo číslované prístupové body za serverovou sieťovou adresou. Každé čislo portu je zvyčajne spojené s najviac jedným bežiacim programom, ktorý je zodpovedný za spracovanie požiadavky na danom porte.
Mnoho operačných systémov podporuje jeden alebo viac predajcom špecifikovaných, či otvorených sieťových protokolov, napríklad SNA na IBM systémoch, DECnet na systémoch od Digital Equipment Corporation, a Microsoft-špecifické protokoly na systémoch Windows. Niektoré protokoly pre špecifické úlohy môžu tiež byť podporované, ako napríklad NFS pre prístup k súborom. Protokoly ako Esound alebo esd môžu byť jednoducho rozšírené cez sieť a umožňujú prehrať zvuk z lokálnych aplikácií na vzdialenom počítači. Virtual3D umožňuje vzdialenému počítaču kontrolovať lokálny 3D hardware a tak hrať napríklad 3D hry po sieti.
 

Grafické užívateľské rozhrania

Dnes väčšina moderných operačných systémov obsahuje grafické užívateľské rozhrania. V niektorých systémoch je priamo integrované v jadre systému – napríklad v pôvodnej implementácii MS Windows a Mac OS, grafický podsystém bol v skutočnosti časťou jadra. Iné operačné systémy, niektoré staršie, niektoré novšie, sú modulárne, oddeľujú grafický podsystém od jadra a operačného systému. V 1980 UNIX, VMS a mnoho iných boli vybudované práve týmto spôsobom. Dnes Linux a Mac OS fungujú tiež na tomto princípe.
Mnoho OS umožňuje užívateľovi nainštalovať, alebo vytvoriť grafické rozhranie podľa jeho požiadaviek. X Window System v spojení s GNOME alebo KDE je bežné nastavenie na väčšine UNIX-ových systémov. Mnohé na unixe založené grafické užívateľské rozhrania existujú už dlhší čas, väčšinou sú zdedené od X11. Súťaženie medzi rôznymi predajcami unixu (HP, IBM, Sun) viedlo k mnohým rozdeleniam, čo spôsobilo zlyhanie snahy o štandardizáciu podľa COSE a CDE v 1990-tom.
Grafické užívateľské rozhrania sa postupom času vyvíjajú. Napríklad, Windows modifikuje svoje GUI vždy, keď je vydaná nová verzia OS Windows, a rozhranie Mac OS bolo dramaticky zmenené s príchodom Mac OS X v roku 2001.