운영 체제의 프로그램이 실행되려면 실행되려는 프로그램(코드)이 메모리에 먼저 적재되고,
추가로 프로그램에서 사용할 변수를 할당할 메모리 또한 필요로 한다.
위의 그림을 토대로 운영체제에서 프로그램(한 개 이상의 프로세스로 이루어진 집합체)에 배정하는 메모리 영역은 4가지 영역으로 구분되어 있다.
- Code 영역
- Data 영역
- Heap 영역
- Stack 영역
Code -> Data -> Heap -> Stack 순으로 Low Memory -> High Memory로 분류된다.
- Low Memory : logical address가 존재하는 메모리 공간
- High Memory : logical address를 갖고 있지 않는 메모리 공간
1. Code 영역 :
메모리에 배정된 Code 영역은 이름 그대로 프로그램의 소스 코드가 저장되는 영역이며, 바이너리 형태로 저장된다.
CPU에서 해당 영역에 저장되어 있는 코드를 하나씩 가져가서 실행하며, 실행 파일의 명령어 중 함수, 제어문, 상수 등이 Code 영역에 저장된다.
2. Data 영역 :
Data 영역은 프로그램의 코드 내 전역 변수 및 정적(static) 변수가 저장되는 영역이다.
두 가지의 변수를 저장하는 영역이기 때문에 프로그램의 시작하면 해당 영역에 할당이 되고, 종료가 되면 소멸하게 된다.
3. Heap 영역 :
Heap 영역은 개발자가 메모리에서 직접 관리가 가능한(관리가 필요한) 영역으로, 개발자의 의도대로 변수를 메모리 공간에 동적으로 할당하고 해제할 수 있는 영역이다.
메모리 할당 후 역할이 다했을 때, 메모리 해제를 하지 않으면 점유하고 있는 메모리의 누수(Memory Leak)가 발생하여 이는 컴퓨터 자원의 낭비로 이어지기 때문에, 개발자가 더욱 신경써서 관리 해야하는 영역이다.
런타임 시 크기가 결정된다는 특징을 가지고 있고 메모리의 주소가 낮은 주소에서 높은 주소의 방향으로 할당이 된다.
4. Stack 영역 :
Stack 영역은 함수 호출이 발생할 때 생성되는 지역 변수와 매개 변수가 저장되는 영역이다.
Data 영역이 프로그램 시작과 종료 시 생성되고 소멸하는 것처럼, Stack 영역은 함수의 호출이 완료되었을 때, 점유하고 있는 메모리도 해제가 된다.
후입 선출(LIFO, Last-In First-Out)의 특징을 가지고 있고, push(저장)과 pop(인출)을 이용하여 메모리의 높은 주소에서 낮은 주소의 방향으로 저장하고 인출하여 사용한다.
'Computer-Sience > OS' 카테고리의 다른 글
[OS] Byte Order (0) | 2023.08.06 |
---|---|
[OS] 데드락(Deadlock, 교착 상태) (0) | 2023.08.04 |
[OS] Process(프로세스) / Thread(스레드) (0) | 2023.02.09 |
[OS] Sync / Async / Blocking / Non-Blocking (0) | 2023.02.08 |
[CS] Kernel(커널) (0) | 2023.02.02 |