Linux에서 PCB는 어디에 있습니까?

Linux에서 PCB는 어디에 있습니까?

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, statschedstat), 프로세스가 현재 무엇을 기다리고 있는지( 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;};

관련 정보