Programování v Unixu (SWI015p1a)

MFF UK, zimní semestr 2006/2007

News

Osnova přednášky

Zde je osnova loňské přednášky. Letos to bude velmi podobné. Čísla slajdů nejsou správná, protože texty průběžně upravuji a budu to přednášet po jiných částech.

Materiály k přednášce

Live CD

Pro rozumné vyzkoušení některých systémových volání i dalších věcí je vhodné být root. Pokud nechcete nebo nemáte možnost si nějaký systém nainstalovat doma a nemáte rootovské konto jinde, můžete pro začátek postačit některá z live distribucí, kterou pouze vypálíte na CD a nabootujete, aniž byste museli cokoli změnit na svém počítači (to může být vhodné i pro testování zápočtových programů na více systémech). Doporučuju například distribuci FreeBSD, která se nazývá FreeSBIE a je možné ji dokonce i na disk nainstalovat.

Chcete-li Live CD pro Solaris, můžete použít například BeleniX, který je založen na OpenSolarisu, což je víceméně vývojová větev Solarisu. Asi nebudete mít problém nalézt Live CD pro Linux. Pro OpenBSD můžete použít OliveBSD.

Zkoušky

Ke zkoušce je potřeba zápočet, včetně předtermínů.

Termíny

Termíny budou ve školním informačním systému. Pravděpodobně to bude stejné jako v loňském roce, tj. termíny budou vždy v pátek odpoledne cca od 14h. Budou 1-2 předtermíny, jeden bych podle zájmu udělal těsně před koncem roku, možná až po Vánocích, druhý pak během prvních dvou týdnů po Novém roce. O zkouškovém pak bude každý týden jeden termín, pravděpodobně pro 20 lidí v labu SU2 a jeden, možná dva termíny budou ještě v začátku letního semestru. Následně bude každých cca 6-8 týdnů jeden termín, až do září. Tam se budu snažit udělat termíny dva, pokud to budu stíhat, každopadně ten jediný nebo ten druhý bude někdy v druhé polovině září.

Nástroje

Student by měl být schopný odladit svůj program pouze za použití terminálů, programových nástrojů spouštěných z příkazové řádky (gcc, make, ld, ...) a editoru vim (vi). To jsou znalosti z prvního ročníku a z této přednášky.

To, že v den zkoušky v labu zrovna nefunguje vaše oblíbené integrované vývojové prostředí a vy neumíte pracovat v ničem jiném, není můj problém.

Pravidla

Zkouška má písemnou a ústní část. Písemná část zkoušky trvá 120 minut a jejím obsahem je napsání krátkého programu používajícího služby UNIXu. Písemka se píše u počítače, vaše řešení si na konci uložím k sobě. Je dovoleno používat jakoukoli literaturu nebo materiál (slajdy a poznámky z přednášky, ukázkové příklady, knihy, manuálové stránky, příklady které jste si napsali při učení, web včetně vyhledávání apod.). Není dovoleno jakkoli s kýmkoli komunikovat (lidi kolem, mail, chat, talk, ...). Není pochopitelně dovoleno přistupovat ani do /home adresáře mimo váš domovský adresář -- není prostě dovoleno komunikovat mezi sebou jakýmkoli způsobem.

Ústní část zkoušky má dvě části:

  1. diskuse nad písemkou
  2. teorie (2 otázky + doplňující otázka v případě nerozhodné známky)

Součástí hodnocení je i překlad pomocí překladače gcc s přepínačem -Wall, přehlednost napsaného programu a správné otestování použitých systémových volání.

Co se týče testování návratových hodnot volání, chci správně otestovat alespoň jedno takové volání a pak všechna ,,důležitá'' (např. open). To znamená, že testovat návratové hodnoty třeba funkcí pro zamykání/odemykání mutexů není nutné. Jinými slovy - pokud víte co děláte, nemusíte psát zbytečný kód.

Při ústní zkoušce nejsou dovolené žádné pomůcky. Studenti se na zkoušku přihlašují zápisem do příslušného formuláře (elektronicky na WWW), o připuštění nezapsaného studenta ke zkoušce rozhoduje zkoušející (podle počtu přítomných studentů; pokud je volno tak s tím v zásadě není problém). Nedostavení se ke zkoušce je považováno za neúspěšný termín, pokud je termín plný, tj. je nutné se včas odhlásit, abyste neblokovali volné místo.

