Viết chương trình in các cluster thuộc file đó và in ra tên của File đó trong ROOT.. In các cluster thuộc file được lưu trữ trên cluster đầu tiên là n=7: In ra tên của file đó trong
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Báo cáo bài thực hành số 3: Đọc và phân tích
hệ thống file FAT sử dụng hàm đọc đĩa mức
thấp Môn học: Hệ điều hành
Giảng viên: Đinh Trường Duy Sinh viên: Nguyễn Bá Dương
Mã sinh viên: B22DCCN165 Ngày sinh: 08/02/2004
Số điện thoại: 0815750059
HÀ NỘI, 10/2024
Trang 21 Khởi động máy ảo:
Trang 3 Mở và chạy file FAT.cpp:
1.1Viết đoạn chương trình in nội dung của 150 ô FAT đầu tiên của ổ đĩa D
ra màn hình từ đó in ra bảng bit của 150 khối nhớ của ổ D.\
Nội dung của chương trình:Cấu trúc boot
Trang 4 Cấu trúc ROOT:
Trang 5 Hàm main:
In nội dung của 150 ô FAT đầu tiên:
Kết quả:
Trang 61.2Viết chương trình đọc FAT vào bộ nhớ tại địa chỉ << int ∗fat >> Giả
sử một file được lưu trữ trên cluster đầu tiên là n Viết chương trình in các cluster thuộc file đó và in ra tên của File đó trong ROOT.
In các cluster thuộc file được lưu trữ trên cluster đầu tiên là n=7:
In ra tên của file đó trong ROOT:
Trang 7 Kết quả:
1.3Viết chương trình đọc thư mục gốc của hệ thống file FAT16 sử dụng tên file độ dài tối đa 8 ký tự được đọc vào bộ nhớ tại địa chỉ << void ∗ root
>> Viết chương trình C/C++ thực hiện hai việc: in tên và độ dài các file trong thư mục gốc; tìm một file có tên cho trước trong thư mục gốc và cho biết file đó có bao nhiêu khối nhớ.
Đọc thư mục gốc của hệ thống file FAT16 sử dụng tên file có độ dài tối đa
8 ký tự:
Trang 8 In tên và độ dài các file trong thư mục gốc, tìm một file có trước trong thư mục gốc:
Kết quả:
Trang 92 Sinh viên viết chương trình trên C/C++ để thực hiện các nội dung sau:
- Đọc và in thông tin từ BOOT.
- Đọc, phân tích, hiển thị nội dung bảng FAT.
- Đọc, phân tích, hiển thị ROOT.
- Duyệt số thứ tự hoặc nội dung các cluster của file cho trước.
- Viết đoạn chương trình in ra nội dung giống như câu lệnh dir.
Đọc và in thông tin từ BOOT.
Chương trình: được lưu trong file “BAI2_1.cpp”
Trang 10Toàn bộ chương trình:
Trang 11 Kết quả:
Giải thích:
Đoạn mã trê sử dụng các hàm liên quan để đọc thông tin sector của ổ đĩa, đặc biệt là thông tin từ BOOT sector Chương trình đọc và in ra các thông tin cơ bản của BOOT sector từ một ổ đĩa ví dụ như kích thước sector, số lượng FAT,
Sử dụng một cấu trúc có tên là “bootsector” để chứa các thông tin trong BOOT sector của ổ đĩa
Sử dụng hàm “absread” để đọc dữ liệu từ một sector
Cuối cùng in thông tin BOOT sector ra màn hình qua hàm “bootsectorPrint”
Trang 12 Đọc, phân tích, hiển thị nội dung bảng FAT:
Chương trình: được lưu trong file “BAI2_2.cpp”
Kết quả:
Giải thích:
Chương trình giống như hai bài trên, ta chỉ thay đổi hàm main Đoạn mã đã thực hiện đọc, phân tích và hiển thị nội dung bảng FAT Đầu tiên đọc boot sector thông qua lệnh absread
Sau đó, ta xác định vị trí và kích thước của bảng FAT
Trang 13Tiếp theo ta tiến hành đọc bảng FAT vào bộ đệm và cuối cùng in nội dung của bảng FAT ra màn hình
Đọc, phân tích, hiển thị ROOT.
Chương trình: được lưu trong file “BAI2_3.cpp”
Trang 14 Kết quả:
Giải thích:
Vẫn là đoạn chương trình của ý trên, ta thêm cấu trúc root_entry và hàm rootEntryPrint để in thông tin của các tệp và thư mục từ root
Hàm rootEntryPrint đã thực hiện in tên tệp, kích thước, ngày tạo và cluster đầu tiên của tệp
Duyệt số thứ tự hoặc nội dung của file cho trước:
Chương trình: được lưu trong file “BAI2_4.cpp”
Trang 15 Kết quả:
Giải thích:
Đoạn mã tìm kiếm file có tên là “bootsect” trong thư mục gốc
Sau khi tìm thấy file, mã sẽ lấy số cluster đầu tiên của file đó và sử dụng bảng FAT để suyệt qua tất cả các cluster
Trang 16Quá trình này chạy cho đến khi gặp giá trị đặc biệt trong bảng FAT như 0xFFF8 thì file đã kết thúc
Viết đoạn chương trình in ra nội dung giống như câu lệnh dir.
Chương trình: được lưu trong file “BAI2_5.cpp”
Kết quả:
Trang 17 Giải thích:
Đoạn mã in ra danh sách các file trong thư mục gốc, bao gồm tên file, thuộc tính, kích thước, ngày tháng tạo và số cluster đầu tiên của mỗi file
Mỗi file sẽ được hiển thị theo tên
Đối với thư mục sẽ hiển thị <<DIR>> còn với file thông thường sẽ in ra kích thước file
Ngày tạo file được tính toán từ thông tin ngày tháng trong cấu trúc
created_date