1. Process란?
- 수행중인 프로그램
- 스케줄링 단위
- 프로그램의 수행 환경
- 제어 흐름과 주소 공간의 집합
*프로세스는 수행중인 프로그램이다. 프로세스는 목적을 달성하기 위해 cpu, memory, files, IO 등과 같은 리소스들을 필요로 한다.
2. Process id
- 모든 프로세스는 자신만의 id를 가진다.
- pid_t getpid(void); : 현재 프로세스의 id를 리턴
- pid_t getppid(void); : 현재 프로세스의 부모의 프로세스 id를 리턴
3. Task의 구조
- Text, Data, Stack, Heap 영역으로 구성
- Text 영역 : 프로그램 코드 부분
- Data 영역 : 전역 변수, 초기화 된 부분과 그렇지 않은 부분을 별도로 관리
- Stack 영역 : 지역변수, 인자, 복귀 주소
- Heap 영역 : malloc(), calloc() 등의 인터페이스로 동적 할당되는 부분
* 사용자 스택 : 사용자 함수 호출에 필요한 여러 가지 요소들을 저장(지역 변수들, 이전 스텍 프레임에 대한 포인터, 함수 호출 수행후의 리턴 주소, 함수 호출에 사용한 인자들 등)
* 커널 스택 : 커널 내의 코드가 수행될때 사용됨, 시스템 호출에 필요한 여러 가지 요소들을 저장.
4. Process Context(문맥)
- 커널이 관리하는 태스크의 자원과 제어 흐름의 집합. 3부분으로 구성
- 시스템 문맥, 메모리 문맥, 하드웨어 문맥
*System Context
- 태스크를 관리하는 정보 집합 : task struct (태스크 정보, 상태, 태스크의 가족 관계, 스케줄링 정보, 테스크의 메모리 정보, 테스크가 접근한 파일 정보, 시그널, 스레드 정보 등을 포함)
5. task의 상태
- User mode/ System mode : 사용자가 작성한 프로그램은 user mode에서 수행되고, system call 이나 interrupt는 system mode에서 수행된다. 한 프로세스가 두 모드에서 동시에 수행될 수 없으며, system mode에서는 kernel stack을 사용한다.
6. task scheduling
- 스케줄링 : 자원을 특정 객체가 사용할수 있도록 할당하는것. resource는 cpu, task는 객체가 된다.(task를 cpu에 할당)
- 스케줄링의 목표 : CPU utilization 극대화, 테스크 cpu 사이클의 효율적인 배치 밑 응답 시간 최소화
- 스케줄링 유형 : 선점형 스케줄링, 비선점형 스케줄링
- 스케줄러 : ready queue에서 task 선택, cpu할당
- 스케줄링 기준 : 공평성, 효율성, 응답 시간 및 처리율
- type of task : Interactive, Batch, Real - time
- 스케줄링 알고리즘 : FCFS, Round-Robin, SJF....
*Unix 에서의 스케줄링
- process마다 scheduling priority를 갖는다
- 특정 프로세스가 cpu를 독점하는것을 방지(너무 수행 안되면priority 올려줌)
- 프로세스가 자발적으로 CPU를 반납할수도 있음
- event가 발생하면 wakeup 되어 다시 ready queue로 들어감
- CPU를 사용한 프로세스는 aging에 의해 sleep상태에 있었던 프로세스에 비해 scheduling priority가 낮아짐
7. process관련 system calls : fork, exec, wait, exit
8. task 생성
- fork() 시스템 호출 이용
- 기존 태스크 구조(부모 태스크)를 그대로 복사한 태스크(자식 태스크) 생성
- fork() 호출 결과 자식은 0, 부모는 자식의 pid를 복귀 값으로 갖는다
- 제어의 흐름이 두개로 나누어 짐
* The child process inherits the following from the parent : - real-uid(gid), effective-uid(gid), supplementary gid, process group id, session id, controlling terminal, set-user-id flag, current working directory, root directory, umask, signal mask and dispositions, close-on-exec flags, environment, resource limits...
* differences between the parent and child : the return value from fork, PID and PPID, child's resource utilizations are set to 0, pending alarms are cleared for the child, the set of pending signals for the child is set to the empty set
*We never know if the child starts executing before the parent or vice versa : depends on the scheduling algorithm used by the kernel
9. task 생성시 고려 사항
- 자원 공유( 완전 공유, 일부 공유, 공유 없음)
-Execution : 보모와 자식이 동시에 수행 또는 부보가 자식의 종료까지 대기
10. process의 생성
- fork : 부모 태스크의 메모리 영역 복사, 부모 태스크의 정보 복사
- vfork : 부모 태스크의 메모리 영역 공유, 보통 execve와 함꼐 사용
- clone : linux에서의 thread생성, 4인자(fn, arg, flags,child stack) 사용
11. 새로운 프로그램의 수행 : exec
- 현재 텍스트, 데이터, 스택 등의 영역을 새로운 이미지로 대치
'Backend > OS★' 카테고리의 다른 글
Process 생성 (0) | 2011.05.26 |
---|---|
쓰레드(Thread) (0) | 2011.05.26 |
인터럽트 (0) | 2011.05.26 |
주 상태(Major State) (0) | 2011.05.26 |
명령어 형식(Instruction Format) (0) | 2011.05.26 |