Khi có hệ điều hành liên quan, các chương trình không nói chuyện với trình điều khiển thiết bị, ít nhất là không trực tiếp. Các chương trình nói về sự trừu tượng mà, không biết đến chúng, cuối cùng kết thúc cuộc nói chuyện với trình điều khiển thiết bị bằng một hoặc nhiều lớp trừu tượng.
Tôi sẽ bỏ qua sự phức tạp của các hệ điều hành hiện đại và sử dụng CP / M , một hệ điều hành máy vi tính được phát triển 45 năm trước, làm ví dụ. CP / M là một lớp bánh có ba lớp:
Chương trình. Lớp trên cùng là một chương trình thực hiện một cái gì đó hữu ích (xử lý văn bản, chơi Space Invaders) bằng cách tính toán và I / O. Giả sử tại một thời điểm nào đó, chương trình muốn hiển thị chữ 'A' để người dùng nhìn thấy. CP / M cung cấp một bản tóm tắt được gọi là bảng điều khiển , là nơi mà người dùng tương tác với chương trình sẽ tìm kiếm. Cách thông thường để gửi một ký tự ở đó là với một vài hướng dẫn lắp ráp:
LD C,2 ; Load 2 into register C
LD E,65 ; Load the ASCII code for 'A' into register E
CALL 5 ; Call CP/M's routine for getting things done
(Nếu bạn không quen thuộc với chúng, các thanh ghi có thể được coi là các biến sống trong bộ xử lý.) Chúng ta sẽ tìm hiểu những con số kỳ diệu 2
và 5
tất cả chỉ trong một phút. Điều đáng nói ở đây là tất cả các chương trình đều biết rằng có một bàn điều khiển và có một cách để viết cho nó. Nó không biết hoặc quan tâm đến bất cứ điều gì ngoài điều đó. Đây là lần đầu tiên trong hai khái niệm trừu tượng mà CP / M sử dụng cho I / O.
BDOS . Địa chỉ 5
mà chương trình được gọi là điểm vào cho lớp tiếp theo, Hệ điều hành đĩa cơ bản hoặc BDOS . BDOS cung cấp toàn bộ các chức năng được đánh số giống như đặt hàng theo số từ menu nhà hàng. Bạn nói với bạn rằng bạn thích đầu ra của bàn điều khiển bằng cách tải thanh C
ghi với số chức năng ( 2
đối với đầu ra của bàn điều khiển) và thanh E
ghi có ký tự được gửi. Đầu ra của bàn điều khiển là một thao tác rất đơn giản và BDOS không thực sự phải làm gì nhiều với nó ngoài việc gọi lớp tiếp theo.
BIOS. BIOS, hay Hệ thống đầu vào / đầu ra cơ bản là lớp chứa tất cả các mã dành riêng cho phần cứng. Trong các hệ thống hiện đại, đây sẽ được coi là một bộ trình điều khiển thiết bị. Giống như BDOS, BIOS cung cấp các lệnh gọi cho một tập hợp các hoạt động rất nguyên thủy mà BDOS sử dụng để thực hiện công việc của mình. Một trong những hoạt động đó được gọi làCONOUT
, trong đó quan tâm đến việc nhận được ký tự mà chương trình yêu cầu viết hai lớp ở trên cho đến bất kỳ phần cứng nào. . BIOS gọi để thao túng phương tiện truyền thông. Một lần nữa, vì BIOS có giao diện trừu tượng, tiêu chuẩn, nên BDOS luôn biết cách lấy những gì nó muốn và không quan tâm đến cách thức thực hiện của BIOS.
Có lẽ bạn đang tự hỏi tại sao có hai khái niệm trừu tượng (chương trình-to-BDOS và BDOS-to-BIOS) thay vì chỉ một. Câu trả lời là CP / M và BDOS của nó có thể được cung cấp ở dạng nhị phân cho các nhà sản xuất máy tính, họ sẽ viết một BIOS tùy chỉnh với trình điều khiển thiết bị cho phần cứng của họ, ghép hai cái lại với nhau và gửi nó làm HĐH cho hệ thống của họ. Đây là một vấn đề lớn vì BDOS được duy trì bởi một tổ chức và do đó luôn là số lượng được biết đến đối với các chương trình người dùng, cho phép chạy các ứng dụng tương tự trên nhiều loại phần cứng (theo thời gian). Đây là lý do tại sao các hệ điều hành tồn tại và chúng tôi không chỉ viết các chương trình xoay vòng phần cứng trực tiếp .
Tất cả mọi thứ tôi đã mô tả ở đây cũng áp dụng cho các hệ điều hành hiện đại. Unix, ví dụ, trừu tượng hóa mọi thứ dưới dạng tệp. Nó cung cấp cho các chương trình cùng một tập hợp các cuộc gọi hệ thống ( open()
, write()
, close()
, vv) để giao tiếp cho dù đó là một ổ đĩa hoặc cổng nối tiếp. Tập hợp các quyết định và trừu tượng phức tạp hơn nhiều, nhưng cuối cùng nó vẫn sôi sục để chọn ra mã trình điều khiển thiết bị nào ở lớp dưới cùng cần được chạy để thực hiện thao tác.