Loading...

Case stady: Quản lý danh sách block đĩa chứa các block tập tin của hệ điều hành MSDOS

Để thấy được cách mà hệ điều hành MSDOS dùng bảng FAT (File  Allocation Table) để quản lý việc lưu trữ các tập tin trên đĩa cũng như theo dõi trạng thái các block (cluster) trên vùng dữ liệu, với cơ chế danh sách liên kết & chỉ mục, ta xem hình minh hoạ sau đây.

Hình (a) ở trên cho thấy: Có hai tập tin, FileA và FileB, FileA có kích thước vừa đủ để chia thành 4 block, FileB có kích thước nhỏ hơn FileA, nhưng cũng được chia thành 4 block.

Tức là, hệ điều hành cũng phải dùng đủ 8 cluster để lưu trữ nội dung của hai tập tin này vào đĩa (hình b).

Đoạn FAT trong hình (c) ở trên cho biết các thông tin sau đây:

  • Các cluster bị bad, không thể sử dụng: Cluster 11 và cluster 13.
  • Các cluster còn trống, chưa cấp phát: Cluster 2, cluster 3, cluster 5, cluster 8. 
  • FileA được lưu tại các cluster: 4, 10, 7, 14 (chứa block cuối cùng)
  • FileB được lưu tại các cluster: 6, 9, 12, 15 (chứa block cuối cùng)

Như vậy bảng thư mục gốc (sẽ được đề cập ở loạt bài sau) cho biết cluster đầu tiên chứa FileA là cluster 4, phần tử thứ 4 trong bảng FAT chứa giá trị 10, điều này chứng tỏ cluster 10 là cluster tiếp theo chứa nội dụng FileA, phần tử thứ 10 trong bảng FAT chứa giá trị 7, điều này chứng tỏ cluster 7 là cluster tiếp theo chứa nội dụng FileA,  phần tử thứ 7 trong bảng FAT chứa giá trị FFFh, điều này chứng tỏ cluster 7 là cluster chứa block cuối cùng của FileA.   

Các cluster chứa nội dung của một tập tin có thể không liên tiếp nhau, nhưng nó thường nằm rải rác trong một phạm vi hẹp nào đó trên đĩa. Điều này giúp hệ điều hành đọc tập tin  được nhanh hơn nhờ tiết kiệm được thời gian duyệt và đọc qua các byte từ đầu đến cuối bảng FAT để dò tìm dãy các cluster chứa nội dung của tập tin.

Mặt khác, việc phân bố tập trung các cluster của một tập tin rất phù hợp với các thuật toán đọc đĩa của hệ điều hành. Đối với các tập tin dữ liệu, sau một thời gian kích thước của nó có thể tăng lên, hệ điều hành phải cấp phát thêm các cluster cho nó, các cluster mới này có thể nằm tại các vị trí tách xa các cluster trước đó, dẫn đến các cluster chứa nội dung của một tập tin  phân bố rải rác khắp bề mặt đĩa, điều này sẽ làm chậm tốc độ đọc tập tin của hệ điều hành. Các tập tin dữ liệu bị mở, thay đổi, ghi và đóng lại nhiều lần cũng có thể dẫn đến hiện tượng trên. Trên đĩa có thể xuất hiện hiện tượng có nhiều tập tin bị phân bố rải rác khắc bề mặt đĩa, hiện tượng này được gọi là hiện tượng đĩa bị phân mảnh.

Các đĩa bị phân mảnh sẽ làm cho tốc độ đọc tập tin trên nó chậm đi rất nhiều. Trong trường hợp này người sử dụng phải thực hiện việc sắp xếp lại các cluster trên đĩa, để các cluster chứa nội dung của một tập tin  của tất cả các tập tin  trên đĩa được phân bố tập trung hơn, thao tác này được gọi là chống phân mảnh cho đĩa.

Hệ điều hành MSDOS cung cấp nhiều công cụ để người sử dụng thực hiện việc chống phân mảnh cho đĩa cả ở mức ứng dụng và mức lập trình.        

Để đọc nội dung của một tập tin trên đĩa dựa vào bảng thư mục gốc và bảng FAT, hệ điều hành thực hiện theo các bước sau đây:

1.      Tìm phần tử trong bảng thư mục gốc chứa thông tin của tập tin cần đọc.

2.      Tại phần tử này, xác định số hiệu của cluster đầu tiên trong dãy các cluster chứa nội dung của tập tin  (giả sử cluster 4), giá trị này được xem như con trỏ trỏ tới bảng FAT để bắt đầu dò tìm các cluster từ thứ 2 đến cuối cùng trong dãy các cluster chứa nội dung của tập tin  cần đọc. Sau đó đọc block dữ liệu đầu tiên của tập tin tại cluster 4 trên vùng data của đĩa.

3.      Xác định byte tương ứng với phần tử 4 trong bảng FAT. Đọc giá trị dữ liệu tại phần tử 4 này, giả sử giá trị đọc được là 10. Sau đó đọc block dữ liệu tiếp theo của tập tin tại cluster 10 trên vùng data của đĩa.

