운영체제를 공부할 때 가장 핵심적인 개념 중 하나가 바로 **프로세스(process)**와 **스레드(thread)**입니다. 이번 글에서는 프로세스의 종류, 메모리 구조, 그리고 코드·데이터·힙·스택 영역까지 정리해보겠습니다.
1. 포그라운드 프로세스와 백그라운드 프로세스
운영체제는 실행 중인 프로그램을 ‘프로세스’라고 부르며, 이 프로세스는 실행 방식에 따라 크게 두 가지로 나뉩니다.
1️⃣ 포그라운드 프로세스 (foreground process)
- 사용자가 보는 화면에서 동작하는 프로세스
- 예: 브라우저, 엑셀, 게임 등
- 사용자와 적극적으로 상호작용하며 실행됨
2️⃣ 백그라운드 프로세스 (background process)
- 화면에 보이지 않는 곳에서 실행
- 예: 업데이트 에이전트, 로그 수집기 등
3️⃣ 데몬
백그라운드 프로세스 중에서도 사용자와 상호작용 없이 특정 작업만 수행하는 특별한 프로세스입니다.
- 리눅스/유닉스: 데몬(daemon)
- 윈도우: 서비스(service)
2. 프로세스의 메모리 구조 - PCB부터 사용자 영역까지

프로세스가 실행되면 운영체제는 프로세스 실행을 위해 메모리 공간을 할당합니다. 일반적으로 다음과 같이 두 영역으로 나뉩니다.
1️⃣ 커널 영역
운영체제가 관리하는 영역으로, 프로세스는 직접 접근할 수 없습니다.
🔹 PCB (Process Control Block)
- 프로세스 관리에 필요한 정보가 저장됨
- 예: 프로세스 ID, 상태, 레지스터 정보, 우선순위 등
2️⃣ 사용자 영역(User Space)
프로세스가 실제 명령을 실행하는 영역이며, 다음 4가지로 구성됩니다:
- 코드 영역 (text/code segment)
- 데이터 영역 (data segment)
- 힙 영역 (heap segment)
- 스택 영역 (stack segment)
3. 메모리의 정적/동적 할당 영역 상세 설명
프로세스의 사용자 영역은 정적 영역과 동적 영역으로 나뉩니다.
1️⃣ 코드 영역 (정적 할당 영역)
- 실행 가능한 명령어가 저장되는 영역
- 읽기 전용(read-only)
- CPU가 직접 가져가 실행하는 기계어가 포함됨
- 예: 컴파일된 프로그램의 바이너리 코드
2️⃣ 데이터 영역 (정적 할당 영역)
- 프로그램 실행 중 유지되는 전역 변수, static 변수가 저장
- 프로그램 시작 시 할당되고 종료 시 해제됨
3️⃣ 힙 영역 (동적 할당 영역)
- 개발자가 직접 메모리를 할당/해제하는 공간
- malloc(), new 등으로 할당
- 반환을 해주지 않으면 메모리 누수(memory leak) 발생
- Java, Python 같은 언어는 가비지 컬렉션(GC)이 자동 관리
4️⃣ 스택 영역 (동적 할당 영역)
- 함수 호출 시 생성되는 지역 변수, 매개 변수, 리턴 주소 저장
- 함수 종료 시 자동으로 소멸
- LIFO 방식
4. 스택 트레이스(Stack Trace) - 오류가 발생한 지점을 보여주는 정보
스택 영역은 함수 호출 정보를 저장하는데, 만약 프로그램에서 오류가 발생하면 운영체제는 **스택 트레이스(stack trace)**를 출력합니다.
✔ 스택 트레이스란?
- 특정 시점의 함수 호출 정보를 보여주는 로그
- 오류가 발생한 지점을 역추적할 수 있음
- 디버깅에 매우 유용
정리하면
- 프로세스는 화면에서 동작하는 포그라운드와 뒤에서 조용히 실행되는 백그라운드로 나뉜다.
- 프로세스는 메모리에서 커널 영역 + 사용자 영역으로 구성된다.
- 사용자 영역은 코드 / 데이터 / 힙 / 스택이라는 4대 구역으로 구성된다.
- 오류 분석 시 스택 트레이스가 문제 발생 지점을 알려준다.
'컴퓨터 과학' 카테고리의 다른 글
| [운영체제] 프로세스와 스레드 - 문맥교환 (0) | 2025.11.25 |
|---|---|
| [운영체제] 프로세스와 스레드 - 커널영역 (0) | 2025.11.25 |
| [운영체제] 시스템 콜 (0) | 2025.11.25 |
| [컴퓨터 구조] 보조기억장치와 입출력장치 - RAID (0) | 2025.11.24 |
| [컴퓨터 구조] 메모리 - 캐시 메모리2 (0) | 2025.11.24 |