프로세스란?
실행중인 프로그램을 뜻한다.
프로세스의 유형
- 포그라운드 프로세스
사용자가 보는 공간에서 사용자와 상호작용하여 실행되는 프로세스
- 백그라운드 프로세스
사용자가 보지 못하는 곳에서 실행되는 프로세스
- 데몬
사용자와 별다른 상호작용 없이 주어진 작업만 수행하는 특별한 백그라운드 프로세스
✢ 윈도우 운영체제에서는 데몬을 서비스라 부른다.
프로세스의 구조
프로세스를 실행시키기 위해서는 코드의 데이터를 메모리에 올려 실행시켜야 한다.
이때, 프로세스마다 고유한 가상 메모리 공간을 제공하며, 이 공간은 아래 이미지와 같다.

프로세스의 유형을 막론하고 하나의 프로세스를 구성하는 메모리 내의 정보는 크게 다르지 않다.
(프로세스마다 구조는 다 비슷비슷하다)
✔️ 커널영역
- PCB : 프로세스 제어 블록
✔️ 사용자 영역
코드 영역
- 실행가능한 명령어가 저장되는 공간이다.
- 텍스트 영역이라고도 불린다.
- 읽기전용 공간이다.
- 컴파일되어
데이터 영역
- 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다.
- 데이터 영역에 저장되는 데이터는 정적 변수나 전역 변수가 대표적이다.
힙 영역
- 프로그램을 만드는 사용자가 직접 할당 가능한 저장 공간이다.
- 자유롭게 할당 가능한 대신 언젠가는 해당 공간을 반환해야한다. (메모리 누수주의)
- 메모리 누수 문제 해결을 위해 가비지 콜렉터(GC)를 제공하는 언어도 있다.
스택 영역
- 데이터 영역의 값들과는 달리 일시적으로 사용할 값들이 저장되는 공간이다.
- 함수의 실행이 끝나면 사라지는 매개변수, 지역 변수, 함수 복귀 주소 등이 대표적이다.
- 스택 트레이스라는 형태의 함수 호출 정보가 저장 될 수 있다.
스택 트레이스: 특정 시점에 스택 영역에 저장된 함수 호출 정보
PCB와 문맥교환
✔️ PCB: 프로세스 제어 블록
운영체제가 메모리에 적재된 다수의 프로세스를 관리하기 위해 필요한 프로세스를 식별할 수 있는 커널 영역 내 정보를 말한다.
프로세스와 관련한 다양한 정보를 내포하는 구조체의 일종이다.
새 프로세스가 메모리에 적재됐을 때 커널 영역에 만들어지고, 프로세스의 실행이 끝나면 폐기된다.

✔️ 프로세스에 담기는 정보
- 프로세스 ID
- 프로세스가 실행과정에서 사용한 레지스터 값
- 프로세스 상태
- CPU 스케쥴링(우선순위) 정보
- 메모리 관련 정보
- 파일 및 입출력 장치 관련 정보
여러 PCB들은 프로세스 테이블(실행중인 PCB의 모음)의 형태로 관리되는 경우가 많다.
✔️ 문맥교환 (Context Switch)
기존 프로세스의 문맥을 PCB에 백업하고, 문맥을 복구하여 새로운 프로세스를 실행하는 것
프로세스가 실행된다. = 운영체제에 의해 CPU의 자원을 할당받았다.
일반적으로 메모리에 적재된 프로세스들은 한정된 시간동안 번갈아 가며 실행된다.
프로세스의 사용시간은 타이머 인터럽트에 의해 제한된다.

위 그림과 같이 프로세스 A가 실행되다 타이머 인터럽트가 발생하면 프로세스 A에 대한 모든 정보를 백업해야되는데,
이 정보를 문맥이라한다. (문맥은 PCB에 명시됨)
프로세스 B가 실행되기 전에는 해당 프로세스의 문맥을 복구한다.
이 과정을 문맥교환이라한다.
프로세스의 상태
하나의 프로세스는 여러 상태를 거치며 실행된다.
- 생성상태 (new)
메모리에 적재되어 PCB를 할당받은 상태, CPU의 할당을 기다린다. - 준비상태 (ready)
당장이라도 CPU를 할당받아 실행할 수 있는 상태, 자신의 차례가 아니기 때문에 기다리는 상태이다.
디스패치(dispatch) : 준비상태 프로세스가 실행 상태로 전환되는 것 - 실행상태 (running)
실행중인 상태, 타이머 인터럽트가 발생하면 준비상태 또는 대기상태가 된다. - 대기상태 (blocked)
입출력 작업을 요청하거나 바로 확보할 수 없는 자원을 요청하는 등의 바로 실행할 수 없다면 대기상태에 놓인다. - 종료상태 (terminated)
종료된 상태, 운영체제가 PCB와 메모리를 정리한다.
멀티프로세스와 멀티스레드
✔️ 멀티프로세스
동시에 여러 프로세스가 실행되는 것
각기 다른 프로세스들은 기본적으로 자원을 공유하지 않고, 독립적으로 실행된다.
같은 작업을 수행하더라도 자원이 독립적으로 할당되어 다른 프로세스에 영향을 끼치지 않는다.

