630 likes | 724 Views
Explore I/O subsystems, file organization, access methods, and file system implementation tasks. Learn how to manage devices, protect files, allocate blocks, and handle concurrent access. Understand the viewpoint of programmers and the structure of I/O systems from the user perspective.
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