본문 바로가기

기초공부

리눅스 프로세스의 메모리 구조

리눅스에서 프로세스의 메모리를 크게 5가지 세그먼트로 구분한다.

 

1. 코드 세그먼트

2. 데이터 세그먼트

3. BSS 세그먼트

4. 힙 세그먼트

5. 스택 세그먼트

 

세그먼트란?

운영체제가 메모리를 용도별로 논리적 단위로 분할한 것을 의미한다.

 

코드 세그먼트

실행 가능한 기계 코드가 위치하는 영역으로 텍스트 세그먼트라고도 불림

읽기 권한과 실행 권한이 부여됨

 

데이터 세그먼트

컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치하는 영역

CPU가 데이터를 읽어야 하므로 읽기 권한이 부여됨

- 쓰기 가능 : 프로그램이 실행되면서 값이 변할 수 있는 데이터 (data)

- 쓰기 불가능 : 프로그램이 실행되면서 값이 변하면 안되는 데이터 (rodata : read-only data)

 

BSS 세그먼트

컴파일 시점에 값이 정해지지 않은 전역 변수가 위치하는 영역 (초기화 하지 않은 전역변수 포함)

프로그램이 시작될 때, 모두 0으로 값이 초기화 됨

 

힙 세그먼트

힙 데이터가 위치하는 영역

실행중에 동적으로 할당, 스택 세그먼트와 반대방향으로 자람

일반적으로 읽기와 쓰기 권한이 부여됨

 

스택 세그먼트

프로세스의 스택이 위치하는 영역으로 임시 변수들이 실행중에 이곳에 저장됨

스택 프레임 이라는 단위로 사용되며 함수가 호출될 때 생성 반환될 때  해제됨

일반적으로 얼만큼의 스택 프레임을 사용하게 될지 미리 계산하는 것이 불가능함

작은 크기의 스택 먼저 할당 후 부족할때마다 확장하는 형식

확장시 기존 주소보다 낮은 주소로 확장됨(아래로 자란다고 표현함)

읽기와 쓰기 권한이 부여됨

 

 

 

 

 

 

 

 

 

 

'기초공부' 카테고리의 다른 글

컴퓨터 구조와 명령어 집합 구조  (0) 2022.11.17
HTTP/HTTPS  (0) 2022.11.10