Tải bản đầy đủ (.pdf) (5 trang)

Tổ chức đĩa của hệ điều hành MSDOS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (53.28 KB, 5 trang )

95
CHƯƠNG 14 : TỔ CHỨC ĐĨA CỦA HỆ ĐIỀU HÀNH MSDOS
14.1MỘT SỐ Ý NIỆM
Hệ điều hành MSDOS tổ chức lưu trữ thông tin trên đóa theo các volume.
Đối với Floppy disk, mỗi đóa là một volume.
Đối với đóa cứng, mỗi DOS Partition là một volume. Mỗi volume tương ứng với một ổ đóa logic
(A,B,C,D,E...)
MSDOS volume được chia thành nhiều đơn vò lưu chứa thông tin bằng nhau gọi là cluster. Mỗi
cluster là một tập hợp gồm n sector liên tiếp nhau. Trong một volume, các cluster đều có kích thước như
nhau .
Mỗi file dữ liệu được lưu giữ trong một hay nhiều cluster tùy theo kích thước của file. Chuỗi các
cluster theo thứ tự lưu giữ thông tin của một file được gọi là một cluster chain. Để ghi nhớ về tình trạng
của các cluster trong volume, MSDOS dùng một cấu trúc gọi là bảng FAT (File Alocation Table). Đây là
một ma trận với mỗi phần tử đại diện cho một cluster. Giá trò ghi nhớ trong mỗi phần tử tượng trưng cho
tình trạng của cluster mà nó đại diện.
Mỗi một file, ngoài các thông tin được lưu giữ còn có các đặc trưng riêng như tên file, ngày giờ tạo
lập ... Các thông tin này được ghi nhận trong một danh sách đặc biệt gọi là thư mục (directory) . Mỗi phần
tử trong thư mục gọi là một directory entry.
Mỗi volume của MSDOS đều có một vùng dành riêng gọi là root directory. Trong đó có một số
lượng xác đònh các directory entry để lưu giữ thông tin về các file.
Để mở rộng khả năng lưu trữ file, từ version 2.0, hệ điều hành MSDOS cho phép ghi nhớ các
directory entry theo cung cách tương tự như ghi nhớ thông tin của các các file dữ liệu. Các file đặc biệt chỉ
lưu chứa các directory entry này được gọi là các thư mục con (sub directory).Khi các thư mục con chính
bản thân nó lại lưu chứa các mô tả của các thư mục con khác, khái niệm cây thư mục được thành hình.
14.2CẤU TRÚC VOLUME MSDOS
Một volume của MSDOS được chia thành các phần chính theo thứ tự như sau:
Boot record (sector đầu tiên của volume)
Các bảng FAT (thường có 2 bảng)
Root directory
Data (được chia thành các cluster - từ 2 trở đi)
14.3CẤU TRÚ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
|----|----|--------------------------------------------------<--
96
| 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 CUÛA FAT (FILE ALOCATION TABLE)
97

Mỗi bảng FAT chiếm 1 hay nhiều sector. Mỗi bảng FAT được chia thành nhiều phần tử được đánh
số từ 0. Có hai loại kích thước cho các phần tử của FAT:12 bit và 16 bit.
Phần tử thứ 0 và thứ 1 của FAT được dành riêng cho các mô tả như sau:
Byte thứ nhất sẽ mang giá trò của media descriptor byte. Các byte còn lại mang giá trò FFh
Phần tử thứ 2 trở đi đại diện cho các cluster trong vùng data. Các giá trò ghi trong các phần tử này
cho biết tình trạng của các cluster tương ứng như sau:
0 : cluster còn trống.
0002h - FFEFh : cluster ở giữa chain. Giá trò lưu chứa chính là số hiệu của cluster kế tiếp trong
chain.
FFF0h - FFF7h : cluster dành riêng (không được sử dụng).
FFF7h : cluster bò hỏng
FFF8h - FFFFh : cluster cuối cùng trong chain.
14.5CẤU TRÚ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|
Ù—ÚĨÚĨÚĨÚĨÚĨÚỆ bit description
||ỐỚ> 0: 1=file is Read-only (can’t be written/deleted)
|| ỐỚỚỚ> 1: 1=Hidden
|ỐỚỚỚỚỚ> 2: 1=System
| ỐỚỚỚỚỚỚỚ> 3: 1=Volume label entry
ỐỚỚỚỚỚỚỚỚỚ> 4: 1=subDirectory entry
ỐỚỚỚỚỚỚỚỚỚỚỚ> 5: Archive bit. 1=file has NOT been backed up

