프로세스 관리는 구독중인 프로세스가 여러 개일때, CPU 스케줄링을 통해 프로세스를 관리하는 것을 의미한다.
이 때, CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다.
프로세스들의 특징을 갖고있는 것이 프로세스 메타데이터(Process Metadata)이다.
프로세스 메타데이터는 다음과 같은 정보를 담고 있다.
메타데이터는 프로세스가 생성될 때마다 PCB(Process Control Block)에 저장된다.
PCB는 프로세스들의 메타데이터를 저장하는 곳이며 한 PCB 안에는 한 프로세스의 정보가 담기게 된다.
프로그램이 실행되어 메모리에 적재됐을 때 프로세스가 생성되고, 프로세스 주소 공간에 코드, 데이터, 스택이 공간이 생성되고 이후 해당 프로세스의 메타데이터들이 PCB에 저장된다.
PCB는 프로세스가 생성될 때마다 하나씩 늘어가게 되는데, 이 때 PCB들을 관리하는 자료구조는 LinkedList이다.
PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입 및 삭제가 용이하다.
즉, 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.
CPU가 현재 작업 중인 프로세스에서 다른 프로세스로 넘어갈 때 지금까지의 프로세스의 상태를 저장하고, 새 프로세스의 저장된 상태를 다시 적재하는 작업을 Context Switching(문맥 교환)이라고 한다.
보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생한다.
멀티태스킹(Multitasking)
인터럽트 핸들링(Interrupt Handling)
사용자와 커널 모드 전환(User and Kernel Mode Switching)
위 그림을 보면 프로세스 P0이 실행중인 상태(executing)에서 유휴 상태(idle)가 될 때 프로세스 P1이 곧바로 executing 되지 않고 idle을 좀 더 하다가 executing이 된다.
그 이유는 P0의 상태를 PCB0에 저장하고 P1의 상태를 PCB1에서 가져와야 하기 때문이다.
이 과정에서 PCB를 저장하고 가져올 때 CPU는 아무런 일도 하지 못하게 된다.
따라서, 스레드 및 프로세스의 개수가 많아져 Context Switching이 빈번히 발생하게 되면, 오버헤드(Overhead)가 잦아져 성능 저하가 발생할 수도 있다. 이를 Context Switching Overhead라고 한다.