Process (#1)

프로세스란?

  • 프로그램의 실행 단위를 프로세스라 함.

프로세스의 상태

process_state.png

  • 위 그림은 프로세스 상태도이다.
    • New: 프로세스가 생성중인 상태
    • Ready: CPU가 할당되기를 기다리는 상태
    • Running : CPU를 잡고 명령을 실행중인 상태
    • Blocked(wait, sleep): CPU가 할당 되어도 당장 명령을 수행할 수 없는 상태 (e.g: I/O)
    • Terminated: 실행이 끝난 상태

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

      • 외부적인 이유로 프로세스의 수행이 정지됨.
      • 프로세스는 통째로 디스크에 swap out됨.

Suspend와 Blocked의 차이 Suspend는 외부에서 재개를 해주어야 활성화되고, Blocked 는 자신이 요청한 event가 완료/만족되면 Ready 상태가 된다.

프로세스 상태도

process_state_2.png

  • 위 그림은 프로세스가 실행되는 과정을 도식화한 그림이다.
    • CPU 아래에 있는 박스는 Ready 상태의 Queue 이다.
    • CPU는 Queue에서 순차적으로 프로세스를 할당해서 처리한다.
    • CPU에서 disk I/O가 발생하면 device controller는 disk I/O queue 할당하고, Disk I/O는 순서대로 이를 처리한다. 이때 프로세스의 상태는 Blocked 상태이며, CPU는 다음 Queue를 처리한다.

PCB (Process Controll Block)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 블록단위로 유지하는 정보이다. pcb.png
  • 위 그림은 PCB의 정보들이다.
    • 1 . OS 가 관리상 사용
      • 프로세스상태, 프로세스 아이디, 스케줄 정보, 우선순위
    • 2. CPU 수행 관련 하드웨어 값 (PC (program counter), 레지스터)
    • 3. 메모리 관련 (code, data, stack), 메모리 limit, 열려있는 파일 리스트
  • 위 PCB가 Process단위로 커널 스택공간에 저장되어 있음.
  • 문맥 교환 (context switching)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 아래 작업을 수행한다.
    • CPU를 주는 프로세스의 상태를 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴.
  • 문맥교환 시 cache flush가 되며 주소공간(code, data, stack)을 비우고, 해당 정보를 저장하거나 불러와야 하기 때문에(위의 PCB에 저장하거나 읽어오는 작업) 오버헤드가 심함.
  • System Call 이나 Interrupt 발생 시 반드시 문맥교환이 발생하는 건 아님.
    • I/O 작업이나 timer Interrupt 같은 경우에는 프로세스가 변경되기 때문에 문맥교환이 발생.
    • 프로세스가 변경되지 않으면 문맥교환은 발생하지 않음.

스케줄러

  • Long-Term Scheduler
  • Short-Term Scheduler (CPU 스케줄러)
    • 어떤 프로세스를 다음에 수행할지(running) 결정
    • 프로세스에게 CPU를 주는 문제
  • Medium-Term Scheduler (Swapper)
    • 여유공간을 마련하기 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄.(swap area)
    • 프로세스에게서 메모리를 뺏는 문제