운영체제의 프로세스 관리와 통신: PCB, 컨텍스트 스위칭, 멀티프로세싱, IPC
운영체제는 실행 중인 프로그램들을 관리하고, 한정된 자원을 효율적으로 배분하기 위해 여러 가지 기법을 사용합니다.
이 글에서는 프로세스에 대한 정보를 담은 프로세스 제어 블록(PCB), 프로세스 간 전환을 의미하는 컨텍스트 스위칭, 여러 개의 프로세스를 동시에 실행하는 멀티프로세싱, 그리고 프로세스 간 데이터를 주고받는 IPC(Inter-Process Communication)에 대해 자세히 살펴보겠습니다.
프로세스와 스레드
- 프로세스
컴퓨터에서 실행 중인 프로그램의 인스턴스를 의미합니다.
예를 들어, chrome.exe와 같은 실행 파일을 두 번 클릭하면, 각 실행 파일은 메모리에 올라가 프로세스로 인스턴스화됩니다.
운영체제는 이러한 프로세스를 CPU 스케줄링 대상으로 관리합니다. - 스레드
프로세스 내에서 실제 작업이 수행되는 흐름입니다.
하나의 프로세스는 여러 스레드를 가질 수 있으며, 스레드는 프로세스의 자원을 공유합니다.
스레드 간의 전환은 프로세스 전환보다 비용이 적고 빠르게 이루어집니다.
프로세스 제어 블록 (PCB)
프로세스 제어 블록(PCB)는 운영체제가 각 프로세스에 대한 중요한 메타데이터(데이터에 대한 데이터)를 저장하는 데이터 구조입니다.
PCB는 프로세스 생성 시 자동으로 생성되며, 커널의 보호된 영역에서 관리되어 일반 사용자나 응용 프로그램이 접근할 수 없습니다.
PCB에 저장되는 정보
- 프로세스 스케줄링 상태
프로세스가 준비(Ready), 실행(Running), 차단(Blocked) 등 CPU를 할당받은 후의 상태를 나타냅니다. - 프로세스 ID
각 프로세스를 고유하게 식별하기 위한 번호와, 자식 프로세스 ID 등이 포함됩니다. - 프로세스 권한
프로세스가 접근할 수 있는 자원이나 I/O 디바이스 권한 정보를 저장합니다. - 프로그램 카운터
프로세스가 실행 중 다음 명령어의 주소를 가리키는 포인터입니다. - CPU 레지스터 정보
프로세스 실행에 필요한 레지스터 값들을 저장합니다. - CPU 스케줄링 정보
프로세스가 CPU를 사용하다가 중단된 시간 등, 스케줄링과 관련된 정보를 기록합니다. - 계정 정보
프로세스의 CPU 사용량 및 실행한 사용자의 정보 등이 포함됩니다. - I/O 상태 정보
프로세스에 할당된 I/O 디바이스 목록을 관리합니다.
PCB의 중요성과 역할
PCB는 운영체제가 프로세스를 효율적으로 관리하기 위해 꼭 필요합니다.
프로세스가 생성될 때 PCB에 필요한 메타데이터를 기록하고, 프로세스가 종료되거나 스케줄링 전환이 발생할 때 이 정보를 기반으로 작업을 수행합니다.
예를 들어, 컨텍스트 스위칭 시, 현재 실행 중인 프로세스의 상태를 PCB에 저장한 후, 다음 프로세스의 PCB에서 상태 정보를 읽어 CPU에 할당합니다.
컨텍스트 스위칭 (Context Switching)
컨텍스트 스위칭은 CPU가 한 프로세스의 실행 상태를 저장하고 다른 프로세스로 전환하는 과정입니다.
컨텍스트 스위칭의 과정
- 현재 프로세스의 상태 저장
프로세스 A가 실행 중일 때, CPU 할당 시간이 만료되거나 인터럽트가 발생하면, A의 현재 상태(프로그램 카운터, 레지스터, PCB 정보 등)를 PCB에 저장합니다. - 다음 프로세스 상태 로드
CPU는 다음 실행할 프로세스 B의 PCB에서 저장된 상태 정보를 읽어, B가 실행되도록 합니다. - 실행 전환
이 과정이 매우 빠르게 이루어지기 때문에, 마치 여러 프로세스가 동시에 실행되는 것처럼 보입니다. - 캐시 문제
컨텍스트 스위칭이 일어나면, CPU 캐시에 저장된 데이터가 다른 프로세스의 주소 정보와 충돌할 수 있습니다.
이로 인해 캐시 미스가 발생할 수 있으며, 캐시 클리어 과정이 필요할 수 있습니다.

