GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Kernel Linux Menjadwalkan Cpu, Antara Proses/Utas Ruang Pengguna dan Tugas/Pekerjaan Kernel?

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.


Linux
  1. Cara (Benar) Mengubah UID dan GID pengguna/grup di Linux

  2. Bagaimana cara kerja copy_from_user dari kernel Linux secara internal?

  3. Bagaimana kernel Linux menentukan urutan panggilan __init?

  1. Bagaimana cara memetakan buffer kernel Linux ke ruang pengguna?

  2. Mengapa melindungi kernel Linux dari pengguna root?

  3. Bagaimana cara Linux mempertahankan kendali CPU pada mesin single-core?

  1. Linux – Perbedaan Antara Ruang Pengguna dan Ruang Kernel?

  2. Linux – Bagaimana Kernel Linux Mengetahui Nomor Mayor dan Minor Perangkat?

  3. Bagaimana kernel me-mount partisi root?