본문 바로가기
CS/컴퓨터구조와운영체제

RAM의 특성과 종류

by cariño 2023. 6. 6.
728x90
반응형

1. RAM의 특성

 

RAM은 휘발성 저장장치로서 저장된 명령어와 데이터는 전원이 꺼지면 모두 날아간다.

  • 휘발성 저장 장치: 전원을 끄면 내용이 사라진다.
  • 비휘발성 저장 장치: 전원이 꺼져도 저장된 내용이 유지되는 저장 장치 (SSD, 하드디스크, CD ROM, USB)

CPU는 보조기억장치에 직접 접근을 하지못한다. 그래서 비휘발성 저장 장치에는 보관할 대상을 저장하고 휘발성 저장장치는 실행할 대상을 저장한다.

주기억장치의 종류에는 크게 RAM과 ROM 두가지가 있고 '메모리'는 RAM을 지칭하는 경우가 많다. 

RAM의 특징: CPU는 RAM (메모리)으로 부터 명령어를 갖고 와서 기억하고 있는 실행할 대상을 저장하고 실행한다. 

 

 

 

 

그렇다면  RAM이 크면 정확히 뭐가 좋은가?

보조기억장치에 프로그램 A,B,C가 저장되어 있고 RAM의 크기가 하나의 프로그램만 저장할 수 있는 크기일 때  CPU가 프로그램A를 사용 중에 프로그램B를 사용하고 싶어도 사용할 수 없게 된다. 

RAM을 통해서 프로그램을 실행시켜야 하는데 CPU가 한번에 여러개 프로그램을 동시에 실행할 수 있는 RAM저장 환경이 아니기 대문에 동시 실행을 할 수가 없게된다. 

 

반대로 RAM의 용량이 충분히 크다면 프로그램 A,B,C를 보조기억장치에서 여러 번 가져오고 빠르게 실행하는데 유리하다. 즉 CPU가 메모리에 있는 명령어를 가져와서 실행하는데 메모리가 작다면 동시에 여러 프로그램을 실행하는 것은 성능 향상에 불리하다.

 

 

 

