Operační systémy (IOS) — zhodnocení
By Bumerang
Pokud se zeptáte nějakého staršího spolužáka na to, co se mu vybaví, když se řekne druhý semestr, tak vám valná většina řekne stejnou odpověď – IOS. Nejobávanější, ale také nejdůležitější předmět v tomto semestru. Pro leckoho je IOS také výstupním lístkem z naší fakulty.
Probírají se postupně základní principy operačních systémů, přičemž jsou prezentovány na systému Unix. Občas sice padla zmínka o Windows, ale pouze ve stylu: „No a Windows se to dělá takhle a takhle.“ Dozvíte se, jak funguje správa souborů (jejich ukládání, ukládání jejich metadat atp.), dále pak jak funguje správa paměti (jak se adresuje), různé plánovací algoritmy a do čtveřice i něco o synchronizaci procesů. Samozřejmě se toho dozvíte o dost víc, ale tohle jsou hlavní body
Když říkám dozvíte, tak si nepředstavujte, že vám ke každému systému/principu řeknou jednu větu a půjde se dál. Ne, takto to v tomto předmětu opravdu nechodí. To, co uvidíte na slidech, není ani zdaleka všechno, co vám bude odpřednášeno. Přednášející prof. Ing. Tomáš Vojnar, Ph.D. je skutečně odborník a když ho posloucháte, máte pocit, že on je jeden z těch, kteří operační systémy vyvíjejí (i když ve skutečnosti tomu asi tak není) — působí silně erudovaným dojmem.
Přednášky
Je také dobrým přednášejícím, byť by mi vyhovovalo o trochu rychlejší tempo. Požadavek na rychlejší tempo ovšem neplatí, když něco na přednášce píše do příkazového řádku či ViMu — člověk měl skoro pocit, že na ty příkazy má udělaná makra, protože vždycky vystřelil z prstů nějakou kouzelnou kombinaci rychleji než Harry Callahan. Na dvě nebo tři přednášky jsme také měli Dr. Agenta Smrčku, o jehož „specifikách“ jsem psal již v hodnocení Základů programování z minulého semestru. Jeho tempo je optimální, ovšem dokážu sledovat tok jeho myšlenek maximálně 40 minut, pak už člověk potřebuje přestávku a trošku se „restartovat“. Pokud by nedělal v tříhodinovém bloku přednášek přestávky, asi by se razantně zvedla poptávka po amfetaminech (potom by člověk možná stačil).
Jak jsem již říkal, informace uvedené na slidech nejsou zdaleka všechny, které se na přednášce dozvíte. Ve skutečnosti je to naopak — hlavní část tvoří věci, které budou pouze řečeny — samotné pojmy na slidech slouží spíše k podpoře přednášejícího, aby na něco nezapomněl. Často jsme za tři hodiny probrali jen 18 slidů, někdy ještě méně. Rozhodně choďte na přednášky, to je v tomto předmětu kritické — jinak si budete muset spoustu pojmů zmíněných na slidech (bez vysvětlení) pracně dohledávat sami. A poté se ještě dozvíte, že ten pojem se může vyskytnout na zkoušce a optimální vysvětlení k němu je asi tak 5-6 vět. A těch 5-6 vět, které byste o něm měli znát, na těch slidech nenajdete.
Prof. Vojnar je také s prominutím geek už od pohledu. A když se k tomu přidá jeho vyjadřování a formulace (naprosto exaktní, jak se na geeka sluší), máte zcela jasno. A formulací mám na mysli například použití „lidská neuronová síť“ místo „mozek/mysl“ a další podobné perly. Co je další věc je to, že lidé vzdělaní (nadaní) v informatice mají problémy se skloňováním — nebo mi to tak přijde. V prvním semestru to byl Agent Smrčka, teď prof. Vojnar. Zřejmě pokud tak moc posilujete a zatěžujete logické uvažování, cit pro jazyk se vám vytratí z mozku lidské neuronové sítě. Podstoupíte ten risk?
V předmětu jsou dva projekty, jejichž společný bodový zisk rozhoduje o vašem zápočtu. Z maximálních 30b musíte získat alespoň 15. To se pro mnoho lidí jevilo jako obtížný úkol, nakonec to ale vůbec těžké nebylo — vždyť zápočet získalo 79,68% studentů.
První projekt
První projekt byl o napsání skriptu v Bashi, který měl provádět nejrůznější operace nad zadaným adresářem. Například jste zadali relativní cestu k aktuálnímu adresáři a skript měl projít a například spustit všechny spustitelné soubory, které v daném adresáři byly, zachytit jejich výstupy a tyto výstupy porovnat. Ve zkratce byl tento skript určen pro testování spustitelných souborů. Jedním přepínačem jste si vyčistili všechny „nepotřebné“ soubory, druhým jste spustili program, zachytili výstupy; dalším přepínačem jste pak zachycené výstupy označili jako referenční a dalším přepínačem jste pak spustili opět soubory a porovnali nové výstupy s těmi referenčními — a vypsali jejich případné odlišnosti.
Tento projekt tak byl velice užitečný, neboť ho (či jemu podobný) můžete použít při svém programování/testování/odlaďování. Úžasně to totiž urychlí vývoj, než když každou novou binárku spouštíte a okem hledáte, jestli je výstup v pořádku. Nedejbože, když musíte na něco klikat.
Po jeho zadání jsme však všichni shodně vyvalili oči — na první pohled to vypadalo pravdu složitě, ale naštěstí to byl jen klam. Pokud jste se nenechali odradit a začali si hledat postupy, jak co udělat (dle klasického klíče: „bash co_chcete_dělat example“), velice rychle jste zjistili, že vlastně celý projekt je o pár základních konstrukcích — vypsat všechny soubory, které splňují danou podmínku (regulární výraz), poté tyto soubory jeden po druhém zpracovat (cyklus) a provést nějakou akci. Pokud jste si tohle procvičili (záležitost na dopoledne), mohli jste pak zbytek času věnovat různým záludnějším věcem. Nejzáludnější bylo však to, že skript musel běžet i na FreeBSD (server Eva). A proč to byl problém? No řekněme, že na FreeBSD (jméno Eva bylo dva dny před odevzdáním zřejmě nejnenáviděnějším ženským jménem) některé věci fungují občas trochu jinak.
Dále ještě malé upozornění — při opravování se u jednoho opravujícího stalo, že mu jeden studentský skript kompletně rozbil testovací adresářový strom a všechny následující studentské skripty pak byly vypuštěny na nevalidní strom, tudíž dávaly jiné než očekávané výsledky, z čehož plyne co, Halík? Míň bodů, kurva, míň bodů! Proto se nebojte chodit na reklamace, když jste přesvědčení o tom, že váš skript funguje správně. Sice se většinou ukáže, že nefunguje, ale jak vidno, chyba se může stát i na druhé straně.
Druhý projekt
Druhý projekt byl na synchronizaci procesů v jazyce C. Zadání se již několik let tradičně točí (večeřící filozofové, spící holič, čtenáři a písaři) — na nás tento rok připadlo to dle mého nejjednodušší — čtenáři a písaři. Jeho stručný popis je zde. My jsme implementovali variantu s preferencí písařů. Projekt to byl veskrze zajímavý, hlavně jsme se naučili pracovat se sdílenou pamětí a semafory. Nebylo to vůbec obtížné, ale někteří natolik odmítali přemýšlet, že celý program přepsali z pseudokódu z anglické Wikipedie.
Co mi ale trochu vadilo bylo to, že nám nikdo vlastně pořádně neřekl, jak máme uklízet sdílenou paměť (v rodiči a potomkovi). Já jsem tak postupoval dle manuálových stránek, což se mi ovšem nevyplatilo, neboť mi za špatné uklízení paměti v jednom testu sebrali jeden bod. Což je trochu zvláštní, při mých testech vše běhalo v pořádku, navíc i další lidé uvolňovali paměť stejně jako já, jim však body zůstaly. Navíc se vyskytly i další „oběti“ toho, že uklízely dle všeho „správně“, no stejně jim bylo strženo. Je ovšem klidně možné, že jsme měli chybu v jiné části programu a testovací skript nebyl s to tuto chybu dostatečně jemně rozlišit, tak spadla pod chybu s pamětí, byť třeba tkvěla v něčem jiném.
Během semestru se také konaly dvě demonstrační cvičení, kde prof. Vojnar ukázkově řešil nejrůznější příklady, které by se mohly (a všechny se tam objevily) objevit na zkoušce. Tato cvičení byla pravděpodobně novinkou, ale dle reakcí se budou konat i příští roky. Proto si dovolím dát jednu radu — jděte na ně, případně si z nich prohlédněte záznamy — dají vám opravdu hodně.
Zkouška
Zkouška byla tou „nejmasitější“ části tohoto předmětu — vždyť byla za 70b! Propaganda udělala své a tak před ní měli všichni patřičný respekt. Zajímavé je, že spousta lidí to šla na první termín opravdu jenom „zkusit“ (“zkouška“ je přece od slova „zkusit“, ne?) bez nějaké vážnější přípravy. Nedělejte to, plýtvat si drahocenný jeden termín jen kvůli „osahání terénu“ by se vám nemuselo vyplatit.
Na zkoušce se objevily přesně ty věci, o kterých se mluvilo. Pár příkladů, jako třeba určit vybavovací dobu z paměti či počet TLB miss, poté psaní pseudokódů na synchronizaci a na závěr dvě královské otázky, kde jste měli napsat úplně všechno, co o daném tématu víte. Já jsem se přípravě věnoval asi dva dny, kdy jsem si pročítal skripta a vlastní poznámky (nejsem zrovna fanoušek dívání se na záznamy) a měl jsem ze své přípravy docela dobrý pocit — na zkoušce jsem si to pak pokazil sám, když jsem se zamotal do jednoho pseudokódu a také když jsem při učení přeskočil „graf alokace zdrojů“, protože „tenhle obrázek vypadá až moc odborně, to je tady určitě jen pro představu“. Ne, nebylo. Takže jedna rada pro vás — nic nepřeskakujte, snažte se všechno pořádně pochopit a naučte se deadlock.
Ještě je třeba říci, že během semestru nás prof. Vojnar na přednáškách pravidelně upozorňoval, ať se v dostatečném předstihu začneme věnovat projektům a přípravě na zkoušku, protože to opravdu není radno podcenit. Pokud tak někdo bude tvrdit, že obtížnost zkoušky/projektů byla překvapivá a že se to nedalo čekat, tak je to jenom obyčejný troll nebo je mimořádně zabedněný. Obtížnost byla hlasitě deklarována již dlouho dopředu a to samotným garantem předmět — a není radno brát rady od garanta na lehnou váhu.
U tohoto předmětu byly (jako u jednoho z mála) zveřejňovány záznamy — což je určitě pozitivní, neboť je hodně lidí používá pro zopakování před zkouškou (a někteří také k tomu, aby je 2,2x zrychlené dostali do hlavy). Ale právě u takto složitého předmětu, kdy je navíc většina informací řečena, je velice příjemné mít možnost se na přednášku znovu podívat a třeba si jí několikrát přehrát, než to konečně pochopíte.
Závěrem k IOS — na každý projekt si nechte alespoň týden, na zkoušku se připravte zodpovědně (ať už to podle vás znamená cokoliv) a příliš se nebojte.