14.1MOÔT SOÂ YÙ NIEÔM
Heô ñieău haønh MSDOS toơ chöùc löu tröõ thođng tin tređn ñóa theo caùc volume.
Ñoâi vôùi Floppy disk, moêi ñóa laø moôt volume.
Ñoâi vôùi ñóa cöùng, moêi DOS Partition laø moôt volume. Moêi volume töông öùng vôùi moôt oơ ñóa logic (A,B,C,D,E...)
MSDOS volume ñöôïc chia thaønh nhieău ñôn vò löu chöùa thođng tin baỉng nhau gói laø cluster. Moêi cluster laø moôt taôp hôïp goăm n sector lieđn tieâp nhau. Trong moôt volume, caùc cluster ñeău coù kích thöôùc nhö nhau .
Moêi file döõ lieôu ñöôïc löu giöõ trong moôt hay nhieău cluster tuøy theo kích thöôùc cụa file. Chuoêi caùc cluster theo thöù töï löu giöõ thođng tin cụa moôt file ñöôïc gói laø moôt cluster chain. Ñeơ ghi nhôù veă tình tráng cụa caùc cluster trong volume, MSDOS duøng moôt caâu truùc gói laø bạng FAT (File Alocation Table). Ñađy laø moôt ma traôn vôùi moêi phaăn töû ñái dieôn cho moôt cluster. Giaù trò ghi nhôù trong moêi phaăn töû töôïng tröng cho tình tráng cụa cluster maø noù ñái dieôn.
Moêi moôt file, ngoaøi caùc thođng tin ñöôïc löu giöõ coøn coù caùc ñaịc tröng rieđng nhö teđn file, ngaøy giôø táo laôp ... Caùc thođng tin naøy ñöôïc ghi nhaôn trong moôt danh saùch ñaịc bieôt gói laø thö múc (directory) . Moêi phaăn töû trong thö múc gói laø moôt directory entry.
Moêi volume cụa MSDOS ñeău coù moôt vuøng daønh rieđng gói laø root directory. Trong ñoù coù moôt soâ löôïng xaùc ñònh caùc directory entry ñeơ löu giöõ thođng tin veă caùc file.
Ñeơ môû roông khạ naíng löu tröõ file, töø version 2.0, heô ñieău haønh MSDOS cho pheùp ghi nhôù caùc directory entry theo cung caùch töông töï nhö ghi nhôù thođng tin cụa caùc caùc file döõ lieôu. Caùc file ñaịc bieôt chư löu chöùa caùc directory entry naøy ñöôïc gói laø caùc thö múc con (sub directory).Khi caùc thö múc con chính bạn thađn noù lái löu chöùa caùc mođ tạ cụa caùc thö múc con khaùc, khaùi nieôm cađy thö múc ñöôïc thaønh hình.
14.2CAÂU TRUÙC VOLUME MSDOS
Moôt volume cụa MSDOS ñöôïc chia thaønh caùc phaăn chính theo thöù töï nhö sau:
Boot record (sector ñaău tieđn cụa volume) Caùc bạng FAT (thöôøng coù 2 bạng)
Root directory
Data (ñöôïc chia thaønh caùc cluster - töø 2 trôû ñi) 14.3CAÂU TRUÙC CỤA MSDOS BOOT RECORD
Media Descriptor
| ValueMedia Types |
|---|--- FFH2 sides, 8 sectors per track | FEH1 side, 8 sectors per track | FDH2 sides, 9 sectors per track | FCH1 side, 9 sectors per track | F9H2 sides, 15 sectors per track | F8Hfixed disk |
---
--- |Offs|Size| Contents Version
|----|----|---<--
| 0003E9 XX XX or EB XX 90 (JMP to bootstrap routine)|
|----|----|--- |
| 0308OEM name and version |
|----|----|--- |
| 0B02Bytes per sector|
|----|----|--- |
| 0D01Sector per allocation unit (cluster size)|
|----|----|--- |
| 0E02Reserved sertors (size of boot record)| 2.x |----|----|--- |
| 1001Number of FATs|
|----|----|--- |
| 1102Number of directory entries|
|----|----|--- |
| 1302Total sectors in volume (0 if volume size>32MB)|
|----|----|--- |
| 1501Media descriptor byte |
|----|----|--- |
| 1601Number of sertors per FAT |
|----|----|---<--
| 1802Sertor per track|
|----|----|--- |
| 1A02Number of heads| 3.x
|----|----|--- |
| 1C02Number of hidden sector (LowWord)|
|----|----|---<--
| 1E02Number of hidden sector (HiWord)|
|----|----|--- |
| 2004Total sectors in volume (volume size>32MB)|
|----|----|--- |
| 2401Physical drive number |
|----|----|--- |
| 2501Reserved | 4.x
|----|----|---5.x
| 2601Extended boot signature (29H)| 6.x
|----|----|--- |
| 270432-bit binary volume ID |
|----|----|--- |
| 2B0BVolume label|
|----|----|--- |
| 3608Reserved |
|----|----|---<--
|| Bootstrap routine |
14.4CAÂU TRUÙC CỤA FAT(FILE ALOCATION TABLE)
Moêi bạng FAT chieâm 1 hay nhieău sector. Moêi bạng FAT ñöôïc chia thaønh nhieău phaăn töû ñöôïc ñaùnh soâ töø 0. Coù hai loái kích thöôùc cho caùc phaăn töû cụa FAT:12 bit vaø 16 bit.
Phaăn töû thöù 0 vaø thöù 1 cụa FAT ñöôïc daønh rieđng cho caùc mođ tạ nhö sau:
Byte thöù nhaât seõ mang giaù trò cụa media descriptor byte. Caùc byte coøn lái mang giaù trò FFh
Phaăn töû thöù 2 trôû ñi ñái dieôn cho caùc cluster trong vuøng data. Caùc giaù trò ghi trong caùc phaăn töû naøy cho bieât tình tráng cụa caùc cluster töông öùng nhö sau:
0 : cluster coøn troâng.
0002h - FFEFh : cluster ôû giöõa chain. Giaù trò löu chöùa chính laø soâ hieôu cụa cluster keâ tieâp trong chain.
FFF0h - FFF7h : cluster daønh rieđng (khođng ñöôïc söû dúng).
FFF7h : cluster bò hoûng
FFF8h - FFFFh : cluster cuoâi cuøng trong chain.
14.5CAÂU TRUÙC CỤA DIRECTORY ENTRY
Offs Size Contents
==== ==== ================================================================
+0 8 |’F’ ‘I’ ‘L’ ‘E’ ‘N’ ‘A’ ‘M’ ‘E’| left-justified, blank-padded |---|---
+8 3 |’E’ ‘X’ ‘T’| left-justified, blank-padded |---|---|----
+0bH 1 |atr| file attribute (*) |--- - - ---
+0cH 0aHreserved |
|---|--- - - Ó----
+16H 2timetime created or last modified in filetime format (*) |---
+18H 2datedate created or last modified in filetime format (*) |---
+1aH 2 |ClstrNo| cluster number of start of file (link into FAT) |---
+1cH 4file sizefile size in bytes ---
File attribute format [7|6|5|4|3|2|1|0]
|a|d|v|s|h|r|
UØ—UÙÓUÙÓUÙÓUÙÓUÙÓUÙEÔ bit description
||OÂÔÙ> 0: 1=file is Read-only (can’t be written/deleted)
|| OÂÔÙÔÙÔÙ> 1: 1=Hidden
|OÂÔÙÔÙÔÙÔÙÔÙ> 2: 1=System
| OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙ> 3: 1=Volume label entry OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙ> 4: 1=subDirectory entry
OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙ> 5: Archive bit. 1=file has NOT been backed up File time format
[5|4|3|2|1|0|9|8UÙ7|6|5|4|3|2|1|0]
hourminutesec/2 |
UØ---ÔÕ---EÔ
OÂÔÙÔÙÔÙOÊÔÙÔÙÔÙEÊ OÂÔÙÔÙÔÙÔÙOÊÔÙÔÙÔÙÔÙEÊ OÂÔÙÔÙÔÙOÊÔÙÔÙÔÙEÊ
| OÂÔÙÔÙÔÙÔÙ> second/2
OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙ> minute
OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙ> hour File date format
[5|4|3|2|1|0|9|8UÙ7|6|5|4|3|2|1|0]
yearmonthday | UØ---ÔÕ---EÔ
OÂÔÙÔÙÔÙÔÙÔÙOÊÔÙÔÙÔÙÔÙÔÙEÊ OÂÔÙÔÙOÊÔÙÔÙEÊ OÂÔÙÔÙÔÙOÊÔÙÔÙÔÙEÊ
| OÂÔÙÔÙÔÙÔÙ> day
OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙ> month
OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙ> year-1980 (0-119 valid) Byte ñaău tieđn cụa filename mang caùc yù nghóa nhö sau:
Giaù trò 0 : directory entry coøn troâng (chöa duøng ñeân) Giaù trò E5h : directory entry ñaõ bò xoùa boû
Caùc giaù trò khaùc : directory entry ñang ñöôïc söû dúng Ñoâi vôùi thö múc con:
File size luođn baỉng 0 --> kích thöôùc thö múc chư coù theơ suy töø FAT.
Entry ñaău coù name laø . (moôt daâu chaâm) mang thođng tin veă vò trí, ngaøy giôø táo laôp, cluster baĩt ñaău cụa chính thö múc con ñoù.
Entry thöù hai coù name laø .. (hai daâu chaâm) mang thođng tin veă vò trí, ngaøy giôø táo laôp, cluster baĩt ñaău cụa thö múc chöùa thö múc con ñoù. (neâu giaù trò cluster baỉng 0 --> thö múc mé laø root)
14.6MINH HÓA VEĂ TOƠ CHÖÙC FAT VAØ THÖ MÚC
starting cluster number ÔÙÔÙEƠ
Directory [---v---]
Entry ÔÙÔÙ |M Y F I L E T X T|a| |tim|dat|08size | UØ---|---EÔ
OẴÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙEÊ 00 01 02 03 04 05 06 07 |8 09 0a 0b 0c 0d 0e 0f ---v---
00 |ID||ff||03=>04=>05=>ff||00||00||09=>0a=>0b=>15||00||00||00||00|
---|--- OẴÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙÔÙEÊ ---v---
10 |00||00||00||00||00||16=>17=>19||f7||1a=>1b=>ff||00||00||00||00|
---|---AÙ--- OÂÔÙÔÙÔÙÔÙÔÙÔÙÔÙEÊ
14.7LOGICAL SECTOR
Caùc sector trong moôt volume ñöôïc MSDOS ñaùnh soâ töø 0 trôû ñi. Caùc sector vôùi caùch ñaùnh soâ nhö vaôy gói laø logical sector. Veă bạn chaât, logical sector vaø relative sector töông töï nhau. Veă phöông dieôn tính toaùn, relative sector baỉng vôùi logical sector coông theđm vò trí baĩt ñaău cụa volume.
Ta neđn duøng interrupt 25h ñeơ ñóc caùc logical sector. interrupt 26h ñeơ ghi caùc logical sector.
Input: AL = drive number (0=A, 1=B, etc.) DX = sector baĩt ñaău
DS:BX = Îbuffer
CX = soâ löôïng sector ñóc/ghi (<FFFFh)
CX = FFFFh --> taùc vú tređn BIG DOS partitions (>32M) DS:BX = Ñòa chư cụa transfer packet (10 bytes)
DS:[BX+0] sector baĩt ñaău (DWORD)
DS:[BX+4] soâ löôïng sectors ñóc/ghi (WORD) DS:[BX+6] offset cụa buffer (WORD)
DS:[BX+8] segment cụa buffer (WORD) Output: CF = 1 --> AX = error code
Löu yù : + Taât cạ caùc thanh ghi seõ bò thay ñoơi tröø DS, ES, SS, SP
Caùc interrupt naøy keât thuùc baỉng leônh retf, do ñoù seõ ñeơ lái côø hieôu trong stack khi keât thuùc.
Logical sector baĩt ñaău cụa moôt cluster tính baỉng cođng thöùc sau : root—sects = (RootSize * 32) / SecSize
first—data = ResSecs + (FatSize * FatCnt) + root—sects logical—sector = first—data + ((cluster—no - 2) * ClusSize)
CHÖÔNG 15 :