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

43

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 CPU multitasking.

  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, kan? 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?
Tim
sumber

Jawaban:

55

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

Gangguan perangkat lunak diproses seperti halnya gangguan 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 dilakukan segera, tetapi disk I / O biasanya antri dan dilakukan di lain waktu. Bergantung pada I / O yang dilakukan, proses dapat ditunda sampai I / O selesai, menyebabkan scheduler 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 untuk ada di ruang pengguna, dan kernel akan menjadwalkan proses ini untuk berjalan ketika diperlukan.

    Benar bahwa interupsi perangkat lunak tidak secara langsung mengganggu CPU. Hanya kode yang sedang 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.

Respon 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, gangguan 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 pada tumpukan sehingga nantinya dapat kembali ke apa yang sedang dilakukannya. Interupsi bisa berhenti: program yang sedang berjalan; kode kernel menangani interupsi lain; atau proses idle.

BillThor
sumber
Terima kasih! (1) Dalam interupsi perangkat lunak, apakah operasi I / O dilakukan oleh rutin driver perangkat I / O dalam proses kernel? (2) apakah benar jalur yang dilewati oleh perangkat lunak adalah satu langkah lebih pendek dari jalur untuk interupsi perangkat keras? Dengan kata lain, untuk interupsi perangkat lunak: program perangkat lunak -> rutin driver perangkat dalam proses kernel; untuk interupsi perangkat keras: perangkat keras -> CPU -> rutin driver perangkat dalam proses kernel?
Tim
Terima kasih! Apakah benar interupsi perangkat keras menyebabkan CPU mendorong keadaan saat ini di tumpukan sehingga driver perangkat keras dapat berjalan pada CPU dan kemudian memunculkan kembali proses terputus pada CPU? Apakah interupsi perangkat lunak juga menyebabkan proses yang berjalan pada CPU didorong ke dalam tumpukan sehingga layanan yang diminta dapat dijalankan pada CPU?
Tim
Entah interupsi akan menyebabkan negara didorong pada stack. Ini memungkinkan sistem untuk memuat ulang status saat dilakukan dengan interupsi.
BillThor
Terima kasih! jika layanan yang diminta tidak akan berjalan pada CPU seperti operasi IO yang dijalankan pada perangkat IO alih-alih CPU, dan proses permintaan dapat terus berjalan tanpa menunggu layanan yang diminta selesai, apakah proses meminta masih dimasukkan ke dalam tumpukan ?
Tim
Biasanya, I / O read disebut secara sinkron dan proses tidak akan berjalan sampai I / O selesai. Untuk membaca Anda hampir selalu menginginkan ini. Menulis biasanya terjadi secara tidak sinkron memungkinkan proses untuk terus berjalan.
BillThor