95 CHƯƠNG 14 : TỔCHỨCĐĨA CỦA HỆĐIỀUHÀNH MSDOS 14.1MỘT SỐ Ý NIỆM HệđiềuhànhMSDOStổ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ủaMSDOS đề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ềuhànhMSDOS 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ủaMSDOS đượ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ỦAMSDOS 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) . 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. 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