Hướng dẫn thực hành Hệ điều hành - Bài 4: Truy xuất trực tiếp đĩa DIR, FORMAT

Nhắc lại: ðĩa mềm 1.44Mb có 2 head (side), mỗi head có 80 track, mỗi track có 18

sector, mỗi sector có kích thức 512 byte

Do ñó, tổng sốsector của ñĩa mềm là:

 2 (head) * 80 (track/head) * 18 (sector / track) =2880 sector.

2880 sector này ñược phân bổnhưsau:

Sector 0: Boot Sector

9 sector tiếp theo: bảng FAT1(File Allocation Table)

9 sector tiếp theo: bảng FAT2

14 sector tiếp theo: bảng thưmục gốc RDET(Root Directory Entry Table)

2847 sector còn lại: vùng chứa dữliệu DATA.

pdf7 trang | Chuyên mục: Hệ Điều Hành | Chia sẻ: dkS00TYs | Lượt xem: 4696 | Lượt tải: 4download
Tóm tắt nội dung Hướng dẫn thực hành Hệ điều hành - Bài 4: Truy xuất trực tiếp đĩa DIR, FORMAT, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa: DIR, FORMAT 
Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 1 
Hướng dẫn thực hành bài 4 
A. Lý thuyết 
1. Tổ chức dữ liệu trên ñĩa mềm 
Nhắc lại: ðĩa mềm 1.44Mb có 2 head (side), mỗi head có 80 track, mỗi track có 18 
sector, mỗi sector có kích thức 512 byte 
Do ñó, tổng số sector của ñĩa mềm là: 
 2 (head) * 80 (track/head) * 18 (sector / track) = 2880 sector. 
2880 sector này ñược phân bổ như sau: 
Sector 0: Boot Sector 
9 sector tiếp theo: bảng FAT1 (File Allocation Table) 
9 sector tiếp theo: bảng FAT2 
14 sector tiếp theo: bảng thư mục gốc RDET (Root Directory Entry Table) 
2847 sector còn lại: vùng chứa dữ liệu DATA. 
Sector 0 Sector 10 Sector 33 
Boot Sector 
(1 sector) 
FAT1 
(9 sector) 
FAT2 
(9 sector) 
RDET 
(14 sector) 
DATA 
(2880-1-9-9-14 sector) 
 Sector 1 Sector 19 
2. Cấu trúc Boot Sector 
OFFSET ðỘ DÀI 
(byte) 
NỘI DUNG 
0 3 Lệnh nhảy ñến ñầu ñoạn mã Boot 
3 8 Tên công ty hay version 
0Bh 2 Số byte cho 1 sector 
0Dh 1 Số sector cho 1 cluster 
0Eh 2 Số sector dành riêng 
10h 1 Số bảng FAT 
11h 2 Số entry tối ña cho Root 
13h 2 Tổng số sector trên ñĩa 
15h 1 Byte mô tả ñĩa 
16h 2 Số sector cho 1 bảng FAT 
18h 2 Số sector trên 1 track 
1Ah 2 Số head 
1Ch 4 Số sector dấu mặt 
20h 4 Tổng số sector trên ñĩa (nếu ở 13h bằng 0) 
24h 1 Số ñĩa vật lý 
25h 1 Dành riêng 
26h 1 Ký hiệu nhận diện MS-DOS4.xx 
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa: DIR, FORMAT 
Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 2 
27h 4 Serial number 
2Bh B Volume label 
36h 8 Dành riêng 
3Eh ? ðầu ñoạn mã chương trình 
3. Cluster 
- Khái niệm: 
o ðơn vị ñọc ghi trên ñĩa là sector, nhưng ñơn vị lưu trữ nội dung tập tin 
không phải là sector mà là cluster gồm N sector liên tiếp (N ≥ 1). 
o Mỗi vị trí ñể lưu trữ nội dung tập tin sẽ là 1 cluster. 
o Cluster chỉ tồn tại trên vùng dữ liệu. 
- Lý do phát sinh khái niệm cluster: 
o Nếu sector trên vùng dữ liệu quá nhiều thì có thể sẽ khó hoặc không quản 
lý ñược (phải dùng nhiều sector cho bảng FAT ñể ñánh ñịa chỉ) , khi ñó 
quản lý trên cluster sẽ dễ dàng hiệu quả hơn. 
o Nội dung tập tin thường chiếm nhiều sector và có thể không liên tục, mà 
thời gian ñọc ghi một lần n sector liên tiếp thường nhanh hơn nhiều so với 
thời gian ñọc ghi n lần mà mỗi lần chỉ 1 sector. Do ñó ñể tối ưu thời gian 
truy xuất tập tin thì cần chọn ñơn vị truy xuất là một khối nhiều sector. 
- Kích thước cluster nên là bao nhiêu sector: 
o Số sector trên 1 cluster nên là lũy thừa của 2 và có giá trị lớn hay nhỏ là 
tùy theo ñĩa. Nếu ta chọn kích thước cluster càng lớn thì sẽ càng lãng phí 
ñĩa vì một tập tin có kích thước nhỏ vẫn phải dùng một cluster – gồm 
nhiều sector ñể lưu, nhưng khi ñó sẽ hạn chế ñược sự phân mảnh của tập 
tin và vì vậy tập tin có thể an toàn hơn & truy xuất nhanh hơn. 
4. Cấu trúc bảng FAT (File Allocation Table) 
Một hệ thống tập tin sử dụng bảng FAT X sẽ sử dụng X bit ñể biểu diễn ñịa chỉ của một ô 
(cluster) trên vùng dữ liệu và biểu diễn ñược tối ña 2X ñịa chỉ. Ví dụ FAT8 sẽ sử dụng 8 
bit ñể biểu diễn tối ña 28 = 256 ñịa chỉ, FAT12 sử dụng 12 bit ñể biểu diễn tối ña 212 = 
4096 ñịa chỉ, FAT 16 sử dụng 16 bit ñể biểu diễn tối ña 216 = 65536 ñịa chỉ… Do vùng 
dữ liệu của ñĩa mềm gồm 2847 sector và 1 cluster bằng 1 sector, do ñó ta sẽ sử dụng 
FAT12 cho hệ thống tập tin trên ñĩa này là hiệu quả nhất (FAT8 không ñủ ñánh ñịa chỉ 
cho 2847 cluster, FAT16 quá dư…). 
Sử dụng FAT12 tức là sử dụng 12 bit cho mỗi ñịa chỉ. Vùng dữ liệu có tất cả 2847 cluster 
(= 2847 sector), do ñó cần: 
 2847 * 12 bit = 34164 bit = 4270.5 byte ≈ 8.34 sector 
