카테고리 없음

메모리구조

20308박동진 2022. 8. 14. 22:39
컴퓨터 구조) 메모리구조

 

 

메모리(RAM)?

시스템의 단기 데이터 스토리지로, 정보에 빠르게 액세스할 수 있도록 컴퓨터가 실시간으로 사용하는 정보를 저장합니다.

, 명령, 자료 등을 저장하는 공간입니다.

운영체제(OS)를 구동할 때 사용되며, 프로그램이 작업을 수행하고 난 값을 저장하고, 읽기 등에 사용되기에 없어서는 안 될 존재입니다.

 

직접적으로 보기에는 해당 사진(RAM)과 같이 생겼지만 조금 더 깊게 들어가보면

 

해당 사진(메모리의 모습-)처럼 약간 사물함 모양처럼 생겼습니다.

각각 크기는 byte(바이트)로 한 번 더 나눠질 수 있는데 이는 bit(비트) 라고 합니다.

bytebit단위로 쪼개는 이유는 메모리를 더욱 효율적으로 사용하기 위함입니다.

 

메모리는 바이트 단위로 관리되지만 최소 단위는 비트라고 볼 수 있습니다.

 

해당 메모리가 저장할 수 있는 수의 범위는 비트 수에 따라 달라집니다.

1 bit = 0~1 까지

2 bit = 0~3 까지

3 bit = 0~7 까지

.....

즉 해당 비트 수에 따라 2^n(여기서 n은 비트수)만큼 저장을 할 수 있는겁니다.

 

 

메모리의 구조

프로그램이 시작되기 위해서는 먼저 프로그램이 메모리에 로드되어야 합니다.

또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하죠.

 

이 작업은 운영체제(OS)가 담당합니다.

프로그램의 작동을 위해 운영체제가 메모리(RAM)에 공간을 할당해주죠.

할당해주는 메모리 공간은 4가지(Code, Data, Stack, Heap)가 있습니다.

실행할 프로그램의 코드 (Code)

- 실행할 프로그램의 소스코드가 저장되는 곳으로 텍스트 영역이라고도 부릅니다.

- 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 지정됩니다.

- CPU가 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.

 

전역 변수, 정적 변수 (Data)

- 전역 변수와 정적 변수가 저장되는 곳입니다.

- 프로그램의 시작과 함께 할당되며, 프로그램 종료시 소멸됩니다.

- 초기화 된 변수 영역과 초기화 되지 않은 변수 영역으로 나뉘고, 그중 초기화 되지 않은 변수 영역은 BSS(Block Started by Symbol)이라고도 합니다.

 

사용자 동적 할당 (Heap)

- 사용자가 메모리를 직접 관리할 수 있는 영역입니다.

- 사용자에 의해 메모리 공간이 동적으로 할당되고 해제될 수 있습니다.

- Stack 영역과 같은 공간을 공유합니다.(아래 더 자세한 설명)

- Stack 영역을 침범하는 것을 HEAP OVERFLOW라고 합니다.

- 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.

 

지역 변수, 매개 변수 (Stack)

- 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.

- 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.

- 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라고 합니다.

가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.

- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.

- Heap 영역을 침범하는 것을 STACK OVERFLOW라고 합니다.

- Heap 영역과 같은 공간을 공유합니다.(아래 더 자세한 설명)

- 위의 그림처럼 Heap Stack은 같은 공간을 공유합니다.

- Heap 이 메모리 위쪽 주소부터 할당된다면, Stack은 반대로 아래쪽부터 할당되는 방식입니다.