VSB-TUO

poli homepage



Do not adjust to the system. Adjust the system!

OSY - požadavky pro absolvování předmětu

Prezenční forma studia - zimní semestr 2023/24

Za zkoušku a zápočet může každý student obdržet maximálně 100 bodů. Ty budou rozděleny na 45 bodů za zápočet a 55 bodů za zkoušku.

Zkouška

Zkouška bude složena ze dvou částí: programování a teorie. Za programování bude možno získat 25 bodů (min. 13) a za teoretické znalosti 30 bodů (min. 15.).

Programování bude na učebně, na školním počítači a bude k dispozici jen OS Linux, stejný jako bude během semestru na učebnách.
Nebude k dispozici internet a ani domovský uživatelský adresář. Dostupný bude jen archiv ukázkových programů, manuálové stránky a dokumentace C++ Reference. Na programování bude čas 100 minut.
Programy budou zaměřeny na využití procesů, vláken, souborů, rour, soketů, semaforů a sdílené paměti.
Hodnoceno bude nejen správné fungování programu, ale i způsob řešení.

Teoretická část zkoušky bude ústní formou u tabule, kdy bude potřeba zodpovědět cca 3 otázky a délka této zkoušky bude cca 20 minut. Pořadí zkoušení bude podle pořadí úspěšného odevzdání programů.

Pro zkušku budou vypány 3 termíny.

Obsah teoretické části viz níže.

Zápočet

Pro zápočet je nutno získat z 45 bodů (min. 23).

Cvičení budou rozdělena do třech bloků:

  1. Soubory a procesy - 5 cvičení hodnoceno 15 body (min. 8).
  2. IPC: meziprocesní komunikace - 5 cvičení hodnoceno 20 body (min. 10).
  3. Free RTOS - 3 cvičení hodnoceny 10 body (min. 5).

Náhradní cvičení budou řešena individuálně a to jen v opodstatněných případech, např. nemoc, vyšší moc a pod.

Opravy cvičení nebudou. Během semestru bude celkové bodové hodnocení cvičení rozšířeno cca o 15% a je tak možno získat dostatek bodů.

Obsah teoretické části zkoušky

  1. Kapitola
    • 1.1 Co je operační systém.
    • Z kapitoly 1.2 pojmy: dávka, dávkový systém, multiprogramování, spooling, sdílení času.
    • 1.3 Koncepce OS, procesy a soubory.
    • 1.4 Systémová volání. Rozšíření o skupiny funkcí ze cvičení.
  2. Kapitola
    • 2.1, 2.1.1 Úvod do procesů, model procesu, stavy procesu.
    • 2.1.2 Implementace procesů, vlákna (pouze implementovaná systémem).
    • 2.2, 2.2.1, 2.2.2, IPC, souběh (race condition), kritická sekce, podmínky dobrého řešení.
    • 2.2.3, Vzájemné vyloučení: zákaz přerušení, zamykací proměnná, TLS.
    • 2.2.4, 2.2.5, Uspání a probuzení, semafor, monitor, fronta zpráv.
    • 2.3 Klasické IPC problémy: výroba a spotřeba, spící holič, večeřící filozofové, čtenáři a spisovatelé.
    • 2.4 Plánování procesů.
  3. Kapitola
    • 3.1, 3.1.1 Principy V/V
    • 3.2 Principy V/V, rozdělení do vrstev, úkoly jednotlivých vrstev.
    • 3.3 Deadlock, co to je, jak může vzniknout, podmínky zablokování, dá se řešit?
  4. Kapitola
    • 4.2.1, 4.2.2, Implementace správy paměti.
    • 4.3 Virtuální paměť, stránkování, jedno a víceúrovňové tabulky stránek.
    • 4.4.x Výměna stránek.
    • 4.6 Segmentace, účel, návaznost na virtuální paměť.

