partition active vào RAM và chuyển quyền điều khiển về cho boot sector. Bảng partition (64 byte: bắt đầu từ byte 1BE h): gồm 4 phần tử, đánh số từ 1 đến 4, mỗi phần tử dài 16 byte dùng để lưu thông tin của một partition. Các thông tin trong một phần tử trong bảng partition cho biết: Phân khu có phải là active hay không; Vị trí bắt đầu phân khu (head, sector, cylinder); Vị trí kết thúc phân khu (head, sector, cylinder); Có bao nhiêu sector nằm trong phần khu; Kích thước của một phân khu tính theo sector; Phân khu được định dạng như thế nào và được cài đặt hệ điều hành nào?. Vì bảng partition chỉ có 4 phần tử nên DOS chỉ cho phép tạo ra tối đa là 4 partition. Đây là một hạn chế. Để khắc phục điều này hệ điều hành DOS cho phép tạo ra nhiều đĩa logic trên một partition mở rộng, tức là có thể tạo ra được nhiều đĩa logic trên một ổ đĩa cơ sở. Hệ điều hành windowsNT/ 2000 cho phép tạo ra nhiều hơn 4 partition trên một ổ đĩa và số lượng các phần tử trong bảng partition có thể thay đổi. Chữ ký hệ điều hành (2 byte: bắt đầu từ byte 1FEh): thường chứa giá trị 55AAh. Hệ điều hành DOS kiểm tra giá trị tại vùng này để biết đĩa này có phải được định dạng bởi nó hay không. Một phần tử trong bảng phân khu chứa các thông tin sau: Offset Nội dung Kích thước 00 h 0: partition không phải là active 1 byte 80 h: partition là active 01 h số hiệu head bắt đầu phân khu 1 byte Master Boot Record 0 Boot sector c ủa Hình 4.8: Các thành ph ần trong master boot record Partition 1 Boot code Par 1 Par 2 Par 3 Par 4 chữ ký h ệ điều h ành 0 1 B E 1CE 1DE 1E E 1F E B ảng partition có 4 Master Boot Record Unused Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m 02 h sector và cylinde bắt đầu (của boot sector) 2 byte 04 h mã hệ thống: 0: Non Dos; 1: FAT_12; 4: FAT_16; 5: phân khu Dos mở rộng; 6: phân khu Dos lớn hơn 32 Mb 1 byte 05 h số hiệu head kết thúc phân khu 1 byte 06 h sector và cylinde kết thúc 2 byte 08 h số hiệu sector tương đối bắt đầu 4 byte 0C h tổng số sector trong phân khu 4 byte Bảng 4.3: Các trường một phần tử bảng partition Ví dụ 1: Để kiểm tra partition nào là active ta thực hiện như sau: Đọc sector đầu tiên của đĩa cứng lưu vào biến masterboot Kiểm tra offset 00 của 4 phân tử partition trong bảng partition Mov cx, 4 Mov SI, 1BE h Locate_active: Mov AL, masterboot[SI] Cmp AL, 80h Je Active Add SI, 16 Loop Locate_active No_active: Active: Ví dụ 2: Để đọc nội dụng boot sector của đĩa cứng C ghi vào biến BootDat ta phải thực hiện lần lượt các bược sau đây: Đọc sector đầu tiên của đĩa cứng lưu vào biến masterboot Tìm partition active (phần tử trong bảng partition có offset 00 bằng 80h) Đọc buye tại offset 01h và word tại offset 02 của phần tử partition tương ứng ở trên (head, sector và cylinde), để xác định số hiệu sector bắt đầu của partition active, đây chính là boot sector của đĩa cứng. Đọc nội dung của sector xác định được ở trên lưu vào BootDat. Active: Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Mov ax, 0201h ; đọc 1 sector Mov cx, word PTR mastorboot [SI+2] ; sector & cylinder Mov dh, byte PTR mastorboot[SI+1] ; head Mov dl, 80h ; đĩa cứng Mov es,cs ; trỏ ES:BX về Lea bx, BootDat ; đầu vùng BootDAt lưu Int 13h Nếu PC được khởi động bằng đĩa mềm (FDD) khởi động thì sau quá trình POST hệ thống sẽ nạp boot sector trên đĩa mềm vào bộ nhớ tại địa chỉ 0:7C00h sau đó quyền điều khiển được trao cho cho boot sector, để nó tiếp tục điều khiển quá trình khởi động. Nếu PC được khởi động bằng đĩa cứng khởi động (HDD/C:) thì sau quá trình POST hệ thống sẽ nạp sector phân khu của đĩa cứng vào bộ nhớ tại địa chỉ 0:7C00h, sau đó boot code trong sector phân khu thực hiện việc xác định partition active và nạp boot sector trên partition active vào bộ nhớ cũng tại địa chỉ 0:7C00h, sau đó quyền điều khiển được trao cho cho boot sector, để nó tiếp tục điều khiển quá trình khởi động tương tự như trong trường hợp đĩa mềm. Chính vì vậy sector phân khu thường được gọi là Master Boot Record, nó cũng được gọi là bảng partition. Quản lý file trên đĩa của MS_DOS Trong quá trình định dạng một đĩa mềm, hoặc một đĩa logic trên các phân khu trên đĩa cứng, hệ điều hành chia không gian lưu trữ của đĩa thành 2 vùng: vùng dữ liệu (Data Area) và vùng hệ thống (System Area), đồng thời ghi những thông tin cần thiết vào vùng hệ thống để chuẩn bị cho việc quản lý lưu trữ sau này. Vùng dữ liệu: bao gồm các bolck có kích thước bằng nhau và được đánh địa chỉ (12 bít hoặc 16 bít) để phân biệt, đây chính là các cluster trên đĩa mà chúng ta đã nói đến ở trên. Nội dung của các tập tin cũng được chia thành các bolck có kích thước bằng kích thước của một cluster. Các cluster trên đĩa dùng để chứa nội dung của các tập tin trên đĩa. Các thông tin liên quan đến một tập tin trên đĩa được chứa ở vùng hệ thống. Vùng hệ thống: bao gồm các đoạn chương trình, các thông tin hệ thống, các thông tin liên quan đến các tập tin/thư mục trên đĩa mà hệ điều hành dùng để quản lý việc lưu trữ tập tin/thư mục trên đĩa sau này. Cụ thể nó bao gồm các thành phần sau đây: Boot sector, FAT1, FAT2 và Root Directory. Sau đây chúng ta sẽ khảo sát các thành phần trong vùng hệ thống, để thấy được cách mà DOS quản lý các file và các thư mục được lưu trữ trên đĩa. Master Boot Record 0 sector 0 (FDD) hay sector đầu tiên của partition Block (cluster ) Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Boot sector: còn được gọi là boot record (bản ghi khởi động), dài 512 byte (1 sector) được đặt tại sector logic 0 trên đĩa mềm hay sector logic đầu tiên của partition (đĩa logic) trên ổ đĩa cứng. Tất cả các đĩa (FDD và đĩa logic trên đĩa cứng) sau khi được định dạng đều có boot record và đều chứa các thông tin liên quan về đĩa trong đó, nhưng chỉ có đĩa được định dạng là đĩa khởi động mới có chứa một đọan code Bootstrap Loader. Bootstrap Loader thực hiện việc nạp thành phần cốt lõi của DOS như io.sys, msdos.sys, command.com vào bộ nhớ RAM (chính xác hơn là chỉ nạp IO.SYS vào RAM sau đó IO.SYS sẽ tìm nạp các tập tin tiếp theo) trong quá trình khởi động máy tính. Chính vì vậy bootstrap loader còn được gọi là chương trình mồi khởi động. Bảng sau đây cho thấy vị trí, độ lớn và nội dung của các trường trong boot sector. Offset Nội dung Size 00 h Lệnh JUMP, nhảy về Bootstrap Loader 3 byte 03 h Tên nhà sản xuất và số phiên bản 8 byte 0B h Số byte trên một sector 2 byte 0D h Số sector trên một cluster 1 byte 0E h Số sector dành cho boot sector 2 byte 10 h Số bảng FAT 1 byte 11 h Số phần tử (entry) trong Root directory 2 byte 13 h Tổng số sector trên một tập đĩa (volume) 2 byte 15 h Mã nhận diện đĩa 1 byte 16 h Số sector dành cho bản FAT 2 byte 18 h Số sector trên một track 2 byte 1A h Số mặt (đầu từ) 2 byte Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m 1C h Số sector dữ trữ 4 byte 1E h Số sector nếu kích thước lơn hơn 32Mb 4 byte 22 h Số hiệu ổ đĩa: 0:ổ mềm; 80h: ổ cứng 1 byte 23 h Dự trữ 1 byte 24 h Chữ ký boot sector mở rộng 1 byte 25 h Số Serial của đĩa, được tạo ra lúc format 4 byte 29 h Tên tập đĩa (nhãn đĩa) 11 byte 34 h Loại FAT: “FAT12” hoặc “FAT16” 8 byte 3Ch - 200h Code của chương trình bootstrap loader 452 byte Bảng 4.4: Các trường trong boot sector Như vậy, ngay sau khi quyền điều khiển được trả về cho boot sector thì hệ thống sẽ thực hiện lệnh nhảy (Jmp) ở đầu boot sector (offset 00), để nhảy đến thực hiện đoạn code bootstrap loader ở cuối boot sector (từ offset 3Ch đến offset 200h). Và bootstrap loader sẽ thực hiện nhiệm vụ của nó. Dựa vào boot sector ta biết được nhiều thông tin về đĩa như: loại FAT, nhãn đĩa, số sector trên một cluster, số byte trên một sector, … Và từ đó ta cũng có thể tính được dung lượng của đĩa tính theo byte: Tổng số sector trên một tập đĩa * số byte trên một sector. Ví dụ: Để in ra loại FAT đang sử dụng trên đĩa mềm hoặc trên một volume trên đĩa cứng ta thực hiện như sau: Đọc nội dung của boot sector lưu vào biến bootdat In ra 8 kí tự bắt đầu tại offset 34h của bootdat Mov cx, 8 Mov SI, 34h Mov ah, 02 ; hàm 02h/21h in kí tự trong DL Loai_FAT: Mov DL, byte PTR bootdat[SI] Int 21h Loop Loai_FAT File Allocation Table (FAT): Nội dung của một file cần lưu trữ trên đĩa được chia thành các phần có kích thước bằng nhau và bằng kích thước của một cluster, được gọi là các block file. Các block file của các file được lưu trữ tại các cluster xác định trên đĩa, các cluster chứa nội dung của một file có thể Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . partition. Các thông tin trong một phần tử trong bảng partition cho biết: Phân khu có phải là active hay không; Vị trí bắt đầu phân khu (head, sector, cylinder); Vị trí kết thúc phân khu (head, sector,. cũng được gọi là bảng partition. Quản lý file trên đĩa của MS_DOS Trong quá trình định dạng một đĩa mềm, hoặc một đĩa logic trên các phân khu trên đĩa cứng, hệ điều hành chia không gian lưu. (HDD/C:) thì sau quá trình POST hệ thống sẽ nạp sector phân khu của đĩa cứng vào bộ nhớ tại địa chỉ 0:7C00h, sau đó boot code trong sector phân khu thực hiện việc xác định partition active và