Bagaimana tepatnya suatu program berbicara dengan driver perangkat?

12

Jadi saya bingung bagaimana tepatnya kita sebagai programmer berbicara dengan perangkat di komputer. Sekarang saya tidak membicarakan ide besar. Saya tahu bahwa ada driver perangkat yang duduk di atas perangkat keras sehingga program yang berbeda dapat menggunakan fitur di sana.

Namun secara umum siapa yang sebenarnya berbicara kepada pengemudi? Apakah programmer menulis aplikasi yang bertanggung jawab untuk memanggil fungsi pada driver? Atau apakah programmer memanggil suatu fungsi melalui sistem operasi yang kemudian menangani panggilan ke driver?

Jason
sumber
1
Sedikit dari keduanya, dan itu bervariasi dari OS dan jenis perangkat.
whatsisname

Jawaban:

12

Di mana ada sistem operasi yang terlibat, program tidak berbicara dengan driver perangkat, setidaknya tidak secara langsung. Program berbicara dengan abstraksi yang, tanpa diketahui oleh mereka, akhirnya berakhir dengan berbicara dengan pengandar perangkat melalui satu atau beberapa lapisan abstraksi.

Saya akan melewatkan kompleksitas sistem operasi modern dan menggunakan CP / M , sistem operasi komputer mikro yang dikembangkan 45 tahun yang lalu, sebagai contoh. CP / M adalah kue lapis dengan tiga lapisan:

Program. Lapisan atas adalah program yang melakukan sesuatu yang berguna (pengolah kata, bermain Space Invaders) dengan melakukan komputasi dan I / O. Katakanlah bahwa pada suatu titik program ingin menampilkan huruf 'A' untuk dilihat pengguna. CP / M menyediakan abstraksi yang dikenal sebagai konsol , di mana pengguna harus berinteraksi dengan program. Cara konvensional untuk mengirim karakter ada dengan beberapa instruksi perakitan:

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

(Jika Anda tidak terbiasa dengan mereka, register dapat dianggap sebagai variabel yang hidup dalam prosesor.) Kita akan mencapai angka ajaib 2dan 5semuanya dalam satu menit. Yang perlu diperhatikan di sini adalah semua program tahu bahwa ada konsol dan ada cara untuk menulisnya. Tidak tahu atau peduli tentang apa pun selain itu. Ini adalah yang pertama dari dua abstraksi yang digunakan CP / M untuk I / O.

BDOS . Alamat 5yang dipanggil oleh program adalah titik masuk untuk lapisan berikutnya, Sistem Operasi Disk Dasar atau BDOS . BDOS menyediakan seluruh fungsi bernomor yang seperti memesan berdasarkan nomor dari menu restoran. Anda mengatakan bahwa Anda ingin keluaran konsol dengan memuat Cregister dengan nomor fungsi ( 2untuk output konsol) dan Eregister dengan karakter yang akan dikirim. Output konsol adalah operasi yang sangat sederhana, dan BDOS tidak benar-benar harus melakukan banyak hal selain memanggil lapisan berikutnya.

BIOS. BIOS, atau Basic Input / Output System adalah lapisan tempat semua kode khusus perangkat keras hidup. Dalam sistem modern, ini akan dianggap sebagai seperangkat driver perangkat. Seperti BDOS, BIOS menyediakan panggilan untuk serangkaian standar operasi yang sangat primitif yang digunakan BDOS untuk melakukan bisnisnya. Salah satu operasi itu disebutCONOUT, yang menangani mendapatkan karakter program diminta untuk menulis dua lapisan di atas hingga perangkat keras apa pun yang melakukannya. (Tidak seperti PC, semuanya tidak homogen pada waktu itu. Sistem setiap orang memiliki cara berbeda untuk mewujudkannya.) Output konsol adalah pass-through sederhana untuk BDOS, tetapi melakukan sesuatu yang lebih kompleks seperti membuat file pada disk mungkin memerlukan banyak Panggilan BIOS untuk memanipulasi media. Sekali lagi, karena BIOS memiliki standar, antarmuka abstrak, BDOS selalu tahu bagaimana mendapatkan apa yang diinginkan dan tidak peduli bagaimana BIOS melakukannya.