Projděte si následujáci desatero a pokud více bodům nerozumíte, nemá smysl se hlásit k praktické části zkoušky. Přitom v mnoha případech nejde o neznalost témat předmětu OSY.

  1. Pole znaků char znaky[ N ]; lze indexovat: znaky[ i ]. Pointer char *odkaz; není inicializovaný.
  2. Rozdělit proud dat na jednotlivé řádky patří mezi základní programátorské dovednosti. Stejně tak i rozdělit řetězec/řádek na slova.
  3. Funkce *printf a *scanf představují v programu užitečný nástroj. Funkce str*, např. strcpy, strcat, strstr, strtok patří mezi základní funkce pro práci s řetězci a je vhodné si je vyzkoušet už před zkouškou. Pokud ovšem nepreferujete použití třídy string.
  4. Jak předat data do vlákna není tajemství, které se dědí z generace na generaci jen mezi členy zednářské lóže. Po funkci fork() je nutno vědět, který proces je rodič a který potomek. A oba tyto procesy mají povinnost zavřít ty souborové deskriptory, které nebudou dále používat.
  5. Pro správné používání semaforu je nutné ho i správně inicializovat. Jen použití funkce sem_open na to často nestačí.
  6. Po volání funkce ret = read( fd, buf, sizeof( buf ) ); je počet načtených bajtů návratová hodnota, pokud je to číslo větší než 0. Pokud jsou načtená data znaky, není buf korektní řetězec, který lze použít ve funkcích str*, *printf a pod., dokud nejsou načtené znaky ukončeny ukončovacím znakem řetězce '\0'.
  7. Použít write( fd, buf, sizeof( buf ) ) není ve většině případů dobrý nápad.
  8. Zkouška není vhodný čas pro seznamování se s příklady na githubu, ale čas použít je.
  9. Objevit příkaz man až u zkoušky, je pozdě.
  10. Program strace a gdb jsou užitečné nástroje, které často a rychle pomohou najít chybu.

Ukázka zadání z předchozích let. Soketový server vždy využívá procesy nebo vlákna.

  1. Síťový semafor. Server si vytvoří semafor a od klienta přijímá příkazy "UP" a "DOWN" a odpovídá na ně "UP-OK" nebo "DOWN-OK".
  2. Server hraje simultánku se třemi klienty. Klienti se připojí a posílají na server např. jednoduché matematické příklady: "1+3", "38*22", ... a sever vždy odpoví jednomu klientu na 10 dotazů a pak se věnuje dalšímu. Přepínání pomocí 3 semaforů.
  3. Internetový prohlížeč zašle na sever příkaz: "ls -la /etc" ve tvaru "http://localhost:port/ls*-la*/etc", kde "*" je oddělovač. Server přijme request: "GET /ls*-la*/etc HTTP/1.1" a je potřeba text mezi GET a HTTP interpretovat jako příkaz s parametry, provést v potomkovi pomocí exec a výstup přesměrovat do soketu. Semafor hlídá, aby se prováděl v jeden okamžik jen jediný příkaz. Příklad HTTP Respose hlavičky bude v zadání. Příklad najdete ve svém prohlížeči v "develop tools".
  4. Remote shell. Podobně jako předchozí příklad, jen příkaz bude zadán z textového klienta, na serveru interpretován a výstup přesměrován do soketu. Přijatá data klient zobrazí i uloží do souboru.
  5. Klient otevře soubor, zašle na sever jeho délku, server příjem potvrdí a klient odešle celý soubor. Server data přijme do bufferu známé délky a pak odešle zpět s očíslovanými řádky. Klient data přijme a uloží. Posílaný soubor musí být minimálně zdrojový kód serveru. Pomocí semaforu se hlídá, aby server v jednom okamžiku přijímal a zpracovával pouze jeden soubor.
  6. Piškvorky. Server přijme spojení se dvě klienty, ostatní odmítá. Vytvoří ve sdílené paměti hrací pole a klienti zasílají své tahy ve tvaru "Z-C\n", jako Znak a Číslo. Server posílá klientům zpět stav hracího pole. Střídání klientů řeší dvojice semaforů.
  7. Chat. Soketový server s vlákny bude pracovat jako chat pro více klientů. Seznam připojených klientů bude v poli, nepřipojení klienti jsou -1 a práce s polem bude hlídaná semaforem.
  8. Soketový server slouží jako zdroj obrázku pro HTTP klienta. Na serveru je připraven obrázek ve velikosti 100/80/60/40/20% jako soubory "obrazek-40.png" a pod. Prohlížeč zašle na sever požadavek "http://localhost:port/pic-obrazek-PP" a server obdrží request "GET /pic-obrazek-PP HTTP/1.0", kde PP je číslo od 0 do 100%. Server vybere obrázek v nejbližší velikosti a pošle zpět pomocí přesměrování příkazu "cat obrazek-pp.png". Příklad HTTP Respose hlavičky bude v zadání. Příklad najdete ve svém prohlížeči v "develop tools".


Design by poli 2021