task 에서struct linux 커 널 학습 시작
프로 세 스 제어 블록 PCB (Process Control Block) 는 프로 세 스 가 존재 하고 실행 되 는 유일한 표지 이 며, Linux 에 서 는 task 를 사용 합 니 다.struct 라 는 구조 체 는이 구조 체 에는 많은 데이터 항목 이 있 습 니 다. 소스 코드 를 볼 때 모든 데이터 항목 을 이해 할 필요 가 없고 나중에 사용 할 때 만 이해 해 야 합 니 다.
struct task_struct
{
....
};
다음은 몇 가지 기본 적 인 데이터 항목 을 중점적으로 소개 한다.
1。프로 세 스 상태
task_struct 에 서 는 프로 세 스 의 상 태 를 긴 성형 state 로 표시 합 니 다.
volatile long state;
Liux 에는 네 가지 기본 프로 세 스 상태 가 있 습 니 다.
(1) 준비 상태 (TASK RUNNING): 실행 상태의 프로 세 스 를 포함 합 니 다.이것 은 관 리 를 편리 하 게 하기 위 한 것 이다. 왜냐하면 임의의 시간 에 준비 상태 에 있 는 프로 세 스 가 가장 많 게 는 하나 밖 에 없 기 때문이다.
(2) 대기 상태: 또 두 가지 로 나 뉜 다.
i. 얕 은 수면 상태 (TASK INTERRUPTIBLE): 두 가지 상황 에서 깨 어 납 니 다.
1. 기다 리 는 자원 이 만족 할 때.
2. 다른 프로 세 스 는 신호 나 시 계 를 통 해 깨 워 집 니 다.
ii. 깊 은 수면 상태 (TASK UNINTERRUPTIBLE): 기다 리 는 자원 이 만족 할 때 만 깨 울 수 있 고 다른 프로 세 스에 서 깨 울 수 없습니다.
(3) 일시 정지 상태 (TASK STOPPED): 다음 과 같은 몇 가지 신 호 를 받 고 프로 세 스 가 일시 정지 상태 에 들 어 갑 니 다.
프로 세 스 실행 정지
ii。SIGTSTP - - - - - 터미널 에서 신 호 를 보 내 프로 세 스 를 정지 합 니 다.
iii。키보드 인 터 럽 트
iv。SIGTOU - --------------------------------- 백 엔 드 프로 세 스 가 출력 을 요청 합 니 다.
(4) 경직 상태 (TASK ZOMBIE): 프로 세 스 가 끝 났 고 대부분의 자원 을 방출 했 지만 PCB 를 방출 하지 않 았 습 니 다.
2。프로 세 스 식별 자
Liux 는 32 비트 기호 없 는 성형 pid 로 프로 세 스 를 간단하게 표시 하고 uid 와 gid 로 프로 세 스 가 속 한 사용자 와 그룹 을 각각 표시 합 니 다.
pid_t pid;
uid_t uid;
gid_t gid;
pid 의 상한 선 은 pidmax 가 결 정 했 어 요.커 널 을 컴 파일 할 때 0x 1000 과 0x 8000 두 가지 수 치 를 선택 하 게 합 니 다. 즉, pidmax = 4096 과 pidmax = 32768 두 가지.
3。친족 관계
4. 567913. 2.프로 세 스 제어 블록 저장
1. 내부 창고
프로 세 스 가 사용자 상태 에서 커 널 상태 로 들 어 갈 때 커 널 데이터 세그먼트 에 있 는 커 널 스 택 을 사용 해 야 합 니 다.
2. 데이터 구조
struct list_head children; //
struct list_head sibling; //
struct task_struct *real_parent; //
struct task_struct *parent; //
커 널 중장 taskstruct 지침 은 threadinfo 구조 체 에서 이 구조 체 는 커 널 스 택 과 함께 8KB 커 널 공간 thread 에 놓 여 있 습 니 다.유 니 온 중.
union thread_union
{
struct thread_info thread_info;
unsigned long stack[THERAD_SIZE/sizeof(long)];// , 8KB
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.