Saya mencoba memahami manajemen dan penjadwalan proses Linux. Saya tahu bahwa penjadwal menjadwalkan proses yang berbeda berdasarkan pengirisan prioritas/waktu. Tetapi ada tugas kernel (saya tidak menyebutkan panggilan sistem proses yang membawa proses ke mode kernel) yang harus diproses juga (misalnya:penjadwal/pengatur waktu atau beberapa kode kernel yang berjalan selamanya). Saya tidak mengerti jika penjadwal menjadwalkan CPU untuk proses yang berbeda bagaimana tugas kernel dilayani di antaranya.
Jawaban yang Diterima:
Tugas kernel yang tidak dijalankan "dalam proses" (untuk melayani panggilan sistem, atau interupsi) ditangani sendiri sebagai proses terpisah, dan Anda dapat melihatnya di ps
keluaran:
root 2 0.0 0.0 0 0 ? S Sep16 0:02 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Sep16 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I< Sep16 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S Sep16 9:11 [ksoftirqd/0]
root 10 0.2 0.0 0 0 ? I Sep16 173:25 [rcu_sched]
root 11 0.0 0.0 0 0 ? I Sep16 0:00 [rcu_bh]
root 12 0.0 0.0 0 0 ? S Sep16 0:20 [migration/0]
root 14 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/0]
root 15 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/1]
Proses ini dijadwalkan dengan cara yang sama seperti proses yang lebih Anda ketahui.
Pola umum untuk tugas-tugas tersebut adalah antrian kerja; dokumentasi kernel untuk itu cukup bagus, saya mendorong Anda untuk membacanya jika Anda tertarik dengan topik tersebut.