Ugrás a tartalomhoz

Operációs rendszerek mérnöki megközelítésben

Benyó Balázs, Fék Márk, Kiss István, Kóczy Annamária, Kondorosi Károly, Mészáros Tamás, Román Gyula, Szeberényi Imre, Sziray József

Panem Kiadó

5.2. A UNIX rövid története

5.2. A UNIX rövid története

Az 1960-as évek végén a Bell Telephone Laboratories, a General Electric és az MIT közös projektben vett részt, amelynek célja egy többfelhasználós operációs rendszer kifejlesztése volt. A projekt kudarcba fulladt, de a Bell laboratórium egyik munkatársa, Ken Thompson, 1969-ben egy „Űrutazás” játékot fejlesztett egy PDP-7-es gépre, amihez egy kényelmes futtatási környezetre volt szüksége. Ez motiválta a UNIX kezdetleges változatának a kifejlesztését. (Mint azt ebből is láthatjuk, a nagy dolgokat leginkább az emberi elme játékos hajlama lendíti előre.) A programozási környezet első elemét egy állományrendszer alkotta, ami a későbbiek folyamán a System V állományrendszerré nőtte ki magát. Ennek a felépítését az 5.3.6. alfejezet részletesen tárgyalja.

A programozási környezet egyre népszerűbbé vált a laboratórium munkatársainak körében, de a továbblépéshez a legnagyobb lökést a C nyelvre való áttérés jelentette, amit Dennis Ritchie, Thompson kollégája fejlesztett ki. Ennek óriási jelentősége volt a UNIX fejlesztésében és jelentős szerepet játszott a későbbi gyors terjedésében. A UNIX-ot ettől kezdve már magas szintű programozási nyelven írták, illetve arra törekedtek, hogy az implementáció amennyire csak lehet, hardverfüggetlen legyen. Ehhez modularizálták a rendszer felépítését, elválasztották a hardverfüggő részeket a hardverfüggetlen részektől, és az előbbiek kivételével mindent C-ben kódoltak. Az előbbit hatékonysági okokból továbbra is alacsony szinten írták meg.

A nagy népszerűségnek köszönhetően Thompson és Ritchie 1971-ben pub­likálta az első UNIX kézikönyvet. Mivel ekkor egy 1956-os trösztellenes törvény miatt az AT&T nem jelenhetett meg a számítógép piacon, a UNIX-ot (forráskód formájában is) ingyenesen az oktatási intézmények rendelkezésére bocsátotta, ami meggyorsította a UNIX elterjedését. Azonban minden éremnek két oldala van: a gyors terjedés mellett ettől kezdve a UNIX-nak rengeteg egymástól eltérő változata jelent meg, ami a későbbiekben jelentős problémát eredményezett.

A kaliforniai Berkeley Egyetem 1974-ben jutott hozzá egy UNIX-licensz­hez. A használat során számos hasznos kis programmal egészítették ki, illetve módosításokat eszközöltek rajta. Ennek eredményeként létrejött a Ber­keley Software Distribution (BSD), ami ma a UNIX egyik legelterjedtebb alapváltozatát fémjelzi. A másik legjelentősebb alapváltozat a System V a UNIX-ot útjára bocsátó AT&T nevéhez kötődik. Számos kereskedelmi változat is megjelent a piacon, amelyek általában valamelyik alap UNIX-változatra építve értéknövelt szolgáltatásokat nyújtottak, illetve a rendszer bizonyos részeit kereskedelmi alkalmazásokra alkalmassá tették. A legismertebb változatok: a Sun cég SunOS változata, ami a 4.2BSD-n alapul, majd a későbbi Solaris változatok, amik már a System VR4 rendszert vették alapul, a Santa Cruz Operation kidolgozta a System VR3 alapjaira építve Intel processzorra az SCO UNIX-ot, az IBM az AIX-et (ami elsők között alkalmazott kereskedelmi napló alapú (journaling) állományrendszert), a Hewlett-Packard Corporation megjelent a HP UX rendszerével, és a Digital piacra dobta az Ultrix-ot (majd később a DEC OSF/1-et, amit Digital UNIX-ra kereszteltek). Az Ultrix volt az egyik első többprocesszoros UNIX-rendszer.

