(1) tssk 자료 구조체
: 태스크(프로세스)가 생성되면 커널은 alloc_task_struct 매크로를 통해 커널영역의 메모리에서 8KB를 할당받아 '프로세스 디스크립터'와 '커널 스택의 자료'를 저장한다.

○ 8KB는 task_union 공도체를 사용해서 관리
   union task_union{
          struct task_struct task;
          unsigned long stack[INIT_TASK_SIZE/sizeof(long)];

8KB는 2페이지 크기이다.

2페이지의 아랫부분은 디스크립터로 사용 나머지 윗부분은 커널스택!

  - 커널스택 -> 프로세스가 사용자 영역에서 커널모드로 전환시 커널이 이 프로세스에 대해 사용하는 스택영역이다.
  - esp레지스터 값을 통해 current 값을 알아 낼 수 있고, 이 current는 태스크를 가리키는 변수이다.<current.h 에...>


(2) task_struct 구조체를 구성하는 멤버(유형별)

태스크 식별정보 : 다른 태스크들과 구별하는 정보

  - "pid-PID | pgrp-그룹ID | session-세션ID | tgid-쓰레드 그룹ID | leader"  로 구분한다.

상태정보

  - 태스크의 상태를 크게 5가지로 나타낸다
    RUNNING : 태스크가 실행중이거나 준비상태 
    INTERRUPTIBLE : 대기상태 
    UNINTERRUPTIBLE : 대기상태 - but H/W인터럽트만 허용 
    ZOMBIE : 좀비상태 
    STOPPED : 수행중단 상태

스케줄링정보

  - need_resched : 우선순위 높은 다른 태스크가 새성되거나 시간할당을 모두 소비시(스케줄러를 호출해야 할 필요 있는경우)
  - policy : 스케줄 정책
  - rt_priority : 실시간 태스크 우선순위
  - nice : 일반 태스크 우선순위(-20 ~ +19) 
  - counter : tick(틱)단위로 CPU시간을 할당받기 위해 사용

태스크관계정보

  - 모든태스크는 가족관계를 갖는다. (포인터를 이용해 관계를 짓는다.)
    *p_opptr, *p_pptr - 부모 || *p_cptr - 자식 || *p_ysptr - 동생 || *p_osptr - 형
  - 원형 이중연결리스트로 연결되있다
    next_task , prev_task  이용

시그널정보

  - 시그널 : 태스크에게 비동기적인 사건을 알려주는 매커니즘
     sig : 시그널 핸들러 정보 저장
     pending : 대기중인 시그널 리스트
     blocked : 블록된 시그널
     sigpending : 블록되지 않은 대기중인 시그널 있는지 표시

콘솔정보


메모리정보 

  - 태스크의 명령어 및 데이터는 메모리 공간에 저장 ==> 메모리 디스크립터에 저장한다.
     mm_struct *mm : 메모리에 접근하기위한 포인터 변수
     mm_struct *active_mm : 태스크 실행시 사용한는 메모리공간에 대한 정보를 가리킴

파일정보 

  - 태스크는 실행되면서 파일관리 가능하다.
     struct files_struct *files  ->태스크가 오픈한 파일관리를 위한 포인터변수
     struct fd_struct *fd        ->이것을 통해 루트 디렉토리, 현재잡업중인 디렉토리에 접근가능

문맥교환정보

  - 문맥 : 커널이 관리하는 태스크의 자원과 수행환경들의 집합

시간정보

  - real_timer : 타이머 핸들러에대한 정보
  - start_time : 태스크가 생성된 시간
  - times : 사용자레벨과 커널레벨에서 태스크가 싱행된 시간

자원정보

  - 커널은 태스크가 사용할 수 있는 자원의 양을 제한해 과도한 자원의 사용을 막는다.
     struct rlimit rmilm[RPIM_NLIMITS]
        └>rlim_cur -->현재 설정된 허용자원의 수 
        └>rlim_max -->최대로 허용할 수 있는 자원의 수
    
char comm[16] --> 태스크의 이름

기타정보



※ 출처 : http://idkkangjs.blog.me/30091117058

'L inux > Kernel' 카테고리의 다른 글

프로세스 - 상태와 전이  (0) 2011.09.27
프로세스 - 생성과 소멸  (0) 2011.09.26
프로세스 - 프로세스와 프로세스 디스크립터  (0) 2011.09.26
모듈(Module)  (0) 2011.09.26
시스템 콜(System Call) - 3  (0) 2011.09.26
by 민트앤라떼 2011. 9. 26. 16:42