Ke zkoušce je potřeba zápočet, včetně předtermínů.

Okruhy otázek budou podobné jako minulý rok, bude včas doplněno.

Ukázkové příklady ze zkoušek.

Hodnocení

Pokud vám zkouškový program nefunguje, případně je jen z poloviny hotový apod., rovná se to neúspěšnému termínu. Pokud funguje s drobnými problémy, ale je vidět, že základ řešení je napsán korektně, podle kvality implementace, případných chyb a diskuze nad řešením je rozhodnuto o známce z první části.

Hodnocení druhé části je souhrnné hodnocení daných dvou otázek. Pokud není výsledná známka této části alespoň za tři, rovná se to neúspěšnému termínu.

Celkové hodnocení se skládá z hodnocení ústní a písemné části. Pokud je písemná nebo ústní část za tři, nemůže být celkové hodnocení lepší než tři. Při nerozhodné známce rozhoduje třetí otázka pro ústní část.

Cvičení

Různé příklady ze cvičení a zadání na doma (moje skupiny). Rozvrh skupin a přihlašování do nich je ve školním informačním systému.

Zápočty

Podmínky

Každý cvičící má své podmínky pro cvičení, tyto jsou pro moje cvičení.

Nutnou a postačující podmínkou pro udělení zápočtu je vytvoření a odevzdání zápočtového programu. Zadání zápočtového programu se stanoví individuální dohodou studenta se cvičícím, kde student pošle specifikaci programu který hodlá napsat. Po případné další komunikaci a po té, co bude cvičícím nakonec schválena, je toto zadání vašeho zápočtu. Zápočtový program musí být napsán v jazyce C (preferováno) nebo C++ a musí obsahovat netriviální použití služeb UNIXu z alespoň dvou následujících oblastí:

Podmínka použití služeb UNIXu je splněna, pouze když je příslušná služba použita přímo, ne prostřednictvím další nadstavbové knihovny. Můžete tedy sice používat fopen(), fread() nebo fprintf() (knihovna stdio), ale jako použití souborových operací se vám počítají pouze funkce typu open(), read() nebo write().

Program musí důsledně ošetřovat chyby a rozumně reagovat na nesprávný vstup. Zdrojový text zápočtového programu musí být vhodně rozdělen do více souborů a kompilace řízena pomocí programu make a netriviálního Makefile (oddělený překlad a linkování, správné závislosti, použití maker, překladač gcc musí používat -Wall, překladač cc (tj. například Solaris) pak -v). Překlad musí proběhnout bez varování. Součástí zápočtového programu je i uživatelská a technická dokumentace ve formátu běžně čitelném v UNIXu, což není MS Word, RTF a jim podobné.

Pokud se student s cvičícím nedohodne jinak, musí zápočtový program být přeložitelný a fungovat v UNIXové laboratoři, a to alespoň na dvou systémech - tedy například na Linuxu a na Solarisu (u-us), případně IRIXu (kappa), FreeBSD (pokud máte konto třeba na mail.kolej) atd. Linuxová emulace pod jiným systémem se nepočítá.

Pro kontrolu zápočtů mám k dispozici Solaris, FreeBSD, OpenBSD, Linux a IRIX.

Zápočtový program zadává a zápočet uděluje cvičící, ke kterému je student zapsán na cvičení. Výjimku je možné udělat pouze z důvodu dlouhodobé nepřítomnosti cvičícího.

Předání zápočtů

Moje skupiny: je možné mailem. Mail musí obsahovat vše potřebné, včetně zdrojáků, dokumentace, příkladů kde to dává smysl (make, find, ...), specifikace daných dvou zvolených oblastí a na jakých systémech jste to otestovali. Tj. pokud budete dělat například make, tak potřebuju příklady použití - ve vlastním adresáři pár zdrojáků, příslušný Makefile ukazující vše co daný make umí, dále příklad který ukáže jak si poradí s chybným zadáním, různé příklady na zadání přepínačů příkazové řádky atd. Čím lépe mi to předložíte, tím jednodušší by mělo být udělení zápočtu. Prosím uvědomte si, že nemám čas hodinu zkoumat, co váš příklad vlastně dělá nebo má dělat. Dokumentací se myslí styl podobný například manuálové stránce apod., za dokumentaci se nepovažuje soubor obsahující pár řádek. Pokud budete programovat např. find, tak budu chtít několik ukázkových zadání, co nejsložitějších, s popisem toho, co dělají. Některé věci mohu chtít předvést osobně, ideálně po cvičení či v termínech zkoušky (ne vaší).

