본문 바로가기

메모리

1. 하드웨어로 본 메모리

 

우리가 메모리 공간이라고 부르는 것의 실체는 메모리 IC다.

크게 ⒜RAM과 ⒝ROM으로 나뉘고 RAM은 다시 ⒞SRAM과 ⒟DRAM으로 나뉜다. 

여러가지 종류가 있지만 기본적인 구조는 같다.

메모리 IC는 기본적으로 전원, 주소 신호, 데이터 신호, 제어 신호 등을 입출력하기 위한 

많은 핀을 갖는다. 여기서는 RAM을 예로 들겠다.

 

RAM(Random Access Memory): 읽기/쓰기가 모두 가능한 메모리

ROM(Read Only Memory): 읽기만 가능한 메모리
SRAM(Static RAM): 내용을 보존하기 위해 리프레시(refresh) 작업이 필요없는 RAM

DRAM(Dynamic RAM): 내용을 보존하기 위해 리프레시(refresh) 작업이 필요한 RAM

 

 

 

핀들은 기능에 따라 4가지로 분류할 수 있다.

 

① ⒠VCC, ⒡GND: 전원 공급

② A0~A9: 주소 신호

③ D0~D8: 데이터 신호

④ RD, WR: 제어 신호

 

VCC(Voltage of Common Collector): ⒢NPN형 트랜지스터의 ⒣컬렉터 전압을 나타낸다. 

                                                  IC에서는 보통 +5V.

GND(GrouND): 전압의 크기를 나타내기 위한 기준 전압. 보통 0V다.

             ,         예를 들어 +110V는 GND 보다 110V 높다는 의미다.

NPN형 트랜지스터(NPN transistor): 트랜지스터는 크게 접합형 트랜지스터와 전계효과 트랜지스터로 나뉜다.

                                                 접합형 트랜지스터는 NPN형과 NPN형으로 나뉘며,

                                                 이 때 N과 P는 각각 N형 반도체와 P형 반도체를 나타낸다.

컬렉터(collector): 접합형 트랜지스터는 세 개의 반도체가 접합된 구조로, 

                         각베이스(base), 이미터(emitter), 컬렉터(collector)라 부른다.

                                  

 

하나씩 보자.

 

① VCC, GND: 전원

 

VCC와 GND에는 전원이 공급된다(다른 핀에는 ⒤0과 1의 신호가 공급된다.

 

0과 1의 신호: 0V는 0으로, +5V의 직류 전압은 1로 나타낸다.

 

 

② A0~A9: 주소 신호

 

각 핀마다 0 또는 1의 신호가 공급되어 주소 값을 나타낸다.

위 예시의 경우 0000000000 ~ 111111111까지 총 1,024 개의 주소를 설정할 수 있다

따라서 이 메모리는 1,024B = 1KB짜리 메모리라고 할 수 있다.

 

 

③ D0~D7: 데이터 신호

 

각 핀마다 0 또는 1의 신호가 공급되어 데이터의 값을 나타낸다.

위 예시의 경우 데이터 핀이 8개이므로 한 번에 8비트, 

즉 1바이트씩 데이터를 입출력할 수 있다.

 

 

④ RD, WR: 제어 신호

 

각 핀마다 0 또는 1의 신호가 공급된다.

메모리로부터 데이터를 읽을 때는 RD(ReaD) 핀에 1(+5V DC)이 공급되고,

메모리로 데이터를 쓸 때는 WR(WRite) 핀에 1이 공급된다.

둘 다 0이면 읽기도, 쓰기도 불가능하다.

 

 

앞에서 예시로 든 1KB 짜리 메모리에 1바이트의 데이터를 쓰려고 한다고 해보자.

이를 위해 VCC에는 +5V, GND에는 0V의 전압이 걸리고 데이터를 쓸 주소를 A0~A9로 지정한다.

그리고 데이터 값은 D0~D7로 나타낸다. 마지막으로 WR 핀에 1을 공급한다.

이렇게 하면 메모리에 데이터가 써진다.

 

데이터를 읽는 경우에는 읽어낼 곳의 주소를 A0~A9로 지정한 후 RD에 1을 공급하면,

지정된 주소에 있던 데이터가 D0~D7에 의해 나타내어져 출력된다.

 

일반적인 PC에는 512MB(512,000KB) 이상의 메모리가 장착되어 있다. 

그렇다고 1KB 짜리 메모리가 512,000개 들어있는 것은 아니다. 

1KB 짜리 메모리에서 주소 핀이 하나 늘어나면 4048 개의 주소를 설정할 수 있지 않은가?

 

 

 

 

2. 프로그래머로서 본 메모리

 

사실 프로그래머가 IC의 전원이나 제어 신호까지 알 필요는 없다. 

때문에 메모리를 다음과 같이 이해해도 좋다.

 

 

 

그런데 이 모형은 자료형을 고려하지 않은 모형이다.

4바이트 데이터를 저장하려면 어떻게 해야 할까?

간단하다. 0000000011~0000000111과 같이 지정하면 된다.

이 때 ⒥바이트 오더에 따라 메모리에 저장되는 방법이 다르다.

 

 

 

바이트 오더(byte order): 시스템이 내부적으로 데이터를 표현하는 순서.

                                  보통 ⒦리틀 엔디언과 ⒧빅 엔디언 중 하나를 채택한다.

리틀 엔디언(little-endian): 데이터의 하위 바이트를 메모리의 하위 주소에 저장하는 방식.

빅 엔디언(big-endian): 데이터의 상위 바이트를 메모리의 하위 주소에 저장하는 방식.

 

 

 

 

 

 

 

 

 

 

'Programming > Basis' 카테고리의 다른 글

디스크 캐시  (0) 2019.03.10
프로그램이 실행되는 순서  (0) 2019.03.09
컴퓨터에서 소수를 표현하는 방법  (0) 2019.03.05
비트 연산  (0) 2019.03.04
컴퓨터가 2진수를 사용하는 이유  (0) 2019.03.03