CPU에 프로세스가 여러개일때, CPU 스케줄링을 통해 관리하는 행위
CPU가 프로세스를 관리하려면 각 프로세스가 누구인지, 어떤 상황인지를 알아야 한다. 이러한 프로세스의 정보, 즉 메타 데이터를 가지고 있는 곳이 바로 PCB이다. PCB에는 다음과 같은 정보들이 포함된다.
PCB는 연결 리스트 방식으로 관리된다. PCB List Head에 PCB가 생성될 때 마다 하나씩 추가된다. 연결 리스트의 특징에 따라 삽입, 삭제가 용이하다는 특성을 활용하여 프로세스 생성 시 PCB가 생성되고, 완료 시 제거된다. 이때 프로세스가 변경되어 CPU의 레지스터 정보가 변경되는 것을 Context Switching이라 한다.
CPU가 현재 실행하고 있는 태스크의 상태를 저장하고, 다음에 진행할 태스크의 상태 및 레지스터 값에 대한 정보를 읽어 새로운 태스크의 정보로 교체하는 과정을 의미한다. 한마디로 이전 프로세스 정보는 PCB에 저장하고 다음 프로세스 정보를 PCB에서 읽어와 레지스터에 적재하는 과정이다. 따라서 Context Switching은 다음과 같은 상황에서 발생한다.
이때 3번 항목인 CPU 사용 허가 시간, 즉 time quantum의 경우 길이가 짧을수록 각 프로세스에 대한 응답속도가 빨라져 실시간 처리처럼 느껴지지만, 반대로 context switching 횟수가 많아져 아래와 같은 이유로 성능저하를 발생시킬 수 있다.
CPU라는 자원은 한정적이며 한번에 하나만 처리할 수 있지만, 실제로 컴퓨터는 다양한 작업을 background에서 처리하게 된다. 이때 다양한 태스크에 대해 실시간 처리되는 것처럼 보이려면 Context Switching이 필요하다.
Context Switching 비용은 멀티 프로세스와 멀티 스레드 중 어느 쪽이 더 클까? 그 이유는?
멀티 프로세스의 경우에 context switching 비용이 더 크다. 스레드는 stack 영역을 제외한 모든 메모리를 공유하기 때문에 context switching 발생 시 stack 영역만을 변경하면 되기 때문.
관련 문제를 더 풀어보고 싶다면, CS Broker - 멀티 스레드와 멀티 프로세스를 풀어보세요!