반응형
개념
- 실행중인 프로그램!
- 운영체제가 독립적인 메모리 공간을 할당해서 관리하는 단위
예시
- 크롬 실행 → 크롬 프로세스가 생김
- vscode를 실행 → vscode 프로세스가 생김
- 멜론 앱을 실행 → 멜론 프로세스가 생김
특징
- 완전히 독립 (서로의 메모리, 데이터 접근 X)
- 하나가 죽어도 다른 프로세스엔 영향 X
- 생성/전환 비용이 큼 (메모리, 리소스까지 따로 생성해야 하니까)
프로세스 상태
- 프로세스는 실행되는 동안 아래와 같은 상태를 가짐
상태 설명
| New | 생성 중인 상태 (아직 실행 전) |
| Ready | 실행될 준비가 되어 큐에서 대기 |
| Running | 실제로 CPU를 점유하고 실행 중 |
| Waiting (Blocked) | I/O 등 외부 작업을 기다리는 중 |
| Terminated | 실행이 끝난 상태 |
➡ 운영체제는 이 상태 정보를 참고해서 어떤 프로세스에게 CPU를 줄지 결정함
🧠 프로세스의 메모리 구조
프로세스 메모리 구조
운영체제가 각 프로세스에게 메모리 공간을 할당할 때, 이 메모리는 크게 4개의 주요 영역으로 나뉨
- 코드 영역 (Text Segment)
- 데이터 영역 (Data Segment)
- 힙 (Heap)
- 스택 (Stack)
1. 코드 영역 (Text Segment)
- 설명: 프로그램이 실행되는 기계어 코드가 저장되는 영역
- 여기에는 실행할 수 있는 코드와 정적 함수들이 포함됨
- 특징:
- 읽기 전용으로 설정되며, 수정할 수 없음 (보안을 위해)
- 실행할 때 프로그램 코드가 여기에 배치되어 실행됨
- 프로세스가 시작될 때 로딩되어 변경되지 않음
2. 데이터 영역 (Data Segment)
- 설명: 프로그램 내에서 전역 변수나 정적 변수들이 저장되는 영역
- 초기화된 데이터와 초기화되지 않은 데이터로 나눠지기도 함
- 특징:
- 초기화된 데이터: 프로그램 실행 전에 초기값을 가진 변수들
- 초기화되지 않은 데이터(BSS): 값이 설정되지 않은 전역 변수나 정적 변수들
- 프로그램 실행 중 변경 가능한 영역이지만, 코드 영역과는 다르게 값이 바뀔 수 있음!
3. 힙 (Heap)
- 설명: 동적 메모리 할당에 사용되는 영역입니다.
- 프로그램 실행 중 malloc(), new 등을 통해 동적으로 메모리를 할당하거나 free(), delete로 해제함
- 특징:
- 동적으로 메모리를 할당하고 해제할 수 있기 때문에, 크기가 가변적임
- 메모리 누수가 발생할 수 있어, 관리가 중요함!!!
- 힙 영역은 프로세스가 종료될 때까지 메모리가 계속 할당될 수 있음
4. 스택 (Stack)
설명: 함수 호출 시 생성되는 지역 변수와 함수 호출 정보가 저장되는 영역
- 함수가 호출될 때마다 스택 프레임이 쌓이고, 함수가 종료되면 그 스택 프레임이 pop됨
- 특징:
- LIFO(Last In, First Out) 방식으로 메모리가 관리됨
- 함수의 인자, 지역 변수, 반환 주소 등이 저장됨
- 자동으로 메모리가 할당되고 해제되므로 수동 관리 필요 없음
- *스택 오버플로우(Stack Overflow)**가 발생할 수 있음 -> 너무 많은 함수 호출이나 너무 많은 지역 변수 사용 할 때!
각 영역의 메모리 관리 차이점
| 코드 영역 | 실행 가능한 프로그램 코드 | 읽기 전용, 수정 불가 |
| 데이터 영역 | 전역 변수, 정적 변수 | 초기화된 데이터, 초기화되지 않은 데이터(BSS) |
| 힙 | 동적 메모리 할당 (malloc(), new 등) | 크기 가변, 프로세스 종료까지 메모리 유지 |
| 스택 | 함수 호출과 지역 변수 | LIFO, 자동 할당 및 해제, 메모리 한계 있음 |
반응형
'CS 공부 > OS 운영체제' 카테고리의 다른 글
| (OS) 스레드 (0) | 2025.05.01 |
|---|---|
| (OS) 프로세스 (3) (0) | 2025.05.01 |
| (OS) 프로세스 (2) (0) | 2025.05.01 |
| (OS) 커널과 쉘 (0) | 2025.05.01 |
| (OS) 운영체제 (0) | 2025.05.01 |