Apa perbedaan antara utas tingkat pengguna dan utas tingkat kernel?

33

Setelah membaca beberapa sumber saya masih bingung tentang utas tingkat pengguna dan kernel.

Khususnya:

Utas dapat ada di level pengguna dan level kernel

Apa perbedaan antara level pengguna dan level kernel?

Sheldon
sumber
1
Apakah ini benar-benar Comp Sci (teori) atau hanya pemrograman?
Mehrdad
6
@Mehrdad, Sistem Operasi adalah bagian dari ilmu komputer.
Kaveh

Jawaban:

28

Salah satu peran dari kernel sistem operasi multitasking adalah penjadwalan : menentukan thread eksekusi yang akan dieksekusi ketika. Jadi kernel semacam itu memiliki beberapa gagasan tentang thread atau proses . Thread adalah potongan kode berurutan yang dieksekusi, dan memiliki tumpukan sendiri dan terkadang data lainnya. Dalam konteks sistem operasi, orang biasanya menggunakan proses untuk berarti utas yang memiliki ruang memori sendiri, dan utas berarti utas yang berbagi ruang memorinya dengan utas lainnya. Suatu proses dapat memiliki satu atau lebih utas.

Beberapa sistem operasi, misalnya sistem unix yang lebih lama, hanya menyediakan proses: setiap utas yang dikelola kernel memiliki ruang memori sendiri. Sistem operasi lain, misalnya sebagian besar sistem unix modern, memungkinkan proses mengandung banyak utas eksekusi: mereka memberikan gagasan utas tingkat kernel.

Mungkin juga bagi suatu proses untuk mengelola threading sendiri. Dalam multithreading kooperatif , kode setiap utas berisi instruksi untuk beralih ke utas lain. Dalam multithreading preemptive , proses meminta notifikasi sinkron secara berkala dari kernel, dan bereaksi terhadap notifikasi ini dengan beralih ke utas yang berbeda. Dengan cara ini, multithreading diimplementasikan tanpa kerjasama kernel, di tingkat pengguna, di perpustakaan.

Suatu sistem dapat menawarkan utas level kernel dan level pengguna; ini dikenal sebagai hybrid threading .

Utas tingkat pengguna dan kernel masing-masing memiliki kelebihan dan kekurangannya. Beralih antara utas tingkat pengguna seringkali lebih cepat, karena tidak memerlukan pengaturan ulang memori untuk beralih ke penjadwal di-kernel dan kembali untuk beralih kembali ke proses. Hal ini sebagian besar penting untuk sistem bersamaan besar-besaran yang menggunakan sejumlah besar utas yang sangat berumur pendek, seperti beberapa bahasa tingkat tinggi ( khususnya Erlang ) dan utas hijau mereka . Utas tingkat pengguna membutuhkan lebih sedikit dukungan kernel, yang dapat membuat kernel lebih sederhana. Utas tingkat kernel memungkinkan utas berjalan sementara utas lain dalam proses yang sama diblokir dalam panggilan sistem; proses dengan utas tingkat pengguna harus berhati-hati untuk tidak membuat panggilan sistem pemblokiran, karena ini memblokir semua utas proses. Utas tingkat kernel dapat berjalan secara bersamaan pada mesin multiprosesor, yang tidak bisa dicapai oleh benang tingkat pengguna.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Baris terakhir Anda mengatakan "Utas tingkat kernel dapat berjalan secara bersamaan pada mesin multiprosesor, yang tidak dapat dicapai oleh benang tingkat pengguna murni". Tapi, tautan yang diberikan mengatakan, ULT dapat menjalankan secara bersamaan stackoverflow.com/questions/14791801/… . Apakah saya mendapatkan kesalahan?
Garrick
Bisakah Anda memeriksa komentar saya di atas?
Garrick
1
@Garrick Beberapa utas tingkat pengguna dapat berjalan pada inti yang berbeda secara bersamaan, asalkan mereka berjalan di dalam utas tingkat kernel yang berbeda. Jika Anda hanya memiliki ULT sebagai alat, Anda terbatas pada prosesor tunggal. Jika KLT tersedia, Anda dapat menyebarkan utas kernel ke beberapa prosesor dan mengirimkan ULT Anda di antara utas kernel yang tersedia.
Gilles 'SO- berhenti menjadi jahat'
4

Pikirkan utas level kernel sebagai " prosesor virtual " dan utas level pengguna hanya sebagai utas (Mari kita panggil seperti itu untuk saat ini). Sekarang, untuk sebuah thread yang akan dieksekusi, ia telah ditugaskan ke prosesor, kan? Jadi, setiap utas ditugaskan ke prosesor virtual sehingga dapat dijalankan.

Berikut ini beberapa fakta

  • Membuat prosesor virtual baru agak mahal. (Kernel harus membuat entri di Blok Kontrol Thread , menetapkan stack, dll.)

  • Membuat utas sangat sederhana dibandingkan dengan membuat prosesor virtual baru. Pengembang aplikasi dapat membuat utas menggunakan Utas Perpustakaan yang disediakan oleh bahasa pemrograman dan dikelola di Ruang Pengguna . Dan berbagai bahasa menerapkan multithreading dengan cara yang berbeda.

Model

  • Jika utas dipetakan pada satu prosesor virtual, maka orang harus berhati-hati untuk tidak membuat panggilan sistem pemblokiran pada utas mana pun, karena utas lain tidak dapat lagi berjalan secara bersamaan.

  • Keterbatasan ini dapat diatasi jika beberapa prosesor virtual dapat dibuat. Sekarang, utas dapat berjalan secara bersamaan (secara paralel jika ada beberapa prosesor nyata). Thread tidak akan memengaruhi thread lain yang dipetakan pada prosesor virtual lainnya.

  • Dalam model yang terakhir, salah satu atau banyak utas dapat dipetakan ke prosesor virtual.

  • Model di atas diberi nama Many to One, One to One dan Many to Many.

Referen: Konsep sistem operasi oleh Galvin et al. Topik: Utas -> Model Multithreading

azam
sumber