10.9.04

Hackeři z roku raz dva

Toto je třetí díl volného seriálu. Předchozí části:
1. Programátorským učněm za Husáka
2. Klovací pořadí u střediskového počítače
V normální pracovní den počítalo na ICL 4-72 najednou tak 20 až 30 lidí, kromě toho se sjížděly nějaké dávkové úlohy (z děrných štítků) a systémové programy. To není málo, když vezmete v úvahu, že celý ten zázrak měl 1 MB fyzické operační paměti (později upgradoval, myslím, až na 4 MB). Operační systém, který musel s tak vystačit s tak omezenými zdroji – a dělal to velice dobře! – se jmenoval Multijob. Byla to zjednodušená modernější varianta systému Multics, jehož složitost a těžkopádnost koncem šedesátých let inspirovala Thompsona a Ritchieho, aby napsali Unix (slovo Unix je žertovným antonymem Multicsu).
Když jste v Multijobu spustili program, nešel rovnou do paměti – ledaže jste měli velké štěstí a systém byl mimořádně volný – ale do fronty na zpracování. Operační paměť byla rozdělena na úseky, takzvané streamy; pro běžné uživatele byl určen stream A a C. Každý byl jiný. Ve streamu A programy rotovaly: vaše úloha se v něm rozběhla, kousek se jí spočítal, pak ji systém odstránkoval na disk a natáhl jinou úlohu, takhle si jich tam uměl točit kolem deseti. Přednostně se tak měly spouštět interaktivní programy vyžadující komunikaci s uživatelem. Než jeden člověk z terminálu zapsal vstupní data, mohla se počítat úloha někoho jiného. Systém byl tak dobře vyvážený, že většinou skutečně vznikala iluze nepřerušeného běhu programu. Potíž byla v tom, že úloha do streamu A musela být malá (velikost streamu činila 128 KB) a nesměla běžet dlouho: byl tam časový limit, po kterém vás systém vyhodil, jinak by stream A obsadili svými programy dva tři chytráci hned po ránu a ostatní by měli smůlu.
Pro velké úlohy byl určen stream C. Ten měl kapacitu, pokud si dobře vzpomínám, kolem půl mega, což bylo na tehdejší dobu opravdu hodně. Když váš program vystál frontu na stream C, pak zůstal v paměti, dokud se nespočítal nebo dokud mu nedošel časový limit, výrazně větší než v A. Systém se snažil maximálně využít operační paměť, takže si frontu programů na zpracování různě přeskupoval, aby poskládal vždy optimální kombinaci úloh – jako by s těmi programy hrál Tetris. Čekání proto bylo napínavé: zařadili jste program do fronty, octl se na jejím konci a byl dejme tomu třicátý. Když se ale procesoru hodil jako "dlaždička" správné velikosti, kterou zaplácne paměť, jež by jinak zůstala nevyužitá, pak jej vzal třeba z konce fronty. Taková malá výhra v loterii.
Kolem front se točila spousta konverzace mezi uživateli, byly s nimi spojené legendy (třeba jak pojmenovat program, aby postupoval rychleji) a taky bohatýrské historky. Fronty byly totiž prioritizované, ale běžný uživatel prioritu svých úloh ovlivnit nemohl. Existovaly ale nedokumentované příkazy operačního systému a taky tajné parametry dokumentovaných příkazů... Potíž byla v tom, že když se k nějaké takové esoterické znalosti člověk dostal, nemohl si ji nikde vyzkoušet nanečisto, bylo třeba to risknout – a nezapomeňte, všem na očích, provoz sledovali operátoři i jiní uživatelé. Zvednout si vlastní prioritu a předběhnout ve frontě – to bylo fajn, to většinou prošlo (až na to, že tuhle díru pak ucpali systémáci ze všeho nejdřív). Mnohem nebezpečnější byl příkaz umožňující úplně vyhodit úlohu jiného uživatele z fronty. Měli jsme vytipovaných pár takových uživatelů, kteří to nepoznají, ale tak dlouho se chodí se džbánem, až je zle. Jednou jsme omylem vyhodili z fronty jakýsi podivný velký program, ze kterého se vyklubal výpočet záloh na mzdy pro všechny zaměstnance ČVUT. Druhý den šel náš vedoucí katedry na kobereček k rektorovi a krátce poté my k vedoucímu katedry. Musím i po letech podotknout, že to byl frajer až na půdu – řval sprostě ve čtyřech jazycích (pocházel z maďarsko-německé rodiny žijící na Slovensku), až drnčela skla v knihovně, ale nic z toho nevyvodil.
Postihy za nekorektní chování byly jinak poměrně přísné a vesměs spočívaly v odejmutí uživatelských práv – na měsíc, na dva, na rok. Pro nás závislé byl takový trest velice krutý, protože k počítači kvalit Ajslu jste se jako studenti jednoduše nikde jinde nedostali, tečka. Ještě větší průšvih nastal v případě, když jste dostali distanc a měli na ICL rozdělanou diplomku. Já si dával pozor, a i když jsem dvakrát měl namále, vždycky jsem ze zákazu činnosti nějak vybruslil – nedovedl jsem si představit, že by mě tam nepustili! Potrestané jsme tajně pouštěli k počítači pod svými hesly, ale strojového času bylo tak málo, že to bylo jako dělit se s někým o chleba v době hladomoru.
Typický pracovní cyklus u Ajslu tedy byl: napsat program (tužkou na papír!); vyděrovat jej do štítků (měli jsme na katedře malou místnůstku s děrovačem, strašlivou masivní mašinou vážící jistě pět metráků); štítky odnést na OVC do Příjmu/výdeje, napsat k nim průvodku, kam se mají nahrát; počkat, až vám je nahrají a vznikne z nich soubor na disku; ten projet překladačem; pokud překladač nahlásil chyby, pak je buď zkusit hned u dálnopisu opravit (v rozporu se svatou zásadou "U počítače se nepřemýšlí, ale pracuje!"), nebo to nechat být na později a dělat něco jiného; pokud se program přeložil, byl tedy syntakticky správně, pak jej bylo třeba sestavit – přidat k němu knihovny a přeložit relativní adresy na absolutní; tím vznikl strojový kód; ten jste spustili, počkali, kde a na čem spadne, nechali si to všechno vypsat na papír a šli zase v klidu přemýšlet a hledat chyby. Atd. pořád dokolečka.
Bylo to strašlivě pomalé. Dneska je vývoj programů daleko efektivnější. Nemám ale dojem, že se píše lepší kód než tehdy; zato se ho píše mnohem víc. A to tak máte se vším. (Pokračování někdy příště.)
KLÍČOVÁ SLOVA: vzpomínky starého zbrojnoše.

