Ini pernyataan yang baru saja saya pikirkan. Adakah yang bisa memberi tahu saya apakah dan mengapa itu benar?
Pernyataan: Karena keyboard USB bergantung pada driver dan arsitektur generik USB yang hanya memiliki akses ke level IRQ yang lebih rendah, keyboard USB tidak dapat memberikan akses keyboard ke IRQ sebagai prioritas-tinggi seperti yang akan dikontrol oleh pengontrol (misalnya PS2) lainnya.
Apakah ini (jika itu benar) berarti keyboard USB akan memiliki prioritas lebih rendah (dalam hal ketersediaan lebih dari kecepatan) daripada keyboard yang terhubung ke jenis port lain (seperti PS2)?
Ambil contoh keyboard USB yang dipetakan ke IRQ prioritas menengah, pada sistem yang salah yang terjebak pada rutinitas interupsi prioritas menengah lainnya. Karena prioritasnya yang relatif sama, acara keyboard akan diabaikan dan Anda tidak akan dapat mengirim Ctrl-Alt-del atau keystroke darurat lainnya. Jika keyboard memiliki prioritas lebih tinggi, sistem dapat memasuki rutin Interrupt keystroke.
Atau apakah pengontrol USB memiliki kisaran IRQ yang cukup (baik itu terus menerus berdasarkan prioritas atau tidak) untuk memberikan keyboard Anda prioritas yang dibutuhkan (pada dasarnya tepat di bawah kegagalan daya)?
Dan bagaimana dengan keyboard virtual, yang dipetakan melalui koneksi jaringan pada sesi desktop jarak jauh?
EDIT: Pertanyaan saya tidak banyak tentang kecepatan (lihat komentar): pertanyaan utamanya adalah: apakah keyboard PS2 memiliki lebih banyak kesempatan untuk berbicara dengan CPU yang terjebak di suatu tempat dengan prioritas interupsi lebih tinggi dari USB dan lebih rendah dari keyboard?
Jawaban:
Ini bukan tentang rentang IRQ, ini tentang tiga faktor utama:
Di masa lalu, keyboard dan mouse akan memiliki IRQ khusus (IRQ1 untuk keyboard, IRQ12 untuk mouse PS / 2).
Ini berarti bahwa ketika tombol ditekan, ia memiliki jalur yang hampir langsung ke CPU (melalui PIC; tetapi masih, hanya satu lompatan saja). Hal ini memungkinkan acara keyboard diproses sangat cepat dalam perangkat keras, terutama karena memiliki IRQ1. (Tentu saja ini semua tentang penggunaan keyboard normal dan mengabaikan garis reset yang pergi dari pengontrol keyboard langsung ke CPU.)
Perangkat USB di sisi lain semuanya berbagi bus yang sama dan IRQ pengontrol USB (yang biasanya merupakan salah satu dari kemudi IRQ yang digunakan bersama dengan perangkat lain seperti NIC, kartu video dan semacamnya). Dengan demikian, dengan keyboard USB, acara beralih dari pengontrol keyboard, melalui bus USB ke pengontrol host USB, dari sana, ke PIC sekunder, lalu ke master PIC, lalu ke salah satu driver di OS atau BIOS. , lalu ke CPU. Selain itu, ada data pemeriksaan kesalahan yang ditambahkan ke data yang ditransfer melalui USB.
Dengan kata lain, ada lebih banyak yang terjadi dengan keyboard USB daripada dengan keyboard AT atau PS / 2. Jalur data lebih panjang dan ada lebih banyak data, dan bahkan mungkin harus melalui perangkat lunak . Meskipun bandwidth USB cukup besar, memiliki perangkat lain pada port yang sama menyebabkan tabrakan dan penundaan (Anda dapat menambahkan hub, tetapi semua port di dalamnya masih merupakan port yang sama pada controller). Jadi ada banyak lagi yang menunggu terjadi.
Selain itu, memiliki sendiri (IRQ berarti keyboard yang lebih lama dapat mengganggu pemrosesan CPU kapan pun diperlukan. Dengan USB, keyboard tidak memiliki mekanisme seperti itu dan hanya dapat mengirim beberapa data dan menunggu / berharap controller USB untuk mengganggu CPU. dalam beberapa kasus.
Keyboard virtual bahkan lebih buruk karena mereka pasti melalui perangkat lunak yang tentu saja tidak dapat bersaing dengan garis perangkat keras.
Berikut ini visualisasi sederhana perbedaan antara keyboard AT atau PS / 2 dan keyboard USB:
sumber
Ctrl+Alt+Del
don' t bekerja melalui garis perangkat keras tetapi agak diproses melalui perangkat lunak.Jawaban singkat
Kedua keyboard akan tampil sama rata untuk kode tingkat pengguna. Mungkin ada perbedaan kecil ( nano ke detik mikro pada PC modern) jika Anda menulis driver perangkat. Jika sistem hang, kedua keyboard tidak akan menyelesaikan masalah. Lakukan boot ulang keras.
Jawaban panjang TL; DR;
Apa itu interupsi?
Ketika perangkat keras (atau bagian penting dari perangkat lunak internal OS, seperti kernel) memerlukan layanan prosesor, ia akan mengirim pesan atau interupsi , yang meminta prosesor untuk menunda apa pun yang dilakukannya, dan menangani permintaan ini.
Bagaimana itu bekerja?
Ketika perangkat keras menghasilkan interupsi (misalnya, tekan tombol), permintaan ini masuk ke pengontrol interupsi. Pengontrol kemudian segera menginterupsi CPU pada satu baris kode mesinnya (CPU masih menjalankan baris terakhir ini). Setelah prosesor siap untuk melayani permintaan ini, ia meminta pengontrol interupsi untuk Permintaan Interupsi (IRQ) dan rutin penanganan. Interrupt controller memiliki struktur data internal - Interrupt Dispatch Table yang berisi pointer ke rutin yang seharusnya dijalankan oleh CPU untuk IRQ tertentu.
Semua interupsi berbeda sesuai dengan Tingkat Permintaan Interupsi (IRQL) terbatas yang didefinisikan dengan baik . Misalnya pada sistem x86 ada 32 IRQL, dan pada x64 dan IA64 sebenarnya lebih sedikit - 16 IRQL. Jelas, bahwa ada lebih banyak perangkat keras dan layanan perangkat lunak daripada IRQL yang berarti semua beberapa objek sistem akan berbagi IRQL.
Tabel IRQL untuk x64
IRQL lebih tinggi (dengan jumlah lebih besar) memiliki prioritas lebih tinggi. Semua komponen sistem mencoba menjaga IRQL saat ini dari prosesor pada tingkat serendah mungkin - 0. Jika terjadi gangguan tingkat yang lebih tinggi, maka tingkat prosesor IRQL saat ini dinaikkan dan interupsi dengan tingkat yang lebih rendah tidak akan ditangani hingga semua interupsi dengan level yang lebih tinggi diselesaikan. IRQ dapat ditangani secara batch jika penjadwal IRQ mampu mengantre beberapa IRQ dengan level yang sama untuk eksekusi prosesor.
Apa intinya?
Ini semua telah dirancang dengan sangat baik untuk memisahkan pengguna akhir dari kompleksitas perangkat keras dan membuat arsitektur universal yang dapat bekerja dengan banyak jenis perangkat keras / perangkat lunak.
Kode tingkat pengguna (yaitu bukan tingkat kernel) hanya dieksekusi ketika prosesor berada pada IRQL Pasif / Rendah (0). Intinya adalah, Anda hanya dapat menangani acara yang ditekan tombol di aplikasi Anda setelah semua IRQL ditangani. Oleh karena itu, untuk keyboard, apa pun IRQL yang ditetapkan untuk interupsi perangkat keras.
IRQL hanya abstraksi OS dan tidak diatur dalam batu . IRQ dan IRQL yang sesuai disimpan di registri Windows (misalnya), dan setiap pengguna yang antusias dapat mengubahnya secara manual.
Kesimpulan
Kutipan dari pertanyaan
Mungkin penulis berarti IRQL lebih rendah daripada saluran IRQ lebih sedikit . Bagaimanapun, itu tidak terlalu penting karena tidak terlihat oleh pengguna di PC modern mana pun. Perbedaan yang mungkin adalah dari tingkat nano ke mikro dan hanya terjadi pada tingkat kernel. Dalam kedua kasus, kode tingkat pengguna diblokir oleh kernel OS.
Itu tidak benar karena cara OS dirancang. Jika OS sibuk dengan sesuatu dan "lambat", kedua keyboard akan berperilaku identik.
Dalam hal ini sistem akan BSOD, rutinitas penanganan IRQ harus dirancang hingga standar tertentu (seperti mereka harus cepat, sinkron, non-pemblokiran, dll.) Setiap penyimpangan dari ini dan kernel akan BSOD.
Jika sistem hang ada banyak hal yang bisa salah, tetapi kemungkinan besar keystroke IRQL akan ditangani di tingkat driver. Masalahnya adalah, itu tidak akan dikirimkan ke aplikasi yang berlangganan pemberitahuan tersebut, karena OS sedang sibuk melakukan sesuatu yang lain.
sumber