File time format
[5|4|3|2|1|0|9|8Ú7|6|5|4|3|2|1|0]
hourminutesec/2 |
98
Ù--------Ợ--------Ệ
ỐỚỚỚỖỚỚỚỄ ỐỚỚỚỚỖỚỚỚỚỄ ỐỚỚỚỖỚỚỚỄ
| ỐỚỚỚỚ> second/2
ỐỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚ> minute
ỐỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚ> hour
File date format
[5|4|3|2|1|0|9|8Ú7|6|5|4|3|2|1|0]
yearmonthday |
Ù--------Ợ--------Ệ
ỐỚỚỚỚỚỖỚỚỚỚỚỄ ỐỚỚỖỚỚỄ ỐỚỚỚỖỚỚỚỄ
| ỐỚỚỚỚ> day
ỐỚỚỚỚỚỚỚỚỚỚỚỚỚ> month
ỐỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚ> year-1980 (0-119 valid)

Byte đầu tiên của filename mang các ý nghóa như sau:
Giá trò 0 : directory entry còn trống (chưa dùng đến)
Giá trò E5h : directory entry đã bò xóa bỏ
Các giá trò khác : directory entry đang được sử dụng
Đối với thư mục con:
File size luôn bằng 0 --> kích thước thư mục chỉ có thể suy từ FAT.
Entry đầu có name là . (một dấu chấm) mang thông tin về vò trí, ngày giờ tạo lập, cluster bắt đầu
của chính thư mục con đó.
Entry thứ hai có name là .. (hai dấu chấm) mang thông tin về vò trí, ngày giờ tạo lập, cluster bắt đầu
của thư mục chứa thư mục con đó. (nếu giá trò cluster bằng 0 --> thư mục mẹ là root)
14.6MINH HỌA VỀ TỔ CHỨC FAT VÀ THƯ MỤC
starting cluster number ỚỚỂ
Directory [----------------------------------------------v--------]

Entry ỚỚ |M Y F I L E T X T|a| |tim|dat|08size |
Ù--------------------------|-----Ệ
ỒỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỄ
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|
---------------------------------------------|------------------
ỒỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỄ
---------------------v------------------------------------------
10 |00||00||00||00||00||16=>17=>19||f7||1a=>1b=>ff||00||00||00||00|
-----------------------------|-------Á--------------------------
ỐỚỚỚỚỚỚỚỄ
14.7LOGICAL SECTOR
Các sector trong một volume được MSDOS đánh số từ 0 trở đi. Các sector với cách đánh số như vậy
gọi là logical sector. Về bản chất, logical sector và relative sector tương tự nhau. Về phương diện tính
toán, relative sector bằng với logical sector cộng thêm vò trí bắt đầu của volume.

Ta nên dùng interrupt 25h để đọc các logical sector. interrupt 26h để ghi các logical sector.
Input: AL = drive number (0=A, 1=B, etc.)
DX = sector bắt đầu
99
DS:BX = Ỵbuffer
CX = số lượng sector đọc/ghi (<FFFFh)
CX = FFFFh --> tác vụ trên BIG DOS partitions (>32M)
DS:BX = Đòa chỉ của transfer packet (10 bytes)
DS:[BX+0] sector bắt đầu (DWORD)
DS:[BX+4] số 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 ý : + Tất cả các thanh ghi sẽ bò thay đổi trừ DS, ES, SS, SP
Các interrupt này kết thúc bằng lệnh retf, do đó sẽ để lại cờ hiệu trong stack khi kết thúc.
Logical sector bắt đầu của một cluster tính bằng công thức sau :
root—sects = (RootSize * 32) / SecSize
first—data = ResSecs + (FatSize * FatCnt) + root—sects
logical—sector = first—data + ((cluster—no - 2) * ClusSize)

×