sw사관학교정글/OS 개념정리

[week08] KOCW 운영체제(반효경교수님) - Process 1

D cron 2021. 12. 30. 16:59

Process 1

프로세스의 개념

Q. 프로세스란?

A. process is a program in execution(실행중인 프로그램)

프로세스의 문맥(context) : 프로세스의 현재 상태를 나타내는데 필요한 모든 요소

CPU 수행 상태를 나타내는 하드웨어 문맥

  • Program Counter
  • 각종 register

프로세스의 주소 공간(memory)

  • code, data, stack

프로세스 관련 커널 자료 구조(운영체제가 프로세스 관리하는 부분)

  • PCB(Process Control Block)
  • Kernel stack

프로세스의 상태(Process State)

process가 놀이공원 줄 기다리듯이 queue에 들어가서 자기 차례를 기다린다.

사실 kernel의 data영역에서 자료구조로 queue를 만들고 프로세스 상태를 바꿔가면서 운영한다.

프로세스는 상태(state)가 변경되며 수행된다.

Running

  • CPU를 잡고 instruction을 수행중인 상태

Ready

  • CPU를 기다리는 상태(다른 모든 준비는 끝남)
    • 필요한 부분은 main memory에 올라와있어서 CPU만 얻으면 바로 동작할 수 있는 상태

Blocked(wait, sleep)

  • CPU를 주어도 당장 instruction을 할 수 없는 상태
  • Process 자신이 요청한 event(ex: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    • 디스크에서 file을 읽어와야 하는 경우

Suspended(stopped)

  • 사용자(사람)가 프로그램을 일시 정지시킨 경우
  • 시스템이 여러 이유로 프로세스를 잠시 중단시킴
    • 메모리에 너무 많은 프로세서가 올라와 있을 때
  • 외부적인 이유로 프로세스의 수행이 정지된 상태
  • 프로세스는 통째로 디스크에 swap out 됨

Blocked vs suspended

  • Blocked: 자신이 요청한 event가 만족되면 Ready
  • Suspended: 외부에서 resume해 주어야 Active

New

  • 프로세스가 생성중인 상태

Terminated

  • 수행(execution)이 끝난 상태

새로운 프로세스 상태도(사용자 프로그램의 상태도)

user mode running: 프로세스가 CPU를 가지고 있으면서 본인의 코드를 실행중인 상태

monitor mode running: 프로세스가 kernel모드에서 running하고 있다

  • 주의) CPU가 프로세스에서 커널로 넘어가서 운영체제가 running하는 것이 아니다.

점선의 아랫 부분은 inactive라고 부르고 외부의 요인으로 인해 프로세스가 얼어붙은 상황

PCB(Process Control Block)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

PCB 구성 요소 (구조체로 유지)

OS가 관리상 사용하는 정보

  • Process state(ready? blocked?), Process ID
  • scheduling information, priority

CPU 수행 관련 하드웨어 값

  • Program counter, registers

메모리 관련

  • code, data, stack의 위치정보

파일 관련

  • open file descriptors

문맥 교환(Context Switch)

문맥교환: CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행

  • CPU를 내어주는 프로세스 상태를 그 프로세스 PCB에 저장
  • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

문맥교환 - 헷갈리기 쉬운 부분

System call이나 Interrupt(하드웨어) 발생시 반드시 context switch가 일어나는 것은 아니다.

  • 현재 프로세스 내에서 User mode에서 kernel mode로 넘어가는 것은 context switch가 아니다
  • 사용자 프로세스 A로부터 사용자 프로세스 B로 넘어가는 과정이 문맥교환임

1의 경우 CPU 수행 정보 등 context의 일부를 PCB에 save해야한다.

2의 경우 문맥교환(프로세스 자체가 바뀜)을 실제로 수행하기 때문에 그 부담이 훨씬 크다(문맥교환의 경우, cache memory를 다 지워버림 → overhead)

스케줄러(Scheduler)

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

  • 다음번에 어떤 프로세스에게 Memory를 줄지 결정
  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • degree of Multiprogramming을 제어
    • 메모리에 프로그램이 몇 개 올라가 있는지 나타냄
  • 사실 현재 시스템들은 장기 스케줄러가 없다(시작되면 무조건 메모리 줌).
    • Medium-term scheduler를 이용해서 degree of Multiprogramming을 조절

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

  • 다음번에 어떤 프로세스에게 CPU를 줘서 running 시킬지 결정
  • millisecond 단위로 빨라야 함

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

  • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
  • 프로세스에게서 memory를 뺏는 문제
  • degree of Multiprogramming을 제어