Hlavní navigace

Vznik Unixu a jazyka B na počítačích PDP

20. 10. 2009
Doba čtení: 12 minut

Sdílet

Počítače DEC firmy Digital měly poměrně značný vliv na vznik mnoha dodnes používaných technologií. Na těchto počítačích, konkrétně na známých modelech PDP-7 a následně PDP-11, byly vytvořeny i první verze operačního systému Unix, programovací jazyk B i jeho následovník – dodnes používaný jazyk C.

Obsah

1. Rodina počítačů PDP vyráběných firmou Digital
2. PDP-8
3. Počítače PDP s osmnáctibitovou ALU
4. Vznik Unixu
5. Komu vděčíme za složené závorky a operátory ++ a –?
6. Vlastnosti programovacího jazyka „B“
7. PDP-11
8. Vznik programovacího jazyka „C“
9. Odkazy na Internetu

1. Rodina počítačů PDP vyráběných firmou Digital

Firma Digital navrhla a vyráběla poměrně velké množství počítačů nesoucích označení PDP. Poněkud matoucí je číslování těchto počítačů, neboť se jedná o několik vzájemně odlišných vývojových řad a navíc – číslování není zcela chronologické, což je ostatně patrné při pohledu do níže zobrazené tabulky. Z hlediska funkce procesorové jednotky je možné tyto počítače rozdělit do několika skupin podle toho, jak široká slova mohla být v ALU zpracovávána:

Bitová šířka Model Rok vzniku
12 PDP-5 1963
12 PDP-8 1964
16 PDP-11 1970
18 PDP-1 1960
18 PDP-4 1963
18 PDP-7 1965
18 PDP-9 1965
18 PDP-15 1970
24 PDP-2 nerealizováno
36 PDP-3 nerealizováno
36 PDP-6 1964
36 PDP-10 1968

2. PDP-8

Typickým zástupcem počítačů firmy Digital vybavených aritmeticko-logickými jednotkami, které zpracovávaly dvanáctibitová slova, je počítač PDP-8 z roku 1964, který nahradil původní nepříliš úspěšný model PDP-5 vyrobený o rok dříve. Tento počítač byl na svou dobu velmi levný, protože byl v základním vybavení prodáván za cca šestnáct tisíc dolarů, což byla až o řád nižší cena, než v případě výkonnějších typů počítačů. PDP-8 byl používán na univerzitách, v mnoha laboratořích a posléze i průmyslových aplikacích, protože si díky relativně nízké ceně a kompaktnímu tvaru (ve své podstatě se jednalo o krabici tvaru a velikosti ledničky – viz též fotografie) mohli tento počítač pořídit i menší firmy jako alternativu k nákupu strojového času ve výpočetních centrech. Z tohoto důvodu existuje pro PDP-8 poměrně velké množství programů, například různých simulací, numerických výpočtů, aplikací řídicích průmyslové procesy či měření v laboratořích atd.

pdp2

Obrázek 1: Počítač PDP-8.

V roce 1975 firma Intersil získala od Digitalu časově omezená práva na návrh a následnou výrobu čipu Intersil 6100. Ve své podstatě se jednalo o vměstnání celé procesorové jednotky původního počítače PDP-8 do jednoho integrovaného obvodu, což na jednu stranu ukazuje na velkou popularitu PDP-8 (a samozřejmě taktéž velké množství vytvořených aplikací, které bylo nutné udržovat funkční) i deset let po jeho vstupu na trh a na stranu druhou dobře ilustruje rychlý vývoj v oblasti čipů s velkou mírou integrace (VLSI), protože právě díky možnostem větší integrace bylo možné původní „ledničku“ umístit na čip s plochou menší než 2 cm2. Instrukční sada procesorové jednotky počítače PDP-8 taktéž inspirovala firmu Intel při výrobě prvního mikroprocesoru na světě – známého čipu Intel 4004.

3. Počítače PDP s osmnáctibitovou ALU

