[Chapter 3] Process

slchoi·2022년 1월 18일
0

운영체제

목록 보기
3/4
post-thumbnail

KOCW에 공개된 이화여대 반효경 교수님 운영체제 강의를 수강 후 정리한 내용입니다.

1. 프로세스의 개념


  • 프로세스: 실행중인 프로그램

프로세스의 문맥(context)

  • 현재 시점에서 프로세스가 어디까지 실행됐는지를 확인하는데 필요
  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • 현재 시점의 프로세스 문맥을 알기 위해서는 PC가 어디를 가리키고 있는지를 알아야하고 프로세스의 메모리에 어떤 내용을 담고 있는지도 알아야 함
    • 주로 레지스터가 어떤 값을 가지고 있는지를 나타냄
  • 프로세스의 주소 공간: code, data, stack
    • 메모리와 관련된 현재 시점의 프로세스의 주소공간에 무엇이 들어있는가
  • 프로세스 관련 커널 자료 구조: PCB, Kernel stack
    • 운영체제가 프로세스를 관리하기 위해 커널 주소공간에 PCB를 둠. 현재 상태를 알기 위해서는 운영체제가 가지고 있는 PCB의 값과 kernel stack도 알아야 함.

프로세스의 상태(Process State)

  • 프로세스는 상태가 변경되며 수행됨
    • Running: CPU를 잡고 instruction을 수행 중인 상태
    • Ready: CPU를 기다리는 상태(다른 조건을 모두 만족하고)
    • Blocked(wait, sleep): CPU를 주어도 당장 instruction을 수행할 수 없는 상태
      • Process 자신이 요청한 event(ex.IO)가 즉시 만족되지 않아 이를 기다리는 상태
      • ex) 디스크에서 file를 읽어와야 하는 경우
    • New: 프로세스가 생성중인 상태
    • Terminated: 수행(execution)이 끝난 상태에서 정리할 것이 남아있는 상태

컴퓨터 시스템 입장에서의 프로세스 상태도

  • 그림에 나와있는 queue는 운영체제의 커널이 본인의 데이터 영역에 자료구조 queue를 만들어놓고 프로세스의 상태를 바꿔가면서 운영

Process Control Block(PCB)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

PCB 구조 (구조체로 유지)

(1) OS가 관리상 사용하는 정보: Scheduling information, priority
(2) CPU 수행 관련 하드웨어 값
(3) 메모리 관련: Code, data, stack의 위치 정보
(4) 파일 관련: Open file descriptors ...

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

  • Job queue: 현재 시스템 내에 있는 모든 프로세스의 집합
    • ready queue와 device queue에 있는 내용을 포함
  • Ready queue: 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queue: IO 장치의 처리를 기다리는 프로세스의 집합

문맥 교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
    • 사용자 프로세스가 다른 사용자 프로세스로 넘어가는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 아래의 내용을 수행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

유의할 점

  • System call이나 interrupt 발생시 반드시 문맥 교환이 일어나는 것은 아님
    • CPU 제어권이 사용자 프로세스로부터 운영체제로 넘어가는 경우는 문맥 교환이 아님

2. 스케줄러(Scheduler)


1. Long-term scheduler(장기 스케줄러 or job scheduler)

  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • 프로세스에 memory(및 각종 자원)을 주는 문제
  • degree of Multiprogramming(메모리에 올라가있는 프로세스의 수)를 제어
  • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)

2. Short-term schedular(단기 스케줄러 or CPU scheduler)

  • 어떤 프로세스를 다음번에 running시킬지를 결정
  • 프로세스에 CPU를 주는 문제
  • 빨라야 함(밀리세컨드 단위)

3. Medium-Term scheduler(중기 스케줄러 or Swapper)

  • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
  • 프로세스에게서 memory를 뺏는 문제
  • degree of Multiprogramming을 제어
  • 중기 스케줄러 때문에 프로세스의 상태에 Suspended(stopped) 상태가 추가됨
    • suspended: 외부적인 이유로 프로세스의 수행이 정지된 상태
      • 프로세스는 통째로 디스크에 swap out 됨
      • ex) 사용자가 프로그램을 일시 정지시킨 경우 (break key), 시스템이 여러 이유로 프로세스를 잠시 중단시킴(메모리에 너무 많은 프로세스가 올라와 있을 때)
    • blocked는 자신이 요청한 event가 만족되면 ready 상태가 되지만, suspended는 외부에서 resume해주어야 active됨

Suspended가 추가된 프로세스 상태도

  • user mode running: 프로세스가 CPU를 가지고 있으면서 본인의 코드를 실행 중인 상태
  • monitor mode running: 프로세스가 직접 실행할 수 없어 운영체제에게 요청해 운영체제의 코드가 실행 중인 상태
  • inactive 상태에서는 CPU 작업은 중단되지만 IO 작업은 계속 실행되기 때문에 suspended blocked 상태에서 suspended ready 상태로 넘어갈 수 있음

3. Thread


  • Thread: CPU 하나에 수행 단위를 여러 개 두는 경우
    • 프로세스는 하나만 띄워놓고 현재 CPU가 코드의 어느 부분을 실행하고 있는지 즉 PC의 값을 여러 개 둠
    • 프로세스의 주소 공간과 프로세스 상태, 프로세스의 각종 자원들은 공유하지만, thread 별로 CPU 수행과 관련된 정보(PC, register, stack)는 따로 가짐

  • Thread 구성: PC, register set, stack space
  • Thread가 동료 thread와 공유하는 부분(=task): code section, data section, OS resources
  • 프로세스를 Thread로 관리하는 경우 lightweight process라고 하고, 전통적인 프로세스는 heavyway process라고 함
  • 커널의 지원을 받아 커널이 알고 있는 thread는 kernel thread, 커널의 지원을 받지 않고 사용자 수준에서 구현한(kernel은 알지 못함) thread는 user thread, real-time을 지원하는 thread는 real-time thread라고 함

Thread 장점

  • 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있음 (빠른 응답성)
  • n개의 thread는 프로세스의 code, data, resource를 공유 (자원 절약)
  • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있음
  • 스레드를 사용하면 병렬성을 높일 수 있음 (CPU가 여러 개인 환경에서만 얻을 수 있는 장점)

Chapter 3 끝!!!
게시물에 사용된 사진은 강의 내용을 캡쳐한 것입니다.

profile
예비 백엔드 개발자

0개의 댓글