Filena ex attrib unuse tim dat start filesi08 0B 0C 16 18 1A (2 byte) 1C

Một phần của tài liệu Giáo trình -Lý thuyết hệ điều hành - chương 4 doc (Trang 37 - 45)

08 0B 0C 16 18 1A (2 byte) 1C x x a d v s h r 0 1 2 3 4 5 6 7 trỏ tới bảng FAT (b) (a)

Byte đầu tiên (offset 00) của một phần tử trong thư mục gốc còn được gọi là byte trạng thái, byte này có thể chứa một trong các giá trị đặc biệt sau đây:

 0: cho biết phần tử này chưa được sử dụng.

 E5h: cho biết phần tử này là của một file đã được tạo nhưng đã bị xóa.

 05h: cho biết kí tự đầu tiên của tên file này thực tế là E5h. Nếu người sử dụng cố tình tạo ra một file có tên bắt đầu là kí tự có mã asscii là E5h thì hệ điều hành sẽ tự động thay bằng kí tự có mã là 05h, để phân biệt file này với các file đã bị xoá.

 2Eh (kí tự dấu chấm “.”): cho biết phần tử này chứa thông tin của một thư mục con, nếu byte thứ 2 cũng chứa giá trị 2Eh (hai dấu chấm liên tiếp “..”) thì trường start cluster sẽ chứa số hiệu cluster đầu tiên của thư mục cha, nếu là thư mục gốc thì là 0000h.

Nếu bằng cách nào đó người lập trình đưa được một giá trị 1 byte không thuộc một trong các giá trị trên và không phải là các chữ cái tên file thông thường, vào byte đầu tiên của phần tử trong bảng thư mục gốc đang cấp phát cho một file/thư mục nào đó, thì DOS và các tiện ích trên DOS không thể nhận biết các file/thư mục này, và không thể thực hiện các thao tác Dir, Del, vv trên nó. Đây là một cách để bảo vệ các file/thư mục của người sử dụng trên đĩa.

 DOS dùng 1 byte, sau 2 phần tên file, để ghi các thuộc tính của file, tuy nhiên DOS chỉ dùng 6 bít từ 0 đến 5 của byte này để ghi 5 thuộc tính lần lượt là: chỉ đọc, ẩn, hệ thống, nhãn đĩa, thư mục con và lưu trữ (trong hình 4.xx.b ở trên 2 bít chưa sử dụng được đánh dấu x):

 Thuộc tính chỉ đọc (r: read only): Nếu bít 0 của byte thuộc tính bằng 1, thì tập tin tương ứng có thuộc tính chỉ đọc. Một tập tin có thuộc tính chỉ đọc sẽ không bị thay đổi nội dung và không bị xóa.

 Thuộc tính ẩn (h: hidden): Nếu bít 1 của byte thuộc tính bằng 1, thì tập tin tương ứng có thuộc tính ẩn. Một tập tin có thuộc tính ẩn thì các lệnh DOS thông thường như Edit, Del, Dir, Tree, … sẽ không tác động được đến nó.

 Thuộc tính hệ thống (s: system): Nếu bít 2 của byte thuộc tính bằng 1, thì tập tin tương ứng có thuộc tính hệ thống. Một tập tin có thuộc tính hệ thống tương tự như tập tin có thuộc tính ẩn hoặc vừa ẩn vừa hệ thống. Thuộc tính hệ thống chỉ có ý nghĩa kế thừa, nó không có ý nghĩa trong hệ điều hành DOS.

