Skip to content

Latest commit

 

History

History
98 lines (79 loc) · 9.82 KB

File metadata and controls

98 lines (79 loc) · 9.82 KB

Context Swiching

문맥 교환 (Context Swiching)

  • 컨텍스트 스위칭이란 CPU가 여러 프로세스나 스레드를 번갈아 가며 실행하기 위해 프로세스나 스레드의 상태(Context)를 저장하고 복구하는 과정
    • 컨텍스트(Context): 프로세스 또는 스레드가 CPU에서 실행되던 상태(레지스터, 프로그램 카운터, 스택 포인터 등)를 의미
  • 컨텍스트 스위칭은 멀티태스킹 운영체제에서 CPU가 여러 프로세스를 동시에 실행하는 것처럼 보이게 하기 위해 사용됨
  • 기존 실행 중이던 프로세스의 작업 상태는 메모리의 PCB에 저장해두고 CPU 에서 나옴. 다음번에 실행 중이던 프로세스의 상태 정보를 메모리 내의 PCB 에서 가져와서 CPU에 복구함
    • 즉, 실행 중이던 작업 내용(Context)을 메모리내의 PCB에서 저장하고 복구하여 CPU에서 번갈아 사용하는 것

요리사 모델을 통한 문맥교환 이해

  • 요리사가 여러 주문서를 처리할 때 13번의 주문서의 새우 튀김을 만든 다음 14번의 등심 요리를 하는 과정으로 요리 작업의 전환 과정은 2개의 주문서를 교환(switching)함으로써 이루어짐
  • 요리 작업을 전환할 때 주문서를 교환하는 것만이 아닌 해당 재료와 도구를 치우고 새로운 재료와 도구를 가져와야 함. 즉 전환 과정은 주문서를 바꾸는 것과 동시에 작업 환경을 바꾸는 것임
  • 문맥 교환은 이처럼 CPU를 처리하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말하는데 이때 두 프로세스 제어 블록의 내용이 변경됨
  • 실행 상태에서 나가는 프로세스 제어 블록에는 지금까지의 작업 내용을 저장하고, 반대로 실행 상태에서 들어오는 프로세스 제어 블록의 내용으로 CPU가 다시 세팅됨
  • 문맥 교환이 되는 경우는 매우 다양한데 이는 다음과 같음
    • 일반적으로는 한 프로세스가 자신에게 주어진 시간을 다 사용하면 발생
    • 인터럽트가 걸렸을 경우 발생하며 예를 들어 어떤 프로세스가 자신에게 주어진 메모리 공간을 넘어가려 한다면 이는 경계 레지스터의 범위를 벗어나는 것인데 이때 인터럽트가 발생하여 현재 실행 중인 프로세스의 제어 블록을 저장한 후 인터럽트 관리 프로세스를 실행 상태로 만듬
    • 인터럽트 관리 프로세스는 메모리 범위를 넘어선 프로세스를 강제로 종료하고 인터럽트 처리를 마치는데 이와 같이 인터럽트 처리를 할 때도 문맥 교환이 일어남

PCB는 어디에 저장되는지

  • 각 프로세스는 자신의 상태(프로그램 카운터, 레지스터 값, 스택 포인터 등)를 저장하기 위한 고유한 PCB를 가지고 있음
  • PCB는 프로세스가 생성될 때 운영체제에 의해 생성되며, 프로세스가 종료될 때까지 해당 프로세스의 상태 정보를 유지함
  • PCB는 운영체제가 관리하며, 운영체제는 PCB를 통해 실행 중인 프로세스의 상태를 추적
  • 운영체제는 프로세스 스케줄링을 할 때, 각 프로세스의 PCB를 참조하여 어떤 프로세스를 실행할지 결정
  • 프로세스 상태(예: 실행 중, 준비 상태, 대기 상태 등)는 PCB에 기록되며, 운영체제가 프로세스의 상태를 관리할 때 사용됨
  • **문맥 교환(Context Switching)**이 발생하면, 운영체제는 현재 실행 중인 프로세스의 상태를 해당 프로세스의 PCB에 저장하고, 다음에 실행할 프로세스의 PCB에서 정보를 가져와 CPU에 복구
  • 메모리에서 PCB를 저장하는 이유는 프로세스를 실행시키기 위해 PCB를 가져오는데 이걸 메모리에 저장해두고 있다가 프로세스가 실행 종료될 때까지 메모리에 관리하고 있는 것
    • 즉, 프로세스가 중단되거나 문맥 교환이 발생하면 해당 작업 상태를 PCB에 저장하고 이후 관리를 위해 메모리에 남음
- PCB는 각 프로세스마다 존재하며, 운영체제가 메모리에서 PCB를 관리
- 운영체제는 모든 프로세스의 PCB 목록을 관리하며, 필요할 때마다 PCB에 접근해 프로세스 상태를 기록하고, 문맥 교환 시 해당 정보를 사용해 프로세스 간 전환을 수행함0
- 문맥 교환이나 스케줄링 시, 운영체제는 해당 프로세스의 PCB를 읽고 수정하면서 그 프로세스의 상태를 업데이트하고, CPU에서 실행을 관리함

