Hệ điều hành - Phần mềm I / O
Phần mềm I / O thường được tổ chức theo các lớp sau:
User Level Libraries- Điều này cung cấp giao diện đơn giản cho chương trình người dùng để thực hiện đầu vào và đầu ra. Ví dụ,stdio là một thư viện được cung cấp bởi các ngôn ngữ lập trình C và C ++.
Kernel Level Modules - Điều này cung cấp trình điều khiển thiết bị để tương tác với bộ điều khiển thiết bị và các mô-đun I / O độc lập với thiết bị được trình điều khiển thiết bị sử dụng.
Hardware - Lớp này bao gồm phần cứng thực tế và bộ điều khiển phần cứng tương tác với trình điều khiển thiết bị và làm cho phần cứng sống động.
Một khái niệm chính trong thiết kế phần mềm I / O là nó phải độc lập với thiết bị, nơi có thể viết các chương trình có thể truy cập bất kỳ thiết bị I / O nào mà không cần phải chỉ định trước thiết bị. Ví dụ, một chương trình đọc tệp dưới dạng đầu vào sẽ có thể đọc tệp trên đĩa mềm, trên đĩa cứng hoặc trên CD-ROM mà không cần phải sửa đổi chương trình cho từng thiết bị khác nhau.
Trình điều khiển thiết bị
Trình điều khiển thiết bị là các mô-đun phần mềm có thể được cắm vào hệ điều hành để xử lý một thiết bị cụ thể. Hệ điều hành nhận trợ giúp từ trình điều khiển thiết bị để xử lý tất cả các thiết bị I / O. Trình điều khiển thiết bị đóng gói mã phụ thuộc vào thiết bị và triển khai một giao diện tiêu chuẩn theo cách mà mã chứa thanh ghi dành riêng cho thiết bị đọc / ghi. Trình điều khiển thiết bị, thường do nhà sản xuất thiết bị viết và cung cấp cùng với thiết bị trên đĩa CD-ROM.
Trình điều khiển thiết bị thực hiện các công việc sau:
- Để chấp nhận yêu cầu từ phần mềm độc lập thiết bị ở trên với nó.
- Tương tác với bộ điều khiển thiết bị để lấy và cung cấp I / O và thực hiện xử lý lỗi cần thiết
- Đảm bảo rằng yêu cầu được thực hiện thành công
Cách trình điều khiển thiết bị xử lý một yêu cầu như sau: Giả sử một yêu cầu đến để đọc khối N. Nếu trình điều khiển không hoạt động tại thời điểm một yêu cầu đến, nó sẽ bắt đầu thực hiện yêu cầu ngay lập tức. Ngược lại, nếu trình điều khiển đã bận với một số yêu cầu khác, nó sẽ đặt yêu cầu mới vào hàng đợi các yêu cầu đang chờ xử lý.
Trình xử lý ngắt
Trình xử lý ngắt, còn được gọi là quy trình dịch vụ ngắt hoặc ISR, là một phần của phần mềm hoặc cụ thể hơn là một hàm gọi lại trong hệ điều hành hoặc cụ thể hơn là trong trình điều khiển thiết bị, mà việc thực thi được kích hoạt bằng việc nhận ngắt.
Khi ngắt xảy ra, thủ tục ngắt thực hiện bất cứ điều gì nó phải làm để xử lý ngắt, cập nhật cấu trúc dữ liệu và đánh thức quá trình đang chờ ngắt xảy ra.
Cơ chế ngắt chấp nhận một địa chỉ ─ một số chọn một quy trình / chức năng xử lý ngắt cụ thể từ một tập hợp nhỏ. Trong hầu hết các kiến trúc, địa chỉ này là một phần bù được lưu trữ trong một bảng được gọi là bảng vectơ ngắt. Vectơ này chứa địa chỉ bộ nhớ của các trình xử lý ngắt chuyên dụng.
Phần mềm I / O độc lập với thiết bị
Chức năng cơ bản của phần mềm độc lập với thiết bị là thực hiện các chức năng I / O chung cho tất cả các thiết bị và cung cấp giao diện thống nhất cho phần mềm cấp người dùng. Mặc dù rất khó để viết phần mềm hoàn toàn độc lập với thiết bị nhưng chúng ta có thể viết một số mô-đun phổ biến trong tất cả các thiết bị. Sau đây là danh sách các chức năng của Phần mềm I / O độc lập với thiết bị -
- Giao diện thống nhất cho trình điều khiển thiết bị
- Đặt tên thiết bị - Tên ghi nhớ được ánh xạ tới số thiết bị Chính và Nhỏ
- Bảo vệ thiết bị
- Cung cấp kích thước khối độc lập với thiết bị
- Đang lưu vào bộ đệm vì dữ liệu từ thiết bị không thể được lưu trữ ở đích cuối cùng.
- Phân bổ bộ nhớ trên các thiết bị khối
- Phân bổ và phát hành các thiết bị chuyên dụng
- Báo cáo lỗi
Phần mềm I / O không gian người dùng
Đây là những thư viện cung cấp giao diện phong phú và đơn giản hơn để truy cập chức năng của hạt nhân hoặc cuối cùng là tương tác với trình điều khiển thiết bị. Hầu hết phần mềm I / O cấp người dùng bao gồm các thủ tục thư viện, ngoại trừ một số ngoại lệ như hệ thống phân phối (spooling system) là một cách xử lý với các thiết bị I / O chuyên dụng trong hệ thống đa chương trình.
Thư viện I / O (ví dụ: stdio) nằm trong không gian người dùng để cung cấp giao diện cho I / O SW độc lập với thiết bị thường trú trong hệ điều hành. Ví dụ putchar (), getchar (), printf () và scanf () là ví dụ về stdio thư viện I / O cấp người dùng có sẵn trong lập trình C.
Hệ thống con I / O Kernel
Kernel I / O Subsystem chịu trách nhiệm cung cấp nhiều dịch vụ liên quan đến I / O. Sau đây là một số dịch vụ được cung cấp.
Scheduling- Kernel lên lịch cho một tập hợp các yêu cầu I / O để xác định một thứ tự tốt để thực thi chúng. Khi một ứng dụng đưa ra cuộc gọi hệ thống I / O chặn, yêu cầu sẽ được đưa vào hàng đợi cho thiết bị đó. Bộ lập lịch I / O Kernel sắp xếp lại thứ tự của hàng đợi để cải thiện hiệu quả tổng thể của hệ thống và thời gian phản hồi trung bình mà các ứng dụng phải trải qua.
Buffering - Hệ thống con I / O hạt nhân duy trì một vùng bộ nhớ được gọi là bufferlưu trữ dữ liệu trong khi chúng được truyền giữa hai thiết bị hoặc giữa một thiết bị có hoạt động ứng dụng. Bộ đệm được thực hiện để đối phó với sự không khớp về tốc độ giữa người sản xuất và người tiêu dùng luồng dữ liệu hoặc để điều chỉnh giữa các thiết bị có kích thước truyền dữ liệu khác nhau.
Caching- Kernel duy trì bộ nhớ đệm là vùng bộ nhớ nhanh chứa các bản sao dữ liệu. Quyền truy cập vào bản sao được lưu trong bộ nhớ cache hiệu quả hơn quyền truy cập vào bản gốc.
Spooling and Device Reservation- Bộ đệm là bộ đệm giữ đầu ra cho một thiết bị, chẳng hạn như máy in, không thể chấp nhận các luồng dữ liệu xen kẽ. Hệ thống cuộn sao chép từng tệp ống đệm đã xếp hàng vào máy in. Trong một số hệ điều hành, bộ đệm được quản lý bởi một quy trình nền hệ thống. Trong các hệ điều hành khác, nó được xử lý bởi một luồng trong nhân.
Error Handling - Hệ điều hành sử dụng bộ nhớ được bảo vệ có thể bảo vệ khỏi nhiều loại lỗi phần cứng và ứng dụng.