본문 바로가기

Computer Science/운영체제

문맥교환(Context-Switching)

문맥교환

문맥교환 (Context Switching)

 

PCB (Process Control Block)

  • 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내 자료구조. 커널 주소 공간의 data 영역에 존재합니다.
  • PCB에 저장되는 내용들
    • Process 상태
      • CPU를 할당해도 되는지 여부를 결정하기 위해 필요합니다.
    • PC 값
      • 다음에 수행할 명령어의 위치를 가리킵니다.
    • CPU Register
      • CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지를 나타냅니다.
    • CPU 스케줄링 정보
    • 메모리 관리 정보
    • 자원 사용 정보
    • 입출력 상태 정보
    • 등등

  • Process마다 Context가 필요한 이유

    문맥교환이 일어나기 때문입니다.

    문맥교환 중에 CPU를 선점하고 있던 프로세스는 프로세스 문맥을 자신의 PCB에 저장하게 되고, 새롭게 CPU를 할당 받을 프로세스는 PCB로부터 예전에 저장했던 자신의 문맥을 실제 하드웨어로 복원시키는 과정을 거치게 됩니다.

 

문맥 교환이란?

  • 하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정을 말합니다.
  • 실행 상태에 있던 프로세스(A)가 입출력을 요청해야 하는 경우가 생겼다고 가정했을 때, 입출력을 하기 위해서 프로세스는 I/O를 요청하는 시스템 콜을 발생시키고, 프로세스는 Device Queue에 줄을 서게 되고 준비 상태로 상태가 변경됩니다.
  • 그리고 준비 큐에 있던 다른 프로세스(B)가 CPU를 할당받아 명령을 수행하게 될 것입니다.
  • 이렇게 프로세스 A에게 있던 CPU 제어권이 프로세스 B에게로 넘어가는 과정을 문맥 교환이라고 합니다.
  • 문맥 교환에 소요되는 시간과 메모리는 시스템 입장에서 볼 때 일종의 오버헤드라고 할 수 있습니다. 따라서 타이머 인터럽트 시간을 너무 짧게하면 프로세스간 문맥 교환이 너무 자주 일어나 오버헤드가 커지게 됩니다.
  • 또한, 프로세스가 봉쇄 상태인 경우에도 문맥 교환이 발생하는데, 프로세스가 CPU를 사용하다가 I/O 작업을 하게 되는 경우, CPU를 사용하지 않게 됩니다. 이런 경우 CPU 낭비가 되기 때문에 다른 프로세스에게 CPU를 이양합니다.
  • 문맥 교환이 아닌 경우
    • 프로세스가 실행 상태일 때, 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제에게로 넘어와 원래 실행중이던 프로세스의 업무를 잠시 멈추고 운영 체제 커널의 코드가 실행됩니다. 이 경우에 CPU의 실행 위치 등 프로세스의 문맥 중 일부를 PCB에 저장하게 되지만 이러한 과정을 문맥 교환이라고 하지는 않습니다.
    • 이는 하나의 프로세스가 사용자 모드에서 실행되다가 커널 모드로 실행 모드만 바뀌는 것일 뿐, CPU를 점유하는 프로세스가 다른 사용자 프로세스로 변경괴는 과정이 아니기 때문입니다. 이와 같은 모드 변경에 비해 문맥 교환에는 훨씬 많은 오버헤드가 발생합니다.
    • 타이머 인터럽트가 발생하거나 프로세스가 I/O 요청 시스템을 콜하여 봉쇄 상태에 들어가는 경우에는 문맥 교환이 일어나지만, 그밖의 인터럽트나 시스템 콜 발생 시에는 문맥 교환이 일어나지 않고 모드만 변경됩니다.
    • 즉, 사용자 모드에서 커널 모드로 바뀌어 시스템 콜이나 인터럽트 처리를 하고 다시 동일한 프로세스의 사용자 모드로 되돌아와 이전에 수행하던 작업을 계속 수행합니다.
  • 문맥 교환 절차

    단계절차설명
    1인터럽트 / 시스템 호출운영체제에서 프로세스 스케줄러에 의해 인터럽트 발생
    2커널 모드 전환프로세스가 실행되는 사용자 모드에서 커널 모드로 전환
    3현재 프로세스 상태 PCB 저장기존 실행되는 프로세스 정보를 PCB에 저장
    4다음 실행 프로세스 로드PCB에 있는 다음 실행 프로세스 상태 정보 복구
    5사용자 모드 전환커널 모드에서 사용자 모드로 전환하여 프로세스 실행
    • 문맥 교환 절차 중 dispatch, timeout 등 실행 상태가 전이되는 과정에서 문맥 교환 발생

 

  • 문맥 교환이 필요한 상황

    • 준비 → 실행, 실행 → 준비, 실행 → 대기 전환 시 문맥 교환 발생
    필요 상황설명전이 과정
    dispatchQueue 우선 프로세스로 CPU 할당 받아 실행 상태로 전이준비 → 실행
    (dispatch)
    CPU 할당 시간
    만료
    CPU 사용 가능한 할당 시간 초과로 준비 상태로 전이실행 → 준비
    (Timeout)
    I/O 작업 및 할당I/O 작업이 필요하여 작업 완료 시까지 대기 상태로 전이실행 → 대기
    (Sleep)
    System Call또다른 서비스 호출이 필요한 경우 대기 상태로 전이실행 → 대기
    (Sleep)
    • 문맥 교환으로 인한 정보 교환 작업은 오버헤드이므로 스레드 등을 이용하여 최소화 필요

 

  • 문맥 교환의 오버헤드 해결 방안
    해결 방안설명
    프로그램 다중화
    수준 낮춤
    다중 프로그래밍 수준을 낮추어 문맥 교환 발생 빈도 감소
    스레드 이용Light Weight 프로세스인 스레드를 이용하여 문맥 교환 부하 최소화
    스택 포인터 활용스택 이용 프로그램의 경우 스택 포인터를 이용하여 문맥 교환 부하 최소화
    • 멀티 프로세스 환경에서 문맥 교환은 필수적이므로 정보 교환의 최소화 및 최적화가 필요

 

 

 

References

 

'Computer Science > 운영체제' 카테고리의 다른 글

프로세스 스케줄링  (0) 2021.03.23
동기와 비동기  (0) 2021.03.23
교착상태와 기아상태  (0) 2021.03.23
Process와 Thread  (0) 2021.03.23