TIL

23.11.28

오잉머신 2023. 12. 5. 17:26

반효경 교수님 [운영체제] 강의 듣기

  • 3-2 : 프로세스 스케줄링 큐
  • 3-3 : 스레드
  • 4-1 : 프로세스 생성, 종료
  • 4-2 : CPU burst, I/O burst

03. Process

1) Process

Process : 실행중인 Program

 

Process의 Context

  • 현재 이 process가 어디까지 실행되었는지 (PC)
  • 현재 memory에 어떤 데이터를 담아뒀는지 (stack/data/code)
  • 현재 os가 process를 관리하고 있는 상태 (PCB)

Process의 State (<- cpu 입장에서 본 process의 상태)

  • running : cpu 잡고 있음
    • cpu를 잡고 있는 process는 언제나 하나 (single core의 경우)
  • ready : cpu만 얻으면 바로 동작 가능 (in memory)
    (ex. disk에서 읽어올 내용 physical memory에 올려뒀다)
  • blocked : cpu 받아도 못 동작
    (ex. I/O 작업 완료 기다리는 중)
    (ex. 필요한 physical memory에 없어서 disk에서 읽어와야 할 때)
  • suspended : (외부적인 이유로) memory 뺏긴 상태

cf) CPU 입장에서는 떠난거지만, Process 입장에서는 cpu 일하느냐, I/O 일하느냐 여튼 일하는 것

 

 

2) Context Switch

Context Switch : CPU를 한 process에서 다른 process로 넘겨주는 과정 (process A -> process B)

1. CPU를 내어주는 process의 상태를 그 process의 PCB에 저장 (process A의 PCB 저장)

2. CPU를 새롭게 얻는 process의 상태를 PCB에서 읽어옴 (process B의 PCB 읽기)

 

3) Scheduler

  • Short-term scheduler (CPU scheduler)
    • 어떤 process에게 cpu 줄지
  • Long-term scheduler (job scheduler)
    • 어떤 process에게 memory 줄지
    • process가 시작될 때(new -> ready) memory를 얻어야 함
    • multiprogramming : memory에 여러 program이 동시에 올라감
      • degree of multiprogramming : memory에 올라간 program 수
        너무 적으면 -> cpu 논다
        너무 많으면 -> 필요한 부분이 memory에 안 올라와 있어서 I/O 빈번
        => 적절히 제어해야함
    • 보통 얘 없음 (무조건 ready)
      => 대신 Medium-term scheduler로 degree of multiprogramming 조절
  • Medium-term scheduler (Swapper)
    • process에게서 memory 뺏음
    • 여유 공간 마련을 위해 process를 통째로 memory에서 disk로 쫓아냄
    • degree of multiprogramming 제어

4) Thread

Thread : CPU의 실행 단위

  • 하나의 Process (+하나의 PCB)
    • Memory 공간 자체는 공유
    • Stack 공간 별도
  • PC랑 Registers 각각

 

장점

  • 빠른 응답성
    (ex. 브라우저 작동에서 한 스레드가 이미지 불러올 동안 다른 스레드가 이미 받은 응답 디스플레이)
  • 메모리 절약
    • thread는 process의 memory를 공유한다 
    • 같은 일 하는 process 여러개 띄우면 memory 낭비
      (ex. 브라우저 여러개, 한글 여러개)
  • 경제성
    • process 하나 만드는 것이 thread 하나 만드는 것보다 overhead 큼
    • process context switching이 thread context swithcing 보다 overhead 큼
  • (cpu 여러개일 때) 병렬성 높임

 

Thread 종류

  • kernel thread : kernel이 관리하는 thread
    • 논리적 core와 매핑되는, 시스템의 실제 thread
    • kernel이 thread의 존재를 안다
    • kernel이 각 thread를 개별적으로 관리
      • process 내 thread들이 병렬 수행 가능 (cpu 여러개일 경우)
      • 하나의 thread가 blocked 되어도 다른 thread는 계속 작업 가능
  • user thread : user 영역의 library로 구현된 thread
    • kernel이 thread의 존재를 모른다
    • user threads can be created more quickly and are simpler to control
    • 유저 process에서 thread 관리
      • 하나의 유저 레벨 thread가 block되면, 해당 스레드를 생성한 유저 process 전체가 block
      • 그 실행을 유지하기 위해 유저 프로세스 전체가 필요하므로, 한 스레드가 block되면 전체 프로세스가 block
      • kernel은 process 단위로 자원을 할당하기 때문에
        thread Block -> Process Block -> Process 내 다른 thread도 Block