✔️ 멀티스레드
프로세스를 동시에 실행하는 여러 스레드
한 프로세스를 구성하는 코드를 동시에 실행하는 방법이다.

하나의 스레드는 스레드ID, 프로그램 카운터, 레지스터 값, 스택 등으로 구성된다.
✔️ 멀티프로세스 vs 멀티스레드
둘의 큰 차이는 자원의 공유여부에 있다.
프로세스는 자원을 공유하지 않기때문에 독립적이지만, 스레드는 프로세스의 자원을 공유한다.
따라서 쉽게 협력하고 통신할 수 있다는 장점이 있지만 한 스레드에 문제가 생기면 프로세스 전체의 문제가 될 수 있다.
❓ 스레드 조인
thread1.join()
join의 주체 스레드가 종료될 때까지 대기해야함을 의미한다.
프로세스간 통신 (IPC)
독립적인 프로세스가 자원을 공유하고 데이터를 주고 받을 수 있는 방법

✔️ 공유메모리
프로세스 간에 공유하는 메모리 영역을 토대로 데이터를 주고받는 통신방식
공유메모리를 프로세스 A는 쓰고 B는 읽으면 A가 B에게 데이터를 공유하는 것과 같다.
- 마치 자신의 메모리 영역을 읽고 쓰는 것처럼 통신한다.
- 데이터를 주고 받는 과정에 커널의 개입이 거의 없다.
- 메시지 전달 방식보다 통신속도가 빠르다
- 데이터의 일관성이 훼손될 수 있다. (레디스 컨디션)
✔️ 메세지 전달
프로세스 간에 주고받을 데이터가 커널을 거쳐 송수신되는 통신 방식
- 보내는 수단과 받는 수단이 명확하다. (send(), recv())
- 커널의 도움을 받으므로 레이스 컨디션이나 동기화등의 문제를 상대적으로 적게 고려한다.
- 대표적인 수단으로 파이프, 시그널, 소켓, 원격 프로시저 호출(RPC) 등이 있다.
⚬ 파이프
단방향 프로세스간의 통신 도구 (데이터가 흐를 수 있는 공간)
양방향 통신 -> 읽기용 파이프와 쓰기용 파이프 2개를 이용
⚬ 시그널
프로세스에게 특정 이벤트가 발생했음을 알리는 비동기적인 신호

프로세스는 시그널이 발생하면 하던 일을 잠시 중단하고, 시그널 처리를 위한 시그널 핸들러를 실행한 뒤 다시 실행한다.
시그널도 비동기적으로 원하는 동작을 수행할 수 있는 좋은 수단이다.
⚬ 원격 프로시저 호출(RPC)
원격 코드를 실행하는 IPC 기술 (대규모 트래픽 처리 환경, 서버 간 통신 환경에 사용)
⚬ 네트워크 소켓
'Dev > Computer Science' 카테고리의 다른 글
| [이것이 취업을 위한 컴퓨터 과학이다] : 네트워크 계층 - IP (1) | 2025.05.14 |
|---|---|
| [이것이 취업을 위한 컴퓨터 과학이다] : 물리 계층과 데이터 링크 계층 (0) | 2025.05.07 |
| [이것이 취업을 위한 컴퓨터 과학이다] : 네트워크의 큰 그림 (1) | 2025.05.05 |
| [이것이 취업을 위한 컴퓨터 과학이다] : 운영체제 - 동기화와 교착상태 (4) | 2025.04.25 |
| [이것이 취업을 위한 컴퓨터 과학이다] : 운영체제 - 운영체제의 큰 그림 (0) | 2025.04.03 |
