Arsitektur komputer: Apakah keyboard USB kurang responsif karena rentang IRQ yang sempit?


19

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?


2
Bertanya-tanya apakah hal yang sama berlaku untuk mouse USB. Milik saya tampaknya begitu setelah beralih antarmuka (tetapi bukan mouse itu sendiri) beberapa bulan yang lalu.
martineau

Jika itu benar untuk keyboard, kemungkinan besar sama untuk mouse; tapi mungkin kurang penting karena tidak ada penekanan tombol darurat untuk mouse
PPC

Saya tidak berpikir ini adalah sesuatu yang masuk akal untuk diperhatikan. Jika Anda melakukan ini, dan keyboard macet, maka antarmuka jaringan akan kelaparan dan Anda tidak dapat mengontrol sistem dari jarak jauh. Sepertinya Anda hanya memperdagangkan satu masalah dengan yang lain.
David Schwartz

1
@ Davidvidchwartz: Ini sebagian besar pertanyaan teoretis, dan diambil dari sudut pandang arsitek komputer. Namun, ada satu aplikasi dari PoV pengguna: "komputer saya macet, tidak merespons Ctrl-Alt-Backspace: haruskah saya mencari keyboard PS2 atau melupakannya dan melakukan boot ulang"
PPC

2
@PPC: Ctl-alt-del sepertinya tidak akan berhasil. Proses reboot dikendalikan oleh perangkat lunak tingkat tinggi yang mematikan program, mem-flush cache, dan sebagainya. Dengan badai interupsi, perangkat lunak tingkat tinggi tidak akan berfungsi.
David Schwartz

Jawaban:


17

Ini bukan tentang rentang IRQ, ini tentang tiga faktor utama:

  1. Jumlah kerumunan bus
  2. Jumlah data
  3. Panjang jalur data

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:

masukkan deskripsi gambar di sini


Saya tidak terlalu menyukai kecepatan daripada prioritas: Saya mengerti bahwa jalur data yang lebih panjang dapat menyebabkan keystroke saya menunggu; tapi saya berpikir tentang "kemungkinan bahwa penekanan tombol akan hilang pada sistem yang salah", yang saya pikir tidak bergantung pada panjang jalur.
PPC

Bagaimana IRQ dapat diproses dalam perangkat lunak SEBELUM memukul CPU? Apakah APIC memiliki prosesor sendiri? Dengan rutinitas mereka di memori pusat? Apakah mereka 'meminjam' waktu CPU?
PPC

> "kemungkinan penekanan tombol akan hilang pada sistem yang rusak" Itu tergantung pada kesalahan, tetapi ya, jelas keyboard USB memiliki peluang yang jauh lebih tinggi untuk kehilangan penekanan tombol karena kompleksitas tambahan. > Re: APIC Ya, mereka memiliki prosesor yang melakukan beberapa tingkat pemrosesan, sama seperti pengontrol keyboard memiliki prosesor, kartu video memiliki GPU, dll. Sebagian besar perangkat keras memiliki beberapa jenis chip yang menangani beberapa pemrosesan.
Synetech

> Bagaimana proses IRQ diproses dalam perangkat lunak SEBELUM memukul CPU? Tidak hanya keyboard USB yang memiliki driver, tetapi kontroler USB juga memiliki driver. Data Keyboard tidak langsung ke CPU, melainkan membuat jalan melalui keyboard untuk controller USB, untuk driver-nya, ke drive keyboard, kemudian ke CPU atau perangkat lunak lain yang diperlukan, sehingga beberapa hal seperti Ctrl+Alt+Deldon' t bekerja melalui garis perangkat keras tetapi agak diproses melalui perangkat lunak.
Synetech

Jadi, jika saya mendapatkan Anda dengan baik aliran data dasar dari keystroke saya akan menjadi: pengontrol USB, APIC, CPU Dalam melalui IRQ Primer rendah, USB ISR / IST, CPU IRQ yang dihasilkan sendiri (seperti TRAP), keyboard ISR / IST? Dengan cara ini, prioritas yang relevan adalah pengontrol USB ..? Dalam pertanyaan saya, saya berpikir bahwa pengontrol USB dapat menerjemahkan paket USB ke keyboard IRQ yang sebenarnya.
PPC

14

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 | Deskripsi
--------------------------------------------
    15 | Kalangan atas
    14 | Interprocessor interrupt / Power
    13 | Jam
    12 | Sinkronkan
    11 | Perangkat N
    .. | ...
     3 | Perangkat 1
     2 | Pengiriman / DPC
     1 | APC
     0 | Pasif / Rendah

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.

  1. 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.

  2. 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

Karena keyboard USB mengandalkan driver generik USB dan arsitektur yang hanya memiliki akses ke beberapa saluran IRQ, keyboard tidak dapat memberikan akses keyboard ke IRQ yang setinggi prioritas seperti pengendali (katakanlah PS2) lainnya.

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.

Apakah ini (jika itu benar) berarti keyboard USB akan kurang responsif daripada keyboard yang terhubung ke jenis port lain?

Itu tidak benar karena cara OS dirancang. Jika OS sibuk dengan sesuatu dan "lambat", kedua keyboard akan berperilaku identik.

Ambil contoh keyboard USB yang dipetakan ke IRQ prioritas menengah, pada sistem yang salah yang terjebak pada rutinitas interupsi prioritas menengah lainnya.

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.

Karena prioritasnya yang relatif sama, acara keyboard akan diabaikan dan Anda tidak akan dapat mengirim Ctrl-Alt-del atau keystroke darurat lainnya.

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.


Aplikasi yang saya targetkan adalah window manager (kasus mudah) atau OS itu sendiri. Saya berharap CPU saya akan menghentikan pemrosesan USB-like-IRQL untuk menerima sinkronisasi-disk-sebelum-saya-reboot-Anda dengan bersih
PPC

>> Apakah ini .. berarti USB kbds kurang responsif: dapatkah Anda merinci jawaban 'tidak' Anda?
PPC

@PPC jika Anda mendesain driver perangkat, maka USB kbds mungkin lebih lambat untuk nano-detik. Jika Anda tertarik pada kode level pengguna apa pun, maka kode itu tetap diblokir ketika ada IRQL level> 1 sedang ditangani. Jadi tidak masalah jika kbd IRQL sama dengan IRQL tertinggi atau IRQL menengah. Kode pengguna diblokir.
oleksii
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.