Saya sedang membaca sebuah artikel yang menggambarkan perpindahan antara ruang pengguna dan ruang kernel yang terjadi saat panggilan sistem. Artikel itu mengatakan
Aplikasi mengharapkan penyelesaian panggilan sistem sebelum melanjutkan eksekusi mode pengguna.
Sekarang, sampai sekarang saya berasumsi bahwa beberapa panggilan sistem blocking
, sedangkan yang lain non-blocking
. Dengan komentar di atas, saya sekarang bingung. Apakah ini berarti bahwa semua panggilan sistem memblokir atau apakah saya salah mengerti konsep?
operating-systems
os-kernel
Ankit
sumber
sumber
Jawaban:
Anda tampaknya membebani istilah 'pemblokiran'.
Setiap saklar konteks yang Anda buat ke kernel, Anda harus menunggu untuk beralih kembali ke usermode sebelum aplikasi Anda dapat melanjutkan. Ini bukan apa yang biasanya disebut 'blocking'.
Dalam desain kernel saat ini, memblokir panggilan adalah panggilan di mana kernel hanya kembali ketika permintaan selesai (atau kesalahan terjadi). Panggilan ini biasanya memakan waktu lebih lama dan biasanya membuat proses Anda dijadwalkan keluar. Misalnya, banyak panggilan IO yang diblokir.
Ada panggilan sistem yang menyediakan IO yang sinkron dan tidak memblokir. Perhatikan bahwa masih ada saklar konteks yang terjadi di sini, hanya aplikasi yang harus menjaga sifat panggilan yang tidak sinkron.
Makalah ini tampaknya bertujuan untuk menghilangkan konteks ini bolak-balik (panggilan sistem pengecualian-kurang) dan mencoba untuk membuat semua panggilan asinkron.
sumber