Abstraction and Decomposition
Complexity 문제 해결
- Abstraction + Decomposition = Layered Architecture- API (Application Programming Interface) : Layer(계층)와 Layer 사이의 통신을 위해 정의 된 호출 규약 (system call 등)
Layering Principle
- 위의 계층은 아래 계층이 제공하는 기능(API)만을 사용할 수 있으며 반대의 경우는 발생하지 않아야 한다.
Process Creation and Termination
일반적인 Process 생성 순서
1. OS는 Code를 Code Segment에 저장
2. OS는 전역 변수를 Data 영역에 저장
3. 초기화된 Stack과 Heap 생성
( http://winwoo.tistory.com/18 ' Process 초기화 '참고 )
4. Process의 정보를 담은 PCB를 malloc 시킴
5. 만들어진 PCB를 Ready Queue에 Add유닉스(Unix)계열의 경우 Process 생성 방법
1. System Boot 시 0번(첫번째) Process만 일반적인 process 생성 방식으로 생성
2. 이후 모든 Process는 'Cloning'방법으로 생성
-ex) system Call : fork();Cloning Process 생성 방법
- Parent Process : Process Cloning을 초래하는 기존의(첫번째) Process
- child Process : Parent Process로 부터 만들어지는 새로운 Process
- fork() : Parent Process가 Child Process를 생성하기 위해 System call 함수
- fork() logic
1. OS가 현재 fork()를 호출한 Parent Process 수행 중단
2. Parent Process의 Context 스냅샷 저장
3. 저장한 스냅샷 그대로 Copy
4. Child Process 생성 완료
-> 단, PID(Process Id) 는 다름
-fork()의 단점 : Parent Process와 다른 형태의 Process는 생성할 수 없다.
-fork() 보완 : fork() 이후 exec() 호출
-exec() : fork()를 이용해 copy한 process에 File System에 있는 Process Data를 Override 시킴
-> 이미 생성된 Copy Process의 내용을 무시하기 때문에 좋지 않은 logic
-wait() : 생성한 Child Process의 Id를 받아 Child Process가 종료 될 때 까지 Parent Process를 기다리게 함
-exit() : Process를 종료한다. 종료 시 Code, resource, data structure등 모두 날라가지만, exit Status라는 자료구조는 가지고 있다.
(이후 Process는 zombi State가 된다.)Zombi State
-exit() 이후에 Parent Process가 자신의 exit status를 읽어가기를 기다리는 Process의 상태Shell 또는 CLI(Command Line Interrupt)
-사용자가 입력한 명령어를 입력으로 받아들여 새로운 Process를 수행시키는 프로그램
- COW(Copy on Write)
- fork()시 바로 Override 되는 단점 보완
- Process context를 fork()시점에 복사하지 않고, Data Segment에 새 값이 쓰여질 때 복사하는 기법
'프로그래밍 > 운영체제' 카테고리의 다른 글
CPU Scheduling (0) | 2016.10.15 |
---|---|
MultiThreading (0) | 2016.10.13 |
Context Switching(1) (0) | 2016.10.11 |
Process Scheduling (0) | 2016.10.09 |
Process Concept (0) | 2016.10.09 |