Computer-Sience/OS

[OS] 메모리 구조

dev_ss 2023. 7. 13. 02:03

[운영체제 내 프로그램 및 프로세스 구조]

운영 체제의 프로그램이 실행되려면 실행되려는 프로그램(코드)이 메모리에 먼저 적재되고,

추가로 프로그램에서 사용할 변수를 할당할 메모리 또한 필요로 한다.

 

위의 그림을 토대로 운영체제에서 프로그램(한 개 이상의 프로세스로 이루어진 집합체)에 배정하는 메모리 영역은 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(인출)을 이용하여 메모리의 높은 주소에서 낮은 주소의 방향으로 저장하고 인출하여 사용한다.

반응형