[운영체제] 컨택스트 스위칭

hyyyynjn·2021년 9월 1일
0

면접대비

목록 보기
6/31
post-thumbnail

Q. 컨택스트 스위칭에 대해 설명하세요

컨택스트 스위칭은 하나의 task가 끝날 때까지 기다리지 않고 동시에 여러 task를 번갈아가며 실행하는 방법이다.
인터럽트가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장한다. 이 과정에서 cpu는 아무런 일을 하지 않기 때문에 잦은 컨택스트 스위칭은 성능저하를 야기한다.
스레드는 캐시메모리나 PCB에 저장하거나 비워야하는 내용이 적어서 컨택스트 스위칭이 빠르지만 프로세스는 스레드보다 처리해야할 내용이 많아 느리다.


✅Context

OS에서 컨택스트는 CPU가 프로세스를 실행하기 위해 필요한 프로세스에 대한 정보이다.

✅PCB (Process Control Block)


PCB는 관리 대상 프로세스에 대한 정보를 포함하는 운영체제 커널 내부에 존재하는 자료구조이다.

  • 프로세스의 생성될 때 PCB도 함께 생성되며 주기억장치(메모리)에서 유지되고 프로세스 종료시 함께 사라진다.
  • 프로세스의 Context는 커널 내부안에 있는 PCB(Process Control Block)에 저장되어있다.
  • CPU는 프로세스를 실행할 때 PCB에 있는 해당 프로세스의 Context를 읽어서 레지스터 값을 변경한다.
    • CPU는 기억을 못하고 계산만하기 때문에 요청한 명령을 처리하기 위해서 프로세스의 Context를 일시적으로 레지스터에 저장한다.

✅Context Switching


멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)으로 교체하는 작업이다.

CPU는 여러 개의 스레드를 시간 할당량만큼 시분할하여 번갈아가며 실행한다. (CPU는 동시에 한 개의 스레드 또는 프로세스만 실행할 수 있다). CPU가 프로세스를 실행하는 도중에 Interrupt가 발생하면, 운영체제는 CPU가 실행했던 스레드의 현재 Context를 PBC에 저장하고 곧 실행할 스레드의 Context를 메모리에 로드하여 CPU가 실행할 수 있도록 한다.

  • CPU의 개수와 스레드의 개수가 같거나 적으면 Context Switching이 발생하지 않는다.
  • 프로세스 간의 Context SwitchingOS 스케쥴러가 담당한다.
  • 📌이렇게 비유할 수 있다.
CPU레지스터운영체제프로세스/스레드PCB시간 할당량 (Time Slice)
의사의사의 머리(뇌)간호사환자환자 진료표진료 시간

의사 (CPU)는 각 환자 (프로세스/스레드)를 특정한 진료 시간 (Time-Slice) 동안 환자 진료표 (PCB)머리에 담아(레지스터) 진료를 한다. 각 환자의 진료표 (PCB)간호사 (OS)가 따로 관리한다. 환자A의 진료가 끝나면 간호사는 진료표A에 기록하고 다른 환자B의 진료표B를 꺼낸다 (Context Switching).

  • 📌Interrupt

CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요한 경우 CPU에게 알려 처리할 수 있도록 하는 것이다.

Interrupt가 발생하면 프로세스가 하던 일을 멈추고 이미 정해진 코드에서 요청에 대한 처리를 수행한다.

  • 컨택스트 스위칭을 발생시키는 Interrupt 종류
    • I/O request : 입출력(I/O) 요청이 왔을 경우
    • Time Slice Expired : CPU 사용시간이 만료되었을 경우
    • Fork a Child : 자식 프로세스를 만들 경우
    • Wait for an Interrupt : Interrupt 처리를 기다릴 경우
  • 📌잦은 컨택스트 스위칭은 어떻게 오버헤드를 발생시킬까❓
시간할당량 (time slice)Context Switching 수Interrupt 수오버헤드
작다증가증가증가
크다감소감소감소

프로세스에 배정된 시간할당량이 작으면 작을 수록 프로세스를 거의 동시에 수행하는 것처럼 보이게 된다. 하지만 시간할당량이 채워져 다음 프로세스를 수행하기 위한 Context Switching이 자주 발생한다. 다음 프로세스를 수행하려면 현재 수행중인 프로세스를 중단하기 위해 Interrupt도 자주 발생한다.
Context Switching 동안 CPU는 아무런 일을 하지 못한다. 그로 인해 오히려 오버헤드가 증가하여 효율(성능)이 떨어진다.
👉 적정량의 시간할당량이 필요하다.

  • 📌스레드와 프로세스의 컨택스트 스위칭
  • 👏프로세스 컨텍스트 스위칭
    • 각 프로세스는 공유하는 데이터가 없기 때문에 캐쉬가 지금껏 쌓은 데이터를 없애고 새로운 캐쉬 정보를 쌓아야한다는 부담요소가 있다.
      • 캐쉬 : CPU와 메인메모리 사이에 위치하며 CPU에서 한번 이상 읽어들인 메모리의 데이터를 저장하고 있다가, CPU가 다시 그 메모리에 저장된 데이터를 요구할 때, 메인메모리를 통하지 않고 데이터를 전달해준다.
  • 👏스레드 컨텍스트 스위칭
    • 서로 공유하는 영역(Code, Data, Heap)에 대한 캐쉬 정보를 사용할 수 있기 떄문에 프로세스 컨택스트 스위칭보다 부담이 적다.

✅OS 스케쥴러

컨택스트 스위칭을 하는 주체이다

  • Interrupt가 발생했을 때, 다음 차례로 수행할 프로세스를 결정한다.
  • 스케쥴러는 프로세스를 시분할 (Time-Slicing)을 통해 동시에 수행하는 것처럼 보이게 한다. (사실은 하나씩 처리한다)

0개의 댓글