Tervezési döntések a népszerű operációs rendszer mögött

A mű eredeti címe: An Inside Look at MS-DOS (The design decisions behind the popular operating system)
Szerzője: Tim Paterson, az eredeti kiadást itt olvashatod

A magyar fordítást több részletben fogjuk közölni, fordítója és gondozója a weboldal szerkesztője.
Törekedtem arra, hogy a szöveg magyarrá váljon, így sok kifejezést is a megszokott - vagy nem megszokott - módon lefordítottam.


1. részlet

Bevezető

A személyi számítógépekre szánt operációs rendszerek feladata, hogy a felhasználó számára a gép alapvető irányítását tegye lehetővé. Egy kevésbé egyértelmű funkciója, hogy a felhasználót elássa egy magas szintű, platform független interfésszel, ami felhasználói programokat képes futtatni, így azok két különböző gépen is működőképesek lesznek, függetlenül a gépek eltérő hardware kiépítésétől. A cég tervezett egy 8086 mikroprocesszor kártyát az S-100 buszhoz, de nem talált hozzá megfelelő lemez operációs rendszert, a Seattle Computer Products megtervezte az MS-DOS-t. Manapság az MS-DOS a legelterjedtebb operációs rendszer személyi számítógépekhez, melyek az Intel 8086 és 8088 processzorokra épülnek.

MS-DOS tervezési kritériumok

Az MS-DOS elsődleges tervezési szükséglete volt a CP/M-80 fordítási kompatibilitás képessége, úgy értve, ha egy 8080 vagy Z80 program a CP/M-hez, az Intel publikált szabályai szerint lett lefordítva egy 8086-os processzorra, az működjön helyesen az MS-DOS alatt. A CP/M-80 fordítási kompatibilitás, mint szempont elősegítette a a 8086-os szoftverek fejlődését, amiben, természetesen a Seattle Computer érdekelt volt. A siker részleges volt: azok a szoftver fejlesztők akik úgy döntöttek, hogy a CP/M-80 programjaikat fordítják le, úgy tapasztalták, hogy valóban lefut a program MS-DOS alatt, gyakran az első próbálkozásra. Sajnos, eleinte sok szoftver fejlesztő akikkel a Seattle Computer beszélt, figyelmen kívül hagyta az MS-DOS-t. Amíg be nem jelentették az IBM Personal Computer-t, ezek a fejlesztők úgy érezték, hogy a CP/M-86 lesz A operációs rendszere a 8086/8088 alapú számítógépeknek.

Az MS-DOS kialakításában döntő tényező volt a sebesség és hatékonyság. A hatékonyság leginkább azt jelenti, hogy a lehető legtöbb hely legyen elérhető a merevlemezen adattárolásra, úgy hogy minimalizálódjon a keletkező szemét és többlet terhelés. A sebesség problémáját három irányból is támadták: a lemez transzferek számának minimalizálásával, a szükséges lemez transzferek a lehető leggyorsabban megtörténnek, és csökkentik a DOS "számítási idejét", amit egy applikációs program többlet terhelésnek tekint. A teljes fájlstruktúra és lemez interfész a legnagyobb sebesség és hatékonyság elérésére lett kifejlesztve.

Az utolsó tervezési elvárás az volt, hogy az MS-DOS-t assembly nyelven kell megírni. Míg ez a jellemvonás valóban elősegíti a sebesség és hatékonyság szükségességét, a mellékelésének az oka sokkal egyszerűbb. Abban az időben, a Seattle Computer egyetlen elérhető 8086 szoftver-fejlesztő eszköze egy assembler volt ami egy Z80-ason CP/M-et futtatott, és a monitor/debugger ami elfért egy 2Kbyte-os EPROM-on (törölhető programozható csak olvasható memória). Az összes ilyen eszköz házi fejlesztés volt.

MS-DOS felépítése, szerveződés

Az MS-DOS magja egy eszközfüggetlen bemenet/kimenet (I/O) kezelő, mely a rendszer lemezen található, a titkos MSDOS.SYS fájl formájában. Elfogad kéréseket az applikációs programoktól, hogy magas szintű I/O műveleteket végezzen, úgy mint például a lemezen lévő fájlok szekvenciális vagy véletlen elérése, vagy olyan karakter alapú eszközökkel való kommunikáció, mint a konzol. A kezelő feldolgozza ezeket a kéréseket és átalakítja őket egy nagyon alacsony szintű formába, hogy az I/O rendszer feldolgozhassa. Mivel az MSDOS.SYS hardware független, így majdnem az összes MS-DOS verzióban megegyezik... Relatív helye a memóriában, lásd az 1. ábrát.

