Bystroushaak's blog / Czech section / Knihy / Operační systém Unix a jazyk C

Operační systém Unix a jazyk C

Poslední dobou mám dost volného času, tak dočítám vše, co se mi už nějakou dobu válí po pokoji. Konečně jsem se tak dostal i ke knize Operační systém Unix a jazyk C od dvojice autorů Brodského a Skočovského (ISBN 80-03-00049-1). Podařilo se mi jí koupit na aukru za 40kč a ku mému velkému podivu se jedná o mimořádně kvalitní knihu a to i přesto že vyšla v roce 1989, tedy v době kdy jsem měl na starosti především sání z matčina prsu.

Už dříve jsem se pokoušel proniknout do tajů Linuxu/Unixu, ale nikdy se mi to moc nevedlo, protože většina knih je buď moc tlustá a nezáživná (takovej ten typ co má 1500 stránek a vyžaduje rok úpěnlivého studia), nebo jen vysvětluje shell a uživatelské programy, tedy pro mě nepodstatná. Popisovaná kniha je unikátní už jen pro svých 367 stran formátu A5, na kterých se nachází v podstatě vše co jsem kdy chtěl o Unixu vědět. Posuďte sami, jeden z jejích autorů jí má částečně uveřejněnou na webu, tak si projeďte obsah.

Co se mi strašně líbí je, že autoři vždy jednají s čtenářem na rovinu. Zatímco v různých učebnicích a knihách o Linuxu/Unixu/C píšou o některých věcech že nejsou vhodné pro začátečníky, že by jim to jen pletlo hlavu, že se o nich bude psát později a proto se jim teď vyhnou, nebo o nich prostě raději nemluví, autoři této knihy vždy napíšou co se skutečně děje, i když to možná nepochopíte. Ve druhé kapitole se tak mluví o i-nodech a v třetí najdete schéma paměti procesu (text, data, stack). Nevím jak to napsat aby to nevypadalo blbě, ale miluju tenhle přístup! Připadám si jako malej kluk, kterej se může ptát táty a na každou otázku se mu dostane pravdivé odpovědi, díky čemuž si může udělat obraz o světě kolem.

Kapitoly

Předmluva

V předmluvě je na pár stránkách shrnuta historie Unixu, jeho vývoj a dělení až do roku 1989. Co mě skutečně zaujalo je následující odstavec:

V ČSSR je k dispozici DEMOS pro minipočítače SMEP SM 52-11 a SM 52-12. V době, kdy se tato kniha objeví na trhu, bude pravděpodobně již implementován Unix na všech počítačích vyráběných a dodávaných v ČSSR jako výsledek snahy o jednotné základní programové vybavení. Toto tvrzení se týká nejen počítačů střediskových (JSEP), minipočítačů (SMEP), ale i mikropočítačů (osobní počítače a pracovní stanice). Všechny implementace budou vyhovovat doporučení X/OPEN.

Vskutku zarážející, že? Věčná škoda, že to nějak vyšumělo.

Úvod

V úvodu je shrnuta charakteristika Unixu a popsány jeho výhody. Je to takové rychlé seznámení ala co by jste mohli říct nováčkovi za 15m.

Systém souborů a adresářů

Užitečná kapitola z uživatelského hlediska. Poměrně detailně (začíná popisem i-nodů) vysvětluje jak vytvářet, mazat a kopírovat soubory, jaký je rozdíl mezi binárním a textovým souborem a v čem ho zobrazit. Dál se věnuje adresářové struktůře, právům, speciálním souborům v /dev, mountování a archivaci pomocí taru.

Ovládání Unixu z terminálu

V této kapitole je vysvětlen termín proces a popsán terminál, a to tak že hodně (po jejím přečtení pravděpodobně zvládnete naprogramovat vlastní emulátor). Dál se zde autoři věnují přesměrování, filtrům, rourám, kolonám a démonům. Uživatel se přitom seznámí se spoustou příkazů, ale na tomto místě jim není věnována přílišná pozornost.

Editory

Tato kapitola je v dnešní době z celé knihy pravděpodobně nejzbytečnější. Je v ní vysvětlena práce v edu, sedu a exu (vi), přičemž exu je věnována jen jedna stránka, na které je vysvětlen jen hrubý princip.

Programovací jazyk C

Kapitola se věnuje základům nějaké prehistorické verze C. Ne že by to kapitolu nějak devalvovalo, jedná se o mistrovskou práci, která na pár desítkách stránek docela přehledně vysvětlí to, na co ostatní potřebují knihy o stovkách stránek. Některé věci se už ale minimálně deset let dělají jinak (například deklarace funkcí - autor píše parametry oddělené středníky za hlavičku fce). Na konci kapitoly najdete přehled a ukázky knihoven, práci s kompilátorem atp..

