DISK I-O

9 279 0
Tài liệu đã được kiểm tra trùng lặp
DISK I-O

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

Thông tin tài liệu

86 CHƯƠNG 13 : DISK I/O 13.1KHÁI NIỆM Phương tiện lưu giữ thông tin đóa từ gồm các phần chính như sau: Các mặt đóa tròn, đồng trục được phủ một lớp vật liệu từ tính. Tương ứng với mỗi mặt đóa là một đầu từ đọc/ghi. Các đầu đọc ghi được gắn vào một bộ phận điều khiển chung cho phép chúng di chuyển từ mép ngoài vào tâm (và ngược lại) của các mặt đóa. Motor cho phép quay trục đóa với một vận tốc ổn đònh. Mạch điều khiển đi kèm với ổ đóa. Khi trục đóa quay, các đầu đọc/ghi (Head) vạch thành các đường đồng tâm trên các mặt đóa gọi là từ đạo (Track). Với mỗi vò trí của head, ta có một tập hợp các từ đạo trên các mặt đóa gọi là Cylinder. Thông tin được ghi trên các từ đạo theo từng cung (sector). Một sector thường chứa được 512 bytes. Trên mặt đóa, các từ đạo và đầu đọc/ghi được đánh số từ 0 . Trên từ đạo các sector được đánh số từ 1. Các từ đạo (trên các mặt dóa khác nhau) có cùng một số hiệu tạo thành một mặt trụ (Cylinder) lưu chứa thông tin. Trên các máy IBM PC/XT/AT và tương thích, các ổ đóa được đánh số như sau: Drive type Drive name Drive—ID ========== ========== ======== Floppy 1 A 0 Floppy 2 B 1 Fix disk 1 - 80h Fix disk 2 - 81h 13.2ĐIỀU KHIỂN Mạch điều khiển ổ đóa được nối với disk controller của máy vi tính. Các điều khiển đóa được thực hiện thông qua disk controller. Điều khiển đóa một cách trực tiếp qua disk controller rất phức tạp và khó khăn. Vì vậy nếu không có yêu cầu thật đặc biệt, hãy dùng các trình điều khiển đóa của BIOS. Các chức năng này được cung cấp bởi INT 013h . 13.3INTERRUPT 013H (CÁC CHỨC NĂNG THÔNG DỤNG) 13.3.1Reset disk Input: AH = 0 DL = Drive—ID > Reset lại các thông số cho controller tương ứng với ổ đóa. 13.3.2Get error status Input: AH = 1 DL = Drive—ID Output: AL = Error code (AL=0 --> No error) 13.3.3Read sectors Input: AH = 2 F E D C B A 9 8 7 6 5 4 3 2 1 0 AL = Sector count ------------------------------- 87 CX = SecCylCylinder |Cyl| Begin Sec | DH = Head ------------------ DL = Drive—ID 7 6 5 4 3 2 1 0 9 8 5 4 3 2 1 0 ES:BX = ỴRead buffer ------------------- ----------- Output: CF = 1 --> Error (AH = Error code) CF = 0 --> OK 13.3.4Write sectors Input: AH = 3 Các tham số tương tự như read sectors. 13.3.5Verify sectors Input: AH = 4 Các tham số tương tự như read sectors, nhưng không cần chỉ đònh giá trò cho ES:BX. Dữ liệu không được chuyển vào bộ nhớ của máy tính. 13.3.6Format track Input: AH = 5 AL = Sectors per track CX = SecCyl DH = Head DL = Drive—ID ES:BX = ỴSector descriptor table Diskette --> 4 bytes CHNS element C:Cylinder,H:Head,N:SecNo,S:Size of sector S=0 -> 128 bytes/sector S=1 -> 256 bytes/sector S=2 -> 512 bytes/sector S=3 -> 1024 bytes/sector Require AL*4 bytes buffer size Hard disk --> 2 bytes FN element F:Status flag (Return value) F=0--> good sector N:SecNo Require 512 bytes buffer size (AT Technical reference) 13.3.7Get drive parameter Input: AH = 8 DL = Drive—ID Output: DL = Number of hardisk in first controller DH = Maximum value of head CX = Maximum value of SecCyl Có thể tham chiếu đến các thông số của các đóa cứng một cách chi tiết hơn qua hard disk parameter table. Int 041h chỉ đến bảng tham số của drive 080h Int 046h chỉ đến bảng tham số của drive 081h 88 13.3.8Read disk type Input: AH = 15h DL = Drive—ID Output: AH = 0 --> Drive is not present AH = 1,2 --> Diskette AH = 3 --> Hard disk 13.3.9Disk error code - 00H no error on last operation - 01H bad command: invalid request to controller - 02H bad address mark - 03H write protect: attempted to write on write-protected diskette - 04H sector ID bad or not found. - 05H reset failed - 08H DMA failure - 09H DMA overrun: attempted to write across a 64K-byte boundary. - 0bH bad track flag encountered - 10H bad CRC: invalid CRC when data checked. - 11H data corrected: recoverable error found/corrected by ECC algorithm - 20H controller failure - 40H bad seek. requested track not found - 80H time out. drive did not respond - 0aaH drive not ready - 0bbH undefined error - 0ffH sense operation failed 13.3.10Hard disk parameter table (INT 41 & INT 46) Offs Size Description 1. 00h WORD number of cylinders 2. 02h BYTE number of heads 3. 03h WORD starting reduced write current cylinder (XT only,0 for others) 4. 05h WORD starting write precompensation cylinder number 5. 07h BYTE maximum ECC burst length (XT only) 6. 08h BYTE control byte - bits 0-2: drive option (XT only, 0 for others) - bit 3: set if more than 8 heads (AT and later only) - bit 4: always 0 - bit 5: set if manufacturer’s defect map on max cylinder+1 - (AT and later only) - bit 6: disable ECC retries - bit 7: disable access retries 7. 09h BYTE standard timeout (XT only, 0 for others) 8. 0Ah BYTE formatting timeout (XT and WD1002 only, 0 for others) 9. 0Bh BYTE timeout for checking drive (XT and WD1002 only,0 for others) 10. 0Ch WORD cylinder number of landing zone (AT and later only) 11. 0Eh BYTE number of sectors per track (AT and later only) 89 12. 0Fh BYTE reserved 13.4RELATIVE SECTOR Trong khai thác thông tin trên đóa, người ta thường khái quát hóa cấu trúc đóa thành một vật thể ký tin với đơn vò lưu chứa cơ bản là các sector được đánh số liên tục từ 0. Các sector với cách đánh số như vậy gọi là relative sector. Theo ý niệm trên, ta có đối chiếu giữa các physical sector và relative sector như sau : (Giả sử đóa có 975 cylinders, 5 heads, 17 sectors/track) Relative sector Physical sector (C:H:S) 0 0:0:1 1 0:0:2 2 0:0:3 . . 16 0:0:17 17 0:1:1 18 0:1:2 . . 84 0:4:17 85 1:0:1 . . Relative sector không phụ thuộc vào các thông số vật lý của đóa, do đó cho phép tổ chức lưu giữ thông tin trên đóa theo một số quy tắc tổng quát. Theo đó các đoạn chương trình truy nhập đóa sẽ không lệ thuộc vào các thông số khác nhau của các loại đóa cứng. 13.5PARTITION Mỗi một hard disk trên IBM PC được chia thành một hay nhiều phần (về mặt logic) gọi là các partition. Mỗi partition được tạo thành từ một tập hợp các relative sector liên tiếp nhau. Thông thường các partition trên một hard disk được sắp xếp kề nhau, không có các sector trống ở giữa. Mỗi partition thường bắt đầu từ sector 1, head 0 của một cylinder nào đó. Thông tin về các partition được lưu giữ trong một cấu trúc đặc biệt gọi là partition table. Đó là một bảng gồm 4 phần tử đặt tại offset 01BEh trong master boot của hard disk. Mỗi phần tử thuộc bảng được gọi là một partion entry. Mỗi partition entry sẽ lưu giữ thông tin về một partition. Cấu trúc của một partition entry: offs Size Contents ==== ==== ============================================================== +0 1 |Boot Boot flag: 0=not active, 80H = active |---- +1 1 |HdBegin head of the first sector of partition |---|---- +2 2 |Sec Cyl| Begin SecCyl of the first sector of partition |---|---- +4 1 |Sys| System Code: 0=unknown, 1=DOS 12-bit FAT, 4=16-bit |---- 5= Extended DOS Partition, 6=BIG DOS +5 1 |HdEnd head of the last sector of partition |---|---- 90 +6 2 |Sec Cyl| End SecCyl of the last sector of partition |------|------- +8 4low highBeginning relative sector number |------|------- +0cH 4low highSize (total sectors in partition) -------------- Active Partition là partition có chứa hệ điều hành sẽ được tự động nạp vào sau khi khởi động computer. Trên mỗi đóa cứng chỉ có một active partition. 13.6MASTER BOOT (PHYSIC BOOT) Sector 0:0:1 được BIOS quy đònh là master boot của hard disk. Master boot gồm hai phần chính: Partition table và bootstrap routine. Cấu trúc của master boot: Offset Size Contents ====== ==== ============================================================ ----- - - - - - - - - - - - - - - - - - - - - - - - - - ----- +0 1beHcode to load and execute boot sector of active partition | |--- - Ĩ - Ĩ - Ĩ -- Ĩ - Ĩ - Ĩ - Ĩ - Ĩ - Ĩ - Ĩ - Ĩ - Ĩ---- +1beH 10H| partition 1 entry (see below) |--- - Ĩ - Ĩ - Ĩ---- +1ceH 10H| partition 2 entry |--- - Ĩ - Ĩ - Ĩ---- +1deH 10H| partition 3 entry |--- - Ĩ - Ĩ - Ĩ---- +1eeH 10H| partition 4 entry |--- -- Ĩ - Ĩ---- +1feH 255 AApartition table signature (0aa55H) -------- Đoạn chương trình trong master boot được gọi là bootstrap routine. Khi computer được khởi động, sau quá trình POST (Power On Self Test), master boot được đọc vào đòa chỉ 0:7C00 và quyền điều khiển được chuyển đến vò trí ấy. Sau khi nhận được quyền điều khiển, bootstrap routine sẽ dò tìm active partition trong partition table (tại đòa chỉ 07DBE). Nếu tìm thấy,bootstrap routine sẽ nạp module khởi động hệ điều hành từ active partition và chuyển quyền điều khiển cho module ấy. 13.7MỘT THÍ DỤ VỀ THỦ TỤC ĐỌC/GHI RELATIVE SECTOR. Drive—No db -1 C—Count dw 0 H—Count dw 0 SPT dw 0 ; SecPerTrack GetHD—parm proc near 91 ; DL = Drive—No ; ; Thủ tục này phải thực hiện trước ; khi dùng ReadSec push ax push bx push cx push dx mov byte ptr Drive—No,dl mov ah,8 int 013h inc dh mov byte ptr H—Count,dh mov ax,cx and al,00111111b mov byte ptr SPT,al xchg ch,cl mov ax,cx mov cl,6 shr ah,cl inc ax mov word ptr C—Count,ax pop dx pop cx pop bx pop ax ret GetHD—parm endp LogicToPhysic proc near push bx div word ptr SPT inc dx mov bx,dx ; số dư là SecNo xor dx,dx div word ptr H—count mov dh,dl ; số dư là HeadNo xchg ah,al ; thương số là CylinderNo mov cl,6 shl al,cl ; tạo SecCyl value or ax,bx mov cx,ax mov dl,byte ptr Drive—No mov ax,bx sub ax,word ptr SPT neg ax 92 inc ax ; AX = số sector tối đa có thể đọc pop bx ; ( SPT - BeginSec +1 ) ret LogicToPhysic endp ;-------------------------- ReadSec1 proc near ; DX:AX = Relative sector number ; ES:BX = ỴBuffer ; ; Đọc một sector ; call LogicToPhysic mov ax,0201h int 013h ret ReadSec1 endp ;-------------------------- ReadSec2 proc near ; DX:AX = Relative sector number ; ES:BX = ỴBuffer ; CX = Sector count ; ; Đọc nhiều sector, gọi Int—13 n lần ( n = sector count ) ; RS2a: push ax push cx push dx call LogicToPhysic mov ax,0201h int 013h pop dx pop cx pop ax jc RS2b inc ax adc dx,0 add bx,0200h loop RS2a RS2b: jnc RS2c mov ah,1 int 013h 93 stc RS2c: ret ReadSec2 endp ;-------------------------- BeginRS dw 0,0 TotalSec dw 0 ReadSec3 proc near ; DX:AX = Relative sector number ; ES:BX = ỴBuffer ; CX = Sector count ; ; Đọc nhiều sector, gọi Int—13 với số lần ít nhất. ; mov word ptr TotalSec,cx mov word ptr BeginRS[0],ax mov word ptr BeginRS[2],dx RS3—0: mov ax,word ptr BeginRS[0] mov dx,word ptr BeginRS[2] call LogicToPhysic cmp ax,TotalSec ; ax = SPT - BeginSec +1 jbe RS3—1 mov ax,TotalSec RS3—1: sub TotalSec,ax add word ptr BeginRS[0],ax adc word ptr BeginRS[2],0 push ax mov ah,2 int 013h pop ax jc RS3—2 xchg ah,al shl ax,1 add bx,ax ; ax = ax*512 cmp TotalSec,0 jne RS3—0 RS3—2: jnc RS3—3 mov ah,1 int 013h stc 94 RS3—3: ret ReadSec3 endp . ======== Floppy 1 A 0 Floppy 2 B 1 Fix disk 1 - 80h Fix disk 2 - 81h 13.2ĐIỀU KHIỂN Mạch điều khiển ổ đóa được nối với disk controller của máy vi tính. Các. Output: AH = 0 --> Drive is not present AH = 1,2 --> Diskette AH = 3 --> Hard disk 13.3. 9Disk error code - 00H no error on last operation - 01H bad

Ngày đăng: 29/09/2013, 11:20

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

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

Tài liệu liên quan