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
};

좋은 웹페이지 즐겨찾기