참고 : [Course] Operating System (CPA310) - 운영체제 강의


[ 운영체제 4강. 프로세스 관리 ]

Process Management ( 프로세스 관리 )


1. Job vs Process

(1) Job (작업) / Program

  • 실행할 “프로그램 + 데이터”를 묶어놓은 것
  • “실행 전”의 상태


(2) Process (프로세스)

  • “실행을 위해 커널에 등록”된 작업
  • 시스템 성능 향상 위해 커널에 의해 관리됨


figure2


2. Process에 대한 정의

“실행 중인 프로그램”

  • 커널에 등록되어 (관리되고) 있음
  • 각종 자원을 요청하고, 할당 받을 수 있는 개체
  • 프로세스 관리 블록 (PCB)을 할당 받은 개체
  • 능동적인 개체 ( active entity )


다양한 종류의 프로세스

figure2


3. Resource(자원)의 개념

“커널의 관리 하에, 프로세스에 할당/반납되는 수동적 개체(passive entity)”

  • 자원은 프로세스에 할당되고

    프로세스는 이를 사용하여 작업을 처리함!

  • 누가 관리? KERNEL


자원의 분류

  • 1) HW 자원 ( 프로세서, 메모리, 디스크, 모니터 등 )
  • 2) SW 자원 ( 메세지, 시그널, 파일 등 )


4. Process Control Block(PCB)

  • 프로세스를 컨트롤(관리)하기 위한 정보를 모아둔 블록

  • 프로세스가 생성될 떄, 함께 생성된다

    ( = 프로세스가 생성된다 = 커널에 PCB가 생성된다 )

  • PCB는 OS 별로 서로 다르다!

    ( OS의 성능을 결정 짓는 중요한 요소 )

figure2


PCB가 관리하는 정보

  • PID (프로세스 고유 식별 번호)
  • 스케줄링 정보
  • 프로세스 상태
  • 메모리 관리 정보
  • 입출력 상태 정보
  • 문맥 저장 영역
  • 계정 정보


5. Process States (프로세스의 상태)

프로세스 : “자원 간의 상호작용”에 의해 결정된다


프로세스 상태 및 특성

figure2


Process State Transition Diagram

figure2


(1) Created State

  • 작업이 커널에 등록된 상태

    ( PCB 할당되어 있음 / 프로세스가 생성됨 )

  • create된 이후, 2가지 가능성

    사용할 수 있는 메모리 공간이 있느냐에 따라 결정!

    • 1) ready : 자원(메모리) 할당 O
    • 2) suspended ready : 자원(메모리) 할당 X


(2) Ready State

  • 프로세서 외에, 다른 모든 자원을 할당 받은 상태

  • 아직 실행된 것은 아님! ( 실행 가능 상태)

    ( 즉, CPU(프로세서) 할당 대기 상태라고 볼 수 있음)

  • “Dispatch ( Schedule )”

    • Ready 상태에서 Running 상태가 되는 것!


(3) Running State

  • 실제로 실행되는 상태!

    ( 프로세서 & 필요한 자원 모두 할당 받음 )

  • Running 벗어나는 2가지 가능성

    • 1) Preemption : Running -> Ready

      • 프로세서 뺏김!
      • 원인 : 프로세서 스케줄링 ( time-out, priority change … )
    • 2) : Block/Sleep : Running -> Asleep

      • 원인 : I/O 등 자원 할당 요청

      • Asleep 상태 끝나고 곧바로 다시 Running으로?

        일반적으로 NO! Ready 거쳐서 다시 Running


(4) Blocked / Asleep State

  • 프로세서 외에 다른 자원을 기다리는 상태

figure2


(5) Suspended State

  • 메모리 할당 못받은/뺏긴 상태
  • 그럼, 지금까지의 메모리 이미지는..? SWAP device에 보관

figure2


(6) Terminated / Zombie State

  • 프로세스 수행이 다 끝난 상태
  • 모든 자원 반납 후, 커널 내에 일부 PCB 정보만 남아있음


6. 인터럽트 (Interrupt)

  • 인터럽트 = “예상치 못한, 외부에서” 발생한 이벤트

  • 다양한 종류의 인터럽트가 있다 ( I/O, Clock, Console, Program Check, … interrupt )


(1) 인터럽트 처리 과정

figure2


[ 시간 순서 ]

  • 1) 인터럽트가 발생하면, 커널이 개입!

  • 2) 잠시 프로세스를 중단시킨다! 이때, Context Saving이라는게 발생한다. ( Context Saving : 지금까지의 과정을 저장하는 과정 )

  • 3) Interrupt Handling : 인터럽트의 WHERE/WHY 파악

  • 4) Interrupt Service : 이를 처리하기 위해, 어떤 service routine을 호출해야하는지 결정

  • 5) Ready 상태에 있던 다른 프로세스를 Processor로 불러옴! ( Context Saving되어 있던 다른 애가 불러와 질 수도! )


(2) Context Switching (문맥 교환)

  • Context : 프로세스 관련 정보 집합
    • CPU 안에…. CPU register context
    • Memory 안에…. code / data / stack / pcb
  • Context Saving : 현재 프로세스의 register context를 저장

  • Context restoring : register context를 복구

  • Context switching ( = Process switching ) : 실행중인 프로세스의 context 저장 & 이후에 실행한 프로세스의 context 복구


Context Switch Overhead

Context Switching에 소요되는 비용은 OS마다 다르다!

불필요한 Context Switching은 잘 줄이자!

  • ex) thread 이용