Styl jakým je tato kapitola napsaná mě přiměl obdivovat autory za jejich věcné a jasné podání, které se ostatně prolíná celou knihou. Je to stručné, jednoznačné a jasné, navíc prokládané různými ilustracemi a spoustou krátkých zdrojových kódů, ze kterých se dá pochopit princip. Nejspíš to není kapitola pro neprogramátory a předpokládá znalosti nějakého programovacího jazyka (v té době nejspíš BASICu), nebo jsou všechny ostatní učebnice C co jsem četl psané pro idioty (jak jinak si vysvětlit jejich ukecanost?). Za sebe říkám každopádně bravo, skvělá práce!

Programování v systému

Touto kapitolou se kniha skutečně zhodnotila a po jejím přečtení můžu říct, že stála za to. Autoři se zde věnují volání funkcí jádra, procesům a jejich synchronizaci do takových podrobností, že to jde div ne až na hardware. Je zde vysvětleno prakticky všechno důležité API pro práci se systémem. Díky této kapitole jsem pochopil, že většina programů shellu jsou jen wrappery nad jednou/dvěma funkcemi jádra.

Ke konci kapitoly se řeší nástroje tvorby programů, mimo jiné třeba profilování, jestli je lepší napsat shell script (kouzelně zvaný scénář) nebo program v C, ukázka použití programů lint, size a nm, tvorba makefiles (díky této kapitole jsem je konečně plně pochopil, vždy jsem za tím hledal něco složitého a ono je to silně triviální), debugování a cosi jako zálohovací (nikoli verzovací) nástroj pro zdrojové kódy (SCCS).

Příkazové interpretery

Kapitola zaměřená na pokročilejší práci a scriptování v sh. Nutno dodat že část věnovaná sh mi přišla možná až moc krátká, i když vysvětleno je vše. Dost místa pak autoři věnovali csh, které mě osobně vůbec nezaujalo (co se na tom proboha podobá C?). Lahůdkou na poslední stránce je jakýsi vsh - podivnost vypadající jako prapradědeček mc.

Zpracování textů

wc, grep, diff atp.. Dost stránek je věnováno awku a snad ještě víc editoru troff, který má služit pro přípravu dokumentů k tisku. Imho to vypadá jako totální horor, ve kterém bych nechtěl psát ani jedno slovo. Třikrát hurá pro WYSIWYG!

Komunikace mezi uživateli

Popsána je komunikace mezi terminály pomocí příkazu write a mezi uživateli systému pomocí mailu. Příběh který komunikace popisuje je docela dobrý :)

Následuje popis příkazu at, ale překvapivě chybí cron, který bych na takovém místě očekával. Dál se v kapitole mihne calendar a zbytek kapitoly se věnuje příkazům pro komunikaci na síti - uucp a kermit (jakýsi telnet + přenos souborů po RS232).

Implementace

Asi nejvíc hardcore kapitola z celé knihy. Popisuje správu procesů, swapování, přidělování paměti, práci se zařízeními (blokové/textové), svazky, implementace souborů, adresářů, rour a proudů. To vše na úrovni jádra, skoro na každé stránce tak najdete nějakou tu céčkovskou strukturu a na každé druhé ilustraci. Jak říkám, hardcore, ale pochopit se to dalo.

Instalace a údržba

Kapitola začíná popisem instalace Unixu z pásky a disket, dále je popsána údržba systému - zakládání nových uživatelů, kontrola disků, zálohování, daemoni atp.. Ke konci se autoři věnují generování nového jádra (bez zdrojáků i s) a řešení chyb. Dnes už většina uvedených informací moc užitečná není, v Linuxu se to dělá jinak, například při přidání nového uživatele už /etc/passwd asi ručně nikdo needituje.

Přenositelnost Unixu

Kapitola se věnuje historii přenositelnosti Unixu a C. Je zde rozebíráno co je nutné psát v asm a co je plně přenositelné v C, dále jsou nakousnuty ovladače a volání jádra. Kapitola je dost krátká, docela rád bych si o tom přečetl víc.

Přílohy

Syntaxe jazyka C - v podstatě referenční příručka ANSI normy C.

Abecední přehled příkazů shellu - doufám samo popisné.

Volání jádra - seznam všech funkcí jádra s jejich několikaslovným popisem (např. int plock(int op) .. uzamknutí textu(dat) v paměti).

Knihovny Unixu - seznam různých .h souborů a funkcí v nich obsažených s krátkým popiskem jako u jádra.

Závěr recenze

Je pozoruhodné, jak moc je dvacet dva let stará kniha o počítačích aktuální i dneska. Obzvlášť zajímavé to je, když to porovnáte s ostatními knihami o počítačích, kterých jsou plné antikvariáty - většinou jsou to knihy dobré leda tak k pobavení, nebo postrašení.

Za sebe můžu říct, že mi toho kniha dost dala, spoustu jsem se toho z ní dozvěděl a její čtení se mi tedy vyplatilo. Jako bonus jsem dostal chuť porovnat jak moc se liší dvacet let starý Unix od Linuxu, takže se asi konečně donutím přečíst nějakou z těch tlustých knih :)

Become a Patron