스레드와의 차이
- 프로세스 간 컨텍스트 스위칭
프로세스는 각각 독립된 주소 공간을 가지므로, 상태 정보를 모두 저장하고 로드해야 하기 때문에 비용이 큽니다. - 스레드 간 컨텍스트 스위칭
스레드는 같은 프로세스 내에서 실행되므로, 메모리(특히 스택 영역 제외) 등 대부분의 자원을 공유합니다.
따라서 상태 전환에 필요한 정보가 줄어들어 컨텍스트 스위칭 비용이 낮고, 빠르게 이루어집니다.
멀티프로세싱 (Multiprocessing)
멀티프로세싱은 여러 프로세스를 동시에 실행하는 기술입니다.
이는 한 프로세스에 문제가 생겨도 다른 프로세스는 계속 실행되어 시스템의 신뢰성을 높입니다.
멀티프로세싱의 장점
- 신뢰성
하나의 프로세스가 비정상 종료되더라도, 다른 프로세스가 계속 실행되므로 전체 시스템이 멈추지 않습니다. - 병렬 처리
여러 작업을 동시에 수행할 수 있어, 특히 다중 CPU나 코어를 가진 시스템에서 성능 향상이 큽니다.
웹 브라우저 예시
현대 웹 브라우저는 멀티프로세싱을 적극 활용합니다.
- 브라우저 프로세스
주소 표시줄, 북마크, 네트워크 요청 등 기본적인 기능을 담당합니다. - 렌더러 프로세스
웹 페이지의 내용을 렌더링(표시)하며, 여러 탭에서 각각 다른 프로세스로 동작할 수 있습니다. - 플러그인 프로세스
동영상 재생, 광고 등의 플러그인 기능을 별도의 프로세스로 분리해 안정성을 높입니다. - GPU 프로세스
화면에 그래픽을 출력하는 작업을 전담하여, CPU의 부담을 줄입니다.
프로세스 간 통신 (IPC, Inter-Process Communication)
운영체제는 여러 개의 프로세스가 동시에 실행되더라도, 이들 사이에 데이터를 주고받고 협력할 수 있도록 다양한 프로세스 간 통신(IPC, Inter-Process Communication) 방법을 제공합니다.
IPC는 한 프로세스에서 생성된 데이터나 결과를 다른 프로세스와 공유해야 하는 상황에서 매우 중요합니다.
왜 IPC가 필요한가?
- 멀티프로세스 환경
현대의 많은 시스템은 여러 프로세스를 동시에 실행합니다.
예를 들어, 웹 브라우저는 주소 표시줄, 렌더링, 플러그인, GPU 작업 등을 각각 별도의 프로세스로 분리하여 실행합니다. - 데이터 협력
서로 독립적으로 실행되는 프로세스들이 특정 작업(예: 파일 서버와 클라이언트, 데이터베이스 서버와 애플리케이션)에서 데이터를 교환하거나 공유해야 합니다. - 신뢰성 및 분산 처리
한 프로세스에 문제가 발생해도, 다른 프로세스들이 계속 작동할 수 있도록 데이터를 주고받으며 복원할 수 있는 메커니즘이 필요합니다.
주요 IPC 방식
각 IPC 방식은 전송 속도, 구현 복잡도, 동기화 필요성 등에서 차이가 있으며, 상황에 맞게 선택할 수 있습니다.
1) 공유 메모리 (Shared Memory)
여러 프로세스가 동일한 메모리 블록에 접근할 수 있도록 하여, 데이터를 직접 읽고 쓸 수 있게 하는 방식입니다.
- 장점
- 매우 빠른 데이터 교환 속도를 제공합니다.
- 추가적인 데이터 복사나 전송 오버헤드가 거의 없습니다.
- 단점
- 여러 프로세스가 동시에 접근하므로, 데이터 일관성을 위해 동기화(예: 뮤텍스, 세마포어)를 반드시 구현해야 합니다.
두 개의 프로세스가 공동으로 사용하는 메모리 영역을 생성하고, 한 프로세스는 데이터를 작성(write)하고 다른 프로세스는 해당 데이터를 읽는 방식입니다.
이와 같이, 공유 메모리는 데이터를 직접 공유하기 때문에 빠르지만, 동시 접근 시 충돌을 막기 위한 동기화 기법이 필요합니다
// C 언어의 공유 메모리 예시 (간략화)
int shmid = shmget(key, size, IPC_CREAT | 0666); // 공유 메모리 생성
char *shared_data = shmat(shmid, NULL, 0); // 프로세스에 매핑
// 프로세스 A: shared_data에 데이터를 기록
// 프로세스 B: shared_data에서 데이터를 읽음
2) 파일
디스크에 저장된 파일이나 파일 시스템을 통해 데이터를 주고받는 방식입니다.
파일 시스템은 데이터를 영구적으로 저장하므로, IPC 방식으로 파일을 사용할 경우 데이터의 내구성이 보장됩니다.
네트워크 파일 시스템(NFS)이나 파일 서버를 통해 여러 컴퓨터 간에도 파일 기반 통신이 가능합니다.
- 장점
구현이 비교적 간단하며, 디스크 기반이므로 데이터가 지속됩니다. - 단점
파일 I/O는 메모리 접근보다 느리며, 파일 접근에 따른 동기화 및 잠금(Locking) 문제가 발생할 수 있습니다. - Ex
프로세스 A가 데이터를 파일에 쓰고, 프로세스 B가 그 파일을 읽어 데이터 교환을 수행합니다.
3) 소켓 (Socket)
네트워크를 통한 데이터 통신 방식으로, 한 컴퓨터 내의 프로세스뿐만 아니라, 다른 컴퓨터 간에도 데이터를 주고받을 수 있습니다.
주로 TCP(연결 지향)와 UDP(비연결 지향) 프로토콜을 사용합니다.
- 장점
- 네트워크를 통한 유연한 통신이 가능하며, 분산 시스템에서 많이 사용됩니다.
- 소켓 통신은 프로세스 간뿐만 아니라 클라이언트/서버 모델에서도 핵심 역할을 합니다.
- 단점
- 네트워크 지연과 패킷 손실 등의 문제가 발생할 수 있으며, 프로토콜에 따른 오버헤드가 있습니다.
- Ex
채팅 애플리케이션에서 클라이언트가 소켓을 통해 서버와 연결하여 실시간 메시지를 주고받는 경우가 이에 해당합니다.
4) 익명 파이프 (Anonymous Pipe)
부모 프로세스와 자식 프로세스 간에 데이터를 단방향으로 전달하는 간단한 통신 방식입니다.
FIFO(First-In, First-Out) 구조를 사용합니다.
주로 동일 컴퓨터 내에서만 사용됩니다.
생성된 파이프는 이름이 없으므로 "익명"이라고 부릅니다.
- 장점
간단한 구현과 빠른 통신 속도를 제공합니다. - 단점
다른 프로세스 간 통신에는 사용할 수 없습니다. - Ex
자식 프로세스가 부모 프로세스로 데이터를 보내거나, 반대로 부모가 자식에게 데이터를 전달할 때 익명 파이프를 사용할 수 있습니다.

