Dov'è PCB su Linux


10

Un blocco di controllo PCB o di processo , è definito in questo modo su Wikipedia

Process Control Block (PCB, chiamato anche Task Controlling Block, [1] Task Struct o Switchframe) è una struttura di dati nel kernel del sistema operativo che contiene le informazioni necessarie per gestire un determinato processo. Il PCB è "la manifestazione di un processo in un sistema operativo

e il suo dovere è:

Process identification data
Processor state data
Process control data

Quindi dove si trova il PCB di un processo?


Vedi anche Blocco controllo processi in Linux su Stack Overflow.

Risposte:


15

Nel kernel Linux, ogni processo è rappresentato da un task_structin un elenco doppiamente collegato, il cui capo è init_task(pid 0, non pid 1). Questo è comunemente noto come tabella dei processi .

Nella modalità utente, la tabella dei processi è visibile agli utenti normali in /proc. Prendendo le intestazioni per la tua domanda:

  • I dati di identificazione del processo sono l'ID del processo (che si trova nel percorso /proc/<process-id>/...), la riga di comando ( cmd) e possibilmente altri attributi a seconda della definizione di "identificazione".

  • Dati di stato di processo include dati di pianificazione ( sched, state schedstat), ciò che il processo è attualmente in attesa sul ( wchan), l'ambiente ( environ) etc.

  • Si potrebbe dire che i dati di controllo del processo sono le sue credenziali ( uid_map) e i limiti delle risorse ( limits).

Quindi tutto dipende da come definisci i tuoi termini ... ma in generale, tutti i dati su un processo possono essere trovati in /proc.


"il cui capo è init_task(pid 0, non pid 1)" Non esiste nulla del genere init_task. È init, e il suo pid è 1, non 0 (confermato tramite pidof init).
AleksandrH,

1
@AleksandrH init_task è una struttura del kernel e non un processo. Indica l'attività inattiva che è rappresentata internamente da pid 0. init_task e init sono cose completamente diverse.
Flup,

Eppure pidè solo per i processi ...
AleksandrH,

1
@AleksandrH Leggi init / init_task.c nella struttura dei sorgenti del kernel ( github.com/torvalds/linux/blob/master/init/init_task.c ).
Flup,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.