목차
- RAM의 특징
- RAM의 종류
- 물리 주소와 논리 주소
- 물리 주소와 논리 주소의 변환
- 메모리 보호
- 캐시 메모리
주기억 장치의 종류에는 크게 RAM과 ROM 두 가지가 있고,
'메모리' 라는 용어는 그 중 RAM을 지칭하는 경우가 많다.
RAM의 특징
- 전원이 꺼지면 저장된 내용을 잃어버린다.
- 실행할 대상을 저장한다.
- 휘발성 저장장치
"RAM이 크면 뭐가 좋을까?", "RAM의 용량은 컴퓨터 성능에 어떤 영향을 미칠까?"
- CPU가 한번에 여러 개의 프로그램을 동시에 실행할 수 있는 성능이 올라간다.
- 새로운 프로그램을 실행할 때 마다 보조기억장치로부터 램에 복사해서 가지고오기 때문이다.
- 많은 프로그램들을 동시에 실행하는 데에 유리하다.
예시
책장에서 책을 왔다갔다 가져올 필요 없이 책상이 크다면 필요한 책들을 한번에 다 가져와서 읽을 수 있다.
반대로 메모리(책상)이 작다면 필요한 책이 있을 때마다 책장(보조기억장치)을 자주 들락거려야 할 것이다.
RAM의 종류
- DRAM
- SRAM
- SDRAM
- DDR SDRAM
1. DRAM(Dynamic RAM)
- 저장된 데이터가 동적으로 사라지는 RAM
- 전원에 연결되어 있어도 데이터가 점점 사라진다.
- 데이터 소멸을 막기 위해 주기적으로 재활성화(Refresh) 해야한다.
"그럼 이거 누가 써요?"
- 일반적인 메모리로 사용되고 있는 RAM이다.
- 상대적으로 소비전력이 낮고 저렴하고 집적도가 높아 대용량으로 설계하기 용이하기 때문!
2. SRAM(Static RAM)
- 저장된 데이터가 정적인 (사라지지 않는) RAM
- DRAM 보다 일반적으로 더 빠름(입출력 속도)
- 물론 전원이 꺼지면 날라간다!!
- 일반적으로 캐시 메모리에서 사용되는 RAM
- 상대적으로 소비전력이 높고 가격이 높고 집적도가 낮다..
- "대용량으로 설계할 필요는 없으나 빨라야 하는 장치" 에 사용
차이점을 한눈에 살펴보자
DRAM | SRAM | |
재충전 | 필요함 | 필요 없음 |
속도 | 느림 | 빠름 |
가격 | 저렴함 | 비쌈 |
집적도 | 높음 | 낮음 |
소비 전력 | 적음 | 높음 |
사용 용도 | 주기억장치(RAM) | 캐시 메모리 |
3. SDRAM(Synchronous DRAM)
- 특별한(발전된 형태의) DRAM
- 클럭 신호와 동기화된 DRAM
- Single Data Rate(1차선)
4. DDR SDRAM(Double Data Rate SDRAM)
- 특별한(발전된 형태의) SDRAM
- 최근 메모리로써 가장 대중적으로 사용하는 RAM
- 대역폭을 넓혀 속도를 빠르게 만든 SDRAM
- 주고 받는 속도 주고받는 데이터의 양을 더 많이 만듬!
- SDRAM보다 대역폭이 2배 넓다
- Double Date Rate(2차선)
참고
- DDR2 SDRAM(Double Data Rate SDRAM), 3, 4도 있다..
메모리의 주소 공간
Q. "CPU와 실행 중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까요?"
A. 알 수가 없다. CPU와 실행 중인 프로그램은 메모리에 몇 번지에 무엇이 저장되어 있는지 다 알지 못한다.
메모리에 저장된 값들은 시시각각 변하기 때문이다.
- 매번 새롭게 실행되는 프로그램은 새롭게 메모리에 적재
- 실행이 끝난 프로그램은 메모리에서 삭제
- 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소는 달라짐
물리 주소와 논리 주소
물리 주소
- 메모리 입장에서 바라본 주소
- 말 그대로 정보가 실제로 저장된 하드웨어상의 주소
논리 주소
- CPU와 실행 중인 프로그램 입장에서 바라본 주소
- 실행 중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소
물리 주소와 논리 주소의 변환
그렇다면 물리 주소와 논리 주소 간의 변환은 어떻게 이루어질까?
MMU(메모리 관리 장치) 라는 하드웨어에 의해 변환
- 논리 주소와 물리 주소 사이의 변환을 이루어주는 장치이다.
- 논리 주소와 베이스 레지스터(기준 주소) 값을 더하여 논리 주소를 물리 주소로 변환
베이스 레지스터
- 프로그램의 가장 작은 물리 주소(프로그램의 첫 물리 주소)를 저장하는 셈
논리 주소
- 프로그램의 시작점으로부터 떨어진 거리인 셈
"프로그램 A의 논리주소 100번지를 삭제해주세요! "라는 말은
"기준 주소(15000)로 부터 100 만큼 떨어진 곳을 삭제해주세요! " 와 같다.
그래서 15100 번지가 삭제되는 것
메모리 보호
Q. "이런 명령어는 실행되어도 안전할까?"
A. 안된다! 메모리의 논리주소는 0 ~ 999 번지이기 때문이다.
베이스 레지스터에는 1000이 담기고 논리 주소(1500) 더한다면 결국에는 2500 번지(브라우저)에 저장될 것이다.
한계 레지스터
프로그램의 영역을 침범할 수 있는 명령어의 실행을 막음
베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면,
한계 레지스터는 논리 주소의 최대 크기를 저장
베이스 레지스터 값 <= 프로그램의 물리 주소 범위 < 베이스 레지스터 + 한계 레지스터 값
정리
이처럼 CPU는 메모리 접근하기 전
접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 항상 검사
캐시 메모리
CPU가 메모리에 접근하는 시간은 CPU 연산 속도보다 느리다.
CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위한 저장 장치
저장 장치 계층 구조(Memory hierarchy)
- CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
- 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.
레지스터 vs 메모리(RAM) vs USB 메모리
CPU와 가장 가까운 레지스터(접근시간이 제일 빠르고 비싸다)
메모리는 USB보다 접근시간이 가깝고 상대적으로 USB보다 비싸다.
정리
낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도는 감수해야 하고,
빠른 속도의 저장 장치를 원한다면 작은 용량과 비용을 감수해야 한다.
캐시 메모리
- CPU와 메모리 사이에 위치한, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치
- CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생
- "CPU가 매번 메모리에 왔다 갔다 하는 건 시간이 오래 걸리니, 메모리에서 CPU가 사용할 일부데이터를 미리 캐시 메모리로 가지고 와서 쓰자"
예시
- 메모리에 접근 - 물건을 사러 가는 것
- 메모리 - 물건은 많지만 집과는 멀리 떨어져 있어 왕복이 오래 걸리는 대형 마트
- 캐시 메모리 - 물건이 많지는 않아도 집과 가까이 있는 편의점
계층적 캐시 메모리(L1 - L2 - L3 캐시)
- 일반적으로 L1 캐시와 L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 위치해 있다.
- 같은 내부에 캐시 메모리가 있지만 레지스터가 저장 장치 계층 명제에 따라 레지스터가 더 빠르다.
참조 지역성의 원리
CPU가 사용할 법한 데이터를 예측하는 방법, 참조 지역성의 원리
- 캐시 메모리는 메모리보다 용량이 작다
- 당연하게도 메모리의 모든 내용을 저장할 수는 없다.
그렇다면 뭘 저장해야 할까?
CPU가 자주 사용할 법한 내용을 예측하여 저장
- 예측이 들어맞을 경우(CPU가 캐시 메모리에 저장된 값을 활용할 경우) = 캐시히트
- 예측이 틀렸을 경우(CPU가 메모리에 접근해야 하는 경우) = 캐시 미스
캐시 적중률
캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
캐시 적중률을 높여야 한다! == CPU가 사용할 법한 데이터를 잘 예측해야 한다!
참조 지역성의 원리?
CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리
- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. (변수를 선언하면 참조하게 되어있다.)
- CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다. (공간 지역성)
해당 포스팅에 나온 글과 이미지들은 강민철 저자님의 혼자 공부하는 컴퓨터 구조 + 운영체제의 책과 강의를 참고하여 만들어졌습니다.
책에서 보다 깊게 나오는 내용이 있으므로 한번 구매하고 보셔도 좋을 것 같습니다.
'CS' 카테고리의 다른 글
[CS] 입출력장치 (0) | 2024.05.23 |
---|---|
[CS] 보조 기억 장치 (0) | 2024.05.23 |
[CS] CPU의 성능 향상 기법 (0) | 2024.05.22 |
[CS] CPU의 작동 원리 (0) | 2024.05.22 |
[CS] 명령어 (0) | 2024.05.22 |