2. RAM의 종류

 

  • DRAM (Dynamic RAM) :
    • 저장된 데이터가 동적으로 사라지는 RAM이다.
    • 전원에 연결되어 있으면 데이터가 점점 사라지기 때문에 데이터 소멸을 막기 위해 주기적으로 재활성화 해야한다.
    • 일반적으로 메모리로 사용되는 RAM
    • 상대적으로 소비전력이 낮고 저렴, 집적도(세밀하게)가 높아서 대용량으로 설계하기에 용이하다.   
  • SRAM (Static RAM) : 
    • 저장된 데이터가 사라지지 않는 RAM이다. DRAM보다 일반적으로 더 빠르다. 
    • 시간이 지날수록 소멸되는 DRAM과 반대되는 개념으로 전원이 연결되어 있다면 데이터가 사라지지는 않는다. 
    • 일반적으로 입출력 속도가 DRAM 보다 빠르지만 소비전력이 높고 집적도가 낮아서 대용량으로 설계할 필요가 없고 빠르게 저장해야 하는 장치에 사용한다 .
    • ex) 캐시메모리
  • SDRAM (Synchronous DRAM):
    • DRAM의 발전된 형태로 클럭신호와 동기화 된 RAM이다.
    • CPU의 클럭 신호와 동기화되어 한번에 하나씩 데이터를 주고 받을 수 있다.  
    • SRAM과 큰 상관이없다. 
    • Single Data Rate
  • DDR SDRAM ((Double Data Rate)
  • 특별한 SDRAM 가장 대중적으로 메모리로써 사용되는 RAM이다. 
  • 데이터 폭을 넓혀서 주고 받는 데이터의 양을 더 많이 만든다.
SDRAM vs DDR SDRAM

SDRAM: 한번의 하나씩 데이터를 주고 받을 수 있는 하드웨어로 클럭신호와 동기화 되어있다. 
SDRAM < DDR SDRAM < DDR2 SDRAM < DDR3 SDRAM < DDR4 SDRAM

대역폭은 데이터를 주고받는 길의 너비이다.
SDRAM은 1차선과 같은 모습으로 한번의 클럭속도에 맞춰 하나의 데이터와 주고 받는다면 DDR SDRAM은 차선의 너비를 2배로 넓힌 모습처럼 SDR의 대역폭에 두배의 모습으로 주고 받는 데이터의 양과 속도가 빠르다.


 

3. 메모리의 주소 공간

 

메모리 내에 주소 체계가 2가지가 있음

1. CPU와 실행중인 프로그램 입장에서 바라본 논리 주소

2. 메모리 내에 실제 하드웨어 번지내에  해당되는 물리 주소

 

 


 

GOAL

논리, 물리 주소가 무엇일까?
왜 이런식의 주소체계로 나눠서 관리를 하는 것인가?
어떻게 논리 주소를 어떻게 물리 주소로 변환하는가?

 

1. 논리주소, 물리주소가 나뉘게 된 이유

 

메모리에 저장된 값들은 시시때때로 바뀌기 때문에 CPU와 실행중 프로그램은 메모리 몇 번지에 무엇이 저장되어 있는지 다 알지 못한다. 

- 새롭게 실행되는 프로그램은 보조기억장치로부터 새롭게 메모리에 적재된다. 

- 실행이 끝난 프로그램은 메모리에서 삭제된다. 

- 같은 프로그램이더라도 실행할 때마다 적재되는 주소가 달라진다. 

 

어떠한 프로그램과 명령어가 메모리에 있는지 일일이 알 수가 없다. 이러한 점을 극복하기 위해 논리, 물리 주소로 나뉘게 되었다. 

  • 물리주소
    •  메모리 입장에서 바라본 주소
    • 실제 정보가 저장된 하드웨어상 주소
  • 논리주소
    • CPU와 실행중인 프로그램 입장에서 바라본 주소
    • 실행 중인 프로그램 각각에서 0번지의 주소를 부여한다.

논리주소마다 0번지가 있다. 

논리주소에는 실행중인 각각의 프로그램에게 부여된 0번지라는 주소가 여러개 있다. 

반면에 하드웨어에는 0번지가 한개뿐이다. 뿐만 아니라 논리주소는 실행중인 메모리에 적재된 프로그램 하나하나에게  중복되는 주소가 계속해서 실행되는 프로그램에 부여될 수 있다. 즉 논리주소는 여러개 있을 수 있지만 물리주소는 겹치는 주소가 없다.

 

 

만일 CPU가 0번지의 메모리를 삭제하는 명령어가 실행된다면 논리 주소상에는 동일한 주소번지가 있기때문에 CPU가 메모리와 상호작용을 하려면 논리주소를 물리주소로 변환하는 과정이 있어야 한다. 

 

 

2. 물리주소와 논리 주소의 변환

MMU(메모리 관리 장치)라는 하드웨어에 의해서 변환된다.

 * CPU가 이해하고 실행하는 주소는 논리주소이다.

주소버스를 통해 메모리의 실제 메모리와 상호작용하는 CPU는 항상 MMU를 거치게 된다. 

주소버스를 통해 주소를 받아들일 때 MMU를 논리->물리를 통해서 변환을 이루게 해준다. 

 

MMU는 논리주소와 베이스레지스터 값을 더해서 물리주소로 변경시킨다. 

물리주소상의 프로그램 시작주소가 담긴 베이스레이스터로 부터 논리주소 요청한 주소번지를 더하면 주소 변환값을 이루게 된다. 

 

* 베이스레지스터: 프로그램의 시작주소가 담긴 (가장 작은 첫 물리주소) CPU 레지스터 중 기준 주소역할을 하는 레지스터

 

 

ex) 예를 들어 프로그램 A는 메모리 빨간영역 ( 1500번지 ~ 3만번지)의 영역을 갖고 있음 

베이스 레지스터 (=기준이 되는 주소)는 1500이된다.

논리주소는 기준 주소로 부터 100만큼 떨어진  주소의 삭제를 생각하면 된다.

 

논리주소 + 베이스레지스터 = 물리주소 

100 + 15000 = 15100

 

논리주소: 베이스레지스터로부터 떨어져 있는 주소

 

 

3. 메모리 보호

CPU에서 실행이 되면 안되는 명령어가 있음.

CPU에서는 1100번지를 삭제하라는 명령어를 실행할 때 논리주소 1100번지 + 베이스레지스터 2000 = 3100의 메모리 주소에는 다른 프로그램이다. 이렇게 다른 프로그램의 메모리를 침범를 침범할 수 있기 때문에 메모리를 보호해야한다. 

 

[한계 레지스터]

  • 프로그램의 영역을 침범할 수 있는 명령어의 실행을 막음
  • 베이스 레지서트가 실행 중인 프로그램의 가장 물리 주소를 저장한다면 한계 레지스터는 논리 주소의 최대 크기를 저장한다.
  • 베이스 레지스터 값 <= 프로그램 물리주소 범위 < 베이스레지스터 + 한계 레지스터 값

1000을 넘어가는 논리주소에 접근하려 하면 그 명령어를 막는다. 결론적으론 논리주소 안에서 실행되는 범위내에서만 실행할 수 있게 된다. 

 

 

