Tétel adatlapja
CÍMLAP
Csizmazia Balázs
Nyílt rendszerek alapszoftverei

TARTALOM, BEVEZETÉS



Tartalom

1. Bevezetés
1.1 Folyamatok
1.2 Fájlok
1.3 Memóriakezelés
1.4 A shell
1.5 Védelem
1.6 INPUT/OUTPUT
1.7 Operációs rendszerek belső szerkezete
1.8 Osztott rendszerek architekturája
1.8.1 A távoli eljáráshívás
1.8.2 Üzenetszórás
1.9 Holtpont
1.10 Az Intel 80386 mikroprocesszor architektúrája
1.11 Szabványok
1.12 Objektum-orientált felületek
1.12.1 Egyszerű köpeny
1.12.2 Specializált köpeny
1.12.3 Objektum-orientált köpenyek tervezése
1.13 Mi lesz még
1.14 Kérdések, feladatok

2. A UNIX operációs rendszer
2.1 Néhány alapvető UNIX-beli fogalom
2.2 Folyamatok a UNIX rendszerben
2.3 A folyamatok közötti kommunikáció (IPC) a UNIX rendszerben
2.4 A UNIX fájlrendszere
2.5 A UNIX shelljei
2.6 Védelem a UNIX operációs rendszerben
2.7 A UNIX INPUT/OUTPUT rendszere
2.7.1 A UNIX architekturájának modernizálása
2.8 Kérdések, feladatok

3. Rendszerhívások
3.1 Folyamatokat kezelő rendszerhívások
3.2 A fájlrendszer rendszerhívásai
3.2.1 Alapvető, fájlokkal kapcsolatos rendszerhívások
3.2.2 A fájlrendszer és a memóriakezelő kapcsolata
3.3 Egyéb, fájlokkal kapcsolatos rendszerhívások
3.4 Fájlok konkurrens elérése
3.5 Kivételes események kezelésének rendszerhívásai
3.5.1 A signalok feladata
3.5.2 Hagyományos signalkezelési technikák
3.5.3 POSIX signal-szemantika
3.6 Még egy kicsit a folyamatokról
3.7 INPUT/OUTPUT eszközöket vezérlő rendszerhívás
3.8 Egyéb rendszerhívások
3.9 Egy összetettebb példa: a shell
3.10 Daemon folyamatok
3.11 POSIX-threadek
3.11.1 POSIX threadek létrehozása és megszüntetése
3.11.2 POSIX threadek identitása
3.11.3 POSIX threadek szinkronizációja
3.11.4 Mutexek illetve őrfeltétel-változók attributumai
3.11.5 Könyvtárak thread-biztossága
3.11.6 Folyamatok kommunikációja a UNIX-ban
3.12 Kérdések

4. Hálózatok
4.1 A hálózati kapcsolat modellje
4.2 A TCP/IP protokollcsalád
4.2.1 A fizikai és az adatkapcsolati szint
4.2.2 A hálózati szint (IP)
4.2.3 A transzport szint
4.3 TCP/IP konfiguráció
4.3.1 Hálózati csatlakozók
4.3.2 IP cím beállítása
4.3.3 ARP és RARP protokollok
4.3.4 Routing táblák
4.4 Kérdések, feladatok

5. A Berkeley socket-ok
5.1 Egy összeköttetés-alapú kliens-szerver kapcsolat menete
5.2 Egy nem összeköttetés-alapú kliens-szerver kapcsolat menete
5.3 Socketok címzése az Internet domainben
5.4 Konverzió a hálózati- és host byte-ábrázolásmód között
5.5 Kommunikációs végpont (socket) létrehozása
5.6 Socket címének kijelölése
5.7 Kapcsolat létrehozása
5.8 Adatátvitel összeköttetés-alapú kapcsolatok esetén
5.9 Adatátvitel nem összeköttetés-alapú kapcsolatok esetén
5.10 Kapcsolat (socket) lezárása
5.11 Több socket párhuzamos figyelése (select)
5.12 A kommunikációs partner címének megszerzése
5.13 Hálózatokkal kapcsolatos könyvtári segédfüggvények
5.13.1 Hostnévről IP-címre transzformáció
5.13.2 Hálózati szolgáltatások adatbázisa
5.14 A socketokkal kapcsolatos további rendszerhívások
5.14.1 TCP sürgős adat továbbítása
5.14.2 A socketokhoz kapcsolódó SIGIO és SIGURG signalok
5.14.3 UDP broadcast lehetőség
5.14.4 Socket aszinkron üzemmódra állítása
5.15 Példák a socket rendszer használatára
5.15.1 Példa egy egyszerű iteratív összeköttetés-alapú szerverre
5.15.2 Példa egy összeköttetés-alapú kliensre
5.15.3 Példa egy select-et használó összeköttetés-alapú szerverre
5.15.4 Példa egy konkurrens összeköttetés-alapú szerverre
5.15.5 Példa egy összeköttetés-mentes (datagram) szerverre
5.15.6 Példa egy összeköttetés-mentes (datagram) kliensre
5.16 A hálózati réteg (IP protokoll) elérése

6. Security
6.1 Tervezési elvek
6.2 A felhasználó azonosítása
6.3 A 4.3BSD UNIX r-programjai
6.4 A Kerberos illetékesség-vizsgáló protokoll
6.5 Tanácsok setuid root programok írásához