4.      Xác định byte tương ứng với phần tử 4 trong bảng FAT. Đọc giá trị dữ liệu tại phần tử 4 này, giả sử giá trị đọc được là 17. Sau đó đọc block dữ liệu tiếp theo của tập tin tại cluster 17 trên vùng data của đĩa.

5.      Xác định byte tương ứng với phần tử 17 trong bảng FAT, sau đó thực hiện hoàn toàn tương tự như bước 4 cho đến khi đọc được giá trịFFFh (với FAT12) hoặcFFFFh (với FAT16) tại một phần tử nào đó (giả sử phần tử 43) trong bảng FAT thì đọc block dữ liệu cuối cùng của tập tin  tại cluster 43 trên vùng data của đĩa, sau đó dừng lại.

Tới đây kết thúc quá trình đọc tập tin. 

Chúng ta sẽ hiểu rõ hơn các bước 1 và 2 ở phần mô tả về bảng thư mục gốc trong mục này. Các bước trên chỉ đúng cho việc đọc các tập tin mà thông tin của nó được lưu trữ trên ở các phần tử trong bảng thư mục gốc (được lưu trữ ở thư mục gốc) của đĩa.

Thao tác đọc tập tin  của DOS như trên là kém hiệu quả, vì ngoài việc đọc nội dung của tập tin tại các cluster trên vùng data của đĩa hệ điều hành còn phải đọc và phân tích bảng FAT để dò tìm ra dãy các cluster chứa nội dung của một tập tin.

Hệ thống tập tin NTFS trong WindowsNT/2000 khắc phục điều này bằng cách lưu danh sách các cluster chứa nội dung của một tập tin  vào một vị trí cố định nào đó, nên khi đọc tập tin  hệ điều hành chỉ cần đọc nội dung của các cluster trên đĩa theo danh sách ở trên, mà không phải tốn thời gian cho việc dò tìm dãy các cluster chứa nội dung của tập tin  của hệ thống tập tin  FAT trong MSDOS.

Ngoài ra, nếu MSDOS có một cơ chế nào đó ghi lại được danh sách các cluster còn trống trên đĩa, thì tốc độ ghi tập tin  của hệ điều hành sẽ tăng lên vì hệ điều hành không tốn thời gian cho việc đọc bảng FAT để xác định cluster còn trống. Các hệ thống tập tin của các hệ điều hành sau này như Windows98, WindowsNT/2000 đã thực hiện được điều này.      

Độ rộng của một phần tử trong bảng FAT (12 bít hay 16 bit) quyết định dung lượng đĩa tối đa mà hệ điều hành có thể quản lý được.

Nếu hệ điều hành sử dụng FAT12 thì mỗi phần tử trong FAT12 có thể chứa một giá trị lên đến 212, đa số trong số này là số hiệu các cluster trên vùng data của đĩa, điều này có nghĩa là trên vùng data của đĩa có tối đa là 212cluster.

Từ đây ta có thể tính được dung lượng đĩa tối đa (byte) mà hệ thống tập tin  FAT12 có thể quản lý được là: 212cluster * 4 sector/1 cluster * 512 byte/1 sector (a).

Tương tự, dung lượng đĩa tối đa (byte) mà hệ thống tập tin  FAT16 có thể quản lý được là: 216cluster * 4 sector/1 cluster * 512 byte/1 sector (b).

Rõ ràng với hệ thống tập tin  FAT12 thì DOS sẽ quản lý được một không gian đĩa lớn hơn so với FAT12 (theo a và b).

Tự học

Ý kiến của bạn

Mã bảo vệ
Làm mới

Hãy đăng quảng cáo trên TuHocAnNinhMang.com

Bài xem nhiều nhất

Tự học lập trình C - Bài 1: Một số khái niệm cơ bản

Khái niệm tên rất quan trọng trong quá trình lập trình, ...

Tự học lập trình JAVA – Bài 1: Bước đầu với Java

Một chương trình java có thể được định nghĩa như là một ...

MySQL – Bài 8: Khóa chính (primary key) và khóa ngoại (foreign key) của table

Với ràng buộc này thì, việc người sử dụng vô tình hay cố ...

Tự học lập trình C - Bài 10: Mảng một chiều

Mảng 1 chiều là tập hợp các phần tử có cùng kiểu dữ ...

Hướng dẫn in ấn trong Word 2007/2010 – Step by Step

[Tự học] - Tiêu đề đầu trang (Header)/tiêu đề cuối ...

Tự học lập trình C - Bài 2: Cấu trúc chương trình C

Một chương trình bao gồm một hoặc nhiều hàm, mỗi hàm ...

Tự học lập trình Assembly - Bài 1: Bước đầu với lập trình Assembly trên vi xử lý Intel 8086/8088

Như đã biết, lệnh ngôn ngữ máy là một dãy các con số 0, ...

Hãy đăng quảng cáo trên TuHocAnNinhMang.com

Về đầu trang Hỏi - Đáp