Další skupinou počítačů vyráběných v sedmdesátých letech minulého století firmou Digital, byly počítače PDP-4, PDP-7, PDP-9 a v pozdějších letech také PDP-15. Tyto počítače, jejichž architektura je částečně odvozena od minule popsaného „dědečka“ PDP-1, byly vybaveny procesorovou jednotkou zpracovávající slova o šířce 18 bitů, přičemž operační kódy instrukčního souboru byly navzájem kompatibilní. Osmnáctibitová slova se používala jak pro uchování výsledků aritmetických operací, tak i pro adresování, což znamenalo příjemné zjednodušení při programování (viz dále popisovaný programovací jazyk B). Zatímco PDP-4 byl poněkud neúspěšný pokus o modernizaci PDP-1, těšil se především model PDP-7 relativně velké popularitě (i když ne tak velké jako v případě o rok staršího PDP-8), a to i díky poměrně příznivé ceně 72 000 dolarů, která byla nižší než v případě mainframů firmy IBM. Díky své spolehlivosti byl prý PDP-7 schopen řídit i jaderný reaktor či podobné zařízení.

pdp2

Obrázek 2: Počítač PDP-7.

Rychlý vývoj číslicové techniky byl patrný i na postupném vývoji „osmnáctibitových“ počítačů PDP. Zatímco se u minule popsaného PDP-1 a PDP-4 používaly feritové paměti s kapacitami řádově desítky kilobajtů a procesorové jednotky byly složené především z diskrétních součástek (zejména tranzistorů), je u PDP-15 ve velké míře použito integrovaných obvodů TTL, což umožnilo procesorovou jednotku i paměti několikanásobně zmenšit, zvýšit její spolehlivost a snížit cenu. Další vývoj je již známý – vznik prvních čtyřbitových, osmibitových a posléze i šestnáctibitových mikroprocesorů umožnil daleko větší integraci a snížení ceny počítačů, ostatně i firma Digital ve svých terminálech využívala osmibitové mikroprocesory, například slavný Z80. V následující kapitole se budeme zabývat především počítačem PDP-7, který měl velký vliv na vznik Unixu i programovacího jazyka B (a odvozeně i C).

4. Vznik Unixu

Velmi důležitou roli sehrál počítač PDP-7 v Bellových laboratořích, kde byl použit pro vývoj první verze Unixu (jehož původní jméno bylo Unics, což je narážka na dříve vyvíjený systém Multics) i programovacího jazyka B, jehož dalším vývojem vznikl jazyk C. Jedním z klíčových lidí, kteří se na vývoji podíleli, byl Ken Thompson, jenž začal s počítačem PDP-7 pracovat již v roce 1968. Ken Thompson a jeho kolegové totiž vytvořili na sálovém počítači GE-635 hru Space Travel, ovšem strojový čas tohoto stroje byl velmi drahý, takže vedení firmy samozřejmě nebylo spokojeno s tím, že se výkonný počítač využívá pro hraní a ne pro vážnou práci (což je paradoxní, protože právě práce na této hře vedly ke vzniku mnoha zajímavých technologií). Thompson se tedy rozhodl, že hru přepíše tak, aby ji bylo možné spustit na mnohem jednodušším počítači PDP-7, ovšem takovým způsobem, aby s počítačem mohli pracovat i další uživatelé – jinými slovy, musel se vytvořit operační systém podporující multiuživatelský režim.

pdp2

Obrázek 3: Část procesorové a paměťové jednotky počítače GE-635.

Ken tedy se svými kolegy začal s vývojem zprvu velmi jednoduchého operačního systému. Ovšem hardwarové možnosti počítače PDP-7 byly velmi omezené, například kapacita operační paměti dosahovala pouze 8192 osmnáctibitových slov, tj. osmnácti kilobajtů. Z tohoto důvodu byl originální Unix (který ovšem toto jméno ještě neměl) naprogramován v assembleru počítače PDP-7, přičemž je zajímavé, že vlastní vývoj byl prováděn na jiném (výkonnějším a taktéž mnohem dražším) počítači: již zmíněnm 36bitovém GE-635 s využitím makroassembleru GEMAP. Po vytvoření objektového kódu tímto assemblerem se (stále ještě na počítači GE-635) zapsalo přeložené jádro i další pomocné programy na děrnou pásku, která se následně vložila do čtecího zařízení na počítači PDP-7, odkud se systém „nabootoval“ patřičným příkazem zadaným z řídicího panelu.

