GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:in che modo il kernel Linux pianifica la CPU, tra processi/thread dello spazio utente e attività/lavori del kernel?

Stavo cercando di capire la gestione e la pianificazione dei processi di Linux. So che lo scheduler pianifica diversi processi in base alla suddivisione di priorità/tempo. Ma ci sono attività del kernel (non sto menzionando le chiamate di sistema del processo che portano il processo in modalità kernel) che devono essere elaborate anche (ad esempio:scheduler/timer o qualche codice del kernel che funziona per sempre). Non ho capito se lo scheduler pianifica la CPU per processi diversi come vengono servite le attività del kernel nel mezzo.

Risposta accettata:

Le attività del kernel che non vengono eseguite "in corso" (per soddisfare una chiamata di sistema o un interrupt) vengono gestite come processi separati e puoi vederle in ps l'output:

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]

Questi processi sono pianificati allo stesso modo dei processi con cui hai più familiarità.

Un modello comune per tali attività sono le code di lavoro; la documentazione del kernel per quelli è abbastanza buona, ti incoraggio a leggerla se sei interessato all'argomento.


Linux
  1. Come modificare (correttamente) l'UID e il GID di un utente/gruppo in Linux

  2. Come funziona internamente copy_from_user dal kernel di Linux?

  3. In che modo il kernel Linux determina l'ordine delle chiamate __init?

  4. Come eseguire il mmap di un buffer del kernel Linux nello spazio utente?

  5. Perché proteggere il kernel Linux dall'utente root?

Qual ​​è la differenza tra i kernel macOS e Linux

Come trovare i migliori processi in esecuzione in base all'utilizzo di memoria e CPU in Linux

Come disabilitare l'accesso SSH per l'utente root in Linux?

Come montare e visualizzare il file ISO come utente root e normale in Linux

Qual è la differenza tra spazio utente e spazio kernel?

In che modo Linux carica l'immagine "initrd"?