Tổ chức điac của hệ điều hành MSDOS

10 559 1
Tổ chức điac của hệ điều hành MSDOS

Đang tải... (xem toàn văn)

Thông tin tài liệu

95 CHƯƠNG 14 : TỔ CHỨC ĐĨA CỦA HỆ ĐIỀU HÀNH MSDOS 14.1MỘT SỐ Ý NIỆM Hệ điều hành MSDOS tổ chức lưu trữ thông tin trên đóa theo các volume. Đối với Floppy disk, mỗi đóa là một volume. Đối với đóa cứng, mỗi DOS Partition là một volume. Mỗi volume tương ứng với một ổ đóa logic (A,B,C,D,E .) MSDOS volume được chia thành nhiều đơn vò lưu chứa thông tin bằng nhau gọi là cluster. Mỗi cluster là một tập hợp gồm n sector liên tiếp nhau. Trong một volume, các cluster đều có kích thước như nhau . Mỗi file dữ liệu được lưu giữ trong một hay nhiều cluster tùy theo kích thước của file. Chuỗi các cluster theo thứ tự lưu giữ thông tin của một file được gọi là một cluster chain. Để ghi nhớ về tình trạng của các cluster trong volume, MSDOS dùng một cấu trúc gọi là bảng FAT (File Alocation Table). Đây là một ma trận với mỗi phần tử đại diện cho một cluster. Giá trò ghi nhớ trong mỗi phần tử tượng trưng cho tình trạng của cluster mà nó đại diện. Mỗi một file, ngoài các thông tin được lưu giữ còn có các đặc trưng riêng như tên file, ngày giờ tạo lập . Các thông tin này được ghi nhận trong một danh sách đặc biệt gọi là thư mục (directory) . Mỗi phần tử trong thư mục gọi là một directory entry. Mỗi volume của MSDOS đều có một vùng dành riêng gọi là root directory. Trong đó có một số lượng xác đònh các directory entry để lưu giữ thông tin về các file. Để mở rộng khả năng lưu trữ file, từ version 2.0, hệ điều hành MSDOS cho phép ghi nhớ các directory entry theo cung cách tương tự như ghi nhớ thông tin của các các file dữ liệu. Các file đặc biệt chỉ lưu chứa các directory entry này được gọi là các thư mục con (sub directory).Khi các thư mục con chính bản thân nó lại lưu chứa các mô tả của các thư mục con khác, khái niệm cây thư mục được thành hình. 14.2CẤU TRÚC VOLUME MSDOS Một volume của MSDOS được chia thành các phần chính theo thứ tự như sau: Boot record (sector đầu tiên của volume) Các bảng FAT (thường có 2 bảng) Root directory Data (được chia thành các cluster - từ 2 trở đi) 14.3CẤU TRÚC CỦA MSDOS BOOT RECORD Media Descriptor | ValueMedia Types | |---------|------------------------------------ FFH2 sides, 8 sectors per track | FEH1 side, 8 sectors per track | FDH2 sides, 9 sectors per track | FCH1 side, 9 sectors per track | F9H2 sides, 15 sectors per track | F8Hfixed disk | ---------------------------------------------- ----------------------------------------------------------- |Offs|Size| Contents Version |----|----|--------------------------------------------------<-- 96 | 0003E9 XX XX or EB XX 90 (JMP to bootstrap routine)| |----|----|-------------------------------------------------- | | 0308OEM name and version | |----|----|-------------------------------------------------- | | 0B02Bytes per sector| |----|----|-------------------------------------------------- | | 0D01Sector per allocation unit (cluster size)| |----|----|-------------------------------------------------- | | 0E02Reserved sertors (size of boot record)| 2.x |----|----|-------------------------------------------------- | | 1001Number of FATs| |----|----|-------------------------------------------------- | | 1102Number of directory entries| |----|----|-------------------------------------------------- | | 1302Total sectors in volume (0 if volume size>32MB)| |----|----|-------------------------------------------------- | | 1501Media descriptor byte | |----|----|-------------------------------------------------- | | 1601Number of sertors per FAT | |----|----|--------------------------------------------------<-- | 1802Sertor per track| |----|----|-------------------------------------------------- | | 1A02Number of heads| 3.x |----|----|-------------------------------------------------- | | 1C02Number of hidden sector (LowWord)| |----|----|--------------------------------------------------<-- | 1E02Number of hidden sector (HiWord)| |----|----|-------------------------------------------------- | | 2004Total sectors in volume (volume size>32MB)| |----|----|-------------------------------------------------- | | 2401Physical drive number | |----|----|-------------------------------------------------- | | 2501Reserved | 4.x |----|----|--------------------------------------------------5.x | 2601Extended boot signature (29H)| 6.x |----|----|-------------------------------------------------- | | 270432-bit binary volume ID | |----|----|-------------------------------------------------- | | 2B0BVolume label| |----|----|-------------------------------------------------- | | 3608Reserved | |----|----|--------------------------------------------------<-- || Bootstrap routine | 14.4CAÁU TRUÙC CUÛA FAT (FILE ALOCATION TABLE) 97 Mỗi bảng FAT chiếm 1 hay nhiều sector. Mỗi bảng FAT được chia thành nhiều phần tử được đánh số từ 0. Có hai loại kích thước cho các phần tử của FAT:12 bit và 16 bit. Phần tử thứ 0 và thứ 1 của FAT được dành riêng cho các mô tả như sau: Byte thứ nhất sẽ mang giá trò của media descriptor byte. Các byte còn lại mang giá trò FFh Phần tử thứ 2 trở đi đại diện cho các cluster trong vùng data. Các giá trò ghi trong các phần tử này cho biết tình trạng của các cluster tương ứng như sau: 0 : cluster còn trống. 0002h - FFEFh : cluster ở giữa chain. Giá trò lưu chứa chính là số hiệu của cluster kế tiếp trong chain. FFF0h - FFF7h : cluster dành riêng (không được sử dụng). FFF7h : cluster bò hỏng FFF8h - FFFFh : cluster cuối cùng trong chain. 14.5CẤU TRÚC CỦA DIRECTORY ENTRY Offs Size Contents ==== ==== ================================================================ +0 8 |’F’ ‘I’ ‘L’ ‘E’ ‘N’ ‘A’ ‘M’ ‘E’| left-justified, blank-padded |---------|---------------- +8 3 |’E’ ‘X’ ‘T’| left-justified, blank-padded |---|---|---- +0bH 1 |atr| file attribute (*) |----------- - - ----- +0cH 0aHreserved | |------|--- - - Ĩ---- +16H 2timetime created or last modified in filetime format (*) |------- +18H 2datedate created or last modified in filetime format (*) |------- +1aH 2 |ClstrNo| cluster number of start of file (link into FAT) |-------------- +1cH 4file sizefile size in bytes -------------- File attribute format [7|6|5|4|3|2|1|0] |a|d|v|s|h|r| Ù—ÚĨÚĨÚĨÚĨÚĨÚỆ bit description ||ỐỚ> 0: 1=file is Read-only (can’t be written/deleted) || ỐỚỚỚ> 1: 1=Hidden |ỐỚỚỚỚỚ> 2: 1=System | ỐỚỚỚỚỚỚỚ> 3: 1=Volume label entry ỐỚỚỚỚỚỚỚỚỚ> 4: 1=subDirectory entry ỐỚỚỚỚỚỚỚỚỚỚỚ> 5: Archive bit. 1=file has NOT been backed up File time format [5|4|3|2|1|0|9|8Ú7|6|5|4|3|2|1|0] hourminutesec/2 | 98 Ù--------Ợ--------Ệ ỐỚỚỚỖỚỚỚỄ ỐỚỚỚỚỖỚỚỚỚỄ ỐỚỚỚỖỚỚỚỄ | ỐỚỚỚỚ> second/2 ỐỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚ> minute ỐỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚ> hour File date format [5|4|3|2|1|0|9|8Ú7|6|5|4|3|2|1|0] yearmonthday | Ù--------Ợ--------Ệ ỐỚỚỚỚỚỖỚỚỚỚỚỄ ỐỚỚỖỚỚỄ ỐỚỚỚỖỚỚỚỄ | ỐỚỚỚỚ> day ỐỚỚỚỚỚỚỚỚỚỚỚỚỚ> month ỐỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚ> year-1980 (0-119 valid) Byte đầu tiên của filename mang các ý nghóa như sau: Giá trò 0 : directory entry còn trống (chưa dùng đến) Giá trò E5h : directory entry đã bò xóa bỏ Các giá trò khác : directory entry đang được sử dụng Đối với thư mục con: File size luôn bằng 0 --> kích thước thư mục chỉ có thể suy từ FAT. Entry đầu có name là . (một dấu chấm) mang thông tin về vò trí, ngày giờ tạo lập, cluster bắt đầu của chính thư mục con đó. Entry thứ hai có name là (hai dấu chấm) mang thông tin về vò trí, ngày giờ tạo lập, cluster bắt đầu của thư mục chứa thư mục con đó. (nếu giá trò cluster bằng 0 --> thư mục mẹ là root) 14.6MINH HỌA VỀ TỔ CHỨC FAT VÀ THƯ MỤC starting cluster number ỚỚỂ Directory [----------------------------------------------v--------] Entry ỚỚ |M Y F I L E T X T|a| |tim|dat|08size | Ù--------------------------|-----Ệ ỒỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỄ 00 01 02 03 04 05 06 07 |8 09 0a 0b 0c 0d 0e 0f ---------------------------------v------------------------------ 00 |ID||ff||03=>04=>05=>ff||00||00||09=>0a=>0b=>15||00||00||00||00| ---------------------------------------------|------------------ ỒỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỚỄ ---------------------v------------------------------------------ 10 |00||00||00||00||00||16=>17=>19||f7||1a=>1b=>ff||00||00||00||00| -----------------------------|-------Á-------------------------- ỐỚỚỚỚỚỚỚỄ 14.7LOGICAL SECTOR Các sector trong một volume được MSDOS đánh số từ 0 trở đi. Các sector với cách đánh số như vậy gọi là logical sector. Về bản chất, logical sector và relative sector tương tự nhau. Về phương diện tính toán, relative sector bằng với logical sector cộng thêm vò trí bắt đầu của volume. Ta nên dùng interrupt 25h để đọc các logical sector. interrupt 26h để ghi các logical sector. Input: AL = drive number (0=A, 1=B, etc.) DX = sector bắt đầu 99 DS:BX = Ỵbuffer CX = số lượng sector đọc/ghi (<FFFFh) CX = FFFFh --> tác vụ trên BIG DOS partitions (>32M) DS:BX = Đòa chỉ của transfer packet (10 bytes) DS:[BX+0] sector bắt đầu (DWORD) DS:[BX+4] số lượng sectors đọc/ghi (WORD) DS:[BX+6] offset của buffer (WORD) DS:[BX+8] segment của buffer (WORD) Output: CF = 1 --> AX = error code Lưu ý : + Tất cả các thanh ghi sẽ bò thay đổi trừ DS, ES, SS, SP Các interrupt này kết thúc bằng lệnh retf, do đó sẽ để lại cờ hiệu trong stack khi kết thúc. Logical sector bắt đầu của một cluster tính bằng công thức sau : root—sects = (RootSize * 32) / SecSize first—data = ResSecs + (FatSize * FatCnt) + root—sects logical—sector = first—data + ((cluster—no - 2) * ClusSize) 100 CHƯƠNG 15 : CÁC CHỨC NĂNG VỀ FILE VÀ THƯ MỤC CỦA HỆ ĐIỀU HÀNH DOS Các chức năng cơ bản của hệ điều hành DOS đều tập trung vào Interrupt 21h. Số hiệu của chức năng được đặt trong thanh ghi AH,các tham số được đặt trong các thanh ghi còn lại. Các chuỗi được sử dụng trong interrupt 21h thường là các dãy ASCIIZ (các dãy ký tự kết thúc bằng mã 0). Khi chức năng thực hiện gặp lỗi, cờ hiệu CF được dựng lên và mã lỗi thường được đặt trong AX. Để truy nhập thông tin trong một file cần phải có các thông số như : - Tên file. - Vò trí lưu chứa directory entry. - Các cluster lưu chứa thông tin của file. - Kích thước file hiện hành. - Vò trí của con trỏ file. - Các thông số này được đặt trong một cấu trúc đặc biệt gọi là FCB (File Control Block) . Các chức năng về file sẽ dựa theo thông tin trong FCB để thực hiện. Mỗi file được điều khiển bởi một FCB. Trước khi file được truy nhập, FCB tương ứng với nó phải được chuẩn bò các thông số cơ bản (thông thường đó là các thông tin chứa trong directory entry tương ứng với file). Việc thiết lập các thông số ban đầu cho một FCB được gọi là tác vụ mở file (open file). Thông thường thì các chương trình ứng dụng chỉ cần chỉ ra một FCB đã có chứa sẵn tên file và yêu cầu hệ điều hành “mở file”. Hệ điều hành sẽ tìm kiếm và điền đầy đủ các thông tin còn lại vào FCB ấy. Sau đó, mỗi lần cần truy nhập file, chương trình ứng dụng sẽ gọi đến chức năng tương ứng của hệ điều hành đính kèm với đòa chỉ của FCB. Các chương trình ứng dụng phải tự mình tạo ra và quản lý các FCB. Điều này không được thuận tiện cho lắm khi phát triển các version mới của hệ điều hành : cấu trúc của FCB là bất biến. Để khắc phục vấn đề này, một cung cách tổ chức ở mức cao hơn được đưa ra : hệ điều hành tạo ra một cấu trúc tương tự như một mảng các FCB trong vùng nhớ riêng của nó. Khi chương trình ứng dụng cần mở một file, chỉ cần gọi chức năng mở file của hệ điều hành cùng với tên của file. Hệ điều hành sẽ tự động cấp phát một FCB còn trống, điền các thông số cần thiết vào đó và trả lại cho chương trình ứng dụng số hiệu của FCB đó (gọi là file handle number). Các tác vụ trên file kế tiếp chỉ cần đính kèm với số hiệu tương ứng của file. Mặt khác, ý niệm về file handle đã được mở rộng ra nhiều so với FCB. DOS quan niệm file handle là một đầu mối có thể cung cấp hoặc tiếp nhận thông in theo một số cung cách nhất đònh tùy theo thuộc tính của từng file handle. Theo đó file handle không chỉ quản lý các file trên đóa, mà còn có thể đại diện cho các thiết bò khác. Thí dụ : Bàn phím là một nguồn cung cấp dữ liệu một cách tuần tự. (Tương đương với một file mở ở mode read only) Máy in là một nơi tiếp nhận dữ liệu một cách tuần tự. (Tương đương với một file mở ở mode write only) Mặc dù hệ điều hành DOS cung cấp cả hai cung cách truy nhập file (theo FCB và theo file handle ), nhưng các chức năng dùng trực tiếp FCB chỉ nhằm tương thích với các version đầu tiên của DOS mà thôi. Trong tài liệu này, húng ta sẽ chỉ đề cập đến các chức năng dùng file handle. 15.1CÁC CHỨC NĂNG VỀ FILE 15.1.1Tạo lập file (Create) 101 Input : AH = 3Ch CX = File attribute DS:DX = ỴBuffer chứa file name (ASCIIZ) Output : CF = 1 --> AX = error code CF = 0 --> AX = file handle number (file tự động được mở với mode đọc/ghi) 15.1.2Mở file (Open) Input : AH = 3Dh AL = 0 --> mode read only = 1 --> mode write only = 2 --> mode read/write DS:DX = ỴBuffer chứa file name (ASCIIZ) Output : CF = 1 --> AX = error code CF = 0 --> AX = file handle number 15.1.3Đóng file (Close) Input : AH = 3Eh BX = File handle Output : CF = 1 --> AX = error code 15.1.4Đặt con trỏ file (Set file pointer) Input : AH = 42h AL = mode BX = File handle CX:DX = số gia (DWORD) AL = 0 --> file pointer := CX:DX AL = 1 --> file pointer := CX:DX + file pointer AL = 1 --> file pointer := CX:DX + file size Output : CF = 1 --> AX = error code CF = 0 --> DX:AX = gia trò mới của file pointer 15.1.5Đọc file (Read) Input : AH = 3Fh BX = File handle CX = Số byte đọc DS:DX = ỴBuffer Output : CF = 1 --> AX = error code CF = 0 --> AX = số byte thực sự được đọc Dữ liệu bắt đầu từ vò trí hiện hành của file pointer được đọc vào buffer. Không thể đọc vượt quá vò trí cuối file. 15.1.6Ghi file (Write) Input : AH = 40h BX = File handle CX = Số byte ghi 102 DS:DX = ỴBuffer Output : CF = 1 --> AX = error code Dữ liệu trong buffer được ghi xuống file bắt đầu từ vò trí hiện hành của file pointer. Nếu gặp vò trí cuối file, kích thước file sẽ được mở rộng ra theo số byte ghi thêm. Nếu CX = 0 --> kích thước file sẽ được gán bằng giá trò của file pointer hiện hành. Trong trường hợp này file có thể bò cắt ngắn đi hoặc mở rộng ra tùy theo vò trí của file pointer . 15.1.7Hủy bỏ file (Delete) Input : AH = 41h DS:DX = ỴBuffer chứa file name (ASCIIZ) (File name có thể bao gồm đầy đủ tên ổ đóa và PATH) Output : CF = 1 --> AX = error code 15.1.8Xem/sửa file attrib Input : AH = 43h AL = 0 --> lấy file attrib = 1 --> đặt file attrib mới CX = Attribute mới (AL=1) DS:DX = ỴBuffer chứa file name (ASCIIZ) Output : CF = 1 --> AX = error code CF = 0 --> CX = file Attribute (AL=0) 15.2CÁC CHỨC NĂNG VỀ THƯ MỤC 15.2.1Tạo thư mục Input : AH = 39h DS:DX = ỴBuffer chứa directory name (ASCIIZ) 15.2.2Xóa thư mục Input : AH = 3Ah DS:DX = ỴBuffer chứa directory name (ASCIIZ) 15.2.3Chỉ đònh thư mục hiện hành Input : AH = 3Bh DS:DX = ỴBuffer chứa directory name (ASCIIZ) 15.2.4Lấy tên thư mục hiện hành Input : AH = 47h DL = driver code ( 0=default,1=A,2=B,3=C .) DS:SI = Address of 64 bytes buffer Path name trả lại không bắt đầu bằng tên ổ đóa lẫn dấu ‘\’ và kết thúc bằng mã 0h 15.2.5Tìm directory entry đầu tiên trong thư mục Input : AH = 4Eh CX = search attribute DS:DX = ỴBuffer chứa search name (ASCIIZ) 103 search name có thể chỉ đònh bằng các ký hiệu ‘?’ hay ‘*’. Nếu tìm thấy, các thông tin của phần tử này được đặt trong DTA 15.2.6Tìm directory entry kế tiếp trong thư mục Input : AH = 4Fh DOS sử dụng các thông tin cung cấp bởi lời gọi chức năng 04E trước đó ( lưu giữ trong DTA từ byte 0 -> 14 ) để tìm phần tử kế tiếp . Nếu tìm thấy, các thông tin của phần tử này được đặt trong DTA 15.2.7Cấu trúc DTA (Disk transfer area) 00 -> 14 : Vùng dành riêng của DOS 15 : File attribute 16 -> 17 : File time 18 -> 19 : File date 1A -> 1D : File size 1E -> 2A : File name ( Kết thúc bằng mã 0h ) Thông thường khi chương trình vừa được gọi thực hiện DTA được đặt tại offset 080h của PSP . Đối với file dạng COM, đòa chỉ này là CS:080 Lấy đòa chỉ DTA : Input : AH = 02Fh Output: ES:BX = segment:offset of DTA Đònh đòa chỉ DTA : Input : AH = 01Ah DS:DX = segment:offset of DTA 15.2.8Duyệt cây thư mục Ta có thể sử dụng hai chức năng 4Eh và 4Fh để hiển thò tất cả các file có tên trùng với Search— name trên toàn đóa theo giải thuật sau: Search—path : là path dò tìm hiện tại Search—name : tên của phần tử cần tìm (có thể bao gồm ? và * ) 1.Tạo Search—path bắt đầu từ thư mục chủ (Root) <Driver—name>:\ ; Thí dụ A:\ 2.Tìm tất cả các file theo Search—name bằng cách : Gọi chức năng 04Eh với CX = 012h DS:DX = segment:offset of Search—path+Search—name Hiển thò tên file vừa tìm thấy Gọi chức năng 04Fh cho đến khi hết tìm thấy . 3.Tìm thư mục đầu tiên trong Search—path bằng cách gọi chức chức năng 04Eh với CX = 012h ( Tìm cả những thư mục “dấu mặt” ) DS:DX = segment:offset of Search—path+’\*.*’ Nếu không tìm thấy : 3.1 Nếu Search—path đang chỉ vào thư mục chủ thì kết thúc Nếu Search—path đang chỉ vào một thư mục con thì : 3a. Bỏ tên thư mục cuối cùng trong Search—path và trả lại DTA trước đó 104 3b. Tìm tên thư mục kế tiếp bằng chức năng 04Fh ( Tìm theo thông tin của DTA vừa lấy lại ) Nếu không tìm thấy lặp lại bước 3.1 Nếu tìm thấy, tiếp tục bước 4 4.Thêm tên thư mục mới tìm thấy vào Search—path Hiển thò Search—path mới 5.Lưu DTA hiện tại và tạo DTA mới với Search—path mới 6.Lặp lại bước 2 15.3CÁC MÃ LỖI THƯỜNG GẶP CỦA INTERRUPT 021H : Hex Dec Meaning --- --- ----------------------- 1 1 Invalid function number 2 2 File not found 3 3 Path not found 4 4 Too many open files 5 5 Access denied 6 6 Invalid handle 7 7 Memory ctrl blocks destroyed 8 8 Insufficient memory 9 9 Invalid memory block address 0aH 10 Invalid environment 0bH 11 Invalid format 0cH 12 Invalid access code 0dH 13 Invalid data 0eH 14 (not used) 0fH 15 Invalid drive specified 10H 16 Can’t remove current directory 11H 17 Not same device 12H 18 No more matching files . 95 CHƯƠNG 14 : TỔ CHỨC ĐĨA CỦA HỆ ĐIỀU HÀNH MSDOS 14.1MỘT SỐ Ý NIỆM Hệ điều hành MSDOS tổ chức lưu trữ thông tin trên đóa theo các. 15 : CÁC CHỨC NĂNG VỀ FILE VÀ THƯ MỤC CỦA HỆ ĐIỀU HÀNH DOS Các chức năng cơ bản của hệ điều hành DOS đều tập trung vào Interrupt 21h. Số hiệu của chức năng

Ngày đăng: 21/10/2013, 23:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan