630 likes | 719 Views
Operációs rendszerek. I/O és fájlkezelő alrendszer. A mai program. Az I/O alrendszer, különböző látásmódokkal Eszközök osztályai, eszköz-driverek Logikai diszk, partíció fogalom Fájlok, szervezettség, elérés Fájlrendszer megvalósítási feladatok jegyzékstruktúra megvalósítás,
E N D
Operációs rendszerek I/O és fájlkezelő alrendszer
A mai program • Az I/O alrendszer, különböző látásmódokkal • Eszközök osztályai, eszköz-driverek • Logikai diszk, partíció fogalom • Fájlok, szervezettség, elérés • Fájlrendszer megvalósítási feladatok • jegyzékstruktúra megvalósítás, • blokk hozzárendelés fájlokhoz, • szabad blokk menedzselés. • Unix fájlrendszer. Vadász
Az I/O alrendszer feladatai • Elrejteni az eszközök specialitásait • Kényelmessé tenni az eszközhasználatot • Menedzselni az eszközöket, fájlokat • védeni azokat, ütemezni, konkurens vagy kizárólagos hozzáféréseket biztosítani. • (A fájl absztrakció a felhasználók által leginkább ismert és használt absztrakció, amit az operációs rendszer nyújtani tud.) Vadász
Eszközök, másodlagos tárolók, fájlrendszer I/O alrendszer, eszközök Hozzáférések Eszköz driverek Másodlagos tárolók Fájlrendszer megvalósítás Buffer cache Jegyzékstruktúra, attribútumok rögzítése Blokkhozzárendelés Blokkmenedzselés Vadász
I/O rendszer a felhasználó szemszögéből • Szimbolikus neveken látja az eszközöket, fájlokat • Lát eszközöket (köztük logikai eszközöket), • látja a fájlok halmazát (file pool), • lát hierarchiát (ösvény, jegyzék stb. fogalmak, ezek “rendeznek“), fájl névteret. • A felhasználói felülettel (burok, v. GUI és segédprogramok) kezeli ezeket (készít, töröl, másol, mozgat, eszközt kezel stb.) • Ismer tulajdonossági és hozzáférési kategóriákat (védelem), beállít ilyeneket. • Bizonyos OS-ekben észlel fájl szervezési és fájl elérési módokat. Vadász
A programozó látásmódja • (Nyitott) csatornákat (stream) lát. Ezek azonosítója: fájl-leíró/pointer. • Nyithat/zárhat csatornákat (open, fopen, close, fclose). Nyitni: több dolgot jelent: • csatorna azonosítót kreál, pozíció indikátorral, • a csatornát összeköti szimbolikus névvel, • védelmeket kezel, beállít. • Azonosított csatornákon adatokat (byte/karakter, rekord, blokk stb.) mozgat. Ez függ az elérési módtól: • szekvenciális eléréssel, • direkt eléréssel. Vadász
A programozó látásmódja • Fájl nyitó-záró rendszerhívások • A fájlleíró processzenkénti objektum • Az adatmozgató rendszerhívások: read, write, put, get, putchar, getchar, seek stb. • Néha külön rendszerhívások a jegyzékekre opendir, readdir, rewinddir, mkdir, rmdir stb. Vadász
A programozó látásmódja Proc A fd1=open(”/etc/passwd”, O_READONLY) fd2=open(”local”, O_RDWR) fd3=open(”/etc/passwd”, O_WRONLY) Proc B fd1=open(”/etc/passwd”, O_READONLY) fd2=open(”private”, O_RDWR) Proc A descriptor table Inode list File table Proc B descriptor table A kernel globális táblái Vadász
Az OS I/O alrendszere • A kernel struktúráknál láttuk: van külön I/O alrendszer • Ennek feladata: • vezérlés, • interfész biztosítás, • védelem és menedzsment biztosítás. • Alapelvek: • Réteges struktúra, • eszközfüggetlenség biztosítása, • célszerűen elosztott a hibakezelés, • szinkronitás-aszinkronitás biztosítása, • osztható és dedikált eszközök, fájlok is kezelhetők. Vadász
I/O alrendszer szerkezet Vadász
Unix I/O alrendszer Vadász
NT I/O Manager alrendszer Vadász
A Linux többrétegű fájlrendszere Process 1 Process 2 Process n User mode Kernel mode VIRTUAL FILE SYSTEM … ext2 msdos minix proc Buffer cache Device drivers File system Vadász
Az eszköz „driverek” • Rutinkészlet + táblázatok + pufferek • “Megszólíthatók“: • felülről (call, IRPs), • alulról (IT). • Három fő részük: • Auto-konfigurációs inicializáló rutinok (egyszer futnak, az eszközt inicializálják), • I/O hívások rutinjai (Call-lal többször is megszólítódnak, alapvető szolgáltatók), • IT handlerek (IT-vel többször is). Vadász
Az eszköz driverek „felső” rétege • Setup: paramétereket juttat a driverhez • automatic detection • a setup argumentumokkal • Init: eszköz jelenlétét teszteli • Hívódik a kernel inicializáláskor • belső adatstruktúrákat, regisztereket generál az eszköz számára • open & release: inicializál standard értékekkel • hogy adminisztrálni lehessen az eszközt • visszaad/megszüntet egy leírót az eszközhöz • processz nyithat kizárólagosan magának, vagy osztottnak Vadász
Az eszköz driverek „középső” rétege • Read & Write: a szokásos szolgáltatások • IOCTL: eszköz-specifikus parancsok készlete • Select: vizsgáló • vizsgálja, hogy lehet-e írni, olvasni • a lekérdezős (polling) technikához jó • nem minden eszközhöz, és lehet az IOCTL-ben • Mmap: leképzés a felhasználói címtartományra • nincs minden eszköznél, de • fájlrendszert tartalmazónál hasznos lehet • Lseek: indikátor mozgató • Nincs minden driver-nél, lehet IOCTL-ben Vadász
Az eszköz driverek „alsó” rétege • IT kezelők: értelemszerűen • Check_media_change & revalidate: • blokkos cserélhető eszközhöz • észreveszi a medium cserét, annak paramétereivel aktualizálja az adatstruktúrákat • kérdés, hogy ne a felső réteghez tartozónak vegyük-e Vadász
A DLLs & VxDs • DLL: Dynamic Link Library • Csak ha kérelem van, akkor töltődik be (egyfajta overlay) • Kérelmeket fogad és szolgál ki (sokszor úgy, hogy a kérelmeket speciális formában továbbadja) • VxD: Virtual anything Device • A rétegezettségi koncepció miatt virtuális eszközöket valósít meg • A "kezelő" rutinjai valószínűleg nem IT-vel szólítódnak meg (hanem call jelleggel, pl. IRP-vel) • Elvileg lehet DLL Vadász
Milyen eszközök vannak? • Karakteres eszközök (pl. billentyű, soros port, képernyő, analóg-digital átalakító stb.). • Strukturálatlanul (pl. karakter-folyamként) kezel, • (Néha sor (line) strukturáltság van!) De! • A driver fölött szűrés lehet. • Diszk is kezelhető karakteresen. • Strukturált (blokkos) eszközök (diszkek). • blokkos I/O-val is kezelhetők, • fájl-rendszer is alakíthatók ki rajtuk, • a buffer cache gyorsító mechanizmuson át használjuk Vadász
Diszkek, blokk orientált eszközök • Blokknyi egységben történik az adatáramlás. • Oldal-sáv-(cilinder)-szektor (blokk) fogalmak • adattárolási egység a szektor (blokk), • oldal-sáv-szektor címek léteznek, • Az oldal-sáv-szektor címek leképezhetők folyamatos logikai blokkcímekre (ezt a kontroller végezheti): felülről 0-n-ig számozott blokkok sorának láthatjuk. • Logical Disk képezhető a fizikai diszkre. Oka: egységesítés, egyszerűbb driverek. Vadász
Logikai diszk, partíció • Egy fizikai diszken több 0-ni -ig számozott blokk sora, több logikai diszk a képzet. • Mindegyiknek saját szimbolikus neve van. • Mindegyiknek saját driver-e van. • A partíciók (egyes OS-eknél) átlapolódhatnak. • Egy partíciót kijelölhetünk • egy OS boot területének (erről indítunk), • kilapozási/kisöprési területnek (virt. mem.), • egy OS fájlrendszer területének, • hibás blokkok helyettesítő területének (ma már nem szükséges). Vadász
A partícionálás • Részben az OS-től független dolog! • “Alacsonyabb“ szintű SW-ek kellenek • a partíció létrehozásához, • a boot partíció kijelöléséhez, • a “magasabb“ driver-ek támogatásához. • Alacsonyabb? Mi általában egy OS-t használunk. ezek a SW-ek szinte minden OS-ben megvannak, használhatók (akár más OS “javára“). • A partíciókat az OS-ek nem egyformán kezelik. Vannak OS-ek, melyek pl. kötött számú partíciót engednek, nem mindig látják egymás fájlrendszereit stb. Vadász
Diszkek, partíciók - kötetek • Partícionálással egy nagy diszket részekre osztunk • Néha szükség lenne kisebb diszkeket (partíciókat) összevonva, egyetlen nagy diszkként "látni": ez a kötetesítés • Némely OS tudja ezt … pl. AIX, Windows, NT • A kötet: logikai diszk, szervezhető rá fájlrendszer … van drivere ... Vadász
A Unix eszközök szimbolikus nevei • Unix-ban minden fájl. Az eszközök: speciális fájlok, a /dev/ jegyzékben, aljegyzékeiben ... • Tartalmuk (rövid): • major device number: azonosítja a kontrollert, • minor device number: azonosítja a • tényleges eszközt (pl. logikai diszket), és a • device driver-t. Vadász
Partíciókra osztás Unixban /dev/dsk/0s0 /dev/dsk/0s1 /dev/dsk/0s2 /dev/dsk/0s3 /dev/dsk/0s4 /dev/dsk/0s6 /dev/dsk/0s5 Vadász
A fájlok • Mi a fájl? • Fájl szervezettség (organisation) lehet • Byte-ok sora (nincs szervezettség), csakis a processzek strukturálhatnak. • Rekordok sora (szekvenciális). A rekordokban mezők. Fix, változó rekordhossz, rekordok blokkokba csoportosítva stb., mindezek a fájlban (fájlrendszeren) rögzítettek. Nem minden OS biztosítja. • Index-szekvenciális szervezettségű rekordok: egyes mezők a rekordokban kulcsmezők, ezek rendezettek, a rekordok gyors keresését teszik lehetővé. Nem minden OS biztosítja. Vadász
A fájlok • A fájl elérés: • soros elérés: egy adatelem (byte, rekord) eléréséhez az előzőeken “át kell jutni“. Minden szervezettségnél lehetséges. • direkt (random) elérés: egy adatelem eléréséhez nem kell a többiekkel foglakozni. Csak az indexelt és bizonyos szekvenciális (fix rekordhosszúságú) szekvenciális szervezettségnél. (A Unix seek hívással lehetővé teszi. ) • Fájl típusok a tartalmuk szerint is kialakíthatók (text, dokumentum, futtatható, bináris, jegyzék, fifo stb.) Vadász
A fájlok • Fájl attribútumok: • név, • készítési, módosítási, elérési dátumok/idők, • tulajdonossági és védelmi információk, • szervezettségi adatok (hossz, rekordhossz, blokkolási tényezők stb.), • néha a • tartalom szerinti típusukra vonatkozó adatok, • a logikai diszken való elhelyezkedésükre vonatkozó információk. Vadász
Fájlrendszer megvalósítások • Partíciókra szervezhetünk fájlrendszert. • 3 dolgot kell megoldani valahogy: • adott (szimbolikus) fájlnévhez hogyan rendelhetjük az attribútumokat, kiváltképp a fájl “testét“ képező blokkokat? (Megfelelő sorrendben persze.) (Keresni, hozzáfűzni, elengedni blokkokat) • A partíción a szabad blokkok menedzselésehogyan történjen? (Keresni szabad blokkokat, elengedni (szabaddá tenni) blokkokat.) • Kiindulás: jegyzékstruktúra alakítandó ki. Rögzíteni kell az attribútumokat is. Vadász
Blokkhozzárendelés fájlokhoz (A) Folyamatos allokáció • Jegyzékben a név mellet a kezdő blokk cím és a hossz. A fájl blokkjai egymás után, folyamatosan • Egyszerű, teljesítményre optimalizált allokáció • Fájlkészítésnél megbecsülni a várható hosszt, választani a lehetséges szabad folytonos területekből (best-, worst-, next fit) • Nehézkes a hozzáfűzés (append) meglévő fájlhoz. • Fregmentálódik a partíció, időnként compaction szükséges • Tisztán ezt ma már nem használják • HPFS/NTFS kiterjesztésein (extent, run) folyamatos allokáció van. Annyira mégsem elavult? Vadász
Blokkhozzárendelés fájlokhoz (B) Láncolt (lista) allokáció • Jegyzékben a név mellett az első blokk címe (esetleg hossz). • Az adott blokkban mutató a következő blokkra. • Az utolsó blokkban a mutató a véget jelez(het)i. • Egyszerű, nincs partíció-fregmentáció, van ugyan fájl-fregmentáció, könnyű a hozzáfűzés stb. • Gond: hosszú fájlok végének eléréséhez végig kell menni a láncolt listán. • Gond: A mutató a blokkokon “elvesz“ területet a fájl adataitól. Hossz-számítás. Vadász
Blokkhozzárendelés fájlokhoz (B) File a, starts at 4 File b, starts at 6 7 a első blokkja a második blokkja NULL a utolsó blokkja 12 b első blokkja b második blokkja NULL b utolsó blokkja 2 6 4 7 12 28 Láncolt listás allokáció Vadász
Blokkhozzárendelés fájlokhoz (C) Indextáblás allokáció • A jegyzékben az első blokk/első index (és a hossz). • Indextábla: egy bejegyzése egy-az-egy megfeleltetésben a blokkokkal (i-edik bejegyzéshez az i-edik blokk tartozik). Az indextábla kötött helyen a diszken. • Egy bejegyzés az indextáblában kettős jelentésű: • a bejegyzés index-száma jelzi, az ugyanolyan számú blokk a fájl blokkja. • maga a bejegyzés a soron következő blokk (egyben index is), vagy a lista vége. • Tulajdonképp láncolt lista, de a mutatók ki vannak emelve az indextáblába. • Nem zárja ki az optimalizált allokációs lehetőségeket Vadász
Indextáblás allokáció indextábla blokkok 012345678910111213… 28 ... NULL712xy… NULL ... 012345678910111213… 28 ... a utolsó blokkja a első blokkja b első blokkja a második blokkja b második blokkja… b utolsó blokkja ... File a, starts at 4 File b, starts at 6 Vadász
Blokkhozzárendelés fájlokhoz (C) Indextáblás allokáció (folyt) • Egyszerű. Ma is használatos. Közepesen gyors hosszú fájloknál is (Csak az indextáblát kell végigolvasni). • Gond: nagy blokkszámnál nagy az indextábla. Megoldása: • Blokkokat “cluster“-ekbe szervezik, az indextábla ezeket címezi. • Persze, területvesztés lehet itt. • In-core indextábla pedig gyorsítja az elérést. • Ilyen a VAX/VMS, és tulajdonképpen a DOS FAT is. Vadász
Blokkhozzárendelés fájlokhoz (D) • I indexes, i-bögös, i-listás allokáció (i, inode, i-list) (Unix, Linux ext2 stb.) • Egyéb, vegyes, i-listához hasonló bögös megoldások (HPFS, NTFS stb.) Vadász
Szabad blokk menedzselés (A) • Bit térképes (bitmap) • Kötött helyen a bit-térkép. Lehet elosztott térkép is. • Egy-az-egyes megfeleltetés egy bit és a blokkok (clusterek) között. • Ha egy bit bebillentett: azt jelenti, a hozzá tartozó blokk foglalt. • Ilyen a VAX/VMS, HPFS, NTFS, Linux ext2 • Bit térkép helyett mező-térképes is lehet (ilyen a DOS FAT, a VFAT). A FAT egybevont indextábla és szabad bokk/cluster menedzselő térkép: egy bejegyzés harmadik funkciója: a foglaltság jelzése. • Tetszőleges allokációs politikát kiszolgálhat. Vadász
Szabad blokk menedzselés (B) Láncolt listás szabad blokk menedzselés • Kötött helyről indulva mutató egy szabad blokkra, melyben mutató van a következő szabad blokkra s.í.t. • Hátránya, hogy a lista kezelése lassú (diszkműveletek kellenek). • Egyszerű allokációs politikája lehet: lista elejéről allokálunk, lista elejére tesszük a felszabadulót. (Esetleg a végére.) Vadász
Szabad blokk menedzselés (C) Szabad helyek csoportjainak listája • (Az előző teljesítményének javítására) • Kötött helyről indulva egy blokk mutatókat tartalmaz szabad blokkokra, • egy mutatója viszont további olyan blokkra mutat, ami további szabad blokkok csoportját jegyzi fel s.í.t. • Blokk foglalás esetén a lista elején lévő blokkon feljegyzett szabad blokkokat allokáljuk, blokk felszabadításkor ide tesszük a felszabadult blokkok mutatóit. Belátható a teljesítmény javulás: kevesebb I/O művelet. • Ha a lánc eleji blokkról „kifogytak” a szabad blokkok, maga a lánc eleme is felhasználható (Unix s5fs megoldás)! Vadász
Szabad blokk menedzselés (D) Egybefüggő szabad területek nyilvántartása • Kötött helyen lévő táblázat bejegyzései az egyre magasabb című, egybefüggő szabad blokkcsoportok kezdő mutatóját és blokkban mért hosszát tárolják. • Hozzá illő allokációs politika a folyamatos allokáció (best-, worst-, next fit). • A lapozó eszköz menedzselésénél szokták alkalmazni Vadász
Jegyzék implementációk • A jegyzék is fájl. Blokkhozzárendelés jegyzékhez akár a szokásos fájlhoz való blokkhozzárendeléssel, akár speciálisan történhet. • Tartalma: bejegyzései fájlneveket, kezdő címet (hosszat, esetleg bizonyos attribútumokat) tartalmaz. Kötött vagy változó hosszú lehet. • A bejegyzések struktúrája befolyásolja a keresést: • lineáris keresés (nem rendezett, hézagos bejegyzések), • hash táblás keresés, • b-fás (rendezett) jegyzékben a keresés. Vadász
Unix fájlrendszer • Itt minden fájl: az eszközök is a fájlrendszerben, a fájlrendszer pedig blokkos eszközre (partícióra, kötetre) szervezett. • Minden fájlhoz tartozik ún. i-bög (i-node). • Az i-bögök az ún. i-listán vannak. • Egy i-bög szinte mindent tartalmaz a hozzá tartozó fájlról. Ha ismered: elérheted a fájl blokkjait. • A szabad blokk menedzselést az ún. szuperblokkból kiinduló szabad blokkok listája segíti: ezen lista eleme maga is szabad blokk. Vadász
Egy Unix partíció szerkezete 0 boot block 1 super block 2 i-bög tábla (i-list) . . data blocks n Vadász
A Unix i-bög szerkezete Directory file1 i-bög mode & védelem linkek száma tulajdonos uid gid fájl méret Adat blokk Direkt mutatók Single indirekt Double indirekt Triple indirekt Utolsó hozzáf. Utolsó mód. Készítési idõ Vadász
Unix jegyzékek • SVID-ben 16 bájt hosszúak a bejegyzések (névhossz max. 14) • BSD-ben a “chunk“-ok 255 kar. hosszú neveket is megengednek. BSD szerkezet SVID szerkezet Vadász
Hogyan “szerzik“ meg az i-bögöt? • A namei algoritmus. • Elemzi az ösvény egy-egy komponensét, minden nevet az ösvényből i-böggé konvertál, a bög segítségével megnézi, jegyzék-e. Ha nem az visszatér jelezve ezt a tényt. Ha jegyzék veszi i-bögjét, a jegyzékben keresi a következő komponenst, sít. Végül visszatér az input ösvény i-bögével, vagy hibajelzéssel. • root jegyzék i-böge a szuperblokkban, • jegyzékből kikeresi a nevet, veszi az i indexet, és ezzel “megragadta“ a következő jegyzéket-fájlt, s.í.t. • Gyors kereséshez: • in-core-i-node lista! • Az aktuális jegyzék i-böge processzenként feljegyezve! Vadász
Miért kell az i-bög? • Ha egy fájl i-bögét ismered, szinte mindent tudsz róla • ismered attribútumait • típusát & védelmi maszkját, • tulajdonosi viszonyait, • hosszát, • linkjeinek számát, • készítési és hozzáférési időit. • Ismered blokkjainak sorrendjét és helyét. Vadász
A fájl link • Célja: már meglévő fájlra más névvel is hivatkozhassunk. • Hard link: • új dir-bejegyzés készül, a már létező fájl i indexével! • Csak ugyanazon a fájlrendszeren! Hozzáférések? • Törléskor a linkek száma csökken! • Szoft link (symbolic link): • új fájl készül (új i-böggel), ebben az eredeti abszolút ösvényneve. • Mount-olt fájlrendszeren is! • Korrektebb védelmek! Vadász
Hard link-soft link > ln -s /usr/joe/foo /usr/sue/bar > ln /usr/joe/foo /usr/sue/bar 2. i-bög 16. i-bög 2. i-bög /usr/joe /usr/joe foo 2 foo 2 link=2 /usr/joe/foo /usr/sue /usr/sue bar 2 bar 16 A simbolic link A hard link Vadász
A szuperblokk tartalma ... ind ind • a fájlrendszer mérete; • a szabad blokkok száma; • a szabad blokkok listája + index a listán; • az i-lista mérete; • a szabad i-bögök száma; • a szabad i-bögök listája + index a listához; • lock mező a két listához; • jelző, hogy történt-e módosítás a szuperblokkban. Vadász