GNU/Linux >> Linux Esercitazione >  >> Linux

I thread del kernel di Linux sono davvero processi del kernel?

La documentazione può creare confusione, quindi ecco il file "reale " Modello Linux:

  • all'interno del kernel Linux, qualcosa che può essere eseguito (e programmato) è chiamato "processo",
  • ogni processo ha un ID processo (PID) univoco del sistema e un ID gruppo di thread (TGID)
  • un processo "normale" ha PID=TGID e nessun altro processo condivide questo valore TGID,
  • un processo "threaded" è un processo il cui valore TGID è condiviso da altri processi,
  • diversi processi che condividono lo stesso TGID condividono anche, almeno, lo stesso spazio di memoria e gestori di segnale (a volte di più),
  • se un processo "threaded" ha PID=TGID, può essere chiamato "il thread principale",
  • chiamando getpid() da qualsiasi processo restituirà il suo TGID (=PID "thread principale"),
  • chiamando gettid() da qualsiasi processo restituirà il suo PID (!),
  • qualsiasi tipo di processo può essere creato con il clone(2) chiamata di sistema,
  • ciò che è condiviso tra i processi viene deciso passando flag specifici a clone(2) ,
  • nomi numerici delle cartelle che puoi elencare con ls /proc come /proc/NUMBER sono TGID,
  • nomi numerici delle cartelle in /proc/TGID/task come /proc/TGID/task/NUMBER sono PID,
  • anche se non vedi tutti i PID esistenti con ls /proc , puoi ancora fare cd /proc/any_PID .

Conclusione :dal punto di vista del kernel, esistono solo processi, ciascuno con il proprio PID univoco, e un cosiddetto thread è solo un diverso tipo di processo (che condivide, almeno, lo stesso spazio di memoria e gestori di segnale con uno o più altri -s).

Nota: l'implementazione del concetto di "thread" in Linux ha portato a una confusione di vocabolario, e se getpid() ti sta mentendo non fa quello che pensavi, è perché il suo comportamento segue la compatibilità POSIX (si suppone che i thread condividano un PID comune).


Non c'è assolutamente alcuna differenza tra un thread e un processo su Linux. Se guardi clone(2) vedrai una serie di flag che determinano cosa è condiviso e cosa non è condiviso tra i thread.

I processi classici sono solo thread che non condividono nulla; puoi condividere i componenti che desideri sotto Linux.

Questo non è il caso di altre implementazioni del sistema operativo, dove ci sono differenze molto più sostanziali.


I thread sono processi sotto Linux. Vengono creati con il clone chiamata di sistema, che restituisce un ID di processo a cui può essere inviato un segnale tramite kill chiamata di sistema, proprio come un processo. I processi thread sono visibili in ps produzione. Il clone la chiamata viene passata flag che determinano quanto dell'ambiente del processo padre è condiviso con il processo thread.


Linux
  1. 30 Esercizi sui processi Linux per amministratori di sistema

  2. Linux:registro dei thread passati che ora sono chiusi?

  3. UNIX / Linux:3 modi per inviare segnali ai processi

  4. Introduzione ai thread di Linux – Parte I

  5. Cosa sono i processi Linux, i thread, i processi leggeri e lo stato del processo

Come elencare i processi in esecuzione in Linux

Comando Ps in Linux (Elenca processi)

Come uccidere i processi Zombie in Linux

Monitoraggio dei processi su Linux

Comandi per la gestione dei processi in Linux

Come inviare processi in background su Linux