7. A rendszermag szerkezete
7.1 A folyamatok kezelése
7.1.1 A folyamatkezelés adatszerkezetei
7.1.2 A folyamatkezelés rendszerhívásai
7.1.3 Ütemezési kérdések
7.2 A memóriakezelő implementációja
7.2.1 A régióműveletek
7.2.2 A régió rendszer adatszerkezetei
7.2.3 A lapozás implementálása
7.2.4 A programbetöltés
7.3 Az eszközmeghajtók implementációja
7.4 A buffer cache szerepe és implementációja
7.5 A fájlrendszer implementációja
7.5.1 A diszken tárolt adatszerkezetek
7.5.2 Az adatszerkezeteken operáló műveletek
7.5.3 Allokációs stratégiák
7.5.4 Fájlnévről - i-node-ra transzformáció
7.5.5 A rendszerhívás interfész
7.6 A kommunikációs alrendszer implementációja
7.7 Kérdések

8. A UNIX SYSTEM V STREAMS programozása
8.1 Bevezetés
8.1.1 Alapfogalmak
8.1.2 A STREAMS előnyei
8.1.3 A STREAMS rendszer vezérlése
8.1.4 A STREAMS üzenettípusai
8.1.5 Egy STREAMS-et használó program
8.1.6 Az ide tartozó rendszerhívások
8.2 A STREAMS driverek felépítése
8.2.1 Mire kell vigyázni egy driver készítésekor
8.2.2 STREAMS szolgáltatások
8.2.3 Kritikus szakaszok védelme
8.2.4 Fontosabb adatszerkezetek
8.2.5 További hasznos tanácsok
8.2.6 A driver hibaüzenetei
8.2.7 A driver listája
8.2.8 A driver kernelbe linkelése
8.2.9 Driver installálás ISC UNIX alatt
8.2.10 Még egy példa: a birka modul
8.2.11 Egy egyszerű debug modul
8.2.12 Flush kezelése a driverben
8.3 Egy STREAMS loopback driver
8.3.1 Driver interface strukturák
8.3.2 További deklarációk
8.3.3 Loopback driver start rutinja
8.3.4 Loopback driver open rutin
8.3.5 Loopback driver close rutin
8.3.6 Loopback driver service rutin
8.3.7 Egy loopback drivert használó program
8.4 Multiplexer driverek
8.4.1 A multiplexerek elemei
8.4.2 Egy multiplexer összerakása
8.4.3 Multiplexer ioctl-ek
8.4.4 Input/Output események figyelése
8.5 A kernel segédrutinjai
8.5.1 STREAMS-specifikus hívások
8.5.2 Általánosan használható kernel rutinok
8.6 Kérdések
8.7 Ajánlott irodalom



Bevezetés

A számítógépen futó programokat két csoportba szokás osztani: a rendszerprogramok csoportjára, és a felhasználói programok csoportjára. A rendszerprogramok közül a legalapvetőbb az operációs rendszer. Ennek feladata egyrészt az, hogy eltakarja a bonyolult hardver elemek programozását a programozó elől, másrészt pedig ez a szoftver felelős a hardver erőforrásoknak a programok közti elosztásáért, az egyes hardver erőforrások védelméért.

Az operációs rendszerek az utóbbi évtizedekben nagyon nagy fejlődésen mentek keresztül. Az első generációs számítógépekben még nem használtak operációs rendszereket. Megjelenésük a második generációhoz kötődik: a bonyolultabb hardver rendszerekre egyre bonyolultabb operációs rendszereket építettek, majd megjelent a multiprogramozás, a mai operációs rendszerek egy lapvető fontosságú tulajdonsága. A multiprogramozásnak két változata van: a többtaszkos (multitasking) illetve a többfelhasználós (multi user) rendszer (ez a két forma nem zárja ki egymást). A többfelhasználós rendszerekben egy központi egységen osztozik több felhasználó, de a központi egység nagy sebessége miatt minden felhasználó úgy érzi, hogy egy saját gépe van, amin dolgozik. A többtaszkos rendszer annyit tud, hogy ott egy felhasználó egyszerre több feladatot indíthat el, és az elindított feladatok egyszerre (párhuzamosan) fognak végrehajtódni.

Az operációs rendszerekkel kapcsolatban a jelenlegi kutatások a hálózati operációs rendszerek körében történnek. Ezekben a rendszerekben a számítógépek valamilyen dróttal össze vannak kapcsolva, és a felhasználó az operációs rendszer segítségével ezeken a drótokon keresztül adatokat vihet át az egyik gépről a másikra; az egyik gépről (mondjuk Magyarországról) bejelentkezhet egy másik számítógépre (például Kanadába), és Magyarországról úgy dolgozhat, mintha közvetlenül a kanadai számítógép egy képernyőjén dolgozna. Az, hogy az általa begépelt karakterek illetve a végeredmények milyen módon jutnak el tőle Kanadába (és onnan vissza Magyarországra) rejtve marad előle. A kommunikáció történhet akár telefonvonalakon, akár műholdon keresztül - a lényeg az, hogy az információ eljusson az egyik helyről a másikra. Az operációs rendszer feladata ilyenkor az, hogy a megbízhatatlan, rossz minőségű telefonvonalakon egy megbízható kommunikációs csatornát biztosítson a felhasználóknak, amiben az egyik gépről a másikra küldött adatok "nem kallódnak el", és az adatokat a fogadó állomás az elküldés sorrendjében kapja meg.

Eddig már számtalan sok operációs rendszer készült, mindegyik más céllal, más problémakör megoldására. Ma a legelterjedtebb ilyen rendszerek (többek közt): az OS/360, a CP/CMS, a VAX VMS, a UNIX és az MS-DOS. Már elég idő volt ahhoz, hogy a legfontosabb absztrakciós szintek és szolgáltatástípusok kialakuljanak. Ezek a szolgáltatások a hagyományos operációs rendszerekben két fő témakörbe sorolhatók: folyamatokkal (processzekkel) kapcsolatos, és a fájlokkal kapcsolatos absztrakciós eszközök. A továbbiakban ezekről lesz szó kicsit részletesebben.