bằng 1, thì phần tử này chứa nhãn nhận dạng đĩa, được lưu tại trường filename và trường Ext. Phần tử này chỉ được DOS nhận biết nếu nó nằm trên thư mục gốc. Trong trường hợp này chỉ có trường Date và Time là được sử dụng. Trường start cluster và trường filesize chứa giá trị 0.

 Thuộc tính thư mục con (d: subdirectory): Nếu bít 4 của byte thuộc tính bằng 1, thì phần tử này chứa các thông tin về thư mục con của thư mục gốc trên đĩa. Đối với DOS thư mục con là một tập tin chứa dữ liệu thông thường, nó có một thuộc tính đặc biệt, đó là thuộc tính d.

 Thuộc tính lưu trữ (a:archive): thuộc tính này dùng để trợ giúp cho việc tạo backup của các tập tin trên đĩa cứng. Bít này = 0 đối với tất cả các tập tin chưa bị sửa đổi kể từ lần backup gần đây nhất. Như vậy trong lần tạo backup sau DOS chỉ cần cập nhật cho các tập tin có bít này bằng 1. Tóm lại, lúc đầu bít a = 0, sau đó nếu có bất kỳ sự thay đổi nào trong nội dung của file thì bít này sẽ được chuyển lên thành bằng 1.

 10 byte bắt đầu từ offset 0Ch chưa được DOS sử dụng, Microsoft dự trữ vùng này cho các mục đích khác sau này. Hệ điều hành windows98 sử dụng tất cả 10 byte này. Việc dự trữ 10 byte này tạo thành một kẽ hở của DOS, các đoạn code virus có thể định vị ở vùng này mà hệ điều hành không thể phát hiện được.

 Trường Date và trường Time kết hợp với nhau để lưu chính xác ngày giờ tạo ra file/ thư mục hay ngày giờ file/ thư mục được thay đổi gần đây nhất.

 Trường quan trọng nhất trong của một phần tử trong bảng thư mục gốc là trường start cluster, dài 2 byte, bắt đầu tại offset 1Ah. Nó chứa số hiệu của cluster đầu tiên trong dãy các cluster chứa nội dung của file tương ứng với phần tử này. Do đó trong các thao tác đọc file của hệ điều hành, trường này được xem như một con trỏ trỏ tới bảng FAT để dò tìm dãy các cluster chứa nội dụng của một file.

 Trường filesize cho biết kích thước của file tính theo byte. Nếu một phần tử trong bảng thư mục gốc được dùng cho một thư mục con nào đó thì trường filesize này chứa giá trị 0. Kích thước của thư mục con chỉ được biết nhờ lần theo chuỗi số hiệu cluster tương ứng trong bảng FAT.

Khi người sử dụng xóa một file trên đĩa hệ điều hành không xóa nội dung của file tại các cluster trên vùng data, không xóa dãy các cluster chứa file trong bảng FAT, thậm chí không xóa cluster đầu tiên trong dãy các cluster chứa file tại phần tử tương ứng với file trong bảng thư mục gốc mà hệ điều hành chỉ thay kí tự đầu tiên của tên file tại phần tử trong bảng thư mục gốc bằng giá trị E5h. Do đó, sau khi đã xóa một file thì hệ điều hành có thể khôi phục lại được file này, bằng các thay kí tự mã E5h ở byte đầu tiên của tên file bằng một kí tự khác. Trường hợp không khôi phục được là do sau một thời gian, hệ điều hành đã sử dụng phần tử trong thư mục gốc, các phần tử trong

bảng FAT và các cluster trên vùng data của file đã bị xóa, cấp phát cho các file mới sau này. Khi duyệt bảng thư mục gốc gặp các phần tử có byte đầu bàng E5h hệ điều hành biết đây là phần tử của file đã bị xóa nên không in ra màn hình. Điều vừa trình bày trên đây hoàn toàn đúng với trường hợp của các thư mục con trên đĩa.

Để ghi một file vào thư mục gốc của đĩa (thông tin của file chứa ở một phần tử trong bảng thư mục gốc) hệ điều hành DOS thực hiện các bước sau đây:

1. Tìm một phần tử trong bảng thư mục gốc chưa sử dụng, đó là phần tử mà byte đầu tiên của nó chứa gia trị 00. Giả sử tìm được phần tử thứ 105. 2. Ghi tên file, phần mở rộng, thuộc tính của file, ngày giờ tạo file vào các

trường tương ứng tại phần tử 105 trong bảng thư mục gốc.

3. Tìm một entry trong bảng FAT chứa giá trị 000h, giả sử tìm được entry 207, điều này có nghĩa cluster 207 trên vùng data còn trống.

4. Ghi số hiệu của entry này, entry 207, vào trường start cluster tại offset 1Ah của phần tử 107 trong bảng thư mục gốc.

5. Ghi block đầu tiên của file vào cluster 107 trên vùng data. Nếu nội dung của tập tin chứa vừa đủ trong 1 cluster, thì DOS sẽ thực hiện bước cuối cùng (bước 9), ngược lại DOS tiếp tục thực hiện bước 6.

6. Tiếp tục tìm một entry trong bảng FAT chứa giá trị 000h, giả sử tìm được

entry 215, điều này có nghĩa cluster 215 trên vùng data còn trống.

7. Ghi giá trị 215 vào entry 207 trong bảng FAT và ghi block thứ hai của file vào cluster 215 trên vùng data.