문맥 교환의 절차

  1. 실행 상태에 있는 P1이 자신에게 주어진 시간을 다 사용하여 타임아웃이 발생
  2. P1의 프로세스 제어 블록(PCB)에 현재까지의 작업 상태가 저장되고 P1은 준비 상태로 쫓겨나 CPU를 사용하지 않고 대기
    • PCB의 해당 상태 정보는 메모리에 저장됨
  3. 새로 실행될 준비 상태에 있던 프로세스 P2가 실행 상태로 가면(dispatch) CPU의 레지스터가 P2의 프로세스 제어 블록 값으로 채워짐
    • 새로 실행될 프로세스의 이전 상태를 PCB를 메모리에서 가져와 복구
  4. 복구된 상태를 바탕으로 새 프로세스가 CPU에서 실행됨

Ssafy Wizards CS Study


1. 컨텍스트 스위칭이 발생했을 때 프로세스와 스레드의 차이

프로세스 컨텍스트 스위칭

  • 프로세스는 독립적인 메모리 공간을 가지고 있으므로, 프로세스 간의 컨텍스트 스위칭에서는 전체 메모리 상태(코드, 데이터, 스택, 힙)와 CPU 상태(레지스터 값)를 모두 저장하고 복구함
    • 프로세스 스위칭은 상대적으로 더 많은 오버헤드가 발생하며, 주소 공간 전환이 필요
    • 운영체제가 프로세스 간 주소 공간을 변경해야 하기 때문에 더 많은 오버헤드가 발생하는 것

스레드 컨텍스트 스위칭

  • 스레드는 같은 프로세스 내에서 메모리 공간을 공유하므로 스레드 간의 컨텍스트 스위칭은 프로세스의 주소 공간을 바꾸지 않고, 해당 스레드의 스택, 레지스터, 프로그램 카운터 등만 저장하고 복구하면 됨
  • 스레드의 컨텍스트 스위칭은 비교적 더 가볍고 빠르며, 스레드 간 공유 자원에 대한 전환이 이루어지기 때문에 프로세스 간 스위칭보다 오버헤드가 적음

2. 컨텍스트 스위칭이 발생할 때, 기존의 프로세스 정보가 커널스택에 저장되는 형식

  • 커널 스택(Kernel Stack)은 각 프로세스마다 따로 할당된 커널 모드에서 사용하는 스택으로 컨텍스트 스위칭이 발생할 때 프로세스의 상태 정보가 커널 스택에 저장됨
  • 컨텍스트 스위칭이 일어나면 실행 중이던 프로세스의 CPU 상태를 PCB에 저장 해야하는데 이때 커널 스택이 이 정보를 일시적으로 저장하는 역할을 함

컨텍스트 스위칭시 실행 과정

  1. 현재 실행 중인 프로세스가 컨텍스트 스위칭으로 인해 실행 중단
  2. 문맥 교환이 발생하여 인터럽트나 시스템 호출을 통해 프로세스가 커널 모드로 전환되고 각 프로세스에 할당된 커널 스택이 활성화 됨
  3. CPU가 현재 실행 중이던 프로세스의 레지스터 값을 커널 스택에 저장함
  4. 해당 커널 스택에 임시 저장된 프로세스 상태 정보는 이후 프로세스의 PCB에 저장됨. 이후 현재까지의 작업 상태를 복구하는데 사용됨
  5. 이제 CPU가 다른 프로세스를 실행할 준비를 하여 커널 스택에 저장된 상태 정보는 PCB로 이동되고 CPU는 새로운 프로세스의 정보를 커널 스택을 통해 복구함

커널 스택을 사용하는 이유

  • 임시로 커널 스택에 저장하는 이유는 커널 스택은 레지스터나 CPU 상태 정보를 즉시 저장할 수 있는 매우 빠른 메모리로 CPU는 실행 중이던 프로세스가 중단될 때 레지스터 값을 빠르게 저장하고 스케줄러가 이를 처리할 수 있게 함
    • PCB는 메모리 구조가 더 크고 복잡하기 때문에, 직접 PCB에 모든 정보를 저장하려면 추가적인 오버헤드가 발생할 수 있어 커널 스택을 통해 빠르게 저장하고 이후 PCB에 저장
  • 프로세스마다 고유한 커널 스택을 가지므로, 여러 프로세스의 상태 정보를 동시에 안전하게 관리할 수 있음
    • 커널 스택은 커널 모드에서만 접근 가능하므로 프로세스가 중단되거나 문맥 교환이 발생할 때 사용자 스택을 그대로 사용할 경우 보안 문제나 데이터 손상 위험을 방지

3. 컨텍스트 스위칭이 발생하는 시점

  • 일반적으로 다중 프로세싱 환경에서 프로세스 또는 스레드 전환이 필요할 때 발생
  • 타임 슬라이스 종료 (타임아웃)
    • CPU 스케줄러는 각 프로세스에 정해진 시간 동안만 CPU를 할당되고 이 시간이 종료되면 컨텍스트 스위칭이 발생하여 다음 프로세스로 전환됨
  • 입출력(I/O) 대기
    • 프로세스가 I/O 작업을 요청하면, I/O가 완료될 때까지 대기 상태로 전환되며 그동안 다른 프로세스가 CPU를 사용할 수 있도록 컨텍스트 스위칭이 발생
  • 프로세스의 종료 또는 중단
    • 현재 실행 중이던 프로세스가 종료되거나 중단되면, 다른 프로세스를 실행하기 위해 컨텍스트 스위칭이 발생
  • 우선순위 변경
    • 스케줄러가 우선순위가 더 높은 프로세스를 실행해야 할 경우, 현재 프로세스를 중단시키고 우선순위가 높은 프로세스로 전환됨
  • 인터럽트
    • 하드웨어 또는 소프트웨어 인터럽트가 발생했을 때, 인터럽트를 처리하기 위해 컨텍스트 스위칭이 일어날 수 있음