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?
Jawaban:
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:
(Jika Anda tidak terbiasa dengan mereka, register dapat dianggap sebagai variabel yang hidup dalam prosesor.) Kita akan mencapai angka ajaib
2
dan5
semuanya 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
5
yang 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 memuatC
register dengan nomor fungsi (2
untuk output konsol) danE
register 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 disebut
CONOUT
, 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.sumber
call 5
sini. Tidakkah akanrst 8
jauh lebih efektif (itu akan mengorbankan 3 byte memori di alamat tujuan, tetapi simpan 2 setiap kali itu disebut ...)?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 .Ada banyak kemungkinan berbeda:
sumber