it-swarm-id.com

Apa itu gangguan perangkat lunak dan perangkat keras, dan bagaimana prosesnya?

Saya tidak yakin apakah saya mengerti konsep interupsi perangkat keras dan lunak.

Jika saya mengerti dengan benar, tujuan dari interupsi perangkat keras adalah untuk mendapatkan perhatian dari CPU, bagian dari implementasi multitasking CPU.

  1. Lalu apa masalah gangguan hardware? Apakah ini proses driver perangkat keras?
  2. Jika ya, di mana proses driver perangkat keras berjalan? Jika itu berjalan pada CPU, maka itu tidak perlu mendapatkan perhatian dari CPU oleh perangkat keras, benar? Jadi apakah itu berjalan di tempat lain?
  3. Apakah interupsi perangkat keras mengganggu CPU secara langsung, atau apakah itu pertama-tama menghubungi proses kernel dan proses kernel kemudian menghubungi/menginterupsi CPU?

Di sisi lain, saya pikir tujuan interupsi perangkat lunak adalah untuk proses yang sedang berjalan pada CPU untuk meminta beberapa sumber daya.

  1. Apa sumber dayanya? Apakah semuanya dalam bentuk proses yang berjalan? Misalnya, apakah proses driver CPU dan proses driver memori mewakili sumber daya CPU dan memori? Apakah proses driver perangkat I/O mewakili sumber daya I/O? Apakah proses lain yang sedang berjalan yang ingin dikomunikasikan juga dengan sumber daya?
  2. Jika ya, apakah suatu perangkat lunak mengganggu proses kontak (yang mewakili sumber daya) secara tidak langsung melalui proses kernel? Apakah benar bahwa tidak seperti interupsi perangkat keras, interupsi perangkat lunak tidak pernah secara langsung mengganggu CPU, tetapi sebaliknya, ia menginterupsi/menghubungi proses kernel?
45
Tim

Interupsi perangkat keras sebenarnya bukan bagian dari multitasking CPU, tetapi dapat mengendarainya.

  1. Gangguan perangkat keras dikeluarkan oleh perangkat keras seperti disk, kartu jaringan, keyboard, jam, dll. Setiap perangkat atau set perangkat akan memiliki jalur IRQ (Interrupt ReQuest) sendiri. Berdasarkan IRQ, CPU akan mengirimkan permintaan ke driver perangkat keras yang sesuai. (Driver perangkat keras biasanya subrutin di dalam kernel daripada proses yang terpisah.)

  2. Driver yang menangani interupsi dijalankan pada CPU. CPU terputus dari apa yang dilakukannya untuk menangani interupsi, jadi tidak ada tambahan yang diperlukan untuk mendapatkan perhatian CPU. Dalam sistem multiprosesor, interupsi biasanya hanya akan mengganggu salah satu CPU. (Sebagai kasus khusus mainframe memiliki saluran perangkat keras yang dapat menangani beberapa interupsi tanpa dukungan dari CPU utama.)

  3. Interupsi perangkat keras mengganggu CPU secara langsung. Ini akan menyebabkan kode yang relevan dalam proses kernel terpicu. Untuk proses yang membutuhkan waktu untuk diproses, kode interupsi dapat membiarkan dirinya terganggu oleh interupsi perangkat keras lainnya.

    Dalam hal penghentian waktu, kode penjadwal kernel dapat menunda proses yang sedang berjalan dan memungkinkan proses lain berjalan. Ini adalah keberadaan kode penjadwal yang memungkinkan multitasking.

Interupsi perangkat lunak diproses seperti halnya interupsi perangkat keras. Namun, mereka hanya dapat dihasilkan oleh proses yang sedang berjalan.

  1. Biasanya gangguan perangkat lunak adalah permintaan untuk I/O (Input atau Output). Ini akan memanggil rutin kernel yang akan menjadwalkan I/O terjadi. Untuk beberapa perangkat I/O akan segera dilakukan, tetapi disk I/O biasanya di-antri dan dilakukan di lain waktu. Bergantung pada I/O yang dilakukan, proses dapat ditunda sampai I/O selesai, menyebabkan penjadwal kernel untuk memilih proses lain untuk dijalankan. I/O dapat terjadi di antara proses dan pemrosesan biasanya dijadwalkan dengan cara yang sama seperti disk I/O.

  2. Interupsi perangkat lunak hanya berbicara dengan kernel. Adalah tanggung jawab kernel untuk menjadwalkan proses lain yang perlu dijalankan. Ini bisa menjadi proses lain di ujung pipa. Beberapa kernel mengizinkan beberapa bagian dari pengandar perangkat ada di ruang pengguna, dan kernel akan menjadwalkan proses ini untuk berjalan saat diperlukan.

    Benar bahwa interupsi perangkat lunak tidak secara langsung mengganggu CPU. Hanya kode yang saat ini menjalankan kode yang dapat menghasilkan interupsi perangkat lunak. Interrupt adalah permintaan kernel untuk melakukan sesuatu (biasanya I/O) untuk menjalankan proses. Interupsi perangkat lunak khusus adalah panggilan Yield, yang meminta penjadwal kernel untuk memeriksa untuk melihat apakah beberapa proses lain dapat berjalan.

Tanggapan terhadap komentar:

  1. Untuk permintaan I/O, kernel mendelegasikan pekerjaan ke driver kernel yang sesuai. Rutin dapat mengantri I/O untuk diproses nanti (umum untuk disk I/O), atau jalankan segera jika memungkinkan. Antrian ditangani oleh pengemudi, seringkali ketika menanggapi gangguan perangkat keras. Ketika satu I/O selesai, item berikutnya dalam antrian dikirim ke perangkat.

  2. Ya, interupsi perangkat lunak menghindari langkah pensinyalan perangkat keras. Proses menghasilkan permintaan perangkat lunak harus merupakan proses yang sedang berjalan, sehingga mereka tidak mengganggu CPU. Namun, mereka mengganggu aliran kode panggilan.

    Jika perangkat keras perlu mendapatkan CPU untuk melakukan sesuatu, itu menyebabkan CPU untuk mengganggu perhatiannya pada kode yang sedang berjalan. CPU akan mendorong statusnya saat ini di tumpukan sehingga nanti dapat kembali ke apa yang sedang dilakukannya. Interupsi bisa berhenti: program yang sedang berjalan; kode kernel menangani interupsi lain; atau proses idle.

57
BillThor