Apa hubungan antara panggilan sistem, pengiriman pesan, dan interupsi?

15

Saya membaca artikel Wikipedia untuk manajemen proses . Fokus saya adalah pada Linux. Saya tidak dapat menemukan hubungan dan perbedaan antara pemanggilan sistem, pengiriman pesan dan interupsi, dalam konsep dan tujuannya. Apakah itu semua untuk proses membuat permintaan ke kernel untuk sumber daya dan layanan?

Beberapa kutipan dari artikel dan beberapa lainnya:

  1. Ada dua cara yang mungkin bagi OS untuk mendapatkan kembali kendali prosesor selama eksekusi program agar OS melakukan de-alokasi atau alokasi:

    1. Proses mengeluarkan panggilan sistem (kadang-kadang disebut interupsi perangkat lunak); misalnya, permintaan I / O terjadi meminta untuk mengakses file pada hard disk.
    2. Terjadi interupsi perangkat keras; misalnya, tombol ditekan pada keyboard, atau timer habis (digunakan dalam pre-emptive multitasking).
  2. Ada dua teknik dimana program yang mengeksekusi dalam mode pengguna dapat meminta layanan kernel:

    * System call
    * Message passing
    
  3. interupsi adalah sinyal asinkron yang menunjukkan perlunya perhatian atau peristiwa sinkron dalam perangkat lunak yang menunjukkan perlunya perubahan dalam eksekusi.

    Interupsi perangkat keras menyebabkan prosesor menyimpan status eksekusi dan memulai eksekusi pengendali interupsi. Interupsi perangkat lunak biasanya diimplementasikan sebagai instruksi dalam set instruksi, yang menyebabkan konteks beralih ke pengendali interupsi mirip dengan interupsi perangkat keras.

StackExchange untuk Semua
sumber
2
Pertanyaan yang sangat bagus
Stéphane Gimenez

Jawaban:

12
  1. Semua sistem operasi modern mendukung multitasking. Ini berarti bahwa sistem dapat menjalankan banyak proses secara bersamaan; baik dalam pseudo-paralel (ketika hanya satu CPU tersedia) atau saat ini dengan multi-core CPU menjadi umum secara paralel (satu tugas / inti).

    Mari kita ambil contoh yang lebih sederhana dari hanya satu CPU yang tersedia. Ini berarti bahwa jika Anda menjalankan dua proses berbeda secara bersamaan (misalkan peramban web dan pemutar musik) sistem tidak benar-benar dapat menjalankannya pada waktu yang bersamaan. Apa yang terjadi adalah bahwa CPU beralih dari satu proses ke proses lainnya sepanjang waktu; tetapi ini terjadi sangat cepat, sehingga Anda tidak pernah menyadarinya.

    Sekarang mari kita asumsikan bahwa sementara dua proses sedang dieksekusi, Anda menekan tombol reset (bad boy). CPU akan segera menghentikan apa pun yang sedang dilakukan dan me-reboot sistem. Selamat: Anda menghasilkan interupsi.

    Kasingnya mirip ketika Anda pemrograman dan ingin meminta layanan dari CPU. Perbedaannya adalah dalam hal ini Anda mengeksekusi kode perangkat lunak - biasanya prosedur pustaka yang mengeksekusi panggilan sistem (misalnya fopenuntuk membuka file).

    Jadi, 1 menjelaskan dua cara berbeda untuk mendapatkan perhatian dari CPU.

  2. Sebagian besar sistem operasi modern mendukung dua mode eksekusi: mode pengguna dan mode kernel. Secara default sistem operasi berjalan dalam mode pengguna. Mode pengguna sangat terbatas. Sebagai contoh, semua I / O dilarang; dengan demikian, Anda tidak diizinkan untuk membuka file dari hard disk Anda. Tentu saja ini tidak pernah terjadi secara nyata, karena ketika Anda membuka file, sistem operasi beralih dari pengguna ke mode kernel secara transparan. Dalam mode kernel Anda memiliki kontrol total terhadap perangkat keras.

    Jika Anda bertanya-tanya mengapa kedua mode itu ada, jawaban paling sederhana adalah untuk perlindungan. Sistem operasi berbasis mikrokernel (misalnya MINIX 3) menjalankan sebagian besar layanannya dalam mode pengguna, yang membuatnya lebih tidak berbahaya. Kernel monolitik (seperti Linux) memiliki hampir semua layanan mereka berjalan dalam mode kernel. Jadi driver yang crash di MINIX 3 tidak mungkin untuk menjatuhkan seluruh sistem, sementara ini tidak biasa di Linux.

    Panggilan sistem adalah primitif yang digunakan dalam kernel monolitik (model data bersama) untuk beralih dari mode pengguna ke kernel. Pesan lewat adalah primitif yang digunakan dalam microkernels (model klien / server). Untuk lebih tepatnya, dalam sebuah pemrogram pesan yang lewat, pemrogram juga menggunakan pemanggilan sistem untuk mendapatkan perhatian dari CPU. Pesan yang lewat hanya dapat dilihat oleh pengembang sistem operasi. Kernel monolitik yang menggunakan panggilan sistem lebih cepat tetapi kurang dapat diandalkan, sementara kernel mikro yang menggunakan message passing lebih lambat tetapi memiliki isolasi kesalahan yang lebih baik.

    Jadi, 2 menyebutkan dua cara berbeda untuk beralih dari mode pengguna ke kernel.

  3. Untuk merevisinya, cara paling umum untuk membuat interupsi perangkat lunak, alias jebakan, adalah dengan mengeksekusi panggilan sistem. Interupsi di sisi lain dihasilkan murni oleh perangkat keras.

    Ketika kami menginterupsi CPU (baik oleh perangkat lunak atau perangkat keras), ia perlu menyimpan suatu keadaan saat ini - proses yang dijalankan dan pada titik mana ia berhenti - jika tidak, ia tidak akan dapat melanjutkan proses ketika beralih kembali . Itu disebut konteks switch dan masuk akal: Sebelum Anda mematikan komputer Anda untuk melakukan sesuatu yang lain, pertama-tama Anda harus memastikan bahwa Anda menyimpan semua program / dokumen Anda, dll sehingga Anda dapat melanjutkan dari titik di mana Anda menghentikan lain kali Anda akan menyalakannya :)

    Dengan demikian, 3 menjelaskan apa yang perlu dilakukan setelah mengeksekusi jebakan atau interupsi dan seberapa mirip kedua kasus tersebut.

