PCB & Context Switching

코난·2024년 1월 21일
0

CS 면접 정리

목록 보기
24/67

PCB

  • 운영체제가 프로세스를 제어하기 위해 정보(CPU 레지스터 값들)를 저장해 놓는 곳으로 프로세스의 상태 정보를 저장하는 구조체이다.
  • 프로세스 생성시 PCB가 만들어지며 주기억장치에 저장되다가 프로세스가 완료되면 PCB도 함께 제거된다.
  • 운영체제에서 프로세스는 PCB로 표현된다
  • PCB는 프로세스 상태 관리와 context switching을 위해서 필요하다
  • PCB는 프로세스의 중요한 정보들을 담고 있으므로 일반 사용자는 접근하지 못하는 보호된 메모리 영역에 존재한다
  • 프로세스가 생성될때마다 고유의 PCB가 생성되며, 프로세스가 완료되면 PCB는 제거된다

CPU 레지스터

레지스터란 컴퓨터의 중앙 처리 장치(CPU) 내부에 있는 매우 빠른 메모리 장치이다. 연산과 프로그램의 실행을 효율적으로 수행하기 위해 사용되며, 이를 위해 컴퓨터 메모리와 상호 작용하는 여러 가지 레지스터가 있다.

사실, 레지스터의 핵심 목적은 데이터를 빠르게 CPU로 가져오는 것이다. 레지스터는 작고, 빠르기에 CPU가 연산을 수행하는 데 필요한 중요한 정보(명령어, 데이터, 주소 등)를 임시 저장하는데에 사용된다.

PCB 구조


PCB에는 각각의 프로세스의 Process Metadata가 담기는데, 이 Metadata는 다음과 같다.

  • 프로세스 식별자 : 프로세스의 고유 ID(PID)
  • 포인터 : 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보
  • 프로세스 상태 : 생성, 준비, 실행, 대기, 완료 등의 상태
  • 프로그램 카운터 : 이 프로세스가 실행할 다음 명령어의 주소를 포함하는 카운터를 저장
  • 레지스터 : CPU 레지스터의 값들
  • CPU 스케줄링 정보 : 우선 순위, 최종 실행 시각, CPU 점유 시간 등
  • 메모리 관리 정보 : 해당 프로세스의 주소 공간 정보(사용 가능한 메모리 공간 정보)
  • 입출력 상태 정보 : 프로세스에 할당된 입출력장치 목록, 사용 파일 목록 등

PCB 관련 실행 흐름

  1. 프로그램 실행
  2. 프로세스 생성(프로그램을 메모리에 적재)
  3. 프로세스 메타 데이터 생성
  4. 메타 데이터를 PCB에 저장(한 PCB에는 한 프로세스의 정보가 담김)

PCB의 관리 방식

한 프로세스에는 한 PCB만 생성된다. 따라서 PCB는 프로세스가 새로 생성될 때마다 하나씩 늘어나게 되는데, 이때 PCB들을 관리하는 자료구조는 Linked List이다! PCB List Head에 PCB들이 생성될때마다 하나씩 이어붙여준다. 주소값으로 연결되는 형태이기 때문에 새로운 PCB가 들어오거나, 기존의 프로세스가 종료되어 PCB가 사라질때 뛰어난 효율을 보이게 된다. (Linked List의 삽입 삭제 용이성때문!!) 이처럼 수행중인 프로세스를 변경할 때 CPU의 레지스터 정보가 변경되는 것을 Context Switching 이라고 한다.

Context Switching


CPU가 현재 실행하고 있는 Task(Process, Thread)의 상태를 저장하고, 다음 진행할 Task 상태 및 진행할 Register 값들에 대한 정보를 읽어 새로운 Task의 Context 정보로 교체하는 과정이다. 원래 실행중이던 프로세스의 상태는 PCB에 보관하고 새로 들어오는 프로세스는 PCB 정보를 바탕으로 레지스터에 값을 적재한다.

보통 인터럽트의 발생한 상황, 현재 프로세스의 선점 허용 기간을 모두 소모한 상황, 입출력을 위해 대기하는 상황에서 Context Switching이 발생한다.

즉, 프로세스의 상태가 변경될 때 사용된다!!

프로세스의 상태

  • 생성(new): 프로세스가 PCB를 가지고 있지만 OS로부터 승인(admit)받기 전
  • 준비(ready): OS로부터 승인받은 후 준비 큐에서 CPU 할당을 기다림
  • 실행(running): 프로세스가 CPU를 할당받아 실행함
  • 대기(waiting): 프로세스가 입출력이나 이벤트 발생을 기다려야 해서 CPU 사용을 멈추고 기다림
  • 종료(terminated): 프로세스 실행을 종료함

Context Switching Cost(Overhead)

  1. Cache 초기화
  2. Memory Mapping 초기화
  3. 메모리 접근을 위한 Kernel 지속적 실행

-> 따라서 잦은 Context Switching은 성능 저하를 가져옴

프로세스의 시간 할당량이 적어지면 문맥 교환 수, 인터럽트 횟수, 오버헤드가 증가하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖는다.
반대로 프로세스의 시간 할당량이 커지면 문맥 교환 수, 인터럽트 횟수, 오버헤드가 감소하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖지 못한다.

프로세스를 수행하다가 I/O event가 발생하여 BLOCK 상태로 전환시켰을 때, CPU가 그냥 놀게 놔두는 것보다 다른 프로세스를 수행시키는 것이 효율적이므로, CPU에 계속 프로세스를 수행시키도록 하기 위해서 다른 프로세스를 실행시키고 Context Switching을 할 때 Overhead가 발생한다.

CPU가 놀지 않도록 만들면서, 사용자에게 빠르게 일처리를 제공해 주기 위한 것!

Context Switching 내부 동작 과정

  1. 현재 실행 중인 프로세스의 상태 정보 저장
    현재 실행 중인 프로세스의 상태와 실행 정보를 레지스터 상태, 프로그램 카운터(PC), 스택 포인터(SP) 등에 넣어 PCB에 저장한다
  2. 다음으로 실행할 프로세스의 상태 정보 복원
    교체할 프로세스의 PCB에서 저장된 상태 정보를 레지스터, PC, SP 등에 업데이트 한다
  3. 실행 중인 프로세스 교체
    현재 실행 중인 프로세스가 실행 중지되고, 다음으로 실행할 프로세스를 CPU가 처리한다

참고

https://velog.io/@nnnyeong/OS-Context-Switching-PCB-Process-Control-Block
https://junsangkwon.tistory.com/45
https://taeyoungcoding.tistory.com/348
https://yoongrammer.tistory.com/52
https://velog.io/@haero_kim/PCB-%EC%99%80-Context-Switching-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
https://thebook.io/080367/0021/
https://m.blog.naver.com/adamdoha/222019884898
https://jerryjerryjerry.tistory.com/181

profile
몸은 커졌어도, 머리는 그대로... 하지만 불가능을 모르는 명탐정 현아! 진실은 언제나 하나!

0개의 댓글