Váš program by měl při špatném zadání přepínačů vypsat krátký help s krátkým popisem všech přepínačů, které je možné použít.

Počítejte prosím s tím, že na prohlédnutí vašeho zápočtového příkladu potřebuji alespoň 2-3 dny, velmi pravděpodobně nebude fungovat to, že mi večer před zkouškou pošlete váš zápočťák. Každopádně doporučuji odevzdat vaši práci alespoň týden předem, ať máte čas na opravu v případě problémů.

Náměty na zápočtové programy

Letos neakceptuju zadání typu talk a jim podobné, bylo jich loni příliš mnoho. Rozhodující je pak specifikace programu, na které se se mnou dohodnete.

  1. vlastní zadání
    to preferuji, pokud máte něco zajímavého, případně variaci na následující zadání, ideálně aby to bylo použitelné v praxi
  2. jednoduchý shell
    spouštění příkazů s parametry, přesměrování, roury, nastavení prostředí procesů, nastavení a použití proměnných (stačí VAR=value a $VAR), expanzní znaky, interní příkaz cd, skripty (posloupnost příkazů v souboru, bez řídicích konstrukcí), případně job control atd. Je možné vzít i jen nějakou podmnožinu, např. pokud chcete dělat job control, není potřeba dělat vše ostatní apod.
  3. tar
    základní funkce: uložení souborů do archivu, výpis obsahu a rozbalení archivu, spolupráce s externím komprimačním programem (např. gzip), další rozumné vlastnosti (viz man). Spolupráce s existujícími implementacemi (GNU tar, BSD tar, Solaris tar) je samozřejmostí.
  4. WWW server
    rozumná podmnožina protokolu HTTP, poskytování statických stránek, včetně jednoduché implementace CGI skriptů (dynamické stránky).
  5. FTP server
    rozumná podmnožina protokolu FTP, případně TFTP server podle RFC specifikace.
  6. make
    závislosti, spouštění příkazů, definice a použití maker (proměnných)
  7. cron daemon
    běžně používaný crontab formát s komentáři, nemusí být pro více uživatelů, stačí jeden crontab soubor. Použití základních proměnných v crontab souboru (pro referenci viz třeba cron(5) na FreeBSD), automatické načtení změn.
  8. file a process manager
    operace se soubory: vypisování obsahu adresářů (s podrobnými informacemi o souborech), kopírování, mazání a přejmenování souborů, vytváření linků, nastavení práv souborů, zjišťování informací o běžících procesech, interaktivní posílání signálů procesům a pod.
  9. find
    vyberte si rozumnou podmnožinu podmínek a akcí
  10. stahování souborů pomocí HTTP nebo FTP
    dávkové stahování souborů a celých adresářových stromů z FTP a WWW serverů
  11. jednoduchý mail/news systém
    off-line komunikace, posílání a čtení (textových) zpráv mezi uživateli (skupinami uživatelů), volitelně pomocí System V IPC v rámci jednoho systému nebo s využitím soketů po síti
  12. distribuované systémy
    např. pro zpracovaní jednoho dělitelného úkolu na více strojích - sami přijďte s rozumným zadáním.
  13. filtrování pošty
    ukládání došlých mailů do folderů podle zadaných pravidel
  14. nebo se můžete nechat inspirovat u dalšího ze cvičících, Honzy F. Chadimy.

Konzultace

Konzultace jsou možné během cca 15 minut před přednáškou přímo v posluchárně, případně během 15 minut po ní. Je také možné se individuálně domluvit mailem. Konzultace se cvičícími si dohodnou studenti individuálně.

Kontakt a eskalace

Kontakt na mě je v sekci kontaktů. Problémy se cvičením řešte se cvičícím; pokud máte pocit, že to nepomohlo, eskalujte na mě. Pokud vám na této stránce něco chybí, napište a já se to budu snažit doplnit. Pokud budete mít pocit, že problém který jste řešili se mnou se nevyřešil jak měl, mým nadřízeným je Libor Forst.

Rozvrh

Je ve školním informačním systému, včetně skupin na cvičení a kontaktů na cvičící.


Last changed: Sat Jan 27 14:15:08 CET 2007