8. Lặp lại các bước 6 và 7 cho đến khi ghi hết các block của file vào các cluster trên vùng data. Giả sử block cuối cùng của file được ghi vào

cluster 302 trên vùng data, tức là entry cuối cùng được tìm thấy (chứa giá trị 00h) là entry 302.

9. Bước cuối cùng: ghi giá trị FFFh vào entry 107 hoặc vào entry 302. 10.Tính kích thước của tập tin và ghi vào trường filesize của phần tử 105

trong bảng thư mục gốc.

 Thư mục con (subdirectory): Như đã biết, bảng thư mục gốc của DOS định vị tại một vị trí cố định trên đĩa logic, sau 2 bảng FAT, số lượng phần tử trong bảng thư mục gốc là cố định, không thể mở rộng được, và được DOS quy định trong quá trình định dạng đĩa. Đó là những hạn chế về cấu trúc và tổ chức bảng thư mục gốc của DOS. Cụ thể là người sử dụng không thể chứa quá nhiều file, thư mục trên thư mục gốc và bảng thư mục gốc dễ bị virus tấn công. Hệ điều hành DOS đưa ra khái niệm thư mục con để khắc phục một phần những hạn chế trên.

Đối với người sử dụng, thư mục con là những thư mục nằm trên thư mục gốc của đĩa, trên đĩa chỉ có một thư mục gốc nhưng có thể có nhiều thư mục con, trong thư mục con có thể chứa nhiều (không giới hạn) file và thư mục con khác, gắn liền với thư mục con là thư mục cha của nó, thư mục cha có thể là thư mục gốc hoặc một thư mục con khác. Nhưng đối với DOS, thư mục con là một file đặc biệt, file này có thuộc tính thư mục con, byte thuộc tính có giá trị 00010000 (16), và có trường filesize = 0.

Về mặt hệ thống, thư mục con có các điểm khác sau đây so với thư mục gốc:

 Hệ điều hành lưu trữ nó giống như lưu trữ các file khác trên đĩa. Tức là, muốn đọc được thư mục con hệ điều hành phải lần theo dấu vết của nó trong bảng FAT.

 Bảng thư mục của nó có số lượng phần tử không giới hạn, có thể tăng lên hay giảm xuống tùy thuộc vào số lượng file và thư mục chứa trong nó. Nhờ vậy mà người sử dụng có thể chứa nhiều file thư mục trong một thư mục con trên đĩa. Số lượng phần tử trong bảng thư mục của các thư mục con chỉ bị giới hạn bởi dung lượng đĩa và kích thước các file thư mục chứa trong nó.

 Bảng thư mục của nó có thể định vị tại một vị trí bất kỳ trên vùng data của đĩa. Có thể xem đây là một hạn chế của thư mục con, vì nếu tạo quá nhiều thư mục con trên đĩa thì bảng thư mục của các thư muc con sẽ chiếm hết nhiều không gian đĩa trên vùng data. Do đó hệ điều hành không khuyến khích tạo quá nhiều thư mục con trên các đĩa mềm. Virus khó có thể tấn công bảng thư mục của thư mục con vì nó không cố định.

 Muốn biết được kích thước của thư mục con hệ điều hành phải tính toán từ kích thước của tất cả các file trong thư mục con, hệ điều hành dựa vào bảng thư mục của thư mục con và bảng FAT để thực hiện việc tính toán này.

Cấu trúc của một phần tử trong bảng thư mục của thư mục con tương tự cấu trúc của một phần tử trong bảng thư mục gốc. Đa số các phần tử trong bảng thư mục gốc của đĩa hay phần tử trong bảng thư mục của thư mục con, chứa thông tin của một thư mục (con), đều có trường Filename là tên của thư mục (con), trường Attribute = 16, trường Start cluster = cluster đầu tiên của thư mục (con), trường Filesize = 0, … Chỉ có hai phần tử đầu tiên trong bảng thư mục của các thư mục con là có chứa các giá trị đặc biệt.

Ngay sau khi có một thư mục con được tạo ra, hệ điều hành tạo ngay bảng thư mục cho nó và khởi tạo 2 phần tử đầu tiên trong bảng thư mục này:

 Phần tử thứ nhất, chứa mã ascii của kí tự dấu chấm (.) ở byte đầu tiên của trường filename, phần tử này chỉ đến chính thư mục hiện hành. Trường Start cluster cho biết cluster bắt đầu của thư mục này.