1. ábra: Az MS-DOS által hozzárendelt memória területek térképe

Az I/O rendszer totálisan eszköz függő, és a lemezen található IO.SYS nevű titkos fájl képviseli. Általában hardware előállítók írják, (ugyan ki ismeri a legjobban az eszközét) az IBM figyelemre méltó kivételével, akiknek az I/O rendszere a Microsoft által az IBM-nek írt specifikációjára épül. Az I/O rendszer szükséges feladatai, úgy mint pl. küldeni 1 byte-ot egy karakter alapú eszköznek, vagy a memóriába olvasni a fizikai lemez egy folytonos bizonyos csoportnyi szektorát, a lehető legegyszerűbb.

A parancs feldolgozó szolgáltatja a standard interfészt a felhasználó és az MS-DOS között és a látható COMMAND.COM fájl tartalmazza. A feldolgozó célja, hogy parancsokat fogadjon el a konzoltól, találja ki mi mit jelent, és hajtsa végre a funkciókat a helyes sorrendben, hogy elvégezze a feladatot. Valójában csak egy szokványos applikációs program ami teszi a dolgát, miközben csak a standard MS-DOS kéréseket használja. Tulajdonképpen lecserélhető bármilyen más programra, ami biztosítja a szükséges felhasználói interfészt.

Ennek ellenére a COMMAND fájlnak két speciális szerepe is van. Először, beállítja az összes általános hiba kezelőt egyaránt a merevlemez hibákhoz, vagy pl. a Control-C megszakító parancshoz. Az MSDOS.SYS nem nyújt alapértelmezett hiba kezelést ... a megszakító vektor beállítása, és a megfelelő hibaüzenet biztosítása a COMMAND feladata (vagy bármilyen más program amivel lecserélik).

A második különleges szerepe, hogy a COMMAND két darabra osztja magát, úgy mint resident és transient szekciók. A resident az MS-DOS fölött ül, az alacsony memóriában, és ez a központi kód, ami magában foglal hiba keresést, batch fájl kezelést, és a transient újratöltését. A transient interpretálja a felhasználói parancsokat; a memória magas végén található, ahol felülírható bármilyen applikációs programmal (némelyik olyan sok memóriát igényel, amennyit csak megkap). Ennek a különlegességnek nincs olyan nagy szerepe ha a rendszerben sok központi memória van, és nincs szükség csere programokra a COMMAND-hoz melyek ezt imitálják.

A COMMAND egyaránt biztosít egy hasznos beépített parancs készletet, és a képességet, hogy program fájlokat futtasson a lemezről. Az összes .COM, .EXE, vagy .BAT kiterjesztéssel végződő fájl, lefuttatható a COMMAND által, egész egyszerűen be kell gépelni a fájl nevét (kiterjesztés nélkül). Általában ezeknek a programoknak paraméterek is megadhatóak a parancssorban, úgy mint a beépített parancsok. Összefoglalásképp, a hatás az, hogy a felhasználó kapjon egy parancskészletet, ami szinte korlátok nélkül bővíthető, csak azáltal, hogy a parancs program fájlként van a lemezen.

A három különböző, programnak megadható kiterjesztés, tükrözi a fájl belső formátumát.
A .COM fájlok tiszta bináris programok, képesek futni a 8086-os bármely memória szegmensén; hogy ez lehetővé váljon, a programnak és az adatoknak optimális esetben egyetlen 64K-byte szegmensben kell lennie.
A .EXE fájlokhoz tartozik egy header fájl lokációs információval, így a program tetszőleges számú szegmenst használhat; az összes interszegment referencia a betöltés idején módosításra kerül, hogy megfeleljen az aktuális betöltési szegmensnek.
A .BAT (kötegelt/batch) fájlok szöveges fájlok parancsokkal, amit a COMMAND sorban hajt végre.


1. részlet vége

A cikksorozat következő része (2. részlet)