Context Switching

개념
Running 상태의 Task가 사용하던 Context를 메모리 특정 영역에 저장한 후 새로이 수행 될 Task의 Context를 TCB또는 Stack에서 CPU의 레지스터 영역으로 복사하여 새로운 Task가 수행되도록 하는 일련의 작업

I. 병행처리를 위한 Context Switching의 이해
    가. Context의 정의

  • Task가 사용하는 CPU 레지스터 들의 값

 

    나. Context Switch의 정의

  • Running 상태의 Task가 사용하던 Context를 메모리 특정 영역에 저장한 후 새로이 수행 될 Task의 Context를 TCB또는 Stack에서 CPU의 레지스터 영역으로 복사하여 새로운 Task가 수행되도록 하는 일련의 작업

 

    다. Context Switching 관련 개념

용어

설명

Dispatching

- 준비상태의 프로세스들 중에서 우선순위가 가장 높은 프로세스에게 CPU를 할당

Time Quantum

- 특정 프로세스에게 할당되는 시간의 단위

- 특정 프로세스의 CPU 독점을 방지

Preemption

- Time Quantum이 초과하면 인터럽트를 통해 CPU 사용권을 빼앗는 스케쥴링 기법

 

 

II. Context Switch의 진행과정
    가. Context Switch의 발생시점
    

구분

내용

비자발적 문맥 교환

- 타임 슬라이스(Time Slice) 소진 시

- 인터럽트(Interrupt) 발생 시

자발적 문맥 교환

- 프로세스 자신이 잠들 때(Sleep)

- 프로세스가 Exit 할 때

- 시스템 호출로부터 사용자 모드로 돌아왔으나 실행될 가장 적당한 프로세스가 아닐 때(wait)

- 커널이 인터럽트 처리를 마치고 프로세스가 사용자 모드로 돌아왔으나 실행될 가장 적당한 프로세스가 아닐 때 (wait)


    다. Context Switch의 진행과정

    ① Interrupt나 시스템 호출에 의해 문맥 교환 요구

    ② 사용자 Mode -> 운영체제 모드

    ③ 기존 프로세스의 현재 H/W 상태정보를 PCB에 저장 (PCB: Process Control Block)

    ④ 다음에 실행할 프로세스의 상태정보를 PCB에서 복구한 후 다음 프로세스를 실행함

    ⑤ 운영체제 모드 -> 사용자 Mode로 전환

 

    다. PCB의 저장정보

  • 프로세스 상태 : 신규, 준비, 수행, 대기, 정지
  • 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
  • 레지스터 : 누산기, 스택, 색인 레지스터
  • 프로세스 번호

 

III. Context Switch 과정의 오버헤드 및 해결방안
    가. 오버헤드 발생시점

단계

실행루틴

오버헤드작업

1

현 프로세스

 

2

Interrupt 처리 루틴

현재 상태를 PCB에 저장

3

프로세스 스케쥴러

다음 실행 프로세스를 준비 Queue 에서 선택

4

Dispatch

다음 Process의 PCB값 복구

5

다음 프로세스

 

 

 

    나. 오버헤드 해결 방안

  • Context Switch 자주 발생하지 않도록 다중프로그래밍의 정도를 낮춤
  • 스택중심의 장비에서는 Stack 포인터 레지스터를 변경하여 프로세스간 문맥교환 수행
  • Light Weight Process인 스레드를 이용하여 Context Switch 부하를 최소화시킴

 

IV. 스레드 중심의 Context Switch
    가. 스레드의 개념

  • CPU이용의 기본단위로서 프로세스에서 실행되는 하나의 일관된 소스코드

 

    나. 스레드의 Context Switch

  • 스레드는 실행에 필요한 최소한의 정보만을 가지고 자신이 속해 있는 프로세스의 기억장치나 파일과 같은 실행환경을 공유하여 프로세스의 생성과 문맥교환 등의 오버헤드를 줄임

 

    다. 스레드를 통한 Context Switch의 장점

  • 병행성 증진 : 단일 프로세스에서 다수의 스레드 생성 및 수행
  • 오버헤드 감소 : 실행 환경의 공유를 통해 오버헤드 줄임

[참고자료]
(1)  개념도
  


      (2) 수행절차

  • CPU 내에 존재하는 레지스터들은 현재 실행 중인 프로세스 관련 데이터들로 채워짐(T0)  (실행 중인 프로세스가 변경되면, CPU 내에 존재하는 레지스터들의 값이 변경되어야 함)
  • 프로세스 T1이 실행되기 전에, 현재 T0 레지스터들이 지니고 있는 데이터들을 저장.
  • 프로세스 T1은 Ready 상태로 바뀌고, 프로세스 T1와 관련된 메모리에 백업된 레지스터 정보를 Restore하여 수행. 프로세스 T1은 마지막 실행 이후를 이어서 실행.
  • 프로세스 T0 관련 레지스터 정보는 메모리에 저장되고, 프로세스 T1 관련 레지스터 정보는 CPU의 레지스터에 복원

댓글