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?