[운영체제 기초 다지기] Process (1)

YUZAMIN
Hello, World! I'm YUZAMIN, a diligently endeavoring frontend developer 🐤💦
[운영체제 기초 다지기] Process (1)

프로세스

프로세스의 개념

Untitled

  • 프로세스: 실행 중인 프로그램
  • 프로세스의 문맥: 특정 시점에서 이 프로세스가 어디까지 실행했는가
    • 프로세스의 현재 상태를 나타내기 위해 필요한 모든 것이 프로세스의 문맥을 구성함
      • 프로그램 카운터가 코드 영역의 어디를 가리키고 있는가
        • Program Counter(PC): 프로세스의 독자적인 주소 공간의 code부분을 가리키는 포인터
      • 각종 레지스터에 현재 어떤 값을 저장하고 있는가
    • 프로세스를 관리하는 역할인 운영체제가 해당 프로세스에 대해 어떤 값(PCB, 커널스택)을 갖고 있는지도 프로세스의 문맥에 해당함
      • PCB: 프로세스는 생성될 때마다 커널 주소 공간 내 data 영역에 PCB라는 자료구조를 생성함
      • 커널 스택: 시스템 콜이 발생하여 커널 내 code 영역의 함수가 실행될 때 그에 대한 정보가 들어있음

프로세스의 상태

Untitled

Untitled

  • 프로세스는 상태가 변경되며 수행됨
    • New: 프로세스가 생성 중인 상태
    • Running: CPU 제어권을 갖고 instruction을 수행하고 있는 상태
    • Ready: CPU가 디스크에는 접근 못하므로 당장 실행되어야 하는 instruction 부분들이 물리적인 영역(메모리)에 올라와있는 준비된 상태로 CPU 제어권을 할당받기까지 대기하는 상태
      • Running 상태에서 타이머 인터럽트에 의해 수행이 정지되면 Ready 상태로 전환됨
    • Blocked(wait, sleep): CPU 제어권을 할당받아도 당장 instruction을 수행할 수 없는 상태
      • 프로세스 자신이 요청한 event(IO, 디스크에서 파일 읽어오기 등)이 즉시 만족되지 않아 이것을 기다리는 상태
      • 자신이 요청한 event가 만족되면 Ready 상태가 됨
    • Suspended(stopped): CPU 뿐만 아니라 외부적인 이유로 프로세스의 수행이 정지된 상태이며 프로세스는 통째로 디스크로 swap out됨
      • 외부에서 다시 프로세스 수행을 재개해줘야 CPU 제어권을 점거할 수 있음
      • ex. 사용자가 프로그램을 일시 정지시킨 경우, 메모리에 너무 많은 프로세스가 올라와 있는 등의 이유로 프로세스를 잠시 중단시킨 경우 → 중기 스케줄러 내용 참조
    • Terminated: 프로세스의 수행이 끝난 상태

Untitled

  • 프로세스가 시스템 콜을 해서 운영체제가 CPU 제어권을 얻어도 ‘운영체제가 Running 중인 상태’라고 표현하지 않음 → ‘해당 프로세스가 모니터 모드(커널 모드)로 Running 중인 상태’라고 표현함
  • Suspended 상태여도 IO 작업 가능: IO가 완료되면 Suspended Blocked에서 Suspended Ready 상태로 변화
    • Suspended는 메모리에서 Swap out 당하는 것이므로 CPU의 관점에서는 아무 작업도 할 수 없는 것일 뿐, IO는 가능함

Process Control Block

Untitled

  • PCB: 운영체제가 각 프로세스를 관리하기 위해 프로세스당 하나씩 생성하여 유지하는 정보
    • 다음의 구성 요소를 구조체로 유지
      • OS가 관리상 사용하는 정보
        • Process state: Ready, Running…etc.
        • Process ID
        • scheduling information, priority
          • 프로세스에게 CPU 제어권을 할당하기 위해서는 우선순위가 필요하며 이런 우선순위에 대한 값도 PCB에 저장됨
          • 먼저 대기 중인 프로세스에게 먼저 할당하지는 않음
      • CPU 수행 관련 하드웨어 값
        • Program counter, registers
      • 메모리 관련
        • Code, Data, Stack의 위치 정보
      • 파일 관련

문맥 교환 (Context Switch)

Untitled

  • 문맥 교환: CPU 제어권을 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때의 운영체제가 수행하는 작업
    • CPU 제어권을 내어주는 프로세스의 상태를 해당 프로세스의 PCB에 저장 → CPU 제어권을 넘겨받는 프로세스의 상태를 PCB에서 읽어옴

Untitled

  • 시스템 콜이나 인터럽트 발생 시 반드시 문맥 교환이 일어나지는 않음
    • 이후 운영체제가 CPU 제어권을 다른 프로세스에게 넘기면 문맥 교환이 일어남
  • (1)의 경우: 인터럽트가 들어오거나 사용자 프로세스 A가 시스템 콜 할 때 커널 모드로 바뀌었다가 다시 유저 모드로 문맥 교환 없이 복귀하는 것
  • (2)의 경우: 타이머 인터럽트 또는 IO 요청 시스템 콜의 경우 다른 사용자 프로세스에게 CPU 제어권을 넘김 → 커널 모드로 IO 요청 후, 다른 프로세스에게 CPU 제어권 넘기며 문맥 교환 발생

스케줄러

Untitled

Untitled

Untitled

  • 스케줄링: 각각의 자원 별로 어떤 작업을 수행할지, 얼마만큼의 시간을 소모할지 결정하는 것
  • 장기 스케줄러: 메모리를 어떤 프로세스에게 줄지 결정
    • 시작된 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    • 프로세스가 메모리에 적재되는 것이 허락되면 CPU 제어권을 얻을 수 있게 됨(New → Ready)
    • degree of Multiprogramming을 제어
      • Multiprogramming: 메모리에 여러 프로그램이 동시에 올라가 있는가
      • 즉, 장기 스케줄러가 메모리에 올라가 있는 프로세스의 수를 결정함
      • 메모리에 너무 많은/적은 프로그램이 올라가 있으면 성능이 저하/낭비됨
    • 보통 현재 통용되는 시스템에서는 장기 스케줄러가 필요하지 않음 → 중기 스케줄러가 유사한 역할을 대리
      • 만약 프로그램 100개를 실행시키면 일단 100개의 프로세스가 다 Ready 상태가 됨
  • 단기 스케줄러(CPU 스케줄러)
    • 어떤 프로세스를 다음 범에 Running 시킬지 결정
    • 프로세스에 CPU 제어권을 주는 문제
    • 짧은 시간 단위로 스케줄링이 일어남
  • 중기 스케줄러: 어떤 프로세스를 메모리에서 쫓아낼지
    • 메모리에 너무 많은 프로그램이 동시에 적재되어 있으면 여유 공간을 확보하기 위해 일부 프로그램을 골라 메모리에서 쫓아냄(Swap out)
    • 즉, Running 프로세스를 Suspended 상태로 변경함
    • degree of Multiprogramming을 제어
      • 현 시스템에서 장기 스케줄러가 하던 역할을 대리하는 것과 같음

출처