sakisk
sumber
1
Terima kasih! (1) Dalam 1, maksud Anda dua cara untuk mendapatkan perhatian dari CPU adalah interupsi perangkat lunak (program dengan contoh panggilan sistem) dan interupsi perangkat keras (contoh kunci reset)? (2) Dalam 2, apakah maksud Anda panggilan sistem dan pengiriman pesan adalah dua cara interupsi perangkat lunak? (3) Apakah benar bahwa tujuan interupsi perangkat lunak adalah untuk proses meminta layanan dan sumber daya kernel, dan tujuan interupsi perangkat keras tidak ? Jika ya, apa tujuan dari interupsi perangkat keras?
StackExchange for All
1
(1) Benar. (2) Ya, panggilan sistem dan pengiriman pesan adalah dua teknik berbeda yang dapat digunakan untuk mencapai Komunikasi Antarproses. Tetapi memang benar bahwa keduanya berbasis perangkat lunak, sehingga untuk mendapatkan perhatian dari CPU Anda menjalankan jebakan (interupsi perangkat lunak). (3) Dalam arti tertentu, ya. Contoh meminta layanan kernel adalah menjalankan prosedur pustaka (yang akan diterjemahkan ke dalam 1 atau lebih panggilan sistem) seperti creatmembuat file baru. Contoh interupsi adalah printer mengirim sinyal ke CPU untuk menginformasikan bahwa pencetakan selesai.
sakisk
1
Terima kasih! Mengenai (3), maksud Anda dalam arti tidak? Apa tujuan umum interupsi perangkat keras dan interupsi perangkat lunak?
StackExchange for All
1
Reset sistem bukan merupakan interupsi; tidak menyimpan status untuk melanjutkan setelah.
psusi
1
@faif reset dan NMI (Non Maskable Interrupt) adalah dua pin yang berbeda pada CPU. Yang terakhir menyebabkan interupsi, yang berarti menyelamatkan negara dan melompat ke handler. Yang pertama menginisialisasi CPU (sengaja membuang semua negara) seperti halnya saat dihidupkan (reset secara otomatis dinyatakan saat dihidupkan). Karena bagian dari definisi interupsi adalah ia menyimpan status, reset gagal memenuhi definisi itu.
psusi
9

