PCB와 컨텍스트 스위칭

이강용·2024년 7월 23일
0

CS

목록 보기
90/109

프로세스 제어 블록(PCB, Process Control Block) 이란?

  • 운영체제가 각 프로세스에 대한 중요한 정보를 저장하는 데이터 구조
  • PCB는 프로세스의 실행 상태를 관리하고 프로세스 간의 문맥 전환(Context Switching)을 지원하는 데 필수적인 역할을 함
  • 운영체제에서 관리하는 프로세스에 대한 메타데이터를 저장한 데이터블록이며 커널 스택에 저장
  • 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고 프로세스가 종료되면 PCB는 제거

커널 스택(Kernel Stack), 유저 스택(User Stack)이란?

  • 가상 메모리에서 각각 운영체제의 커널모드와 사용자 모드에서 사용되는 스택을 커널 스택유저 스택이라 함

커널 스택

  1. 역할
    • 시스템 호출, 인터럽트 처리 그리고 다른 커널 모드에서 실행되는 작업들이 사용하는 스택
  2. 보안 및 안정성
    • 사용자 프로그램의 버그나 악의적인 공격으로부터 커널을 보호, 사용자 모드에서 커널 스택에 직접 접근할 수 없음
  3. 크기
    • 일반적으로 고정된 크기를 가지며 이는 보통 8KB 정도, 이는 커널이 처리할 수 있는 최대 스택 프레임 깊이를 제한
  4. 프로세스당 커널 스택
    • 각 프로세스는 자신만의 커널 스택을 가지며 프로세스가 커널 모드로 전환될 때 사용
      • 프로세스가 사용자 모드로 돌아갈 때 커널 스택은 해당 프로세스의 상태를 유지

유저 스택

  1. 역할
    • 애플리케이션 코드가 함수 호출, 지역 변수 저장 그리고 함수 인자 전달 등을 위해 사용하는 스택
  2. 크기
    • 유저 스택은 유동적이며, 프로그램 실행 중에 스택 크기가 동적으로 변경될 수 있음
      • 필요에 따라 힙 영역과 경합할 수 있음
  3. 프로세스당 유저 스택
    • 각 프로세스는 자신만의 유저 스택을 가지며, 이 스택은 프로세스의 주소 공간 내에 위치
      • 일반적으로 스택 영역은 높은 주소에서 낮은 주소로 확장
  4. 상호 작용
    • 유저 스택은 커널 스택과 직접 상호작용하지 않지만, 시스템 호출을 통해 커널 모드로 전환될 때 커널 스택과 간접적으로 상호작용할 수 있음
      • 시스템 호출 시 유저 스택의 내용이 커널 스택으로 복사될 수 있음

PCB의 구조

  1. 프로세스 상태(Process State)
    • 현재 프로세스가 어떤 상태에 있는지를 나타냄
    • 상태 예 : 실행 중(Running), 준비 상태(Ready), 대기 상태(Waiting), 종료 상태(Terminated)
  2. 프로세스 번호(Process Number)
    • 각 프로세스를 고유하게 식별하는 프로세스 ID(PID)
    • 운영체제가 프로세스를 관리하고 추적하는 데 사용
  3. 프로그램 카운터(Program Counter)
    • 프로세스가 다음에 실행할 명령어의 주소를 가리킴
    • 프로세스가 중단된 위치에서 다시 시작할 수 있도록 함
  4. 레지스터(Registers)
    • 프로세스가 실행 중에 사용하는 CPU 레지스터의 값들을 저장
    • 문맥 전환(Context Switching) 시에 현재 프로세스의 레지스터 상태를 저장하고 새로운 프로세스의 레지스터 상태를 복원
  5. 메모리 제한(Memory Limits)
    • 프로세스가 사용할 수 있는 메모리 범위를 정의
    • 프로세스의 주소 공간, 페이지 테이블, 세그먼트 테이블 등의 정보가 포함
  6. 열린 파일 목록(List of Open Files)
    • 프로세스가 현재 열고 있는 모든 파일에 대한 정보를 포함
    • 파일 디스크립터 테이블(File Descriptor Table)을 통해 관리