Anda mungkin bertanya-tanya mengapa ada dua abstraksi (program-ke-BDOS dan BDOS-ke-BIOS), bukan hanya satu. Jawabannya adalah bahwa CP / M dan BDOS-nya dapat diberikan dalam bentuk biner kepada produsen komputer, mereka akan menulis BIOS khusus dengan driver perangkat untuk perangkat keras mereka, mengunci keduanya bersama-sama dan mengirimkannya sebagai OS untuk sistem mereka. Ini adalah masalah besar karena BDOS dikelola oleh satu organisasi dan oleh karena itu selalu dikenal kuantitas untuk program pengguna, sehingga memungkinkan untuk menjalankan aplikasi yang sama pada berbagai perangkat keras yang sangat luas (untuk saat itu). Inilah sebabnya mengapa sistem operasi ada dan kami tidak hanya menulis program yang mengutak-atik perangkat keras secara langsung .

Semua yang saya jelaskan di sini juga berlaku untuk sistem operasi modern. Unix, misalnya, mengabstraksi segala sesuatu sebagai file. Ini memberikan program set yang sama panggilan sistem ( open(), write(), close(), dll) untuk berkomunikasi apakah itu disk drive atau port serial. Himpunan keputusan dan abstraksi jauh lebih kompleks, tetapi masih pada akhirnya bermuara untuk memilih kode driver perangkat apa yang perlu dijalankan untuk membuat operasi itu terjadi.

Blrfl
sumber
Saya belum benar-benar melihat kode CP / M sebelumnya (ini sedikit sebelum waktu saya ... Saya telah menggunakan komputer CP / M tetapi tidak pernah menulis kode untuk mereka), tapi saya agak terkejut dengan penggunaan di call 5sini. Tidakkah akan rst 8jauh lebih efektif (itu akan mengorbankan 3 byte memori di alamat tujuan, tetapi simpan 2 setiap kali itu disebut ...)?
Jules
@ Jules: CP / M dikembangkan untuk 8080, yang hanya memiliki satu mode interupsi di mana perangkat yang menginterupsi akan menempatkan instruksi byte tunggal (biasanya a RST) pada bus data. Saya tidak bisa mengatakan dengan pasti, tetapi mungkin tidak ada slot yang cukup untuk berkeliling untuk memenuhi kebutuhan semua perangkat ditambah DDT (yang menggunakannya untuk membuat breakpoints terjadi) ditambah menggunakan satu untuk memasuki BDOS .
Blrfl
Ah. Itu masuk akal, ya. Pengalaman pengembangan 8-bit saya terbatas pada mesin yang hanya memiliki satu sumber interupsi sehingga tidak perlu terlalu khawatir tentang hal-hal seperti itu ... :)
Jules
Pertanyaan singkat, bagaimana proses ini lebih terkait dengan OS windows dan kernel windows? Atau haruskah saya membuat pertanyaan baru untuk itu.
Jason
@Jason: Wikipedia memiliki halaman yang menjelaskan arsitektur dan memberikan jawabannya. Segala sesuatu yang telah diproduksi Microsoft sejak 1993 menggunakan arsitektur ini. Itu hal yang sama, hanya dengan lebih banyak lapisan dalam kue.
Blrfl
0

Ada banyak kemungkinan berbeda:

  • Untuk perangkat yang biasa digunakan, OS sering menyertakan API yang driver implement dan yang diadaptasi pustaka standar bahasa Anda. Contoh umum: sistem file, printer, jaringan, instrumen MIDI.
  • Untuk perangkat yang lebih eksotis, produsen perangkat harus menyediakan driver dan kadang-kadang itu juga akan menyertakan binding bahasa untuk bahasa populer. Minimal akan ada binding C, dan hampir semua bahasa memiliki beberapa cara untuk memanggil library C.
  • Agak di antara kedua kasus itu, perangkat sederhana mungkin hanya menggunakan koneksi tujuan umum seperti port serial dan pabrikan hanya menerbitkan protokol yang kemudian dapat Anda gunakan melalui driver port serial generik.
Michael Borgwardt
sumber