- 순서
- 프로세스란?
- 프로세스 메모리 구조
- 프로세스 메모리의 핵심 메커니즘
- 프로세스 메모리의 동작
- 프로세스란?
- 프로세스란 프로그램이 실행되어 운영체제에 의해 관리되는 실행 단위로, 독립적인 가상 주소 공간을 가짐.
- 프로세스가 보는 주소는 물리 메모리와 1:1이 아니라 페이지 단위로 매핑되어 있고, 이 매핑을 통해 프로세스마다 격리와 보호가 이뤄집니다.
- 큰 흐름: 로더(또는 런타임) > 세그먼트(코드. 데이터 등) 적재 > 실행 중에 동적 할당.매핑 > 페이지 폴트/스왑/캐시 관리
- 프로세스 메모리 구조
- 낮은주소에서 높은주소 순으로 코드, 데이터, 힙, 스택 네 부분으로 나뉘며, 실행 중 확장/축소됨
- 코드(code) 영역
- 실행할 프로그램의 기계어 명령어 저장
- 보통 읽기 전용(Read-only임)이며 실행 권한이 있음.
- 함수 정의, 제어 흐름, 명령어 등이 여기 들어감
- 여러 프로세스가 같은 프로그램을 실행하면 해당 코드 영역은 공유 가능함
- 데이터(data) 영역
- 전역 변수, static 변수 저장
- 초기값이 있으면 .data, 초기 값이 없으면 .bss로 구분되지만, 보통 묶어서 데이터 영역이라고 부름
- 실행 중에 값이 바뀔 수 있음(읽기/쓰기 가능)
- 스택(stack) 영역
- 함수 호출 시 생성되는지역 변수, 매개변수, 리턴 주소 저장
- 함수가 끝나면 자동으로 해제됨
- 보통 아래쪽 방향으로 감소하면서 확장됨(힙과 반대 방향임)
- 너무 깊은 함수 호출이나 큰 지역 배열 사용 시 스택 오버플로우 발생
- 힙(heap) 영역
- 프로그램 실행 중 동적 할당되는 메모리(malloc, new 등) 저장
- 런타임에 크기가 유동적으로 변환
- 일반적으로 주소가 위쪽 방향으로 증가하면서 확장됨
- 사용자가 (free, delete로)직접 해제하지 않으면 메모리 누수가 발생함
- 프로세스 메모리의 핵심 메커니즘
- 가상 메모리: 프로세스는 가상 주소를 보고, CPU와 OS가 페이지 테이블로 물리 프레임에 매핑. > 주소 공간 격리와 메모리 보호 제공
- 페이지와 페이지 테이블: 보통 4KB페이지, 다단계 페이지테이블
- TLB: 주소 변환 캐시 > 성능에 영항
- 페이지 폴트: 접근한 페이지가 물리에 없으면 커널이 파일/스왑에서 로드하거나 오류 처리
- 스왑: 메모리 부족 시 디스크로 비활성 페이지를 내보냄(성능 저하 요인임)
- Copy-On-Write: fork()시 부모.자식이 페이지를 공유하고, 쓰기 시점에 복사함(효율적임)
- 동적 링킹/로더: 실행 시 공유 라이브러리 매핑 및 심볼 바인딩(즉시/지연)
- 프로세스 메모리의 동작
- 프로세스가 실행될 때 OS가 프로그램을 메모리에 적재하고, 코드/데이터/스택/힙을 준비한 뒤 main()부터 실행함..
'CS' 카테고리의 다른 글
| [CS] 프로세스와 스레드 (2) | 2025.08.28 |
|---|---|
| [CS]메모리 단편화 (1) | 2025.08.28 |
| [CS]빌드 프로세스 (0) | 2025.08.27 |
| [CS] CPU와 GPU (4) | 2025.08.26 |
| [CS] 컴퓨터의 메모리 구조 (4) | 2025.08.22 |