(1) 태스크 문맥
: 운영체제 연구자들은 태스크와 관련된 모든 정보를 '문맥(Context)'라고 부른다.

 - 파일 디스크립터, 우선순위, CPU 사용량, 태스크의 가족관계, 시그널, 자원 등


 ○ 태스크의 문맥은 크게 세 부분으로 구분할 수 있다.

- 첫째, 시스템 문맥
: 태스크의 정보를 유지하기 위해 커널이 할당한 자료구조들(task_struct, 파일 디스크립터, 파일 / 세그먼트 / 페이지 테이블 등).

- 둘째, 메모리 문맥
:  텍스트, 데이터, 스택, heap 영역, 스왑공간 등.

- 셋째, 하드웨어 문맥
: 문맥교환할 때 태스크의 현재 실행 위치에 대한 정보를 유지. 


(2) task_struct 자료구조

- /usr/src/linux-2.6.34.11/include/linux/sched.h

○ task identification
: 태스크를 인식하기 위한 변수
- pid : 태스크 ID
- tgid : 태스크가 속해있는 쓰레드 그룹 ID
- 해시 관련 필드 : pid를 통해 해당 태스크의 task_struct를 빠르게 찾기 위해 커널이 유지하는 변수
- 사용 접근 제어 필드 : uid(사용자 ID), euid(유효 사용자 ID), suid(저장된 사용자 ID), fsuid(파일 시스템 사용자 ID)
- 사용자 그룹 접근 제어 필드 : gid, egid, sgid, fsgid 

○ state
: 생성에서 소멸까지 상태 관리를 위한 변수
- TASK_RUNNING(0), INTERRUPTIBLE(1), UNITERRUPTIBLE(2), STOPPED(4), TRACED(8),  EXIT_ZOMBIE(16), DEAD(32)
 
○ task relationship
: 태스크는 생성되면서 가족 관계를 갖는다.
- real_parent : 현재 태스크를 생성한 부모 태스크의 task_struct 구조체를 가리킨다.
- parent : 현재 부모 태스크의 task_struct 구조체를 가리킨다.
- children / sibling : 자식과 형제를 리스트로 연결한 뒤 그 리스트의 헤드를 각각 children / sibling 에 저장해 놓았다.
 ※ 부모 태스크가 자식 태스크보다 먼저 죽는다면 자식 태스크의 부모는 init 태스크로 변경되기 때문에 parent가 구분된다.

○ scheduling information
: 태스크 스케쥴링 정보
- prio, array, policy, cpus_allowed, time_slice, rt_priority 

○ signal information
: 태스크에게 비동기적인 사건의 발생을 알리는 메커니즘
- signal, sighand, blocked, pending

○ memory information
: 명령어와 데이터를 text, data, stack, heap 공간 등에 저장. task_struct에는 이 공간에 대한 위치와 크기, 접근 제어 정보등을 관리하는 변수들이 존재한다.
- mm_struct

○ file information
- files : 태스크가 오픈한 파일 접근 (files_struct 구조체)
- fs : 루트 디렉터리의 inode와 현재 디렉터리의 inode 접근 (fs_struct 구조체)

○ thread structure
: 문맥 교환을 수행할 때 태스크가 현재 어디까지 실행되었는지 기억해놓는 공간
- TSS

○ time information
: 태스크의 시간 정보를 위한 변수
- start_time, real_start_time : 태스크가 시작된 시간
- cpu_time : 사용한 CPU 시간
- run_delay : 대기 시간

○ format
: 리눅스는 Linux exec 도메인 뿐 아니라 BSD, SVR4 exec 도메인도 지원
- personality :  BSD, SVR4 커널에서 컴파일된 프로그램도 재컴파일없이 수행하기 위한 변수
- binfmt :  다양한 binary format을 지원(a.out, elf, java, shell script)

○ resource limits
: 태스크가 사용할 수 있는 자원의 한계이다. 배열로 구현되어 있고, 현재 커널에서는 하드웨어에 따라 11 혹은 13개 자원 한계 설정 가능
- rlim_max : 최대 허용 자원 수
- rlim_cur : 현재 설정된 허용 자원 수

 
by 민트앤라떼 2012. 6. 21. 16:24