크래프톤 정글 - TIL

크래프톤 정글 5기 TIL - Day 12(2)(프로세스)

개발찾아 삼만리 2024. 3. 29. 23:01

프로세스(Process)

실행중인 프로그램을 나타냄

프로세스의 문맥(Context)

  • 프로그램이 무엇을 어떻게 실행했고, 현재 시점에 어떠한 상태인지 나타내기 위한 요소
  • CPU의 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter
    • 각종 레지스터
  • 프로세스의 주소 공간
    • code, data, heap, stack

  • 프로세스 관련 커널 자료 구조
    • PCB(Process Control Block) -> 프로세스가 실행될 때마다 관리하는 구조체 생성(이중 연결 리스트)
      • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
        1. OS가 관리상 사용하는 정보
          • 프로세스 ID, 프로세스 상태
          • 스케쥴링 정보, 우선순위
        2. CPU 수행 관련 하드웨어 값
          • Program Counter, 레지스터
        3. 메모리 관련
          • code, data, heap, stack의 위치 정보
        4. 파일 관련
    • Kernal stack -> 프로세스별로 스택을 별도로 저장

프로세스의 상태

프로세스의 상태(State)가 변경되며 수행

  • Running
    • CPU를 잡고 명령을 수행중인 상태
  • Ready
    • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족한 상태)
  • Blocked(wait, sleep)
    • CPU를 주어도 명령을 수행할 수 없는 상태
    • 프로세스 자신이 요청한 이벤트(ex. I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    • 예시 : 디스크에서 file을 읽어와야 하는 경우
  • Suspended(stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 통째로 디스크에 swap out됨
    • 예시 : 사용자가 프로그램을 일시정지 시킨 경우 / 메모리에 너무 많은 프로세스가 있는 경우
  • New : 프로세스가 생성중이 상태
  • Terminated : 프로세스가 종료중인 상태

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


문맥 교환(Context Switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

CPU 수행 방식

  1. CPU를 내어주는 프로세스의 상태를 커널 스택에 프로세스의 PCB에 저장
  2. CPU를 새롭게 얻는 프로세스의 상태를 커널 스택에서 PCB를 읽어옴

주의사항

  • 사용자 프로세스(A)가 시스템 콜이나 인터럽트로 운영체제로 CPU제어권을 넘겨준 뒤,
    사용자 프로세스(A)로 돌려받는 것은 문맥 교환이 일어나는 것은 아님(소량)
  • 보냈을 때와 받을 때의 프로세스가 바뀌어야 문맥 교환이 일어남

Dispatch Latency와 Context Switching

1) Dispatch Latency

  • 스케줄러가 선택한 프로세스를 CPU에 할당하는 요소를 Dispatcher라고 함
  • Dispatcher가 하나의 프로세스를 중단하고, 다른 프로세스를 실행하기까지 소요하는 시간

2) Context Switching

  • 인터럽트로 인해 다음 우선순위의 프로세스가 실행되어야 할 때, 기존의 상태(Context)를 저장하고, 다음 프로세스를 수행할 수 있도록 PCB에 상태(Context)를 적재하는 작업

스케쥴러

한정적인 메모리를 여러 프로세스가 효율적으로 사용할 수 있도록 다음 실행 시간에 실행할 수 있는 프로세스 중에 하나를 선택하는 역할

종류

  1. 장기 스케줄러(Long-term scheduler) / 잡 스케줄러(Job scheduler)
    • degree of multi-programming 제어
    • 디스크와 메모리 사이의 스케줄링 담당
    • 어떤 프로세스에 메모리를 할당해 Ready queue로 보낼지 결정하는 역할
    • time sharing system에는 보통 장기 스케줄러가 없음 (무조건 Ready)
  2. 단기 스케줄러(Short-term scheduler) / CPU 스케줄러(CPU scheduler)
    • 메모리와 CPU 사이의 스케줄링 담당
    • 어떤 프로세스를 running 상태로 전환 시킬지 결정하는 역할
  3. 중기 스케줄러(Mid-term scheduler) / 스와퍼(Swapper)
    • degree of multi-programming 제어
    • 여유 공간을 마련하기 위해 프로세스를 통째로 메모리에서 디스크로 쫓아내는 역할(swap in/ swap out)

스케쥴링하기 위한 큐

  • Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queue : I/O device의 처리를 기다리는 프로세스의 집합

쓰레드(Thread / Lightweight process)

CPU 내부에서 실질적으로 작업을 수행하는 가장 작은 단위

  • 프로세스는 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있음
  • Program Counter와 레지스터 집합, stack이 저장돼있음
  • 같은 프로세스 내의 쓰레드는 동일한 코드와 전역데이터(메모리 영역)를 공유
  • 프로세스의 컨텍스트에서 실행(커널의 스택에 저장됨)
  • 데이터 공유가 프로세스보다 효율적임(빠르게 응답할 수 있음)
  • 운영체제 입장에서는 작업의 단위는 프로세스지만, 프로세스 입장에서는 쓰레드
  • 각각의 프로세스는 다른 프로세스에 영향을 미치지 않지만, 쓰레드는 작업은 다른 쓰레드의 영향을 미칠 수 있음
  • CPU가 여러 개일 경우 병렬성을 높일 수 있음

구현방법

  • 커널 쓰레드 : 쓰레드가 여러 개가 있다는 것을 운영체제가 알고 있어, 커널이 CPU 스케줄링 하듯이 넘겨줌
  • 유저 쓰레드 : 유저 프로그램이 스스로 라이브러리의 지원을 받아 쓰레드를 관리하는 형태(커널은 모름)
  • 리얼 타임 쓰레드

+ 가상메모리 내용 추가 작성하기..

+ 동시성, 병렬성