tiên của trường filename, phần tử này chỉ đến thư mục cha của nó. Trường Start cluster cho biết cluster bắt đầu của thư mục cha của nó. Nhưng nếu cha của nó là thư mục gốc thì trường này chứa giá trị 0.

Để thấy rõ hơn mối quan hệ giữa bảng thư mục gốc và bản thư mục của các thư mục con, cũng như các phần tử trong 2 bảng thư mục này, ta hãy xem sơ đồn minh họa 4.12 trên đây. Trong sơ đồ này ta giả sử: trên thư mục gốc có hai thư

Một phần bảng thư mục gốc OS sub 25 0 ASS sub 7 0 Một phần bảng thư mục của thư mục con OS .. sub 0 0 LTOS sub 55 0 . sub 25 0 tailieu doc 2B 7F

Hình 4.12: Bảng thư mục gốc và bảng thư mục con

.. sub 7 0

Btap2 doc sub 84 92

. sub 65 0

Btap1 doc 72 99

Một phần bảng thư mục của thư mục con ASS .. sub 0 0 TH sub 65 0 . sub 7 0 LT sub 55 0 Một phần bảng thư mục của thư mục con LT .. sub 7 0 Ch2 doc sub 97 19 . sub 55 0 Ch1 doc 62 95 (c) (a) (b) (d) (e)

mục con là ASS và OS, trong thư mục ASS có hai thư mục con LT và TH, trong OS có chứa tập tin tailieu.txt và thư mục con LTOS, trong LT có chứa 2 tập tin ch1.txt và ch2.txt, trong TH có chứa 2 tập tin btap1.txt và btap2.txt.

Hình 4.12.a ở trên cho thấy trên thư mục gốc có 2 thư mục con OS và ASS, tổ chức của bảng thư mục con của thư mục OS được lưu trữ bắt đầu tại block 25, tổ chức của bảng thư mục con của thư mục ASS được lưu trữ bắt đầu tại block 7. Hình 4.12.b cho thấy thư mục cha của thư mục OS là thư mục gốc, phần tử có tên là hai dấu chấn “..” chứa giá trị 0 ở trường start cluster, tập tin tailieu.doc được lưu trữ bắt đầu tại cluster 2Bh và có kích thước là 7Fh, tổ chức bảng thư mục con của thư mục LTOS được lưu trữ bắt đầu tại cluster 55. Hình 4.12.c & 4.12.d cho thấy thư mục TH là thư mục con của thư mục ASS, bảng thư mục con của thư mục TH lưu trữ bắt đầu tại cluster 65 (phần tử có tên là một dấu chấn “.” chứa giá trị 65 ở trường start cluster), và tổ chứa bảng thư mục của thư mục cha của nó, thư mục ASS, được lưu trữ bắt đầu tại cluster 7 (phần tử có tên là hai dấu chấn “.. chứa giá trị 7 ở trường start cluster), …

Nếu một tập tin bị giảm kích thước thì DOS sẽ giải phóng ngay các cluster đĩa mà tập tin không còn sử dụng nữa. Nhưng các cluster chứa thư mục con chỉ được giải phóng khi tất cả các tập tin thư mục trong thư mục con này đã bị xóa hết ra khỏi đĩa.

 Quá trình khởi động máy tính với hệ điều hành DOS: Quá trình khởi động máy tính là quá trình từ khi máy tính được cung cấp nguồn điện cho đến khi màn hình xuất hiện dấu nhắc hệ điều hành. Quá trình này được chia thành 2 giai đoạn, giai đoạn thứ nhất tạm gọi là giai đoạn khởi động máy, giai đoạn này chủ yếu do chương trình POST trong BIOS thực hiện. Giai đoạn thứ hai tạm gọi là giai đoạn tìm nạp phần lõi của hệ điều hành vào RAM, giai đoạn này chủ yếu do BIOS và Boot sector/master boot record thực hiện.

Giai đoạn khởi động máy tính:

(Bắt đầu từ khi máy tính được cung cấp nguồn điện)

1. Các thanh ghi segment được gán giá trị 0FFFFh, các thanh ghi còn lại bằng 0.

2. Cặp thanh ghi CS:IP chứa giá trị 0FFFh:0000h, địa chỉ này chứa một lệnh nhảy xa (JMP Far) chuyển quyền điều khiển đến một đoạn chương trình

Một phần của tài liệu Giáo trình -Lý thuyết hệ điều hành - chương 4 doc (Trang 37 - 45)

Tải bản đầy đủ (PDF)

(75 trang)