[스터디] Context Switching 과정이란
컴퓨터에서 여러 개의 프로세스(Process)가 동시에 실행될 때, CPU는 매우 빠른 속도로 프로세스들을 전환하면서 각각의 프로세스를 동시에 실행하는 것처럼 보이게 한다. 이러한 전환 과정을 Context Switching이라고 한다.
Context Switching은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하며, CPU는 실행 중인 프로세스의 상태(Context)를 저장하고, 다음에 실행할 프로세스의 상태를 불러오는 작업을 수행한다. 이때 저장되는 상태는 해당 프로세스가 실행되기 전의 레지스터 값, PC(Program Counter) 등이다.
Context Switching은 다음과 같은 상황에서 발생한다.
1. 인터럽트(Interrupt)
- 하드웨어 장치나 소프트웨어에서 발생한 예외 상황으로, 실행 중인 프로세스의 수행을 중단하고 다른 프로세스를 수행해야 하는 경우
2. 시스템 콜(System Call)
- 사용자 프로세스가 운영체제에게 특정 서비스를 요청하면, 운영체제는 해당 서비스를 처리하기 위해 사용자 프로세스의 컨텍스트를 저장하고, 서비스 처리 후에 다시 해당 프로세스를 실행하는 과정에서 발생
3. 멀티 태스킹(Multi-tasking)
- 여러 개의 프로세스를 동시에 실행하는 경우, 각각의 프로세스를 실행하면서 Context Switching이 발생
Context Switching은 자원 소모가 큰 작업이므로, CPU의 성능을 저하시키는 요소 중 하나이다. 따라서, Context Switching의 빈도를 줄이기 위해 다양한 방법이 사용된다.
예를 들어, 우선순위 기반 스케줄링, Time Slice 기반 스케줄링 등의 방법이 있다.
+ 프로그램 카운터?
프로그램 카운터(Program Counter)는 컴퓨터의 CPU(Central Processing Unit)에서 다음에 실행할 명령어의 주소를 가리키는 레지스터(Register)입니다.
CPU는 실행할 명령어의 주소를 참조하여 해당 명령어를 메모리에서 가져와 실행합니다. 이때 CPU는 현재 실행 중인 명령어의 주소를 프로그램 카운터에 저장합니다. 다음에 실행할 명령어의 주소는 현재 명령어의 크기를 더한 값이 됩니다.
예를 들어, 현재 프로그램 카운터의 값이 0x1000이고, 현재 실행 중인 명령어가 4바이트 크기라면 다음에 실행할 명령어의 주소는 0x1004가 됩니다.
프로그램 카운터는 CPU가 명령어를 순차적으로 실행하는 것을 가능하게 하며, 제어 흐름(Control Flow)을 제어하는 데 중요한 역할을 합니다. 함수 호출, 분기문, 반복문 등의 코드를 실행할 때, 프로그램 카운터는 해당 코드 블록의 첫 번째 명령어 주소로 업데이트됩니다.
프로그램 카운터는 대부분의 CPU에서 기본적으로 제공되는 레지스터 중 하나이며, 어셈블리어나 C언어 등으로 작성된 프로그램에서도 직접 참조할 수 있습니다.