프로세스(Process)
프로그램이 실행중인 상태, 작업 중인 프로그램을 말한다.
응용프로그램 혹은 서비스가 Memory(RAM)에 적재되고 CPU를 할당 받아서 실행되는 것
- Memory 적재 및 CPU 할당은 운영체제가 한다.
프로세스 실행과 관련된 전반적인 정보를 PCB에 저장한다.
운영체제는 Context Switching을 통해 기존에 수행 중이던 프로세스에 대해 PCB에 백업하고 새로운 수행 프로세스에 대해 PCB에 로드한다.
메모리 영역

| 메모리 영역 | 설명 | 저장되는 내용 | 특징 |
| 코드(Code) | 실행될 프로그램의 기계어 코드가 저장되는 영역 | 함수, 메서드, 실행 코드 등 | 읽기 전용(수정 불가) 모든 스레드에서 공유됨 |
| 데이터(Data) | 초기화된 전역변수, 정적변수가 저장되는 영역 | int a = 10;같이 초기값이 있는 전역/정적 변수 | 프로그램 시작 시 할당하고 종료 시까지 유지 |
| BSS(Data의 일부) | 초기화되지 않은 전역/정적 변수가 저장되는 영역 | static int x;(초기값이 없는 전역/정적 변수) | 0으로 초기화되며, Data 영역과 구분되기도 함 |
| 스택(Stack) | 함수 호출 시 생성되는 지역/매개 변수 저장[동적 영역] | 지역 변수, 매개 변수, 함수 리턴 주소 | LIFO 구조 자동 할당 - 해제 스레드마다 독립적 |
| 힙(Heap) | 개발자가 직접 할당/해제하는 동적 메모리 공간[동적 영역] | malloc, new 등을 통한 동적 객체 | 수동 관리 스레드간 공유 가능 메모리 누수 위험 있음 |

자원 공유
프로세스는 다른 프로세스의 변수, 자료구조에 접근할 수 없어 자원 고유가 불가능하다.
하지만 자원 공유할 수 있는 여러가지 방법이 있다.
- Shared Memory(공유 메모리): 여러 프로세스가 커널을 통해 특정 메모리 영역을 같이 사용하도록 설정해 데이터를 교환하는 방식
- Message Passing(메시지 전달): 서로 다른 프로세스가 운영체제 커널을 통해 메시지(send/receive) 시스템 콜로 데이터를 교환하는 방식
- Pipe(파이프): 부모-자식 프로세스 간 혹은 프로세스 이름을 통한 별도 프로세스 간에 간단한 데이터를 주고 받을 때 사용하고 구조가 단순해 리눅스 환경에서 사용
스레드(Thread)
프로세스를 구성하는 실행 흐름 단위
- 따로 Thread를 생성하지 않는다면, 1개의 프로세스 당 1개의 쓰레드(Main)이 생성된다.
프로세스의 메모리(스택을 제외한 나머지 영역, 코드, 데이터, 힙)영역을 공유해서 사용한다.(자원을 공유할 수 있다.)
- 각각의 Thread마다 스택 영역은 분리해서 사용한다 => 스택 영역을 스레드가 동시에 사용하면 함수 호출이 이상해져서 프로그램이 실행이 될 수 없는 경우가 생기기 때문이다.
프로세스에 비해 쓰레드는 가볍다(경량 프로세스)고 표현한다.
- 가볍다는 것은 자원(CPU, Memory)가 적게 든다는 것이다.
- 하나의 프로세스를 생성하는 것은 CPU 부담이나 Memory 할당이 더 필요한 반면, 이미 생성된 프로세스에서 스레드를 생성하는 것은 CPU 부담이 상대적으로 적다는 것이다.

'CS > Operating System' 카테고리의 다른 글
| [Operating System] CPU Scheduling (0) | 2025.09.04 |
|---|---|
| [Operating System] 교착상태(Dead Lock) (0) | 2025.09.03 |
| [Operating System] Synchronize(동기화) (0) | 2025.09.02 |
| [Operating System] Multi Process, Multi Thread (0) | 2025.09.01 |
| [Operating System] 운영체제(OS) (0) | 2025.08.25 |