pdp2

Obrázek 4: Ken Thompson se později věnoval šachovým algoritmům. Vytvořil například databázi „perfektních“ koncovek a podílel se i na vzniku šachových partií mezi (vel)mistry a počítači.

Tímto, z dnešního pohledu dosti složitým a taktéž zdlouhavým, způsobem bylo vyvinuto jak samotné jádro původního Unixu, tak i jednoduchý textový editor, assembler, interpret příkazů (předchůdce dnešních shellů) a několik základních utilit, odpovídajících dnešním programům rm, ls, cp či cat.

5. Komu vděčíme za složené závorky a operátory ++ a  --?

Ken Thompson a jeho kolega Dennis Ritchie se oprávněně domnívali, že nově vytvořený operační systém potřebuje také nový systémově orientovaný programovací jazyk, tj. jazyk, ve kterém by bylo možné psát systémové programy a popř. i uživatelské aplikace. Nejprve se sice uvažovalo o využití překladače Fortranu, ovšem tato myšlenka byla vzhledem k výše popsaným omezeným hardwarovým možnostem mikropočítače PDP-7 následně opuštěna. Namísto toho Ken Thompson vytvořil nový programovací jazyk nazvaný jednoduše B. Tento jazyk byl založen na existujícím jazyku BCPL (Basic Combined Programming Language), jenž byl vytvořen Martinem Richardsem již v roce 1966. Vzhledem k tomu, že jazyk BCPL byl z hlediska konstrukce překladače poměrně složitý (což je poněkud paradoxní, neboť se jednalo o zjednodušený jazyk CPL ze začátku šedesátých let), nebylo možné, aby se jeho překladač na mikropočítači PDP-7 spouštěl z operačního systému, protože jen pro samotný překlad zdrojových kódů bylo zapotřebí cca 16 kB operační paměti.

pdp2

Obrázek 5: Známá fotografie Kena Thompsona a Dennise Ritchieho sedících před PDP.

6. Vlastnosti programovacího jazyka „B“

Z tohoto důvodu Ken Thompson z původního jazyka BCPL odstranil některé vlastnosti, které nepovažoval za podstatné (například složitější typy programových smyček) a naopak změnil jeho syntaxi tak, aby se zápis programu mohl co nejvíce zkrátit. Právě z této snahy například pochází i způsob zápisu operátorů pomocí speciálních znaků a nikoli klíčových slov (včetně zcela nových operátorů ++ a --), což je zvyk používaný doposud – viz například současné programovací jazyky, jakými jsou C, C++, Java či JavaScript. Taktéž se v jazyku B objevuje použití středníků pro ukončení příkazů.

Thompson navíc při programování překladače použil techniku využívanou dodnes – překladač B byl napsán v jazyku B, což sice na samotném začátku vyžaduje takzvaný bootstrap (například první interpretr napsaný v assembleru), ale ve výsledku tato metoda vedla jak ke zrychlení vývoje, tak i ke kvalitnějšímu návrhu jazyka (z tohoto hlediska není nic lepšího, než když je programátor nucen používat své vlastní produkty). Při pohledu do referenční příručky jazyka B, popř. na ukázku programového kódu je vidět nápadná shoda s jazykem C, o kterém se zmíním později (v podstatě zde chybí datové typy a struktury):

/* The following program will calculate the constant e-2 to about
   4000 decimal digits, and print it 50 characters to the line in
   groups of 5 characters.  The method is simple output conversion
   of the expansion
     1/2! + 1/3! + ... = .111....
   where the bases of the digits are 2, 3, 4, . . . */

main() {
        extrn putchar, n, v;
        auto i, c, col, a;

        i = col = 0;
        while(i<n)
                v[i++] = 1;
        while(col<2*n) {
                a = n+1 ;
                c = i = 0;
                while (i<n) {
                        c =+ v[i] *10;
                        v[i++]  = c%a;
                        c =/ a--;
                }

                putchar(c+'0');
                if(!(++col%5))
                        putchar(col%50?' ': '*n');
        }
        putchar('*n*n');
}

