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

+ Recent posts