ex) 베이스 레지스터 100, 한계 레지스터 150

-> 물리 주소 시작점: 100번지, 프로그램의 최대 크기(논리주소 최대 크기): 150

실제로 삭제할 수 있는  물리주소MAX는 250번지 이지만, CPU의 명령어는 300번지를 가리키고 있기에  CPU의 명령어는 막히게 된다.

 

다른 프로그램의 주소 공간이 침범되면 인터럽트가 발생한다. 

그렇지 않다면 베이스레지스터와 논리주소를 더해서 물리주소로 변환시킨 후 실제 메모리에 사용되게 된다. 

 

 

 


 

 

1. 캐시 메모리

 

 

[저장 장치 계층 구조 (Memory hierarchy) ]

CPU가 메모리에 접근하는 속도는 CPU 연산 속도보다 압도적으로 느리다. CPU에 얼마나 가까운지에 대한 기준으로 저장장치들은 계층적으로 나타낼 수 있다. 장단점에 맞게 해당 저장장치들을 대칭적으로 사용하게 된다. 

1. CPU와 가까운 저장장치는 속도가 빠르고 멀리있는 저장 장치는 느리다. 

2. 속도가 빠른 저장 장치는 저장 용량이 적고 비싸다. 

 

 

레지스터 vs 메모리(RAM) vs USB 메모리

CPU와 가장 가까운 레지스터는 일반적으로 램보다 용량이 적지만 접근시간이 제일 빠르고 비싸다.

램은 USB메모리보다 접근 시간이 훨씬 빠르지만 USB보다 비용이 훨씬 비싸다. 

 

낮은 가격대의 대용량 저장장치를 원한다면 상대적으로 느린 속도가 생각해야 한다. 빠른 속도의 저장 장치를 원한다면 적은 용량과 비용이 비싸다는 점을 생각해야 한다. 

 

 

 

캐시메모리란?

  • 메모리에서 CPU가 자주 사용할 법한 일부 데이터를 캐시 메모리로 가져와서 사용
  • CPU와 메모리 사이에 위치하고 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치이다. 
  • CPU의 연산 속도와 메모리 접근 속도 차이를 조금이나마 줄이기 위해서 생겨났다.
  • CPU가 매번 메모리를 주고 받는것에 시간소모를 절약시킨다. 

CPU가 메모리에 접근하는 것을 물건을 사러가는 것에 비유하자면

메모리는 용량이 캐시메모리에 비해 큰 부분은 집과는 멀리 떨어져서 왕복시간이 오래걸리는 대형마트로

캐시메모리는 메모리에비해 용량이 적지만 집과 가까운 편의점으로 생각할 수 있다.

 

 

 

계층적 캐시 메모리 

L1과 L2 캐시는 코어 내부에 있다.

멀티 프로세서의 캐시 메모리는  L1, L2는 각각의 코어에 들어가 있는 형태, L3는 각각의 코어가 공유하는 형태로 위치하고 

분리형 캐시는 L1캐시(가장 빠른 캐시메모리)에서 명령어만을 담고 있는 캐시: L1D, 데이터만을 담고 있는 캐시 등을 갖고 있다. 

 


 

캐시 메모리는 메모리보다 용량이 적기에 당연하게도 메모리의 모든 내용을 저장할 수가 없다. 

그렇다면 캐시메모리는 어떠한 메모리를 가져와서 저장할까?

 

CPU가 자주 사용할법한 메모리를 예측해서 미리 메모리에서 가져와야한다. 

CPU가 실제 해당 데이터를 사용했을 경우를 캐시 히트라고 한다. (메모리에 접근하는것보다 성능이 좋아짐)

예측이 실패한 경우를 캐시 미스라고 한다. 이럴 경우 다시 메모리에 접근해야 하기 때문에 성능이 하락된다. 

 

캐시 적중률: 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)

캐시 적중률이 높으면  메모리에 다시 갈 필요 없이 내가 원하는 메모리를 바로 사용할 수 있기에 성능이 높은것.

캐시 적중률을 높여야 한다 = CPU가 사용할 법한 데이터를 잘 예측해야 한다.  해당 원칙을 참조 지역성의 원리라고 한다. 

 

참조 지역성의 원리

 

  • CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. (변수가 저장된 주소공간을 다시 한번 참조)
  • CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다. (공간 지역성)

 

관련된 데이터들끼리 한데 묶인 상태

해당 기능이 묶여있는 곳을 집중적으로 참조 

접근한 메모리의 근처를 접근하려는 경향 

 

 

 

 

 

 

 

 

 

728x90

댓글