프로세스(Process)
프로세스(Processs)란?
프로세스(Process)는
“실행 중인 프로그램”을 뜻해.
프로그램은 단지 디스크에 저장된 정적인 파일이야. (
.exe,.out,.py같은 것들)이 프로그램을 실행하면, 운영체제(OS)가 이 프로그램을 메모리(RAM)에 올리고, CPU가 실행할 수 있도록 준비하는데, 이 상태를 프로세스라고 불러.
즉,
프로그램 ≠ 프로세스
“프로그램”을 실행 중인 것이 “프로세스”야.
프로세스의 주요 특징
| 구분 | 설명 |
|---|---|
| 고유한 메모리 공간 | 코드, 데이터, 스택, 힙 등의 독립적인 메모리 구조를 가짐 |
| 고유한 PID | OS는 각 프로세스를 식별하기 위해 Process ID(PID)를 부여함 |
| 자원(Resource) 소유 | 파일 디스크립터, 메모리, CPU 시간 등을 소유함 |
| 독립성 | 프로세스끼리는 기본적으로 메모리를 공유하지 않고 독립적으로 동작함 |
| 생명주기 | 생성(Create) → 준비(Ready) → 실행(Running) → 대기(Waiting) → 종료(Terminated) 흐름을 가짐 |
프로세스의 메모리 구조 (4영역)
프로세스가 메모리 위에 올라오면 이렇게 4개의 영역으로 나뉘어.
┌───────────────┐
│ Stack │ ➔ 함수 호출 시 지역변수, 매개변수 저장
├───────────────┤
│ Heap │ ➔ 동적 메모리 할당 영역 (malloc, new)
├───────────────┤
│ Data 영역 │ ➔ 전역변수, static 변수 저장
├───────────────┤
│ Code 영역 │ ➔ 실행할 프로그램 코드 (명령어) 저장
└───────────────┘
Stack : 함수 호출마다 자동으로 push/pop되는 메모리 (ex. 지역 변수)
Heap : 개발자가 직접
malloc,new로 할당하고free,delete로 해제해야 하는 메모리Data : 전역변수나 static 변수 저장
Code : 컴파일된 명령어(machine code)
프로세스의 상태 (State)
프로세스는 CPU에서 실행되면서 다양한 상태를 가진다.
| 상태 | 의미 |
|---|---|
| New | 프로그램이 메모리에 적재되는 중 |
| Ready | CPU를 받을 준비가 된 상태 |
| Running | CPU를 점유해서 실제 실행 중인 상태 |
| Waiting | 어떤 이벤트(I/O 등)를 기다리는 상태 |
| Terminated | 실행이 끝나서 종료된 상태 |
(※ 프로세스는 보통 Ready ↔ Running ↔ Waiting 을 반복하다가 종료돼.)
프로세스와 스레드
프로세스 : 완전히 독립된 실행 단위
스레드 : 프로세스 안에 있는 작업 단위(같은 메모리 공간을 공유)
“프로세스는 집이고, 스레드는 집안에 있는 가족”이라고 비유할 수 있어.
프로세스끼리는 서로 독립적이지만,
같은 프로세스 안의 스레드들은 메모리를 공유해.
프로세스 간 통신 (IPC)
서로 독립적인 프로세스끼리 정보를 주고받기 위해 여러 방법을 사용해.
주요 방법들
Pipe(파이프)
Message Queue(메시지 큐)
Shared Memory(공유 메모리)
Socket(소켓 통신)
Signal(시그널)
왜냐하면, 기본적으로 프로세스끼리는 서로 메모리를 공유하지 않기 때문이야.
요약
프로세스는 실행 중인 프로그램이고, 고유한 메모리 공간과 자원을 소유하며, 여러 상태를 가지면서 실행된다.