Lemez szerkezet
Lemez partíciós tábla
A merevlemez kezdeti szektorja tartalmazza a fő gyökér rekordot, amely a memóriába töltődik és végrehajtásra kerül.
Az ágazat utolsó része tartalmaz egy partíciós táblát - egy 4-elemes táblát, 16 bájtos elemekkel. Ezt a táblázatot manipulálja az FDISK program (vagy egy ezzel egyenértékű segédprogram egy másik operációs rendszerben).
A rendszerindításkor a ROM-BIOS betölti a fő gyökér rekordot, és átvezeti a vezérlést a kódjára. Ez a kód elolvassa a partíciós táblát, hogy meghatározza az aktívként megjelölt partíciót. Ezután a helyes gyökérszektor a memóriába kerül és végrehajtásra kerül.
1. táblázat: A fő gyökérrekord és a partíciós tábla felépítése
A gyökér rekord (MSB)
Az 1. szakasz leírása (lásd a 2. táblázatot)
2. szakasz Leíró
3. szakasz Leíró
4. szakasz Leíró
Aláírt partíciós tábla (AA55h érték)
2. táblázat: A szelvény fogantyújának szerkezete
A partíció aktivitásának jele (0 - nem aktív, 80h - aktív)
A lemez felszíni száma, ahonnan a partíció indul
A henger számát és az ágaszámot, ahonnan kezdődik a szakasz
A szakasz kódja (lásd a 3. táblázatot)
A lemez azon felülete, amelyen a partíció befejeződik
A henger számát és az ágaszámot, amelyen a szekció véget ér
A partíció kezdeti ágának abszolút (logikai) száma
Szekcióméret (szektorok száma)
A partíciós kódot használják az elsődleges és kiterjesztett partíciók jelenlétének és pozíciójának meghatározására a lemezen. Miután megtaláltuk a kívánt partíciót, méretét és koordinátáit kivonhatjuk a megfelelő leíró mezőkből. Ha 0 a szekciókód mezőben van írva, akkor a fogantyú üresnek tekinthető, vagyis nem határoz meg semmilyen partíciót a lemezen.
3. táblázat Microsoft operációs rendszer partíciókódjai
Ezek úgy vannak elrendezve, hogy amikor a CX-et 16 bites értékkel terheli, készen áll az INT 13h interrupt meghívására, hogy elolvassa a lemez kívánt részét. Így, miután elolvasta a fő boot rekordot a sect_buf memóriaterületen. kód
ellenőrzi, hogy az első partíció aktív-e és a kód
betölti a CX-t az INT 13h meghívására az 1. partíció gyökér szektorának olvasásához.
A szakaszok egyenletes henger számmal kezdődnek, kivéve az első szekciót, amely a 0 hengerrel, a 0 fejjel, a 2. szektorral kezdődik (mivel az 1. szektor a Master boot rekord elfoglalása).
Amikor a partíció gyökere megkapja a vezérlést, a DS: SI a megfelelő partíciós tábla bejegyzésre mutat.
A gyökérszektor felépítése
4. táblázat: Hajlékonylemez vagy merevlemez-partíció gyökérszektorának formátuma
NEAR-átmenet a letöltési kódra
Az OEM-cég neve és a rendszer verziója
a bájtok száma az ágazatban (mindig 512)
a klaszterben lévő ágazatok száma
a tartalék szektorok száma (a FAT # 1 előtt)
a FAT táblák száma
a gyökérkönyvtár 32 bájtos elemeinek száma (FAT32 - 0 esetén)
a szektorok teljes száma a médián (DOS partíció)
a média típusa (ugyanaz, mint a FAT első bájtja)
az ágazatok száma egy FAT-ban
szektorok száma pályánként
a rejtett szektorok száma (a szétválasztási rendszerekben használatos)
minden szektorban, ha a mérete> 32 MB
Kötetszám (sorozatszám)
Fájlrendszerazonosító (FAT12)
a letöltési kód és adatok megkezdése
megjegyzések:
- Médiatípusok:
- F0h - hajlékonylemez, 2 oldal, 18 ágazat a pályán;
- F8h - merevlemez;
- F9h - hajlékonylemez, 2 oldal, 15 ágazat a pályán;
- FCh - hajlékonylemez, 1 oldal, 9 szektor per track;
- FDh - hajlékonylemez, 2 oldal, 9 szektor a pályán;
- FEh - hajlékonylemez, 1 oldal, 8 szektor per track;
- FFh - hajlékonylemez, 2 oldal, 8 szektor per track.
Floppy paramétertáblázat
5. táblázat: A hajlékonylemez paraméterek táblázata
Az első bájtos specifikáció:
bitek 0-3 - a fejek betöltési ideje;
4-7 bitek - a fejek hossza
Fájlosztási táblázat (FAT)
A fájl mérete idővel változhat. Ha feltesszük a fájlt tároló csak a kapcsolódó ágazatokban, ahol nőtt az operációs rendszer fájl mérete teljesen átírni más alkalmas mennyiség (ingyenes) a korongon. Egyszerűsítése és felgyorsítása működésének hozzá új adatokat egy fájlt, a használt operációs rendszer a modern fájlallokációs tábla (File Allocation Table, rövidítve FAT), amely lehetővé teszi, hogy tárolja a fájlt nem folyamatos.
A FAT használatakor a logikai lemez adatterülete azonos méretű szakaszokra oszlik - klaszterek. A klaszter egy vagy több szekvenciából állhat egymás után egy lemezen. A fürtben lévő szektorok száma 2 N többszöröse lehet, és értéke 1-től 64-ig terjedhet (a fürtméret függ a használt FAT típusától és a logikai lemez hangerősségétől).
Minden egyes csoporthoz hozzárendeljük a saját elemét a FAT táblahoz. Az első két FAT elem fenntartva - ha a lemezen K adat fürtök vannak, a FAT elemek száma K + 2 lesz. A FAT-típust a K. érték határozza meg.- ha K <4085 - используется FAT12;
- ha 4084> K <65525 - используется FAT16;
- ha 65524> K-t használ a FAT32.
A FAT típusok neve az elem méretétől függ. Így a FAT12 elem 12 bit méretű, FAT16 - 16 bit, FAT32 - 32 bit. Tartsuk szem előtt, hogy a FAT32 felső négy bit van fenntartva, és figyelmen kívül hagyja az OS működését (azaz, amelyek érdemi csak hét junior hexadecimális számjegy elem).
A FAT olyan koherens lista, amelyet az operációs rendszer a lemezen található fizikai helymeghatározás nyomon követésére és az új fájlok szabad memóriájának keresésére használ.
Az egyes fájlok fájlkönyvtára (tartalomjegyzék) tartalmazza a kezdeti elem számát a FAT táblában, amely megfelel az első fürtnek a fájlelosztási láncban. A megfelelő FAT elem vagy a lánc végét jelzi, vagy a következő elemre utal, stb. például:
Ez a diagram a FAT alapvető fogalmát szemlélteti. Ez azt mutatja, hogy:- A MYFILE.TXT 10 klasztert foglal el. Az első klaszter a 08 klaszter, az utolsó klaszter 1Bh. A klaszterek láncolata: 08h, 09h, 0Ah, 0Bh, 15h, 16h, 17h, 19h, 1Ah, 1Bh. Minden egyes elem a lánc következő elemére mutat, és az utolsó elem egy speciális kódot tartalmaz (lásd a 7. táblázatot).
- A 18h klaszter hibás, és nem lép be az elosztási láncba.
- A 06h, 07h, 0Ch-14h és az 1Ch-1Fh klaszterek üresek és eloszlásra rendelkezésre állnak.
- Egy másik lánc kezdődik a 02h klaszterrel és a 05h klaszterrel fejeződik be. A fájl nevének megismeréséhez meg kell találnia a tartalomjegyzéket a 02h kezdeti fürtszámmal.
7. táblázat: A FAT elemek értékei
A következő elem klaszterszáma a láncban
A FAT általában a DOS-partíció 1. logikai szektorával kezdődik (azaz INT 25h-nál DX = 1-el olvasható). Általában el kell olvasnod a root_ectort (DX = 0), és el kell vetned a 0Eh eltolást. Azt jelzi, hogy hány gyökér- és tartalékszektor van a FAT-szal szemben. Ezután használja ezt a számot (általában 1) a DX tartalmaként. A FAT olvasása az INT 25h-n keresztül.
Több példány is lehet a FAT-ból. Általában két azonos másolat támogatott. Ezekben az esetekben az összes példány közvetlenül egymás mellett helyezkedik el.
megjegyzés:
- Általános tévhit alapján úgy gondolják, hogy egy 16 bites FAT nem teszi lehetővé a DOS számára, hogy 32 megabájtnál nagyobb lemezeken dolgozzon. Tény, hogy a határértékeket, hogy az INT 25h / 26h képtelen együttműködni a szektor, amely több mint 65.535 szoba Mivel a méret az ágazat általában 512 byte, kilobyte, vagy fél, hogy diktálja a 32 MB-os határt. Másrészről, semmi sem tiltja, hogy nagyobb szektorok legyenek, így elméletileg a DOS bármilyen lemezt használhat.
megjegyzés:
- A 12 bites elem átlépheti a két szektor határait, ezért legyen óvatos, ha a FAT egyik szektort olvas.
A 16 bites elemek egyszerűbbek - mindegyik elem tartalmaz egy 16 bites eltolást (a FAT kezdetétől) a lánc következő elemében.
32 bites elemek - mindegyik elem tartalmazza a lánc következő elemének 32 bites eltolását.
Programok írt assembly nyelven végző szorzás helyett 3 MUL parancsokat gyakran használt algoritmus „shift és kívül”: iskhrodnoe számot másolja a kópiaszám végezzük balra léptetés egy kicsit (szorzás 2), majd a két szám van kialakítva (x + 2x = 3x). A DIV parancs helyett egy jobb oldali eltolódást használunk.
A hajlékonylemez (vagy merevlemez-partíció) a következőképpen van felépítve:- gyökér- és tartalékágazatok;
- FAT # 1;
- FAT # 2;
- gyökérkönyvtár (nem létezik a FAT32-ben);
- adatterület.
A struktúra minden egyes szakaszában változó hosszúságú, és a fürtszám megfelelő átalakításához a szektorszámhoz ismerni kell az egyes szakaszok hosszát.
Ahhoz, hogy a start szektor számát a klaszter klaszter szám ClustNum (olvasni a megfelelő mezőt a címtárbejegyzésre a FAT lánc), akkor nem dokumentált 32h OS funkció, vagy olvassa el a gyökér szektor és az alábbi képletet alkalmazza:
kornevyh_sektorov = (RootSiz * 32) / 512 nachalo_dannyh = ResSecs + (FatSize * FatCnt) + = kornevyh_sektorov nach_sektor nachalo_dannyh + ((ClustNum - 2) * ClustSiz).
ahol a változók értékei: RootSiz. ResSecs. FatSize. FatCnt. A ClustSiz-t kivágják a gyökérszektorból vagy a BPB-ből (lásd a 4. táblázatot).
Állítsa be a DX = start_ector értéket az INT 25h vagy az INT 26h olvasása előtt.
Fájlkönyvtárak
A fájlok könyvtára egy 32 bájtos elem - fájlleíró. Az operációs rendszer szempontjából minden könyvtár (a FAT12 és a FAT16 rendszer gyökérkönyvtárának kivételével) úgy néz ki, mint a fájlok, és tetszőleges számú rekordot tartalmazhat.
A gyökérkönyvtár (gyökérkönyvtár) a meghajtó fő könyvtára, ahonnan kezdődik az alkönyvtárak fája. A logikai lemez rendszerterületén a FAT12 és a FAT16 gyökérkönyvtárában egy 512 elem tárolására tervezett, fix méretű (16 KB) speciális hely van elosztva. A FAT32 rendszerben a gyökérkönyvtár tetszőleges méretű fájl.
8. táblázat: A címtár szerkezete
Fájlok létrehozásakor a dátumok az MS-DOS-korszak kezdetétől számolódnak, azaz. 1980. január 1-jétől. A 9-15 bitek tartalmazzák az 1980-as évszámot (az érték 0 és 127 között van).
Hosszú fájlnevek
Kezdve a Windows 95-vel, a fájl hozzárendelhető (a rövid név mellett) egy úgynevezett hosszú név. Hosszú név tárolásához üres könyvtári bejegyzéseket használnak, a főelem mellett - a fájlleírót. A 0-3 byte attribútumok bitjeinek jelenléte azt jelzi, hogy a könyvtár szabad eleme egy hosszú fájlnév egy szakaszának tárolására szolgál (a fájlkezelők és könyvtárak ilyen kombinációja lehetetlen). A rövid és hosszú fájlnevek egyediek; Ne találkozz kétszer ugyanabban a könyvtárban.
A hosszú név nem ASCII karakterekben íródott, hanem Unicode formátumban, ahol minden nemzeti ábécé egy kódkészletnek felel meg. A Unicode sokoldalúságának költsége az információ tárolási sűrűségének csökkenése - minden karakter két bájtot (16 bites szó) foglal el. Az üres könyvtárbejegyzésekben egy hosszú név kerül megírásra a darabokban darabolt formában (lásd a 9. táblázatot).
9. Táblázat A könyvtárelem struktúrája, amely egy hosszú fájlnév töredékét tárolja
A névtöredék első része
Rövid név ellenőrző összege
A név töredékének második része
Az első klaszter számának (0-nak kell lennie)
A név töredékének harmadik szegmense
A hosszú nevet először a könyvtárba írják, és a töredékeket sorrendben rendezzük el, az utolsótól kezdve:
A hosszú név utolsó töredéke
A hosszú név második töredéke
A hosszú név első töredéke
Szabványos fájlleíró
A lemezinformációs blokkot a DOS 32h UNDOCUMENTED funkciója alkotja.
10. táblázat: A lemezinformációs blokk diagramja
A lemez száma (0 = A, 1 = B, stb.)
Eszköz eszköz száma az eszköz fejlécéből (egy illesztőprogram kezelhet több lemezt)
Az ágazat mérete bájtban
Az 1-es klaszterenkénti ágazatok száma (a klaszter maximális szektora)
A klaszter eltolódása az ágazathoz (klaszter = 2 szektor) (szektorok klaszterenként 2: 2 arányban 4, 3 8 esetében)
A tartalékszektorok száma (gyökér, a gyökér og. Kezdete) (a FAT első szektorának N-je)
A FAT táblák száma