5) 명명된 파이프 (Named Pipe)
익명 파이프와 비슷하지만, 이름을 가지므로 서로 다른 프로세스나 네트워크 상의 컴퓨터 간에도 사용할 수 있는 파이프입니다.
단방향 또는 양방향 통신 모두 지원합니다.
운영체제에서 파일 시스템처럼 관리되므로, 여러 프로세스가 동시에 사용할 수 있습니다.
- 장점
익명 파이프보다 유연하며, IPC뿐만 아니라 클라이언트/서버 간 통신에도 사용 가능합니다. - Ex
서버와 클라이언트가 명명된 파이프를 통해 데이터를 주고받으며, 여러 파이프를 동시에 열어 복수의 통신을 처리할 수 있습니다.


6) 메시지 큐 (Message Queue)
메시지를 선입선출(Queue) 구조로 관리하는 방식입니다.
운영체제 커널이 전역 변수처럼 메시지 큐를 관리하며, 각 프로세스는 메시지를 큐에 쓰거나 읽습니다.
- 장점
- 메시지 큐는 동기화 문제를 상대적으로 쉽게 해결할 수 있으며, 데이터 전송이 직관적입니다.
- 동시 다발적인 읽기/쓰기가 발생하는 경우, 공유 메모리보다 구현이 간단합니다.
- 단점
- 데이터 전송 속도는 공유 메모리보다는 느릴 수 있으며, 큐의 크기나 시스템 자원에 따라 제한이 있을 수 있습니다.
- Ex
로그 데이터를 저장하는 애플리케이션에서, 여러 프로세스가 로그 메시지를 메시지 큐에 넣고, 중앙의 로그 서버가 이를 읽어 기록하는 방식으로 사용됩니다.
정리
운영체제는 컴퓨터의 한정된 메모리와 CPU 자원을 효율적으로 관리하기 위해 다양한 기술을 사용합니다.
- 프로세스는 실행 중인 프로그램의 인스턴스이며, 스레드는 프로세스 내에서 개별 작업 흐름을 담당합니다.
- PCB(프로세스 제어 블록)는 각 프로세스에 대한 중요한 메타데이터를 저장하며, 운영체제가 프로세스를 관리하는 데 핵심적인 역할을 합니다.
- 컨텍스트 스위칭은 프로세스 간 전환을 통해 여러 프로세스가 동시에 실행되는 것처럼 보이게 합니다. 이 과정에서는 CPU 레지스터, 프로그램 카운터 등의 정보가 PCB에 저장됩니다.
- 멀티프로세싱은 여러 프로세스를 동시에 실행하여 신뢰성과 병렬 처리를 가능하게 합니다. 예를 들어, 웹 브라우저는 서로 다른 기능을 담당하는 여러 프로세스로 구성되어 있습니다.
- IPC를 통해 프로세스들은 서로 데이터를 주고받으며 협력할 수 있습니다. 공유 메모리, 파일, 소켓, 파이프, 메시지 큐 등의 방식이 각각의 특징에 따라 사용됩니다
'CS_운영체제' 카테고리의 다른 글
[CS_운영체제] CPU 스케줄링 알고리즘 (0) | 2025.03.24 |
---|---|
[CS_운영체제] 스레드와 멀티스레딩, 공유 자원, 임계 영역 그리고 교착 상태 (2) | 2025.03.21 |
[CS_운영체제] 프로세스와 스레드, 컴파일 과정과 메모리 구조 (0) | 2025.03.10 |
[CS_운영체제] 메모리 관리 (1) | 2025.03.05 |
[CS_운영체제] 메모리와 캐시 (0) | 2025.03.04 |