Otázky ke zkoušce Programování v UNIXu

Vývojové nástroje

  1. Popište činnost kompilátoru jazyka C a linkeru.
  2. Vysvětlete princip utility make a napište příklad jednoduchého makefile pro překlad a slinkování programu v C.
  3. Jaké jsou výhody a nevýhody použití dynamických knihoven ? Napište sekvenci příkazů pro vytvoření dynamické knihovny a programu který na ní závisí (ideálně na Linuxu a Solarisu).
  4. Co ovlivňují proměnné LD_PRELOAD a LD_LIBRARY_PATH ? Proč není dobrý nápad používat proměnnou LD_LIBRARY_PATH pro něco jiného než ladění programů ?

Jádro a C API UNIXu

  1. Vysvětlete význam parametrů funkce main() a proměnné environ. Jak se zpracovávají argumenty programu pomocí funkce getopt() ?
  2. Vysvětlete význam pojmů proces, vlákno (thread), program. Čím se liší proces a vlákno?
  3. Vysvětlete pojmy knihovní funkce a systémové volání. Popište konvenci, podle které systémová volání a knihovní funkce oznamují úspěšné ukončení nebo chybu.
  4. Co obsahují soubory /etc/passwd a /etc/group ? Kdy a jak používá Unix informace z těchto souborů.
  5. Jak se používá identifikace vlastníka a skupiny pro testování přístupových práv ? Jaký je rozdíl mezi reálným a efektivním vlastníkem procesu ?

Systém souborů

  1. Jaké objekty jsou v UNIXu přístupné pomocí rozhraní systému souborů ? Jaký je rozdíl mezi znakovými a blokovými zařízeními ?
  2. Popište strukturu svazku typu s5 a jeho vylepšení (ufs).
  3. Vysvětlete princip navigace ve struktuře adresářů, tj. jak jádro najde podle cesty k souboru příslušné datové bloky. Vysvětlete rozdíl mezi pevnými (hardlink) a symbolickými (symlink) odkazy na soubory.
  4. Jaká jsou přístupová práva k souborům? Co je to propůjčování práv (set UID) ?
  5. Jak procesy přistupují k otevřeným souborům? Jak se liší deskriptor a otevření souboru ?
  6. Co je to virtual file system? K čemu slouží a jaký je princip jeho fungování ?
  7. Jaký je vztah diskového oddílu a svazku ? Jak probíhá vytvoření, kontrola konzistence, připojení a odpojení svazku ?

Procesy a roury

  1. Popište paměťový prostor procesu v uživatelském režimu a v režimu jádra.
  2. Nakreslete a popište stavový diagram procesu.
  3. Popište základy mechanismu plánování procesů. Jaké jsou prioritní třídy ?
  4. Popište mechanismus mapování souborů do paměti. Popište, jak lze za běhu programu získat přístup k proměnným a funkcím definovaným v nějaké dynamické sdílené knihovně. Jak spolu tyto dvě věci souvisí ?

Signály

  1. Co jsou to signály ? Jak může být pro proces vygenerován signál ? Jaký je rozdíl mezi posláním signálu procesu a vláknu ?
  2. Jaké jsou možnosti ošetření signálů? Jak se nastavuje ošetření signálů (handlery, blokování) pro proces a pro vlákna ?
  3. Jaká pravidla existují pro psaní signal handlerů ? Jakým způsobem se vyrovnat s omezeními při jejich implementaci ?

Vlákna

  1. Co je to vlákno, jak se liší od procesu? Které atributy jsou společné pro proces, které jsou privátní pro každé vlákno ? Jak je možné vytvořit globální proměnnou privátní pro jedno vlákno ?
  2. Popište postup při vytvoření a zrušení vlákna. Jak fungují destruktory klíčovaných hodnot a zásobník úklidových handlerů ?
  3. Uveďte nástroje pro synchronizaci vláken. Popište způsob použití podmínkových proměnných, důvody proč se používají právě daným způsobem a co by se mohlo stát kdyby tomu bylo jinak.
  4. Jakým způsobem lze vyřešit synchronizaci aritmetické operace sčítání nebo odečítání mezi vlákny a uveďte jejich výhody a nevýhody.
  5. Co se stane když jedno vlákno zavolá fork() ? Jaký problém při tom může vzniknout a jak ho lze řešit ?

Synchronizace a zamykání

  1. Vysvětlete vznik konfliktu při přístupu ke sdíleným datům a jeho řešení pomocí zamykání. Jak může vzniknout deadlock? Popište zamykání souborů pomocí fcntl().
  2. Vysvětlete zamykání pomocí lock souborů.

IPC

  1. Popište semafory, implementované v UNIX System V IPC. Jakými příkazy lze zobrazit jejich výpis a stav ?

Sítě

  1. Popište činnost serveru a klienta (posloupnost systémových volání) pro spojované síťové služby.
  2. Popište činnost serveru a klienta (posloupnost systémových volání) pro nespojované síťové služby.
  3. Co je to soket? Jaké jsou varianty adresace soketů (v rámci jednoho stroje a po síti) ? Jaké funkce slouží pro převod mezi číselnými a symbolickými jmény protokolů, portů a IP adres? Proč se používají funkce pro konverzi mezi lokálním a síťovým pořadím bajtů?
  4. Popište standardní funkce pro převod jména na adresu a naopak a způsob jejich použití pro klient a server. Jaké mají výhody oproti nestandardním funkcím ?
  5. Popište varianty sekvenční a paralelní obsluhy klientů TCP serveru.
  6. Jak funguje inetd? Jak funguje obsluha více klientů UDP serveru?
  7. Jak lze čekat na příchod dat z několika deskriptorů souborů zároveň? Jak byste tyto funkce použili při implementaci síťového serveru, který obsluhuje několik klientů zároveň jedním procesem bez použití vláken? Jaké jsou rozdíly mezi funkcemi, které toto umožňují ?


Poslední změna: