CHƯƠNG 4 : HỆ THỐNG FILE
4.12. QUẢN LÝ VÀO/RA
4.12.2. Tổ chức phân hệ quản lý vào/ra
Nguyên tắc chung
Như đã nói ở trên, yêu cầu đặt ra với quản lý vào/ra là cho phép các ứng dụng và tiến trình giao tiếp với thiết bị theo một chuẩn chung, tổng quát, không cần quan tâm tới đặc điểm cụ thể của thiết bị. Ví dụ, ứng dụng cần có khả năng đọc file mà khơng cần quan tâm tới đặc điểm cụ thể của đĩa hay thẻ nhớ nơi lưu file đó. Để thỏa mãn yêu cầu này, phân hệ vào/ra được thiết kế dựa trên hai kỹ thuật chính:
- Thứ nhất, phần quản lý vào/ra được phân lớp, các lớp ở mức trên có mức độ trừu tượng hóa cao hơn lớp mức dưới. Nói cách khác, càng lên mức cao hơn mức độ chuẩn hóa càng cao, càng ít liên quan tới chi tiết cụ thể của thiết bị.
- Thứ hai, mỗi thiết bị cụ thể được quản lý bởi một chương trình quản lý thiết bị riêng, được gọi là driver. Driver được lập trình theo các chi tiết kỹ thuật của thiết bị nhưng có giao
diện giống nhau dưới dạng các hàm mà mơ đun mức trên có thể gọi để giao tiếp với thiết bị. Như vậy, khi thiết bị thay đổi, ta chỉ cần thay đổi driver trong khi vẫn giữ nguyên các lớp trên. Sau khi được cài đặt, driver trở thành một thành phần của nhân và là lớp dưới cùng của phân hệ quản lý vào/ra.
Trên hình 4.25 thể hiện cấu trúc phân lớp của phân hệ vào/ra với các driver cho thiết bị.
Phân loại driver
Do chủng loại và tính chất thiết bị rất khác nhau, khơng thể có giao diện chung cho tất cả các driver. Ví dụ, driver cho thiết bị vào/ra dạng khối như đĩa, sẽ cung cấp các hàm như read() hay write() cho phép đọc ghi từng khối dữ liệu. Trong khi đó, driver cho thiết bị vào ra dạng ký tự, điển hình là bàn phím, sẽ cung cấp hàm get() hay put() cho phép gửi và nhận từng byte. Để đảm bảo mức độ trừu tượng cao hơn, thuận lợi hơn cho các ứng dụng, các driver được nhóm lại thành những nhóm tương tự nhau, mỗi nhóm như vậy được chuẩn hóa để có cùng giao diện. Các nhóm driver thường gặp bao gồm:
- Nhóm vào/ra theo khối, cho các driver thiết bị như đĩa, thẻ USB. Giao diện cho driver thuộc nhóm này gồm các lệnh read(), write(), seek(), trong đó seek() chỉ dùng với thiết bị cho phép truy cập trực tiếp.
- Nhóm vào/ra theo chuỗi ký tự, bao gồm driver chuột, bàn phím hoặc thiết bị tương tự. - Nhóm driver mạng. Ví dụ điển hình của giao diện với driver cho thiết bị mạng là giao diện
dưới dạng socket. Giao diện dạng này gồm các hàm cho phép một ứng dụng tạo ra socket – có thể hiểu là điểm kết nối với ứng dụng ở xa – tới một địa chỉ nào đó. Sau đó socket sẽ lắng nghe cho tới khi ứng dụng ở xa kết nối vào socket. Tiếp theo, giao diện cung cấp các hàm cho phép gửi và nhận dữ liệu với ứng dụng ở xa thông quan socket được tạo.
P
hầ
n
mềm
Phần còn lại của hệ điều hành
Phân hệ quản lý vào/ra Driver thiết bị Driver thiết bị … Driver thiết bị Driver thiết bị P hầ n cứng Bộ điều khiển thiết bị Bộ điều khiển thiết bị
… khiển thiết Bộ điều
bị
Bộ điều khiển thiết
bị
Thiết bị Thiết bị … Thiết bị Thiết bị
Hình 4.25: Cấu trúc phân hệ vào/ra PTIT
Các thao tác do driver thiết bị thực hiện
Driver thiết bị chịu trách nhiệm thực hiện các công việc sau: - Khởi tạo thiết bị.
- Giải mã các lệnh (lời gọi hệ thống) từ hệ điều hành. - Quản lý việc truyền dữ liệu vào/ra thiết bị.
- Nhận và xử lý ngắt liên quan tới thiết bị.
- Đảm bảo tính nhất quán giữa các cấu trúc dữ liệu do driver và các mô đun khác của hệ điều hành sử dụng.
Các bước xử lý yêu cầu vào/ra do driver thực hiện.
Quy trình xử lý yêu cầu vào/ra của driver có thể tóm tắt một cách đơn giản với các thao tác sau:
- Kiểm tra tính hợp lệ của tham số trong yêu cầu vào/ra và dịch yêu cầu vào ra sang ngôn ngữ phù hợp với thiết bị.
- Kiểm tra xem thiết bị có rỗi khơng. Nếu thiết bị bận, tiến trình đưa u cầu xử lý có thể bị phong tỏa để chờ cho tới khi thiết bị hết bận.
- Sinh các lệnh điều khiển thiết bị: ghi vào thanh ghi tương ứng của bộ điều khiển thiết bị, kiểm tra độ sẵn sàng của thiết bị sau mỗi lệnh.
- Phong tỏa và chờ đến khi bộ điều khiển thiết bị thực hiện xong lệnh. - Kiểm tra lỗi.
- Trả về thông tin trạng thái và kết thúc việc xử lý.