프로세스

프로세스의 개념

  • 프로세스란 프로그램의 실행.
  • 프로세스의 문맥(Context)
    • 특정 시점을 놓고 봤을 때 프로세스가 어느정도 실행됐고, 어떤 주소공간에 어느정도 data를 쌓아뒀는지 등을 규명하기 위한 것.
    • 프로세스의 현재 상태를 알기 위한 모든 요소를 문맥이라고 함.
    • CPU 수행 상태를 나타내는 하드웨어 문맥
      • Program Counter
      • Register
    • 프로세스 주소 공간
      • code, data, stack
    • 프로세스 관련 커널 자료구조
      • PCB(Process Control Block)
      • Kernel Stack (프로세스마다 별도로 가지고 있음)

=> 프로세스들이 번갈아 실행되기 때문에 프로세스의 현재 문맥을 가지고 있지 않으면 스위칭하기가 어려움.

프로세스의 상태

                 suspended  <----------------------------------
                     |                                        |
new  -admitted->   ready  <->  running  -exit->  terminated   |
                (in memory)       |                           |
                       ^-------- blocked                      |
                                  |                           |
                              suspended  ----------------------
  • 프로세스는 상태(state)가 변경되며 수행된다.
    • Running
      • CPU를 잡고, 인스트럭션을 수행하고 있는 상태.
    • Ready
      • CPU를 기다리는 상태. 다른 조건(당장 프로그램이 실행되기 위해 필요한 물리적인 메모리 등)은 모두 충족된 사태.
    • Blocked(wait, sleep)
      • CPU를 줘도 당장 인스트럭션을 수행할 수 없는 상태.
      • 프로세스가 요청한 이벤트(I/O)작업이 바로 만족되지 않아 기다리는 상태 등.
    • Suspened(stopped)
      • 외부적인 이유로 프로세스의 수행이 정지된 상태
      • 프로세스 통째로 디스크에 swap out 됨.
      • ex) 사용자가 일지 정지시킴(break key), 시스템(중기 스케줄러)이 메모리 등의 문제로 중단시킴
    • New
      • 프로세스가 생성중인 상태.
    • Terminated
      • 수행이 끝난 상태.
  • Blocked: 자신이 요청한 event가 만족되면 Ready
  • Suspended: 외부에서 resume 해 주어야 Active

프로세스 스케줄링 큐

  • Job queue
    • 현재 시스템 내에 있는 모든 프로세스의 집합.
  • Ready queue
    • 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스 집합.
  • Device queues
    • I/O device 처리를 기다리는 프로세스의 집합.

=> 프로세스들은 각 큐를 오가며 실행된다.

문맥 교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨 주는 과정.
  • 수행 과정
    • CPU에서 물러나는 프로세스에 대한 정보를 프로세스의 PCB에 저장
    • CPU에 실행되는 프로세스의 상태를 프로세스의 PCB로부터 읽어옴
  • system call/interrupt가 발생하면 무조건 context switch가 일어나는 것은 아님
    • 사용자 프로세스로부터 CPU가 OS에게 가는 것, 그리고 다시 그 프로세스로 돌아가는 것은 context switch가 아님.
    • 이는 user mode -> kernel mode -> user mode 일 뿐임.
    • 이 경우에도 문맥의 일부를 저장해야 하지만, 프로세스간 문맥 교환을 하는 경우 그 부담이 훨씬 크다.

PCB(Process Control Block)

  • 운영체제가 프로세스를 관리하기 위해 사용하는 자료구조
  • 구성요소(구조체로 유지)
    • (1) OS가 관리상 사용하는 정보
    • (2) CPU 수행 관련 하드웨어 값
    • (3) 메모리 관련
    • (4) 파일 관련

스케줄러(Scheduler)

Long-term scheduler(장기 스케줄러 or job scheduler)

  • 어떤 프로세스를 ready queue로 보낼지 결정
  • 프로세스를 메모리에 할당하는 문제
  • degree of Multiprogramming을 제어
    • 메모리에 올라가는 프로그램의 수를 적당히 유지해줘야 함.
  • time sharing system에는 보통 장기 스케줄러가 없음 => 무조건 ready

Short-term scheduler(단기 스케줄러 or CPU scheduler)

  • 충분히 빨라야 함(millisecond 단위)
  • 어떤 프로세스를 다음에 running할지 결정
  • 프로세스를 CPU에 주는 문제

Medium-term scheduler(중기 스케줄러 or Swapper)

  • 여유 공간을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
  • 프로세스에서 메모리를 해제하는 문제
  • degree of Multiprogramming을 제어
  • 프로세스 상태에 suspended라는 상태가 추가됐다.

스레드(Thread)

  • 프로세스 내부에 CPU 사용 단위가 여러 개 분리되어있으면 그 각각이 스레드(thread)
    • CPU의 수행 단위(lightweight)
    • 메모리 공간은 하나(프로세스는 하나). 프로그램 카운터만 여러 개를 두고 있음. CPU 수행 단위를 여러 개 두고 있는 것.
    • 프로세스 하나에서 공유할 수 있는 것은 최대한 공유하고, CPU 수행에 대한 정보(program counter, register, stack)만 별도로 가짐.

스레드의 구성

  • program counter
  • register set
  • stack space

스레드들끼리 공유하는 부분(=task)

  • code section
  • data section
  • OS resources

장점

  • Responsiveness(응답성)
    • 다중 스레드의 경우, 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 running 되어 빠른 처리를 할 수 있음.
  • Economy(경제성)
    • 프로세스 생성/문맥 교환은 스레드를 생성하고 교환하는 것보다 overhead가 큼.
    • 동일한 일을 수행하는 다중 스레드가 협력해 높은 처리율(throughput)과 성능 향상을 얻을 수 있음.
  • Resource Sharing(자원 공유)
    • 자원을 절약할 수 있음. 똑같은 프로그램을 서로 다른 프로세스로 나누는 것 보다 절약됨.
    • code, data, OS resources를 공유함.
  • Utilization of MP(Multi Processor) Architectures
    • 병렬성을 높일 수 있음(CPU가 여러개일때만 장점).
    • 각 스레드가 다른 프로세서에서 병렬적으로 수행될 수 있음.

구현 방법

  • kernel -> Kernel Thread
    • 스레드가 여러 개 있다는 것을 OS가 알고 있음.
    • 스레드 간 옮겨다니는 것도 OS에 의해 진행됨.
  • library -> User Thread
    • 프로그램 스스로 스레드 관리함. OS는 모르고 있음.
  • real-time Thread

출처

해당 내용은 KOCW 강의 중 이화여자대학교의 운영체제-반효경 강의의 내용을 정리한 것입니다.

댓글남기기