A UNIX elterjedéséhez, mint azt már korábban láttuk, nagyban hozzájárult, hogy eleinte ingyen hozzá lehetett jutni a forráskódhoz, viszont egyben ez jelenti ma az egyik legnagyobb problémát, ugyanis számos, egymástól többé-kevésbé eltérő változat jelent meg. Az utóbbi időben a probléma orvoslására több szabványosítási kísérlet is megindult. A legtöbb gyártó megegyezett pár szabványban. Ezek közé tartozik az AT&T System V Interface Definition (SVID) szabványa, az IEEE POSIX-szabvány (amit az 5.5. alfejezet részletesen tárgyal) és az X/Open konzorcium X/Open Portability Guide. Ezen szabványok mindegyike a programozó és az operációs rendszer közötti interfésszel foglalkozik, és nem törődik annak megvalósításával. Az 1990-ben megjelentetett POSIX1003.1 szabvány (elterjedt nevén POSIX.1) ötvözi az SVR3 és a 4.3BSD lényegi részeit. Széles körű elfogadásának egyik oka, hogy a szabvány egyik UNIX-változat mellett sem kötelezi el szorosan magát (lásd az 5.5. alfejezetet).

A rendszer fejlődésével egyre bővült, gazdagodott a rendszer nyújtotta szolgáltatások halmaza. Ezek közül talán a legfontosabbak a System V IPC-ként ismert folyamatok közötti kommunikációs eszközök, illetve a hálózati kommunikációt támogató eszközök, amik manapság már minden UNIX-változat kerneljében megtalálhatók.

A UNIX-rendszerek lépést tartanak a számítógépes hardvertechnológia fejlődésével. A leggyakrabban ez a rendszer átemelését (portolását) jelenti újabb processzorokra és architektúrákra. Ez általában nem okoz túl nagy gondot, hisz mint azt már láttuk, a rendszer számottevő része C-ben íródott. Néhány esetben azonban a rendszerfejlesztők lényegesen keményebb feladattal találják szemben magukat: jelentős módosításokat kell végrehajtani a kernelen. A hagyományos UNIX-ot egyprocesszoros rendszerekre tervezték, így annak idején nem tervezték bele az adatok védelmét több processzor konkurens adathozzáféréseivel szemben. Bizonyos gyártók ezt zárak bevezetésével orvosolták, míg mások radikálisan megváltoztatták a kernel szerkezetét.

A különféle hardvertechnológiák eltérő fejlődési sebessége jelentős hatást gyakorol az operációs rendszer tervezésére. Az első, PDP-7-esen futtatott UNIX-rendszer megjelenése óta a CPU sebessége körülbelül három nagyságrenddel gyorsult, a felhasználók rendelkezésére álló memória és diszk terület több mint egy nagyságrenddel növekedett, azonban a memória és a lemez sebessége alig duplázódott meg. A ’70-es években a UNIX teljesítményét a processzor sebessége és a memória mérete korlátozta, ezért a rendszer folyamatok háttértárra írásával (swapping) és lapozási technikákkal próbálta kezelni a memória gondokat. Az idő előre haladtával a memória és a CPU-sebesség okozta problémák egyre inkább elvesztették jelentőségüket, a rendszer egyre inkább B/K korlátozottá vált. Ez jelentős kutatásokat inspirált az állományrendszer, a virtuális memória kezelés és a tárolás megszervezésének a területén, hogy megbirkózzanak a lemezen tárolt adatok elérési ideje, mint szűk keresztmetszet okozta problémákkal. Megjelentek az újszerű elveken alapuló állományrendszerek (például journaling), illetve kidolgozták a RAID-technikát.

A technológia gyors fejlődése lehetővé tette újszerű alkalmazások kialakulását. Megjelentek a multimédiás alkalmazások, amik korlátos válaszidőket és erőforrás rendelkezésre állási garanciákat igényeltek. A beágyazott alkalmazások is hasonló igényeket támasztottak az operációs rendszerrel szemben. Ennek hatására a modern UNIX-rendszerek kernelében megjelentek ún. „puha valósidejű” (soft real-time) elemek. (Például a Solaris új változatai támogatják a soft real-time ütemezési algoritmusok alkalmazását.)

Az eredeti UNIX-rendszer egyik nagy erénye a kis méretében rejlett. Az egész kezdeti fejlesztés hűen tükrözte az „A kicsi szép” filozófiát. A hatékony működést egyszerű eszközök, építőkövek alkalmazása garantálta, amiket rugalmasan lehetett összeépíteni (az egyik legszebb példa erre a szűrők alkalmazása). A hagyományos UNIX-kernel azonban monolitikus és nehezen bővíthető volt. Ahogy egyre több funkcióval bővült, egyre inkább elhajlott a kezdeti filozófia irányától, egyre nagyobbá vált.

A továbbiakban áttekintjük a UNIX belső felépítését és tárgyaljuk a legfontosabb alrendszerek funkcióit és megvalósításait.