강의/운영체제-반효경

[운영체제] Process

JJJaewon 2024. 2. 17. 22:50
반응형

Process

  • 실행 중인 프로그램
  • Context (문맥) : 특정 시점에서 어디까지 수행을 했는가 → PC가 어디를, stack, data, code에 어디까지 실행했는가, Register에는 어떤 값이 저장되어 있었는가
    • CPU 수행 상태를 나타내는 하드웨어 문맥
      • Register, PC
    • 프로세스의 주소 공간
      • code, data, stack
    • 프로세스 관련 커널 자료 구조
      • PCB
      • Kernel stack : 여러 프로세스가 공유 → 프로세스마다 스택을 별도로 둠

프로세스의 상태(state)

  • Running : CPU를 잡고 instruction 수행중
  • Ready : CPU를 기다리는 상태 (메모리에 올라와있어야함)
  • Blocked (wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • I/O
  • New : 프로세스가 생성중인 상태
  • Terminated : 수행이 끝난 상태 - 프로세스의 instruction이 모두 끝남

Process Control Block (PCB)

  • OS가 관리상 사용하는 정보
    • Process state, Process ID
    • scheduling information, priority
  • CPU 수행 관련 하드웨어 값
    • Program Counter, registers
  • 메모리
    • Code, data, stack의 위치 정보
  • 파일 관련
    • Open file descriptor

문맥 교환 (context switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • 넘길 때 PCB에 문맥을 저장해놓고 바꿈
  • 얻는 프로세스도 PCB에서 문맥을 읽어와 실행
  • System Call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아님
    • 자기 코드 실행하다가 Interrupt 발생해서 kernel 모드 실행하다가 다시 자기 코드로 넘어가면 컨텍스트 스위치 안 일어남
    • 이 경우에도 CPU 문맥 정도는 저장됨 → 그러나 컨텍스트 스위치에 비해서는 훨씬 오버헤드가 적음 (eg. cache memory flush)

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

  • Job queue
    • 현재 시스템 내에 있는 모든 프로세스의 집합
  • ready queue
    • 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스의 집합
  • device queue
    • I/O 디바이스의 처리를 기다리는 프로세스의 집합
  • 각 큐에 PCB들을 저장해놓음 - 포인터를 통해 연결되어있는 형태

스케줄러 (Scheduler)

  • 장기 스케줄러 (job scheduler)
    • 시작 프로세스 중 어떤 것을 ready queue로 보낼 지
    • 프로세스에 메모리를 주는 문제
    • 멀티프로그래밍 : 메모리에 여러 프로그램을 돌리는 것
    • 멀티프로그래밍의 차수(degree)를 결정 - 몇개 올릴지
    • 타임 셰어링 시스템에서는 이 스케줄러가 없음 - 바로 ready로
  • 단기 스케줄러 (CPU 스케줄러)
    • 어떤 프로세스를 다음 번에 running 시킬지
    • 충분히 빨라야 함 (milllisecond)
  • 중기 스케줄러 (Swapper)
    • 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    • degree of Multiprogramming 을 제어
    • 타임 셰어링에서 멀티프로그래밍의 차수를 제어하는 방법

추가된 프로세스 상태 (중기 스케줄러가 적용될 시)

  • Suspended (stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 예 ) 메모리에 너무 많은 프로세스가 올라와 있을 때 시스템이 프로세스를 잠시 중단
    • 통째로 디스크에 swap out 된다.
    • ready 에서 suspend
    • blocked에서 suspend
    • 두가지 상태가 더 있음
    •  
    • blocked와의 차이
      • blocked : 자신이 요청한 이벤트가 끝나면 Ready로
      • suspended : 외부에서 resume해주어야 active로

동기식 입출력과 비동기식 입출력

  • 동기식
    • I/O 요청 시 끝날 때까지 기다려야하는것
    • 구현 방법
      • I/O 끝날 때까지 CPU 낭비
      • I/O 완료될 때까지 해당 프로그램에서 CPU를 빼앗음
        • I/O 처리를 기다리는 줄에 그 프로그램을 줄세움
  • 비동기식
    • I/O 요청 시 기다리지 않고 바로 다음 instruction을 실행하는것

Thread (lightweight process)

  • 프로세스 내부에 실행 단위
  • 프로그램 카운터, register 문맥, 스택만 여러개 - 실행 단위만 여러개 두는 것
  • 공유할 수 있는건 최대한 공유 (Task)
    • code, data, OS 리소스
  • 장점
    • 스레드 하나가 blocked인 상황에도 다른 스레드가 running 할 수 있음
    • 동일 작업을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상
    • 병렬성을 높일 수 있음

스레드의 장점

  • 응답성
    • 하나의 스레드가 블록되면, 다른 스레드가 continue함 → 응답성 높아짐
  • 자원 공유
    • process의 코드, 데이터, 리소스를 공유함
  • 경제성
    • creating, CPU switching 비용이 스레드가 더 쌈
  • MP 아키텍처 이용성 높임
    • 멀티 프로세서의 경우 각 스레드가 병렬적으로 다른 코어에서 돌 수 있음

스레드 구현

  • 커널 지원 (kernel thread)
    • 커널이 스레드를 알고있음
  • 라이브러리 지원 (user thread)
    • 운영체제가 스레드 존재를 모름
    • 제약이 있을 수 있음
  • 리얼 타임 스레드
반응형