PCB 또는프로세스 제어 블록, Wikipedia에 정의된 대로
프로세스 제어 블록(PCB, 작업 제어 블록, [1] 작업 구조 또는 스위치프레임이라고도 함)은 특정 프로세스를 관리하는 데 필요한 정보가 포함된 운영 체제 커널의 데이터 구조입니다. PCB는 "운영 체제의 프로세스를 표현한 것입니다.
그 책임은 다음과 같습니다:
Process identification data
Processor state data
Process control data
그렇다면 프로세스용 PCB는 어디서 찾을 수 있나요?
답변1
Linux 커널에서 각 프로세스는 다음으로 구성됩니다.task_struct
이중 연결 리스트에서는 헤드가init_task
(pid 1이 아닌 pid 0). 이것은 종종 호출됩니다.프로세스 테이블.
사용자 모드에서는 일반 사용자가 프로세스 테이블을 볼 수 있습니다 /proc
. 질문 제목을 확인하세요.
식별 데이터 처리"ID" 정의에 따라 프로세스 ID(경로에 있음
/proc/<process-id>/...
), 명령줄( ) 및 기타 속성이 포함될 수 있습니다.cmd
프로세스 상태 데이터스케줄링 데이터(
sched
,stat
및schedstat
), 프로세스가 현재 무엇을 기다리고 있는지(wchan
), 환경(environ
) 등을 포함합니다.공정 제어 데이터아마도 자격 증명(
uid_map
) 및 리소스 제한(limits
)이 있을 것입니다.
따라서 용어를 어떻게 정의하느냐에 따라 다르지만 일반적으로 프로세스에 대한 모든 데이터는 에서 찾을 수 있습니다 /proc
.
답변2
리눅스의 PCB는 일부입니다스레드 정보구조
struct thread_info {
struct pcb_struct pcb; /* palcode state */
struct task_struct *task; /* main task structure */
unsigned int flags; /* low level flags */
unsigned int ieee_state; /* see fpu.h */
mm_segment_t addr_limit; /* thread address space */
unsigned cpu; /* current CPU */
int preempt_count; /* 0 => preemptable, <0 => BUG */
unsigned int status; /* thread-synchronous flags */
int bpt_nsaved;
unsigned long bpt_addr[2]; /* breakpoint handling */
unsigned int bpt_insn[2];};
struct pcb_struct {
unsigned long ksp; - Kernel Stack Pointer
unsigned long usp; - User stack Pointer
unsigned long ptbr; - Page table address
unsigned int pcc;
unsigned int asn;
unsigned long unique;
unsigned long flags;
unsigned long res1, res2;};