문맥 교환(Context Switching)

Dev.Dana·2024년 10월 25일

Operating System

목록 보기
3/11
post-thumbnail

문맥 교환(Context Switching)이란?

컨텍스트 스위칭은 운영체제가 멀티태스킹 환경에서 여러 프로세스나 스레드를 효율적으로 실행하기 위해 사용하는 중요한 매커니즘이다.

CPU가 실행중인 프로세스(혹은 스레드)의 상태를 저장하고, *다른 프로세스의 상태를 불러와 실행하는 과정으로 멀티태스킹 환경에서 CPU 자원을 여러 프로세스가 나눠 쓰게 해주기 때문에 필수적인 작업이다.

문맥 교환 과정

문맥 교환(Context Switching) 과정

  1. 현재 프로세스의 상태 저장

    • 현재 실행 중인 프로세스의 레지스터 값, 프로그램 카운터 등의 상태를 PCB에 저장함.
    • PCB는 프로세스가 중단되었을 때 상태 정보를 모두 담고 있어, 나중에 해당 프로세스를 복귀할 때 이 정보를 활용해 원래 상태로 돌아갈 수 있음.
  2. 새로운 프로세스의 상태 불러오기

    • CPU는 다음에 실행할 프로세스의 PCB에서 정보를 불러오고, 레지스터와 프로그램 카운터 값을 복구해 프로세스가 마지막 상태에서 이어서 실행됨.
  3. CPU 자원 할당

    • 불러온 프로세스는 CPU 자원을 할당받아 실행되도록 설정됨.

+) Idle Time

  • 문맥 교환 시 CPU는 잠시 동안 유휴 상태(Idle Time)에 머물고 작업 전환을 위한 오버헤드가 발생함.
  • Idle Time은 실제 작업을 하지 않는 시간이기 때문에 시스템 성능 최적화를 위해 줄이는 것이 중요함!!

문맥 교환의 영향

  • 문맥 교환은 멀티태스킹을 가능하게 하지만, 비용이 수반되는 작업이다. 문맥 교환을 할 때마다 CPU는 현재 상태를 저장하고 새로운 프로세스를 불러오는 데 시간을 소비하게 되는데 이 시간을 문맥 교환 오버헤드(Context Switching Overhead)라고 부른다. 문맥 교환이 너무 자주 발생하면 CPU 자원을 낭비하게 되어 시스템 성능에 악영향을 줄 수 있다.
  • 따라서, 운영체제는 문맥 교환의 빈도와 효율성을 고려해서 스케줄링 알고리즘을 적용한다. 예를 들어, 선점형 스케줄링에서 문맥 교환이 자주 일어나지만 비선점형 스케줄링에서는 문맥 교환이 비교적 덜 발생한다.

💡 선점형 스케줄링 vs 비선점형 스케줄링

선점형 스케줄링운영체제가 CPU를 현재 실행 중인 프로세스에서 강제로 빼앗아 다른 프로세스에게 할당할 수 있는 방식.
이 방식에서는 우선순위가 더 높은 프로세스가 실행 대기 중이라면, 현재 실행 중인 프로세스를 중단하고 우선순위가 높은 프로세스를 실행하게 된다. 다시말해 CPU는 더 중요한 작업이 있을 때 언제든지 프로세스를 교체할 수 있다.
ex. 라운드 로빈 : 일정한 시간 단위마다 프로세스를 교체
SRTF(Shortest Remaining Time First) : 남은 실행시간이 가장 짧은 프로세스를 먼저 처리

비선점형 스케줄링운영체제가 한 번 CPU를 할당하면 해당 프로세스가 완료되거나 자발적으로 CPU를 양보할 때까지 CPU를 계속 사용할 수 있는 방식이다. 프로세스가 자원을 스스로 반납하거나 종료될 때까지 다른 프로세스가 CPU를 빼앗을 수 없다. 선점형과 달리 현재 실행 중인 프로세스는 중간에 방해받지 않고 작업을 끝낼 수 있다.
ex. FCFS(First-Come, First-Serve) : 먼저 도착한 프로세스를 먼저 처리
SJF(Shortest Job First) : 실행 시간이 짧은 작업을 먼저 처리함

캐시 미스 (Cache Miss)

  • 캐시 미스는 문맥 교환 과정에서 CPU의 캐시 메모리가 초기화되면서 발생하는 현상이다. 캐시 메모리에는 이전에 실행된 프로세스의 데이터가 남아 있지만, 새로운 프로세스로 전환되면 캐시를 비우고 새 데이터를 적재해야 한다. 이 과정에서 캐시 미스가 발생하면 CPU가 메인 메모리에서 데이터를 가져와야 하므로 추가적인 시간이 소모된다.
  • 캐시 미스는 문맥 교환 오버헤드의 원인이 될 수 있으며, 문맥 교환이 자주 발생할수록 캐시 미스 빈도도 높아져 시스템 성능에 부정적인 영향을 미친다.

💡 캐시 메모리 : 메인 메모리에 비해 용량이 작고 속도가 빠르며, 프로세스 간 공유되는 고속 메모리 공간. 주로 자주 사용하는 데이터를 임시로 저장해 CPU의 데이터 접근 속도를 향상시키는 역할을 한다.

문맥 교환이 필요한 이유

  1. CPU 자원 공유 : 단일 CPU로 여러 프로세스를 관리하기 위해 필요
  2. 우선순위 관리 : 높은 우선순위의 프로세스가 도착하면 즉시 실행하도록 전환
  3. 입출력 대기 시 전환 : I/O 요청을 기다릴 때 다른 작업으로 전환하여 CPU 자원을 효율적으로 사용
  4. 인터럽트 발생 시 처리 : 프로세스가 인터럽트로 중단될 때 상태를 저장해 이후 실행을 이어갈 수 있다.

참고사이트
Context Switching in OS (Operating System)

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글