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.

pdf4 trang | Chuyên mục: Hệ Điều Hành | Chia sẻ: dkS00TYs | Lượt xem: 2622 | Lượt tải: 1download
Tóm tắt nội dung 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, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfHướ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