Hướng dẫn thực hành Hệ điều hành - Bài 3: Truy xuất trực tiếp đĩa sử dụng hàm C
Trên mỗi mặt có nhiều ñường tròn ñồng tâm (track) ñược ñánh sốtừngoài vào, bắt
ñầu từtrack 0.
Mỗi track ñược chia thành nhiều cung tròn (sector). Sector ñược ñánh sốtừ1
ðơn vịcơsởcủa ñĩa là sector, mỗi lần ñọc / ghi ít nhất một sector.
Một sector thông thường có kích thước 512 bytes.
Cyclinder là tập hợp các track cùng sốhiệu trên tất cảcác mặt.
HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa sử dụng hàm C Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 1 Hướng dẫn thực hành bài 3 A. Lý thuyết I. Tổ chức dữ liệu trên ñĩa từ ðĩa từ hình tròn gồm nhiều mặt (head). Mỗi mặt có tương ứng một ñầu ñọc ñể ñọc hoặc ghi dữ liệu. Các mặt ñược ñánh số từ 0 theo thứ tự sau: Mặt trên: 0 2 4 6 8 ... Mặt dưới: 1 3 5 7 9 ... Trên mỗi mặt có nhiều ñường tròn ñồng tâm (track) ñược ñánh số từ ngoài vào, bắt ñầu từ track 0. Mỗi track ñược chia thành nhiều cung tròn (sector). Sector ñược ñánh số từ 1 ðơn vị cơ sở của ñĩa là sector, mỗi lần ñọc / ghi ít nhất một sector. Một sector thông thường có kích thước 512 bytes. Cyclinder là tập hợp các track cùng số hiệu trên tất cả các mặt. ðĩa mềm 1.44 MB có 2 head / disk, 80 track / head, 18 sector / track. => có 2880 sector trên ñĩa, mỗi sector = 512 bytes. II. Sector Vật lý và Sector Logic Một sector ñược xác ñịnh vị trí bằng 2 cách: • Sector Vật lý: ñược xác ñịnh bằng 3 tham số: (sector, track, head) • Sector Logic: ñược xác ñịnh là vị trí sector trên ñĩa ñược ñánh số từ 0, tương ứng với sector vật lý (1, 0, 0). Cách ñánh số của sector logic: ðánh số trên hết 1 cyclinder sau ñó mới chuyển sang cyclinder kế tiếp. Ví dụ: với ñĩa có 2 mặt, 18 sectors / track, các sector logic sẽ ñược ñánh số như sau: Sector Logic Sector vật lý 0 1 ... 17 18 19 ... 35 36 37 ... (1, 0, 0) (2, 0, 0) ... (18, 0, 0) (1, 0, 1) (2, 0,1) ... (18, 0, 1) (1, 1, 0) (2, 1,0 ) ... III. Truy xuất Sector Vật lý và Sector Logic trong Borland C++ • ðọc nội dung sector trên ñĩa vào vùng nhớ: int absread(int drive, HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa sử dụng hàm C Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 2 int nsects, long lsect, void *buffer); drive: thứ tự ổ ñĩa sẽ truy xuất (0: ñĩa A; 1: ñĩa B; 2: ñĩa C......) nsects: số lượng sectors cần ñọc lsect: ñịa chỉ sector logic bắt ñầu ñọc. buffer: vùng nhớ lưu nội dung thông tin cần ñọc. Lưu ý: vùng nhớ buffer cần ñược cấp phát trước với ñộ lớn cần thiết ñể chứa nội dung của sector. Ví dụ: ñọc nội dung của boot sector của ổ ñĩa A (ñĩa mềm) vào vùng nhớ buffer 512 bytes absread (0, 1, 0, buffer); • Ghi nội dung từ vùng nhớ vào sector trên ñĩa int abswrite(int drive, int nsects, long lsect, void *buffer); drive: thứ tự ổ ñĩa sẽ truy xuất (0: ñĩa A; 1: ñĩa B; 2: ñĩa C......) nsects: số lượng sectors cần truy xuất lsect: ñịa chỉ sector logic bắt ñầu truy xuất. buffer: vùng nhớ lưu nội dung thông tin cần truy xuất. Lưu ý: cần cẩn thận với các thao tác ghi nội dung vào sector trên ñĩa (nhất là ñối với ñĩa cứng) vì có thể gây hư ñĩa, mất dữ liệu hoặc hư hệ ñiều hành. • Truy xuất trực tiếp sector vật lý int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void *buffer); cmd : thao tác cần thực hiện. Ta cần quan tâm ñến 2 giá trị sau: 2 (_DISK_READ) : thực hiện ñọc sector 3 (_DISK_WRITE) : thực hiện ghi sector drive : thứ tự ổ ñĩa sẽ truy xuất (0: ñĩa A; 1: ñĩa B; 2: ñĩa C......) nsects : số lượng sectors cần truy xuất. HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa sử dụng hàm C Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 3 head : head cần truy xuất. track : track cần truy xuất. sector : sector bắt ñầu cần truy xuất. buffer : vùng nhớ lưu nội dung thông tin cần ghi. HDTH môn Hệ ñiều hành Truy xuất trực tiếp ñĩa sử dụng hàm C Khoa Công Nghệ Thông Tin – Trường ðH KHTN Tp.HCM 4 B. Thực hành 1. VCT nhaäp vaøo ñòa chæ logic cuûa 1 sector, ñoïc & hieån thò ra maøn hình (döôùi daïng Hex) noäi dung cuûa sector ñoù. 2. Töông töï nhö baøi treân nhöng ñòa chæ sector nhaäp vaøo laø ñòa chæ vaät lyù. 3. VCT nhaäp vaøo caùc thoâng soá cuûa 1 ñóa vaät lyù: soá sector/track, soá track/side, soá side; sau ñoù nhaäp tieáp ñòa chæ logic hoaëc vaät lyù cuûa 1 sector, tính & xuaát ra ñòa chæ töông öùng coøn laïi cuûa sector ñoù. 4. VCT nhaäp vaøo ñòa chæ logic hoaëc vaät lyù (tuøy theo söï löïa choïn cuûa ngöôøi duøng) cuûa 1 sector, ñoïc vaø löu noäi dung sector ñoù vaøo 1 file. Vaø CT thöïc hieän coâng vieäc töông öùng ngöôïc laïi (ñoïc noäi dung file & löu vaøo sector). Hướng dẫn: Bài 1, 2, 4 : sử dụng các hàm absread, abswrite, biosdisk và các thao tác ñọc, ghi file trong Borland C++. Bài 3 : Gọi st : số sectors / track th : số tracks / side (head) side : số lượng side l : sector logic h : giá trị head t : giá trị track s : giá trị sector • Công thức ñổi từ sector vật lý sang sector logic: l = t*st*side + h*st + s -1 • Công thức ñổi từ sector logic sang sector vật lý: s = (l mod st) + 1 t = l div (st * side) h = (l div st) mod side Chú ý: Các bài thực hành truy xuất dữ liệu sector trên ñĩa cần thực hiện trên ñĩa mềm ñể ñảm bảo an toàn
File đính kèm:
- Hướng dẫn thực hành Hệ điều hành - Bài 3 Truy xuất trực tiếp đĩa sử dụng hàm C.pdf