Základy Operačných Systémov: Kompletný Prehľad pre Študentov
Délka: 26 minut
Úvod do OS
Dve tváre OS: Správca a Tvorca
Srdce systému: Jadro (Kernel)
Rôzne typy jadier
Od jadra k súborom
Občiansky preukaz súboru
Operácie so súbormi
Čo sú to adresáre?
Ako funguje pevný disk?
SSD vs. HDD
Ukladanie dát a fragmentácia
Čo je to proces?
Plánovanie procesov
Problémy so synchronizáciou
Semafory ako dopravní policajti
Keď sa procesy zaseknú
Recept na katastrofu
Zdieľaný súbor
Kto čo zapíše?
Výsledok je...
TLB a jej nástrahy
Prístupy do RAM
Výpadky stránok
Zhrnutie a záver
Tereza: Počuj, Marek, ktorá jedna vec z operačných systémov zaručene potrápi 80% študentov na skúške? A hlavne, ako sa postarať o to, aby sme to už nikdy nepokazili?
Marek: Skvelá otázka, Tereza. Je to presne ten moment, keď majú vysvetliť rozdiel medzi operačným systémom ako celkom a jeho jadrom. Väčšina si myslí, že je to v podstate to isté. Ale ani zďaleka. A ten rozdiel je absolútne kľúčový.
Tereza: Takže to je ten "aha" moment, ktorý dnes sľubujeme?
Marek: Presne tak. Do konca tejto časti budete presne vedieť, čo je čo, prečo na tom záleží a ako s týmto poznatkom totálne zabodovať na skúške.
Tereza: Výborne! Počúvate Studyfi Podcast. Tak sa do toho pustime. Čo je teda operačný systém, keď to nie je len... jadro?
Marek: Predstav si operačný systém ako generálneho manažéra obrovského hotela. Jeho cieľom je, aby všetko bežalo hladko, efektívne a aby boli hostia – teda my, používatelia – spokojní.
Tereza: Okej, hotelový manažér. To sa mi páči. Aké má hlavné úlohy?
Marek: Má dve kľúčové role. Po prvé, je to správca prostriedkov. V hoteli by to znamenalo, že prideľuje izby, riadi personál a stará sa, aby sa neplytvalo jedlom. V počítači to znamená, že spravodlivo delí čas procesora, prideľuje pamäť a manažuje prístup k diskom či tlačiarni.
Tereza: To dáva zmysel. A tá druhá rola?
Marek: Je to tvorca prostredia. Zjednodušuje nám život pomocou abstrakcií. Nemusíš vedieť, kde presne na disku sú uložené jednotlivé bity tvojho referátu. Pre teba je to jednoducho "súbor". A to je abstrakcia.
Tereza: Takže OS nám schováva tú zložitú realitu a dáva nám pekné, jednoduché koncepty ako súbor alebo proces. To je vlastne super služba.
Marek: Presne! Namiesto toho, aby si ovládala každý tranzistor, len dvakrát klikneš na ikonu. Samozrejme, má to aj nevýhody. Niekedy táto abstrakcia znamená menšiu efektivitu, lebo pridáva vrstvu navyše.
Tereza: Dobre, takže ak je OS manažér hotela, kde v tejto analógii nájdeme to jadro, o ktorom si hovoril na začiatku? Je to šéf recepcie?
Marek: Ešte dôležitejšie! Je to riaditeľ celého technického zázemia. Ten, ktorý má kľúče od strojovne, elektrorozvodne a serverovne. Jadro, alebo anglicky kernel, je tá najnižšia a najdôležitejšia časť OS. Beží neustále a má špeciálne oprávnenia.
Tereza: Špeciálne oprávnenia? Znie to ako nejaký VIP prístup.
Marek: V podstate áno. Hovorí sa tomu privilegovaný režim. Iba jadro môže priamo pristupovať k hardvéru a vykonávať kritické operácie. Je to z bezpečnostných dôvodov. Nechceme predsa, aby bežná aplikácia, napríklad hra, mohla len tak zmeniť napätie na procesore.
Tereza: Okej, takže OS je celý manažment hotela, a jadro je technický riaditeľ s prístupom do zakázaných zón. Toto je ten "aha" moment!
Marek: Presne. A bežné programy musia pekne poprosiť jadro o službu cez takzvané systémové volania. Je to ako vyplniť oficiálnu žiadosť na recepcii. Nemôžu si len tak vbehnúť do strojovne a začať otáčať ventilmi.
Tereza: Sú potom všetky tieto "riaditeľské" jadrá rovnaké? Alebo majú rôzne štýly riadenia?
Marek: Výborná otázka! Majú rôzne filozofie. Hlavné sú tri. Prvý je monolitické jadro. To je ako riaditeľ, ktorý robí úplne všetko sám. Riadi elektrinu, vodu, IT... všetko je v jeho jednej obrovskej kancelárii.
Tereza: Znie to veľmi efektívne, ak je ten riaditeľ génius. Ale čo ak spraví chybu?
Marek: Správna poznámka! Je to veľmi rýchle, lebo nemusí s nikým komunikovať. Ale ak sa pomýli, môže zhasnúť svetlo v celom hoteli. Dnešné systémy ako Linux to vylepšujú – používajú modulárnu štruktúru, takže riaditeľ si môže prizvať špecialistov (moduly) podľa potreby.
Tereza: A opak monolitu?
Marek: To je mikrojadro. Tam je riaditeľ len minimálny koordinátor. Všetko ostatné – správu IT, údržbu – deleguje na externé firmy, takzvané servery, ktoré sídlia mimo hlavnej budovy.
Tereza: Aké to má výhody?
Marek: Je to omnoho bezpečnejšie a flexibilnejšie. Ak jedna externá firma zlyhá, ostatné služby v hoteli bežia ďalej. Nevýhodou je, že neustále telefonovanie a posielanie správ medzi riaditeľom a firmami je pomalšie. Je tam vyššia réžia.
Tereza: A čo je ten tretí typ? Nejaký kompromis, predpokladám.
Marek: Presne tak. Hybridné jadro. To je kombinácia. Riaditeľ si tie najdôležitejšie oddelenia, napríklad IT a bezpečnosť, nechá u seba v kancelárii pre rýchlosť, ale ostatné, menej kritické veci, outsourcuje. Tento prístup používa napríklad Windows alebo macOS.
Tereza: Fantastické! Takže máme riaditeľa-workoholika, riaditeľa-delegátora a potom toho pragmatického, hybridného. Myslím, že toto si už zapamätám navždy.
Marek: A práve ten operačný systém, či už má akékoľvek jadro, sa musí starať o naše dáta. To nás privádza k ďalšej kľúčovej téme — správe súborov.
Tereza: Dobre, takže z velína ideme do archívu. Čo je to vlastne ten súbor, tak úplne polopate?
Marek: Presne tak. Predstav si ho ako kolekciu záznamov, takú digitálnu škatuľu na dáta. Je to základná jednotka, v ktorej ukladáme veci na disk. Či už je to fotka, dokument alebo hra.
Tereza: A súborový systém je teda ten, kto v tom archíve udržuje poriadok?
Marek: Bingo! Je to súhrn pravidiel. Hovorí, ako súbory vyzerajú, ako sa organizujú do adresárov a ako sa fyzicky uložia. Dokonca pracuje s najmenšou jednotkou, takzvaným alokačným blokom. To je ako keby skladník nepresúval zrnká piesku, ale len celé tehličky.
Tereza: A čo všetko taký systém o tej mojej "škatuli" vie?
Marek: Vie toho dosť. Každý súbor má svoje atribúty, taký svoj občiansky preukaz. V prvom rade meno, aby si ho našla. Potom veľkosť, teda koľko bajtov zaberá.
Tereza: A samozrejme ten zákerný dátum poslednej zmeny, ktorý prezradí, že som seminárku dokončila o tretej ráno.
Marek: Presne ten! To sú časové informácie. V systémoch s viacerými užívateľmi je kľúčová aj identifikácia vlastníka a prístupové oprávnenia. Tie určujú, kto môže súbor čítať, meniť alebo spúšťať.
Tereza: Aha! Takže to je ten dôvod, prečo nemôžem len tak zmazať systémové súbory Windows, však? Systém vie, že na to nemám práva.
Marek: Presne tak, chráni sám seba. A posledný dôležitý atribút je umiestnenie — teda v ktorom adresári sa súbor nachádza.
Tereza: Super, to dáva zmysel. Takže meno, veľkosť, čas, vlastník, oprávnenia a adresa.
Marek: Perfektne zhrnuté! A teraz, keď vieme, čo súbory sú a aké majú vlastnosti, poďme sa pozrieť na to, aké operácie s nimi môžeme vykonávať.
Tereza: Dobre, Marek, spomenul si operácie so súbormi. Čo si pod tým máme presne predstaviť? Znie to dosť technicky.
Marek: Vôbec nie, sú to veci, ktoré robíme úplne bežne. Sú v podstate štyri základné operácie.
Tereza: Štyri? Dobre, počúvam.
Marek: Po prvé, vytvorenie súboru. Keď si uložíš nový dokument, operačný systém preň musí nájsť miesto na disku a vytvoriť záznam v adresári.
Tereza: Jasné, ako keď si založím nový zošit. Čo ďalej?
Marek: Potom je tu čítanie dát. To je jednoduché, systém načíta dáta z disku do operačnej pamäte, aby s nimi procesor mohol pracovať.
Tereza: A zápis dát?
Marek: To je vlastne modifikácia. Systém najprv dáta načíta, zmení ich a potom zapíše naspäť na disk. Je to o kúsok pomalšie ako len čítanie.
Tereza: A posledná operácia je asi tá najsmutnejšia...
Marek: Presne tak, zmazanie súboru. Systém vtedy zruší záznam v adresári a povie si, že miesto, kde bol súbor uložený, je voľné pre nové dáta. Dáta tam ale často ešte chvíľu fyzicky zostanú.
Tereza: Aha! Takže preto sa dajú niekedy obnoviť zmazané súbory?
Marek: Presne tak! Kým ich niečo nové neprepíše, je tam stále šanca.
Tereza: Super, to dáva zmysel. Spomínal si adresáre... to sú vlastne priečinky, však?
Marek: Áno, presne tak. Adresár je len organizačná jednotka. Pomáha nám udržať v súboroch poriadok. Predstav si knižnicu a adresáre sú jednotlivé poličky a regály.
Tereza: A každý súbor má svoju presnú adresu, teda cestu k nemu.
Marek: Správne. Tá cesta je sekvencia názvov adresárov, oddelených lomítkom. Úplne na vrchu je takzvaný koreňový adresár — ten nemá žiadneho rodiča.
Tereza: A potom sa vetví celá tá štruktúra. Počula som aj o nejakých skratkách, bodka a dve bodky?
Marek: Áno, to sú šikovní pomocníci. Jedna bodka (.) vždy odkazuje na aktuálny adresár, v ktorom sa práve nachádzaš. A dve bodky (..) odkazujú na nadradený adresár, teda o úroveň vyššie.
Tereza: Super, to sa hodí vedieť, hlavne pri práci v príkazovom riadku.
Marek: Presne. A teraz, keď vieme, ako sú súbory organizované, poďme sa pozrieť, kam sa vlastne fyzicky ukladajú. Začnime klasikou — pevným diskom, alebo HDD.
Tereza: To je tá rotujúca krabička, ktorá vydáva zvuky?
Marek: Presne tá. Predstav si gramofón. Máš tam rotujúcu platňu, a nad ňou sa pohybuje rameno s ihlou. V disku je to podobné.
Tereza: Takže platňa je... platňa?
Marek: Áno, volá sa platter. Rameno je čítacia a zápisová hlava. A namiesto drážok sú na platni sústredné kružnice, ktorým hovoríme stopy.
Tereza: A tie stopy sú ešte nejako rozdelené?
Marek: Áno, každá stopa je rozdelená na malé kúsky, sektory. To je najmenšia oblasť, s ktorou vie disk pracovať. Typicky má 512 bajtov.
Tereza: Páni, to je celkom zložitá mechanika. Preto to chvíľu trvá, kým sa disk „rozbehne“?
Marek: Presne tak. Hlava sa musí fyzicky presunúť na správnu stopu a počkať, kým sa pod ňu otočí správny sektor. To všetko zaberá čas.
Tereza: Dnes už ale máme modernejšie a rýchlejšie disky, však? Mám na mysli SSD.
Marek: Áno, SSD alebo Solid-State Drive, je úplne iná káva. Nemá žiadne pohyblivé časti. Je to v podstate súbor flash pamäťových čipov, podobne ako v USB kľúči.
Tereza: A v čom je hlavná výhoda?
Marek: Rýchlosť. Keďže sa nič nehýbe, prístup k dátam je takmer okamžitý. Sú tichšie, odolnejšie voči otrasom a majú nižšiu spotrebu.
Tereza: Znie to ako dokonalé riešenie. Má to aj nejaké mínusy?
Marek: Má. Hlavným je stále vyššia cena za gigabajt. A potom je tu jedna technická zaujímavosť – obmedzený počet prepisov.
Tereza: Ako to myslíš? Že sa časom „opíšu“?
Marek: Presne. Každá pamäťová bunka v SSD vydrží len istý počet zápisov. Ale neboj sa, pre bežného používateľa je táto životnosť taká dlhá, že disk pravdepodobne vymeníš skôr, ako by sa stihol opotrebovať.
Tereza: To je úľava. A ešte je tam nejaký háčik so zápisom, že?
Marek: Áno. SSD sú organizované do stránok a tie do väčších blokov. Zapisovať vieš na prázdne stránky jednotlivo, ale ak chceš nejakú stránku prepísať, musíš načítať celý blok, v pamäti ho zmeniť, starý blok na disku vymazať a až potom zapísať ten nový, upravený.
Tereza: Znie to dosť neefektívne. Ako to riešia?
Marek: Výrobcovia používajú rôzne triky. Napríklad príkaz TRIM, ktorým operačný systém disku povie, ktoré dáta už nie sú potrebné, a disk si ich môže vopred pripraviť na vymazanie.
Tereza: Dobre, takže či už HDD alebo SSD, operačný systém s nimi musí vedieť pracovať. Ako presne ukladá súbor na disk?
Marek: Neukladá ho po jednotlivých bajtoch. Používa takzvané alokačné bloky. To je skupina niekoľkých sektorov a je to najmenšia jednotka, ktorú systém na disk zapisuje alebo z neho číta.
Tereza: A čo sa stane, ak je môj súbor väčší ako jeden takýto blok?
Marek: Systém mu ich pridelí viac. A tu môže nastať problém, ktorému hovoríme fragmentácia.
Tereza: Fragmentácia... to slovo poznám. Znamená to, že je súbor rozkúskovaný po celom disku?
Marek: Presne tak. Predstav si parkovisko. Autá prichádzajú a odchádzajú a po čase ti zostanú len malé voľné medzery. Nové, veľké auto už nezaparkuješ v celku. Musíš ho rozobrať a kúsky dať do voľných medzier.
Tereza: To je skvelá analógia! A potom trvá dlhšie, kým to auto zase poskladám.
Marek: Presne! A to je externá fragmentácia. Spomaľuje to prístup k súborom, hlavne na starých HDD diskoch, kde sa hlava musí stále presúvať.
Tereza: A ako sa to rieši? Defragmentáciou?
Marek: Áno, defragmentácia je proces, ktorý tie rozhádzané kúsky súborov zoberie a poukladá ich pekne za seba. Tým sa disk zrýchli. Na moderných SSD sa to už ale nerobí, tam by to bolo skôr škodlivé.
Tereza: Takže náš disk sa môže časom stať trochu chaotickým. A toto všetko riadi súborový systém, správne? Poďme sa pozrieť bližšie na to, aké typy vlastne poznáme.
Marek: Presne tak. A podobne ako súborový systém riadi súbory, operačný systém má na starosti niečo ešte dôležitejšie – procesy. V podstate každý spustený program je proces.
Tereza: Takže keď mám otvorený prehliadač, textový editor a hrám hudbu, mám spustené tri procesy?
Marek: V zásade áno, aj keď v skutočnosti ich je oveľa viac. Každý proces má svoje unikátne identifikačné číslo, voláme ho PID, a má svoj stav. Ako keby mal status na sociálnej sieti.
Tereza: Aké stavy môže mať? Dúfam, že nie „je to komplikované“.
Marek: To našťastie nie. Je buď pripravený (ready), keď čaká na procesor, bežiaci (running), keď ho práve používa, alebo čakajúci (waiting), keď čaká napríklad na dáta z disku. A samozrejme, na konci je ukončený (terminated).
Tereza: A počula som ešte o „démonoch“. To znie trochu strašidelne.
Marek: Vôbec nie. Démon je len proces, ktorý beží na pozadí a čaká na nejakú udalosť, aby ju obslúžil. Nepotrebuje žiadnu interakciu s tebou. Je to taký tichý sluha systému.
Tereza: Dobre, takže mám v počítači desiatky, možno stovky procesov. Ale mám len jeden procesor, alebo pár jadier. Ako systém rozhodne, ktorý proces pobeží?
Marek: To je skvelá otázka! O to sa stará takzvaný plánovač. Jeho úlohou je spravodlivo prideľovať procesorový čas. Existujú dva hlavné prístupy: nepreemptívny a preemptívny.
Tereza: Okej, to znie technicky. Čo to znamená v ľudskej reči?
Marek: Nepreemptívne plánovanie je veľmi slušné. Proces sa sám vzdá procesora, keď skončí. Pri preemptívnom mu ho môže operačný systém kedykoľvek zobrať, typicky po uplynutí krátkeho časového úseku.
Tereza: Tomu rozumiem. A aké sú najznámejšie algoritmy, ktoré to riadia?
Marek: Najjednoduchší je FCFS – „First Come, First Served“. Kto prv príde, ten prv melie. Je to ako rad v obchode. Potom je tu Round-Robin, kde každý proces dostane malý kúsok času a potom ide na koniec radu. Je to spravodlivejšie.
Tereza: A čo keď nejaký proces potrebuje len úplne máličko času? Nemal by dostať prednosť?
Marek: Presne na to myslí algoritmus SJF – „Shortest Job First“, ktorý uprednostní najkratšiu úlohu. Znie to super, ale má to háčik. Hrozí tu takzvané starnutie. Ak stále prichádzajú nové krátke úlohy, tá dlhá sa nemusí nikdy dostať na rad.
Tereza: Au. To je celkom kruté. Takže moderné systémy používajú niečo lepšie, predpokladám.
Marek: Áno, napríklad CFS v Linuxe sa snaží byť „úplne spravodlivý“ a každému procesu dáva presne stanovené percento výkonu podľa priority.
Tereza: Dobre, plánovanie máme. Ale čo sa stane, keď dva rôzne procesy chcú pracovať s tými istými dátami naraz? Napríklad pristupovať k tomu istému súboru.
Marek: Tam vzniká obrovský priestor na chyby. Predstav si, že ty aj ja chceme naraz upraviť ten istý dokument. Kto uloží zmeny ako prvý? Prepíšu sa tie druhé? Tomuto chaosu sa hovorí časovo závislá chyba alebo „race condition“.
Tereza: A ako sa tomu predchádza?
Marek: Úsek kódu, kde sa pristupuje k zdieľaným dátam, nazývame kritická sekcia. A platí tam prísne pravidlo: vždy tam môže byť naraz len jeden proces. Volá sa to vzájomné vylúčenie.
Tereza: Takže ostatní musia počkať, kým ten jeden neskončí. To ale môže spôsobiť ďalšie problémy, nie? Čo ak sa tam zasekne?
Marek: Presne. A môže nastať aj takzvaná inverzia priorít. To je celkom vtipná situácia. Proces s nízkou prioritou si zamkne nejaký zdroj, ale potom ho predbehne proces so strednou prioritou. A ten s najvyššou prioritou, ktorý čaká na ten zdroj, je zablokovaný a musí čakať na oboch.
Tereza: Takže ten najdôležitejší proces čaká na toho najmenej dôležitého. To je paradox. Takže správa procesov je vlastne neustále žonglovanie a riešenie kompromisov.
Marek: Dokonale si to zhrnula. Je to o efektivite, spravodlivosti a predchádzaní chaosu. A toto všetko sa deje pod kapotou, kým my si len klikáme myšou.
Tereza: Takže pod kapotou sa deje chaos. A aby sa z toho nestal totálny digitálny armagedon, potrebujeme... čo presne? Nejaké pravidlá?
Marek: Presne tak. Hovoríme tomu synchronizácia. Musíme zabezpečiť, aby procesy spolupracovali a neprekážali si. A na to máme nástroje.
Tereza: Aké napríklad?
Marek: Základným nástrojom je semafor. Predstav si ho ako celočíselnú premennú, ktorá riadi prístup. Keď je jej hodnota väčšia ako nula, semafor je odomknutý.
Tereza: Ako semafor na križovatke? Zelená, červená?
Marek: Skoro. Skôr ako počítadlo voľných miest na parkovisku. Ak je číslo kladné, môžeš vojsť. Ak je nula alebo záporné, musíš čakať. A toto čakanie nie je aktívne, proces proste zaspí a neplytvá výkonom.
Tereza: A čo je potom mutex? To znie ako nejaký superhrdina.
Marek: Je to v podstate binárny semafor. Parkovisko s jediným miestom. Buď je voľné, alebo obsadené. A odomknúť ho môže len ten proces, ktorý ho zamkol. Je to taký digitálny VIP klub.
Tereza: S jedným členom naraz. Rozumiem.
Marek: Presne. Ale čo sa stane, keď sa dva procesy navzájom zablokujú? Jeden čaká na druhého a ten druhý na prvého.
Tereza: To znie ako... deadlock. Uviaznutie.
Marek: Trefa do čierneho. Deadlock je situácia, keď skupina procesov večne čaká, lebo každý drží zdroj, ktorý ten druhý potrebuje. Je to ako dvaja ľudia, ktorí sa stretnú v úzkych dverách a ani jeden nechce ustúpiť.
Tereza: To poznám. Takže ako takýto digitálny pat vznikne?
Marek: Musia byť splnené štyri podmienky naraz. Voláme ich Coffmanove podmienky. Po prvé, vzájomné vylúčenie – zdroj môže používať len jeden proces v danom momente. To sú tie úzke dvere.
Tereza: Jasné.
Marek: Po druhé, drž a čakaj. Proces už drží jeden zdroj a žiada o ďalší, ktorý má niekto iný.
Tereza: Čiže držím kľúč od auta, ale čakám, kým mi dáš benzín, ktorý držíš ty.
Marek: Dokonalé prirovnanie. Po tretie, zdroje sa nedajú násilne odobrať. A po štvrté, vznikne kruhové čakanie. Proces A čaká na B, B čaká na C, a C... čaká na A.
Tereza: Uf, to je zamotané. Ale hlavná otázka je, ako sa tomu vyhnúť? Lebo zaseknutý počítač nikto nechce.
Marek: Správne. Prevencia je kľúčová. Stačí narušiť jednu z tých štyroch podmienok. Napríklad donútiť proces, aby si vyžiadal všetky zdroje naraz, alebo ich odoberal v presne určenom poradí. Tým rozbijeme ten začarovaný kruh.
Tereza: Takže synchronizácia nie je len o spolupráci, ale aj o predchádzaní digitálnym dopravným zápcham. Fascinujúce. Okrem semaforov ale existujú aj sofistikovanejšie nástroje, nie? Napríklad monitory.
Marek: Presne tak. Monitory sú v podstate takí inteligentní manažéri zdrojov. Ale keď už hovoríme o zdrojoch a procesoch, spomenul som si na jeden klasický chyták z programovania v jazyku C. Je to perfektný príklad, ako sa veci môžu skomplikovať.
Tereza: Chyták? Tak sem s ním! Naši poslucháči milujú výzvy.
Marek: Dobre, predstav si program. Otvorí súbor s názvom /tmp/x. Potom použije funkciu fork(), ktorá vytvorí presnú kópiu seba samého. Zrazu máme dva procesy – rodičovský a detský.
Tereza: A obidva bežia súčasne? Ako dvojičky?
Marek: Presne tak. A teraz to najdôležitejšie: keďže súbor bol otvorený *pred* rozdelením, oba procesy zdieľajú prístup k tomu istému súboru. Nie sú to dva rôzne súbory, ale jeden a ten istý.
Tereza: Aha, takže ak jeden niečo zapíše, druhý to uvidí?
Marek: Ešte lepšie. Oni pokračujú tam, kde ten druhý skončil. Povedzme, že rodičovský proces zapíše do súboru číslicu '1'. Hneď po ňom detský proces zapíše číslicu '2'.
Tereza: Takže v súbore bude buď "12" alebo "21", podľa toho, kto sa dostane na rad skôr?
Marek: Presne! Na poradí v tomto prípade nezáleží. Dôležité je, že sa neprepíšu navzájom. No a na konci program načíta obsah toho súboru a sčíta číslice v ňom. Aký bude teda finálny súčet?
Tereza: Počkaj... ak sú v súbore číslice 1 a 2... tak súčet musí byť predsa 3! Je to také jednoduché?
Marek: Je! Správna odpoveď je 3. Celý trik je v pochopení, ako fork() pracuje so zdieľanými zdrojmi, v tomto prípade s otvoreným súborom. A práve toto sú tie detaily, ktoré odlišujú dobrého programátora od skvelého.
Tereza: Fantastické. Takže aj zdanlivo jednoduchý kód môže skrývať hĺbku. To ma privádza k ďalšej téme...
Marek: Presne tak. A keď hovoríme o hĺbke, nič nejde hlbšie ako správa pamäti. To je strojovňa celého systému. A práve tu sa ukáže, či naozaj rozumieš tomu, ako počítač funguje.
Tereza: Dobre, tak poďme do strojovne! Čo je prvá vec, ktorú by sme mali vedieť?
Marek: Začnime s niečím, čo sa volá TLB – Translation Lookaside Buffer. Je to taká malá, super-rýchla keška, ktorá si pamätá preklady virtuálnych adries na fyzické. Šetrí to obrovské množstvo času.
Tereza: Znie to ako užitočný pomocník. Kde je háčik?
Marek: Háčik je v tom, keď tam ten preklad nie je. Tomu sa hovorí TLB miss. A teraz otázka za milión: predstav si inštrukciu, ktorá má 4 bajty a číta 4 bajty z pamäte. Koľko TLB miss môže maximálne nastať?
Tereza: Uhm... Dva? Jeden pre inštrukciu, jeden pre dáta?
Marek: Blízko, ale nie celkom. Trik je v tom, že aj inštrukcia, aj dáta môžu byť nešťastne uložené presne na rozhraní dvoch stránok. Takže na načítanie 4-bajtovej inštrukcie potrebuješ preklady pre dve stránky. A to isté platí pre dáta. Takže... štyri!
Tereza: Štyri TLB miss pre jednu jedinú inštrukciu! To je dosť neefektívne.
Marek: Presne. Ale čo ak by ďalšia inštrukcia nasledovala hneď za touto? Bez skoku, proste ďalšia v poradí.
Tereza: Tak potom... by preklad pre tú prvú časť inštrukcie už v TLB bol, správne? Takže by sme ušetrili jeden miss. Maximum by boli tri.
Marek: Bingo! A teraz to skomplikujme. Čo ak tá inštrukcia nečíta dáta, ale presúva ich? Zdrojová adresa a cieľová adresa.
Tereza: Dobre, takže máme až dva missy pre inštrukciu, dva pre zdrojové dáta... a potom ďalšie dva pre cieľové dáta, ak sú aj tie na rozhraní stránok? To je šesť?
Marek: Vidíš, už v tom lietaš! Presne tak, až šesť. Je to extrémny prípad, ale stať sa môže.
Tereza: Dobre, TLB miss znamená, že musíme ísť hľadať preklad do tabuľky stránok, ktorá je v RAM. To ma privádza k ďalšej otázke. Koľko prístupov do RAM to celé môže stáť?
Marek: Výborná nadväznosť. Povedzme, že máme 4-úrovňovú tabuľku stránok. Každá úroveň znamená jeden prístup do pamäte. Takže pre jeden preklad adresy, ktorý nie je v TLB, potrebujeme štyri prístupy do RAM.
Tereza: Počkaj... Ak máme v najhoršom prípade 4 adresy na preklad, ako v našom prvom príklade, a každá stojí 4 prístupy... to je 16 prístupov do RAM len na preklady? To je šialené!
Marek: Je. A k tomu pripočítaj samotné čítanie inštrukcie a dát, čo sú ďalšie štyri prístupy. Takže sme na dvadsiatich prístupoch do RAM pre jednu inštrukciu.
Tereza: Dvadsať! To je viac krokov, než si urobiť rannú kávu.
Marek: A ak by sme tie dáta presúvali, ako v tom ďalšom príklade? Potrebujeme preložiť až 6 adries. To je 6 krát 4, plus 6 prístupov na čítanie a zápis... celkovo tridsať!
Tereza: Dobre, a čo ak tie stránky, alebo dokonca časti tabuľky stránok, ani nie sú v RAM? Čo sú výpadky stránok?
Marek: To je tá najhoršia nočná mora. Výpadok stránky znamená, že systém musí načítať dáta z disku, čo je extrémne pomalé. Predstav si, že presúvame 16 kilobajtov dát. To sú minimálne 4 stránky.
Tereza: A keď sa všetko pokazí, tak zdrojové dáta, cieľové dáta, inštrukcia a ešte aj všetky úrovne tabuliek stránok môžu spôsobiť výpadok?
Marek: Presne. Ak to spočítame pre 4-úrovňovú tabuľku, môžeme sa dostať až k tridsiatim výpadkom stránok. Je to teoretické maximum, ale ukazuje to, aké dôležité je správne zarovnanie dát a dobrý návrh algoritmu.
Tereza: Páni. Takže správne chápanie toho, ako funguje pamäť, stránkovanie a TLB, môže znamenať rozdiel medzi bleskovým a slimačím kódom.
Marek: Presne tak. Toto sú tie veci, ktoré sa nedejú často, ale keď sa stanú, dokážu celý systém spomaliť na nepoznanie. Kľúčový poznatok je: vždy, keď je to možné, snažte sa pracovať s dátami tak, aby neprekračovali hranice stránok.
Tereza: Fantastické zhrnutie. Marek, ďakujem ti za ďalšiu neuveriteľne poučnú hodinu. Cítim, že môj mozog je zase o niečo väčší.
Marek: Rado sa stalo, Tereza. A ďakujeme aj vám, naši poslucháči. Dúfame, že ste si to užili a niečo nové sa naučili.
Tereza: Presne tak. Počujeme sa opäť nabudúce v Studyfi Podcaste. Majte sa krásne!