프로세스 상태전이 다이어그램

  1. 생성 상태(New)
    • fork() 시스템 콜은 부모 프로세스가 새로운 자식 프로세스를 생성할 때 사용
      • 새로운 프로세스는 먼저 생성 상태에 놓이게 됨
    • 이때 운영체제는 새로운 프로세스에 대한 PCB를 생성
    • 생성 상태에서 준비 상태로의 전이로 나타남
  2. 준비 상태(Ready)
    • fork() 시스템 콜이 완료되면 새로운 프로세스는 준비 상태로 전이
    • 이 상태에서 프로세스는 실행될 준비가 되어 있으며 CPU 할당을 기다림
    • 준비 상태는 처음 프로세스가 생성된 이후 메모리 공간이 충분하면 메모리를 할당받고 그렇지 않으면 준비 큐(준비 순서열)에 들어가서 대기 중인 상태
    • 이는 CPU 스케줄러부터 CPU 소유권이 넘어오기를 기다리는 상태
    • 준비 상태디스패처에 의해 실행 상태로 전이
  3. 실행 상태(Running)
    • 디스패처(dispatcher)는 준비 상태의 프로세스 중 하나를 선택하여 실행 상태로 전환
    • 실행 상태는 CPU 소유권과 메모리를 할당받고 인스트럭션을 수행 중인 상태를 의미
      • 이를 CPU burst가 일어났다고도 표현함
    • exec() 시스템 콜은 현재 실행 중인 프로세스를 새로운 프로그램으로 대체하는 데 사용
    • exec()가 호출되면 현재 프로세스의 코드, 데이터, 힙 및 스택 세그먼트가 새로운 프로그램으로 대체, 그러나 PID는 그대로 유지
    • 실행 상태타임아웃 또는 입출력 요청에 의해 다른 상태로 전이될 수 있음
  4. 대기 상태(Waiting/Blocked)
    • 대기 상태(Waiting/Blocked)
      • 실행 중인 프로세스는 입출력 작업이나 다른 이벤트를 기다리기 위해 대기 상태로 전환될 수 있음
      • 대기 상태에서는 CPU를 점유하지 않으며 이벤트가 발생할 때까지 기다림
      • 예 : 프린트 인쇄 버튼을 눌렀을 때, 실행 중이던 프로세스가 IO 요청으로 인해 인터럽트가 발생하여 중단 상태로 변경
      • 실행 상태에서 대기 상태로 전이되고 입출력 완료 시 대기 상태에서 준비 상태로 전이
    • 대기 중단 상태(Ready Suspended)
      • 준비 큐가 꽉 차거나 메모리 부족으로 인해 일시 중단된 상태
      • 프로세스는 메모리가 충분해질 때까지 준비 큐 외부에서 대기
      • 메모리 부족으로 인한 일시 중단 상태를 의미
    • 일시 중단 상태(Blocked Suspended)
      • 대기 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 인해 일시 중단된 상태
      • 이는 중단된 상태에서 메모리가 부족하여 다시 대기할 수 없는 경우 발생
  5. 완료 상태(Terminated/Exit)
    • 프로세스가 자신의 작업을 완료하면 종료 상태로 전환
    • exit() 시스템 콜이 호출되면 프로세스는 종료되고 PCB는 운영체제에 의해 제거
    • 종료 상태는 프로세스 실행이 완료되어 해당 프로세스에 대한 자원을 반납하며 PCB가 삭제되는 상태를 말함
    • 종료는 자연스럽게 완료되는 경우도 있지만 부모 프로세스가 자식 프로세스를 강제로 종료시키는 비자발적 종료(abort)도 있음
      • 자식 프로세스가 할당된 자원의 한계치를 넘어서거나 부모 프로세스가 종료될 때 또는 사용자가 process.kill 등의 명령어로 프로세스를 종료시킬 때 발생
    • 실행 상태에서 완료 상태로 전이

컨텍스트 스위칭(Context Switching)

  • 컨텍스트 스위칭은 다음과 같은 상황에서 발생

준비 상태에서 실행 상태로(디스패치)

  • CPU 스케줄러가 준비 상태의 프로세스를 선택하여 실행 상태로 전환할 때 현재 실행 중인 프로세스의 상태를 PCB에 저장하고 선택된 프로세스의 상태를 복원

실행 상태에서 준비 상태로(타임아웃)

  • 프로세스가 할당된 시간 동안 실행을 완료하지 못하고 타임아웃이 발생하면 현재 실행 중인 프로세스의 상태를 PCB에 저장하고 준비 상태로 전환

실행 상태에서 대기 상태로(입출력 요청)

  • 실행 중인 프로세스가 입출력을 요청하면 현재 상태를 PCB에 저장하고 대기 상태로 전환

대기 상태에서 준비 상태로(입출력 완료)

  • 대기 상태의 프로세스가 요청한 입출력이 완료되면 PCB에 저장된 상태를 복원하고 준비 상태로 전환

컨텍스트 스위칭의 비용 측면

  1. CPU 오버헤드
    • 컨텍스트 스위칭은 현재 실행 중인 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 PCB에서 복원하는 작업이 필요함, 이 과정에서 CPU 오버헤드가 발생
  2. 캐시 미스(Cache Misses)
    • 프로세스가 전환되면 CPU 캐시(예: L1,L2,L3 캐시)가 새로운 프로세스의 데이터로 교체되어야 함, 이로 인해 캐시 미스가 증가하고 메모리 접근 시간이 길어져 성능이 저하될 수 있음
  3. 메모리관리
    • 각 프로세스는 자신만의 주소 공간을 가지므로 프로세스 전환 시 메모리 관리 데이터 구조(예: 페이지 테이블)를 변경해함, 이 또한 시간과 자원을 소모
  4. 유휴시간(Idle Time)
    • 컨텍스트 스위칭이 빈번하게 발생하면 CPU가 유휴상태가 되는 시간이 늘어날 수 있음
      • 특히, 프로세스가 I/O 작업을 대기하는 동안 CPU가 다른 작업을 수행하지 못하면 유휴 시간이 발생할 수 있음
profile
HW + SW = 1

0개의 댓글