포시코딩

[운영체제] 3. 프로세스 관리 (1) - Process 본문

CS (Computer Science)

[운영체제] 3. 프로세스 관리 (1) - Process

포시 2023. 4. 20. 20:36
728x90

키워드

프로세스, PCB, 문맥 교환, context switch, 큐, 스케줄러

 

프로세스

"Process is a program in execution"

즉, 실행중인 프로그램

 

프로세스의 문맥(context)

  • '문맥'이란 단어의 뜻 그대로 어떤 프로그램에 대해
    무엇을 어떻게 실행했는지, 어떤 상태에 있는지를 정확하게 나타내기 위한 개념
  • 특정 시점을 봤을 때 해당 프로세스가 어디까지 수행했는지를 규명하는데 필요한 요소
  • 코드가 어디까지 실행됐는가, 변수의 값은 얼마인가, 함수를 호출하면서 스택에 쌓인게 뭐고 어디까지 쌓였는지 등
  • 프로세스의 현재 상태를 나타내는데 필요한 모든 요소를 '프로세스의 문맥'이라고 한다.

CPU와 관련된 하드웨어 문맥

  • PC(Program Counter)
  • 각종 register

메모리와 관련된 프로세스의 주소 공간

  • code, data, stack

프로세스 관련 커널 자료구조

  • PCB(Process Control Block)
  • Kernel stack

 

프로세스의 상태(Process State)

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

Running

  • CPU를 잡고 인스트럭션(instruction)을 수행중인 상태
  • 주의해야할게 시스템 콜이나 인터럽트로 인해 운영체제로 제어권이 넘어갔을 때
    운영체제가 running중인게 아니라
    프로세스가 user mode로 running중이었던게 -> monitor mode로 running중이다 로 바뀌는 것이다.

Ready

  • CPU를 기다리는 상태(메모리 등 다른 모든 조건을 만족한 상태)
  • 프로그램이 CPU에서 실행되려면 필요한 부분이(CPU가 디스크 접근 등을 못하니까)
    물리적인 메모리에 올라와있어야 CPU를 얻었을 때 인스트럭션을 실행할 수 있기 때문에
  • Ready 상태의 프로세스들이 번갈아가며 CPU를 잡아 사용(Time sharing)

Blocked(wait, sleep)

  • CPU를 줘도 당장 인스트럭션을 수행할 수 없는 상태
  • 프로세스 자신이 요청한 event(I/O 같은)가 즉시 만족되지 않아 이를 기다리는 상태
  • ex) 디스크에서 file을 읽어와야 하는 경우 등

Suspended(stopped)

  • medium-term scheduler(중기 스케줄러) 때문에 추가된 상태
  • (하단 스케줄러에서 다시 설명)

그 외

  • New: 프로세스가 생성중인 상태
  • Terminated: 프로세스가 종료중인 상태. 즉, 수행(execution)이 끝난 상태

 

PCB

(=Process Control Block)

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

OS가 관리상 사용하는 정보

  • 사진에서 (1)에 해당
  • Process state, Process ID
  • scheduling information, priority

CPU 수행 관련 하드웨어 값

  • 사진에서 (2)에 해당
  • 프로세스의 문맥을 표시하기 위한 정보
  • PC(Program Counter), registers

메모리 관련

  • 사진에서 (3)에 해당
  • code, data, stack의 위치 정보

파일 관련

  • 사진에서 (4)에 해당
  • 프로세스가 오픈하고 있는 파일들에 대한 정보

 

문맥 교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • 어떤 프로세스가 CPU를 장악하고 계속 쓰는게 아닌
    짧은 시간 간격으로 CPU를 얻었다, 뺏겼다의 과정을 반복하기 때문에
    뺏겼다 다시 얻었을 때 처음부터 실행하는게 아닌
    뺏기던 시점의 문맥을 기억해놨다가 그 시점부터 계속 시작할 수 있는 매커니즘이 필요

  • 문맥 교환시의 작업은 다음과 같다.
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

  • 보통의 경우 (1)처럼 커널로 넘어오기 전의 프로세스에 다시 넘겨준다.
    이 경우는 문맥 교환이 아님
  • timer interrupt는 CPU를 다른 프로세스에 넘기기 위한 의도를 가진 인터럽트기 때문에 
    (2)처럼 문맥 교환 발생
  • 오래 걸리는 I/O 요청을 할 경우에도 문맥 교환 발생

  • 단, (1)번의 경우에도 문맥 교환이 일어나진 않았지만
    CPU가 사용자의 코드를 실행하다 커널의 코드를 실행하고 다시 사용자한테 CPU가 넘어가기 때문에
    약간의 문맥은 save가 되야함
  • 대신 문맥 교환보다는 훨씬 오버헤드가 적음(부담이 적다)
  • A에서 B로 CPU가 넘어가 문맥 교환이 일어나게 되면 보통 A 프로세스가 사용하던 캐시 메모리를 다 지워야함
    -> cache memory flush (상당한 오버헤드가 발생)
    하지만 (1)처럼 A -> 커널 -> A일 경우에는 그 과정까진 필요로 하지 않음

 

