티스토리 뷰
01. 프로세스와 프로세스 디스크립터
1. 프로세스 이해
- 프로세스는 시스템내의 자원(CPU,MEMORY, I/O(주변장치),파일)을 사용한다.
- 커널은 프로세스관리자이다.
프로세스의 생성,전이,소멸 상태을 관리한다.
프로세스의 자원을 할당,제한,회수 한다.
-프로세스는 배치 시스템에서는 Job이라고 불리우면 시분할 싯템에서는 Task라고 불리운다.
- 쓰레드(thread) 반드시 순차적으로 실행할 필요가 없는 기능들을 병행하여 실행함으로써 효율성을 높이기위한 개념
프로세스는 하나이상의 쓰레드로 구성된다.
1개면 단일 쓰레드 or 2개 이상이면 멀티 쓰레드
- 멀티 쓰레드 >> 여러 쓰레드가 병행하여 실해으 쓰레드간 자원을 공유함(메모리)
- 멀티 프로세스 >> 여러 프로세스가 병행하여 실행, 프로세스간에 자원 고유 안함
02. task자료 구조체
테스크(프로세스)가 생성되면 커널은 alloc_task_struct 메크로를 통해 커널영역의 메모리에서 8KB를 할당받아 '프로세스 디스크립터'와 '커널 스택의 자료'를 저장한다.
- 8KB는 task_union 공동체를 사용해서 관리한다.
- union task_union{
struct task_struct task;
ubsigned long stack[INIT_TASK_SIZE/sizeof(long)]
}
- 8KB는 2페이지 크기이다.
- 2페이지의 아랫부분 1페이지는 디스크립터로 나머지 1페이지 윗부분은 커널의 스택으로 사용한다.
커널스택 -> 프로세스가 사용자 영역에서 커널모드로 전환시 커널이 해당 프로세스에 대해 사용하는 스택영역이다.
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 - 형
원형 이중 연결 리스트로 연결 되있다.
- 시그널 정보
시그널 : 테스크에게 비동적인 사건을 알려주는 매커니즘
sig : 시그널 핸들러 정보 저장
pending : 대기중인 시그널 리스트
blocked : 블록된 시그널
sigpending : 블록되지 않은 대기중인 시그널 있는지 표시
- 콘솔 정보
- 메모리 정보
테스크의 명령어 및 데이터는 메모리 공간에 저장 >> 메모리 디스크립터에 저장한다.
mm_stuct *mm : 메모리에 접근하기위한 포인터 변수
mm_struct *active_mm : 테스크 실행시 사용하는 메모리 공간에 대한 정보를 가리킴
// 일반적으로 둘다 같은 값을 가르키면 커널스레드 경우에만 전자는 null 이고 후자가 커널영역의 정보를 가진다.
- 파일정보
테스크는 실행되면서 파일관리가 가능하다.
struct flie_struct *files : 테스크가 오픈한 파일관리를 위한 포인트 변수
struct fd_struct *fd : 이것을 통해 루트 디렉토리, 현재 작업중인 디렉토리에 접근가능
- 문맥교환정보
문맥 : 너널이 관리하는 테스크의 자원과 수행환경의 집합
- 시간정보
real_timer : 타이머 핸들러에 대한 정보
start_time : 테스크가 생성된 시간
times : 사용자레벨과 커널레벨에서 테스크가 실행된 시간
- 자원정보
커널은 테스크가 사용할 수 있는 자원의 양을 제한해 과도한 자원의 사용을 막는다,
struct rlimit rmilm[RPM_NLIMITS]
rlimit_cur 현재 서정된 허용된자원의 수
rlimit_max 최대로 허용할 수 있는 자원의 수
char comm[16] 테스크의 이름
- 기타정보
'Linux' 카테고리의 다른 글
[Linux] setrlimit, getrlimit (0) | 2014.01.24 |
---|---|
[Linux] Memory (0) | 2014.01.22 |
[Linux] fork, vfork 그리고 posix_spawn 이야기 (0) | 2014.01.22 |
[Linux] System call 동작 구조 & System call 등록 순서 (0) | 2014.01.11 |
[Linux] GRUB 정의 & 예제 (0) | 2014.01.04 |