- 정의 : memory에 load된 프로그램으로, body+process descriptor로 이루어져 있음.
- body : code,data,stack 영역
- process descriptor : pid, state, tq, mm 저장
- pid : process id
- state : R(run), B(block), …
- tq : timer queue (avoid infinite loop)
- mm : memory (메모리 위치)
- task_stuct{} : Linux의 process descriptor
- KMS : Kernel Mode Stack의 약자로, OS Kernel에서 실행되는 스택을 가리킴. 함수 호출 및 인터럽트 처리에 관련된 데이터를 저장하는 데 사용
- 구성 : eflag, cs, eip, …
- eflag : 프로세스의 상태나 조건 표시. 연산 결과나 조건 분기 상태 추적 & 관리
- cs : code segment의 약자로 현재 실행중인 코드 세그먼트의 위치
- eip : instruction pointer의 약자로, 현재 실행중인 명령어의 주소
- 구성 : eflag, cs, eip, …
- thread_union : task_struct{} + KMS
- memory에 linux, p1, p2, p3가 load되어 있음.
- p1 process에서 system function call 이 일어나면 HANDLE INT 를 통해 current process를 stop(state = B) 한 후, save(eip = a(location)) 한다. 그 후, run queue에서 제거하고 p2를 schedule한다.
<프로세스 자료구조 흐름 in x86 cpu>
-
-
- memory에 linux, p1, p2, p3가 load되어 있음.
- p1 process에서 system function call 이 일어나면 HANDLE INT 를 통해 current process를 stop(state = B) 한 후, save(eip = a(location)) 한다. 그 후, run queue에서 제거하고 p2를 schedule한다.
-
- init_task
- 정의 : kernel의 process descriptor
- fork
- 정의 : 부모 프로세스를 복제하여 자식 프로세스 생성 (부모의 process descriptor를 복제한다.
- 리턴값 : child = 0 , parent = child’s pid
- pthread
- 정의 : fork와 다르게, body가 아닌 process descriptor만 복제한다.
- child는 thread 함수에서 실행, parent는 pthread_create 이후 실행
- exec
- 정의 : 현재 프로세스에서 다른 프로세스로 변환한다.
- (remove old body & load new body)
- exit
- 정의 : 현재 프로세스의 body를 제거하여 zombie 상태로 만든다.
- 그 후, 자식 프로세스가 종료되었다는 것을 부모 프로세스에게 SIGCHLD를 호출하여 알린다. 그러면 parent의 state는 B → R / childe의 state는 R → Z 가 된다.
- wait
- 정의 : fork 후에 부모 프로세스가 자식 프로세스가 죽을 때까지 기다린다.
- parent’s state = B
Linux Initialization sequence
**init_task** -> **start_kernel()** -> **rest_init()** -> **kernel_thread(kernel_init)** -> **kernel_thread(kthreadd)** -> **schedule()** -> **kernel_init()** -> **do_basic_setup()**