Panggilan sistem, pengiriman pesan (seperti yang dijelaskan dalam artikel Wikipedia), dan interupsi adalah semua hal yang menyebabkan perubahan konteks atau beralih dari pengguna ke mode kernel. Seperti yang mungkin Anda ketahui:

  • mode kernel: program memiliki tampilan memori yang datar atau nyata, dan program dapat membaca / menulis secara bebas ke semua memori dan semua perangkat perangkat keras secara langsung tanpa batasan.

  • mode pengguna: program memiliki tampilan memori tervirtualisasi, program tidak dapat membaca / menulis secara bebas ke semua memori dan tidak dapat membaca / menulis perangkat perangkat keras secara langsung. Untuk mendapatkan lebih banyak memori atau mengakses perangkat keras, program mode pengguna harus memanggil kernel. Panggilan sistem dan pengiriman pesan adalah dua metode untuk melakukan ini.

Panggilan sistem melibatkan pengeksekusian instruksi CPU tertentu atau sekumpulan instruksi, yang membuat CPU melompat (menyimpan alamat pengirim di stack) terlebih dahulu ke alamat yang telah ditentukan (tidak dapat ditulisi ke mode pengguna) dan memindahkan CPU dari mode pengguna ke mode kernel (dering) 3 untuk berdering 0 dalam arsitektur Intel).

Gangguan perangkat keras melakukan hal yang sama, mereka membuat lompatan CPU (menyimpan alamat pengirim di stack) ke alamat yang telah ditentukan dan memindahkan CPU dari mode pengguna ke mode kernel. Jadi di banyak CPU mekanisme yang sama dapat dipanggil oleh perangkat lunak (disebut "interupsi perangkat lunak") dan dapat digunakan untuk panggilan CPU.

Kelulusan pesan menyiratkan (setidaknya bagi saya) bahwa kernel adalah "proses yang berjalan" yang akan menerima aliran pesan dan bahwa ada fungsi yang dapat diakses mode pengguna yang akan mengirim pesan tersebut. Atau bisa jadi bahwa fungsi "kirim" hanya mendorong nilai pada stack dan pada saat berikutnya kernel memiliki kontrol (baik jika suatu proses memblokir atau terjadi interupsi) ia memunculkan pesan dari stack dan mengirimkannya ke rutinitas internal yang sesuai.

Dalam arsitektur microkernel di mana "kernel" sebenarnya sangat minim dan sebagian besar fungsi yang disediakan oleh kernel dipindahkan ke proses "server", yang semuanya dapat berjalan secara bersamaan pada sistem multi-CPU, sesuatu seperti ini mungkin lebih berguna daripada pendekatan sistem panggilan lama polos. Menafsirkan dan merutekan "pesan" ke kernel "server" yang sesuai akan menjadi salah satu dari sedikit pekerjaan microkernel.

LawrenceC
sumber
3
Mode kernel menggunakan tabel halaman yang sama dan menyajikan tampilan memori virtual yang sama dengan mode pengguna. Perbedaannya adalah ia memiliki akses ke halaman yang ditandai sebagai terbatas pada mode kernel.
psusi
5

Pesan yang lewat adalah konsep tingkat tinggi dari satu proses pengiriman pesan ke yang lain. Ini diimplementasikan oleh panggilan sistem (kernel), meminta kernel untuk meneruskan pesan ke proses lainnya. Panggilan sistem meminta kernel untuk melakukan berbagai layanan untuk proses tersebut. Mereka diimplementasikan oleh perangkat lunak interupsi / sistem perangkap, yang menyebabkan cpu untuk menyimpan beberapa status pada stack sehingga dapat kembali nanti, kemudian beralih ke mode kernel dan melompat ke penangan kernel.

Baik gangguan perangkat keras dan perangkat lunak menyebabkan cpu menyimpan status, beralih ke mode kernel, dan beralih ke pengendali yang ditentukan untuk gangguan itu. Perbedaannya adalah bahwa gangguan hardware dihasilkan oleh perangkat keras eksternal ketika mereka membutuhkan perhatian, seperti keyboard yang menunjukkan bahwa tombol telah ditekan. Penangan keyboard kemudian dapat membaca port IO keyboard untuk melihat tombol apa yang ditekan, dan mengambil tindakan yang sesuai, dan kemudian kembali ke program yang terputus.

psusi
sumber