CreamPuff's HACK LAB

Main Memory (주 기억 장치) 개요 본문

이전 글

Main Memory (주 기억 장치) 개요

CreamPuffx2 2019. 4. 24. 12:04

프로그램은 메모리에 저장된다. 

컴퓨터가 처음 등장한 초창기에는 데이터만 메모리에 넣고, 명령어는 외부에서 스위치를 조작하여 전달했다. 

예를 들어 1100이라는 명령어라면 1번, 2번 스위치를 올리는 식이었다. 

ENIAC (Electronic Numerical Integrator And Computer)

이후 폰 노이만(Von Neumann)에 의해 데이터는 물론 명령어까지도 아예 메모리에 올려놓자는 아이디어가 등장했으며

이를 저장된 프로그램 개념(Stored Program Concept)이라 부른다.

 

일반적으로 프로그램은 하드 디스크에 파일 형태로 저장되어 있다가

사용자가 프로그램을 실행하면 비로소 메모리로 올라와 실행된다. 

'저장된 프로그램 개념'을 통해 메모리에 올라간 프로그램을 살펴보면,

크게 코드 세그먼트(Code Segment)와 데이터 세그먼트(Data Segment)로 나뉜다.

코드 세그먼트는 명령어가 저장되는 공간이고, 데이터 세그먼트는 명령어 수행에 필요한 데이터가 저장되는 공간이다.


위 그림은 프로그램 실행 시 메모리 구조를 표현한 것이다. 

일반적으로 하위 주소(Low Address)에서 상위 주소(High Address)로 올라가면서

코드 세그먼트(Code Segment), 데이터 세그먼트(Data Segment), 힙 메모리(Heap Memory), 스택 메모리(Stack Memory)

순으로 자리 잡는다.

(물론 이는 운영체제를 어떻게 설계하느냐에 따라 달라질 수 있다.

운영체제에 따라서는 힙 메모리를 위쪽에, 스택 메모리를 아래쪽에 위치시키기도 한다.)

스택 메모리

(Stack Memory)

 

  • 지역 변수가 저장되는 곳.
  • 지역 변수(Local Variables) : 함수 내부에 선언된 변수.
Free Space

      Stack Address Space

Free Space

    ↑  Heap Address Space

힙 메모리

(Heap Memory)

 

  • 동적 변수가 저장되는 곳.
  • 동적 변수(Dynamic Variables) : 프로그램 실행 도중 필요에 의해 만든 변수

데이터 세그먼트

(Data Segment)

 

  • 전역 변수와 정적 변수가 저장되는 곳.
  • 전역 변수(Global Variables) : 함수 바깥에 선언한 변수.
  • 정적 변수(Static Variables) : 함수 실행이 끝나도 사라지지 않고 남아 있는 변수.

코드 세그먼트

(Code Segment)

 

  • 목적 코드 형태의 프로그램과 상수 데이터를 저장하는 곳.
  • 상수 : 컴파일 시에 이미 그 값이 알려진 값들
  • 다른 세그먼트와 달리
    프로그램이 시작할 때 코드 세그먼트는 운영체제에 의해 읽기 전용(Read Only)으로 표시된다. 

    따라서 프로그램 실행 도중에는 내용을 바꿀 수가 없다.

빈 메모리 공간을 사이에 두고 힙과 스택이 서로 마주보며 서로를 향해 자란다.

서로가 만나면 사용할 수 있는 메모리인 가용 메모리(Free Memory)가 소진된다.

그 경우 운영체제는 더 이상의 메모리가 없다는 메시지를 내보내고 실행을 멈춘다.

'이전 글' 카테고리의 다른 글

[코딩 연습/C] 5일차 (026~035)  (0) 2019.05.10
[코딩 연습/C] 4일차 (021~025)  (0) 2019.05.08
[코딩 연습/C] 3일차 (011~020)  (0) 2019.05.07
[코딩 연습/C] 2일차 (006~010)  (0) 2019.05.06
[코딩 연습/C] 1일차 (001~005)  (0) 2019.05.05