
프로세스의 효율적인 관리를 가능하게 하는 운영 체제의 필수 구성 요소.
운영 체제에서 프로세스가 생성되면 해당 프로세스의 정보를 저장하기 위한 데이터 구조가 생성된다. 이를 프로세스 제어 블록(PCB) 이라고 한다.
운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스를 PCB라 한다.
프로세스 상태, 프로그램 카운터, 메모리 할당 등 프로세스에 필요한 모든 정보가 포함되어 있다.
PCB의 주요 목적은 OS가 각 프로세스의 상태를 추적하고 이에 따라 시스템 Resource를 할당하여 여러 프로세스를 효율적으로 관리할 수 있도록 하는 것이다.
프로세스가 생성되면 OS는 해당 프로세스에 대한 PCB를 생성하고 프로세스에 필요한 모든 정보를 PCB에 저장한다.
그 뒤 Scheduler는 이 정보를 사용하여 우선 순위 및 프로세스가 대기한 시간과 같은 기타 요소를 기반으로 다음에 실행할 프로세스를 결정한다.
PCB는 필수 프로세스 정보를 저장하고 프로세스 상태 및 진행 상황을 관리하며 효율적이고 공정한 Resource 할당을 보장함으로써 프로세스 실행 및 Resource 할당을 관리한다.
운영체제에서 프로세스는 PCB로 나타내어지며, PCB는 프로세스에 대한 중요한 정보를 가지고 있는 자료다. 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.
PCB는 ‘커널 공간’이라고 알려진 운영 체제용으로 특별히 예약된 메모리에 저장된다.
PCB는 운영 체제가 프로세스를 표현한 것이라 할 수 있다.
sudo코드
#include <iostream>
using namespace std;
struct processControlBlock{
void * stack; //stack pointer
pid_t pid; // process id
struct files_struct *files; //pointer to files open
// you can add more variables
// to store process related information
};
int main() {
processControlBlock instance_process;
// your code goes here
return 0;
}
프로세스 제어 블록 의 역할은 각 프로세스에 대한 식별 카드로 발생한다. 운영 체제는 운영 체제가 모든 프로세스의 PCB를 참조할 때까지 어떤 프로세스가 어떤 프로세스인지 알 수 없다.
PCB는 멀티태스킹과 프로세스 관리에 필수적이다. 프로세스와 관련된 많은 기능과 데이터를 추적하기 위해 운영 체제에서 만들어지고 최신 상태로 유지된다.
PCB가 수행하는 역할은 크게 다음과 같다.
사용자가 새 프로세스를 생성하면 운영 체제는 해당 프로세스에 고유 ID, 즉 프로세스 ID를 할당한다. 프로세스 ID는 해당 프로세스를 시스템에 존재하는 다른 프로세스와 구별하는 데 도움을 준다.
운영 체제는 처리할 수 있는 최대 프로세스 수에 제한이 있으며, PCB는 N개의 가용 프로세스를 0부터 N-1의 프로세스 ID를 부여함으로서 최대 프로세스 수를 관리한다.
<aside> 💡 예시
process-ID는 0 에서 N-1 까지의 값을 가져온다.
일반적으로 오름차순으로 프로세스 ID가 부여되지만, 단일 PCB에 다량의 메모리가 필요하며 한 번에 N개의 프로세스가 허용될 때는 프로세스가 아닌 PCB에 0부터 N - 1까지 번호를 매기는 방식으로 관리된다.
생성부터 완료까지 프로세스는 다양한 상태를 거친다. 일반적으로 프로세스는 실행 중 5가지 상태 중 하나로 나타낼 수 있다.

각 프로세스의 우선 순위를 나타내는 숫자 값이다.
값이 작을수록 해당 프로세스의 우선순위가 높아진다.
우선 순위는 PCB 생성 시 할당되며 해당 프로세스의 수명, 소비된 Resource 등과 같은 여러 요소에 의해 달라질 수 있다.
커널에 가까울수록 보통 우선순위가 낮다
사용자는 프로세스에 외부적으로 우선 순위를 할당할 수도 있다.

<aside> 💡 프로세스 테이블
</aside>
