Dari Arsitektur Kernel Linux Mauerer,
Utas kernel adalah proses yang dimulai langsung oleh kernel itu sendiri. Mereka mendelegasikan fungsi kernel ke proses terpisah dan menjalankannya di sana '' paralel '' ke proses lain dalam sistem (dan, pada kenyataannya, secara paralel dengan eksekusi kernel itu sendiri). Utas kernel sering disebut sebagai daemon (kernel) . Mereka digunakan untuk melakukan, misalnya, tugas-tugas berikut:
- Untuk menyinkronkan secara berkala halaman memori yang dimodifikasi dengan perangkat blok tempat asal halaman (misalnya, file yang dipetakan menggunakan mmap).
- Untuk menulis halaman memori ke area swap jika jarang digunakan.
- Untuk mengelola tindakan yang ditangguhkan.
- Untuk mengimplementasikan jurnal transaksi untuk sistem file.
Pada dasarnya, ada dua jenis utas kernel:
- Tipe 1 - Utas dimulai dan menunggu hingga diminta oleh kernel untuk melakukan tindakan tertentu.
- Tipe 2 - Setelah dimulai, utas berjalan pada interval berkala, memeriksa pemanfaatan sumber daya tertentu, dan mengambil tindakan saat pemanfaatan melebihi atau jatuh di bawah nilai batas yang ditetapkan. Kernel menggunakan jenis utas ini untuk tugas pemantauan berkelanjutan.
Karena buku Mauerer mengatakan utas kernel adalah proses, saya pikir mereka harus berjalan dalam mode pengguna, bukan mode kernel. (atau apakah saya salah? Dapatkah suatu proses berjalan dalam mode pengguna atau mode kernel pada waktu yang berbeda, atau hanya satu mode?)
Tetapi Bovet's Understanding Linux Kernel mengatakan bahwa utas kernel hanya berjalan dalam mode kernel (lihat kutipan di bawah). Apakah konsep "kernel thread" dalam dua buku konsep yang sama?
Sistem Unix tradisional mendelegasikan beberapa tugas penting ke proses yang berjalan sebentar-sebentar, termasuk pembilasan cache disk, menukar halaman yang tidak digunakan, memperbaiki koneksi jaringan, dan sebagainya. Memang, tidak efisien untuk melakukan tugas-tugas ini dengan cara linier yang ketat; baik fungsi mereka dan proses pengguna akhir mendapatkan respons yang lebih baik jika mereka dijadwalkan di latar belakang. Karena beberapa proses sistem hanya berjalan dalam Mode Kernel, sistem operasi modern mendelegasikan fungsinya ke utas kernel , yang tidak dibebani dengan konteks Mode Pengguna yang tidak perlu. Di Linux, utas kernel berbeda dari proses biasa dengan cara berikut:
- Utas kernel hanya berjalan dalam Mode Kernel, sementara proses reguler berjalan secara alternatif dalam Mode Kernel dan dalam Mode Pengguna.
- Karena utas kernel hanya berjalan dalam Mode Kernel, mereka hanya menggunakan alamat linear yang lebih besar dari PAGE_OFFSET. Proses reguler, di sisi lain, menggunakan keempat gigabytes alamat linear, baik dalam Mode Pengguna atau Mode Kernel.
Buku Mauerer mengatakan bahwa utas kernel dimulai langsung oleh kernel, dan tampaknya juga mengatakan bahwa daemon adalah sinonim dari utas kernel. Jadi saya pikir daemon harus dimulai langsung oleh kernel.
Tetapi https://unix.stackexchange.com/a/193918/674 mengatakan bahwa
screen
daemon dimulai olehscreen
antarmuka pengguna (lihat kutipan di bawah). Saya pikirscreen
antarmuka pengguna adalah proses, bukan kernel. Apakah konsep-konsepdaemon
dalam buku Mauerer dan dalam tautannya menjawab konsep yang sama?Saat pertama kali memulai
screen
, Anda sebenarnya memulai antarmuka pengguna (ui), yang secara default akan membuat daemon (manajer sesi).Secara umum, Bagaimana Anda memahami konsep "utas kernel", "proses", dan "daemon", hubungan mereka dan perbedaannya?
Jawaban:
Pertama: Kredit berlaku /programming/15983872/difference-between-user-level-and-kernel-supported-threads
Utas pengguna dan Utas kernel sama persis. (Anda dapat melihat dengan melihat / proc / dan melihat bahwa thread kernel juga ada di sana.)
User thread adalah salah satu yang mengeksekusi kode ruang pengguna. Tetapi ia dapat memanggil ruang kernel kapan saja. Ini masih dianggap sebagai utas "Pengguna", meskipun menjalankan kode kernel pada tingkat keamanan yang tinggi.
Utas Kernel adalah yang hanya menjalankan kode kernel dan tidak terkait dengan proses ruang pengguna. Ini seperti "daemon UNIX", kecuali mereka adalah daemon kernel saja. Jadi bisa dibilang bahwa kernel adalah program multi-threaded. Misalnya, ada utas kernel untuk swap. Ini memaksa semua masalah swap untuk mendapatkan "serial" ke dalam aliran tunggal.
Jika utas pengguna membutuhkan sesuatu, itu akan memanggil ke kernel, yang menandai utas itu sebagai tidur. Kemudian, utas swap menemukan data, sehingga ini menandai utas pengguna sebagai runnable. Kemudian, "user thread" kembali dari kernel kembali ke userland seolah-olah tidak ada yang terjadi.
Faktanya, semua utas memulai dalam ruang kernel, karena operasi klon () terjadi dalam ruang kernel. (Dan ada banyak akuntansi kernel yang harus dilakukan sebelum Anda dapat 'kembali' ke proses baru di ruang pengguna.)
sumber