프로세스를 스케줄링하기 위한 큐

Job queue

  • 현재 시스템 내에 있는 모든 프로세스의 집합
  • 밑의 ready queue, device queue에 있는 프로세스도 Job queue에 포함

Ready queue

  • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • ready queue에 있으면 device queue에 없음

Device queue

  • 각 I/O device마다 처리를 기다리는 프로세스의 집합
  • device queue에 있으면 ready queue에서 빠짐

 

스케줄러(Scheduler)

자원별로 시간을 얼만큼 잡고 등을 정하는게 스케줄러

Long-Term Scheduler

(=장기 스케줄러 or job scheduler)

  • 프로세스에 memory(및 각종 자원)를 주는 문제
  • 프로세스가 시작될 때 new에 있는데 ready가 되려면 memory가 있어야 함
    이 때, 이 메모리를 줄지 안줄지를 long-term scheduler가 결정
  • 즉, 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정

  • degree of Multiprogramming을 제어
    Multiprogramming이란 메모리에 여러 프로그램이 동시에 올라가는 개념
    즉, 메모리에 올라가 있는 프로세스의 수를 제어하는게 long-term scheduler의 역할
  • 메모리에 동시에 너무 많은 프로그램이 올라가도 컴퓨터 성능이 안좋아짐
    (각 프로그램이 메모리를 너무 조금씩만 가지고 있어서 프로그램을 실행하려해도 하지 못하는 문제 발생)
  • 또, 메모리에 프로그램이 너무 적게 올라가도 성능이 안좋아짐
    (하나밖에 없는데 I/O하러 가면 CPU가 놀기 때문)
  • 이런 이유로 메모리에 프로그램 몇 개를 동시에 올려놓을지를 제어하는게
    degree of Multiprogramming 제어

  • but, 보통 우리가 사용하는 시스템(time sharing system)에서는 장기 스케줄러가 없음
    (무조건 ready)
  • 보통은 장기 스케줄러가 발동해서 프로그램한테 메모리를 줄지 안줄지를 결정하는 단계 없이
    어떤 프로그램이 실행되면 곧바로 메모리에 올려놓음
  • 그럼 장기 스케줄러가 없는데 어떻게 degree of Multiprogramming을 조절하느냐?
    -> 하단의 medium-term scheduler를 통해 조절함

Short-Term Scheduler

(=단기 스케줄러 or CPU scheduler)

  • 굉장히 짧은 시간 단위로 스케줄이 이루어짐
  • millisecond 단위로 스케줄이 이루어짐
  • 다음번에 어떤 프로세스에 running시킬지(CPU를 줄지) 결정
  • 프로세스 CPU를 주는 문제
  • long-term scheduler와 반대

Medium-Term Scheduler

(=중기 스케줄러 or Swapper)

  • 프로세스에게서 memory를 뺏는 문제
  • 메모리에 너무 많은 프로그램이 동시에 올라가 있으면 Swapper가 일부 프로그램을 골라 메모리를 뺏음
  • 다시 말해, 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아낸다.
  • degree of Multiprogramming 제어
    즉, 메모리에 올라가있는 프로세스의 수를 조절

  • 중기 스케줄러 때문에 프로세스의 상태가 하나 추가됨 
    -> Suspended(stopped) 상태

Suspended(stopped) 상태

  • medium-term scheduler(중기 스케줄러) 때문에 생긴 프로세스의 상태 중 하나
  • 중기 스케줄러 때문에 메모리를 통째로 빼앗긴 프로세스의 상태
    running, ready, blocked 중 무엇도 아니기 때문에 suspended 상태로 추가됨

  • 외부적인 이유로 프로세스의 수행이 정지된 상태
  • 프로세스가 디스크에서 통째로 swap out된 상태를 의미

  • blocked와 suspended 상태의 구분
    • blocked: 자신이 요청한 일을 하면서 기다리는 상태로 조건이 만족되야 ready 상태가 됨
    • suspended: 외부에서 정지시켜놓은 상태기 때문에 외부에서 재개시켜줘야 active 상태가 됨

  • 메모리에 너무 많은 프로세스가 올라와 있을 때 뿐만 아니라
    사용자가 프로세스를 일시 정지시킬 경우에도 해당

728x90