Làm thế nào chính xác một chương trình nói chuyện với trình điều khiển thiết bị?


12

Vì vậy, tôi bối rối về cách chính xác chúng ta là những lập trình viên nói chuyện với các thiết bị trên máy tính. Bây giờ tôi không nói những ý tưởng lớn. Tôi biết rằng có các trình điều khiển thiết bị ngồi trên phần cứng để các chương trình khác nhau có thể sử dụng các tính năng đó.

Nhưng nói chung ai nói chính xác với các trình điều khiển? Là lập trình viên viết ứng dụng chịu trách nhiệm gọi một chức năng trên trình điều khiển? Hoặc lập trình viên gọi một chức năng thông qua hệ điều hành để xử lý cuộc gọi đến trình điều khiển?



1
Một chút của cả hai, và nó thay đổi từ hệ điều hành và loại thiết bị.
whatsisname

Câu trả lời:


12

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 25tấ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ỉ 5mà 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 Cghi với số chức năng ( 2đối với đầu ra của bàn điều khiển) và thanh Eghi 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.


Trước đây tôi chưa từng xem mã CP / M (trước đó một chút ... Tôi đã sử dụng máy tính CP / M nhưng chưa bao giờ viết mã cho chúng), nhưng tôi khá ngạc nhiên khi sử dụng call 5ở đây. Sẽ không rst 8hiệu quả hơn nhiều (nó sẽ hy sinh 3 byte bộ nhớ tại địa chỉ đích, nhưng tiết kiệm 2 mỗi khi nó được gọi là ...)?
Jules

@Jules: CP / M được phát triển cho 8080, chỉ có một chế độ ngắt trong đó các thiết bị ngắt sẽ đặt một lệnh một byte (thường là a RST) trên bus dữ liệu. Tôi không thể chắc chắn, nhưng có thể có đủ các khe để đi xung quanh để đáp ứng nhu cầu của tất cả các thiết bị cộng với DDT (đã sử dụng chúng để tạo ra các điểm dừng) cộng với sử dụng một để vào BDOS .
Blrfl

Ah. Điều đó có ý nghĩa, vâng. Trải nghiệm phát triển 8 bit của tôi chỉ giới hạn ở các máy chỉ có một nguồn ngắt duy nhất nên không phải lo lắng quá nhiều về những điều như vậy ... :)
Jules

Câu hỏi nhanh, làm thế nào quá trình này liên quan nhiều hơn đến hệ điều hành windows và kernel windows? Hoặc tôi nên làm một câu hỏi mới cho điều đó.
Jason

@Jason: Wikipedia có một trang mô tả kiến ​​trúc và cung cấp câu trả lời. Tất cả mọi thứ Microsoft đã sản xuất từ ​​năm 1993 đều sử dụng kiến ​​trúc này. Đó là điều tương tự, chỉ với nhiều lớp hơn trong bánh.
Blrfl

0

Có một loạt các khả năng khác nhau:

  • Đối với các thiết bị thường được sử dụng, HĐH thường bao gồm API mà trình điều khiển triển khai và thư viện chuẩn của ngôn ngữ của bạn thích nghi. Ví dụ điển hình: hệ thống tập tin, máy in, mạng, nhạc cụ MIDI.
  • Đối với các thiết bị kỳ lạ hơn, nhà sản xuất thiết bị phải cung cấp trình điều khiển và đôi khi những thiết bị này cũng sẽ bao gồm các ràng buộc ngôn ngữ cho các ngôn ngữ phổ biến. Tối thiểu sẽ có các ràng buộc C và khá nhiều ngôn ngữ có một số cách để gọi các thư viện C.
  • Ở giữa hai trường hợp này, các thiết bị đơn giản có thể chỉ sử dụng kết nối có mục đích chung như cổng nối tiếp và nhà sản xuất chỉ xuất bản giao thức mà sau đó bạn có thể sử dụng thông qua trình điều khiển cổng nối tiếp chung.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.