2 Comments:

Anonymous Anonymní said...

Zajímavé, jak mě tahle historická zkušenost připomněla velice nedávnou zkušenost z FELu: V předmětu Paralelní systémy a algoritmy se vypracovává semestrální úloha spočívající v napsání programu řešícího nějakou složitou (typicky exponenciální obtížnosti) úlohu s využitím 16-počítačového clusteru, který je na fakultě. Ten ovšam doma moc lidí nemá, takže všichni (předmět je povinný) ladí na tomhle systému => jsou tam fronty na běh programů. Jedna testovací, co má vysokou prioritu, ale striktní časový limit, druhá téměř bez limitů, ale s nízkou prioritou. Těsně před vánočními prázdninami bylo v hlavní frontě naštosováno úloh tak na celé prázdniny. Ať žije dávkové zpracování! :-)
P.S. Já jsem ladil doma s využitím vlastní multithreadové implementace MPI. Na samotné řešení nepoužitelné, ale na odlaďování řádově jednodušší. Ono to dávkové zpracování opravdu není až zas takový med. ;-)

10/9/04 14:24  
Anonymous Anonymní said...

Pěkný vzpomínky, ale kde jsou ti hackeři?. A nějak se to v mlze ztrácí. Já třeba myslím, že 1 MB paměti měl ICL až po zmiňovaném upgradu. Ještě snad lze připomenout stream B (6 KB), ve kterém se v režimu RIRO spouštěly interaktivní editory uživatelů a pokud někdo uměl napsat tak malý program, mohl si ho tam spustit taky. Po upgradu přibyl ještě stream zvaný "ministerský", do kterého nikdo z běžných uživatelů nesměl a asi proto byl po většinu času prázdný - stále vzpomínám, jak jsme ho měli rádi.

Možná by stálo za zmínku ještě pár periférií, např. Grafický terminál (asi Tektronix), kde bylo možné namalovat graf na obrazovce s dlouhým dosvitem a pak si ho nechat vykreslit na termotiskárně nebo na plotteru, který jsem však nikdy neviděl, pár obrázků však ještě mám.

S pozdravem
*ACE

31/12/04 23:09  

Okomentovat

<< Home