관리 메뉴

즐겁게, 코드

운영체제 - 03. 프로세스 관리 본문

🖥 컴퓨터공학/운영체제

운영체제 - 03. 프로세스 관리

Chamming2 2021. 4. 12. 00:05

이 글은 한국기술대학교 컴퓨터공학부의 OS 공개강의 시청한 후 정리한 내용입니다.

목차

  • 프로세스의 개념
  • PCB (Process Control Block)
  • 프로세스의 상태
  • 인터럽트
  • 컨텍스트 스위칭

1. 프로세스의 개념

작업 (Job) / 프로그램 (Program)

  • 실행할 프로그램 + 데이터
  • 컴퓨터 시스템에 실행을 요청하기 전의 상태

프로세스

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

⇒ 작업(Job)을 요청해 커널에 등록되면 이를 프로세스라 함.

1. 1. 프로세스의 정의

  • 실행중인 프로그램 (커널에 등록되고, 커널의 관리를 받는 작업)
  • 각종 자원을 요청하고 할당받을 수 있는 객체

자원의 개념

  • 커널의 관리 하에 프로세스에 할당/반납되는 수동적 객체

자원의 종류

  • SW : Message, Signal, filed, installed SW
  • HW : Processor, Memory, disk, monitor, keyboard

⇒ "자원" 이라 하면, 주로 프로세서와 메모리를 의미하게 되는듯?

2. Process Control Block (PCB)

  • 커널 공간 내에 존재
  • OS가 프로세스를 관리하기 위해 필요한 정보를 저장함.
  • 프로세스 생성 시 생성됨

2. 1. PCB가 관리하는 정보

  • PID : Process Identification Number (프로세스 고유 식별 번호)
  • 스케줄링 정보 (프로세스 우선순위)
  • 프로세스 상태 (자원 할당상태, 요청 정보 등)
  • 메모리 관리 정보 (Page table, Segment Table 등)
  • 입출력 상태 정보 (할당받은 입출력 장치 등)
  • 컨텍스트 저장 정보 (프로세스의 레지스터 상태를 저장하는 공간)
  • 계정 정보

→ PCB의 정보는 OS마다 다르며, PCB 참조 및 갱신 속도는 OS 성능을 결정하는 중요한 요인이다.

3. 프로세스의 상태

프로세스의 상태는 프로세스 - 자원 간의 상호작용을 통해 결정된다.

※ 프로세스 상태 변경도

얼핏 보면 복잡해 보이지만, 찬찬히 따라가면 어렵지 않다.

3. 1. Created State

  • 작업을 커널에 등록하는 단계
  • PCB 할당 및 프로세스를 생성한다.
  • 커널 : 가용 자원(메모리 공간) 체크 후, 프로세스 상태를 변경한다.
  • 할당할 메모리가 있을 경우 - 프로세스 상태를 Ready 로 변경
  • 할당할 메모리가 없을 경우 - 프로세스 상태를 Suspended Ready 로 변경

3. 2. Ready State

프로세서만 받으면 실행 가능!

  • 프로세서 외의 모든 자원을 할당받은 상태
  • 프로세스 할당 대기 상태 (즉시 실행 가능 상태)

3. 3. Running State

  • 프로세서와 필요한 자원을 모두 할당받은 상태
  • Running 상태가 끝나는 두 가지 상황
    •  Preemption (프로세서 선점)
      • 프로세서 스케줄링에 의해 타임아웃이 발생하거나 우선순위가 변경될 수 있음.
      • 이 경우 작업을 처리할 프로세서가 없기 때문에 Ready State 로 변경됨.
    • Block / Sleep (I/O가 끝날 때까지 대기)
      • Running State => Sleep State로 변경
      • I/O 등 자원 할당을 요청함.

3. 4. Block / Sleep State

  • 프로세서 외에 다른 자원을 기다리는 상태
    • 자원 할당은 System Call에 의해 이루어짐.
    Wake-up : Block / Sleep 상태에서 I/O가 끝나면 Ready 상태로 변경된다.

3. 5. Suspended State

  • 메모리를 할당받지 못한 상태
  • ready 상태에서 메모리를 빼앗기면 suspended ready
  • sleep 상태에서 메모리를 빼앗기면 suspended sleep
  • 메모리를 빼앗겨 suspend 상태로 들어가는 것을 swap-out, 메모리를 부여받는 것을 swap-in 이라 부른다.
  • 메모리를 할당받으면 원래 상태로 복귀한다!

3. 6. Terminated State / Zombie State

  • 프로세스 수행이 끝난 상태
  • 모든 자원을 반납한 후, 커널 내에 일부 PCB 정보만 남아있는 상태 (이후 프로세스 관리를 위해).

4. 인터럽트

  • 예상치 못한, 외부에서 발생한 이벤트
  • 인터럽트의 종류
    • I/O 인터럽트 (가장 대표적임, 프로세서가 예상하지 못한 순간에 입력이 들어올 때 / 파이썬에서도 가끔 보임)
    • Clock 인터럽트
    • Console 인터럽트
    • Program Check 인터럽트
    • Machine Check 인터럽트
    • Inter-Process 인터럽트
    • System call 인터럽트

4. 1. 인터럽트 처리 과정

  1. 간단하게, 인터럽트가 발생하면 일단 멈추고 이유를 물어본다. ("야, 왜 쳤어? 일단 이유나 들어보자")
  2. 이후, Context Saving 을 통해 실행 중의 상황을 PCB에 저장한다.
  3. 프로세스를 중단하면, 이후 Ready 상태에 있던 프로세스 중 하나를 프로세서에 올린다.
  4. 인터럽트 대응이 끝나면 Context Restore를 마친 후, 다시 Ready 상태로 큐에 올려놓는다.

5. Context Switching (컨텍스트 교환)

Context

  • 프로세스와 관련된 정보들의 집합

Context Saving

  • 현재 프로세스의 Register context를 저장하는 작업

Context Restoring

  • Register Context를 프로세스로 복구하는 작업

Context Switching

  • 실행중인 프로세스의 context를 저장하고, 앞으로 실행할 프로세스의 context를 복구하는 일 (= Saving + Restoring)

Context Switch Overhead

  • Context Switch에 소요되는 비용
    • OS마다 다름
    • OS의 성능에 큰 영향을 줌
  • 항상 불필요한 Context Switching을 줄이는 것이 좋음. (쓰레드 최적화)
반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