Vậy muốn ñánh hết ñịa chỉ cho vùng dữ liệu bằng FAT12 thì phải sử dụng 9 sector cho 
bảng FAT. 
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa: DIR, FORMAT 
Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 3 
Cấu trúc bảng FAT như sau: 
0 X 
1 X 
2 EOF 
3 13 
4 2 
5 9 
6 8 
7 FREE 
8 4 
9 12 
10 3 
11 FREE 
12 EOF 
13 EOF 
14 FREE 
15 BAD 
Giá trị trong mỗi entry FAT: 
FAT12 FAT16 FAT32 Mô tả 
0x000 0x0000 0x?0000000 Cluster trống 
0x001 0x0001 0x?0000001 Cluster ñể dàng 
0x002 - 
0xFEF 0x0002 - 0xFFEF 
0x?0000002 
- 
0x?FFFFFEF 
Cluster ñã sử dụng; giá trị chỉ ñến cluster 
tiếp theo lưu trữ nội dung của tập tin 
0xFF0 - 
0xFF6 0xFFF0 - 0xFFF6 
0x?FFFFFF0 
- 
0x?FFFFFF6 
Giá trị ñể dành 
0xFF7 0xFFF7 0x?FFFFFF7 Cluster bị hư 
0xFF8 - 
0xFFF 0xFFF8 - 0xFFFF 
0x?FFFFFF8 
- 
0x?FFFFFFF 
Cluster cuối cùng của tập tin 
5. Cấu trúc bảng thư mục gốc RDET (Root Directory Entry Table) 
Là 1 dãy phần tử (entry), mỗi phần tử chứa tên & các thuộc tính của 1 tập tin trên thư 
mục gốc của volume (hoặc là phần tử trống – chưa thuộc về 1 tập tin nào hết). Mỗi entry 
có kích thước 32 byte, chứa các thông tin ñược tổ chức theo trật tự như sau: 
Chưa cấp phát 
Kết thúc tập tin 
Khối bị hỏng 
Tập tin A 
Tập tin B 
Tập tin C 
6 8 4 2 
5 9 12 
10 3 13 
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa: DIR, FORMAT 
Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 4 
OFFSET ðỘ DÀI 
(byte) 
NỘI DUNG 
0h (0) 8 Tên chính của tập tin 
Byte ñầu tiên có thể có các giá trị sau: 
0x00 Entry trống 
0x05 Initial character is actually 0xE5 
0x2
E 'Dot' entry; hoặc '.' or '..' 
0xE
5 Entry ñã bị xoá. 
8h (8) 3 Tên mở rộng 
Bh (11) 1 Thuộc tính (0-0-A-D-V-S-H-R) 
Thuộc tính 
Bit Mask Mô tả 
0 0x01 Read Only 
1 0x02 Hidden 
2 0x04 System 
3 0x08 Volume Label 
4 0x10 Subdirectory 
5 0x20 Archive 
6 0x40 Device (internal use only, never found on disk) 
7 0x80 Unused 
Nếu có giá trị là 0x0F thì entry này sủ dụng cho LFNs 
Ch (12) 10 Không dùng 
16h (22) 2 Giờ cập nhật tập tin 
18h (24) 2 Ngày cập nhật tập tin 
1Ah (26) 2 Cluster bắt ñầu 
1Ch (28) 4 Kích thước tập tin 
Do ñĩa mềm sử dụng 14 sector cho bảng thư gốc, vì vậy số entry tối ña trên thư mục gốc 
sẽ là: (14 sector * 512 byte/sector) / 32 byte/entry = 224 entry. 
Tên tập tin hợp lệ gồm các ký tự sau: 
- a – z, A – Z, 0 - 9 
- Khoảng trắng 
- ! # $ % & ( ) - @ ^ _ ` { } ~ ' 
- Các ký tự có mã ascii từ 128-255 
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa: DIR, FORMAT 
Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 5 
B. Thực hành 
1. VCT ñọc bảng thư mục gốc ñĩa mềm và hiển thị tên của các tập tin trên ñó. 
2. VCT ñọc toàn bộ bảng thư mục gốc ñĩa mềm và lưu vào 1 file. 
3. VCT ñọc bảng FAT của ñĩa mềm & lưu vào 1 file.. 
4. VCT xóa toàn bộ ñĩa. 
5. VCT liệt kê chuỗi cluster chứa nội dung tập tin của những tập tin ở thư mục gốc. 
Hướng dẫn: 
 Bài 1, 2: 
