
[ 프로세스란 무엇인가? ]
프로세스는 실행 중인 프로그램을 의미합니다. 운영 체제에서 메모리, CPU와 같은 시스템 자원을 할당받아 독립적으로 실행됩니다. 프로세스는 각자의 메모리 공간을 가지며, 다른 프로세스와 메모리 공간을 공유하지 않습니다.
프로세스의 주요 특징
- 독립성: 각 프로세스는 고유의 메모리 영역(코드, 데이터, 힙, 스택)을 가지며, 다른 프로세스와 분리되어 실행됩니다.
- 운영 체제의 관리: 프로세스는 운영 체제에 의해 생성, 관리, 종료됩니다.
- 비용: 프로세스 간 문맥 전환(Context Switching)은 많은 시스템 자원을 소모합니다.
프로세스의 구성 요소
- Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
- Data : 전역 변수, 정적 변수, 배열 등
초기화된 데이터는 Data 영역에 저장
초기화되지 않은 데이터는 BSS 영역에 저장 - Heap : 동적 할당 시 사용 (new(), malloc() 등)
- Stack : 지역 변수, 매개 변수, 리턴 값 (임시 메모리 영역)
프로세스의 상태
- 생성(New): 프로세스가 생성 중인 상태.
- 준비(Ready): 실행 대기 중인 상태.
- 실행(Running): CPU를 점유하여 실행 중인 상태.
- 대기(Waiting): I/O 작업 등으로 인해 대기 중인 상태.
- 종료(Terminated): 실행이 끝난 상태.
멀티프로세스
하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 처리하도록 하는 것
- 장점 : 안전성 (메모리 침범 문제를 OS 차원에서 해결)
- 단점 : 각각 독립된 메모리를 갖고 있어 작업량이 많을수록 오버헤드 발생, Context Switching으로 인한 성능 저하
Context Switching 이란?
프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
- 동작 중인 프로세스가 대기하면서 해당 프로세스 상태를 보관
- 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구
문제점: 프로세스는 독립된 메모리 영역을 할당받으므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되면 오버헤드가 발생할 수 있음
[ 스레드란 무엇인가? ]
스레드는 프로세스 내에서 실행되는 작은 실행 단위입니다. 프로세스가 독립적인 메모리 공간을 가진다면, 스레드는 프로세스 내에서 메모리(코드, 데이터, 힙)를 공유하며 실행됩니다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있습니다.
스레드의 주요 특징
- 경량성: 스레드는 프로세스보다 생성, 종료, 문맥 전환이 빠릅니다.
- 자원 공유: 동일 프로세스 내의 스레드들은 메모리 공간(코드, 데이터, 힙)을 공유합니다.
- 독립적인 실행 흐름: 각 스레드는 독립적인 스택과 프로그램 카운터를 가집니다.
스레드의 구성 요소
- 스택(Stack): 함수 호출 시 사용되는 지역 변수와 매개변수가 저장됩니다.
- 레지스터(Registers): 현재 실행 상태를 저장합니다.
- 프로그램 카운터(Program Counter): 현재 실행 중인 명령어의 주소를 저장합니다.
스레드는 Stack만 따로 할당받고 나머지 영역은 공유한다.
스레드는 독립적인 동작을 수행하기 위해 존재 = 독립적으로 함수를 호출할 수 있어야 함
함수의 매개 변수, 지역 변수 등을 저장하는 Stack 영역은 독립적으로 할당받아야 함
멀티스레드의 장점
- 응답성(Response): 사용자 인터페이스가 빠르게 반응할 수 있습니다.
- 자원 공유: 메모리를 공유하므로 자원 낭비를 줄일 수 있습니다.
- 병렬성(Parallelism): 멀티코어 환경에서 작업을 병렬로 처리할 수 있습니다.
멀티스레드의 단점
- 동기화 문제: 자원을 공유하기 때문에 데이터 동기화 문제가 발생할 수 있습니다.
- 디버깅 난이도: 스레드 간의 복잡한 상호작용으로 인해 디버깅이 어렵습니다.
[ 프로세스와 스레드의 차이 ]
특징 | 프로세스 | 스레드 |
정의 | 실행 중인 프로그램 | 프로세스 내의 실행 단위 |
메모리 공유 | 각자 독립적인 메모리 공간 | 동일 프로세스 내에서 메모리 공유 |
생성 비용 | 비교적 높음 | 비교적 낮음 |
문맥 전환 비용 | 높음 | 낮음 |
안정성 | 독립적이므로 상대적으로 안전 | 동기화 문제가 발생할 수 있음 |
[ 프로세스와 스레드의 관계 ]
하나의 프로세스는 최소 하나의 메인 스레드를 가집니다. 멀티스레드 프로세스에서는 여러 스레드가 프로세스의 자원을 공유하며 실행됩니다. 예를 들어, 웹 브라우저는 하나의 프로세스에서 렌더링, 네트워크 요청, 사용자 입력 처리를 각각의 스레드로 분리하여 실행합니다.
[ 프로세스와 스레드 예시 ]
프로세스 활용
- 운영 체제에서 실행되는 애플리케이션(웹 서버, 데이터베이스 등)
- 독립적인 작업이 필요한 경우(예: 서로 다른 사용자 요청 처리)
스레드 활용
- UI 애플리케이션에서 사용자 입력과 백그라운드 작업을 분리
- 네트워크 요청 처리(파일 다운로드, 스트리밍)
- 병렬 데이터 처리(멀티코어 활용)

프로세스는 독립적으로 실행되며, 자원을 많이 소모하지만 안전성이 높습니다. 반면, 스레드는 가볍고 효율적이지만 동기화 문제가 발생할 수 있습니다.
'CS' 카테고리의 다른 글
해시 테이블(Hash Table) 이란? (1) | 2025.01.23 |
---|---|
CPU 스케줄링 이란? (3) | 2025.01.21 |
Redis란? (고성능 인메모리 데이터 스토어) (1) | 2024.12.27 |
Blocking vs Non-Blocking (0) | 2024.12.26 |
클라우드 컴퓨팅과 AWS (3) | 2024.12.23 |