리눅스에서 PCB는 어디에


10

PCB 또는 프로세스 제어 블록 은 Wikipedia에서 이와 같이 정의됩니다.

프로세스 제어 블록 (PCB, 작업 제어 블록, [1] 작업 구조 또는 스위치 프레임이라고도 함)은 특정 프로세스를 관리하는 데 필요한 정보가 포함 된 운영 체제 커널의 데이터 구조입니다. PCB는 "운영 체제에서 프로세스의 표현입니다"

그 의무는 다음과 같습니다.

Process identification data
Processor state data
Process control data

프로세스의 PCB는 어디에서 찾을 수 있습니까?


Linux on Stack Overflow의 프로세스 제어 블록 도 참조하십시오 .

답변:


15

Linux 커널에서 각 프로세스는 task_struct이중 연결 목록으로 표시되며 헤드는 init_task(pid 1이 아니라 pid 0)입니다. 이것을 프로세스 테이블 이라고 합니다 .

사용자 모드에서 프로세스 테이블은 아래 일반 사용자에게 표시됩니다 /proc. 귀하의 질문에 대한 제목을 복용 :

  • 프로세스 식별 데이터 는 프로세스 ID (경로에 있음 /proc/<process-id>/...), 명령 줄 ( cmd) 및 '식별'정의에 따라 다른 속성 일 수 있습니다.

  • 프로세스 상태 데이터 에는 스케줄링 데이터 ( sched, statschedstat), 프로세스가 현재 대기중인 것 ( wchan), 환경 ( environ) 등이 포함됩니다.

  • 프로세스 제어 데이터 는 자격 증명 ( uid_map) 및 리소스 제한 ( limits) 이라고 할 수 있습니다 .

따라서 용어 정의 방법에 따라 다릅니다. 그러나 일반적으로 프로세스에 대한 모든 데이터는에서 찾을 수 있습니다 /proc.


"그의 머리는 init_task(pid 1이 아니라 pid 0)"와 같은 것은 없습니다 init_task. 그것은이다 init, 그 PID는 1이 아닌 0 (을 통해 확인 pidof init).
AleksandrH

1
@AleksandrH init_task는 커널 구조이며 프로세스가 아닙니다. 내부적으로 pid 0으로 표시되는 유휴 작업을 가리 킵니다. init_task와 init는 완전히 다른 것입니다.
Flup

그리고 아직 pid프로세스만을위한 것입니다 ...
AleksandrH

1
@AleksandrH 커널 소스 트리 ( github.com/torvalds/linux/blob/master/init/init_task.c ) 에서 init / init_task.c를 읽습니다 .
Flup
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.