v[2000];
n 2000;

Na programovacím jazyku B bylo zvláštní především to, že podporoval pouze jeden datový typ – slovo (word) – jehož bitová šířka se měnila podle toho, pro jaký procesor byly programy překládány. I adresy v paměti byly reprezentovány pomocí slov (přesněji jako indexy do pole, neboť paměť byla v B považována za jedno velké lineární pole), což se později ukázalo být problematické, protože na mnoha platformách mají adresy jinou bitovou šířku než slova zpracovávaná procesorem. Nicméně pro účely systémového programování na počítači PDP-7 programovací jazyk B vyhovoval a jeho překladače byly později naprogramovány i pro některé další minipočítače, například dále popsaný PDP-11.

Druhá zvláštnost spočívá v tom, že překladač jazyka B na PDP-7 i na PDP-11 překládal program nikoli přímo do strojového kódu, ale do bajtkódu, který musel být následně interpretován. Jednalo se ve své podstatě o stejnou technologii, jaká je použita například u P-kódu (Pascal) či u interpretrů Javovského bajtkódu (dnes se již čisté interpretry tohoto bajtkódu v reálných JRE nepoužívají).

7. PDP-11

Velmi úspěšnými počítači firmy Digital byly počítače řady PDP-11. Tyto počítače, které postupně nahradily (nekompatibilní) model PDP-7, byly (a někde ještě jsou) používány jak v průmyslu, tak i na mnoha universitách i v laboratořích. Možnosti procesorové jednotky těchto počítačů byly překonány až o mnoho let později nástupem levných třicetidvoubitových mikroprocesorů řady Motorola M68000 a Intel 80386. V minulosti dokonce firma Digital navrhla osobní počítač založený na procesoru kompatibilním s PDP-11, ale snaha o vstup na trh s osobními počítači ztroskotala právě kvůli konkurenci výše zmíněných levných mikroprocesorů. I když se PDP-11 již mnoho let nevyrábí (a firma Digital byla mezitím koupena Compaqem, který se později spojil s HP), stále je ještě mnoho těchto strojů funkčních – týká se to například průmyslových aplikací, kde PDP-11 řídí výrobní procesy.

pdp2

Obrázek 6: PDP-11 ve variantě PDP-11–70.

Jednou z nejvíce ceněných vlastností počítače PDP-11 byla instrukční sada, která byla ve velké míře ortogonální, což znamená, že například všechny aritmetické a logické instrukce i instrukce pro přesuny dat akceptovaly stejné typy operandů (což je velký rozdíl například oproti architektuře i386). Vzhledem k tomu, že všechna zařízení, resp. jejich řídicí registry, byly mapovány do jednoho adresního rozsahu spolu s operační pamětí, nebylo nutné používat specializované vstupně/výstupní instrukce. Díky tomu, že například instrukce MOVE (přesun hodnoty) akceptovala u obou operandů všechny adresní režimy (což znamenalo, že se například dala přenášet data přímo mezi dvojicí zařízení), bylo možné vynechat instrukce typu LOAD a STORE apod. K možnosti jednoduššího vývoje programů, které musely při jejich inicializaci sdílet paměť s dalšími procesy, přispíval i fakt, že strojový kód byl nezávislý na adrese, od které je v operační paměti uložen – takzvaný PIC neboli position independent code.

Při vytváření programů psaných v assembleru bylo možné použít osm pracovních registrů a většina aritmetických i logických instrukcí, stejně jako instrukce pro přenos dat, u všech svých operandů podporovaly osm adresních režimů: pracovní registr, přímou hodnotu (konstantu), absolutní adresu, relativní adresu, nepřímou adresu (ukazatel je uložený v paměti), adresu s indexem, popř. s indexem s možností autoinkrementace a autodekrementace indexu. Shodou okolností byly v dále popsaném programovacím jazyku C implementovány i operátory pro inkrementaci a dekrementaci operandů, které bylo možné (v případě celočíselných typů) přeložit do jedné strojové instrukce. Tyto operátory však byly začleněny už do programovacího jazyku B na PDP-7, který tyto strojové instrukce neobsahoval (a Ken Thompson ještě pravděpodobně neznal vlastnosti procesoru počítače PDP-11).

