Context Switching
이란, 컴퓨터에서 여러 프로세스나 스레드를 동시에 실행할 때, 하나의 작업을 중단하고 다른 작업을 수행하기 위해 CPU의 상태를 변경하는 과정입니다.
Context Switching
은 운영체제의 스케줄러가 결정하며, Context Switching
의 빈도와 시간은 시스템의 성능에 영향을 줍니다.
Context Switching
을 통해 여러 프로그램이 함께 사용하는 메모리 공간을 좀 더 효율적으로 사용할 수 있습니다.
실행파일의 일부분(Context)
을 교체(Switching)
해가며 여러 프로그램들이 실행됩니다.
레지스터와 프로그램 카운터에 있는 데이터는 프로세스 P1 의 PCB , 즉 PCB1 에 저장되고 PCB1의 상태를 변경합니다.
프로세스 P1은 준비 큐, I/O 큐 또는 대기 큐 중 하나일 수 있는 적절한 큐로 이동됩니다.
다음 프로세스는 준비 대기열에서 선택됩니다. P2 라고 가정하겠습니다 .
프로세스 P2 의 상태는 실행 중 상태로 변경되며, P2가 이전에 CPU에 의해 실행되었던 프로세스인 경우 중지된 곳에서 실행을 재개합니다.
프로세스 P1을 실행해야 하는 경우 1~4단계에서 언급한 것과 동일한 작업을 수행해야 합니다.
Cache
에는 현재 실행 중인 프로세스의 data가 들어있습니다.
Context Switching이 발생하면 현재 cache에 있는 data는 필요 없어지고 다음 context를 위한 data가 필요하게 됩니다.
그래서 cache를 비우고 다음 context를 위한 data를 cache에 채우게 됩니다.
이러한 과정에서 cache miss
가 계속 발생하게 되고 메모리(RAM)을 참조해 data를 가져와야 하는 상황이 지속됩니다.
메모리(RAM)을 계속 참조해야 하는 오버헤드를 Cache miss 오버헤드
라고 합니다.
그런데 같은 프로세스의 thread 간에 Context Switching가 발생하면 cache를 비우지 않아도 됩니다.
공유하는 데이터가 있기 때문에 cache를 완전히 비우지 않게되고, cache miss 발생 횟수도 감소하게 됩니다.
(Context Switching이 thread 단위에서도 일어난다는 의미입니다.)
Context Switching
시간은 매우 짧지만 해당 시간 동안 CPU는 유휴 상태로 유지되어 어떤한 작업도 수행하지 않는 순간이 존재하게 됩니다.
Context Switching
을 할 때마다 CPU는 캐시 메모리를 비우고, 레지스터를 저장하고, 새로운 작업의 정보를 불러와야 합니다. 이러한 과정은 오버헤드를 발생시킵니다.
프로세스 제어블록(PCB)
은 운영체제가 프로세스를 관리하기 위해 필요한 정보를 저장하는 자료구조입니다.
PCB는 프로세스가 생성될 때마다 만들어지고, 프로세스가 종료되면 제거됩니다.
PCB는 Context Switching(문맥 교환)을 할 때 필요한 정보를 저장 및 제공합니다.
프로세스 식별자(PID)
프로세스를 구분하는 고유한 번호입니다.
프로세스 상태(Process State)
프로세스가 현재 어떤 상태에 있는지를 나타냅니다.
예를 들어, 생성, 준비, 실행, 대기, 완료 등이 있습니다.
프로그램 계수기(Process Counter)
프로세스가 다음에 실행할 명령어의 주소를 가리킵니다.
CPU 레지스터(registers)
프로세스가 실행 중에 사용하는 레지스터의 값들을 저장합니다.
CPU 스케줄링 정보
프로세스의 우선순위, CPU 점유시간, 최종 실행시간 등을 저장합니다.
메모리 관리 정보
프로세스의 주소 공간, 메모리 크기, 페이지 테이블, 세그먼트 테이블 등을 저장합니다.
입출력 상태 정보
프로세스에 할당된 입출력 장치, 열린 파일, 사용중인 소켓 등을 저장합니다.
프로세스 계정 정보
프로세스의 소유자, 부모 프로세스, 자식 프로세스 등을 저장합니다.
OS는 Linked list 형태의 Process table로 PCB
를 관리하고 있습니다.
PCB
는 보호된 메모리 영역에 위치하며, 일반 사용자가 접근할 수 없습니다.
(일부 운영체제에서는 커널 스택의 처음 부분에 위치)
쓰레드 제어블록(TCB)
이란 thread의 상태, PCB를 가리키는 Pointer, 우선순위, 스택, 레지스터 등 thread의 정보를 저장하는 자료구조입니다.
thread와 관련된 data만 있으면 되기 때문에 PCB보다 적은 데이터를 가집니다.
TCB
는 운영체제가 thread를 관리하고 스케줄링하기 위해 필요한 정보를 제공합니다.
thread가 생성될 때마다 생성되고, thread가 종료되면 해제됩니다.
보통 Linked list로 구현됩니다.