✏️ PCB
PCB(Process Control Block)는 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터 구조를 말합니다. 프로세스가 생성되면 운영체제는 해당 프로세스를 관리하기 위해 PCB를 생성합니다.
프로그램이 실행되면 프로세스가 생성되고, 프로세스의 주소 공간에는 스택, 힙 등의 메모리 구조가 형성됩니다. PCB는 이러한 프로세스의 상태, 프로그램 카운터, 메모리 포인터 등의 중요한 정보를 포함하고 있습니다. 이 정보는 프로세스의 수명 동안 필요한 중요한 데이터이기 때문에 커널 영역에서 보호되며, 일반 사용자가 직접 접근할 수 없습니다.
💡 프로그램 카운터
프로그램 카운터는 현재 CPU가 실행 중인 명령어의 주소를 가리키는 레지스터입니다. 프로세스가 실행되면서 명령어가 순차적으로 실행될 때, 프로그램 카운터는 다음에 실행될 명령어의 주소로 업데이트됩니다.
💡 메모리 포인터
메모리 포인터는 메모리 주소를 저장하는 변수 또는 레지스터입니다. 프로그래밍에서 포인터는 특정 메모리 위치를 가리키는 변수로 사용되며, 포인터를 통해 해당 메모리 위치에 접근할 수 있습니다.
📋 PCB의 구조
- 프로세스 스케줄링 상태 : 준비, 일시중단 등 프로세스가 CPU에 대한 소유권을 얻은 이후의 상태
- 프로세스 ID : 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
- 프로세스 권한 : 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
- 프로그램 카운터 : 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
- CPU 레지스터 : 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
- CPU 스케줄링 정보 : CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
- 계정 정보 : 프로세스에 실행에 사용된 CPU 사용량, 실행한 유저의 정보
- I/O 상태 정보 : 프로세스에 할당된 I/O 디바이스 목록
🔁 컨텍스트 스위칭
컨텍스트 스위칭(Context Switching)은 현재 실행 중인 프로세스의 상태를 그 프로세스의 PCB에 저장하고, 다음에 실행될 프로세스의 상태를 해당 프로세스의 PCB에서 불러오는 과정을 말합니다. 이 과정은 주로 타임 퀀텀이 소진될 때, I/O 요청, 페이지 폴트와 같은 인터럽트에 의해 발생합니다.
실제로 컴퓨터는 여러 프로세스를 동시에 실행하는 것처럼 보이지만, 싱글 코어 CPU에서는 특정 시점에는 단 하나의 프로세스만이 실행됩니다. 이러한 동시성의 느낌이 주어지는 이유는 컨텍스트 스위칭이 매우 빠르게 이루어지기 때문입니다. 그 결과 사용자는 여러 프로그램이 동시에 구동되는 것처럼 느끼게 됩니다.
단, 멀티코어 CPU에서는 여러 프로세스나 스레드가 동시에 실행될 수 있습니다. 이 경우, 각 코어마다 독립적으로 컨텍스트 스위칭이 발생할 수 있습니다.
💡 타임 퀀텀
타임 퀀텀은 각 프로세스에 할당된 고정된 시간 단위를 의미하며, 프로세스는 해당 시간 동안만 CPU를 사용할 수 있습니다.
타임 퀀텀이 소진되면, 현재 실행 중인 프로세스는 다음 프로세스에게 CPU를 양보하게 되고, 해당 프로세스의 상태는 PCB에 저장됩니다. 이후 해당 프로세스는 준비 상태로 되돌아가서 다시 CPU를 할당받을 때까지 기다리게 됩니다.
위의 그림처럼 프로세스 P0이 실행하다 멈추고, P0의 PCB를 저장하고 다시 프로세스 P1을 로드하여 실행합니다. 그리고 다시 프로세스 P1의 PCB를 저장하고, 프로세스 P0의 PCB를 로드합니다. 컨텍스트 스위칭이 일어날 때 위의 그림처럼 유휴 시간(idle time)이 발생하는 것을 확인할 수 있습니다.
💡 유휴 시간
유휴 시간은 프로세스 간의 전환 시 발생하는 시간 손실을 의미합니다. 이 시간 동안 실제로 유용한 작업이 수행되지 않기 때문에 유휴 시간이라고 표현될 수 있습니다.
스레드에서의 컨텍스트 스위칭
컨텍스트 스위칭은 프로세스뿐만 아니라 스레드 간에서도 발생합니다. 스레드는 동일한 프로세스 내에서 실행되기 때문에 코드, 데이터, 힙 등의 메모리 영역을 공유합니다. 그러나 각 스레드는 자체적인 스택 영역과 레지스터 집합을 가지고 있습니다.
이러한 구조 덕분에 스레드 간의 컨텍스트 스위칭은 프로세스 간의 컨텍스트 스위칭보다 일반적으로 비용이 더 적게 들고 빠르게 수행될 수 있습니다. 스레드 간의 컨텍스트 스위칭에서는 주로 레지스터 정보와 스택 상태를 저장 및 복원하는 작업만 필요하기 때문입니다.
'ComputerScience > 프로세스와 스레드' 카테고리의 다른 글
스레드와 멀티스레딩 (0) | 2023.11.20 |
---|---|
멀티프로세싱 (0) | 2023.11.20 |
프로세스의 메모리 구조 (0) | 2023.11.20 |
프로세스의 상태 (1) | 2023.11.20 |
프로세스와 컴파일 과정 (0) | 2023.11.17 |
댓글