pdp2

Obrázek 7: Řídicí panel počítače PDP-11–70.

skoleni

8. Vznik programovacího jazyka „C“

Některé vlastnosti programovacího jazyka B implementovaného na počítačích PDP-7 a později i na PDP-11 však nebyly vhodné pro systémové programování, například z toho důvodu, že PDP-11, na rozdíl od PDP-7, zpracovával data různých bitových šířek, včetně bajtů (ASCII znaky). Z tohoto důvodu se vývojáři v Bellových laboratořích rozhodli, že v rámci přechodu na počítač PDP-11 vytvoří nový programovací jazyk, který mj. umožní více odstínit programátora od hardwarové architektury počítače. Tento programovací jazyk – „nový B“ – se na návrh Kena Thompsona pojmenoval C. Jestli se jedná o další písmeno v abecedě (C=B+1) nebo o následující znak v označení předchůdce obou jazyků – jazyka BCPL, je již otázka, kterou tvůrci ponechali nezodpovězenou. Dalším vývojem programovacího jazyka C se budeme zabývat v navazující části tohoto seriálu.

pdp2

Obrázek 8: Brian Kernighan, který spolu s Dennisem Ritchiem napsal světoznámou knížku „C Programming Language“, podle níž se popisovaný dialekt označuje K&R. Počáteční písmeno jeho příjmení se rovněž vyskytuje v názvu programovacího jazyka AWK.

9. Odkazy na Internetu

  1. The Development of the C Language
    http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
  2. B (programming language)
    http://en.wikipedia.org/wi­ki/B_(programming_language)
  3. Users' Reference to Bo
    http://cm.bell-labs.com/cm/cs/who/dmr/kbman.html
  4. THE PROGRAMMING LANGUAGE B
    http://cm.bell-labs.com/cm/cs/who/dmr/bintro.html
  5. BCPL
    http://en.wikipedia.org/wiki/BCPL
  6. Ken Thompson
    http://en.wikipedia.org/wi­ki/Ken_Thompson_(computer_pro­grammer)
  7. Dennis Ritchie
    http://en.wikipedia.org/wi­ki/Dennis_Ritchie
  8. Brian Kernighan
    http://en.wikipedia.org/wi­ki/Brian_Kernighan
  9. Douglas McIlroy
    http://en.wikipedia.org/wi­ki/Douglas_McIlroy
  10. M. Douglas McIlroy, Adjunct Professor
    http://www.cs.dartmouth.edu/~doug/
  11. PDP-7
    http://en.wikipedia.org/wiki/PDP-7
  12. PDP-10
    http://en.wikipedia.org/wiki/PDP-10
  13. PDP-11
    http://en.wikipedia.org/wiki/PDP-11
  14. Road to Mac OS X Leopard Server: Collaborative Info Sharing Services
    http://www.appleinsider.com/prin­t/07/10/22/road_to_mac_os_x_le­opard_server_collaborative_in­fo_sharing_services.html
  15. PDP-1 Web Pages
    http://www.pdp-1.org/
  16. PDP-1 Restoration Process
    http://pdp-1.computerhistory.org/pdp-1/
  17. Programmed Data Processor
    http://en.wikipedia.org/wi­ki/Programmed_Data_Proces­sor
  18. Digital Equipment Corporation
    http://en.wikipedia.org/wi­ki/Digital_Equipment_Corpo­ration
  19. PDP-1
    http://en.wikipedia.org/wiki/PDP-1
  20. Ancient Computing Machinery
    http://www.ee.ryerson.ca/~elf/ancient-comp/index.html
  21. Spacewar – The first computer video game. Really!
    http://www3.sympatico.ca/mau­ry/games/space/spacewar.html
  22. Programmed Data Processor-1 Handbook
    http://www.dbit.com/~green­g3/pdp1/pdp1.html

Autor článku

Pavel Tišnovský vystudoval VUT FIT a v současné době pracuje ve společnosti Red Hat, kde vyvíjí nástroje pro OpenShift.io.