CS/Operating System

[Operating System] Context Switching

hanseongbugi 2024. 4. 6. 17:13

Context Switching (컨텍스트 스위칭)?

  • CPU가 현재 작업중인 프로세스에서 다른 프로세스로 넘어갈 때, 이전의 프로세스 정보를 PCB에 저장하고 새롭게 실행할 프로세스의 정보를 PCB에서 읽어와 레지스터에 적재하는 과정을 말한다.
  • 보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생
    • 즉, 프로세스가 Ready → Running, Running → Ready, Running → Waiting처럼 상태 변경 시 발생!
  • Process는 하나이상의 Thread로 동작하기 때문에 Context Switching의 최소 단위는 TCB이다.

Context?

  • 프로그래밍에서 Context는 (동작, 작업들의 집합)을 (정의, 관리, 실행)하도록 하는 (최소한의 상태, 재료, 속성)을 포함하는 (객체, 구조체, 정보)이다.
  • Process의 경우 현재 프로세스가 중단 되었을 때, 중단된 시점 부터 다시 프로세스를 실행하기 위한 정보를 Context라고 부른다.
  • 이러한 Process의 Context 정보는 PCB(Proccess Control Block)이라는 구조체에 저장된다.

Scheduler

  • CPU Scheduler라고 불리는 스케줄러는 Ready Queue에 존재하는 프로세스들을 어떤 순서로 실행시킬지 결정한다.
  • 스케줄링은 scheduler라는 별도의 프로세스에 의해 수행되며, 모든 자원이 골고루 사용될 수 있도록 디자인되어 있다.

Context Switching 과정

  1. 요청 발생 : 인터럽트나 트렙에 의해서 컨텍스트를 바꿔야 한다는 요청이 들어옴
    • 예) I/O 입출력, 예외, 시스템 콜 등
  2. PCB 에 프로세스 정보 저장 : 기존에 실행중이던 프로세스 P0 와 관련된 정보들을 PCB0 에 저장함
    • running → waiting
  3. 운영체제는 새롭게 실행할 프로세스 P1 에 대한 정보를 해당 PCB 에서 가져와 CPU 레지스터에 적재
  4. 요청 발생 : 인터럽트나 트렙에 의해서 컨텍스트를 바꿔야 한다는 요청이 들어옴 - P1의 상태를 PCB1에 저장
  5. PCB0에 저장된 P0의 상태를 불러와 복구한다.
  6. P0 실행

Process Context Switching & Thread Context Switching

  • 프로세스는 하나 이상의 스레드를 포함한다.
  • 이 스레드들은 고유한 Stack영역의 메모리와 고유한 registers를 할당 받으며 Heap영역의 메모리에서 선언된 데이터는 서로 공유한다.
  • 동일한 프로세스 속에서 thread context switching이 발생할 경우 processor는 stack영역의 주소와 registers 주소를 포함한 thread의 context 정보만을 변경하면 된다.
  • 하지만 process context switching이 발생할 경우 processor는 thread의 context뿐만 아니라 process의 context까지 모두 변경해야 한다.

Context Switching Overhead

  • overhead는 과부하라는 뜻으로 보통 안좋은 말로 많이 쓰인다.
  • 프로세스 작업 중에는 Overhead를 감수해야 하는 상황이 있다.
    • 프로세스를 수행하다가 입출력 이벤트가 발생해서 대기 상태로 전환시킴
    • 이때, CPU를 그냥 놀게 놔두는 것보다 다른 프로세스를 수행시키는 것이 효율적
  • CPU에 계속 프로세스를 수행시키도록 하기 위해서 다른 프로세스를 실행시키고 Context Switching 하는 것
  • CPU가 놀지 않도록 만들고, 사용자에게 빠르게 일처리를 제공해주기 위한 것이다.

 

 

출처

https://github.com/gyoogle/tech-interview-for-developer

 

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

https://velog.io/@curiosity806/Context-Switching%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-process%EC%99%80-thread

 

Context Switching 이란?

Processor가 수행하고 있는 Task(Process, Thread)의 context를 저장하고 다음 진행할 Task의 context를 읽어 수행하는 과정을 Context Switching이라고 부른다. 자세히 알아보자.

velog.io

 

https://velog.io/@sweet_sumin/PCBTCB

 

PCB(Process Control Block) & TCB(Thread Control Block)

기초를 보완하자

velog.io