- Tạo cấu trúc sau cho một ENTRY: 
typedef unsigned char BYTE; 
typedef unsigned int WORD; 
typedef unsigned long DWORD; 
typedef struct tagENTRY{ 
BYTE FileName[8]; 
BYTE FileExt[3]; 
BYTE Attrib; 
BYTE Reserved[10]; 
WORD Time; 
WORD Date; 
WORD FirstCluster; 
DWORD FileSize; 
 }ENTRY; 
- Cấp phát (hoặc tạo mảng) có kích thước 224 lần ENTRY trên (ñúng bằng 14 
sector). 
- Dùng vùng ñệm trên ñể ñọc toàn bộ nội dung bảng thư mục gốc (14 sector bắt ñầu 
từ sector 19). 
 Bài 3: 
Do sử dụng FAT12 nên hệ thống sử dụng 12 bit ñể ñánh ñịa chỉ cho 1 ô (cluster). 
Tuy nhiên, ta không thể lấy giá trị của “1 byte rưỡi” cho nên 3 byte liên tục sẽ ñánh 
ñịa chỉ cho 2 ô liên tục, ví dụ: 
ABh CDh EFh  DABh EFCh : 3 byte liên tục biểu diễn ñịa chỉ cho 2 ô nhớ liên tục 
Cách nhớ: 
 Cho 2 byte theo thứ tự ñịa chỉ tăng dần, muốn tạo 1 word ta sẽ dùng byte ñịa chỉ 
thấp cho phần thấp của word, byte ñịa chỉ cao cho phần cao của word. Ví du: 
Cho 2 byte theo ñịa chỉ tăng dần như sau: 
ABh và CDh  CDABh 
 byte ñịa chỉ cao phần cao của word ứng với byte ñịa chỉ cao 
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa: DIR, FORMAT 
Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 6 
 byte ñịa chỉ thấp phần thấp của word ứng với byte ñịa chỉ thấp 
Tương tự ñối với cách lưu của FAT12 
 ABh CDh EFh 
 byte ñịa chỉ cao nhất 
 phần cao của byte 2 
 phần thấp của byte 2 
byte ñịa chỉ thấp nhất 
 ABh Dh Ch EFh  Tách byte 2 thành 2 phần rồi xếp theo thứ tự ñịa chỉ tăng dần 
 phần cao phần cao 
phần thấp phần thấp 
 DABh và EFCh  Ghép từng cặp theo thứ tự ñó thành 2 số 12 bit 
Cách làm: 
- ðọc toàn bộ 9 sector của bảng FAT1 (bắt ñầu tại sector 1) 
- Xác ñịnh giá trị của ô trên FAT bằng các phép & (and), | (or), > 
(shift right) 
- Tham khảo hàm sau: 
int GetFatValue(int k, unsigned char* Fat) 
{ 
 int i = (k*3)/2; 
 int nHi = Fat[i+1]; 
 int nLo = Fat[i]; 
 if (k%2 == 0) return (nLo | ((nHi & 0xF) << 8)); 
 else return ((nHi > 4)); 
} 
 Bài 4: 
o Quick Format: Xóa nội dung 2 bảng FAT và bảng thư mục gốc. 
o Full Format: Quick Format + Xóa nội dung vùng dữ liệu. 
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa: DIR, FORMAT 
Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 7 
 Bài 5: phối hợp bài 1 (ñọc nội dung bảng thư mục gốc RDET) và bài 3 (ñọc nội dung 
bảng FAT) 

File đính kèm:

  • pdfHướng dẫn thực hành Hệ điều hành - Bài 4 Truy xuất trực tiếp đĩa DIR, FORMAT.pdf