3장 - Process

프로세스는 실행중인 프로그램이다.

  • 프로세스의 문맥(Context)

    • Context란 특정 시점을 잘라놓고 봤을 때 현재 시점을 규명하기 위한 상태를 의미한다
    • CPU 수행 상태를 나타내는 하드웨어 문맥
      • Program Counter
      • 각종 Register
    • 프로그램의 주소 공간
      • code, data, stack
    • 프로세스 관련 커널 자료 구조
      • PCB(Process Control Block)
        • 운영체제 역할 중 하나가 프로세스를 관리하는 것인데, 프로세스가 생길 때 관리하기 위한 데이터 영역
      • Kernel stack
        • 각 프로세스가 운영체제에 대신 요청한 일을 kernel stack에서 실행 함
        • 커널 스택은 프로세스마다 별도로 가지고 있음

    현대의 컴퓨터 시스템은 Time sharing, Multi tasking이므로 프로세스의 내용을 백업해놓지 않으면 다음 process가 실행 될 때 다음 시점의 instruction을 실행할 수 없기 때문

    프로세스의 상태(Process State)

    https://user-images.githubusercontent.com/28971015/114367166-22cb4780-9bb7-11eb-814b-f1f4ab697fe0.png

    • Running
      • CPU를 잡고 instruction을 수행중인 상태
    • Ready
      • CPU를 기다리는 상태
      • 모든 준비가 끝나있고 CPU만 얻으면 되는 상태
      • 보통은 Ready에 있는 Process가 번갈아 실행되는 형태
    • Blocked(wait, sleep)
      • CPU를 줘도 instrcution을 실행 못하는 상태
      • code가 메모리에 올라와 있지 않고 디스크에 있을 경우

    번외로 New, Terminated가 있음

    https://user-images.githubusercontent.com/28971015/114367472-7047b480-9bb7-11eb-9c2b-96cc94ca6b55.png

    프로세스의 상태

    • 공유데이터를 여러 프로세스가 접근하면 일관성이 깨질 수 있음

    • 오래 기다리는 작업이 필요하면 blocked

    • 놀이동산에 가서 줄 기다리는 것과 비슷함

    • CPU는 타는 것은 짧지만 기다리는 것은 긴 롤러코스터와 비슷

    • Queue라는 것은 커널에 Data영역에 만들어 놓은 자료구조다

    Process Control Block

    • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
    • 구성 요소(구조체로 가짐)
      • OS가 관리상 사용하는 정보
        • Process State, Process ID
      • CPU 수행 관련 하드웨어 값
        • Program Counter, Registers
      • 메모리 관련
        • Code, Data, Stack의 위치정보
      • 파일 관련
        • Open file descriptors

    문맥 교환(Context Switch)

    • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
    • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음 과정을 수행
      • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장(save)
      • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴(load)

    https://user-images.githubusercontent.com/28971015/114384973-5cf21480-9bca-11eb-83cb-7414b022ba9e.png

    • System call이나 interrupt가 발생했을 때 반드시 context switch가 일어나는 것은 아님
    • 사용자 Process에서 OS Process로 넘어가는 것은 context switch가 아님
    • A process에서 B process로 넘어가야 context switch가 발생했다고 하는 것
    • timer interrupt는 보통 다른 프로세스로 넘길 때 사용하는 것
    • (1)의 경우에도 context의 일부를 PCB에 저장하지만, (2)의 경우 그 부담이 더 큼(cache memory flush 등), A → B로 넘어갈 때 cache memory를 비워야 함

Queue의 종류

  • Job Queue
    • 현재 시스템 내에 있는 모든 프로세스의 집합
    • Ready Queue와 Device Queue를 포함함
  • Ready Queue
    • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device Queue
    • I/O device의 처리를 기다리는 프로세스의 집합
  • Interrupt가 발생할 때 ready queue에서 기다리는 것처럼 표현 되었지만 사실은 ready queue에 들어가지는 않음(뒷 장에 나옴)

https://user-images.githubusercontent.com/28971015/114386107-c0307680-9bcb-11eb-9991-d8401e8f58a3.png

스케쥴러(Scheduler)

  • Long-term scheduler
    • 프로세스가 생성되었을 때 memory에 올릴지 말지 결정하는 스케줄러
    • 프로세스에 memory를 주는 문제
    • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)
      • 100개 실행시키면 100개다 켜짐
      • medium-term scheduler를 사용함
    • degree of Multi-Programming을 제어(메모리에 프로그램이 몇 개 올라가 있는가)
  • Short-term scheduler(CPU scheduler)
    • ms 단위
    • 어떤 프로세스를 다음번에 실행할지 결정
  • Medium-term scheduler(Swapper)
    • 메모리에 너무 많은 프로그램이 올라가 있으면 메모리에서 쫓아냄
    • 프로세스에게서 memory를 뺏는 문제
    • degree of Multiprogramming을 제어
    • Swapper때문에 Suspended라는 상태가 생김
      • 외부적인 이유로 프로세스의 수행이 정지된 상태
      • 프로세스는 통째로 디스크에 swap out됨

Blocked : 자신이 요청한 event가 만족되면 Ready

Suspended : 외부에서 Resume해 주어야 Active

https://user-images.githubusercontent.com/28971015/114387582-96784f00-9bcd-11eb-969b-fa8ac2664452.png

동기식 입출력과 비동기식 입출력

  • 어떤 프로세스가 입출력 OS에 요청 입출력이 끝날 때까지 아무것도 안하면 동기식 입출력
  • 입출력 요청을하고 다른 일을 하면 비동기식 입출력

Thread

  • 쓰레드는 프로스세 내부의 CPU 수행 단위
  • thread마다 PC와 register, stack이 존재 함
  • PC를 통해 각 thread는 어떤 명령어를 처리하고 있는지 알 수 있음
  • 공유 하는 부분 code section, data section, OS resources

Thread의 장점

  • 응답성 : thread 하나가 blocked(waiting) 상태일 때 다른 thread가 실행(running)하여 응답속도를 높일 수 있음
  • 동일한 일을 수행하는 다중 thread가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있음
  • 병렬성을 높일 수 있음
  • 자원 공유
  • 경제성 : 생성/CPU switching의 경우 overhead가 줄어듬(생성 30배, switching 5배)
  • Multi Processor일때 유용성

구현 방법

  • Kernel에서 지원하는 방법
    • 커널의 지원을 받음
  • Library에서 제공하는 방법
    • 커널이 모름
    • POSIX

참고 자료

반효경 교수님의 운영체제 강의를 참고하였습니다. (https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f)