프로세스의 상태는 어떻게 정의될까?

Ji_min·2021년 5월 6일
0

CS 공부

목록 보기
5/9

프로세스(Process)

프로세스의 의미

실행 중인 프로그램 program on executing

프로세스의 문맥(Process Context)

  • 프로세스의 현재 상태를 나타내는데 필요한 모든 요소를 프로세스 문맥이라고 함

  • 특점 시점에 프로세스가 어느만큼 작업을 했고 과연 이 프로세스가 어디까지 와있는지

  • 프로그램 카운터(PC)가 어느 부분을 가리키고 있는가 → 코드의 어디까지 실행했는가

    참고 프로그램 카운터(PC) : 코드에서 실행하는 부분을 가리키고 있는 장치

    참고 메모리 주소 공간 → code / data / stack

  • 레지스터에 어떤 값을 넣어놓고 어떤 명령까지 실행했는가

  • Q. 왜 프로세스의 문맥 파악이 필요할까?

    A. CPU는 계속 여러 프로세스를 번갈아 담당하기 때문에 어떤 프로세스를 어디까지 작업했는지 알아야 함. 그렇지 않으면 매번 처음부터 다시 실행해야 하기 때문.

프로세스의 상태(Process State)

  • 프로세스는 상태가 변경되면서 수행된다.
    • running : CPU를 잡고 있는 상태
    • ready : 당장 필요한 부분이 메모리에 올라와 있으면서 CPU를 기다리고 있는 상태
    • blocked(wait, sleep) : CPU를 줘도 바로 작업 수행이 불가능한 상태 ex) IO 작업처럼 오래 기다려야 하는 작업. 메모리에 올라와있지 않고 디스크에 내려가있는 작업
    • 기타 상태 (정확히는 프로세스의 상태가 아닌 상태)
      • new : 프로세스가 생성 중인 상태
      • terminated : 프로세스의 수행이 끝난 상태 → 약간 정리할 게 남아 있어서 완벽하게 메모리상에서 제거되지는 않은 상태

이미지 출처

프로세스 스케쥴링(Process Scheduling)

프로세스 스케쥴링의 의미

프로세스를 CPU에게 할당하는 과정

프로세스 스케쥴링을 위한 큐(Queue)

  • 프로세스의 처리를 위한 각각의 큐가 존재 → ready queue, IO device queue, resource(공유 데이터) queue 등

  • 프로세스는 상태에 따라 큐에 가서 줄을 서고 작업이 해결되기를 기다림

    참고 Queue → First In First Out

  • Job queue : 메모리 할당을 기다리는 모든 프로세스

  • Ready queue : 메모리에 올라와서 CPU 할당을 기다리는 상태의 프로세스 (= ready 상태)

  • Device queue : 각 IO 디바이스의 작업을 기다리는 프로세스 (= block 상태)

이미지 출처

PCB(Process Control Block)

  • 큐의 구조는 링크드 리스트 형식으로 구성
  • 큐의 헤더는 큐의 처음과 마지막 프로세스의 PCB를 가리키는 포인터를 포함
  • PCB : 각 프로세스마다 프로세스를 관리하기 위해 유지하는 정보
  • 프로세스 하나당 PCB가 있음
  • 저장하는 정보 : 프로세스 우선순위 값, 프로세스의 문맥 관련 정보 등

이미지 출처

문맥 교환(Context Switch)

  • CPU가 한 프로세스에서 다른 프로세스로 넘어가는 과정
  • 문맥 교환 시 필요한 작업
    • 운영체제가 프로세스로부터 CPU를 빼앗을 때 커널 주소 공간의 data 영역의 PCB에 프로세스의 문맥 정보를 저장해 놓음
    • 운영체제가 CPU를 다른 프로세스에게 넘겨줄 때 PCB에서 문맥을 찾아서 같이 넘겨줌 → 마지막으로 실행했던 곳부터 찾아서 작업할 수 있도록

헷갈리는 점 정리

Q. 시스템콜이나 인터럽트가 발생하면 반드시 문맥 교환이 일어나는 걸까?
A. 문맥 교환의 의미 → CPU가 작업하는 프로세스가 교체되는 것!
그렇기 때문에 시스템콜이나 인터럽트 이후 CPU가 다시 원래 작업하던 프로세스로 돌아가면 그건 문맥 교환이 일어나는 것이 아님. 따라서 시스템콜이나 인터럽트가 발생한다고 무조건 문맥 교환이 일어나는 것은 아니다.

스케쥴러

  • Short-term 스케쥴러(CPU 스케쥴러) : 어떤 프로세스를 바로 다음에 running 시킬지 결정

    → 일반적으로 생각하는 스케쥴링의 의미

  • Long-term 스케쥴러(Job 스케쥴러) : 어떤 프로세스가 메모리에 올라갈지를 결정 → degree of multiprogramming을 제어

    참고 degree of multiprogramming : ****메모리에 몇 개의 프로그램이 동시에 올라와 있는지

    But, 실제 시스템에서는 장기 스케쥴러가 없음. 프로그램이 시작되자 마자 ready 상태(메모리에 올라가 있는 상태)가 되기 때문.

    그러면 어떻게 메모리의 프로세스 수를 조정할까? → mid-term 스케쥴러를 사용

  • Medium-term 스케쥴러(Swapper) : 너무 많은 프로그램이 동시에 올라가 있을 때, 여유 공간 마련을 위해 일부 프로그램을 메모리에서 통째로 쫓아냄(swap out 시킴) → 이를 통해 degree of multiprogramming을 제어

장기 스케쥴러 vs 중기 스케쥴러

  • 장기 스케쥴러 : 애초에 메모리에 올라갈 프로그램의 수를 조정
  • 중기 스케쥴러 : 일단 다 올려놓은 다음 공간이 모자라면 뺌 → 시스템 입장에서는 중기 스케쥴러가 더 효과적임
  • suspended(stopped) : 중기 스케쥴러 때문에 추가된 프로세스의 상태로, 메모리를 통째로 빼앗긴 프로세스의 상태. 외부의 개입(중기 스케쥴러)으로 인해 프로세스의 수행이 멈춰있는 상태

blocked vs suspended

  • blocked : 자기 스스로 멈췄다가 조건이 충족되면 ready 상태가 됨
  • suspended : 외부의 개입에 의해 수행이 멈췄기 때문에 다시 외부의 개입을 통해 재개시켜줘야 active 상태가 됨


이미지 출처

  • suspended blocked vs suspended ready : suspend가 blocked 상태에서 suspend가 되었는지 ready 상태에서 suspend가 되었는지에 따라 구분

참고 프로세스가 시스템콜 혹은 인터럽트로 인해 커널모드가 되었을 경우에도 프로세스가 running하고 있다고 간주

참고

profile
Curious Libertine

0개의 댓글