Context Switching & PCB 개념 정리
목차
1. Context Switching 개념 & 동작 방식
2. PCB(Process Control Block) 개념 & 구성 & 관리
1. Context Switching 개념 & 동작 방식
개념
저번 시간에 프로세스와 멀티 프로세스에 대한 내용을 다뤘다. 요즘은 대부분의 OS에서 멀티 프로세스 방식으로 작업을 수행하고 있는데 어떻게 한정된 CPU, 레지스터 등의 하드웨어 자원으로 여러 프로세스를 동시에 실행시킬 수 있을까?
크게 방향성에 대한 정책적인 부분과 구체적인 기술에 대한 내용인 메커니즘으로 나눠서 설명하는데 오늘은 이 메커니즘 부분에 다뤄보겠다.
OS는 Context Switching(컨텍스트 스위칭) 이라는 메커니즘을 활용하여 한정된 자원으로 여러 프로세스를 동시에 처리하게 된다.
Context Switching이란 현재 사용 중인 프로세스와 상태를 저장하고 다른 프로세스 상태로 교체하여 여러 작업을 수행하는 것을 의미한다. 간단히 말하자면 여러 프로세스를 돌아가면서 조금씩 실행한다고 이해하면 되겠다.
Context Switching(컨텍스트 스위칭) = 여러 프로세스를 돌아가면서 조금씩 수행하는 방식
우리의 일상에서도 이러한 Context Switching을 볼 수 있다. 여러 과목을 공부할 때 특정 시간에는 A과목을 수행하고, 이후에는 B를, 그 다음에는 C를 수행할 수가 있는데 이 과정이 일상 생활에서의 Context Switching이라고 보면 된다. 다만, 일상 생활과 달리 OS의 Context Switching 에서는 각 프로세스를 처리하는 시간이 매우 짧아서 사용자 입장에서는 동시에 실행되는 것 처럼 보인다.
동작 과정
여러 프로세스를 돌아가면서 작업하기 때문에 이전에 작업에 대한 내용이 있어야 이어서 작업을 할 수가 있다. 이전 작업 내용에 대한 내용은 PCB(Process Control Block)이라는 곳에 정보를 저장해서 사용하게 된다. 이에 대해서는 전체적인 동작 과정을 설명 후에 다루겠다. 일단은 이 PCB라는 곳에 프로세스의 작업 정보가 담긴다고 생각하자.
1. 현재 실행 중인 작업의 레지스터 값, pc, 스택 포인터 등을 PCB에 저장한다. (이러한 작업에 대한 상태들을 Context 라고하며, 추후 작업을 할 때 불러와서 사용한다 )
2. 다음에 실행할 프로세스를 선택한다(이 부분은 정책에 대한 내용, 추후에 다룰 예정)
3. 다음 프로세스의 Context를 레지스터, pc, 스택포인터 등에 복원 시킨다.
4. 작업 처리를 재개한다.
위와 같은 과정을 통해 프로세스 A 에서 프로세스 B로 Context Switching이 진행된다.
2. PCB(Process Control Block) 개념 & 구성 & 관리
위의 Context Switching 를 설명할 때, PCB를 프로세스의 작업 정보가 담긴다고만 설명을 하고 넘어갔는데 여기서 정리를 하고 넘어가자.
개념
PCB 란 OS가 Context Switching 시에 프로세스를 관리 및 추적에 사용하기 위한 데이터 구조이다. 이 데이터 구조에 해당 프로세스의 Context 가 저장되며, 각 프로세스마다 각자의 PCB 를 가지게 된다. Context Switching 시 PCB에 Context를 갱신하고, 복원하는 작업에 활용한다.
PCB(Process Control Block) = 각 프로세스의 Context를 저장하기 위한 데이터 구조
구성
PCB에는 프로세스의 Context 가 담긴다고 했는데 구체적으로 어떤 데이터가 담기게 될까?
아래 코드와 같은 데이터가 담기게 된다(가장 기본적인 정보를 예제로 넣었으며. 다른 정보도 추가될 수 있다)
// PCB 구조체 정의
struct PCB {
int process_id; // 프로세스 식별자
char process_name[256]; // 프로세스 이름
char process_state[20]; // 프로세스 상태 (실행, 대기, 준비 등)
int program_counter; // 프로그램 카운터 (다음에 실행될 명령어의 주소)
int priority; // 프로세스 우선순위
struct RegisterState registers; // 레지스터 상태
struct MemoryInfo memory_info; // 메모리 관리 정보
struct IOStatus io_status; // 입출력 상태 정보
};
위의 프로세스의 정보, 상태, 우선 순위 같은 프로세스와 관련된 기본 정보, 그리고 레지스터, 메모리, 입출력 등의 작업 상태를 Context로 저장하여 사용한다.
관리 방식
프로세스의 수 만큼 PCB도 존재하기에 이를 관리할 자료 구조가 필요하다.
이를 위해 연결 리스트로 된 PCB 리스트를 사용하여 PCB를 관리하게 된다.
연결 리스트를 사용하기 때문에 삽입, 삭제가 용이하다는 장점이 있다.
요약
컨텍스트 스위칭(Context Switching)
개념 - 여러 프로세스를 조금씩 돌아가면서 처리하는 과정
과정
1. 현재 프로세의 컨텍스트를 해당 PCB에 갱신
2. 다음 프로세스를 선택
3. 해당 PCB를 찾아서 복원
4. 작업을 재개
특징 - 여러 개의 프로세스를 동시에 실행할 수 있지만, 전환 과정에서 오버헤드가 발생한다
----------
PCB(Process Control Block)
개념 - 프로세스를 관리, 추적하기 위해 사용하는 데이터 구조. Context를 저장
구성 - 프로세스 id, 프로세스 이름, 상태, 우선순위, 레지스터 상태, 메모리 상태, I/O 상태
관리 - Linked List 구조의 PCB List로 관리
[참고 링크]
도서 - 운영체제 아주 쉬운 세 가지 이야기(Remzi H. Arpaci-Dusseau,Andrea C. Arpaci-dusseau)