[CS] 컴퓨터의 구조 - 메모리

이상혁·2023년 9월 14일
0

Computer science

목록 보기
6/15
혼자 공부하는 컴퓨터 구조 + 운영체제를 읽고 공부한 내용입니다.

메모리는 주 기억장치를 말한다.
메모리에는 ROM과 RAM이 있는데 주로 RAM을 지칭하기 때문에 RAM에 대해서 알아보겠다.

RAM의 특징과 종류

RAM의 특징

RAM에는 실행할 명령어와 데이터가 저장이 된다.
RAM은 전원이 공급이 되지 않으면 저장된 명령어와 데이터가 날아가는 휘발성 저장장치이다.
반면, 많이 사용하는 하드 디스크나 USB는 전원이 공급 되지 않아도 저장한 내용이 유지되는 비휘발성 저장장치이다.
비휘발성 저장장치는 대표적을 위에서 언급한 하드디스크나 USB 같은 보조 기억장치이다.

보조 기억장치는 CPU가 접근을 하지 못 하기 때문에 주로 보관할 대상을 저장을 하고
주 기억장치인 RAM에는 실행할 대상을 저장을 한다.
프로그램을 실행을 하면 보조 기억장치에서 메모리로 복사하여 저장을 한 뒤 실행이 된다.

RAM의 용량과 성능

RAM의 용량은 컴퓨터의 성능의 영향을 미친다.
만약 RAM의 용량이 작다면 다른 프로그램을 실행할 때 보조 기억장치에 계속 접근을 해야 하고
이는 속도가 걸리는 일이다.

하지만 RAM의 용량이 크다면 프로그램들을 미리 저장해 두고 보조 기억장치의 접근하지 않고 바로 실행이 될 수 있다.
이는 속도가 증가할 것이다.

하지만 일정 부분 용량이 커지면 용량의 비해 속도는 증가하지 않는다.
10개의 프로그램을 담을 수 있는 RAM의 속도와 5개를 담을 수 있는 RAM의 각각 2개의 같은 프로그램이 들어있다면
둘 다 충분한 용량을 가지고 있디 때문에 속도는 같을 것이다.

RAM의 종류

RAM의 종류에는 DRAM, SRAM, SDRAM, DDR SDRAM이 있다.

DRAM은 시간이 지나면 데이터가 점차 사라지는, 동적으로 변하는 RAM이다.
그래서 일정한 주기에 데이터를 다시 활성화 해주어야 한다는 단점이 있다.

하지만 소비 전력이 비교적 낮고, 저렴하고 집적도가 높기 때문에 대용량으로 설계하기가 좋다.

SRAM은 저장된 데이터가 변하지 않는 RAM이다.
DRAM가 달리 시간이 지나도 데이터가 사라지지 않는다.
그리고 속도 더 빠르다.

하지만 DRAM보다 소비 전력도 높고, 비싸고 집적도가 떨어진다.
그래서 대용량으로 만들 필요가 없는 캐시메모리에 많이 쓰인다.

SDRAM은 클럭 신호와 동기화된 DRAM이다.
클럭 신호와 동기화가 되었다는 것은 클럭 타이밍에 맞춰 CPU와 정보를 주고 받을 수 있다는 것이다.
즉, 클럭에 맞춰 동작을 하며 클럭마다 CPU와 정보를 주고 받는 DRAM이다.

DDR SDRAM은 SDRAM에서 대폭역(데이터를 주고 받는 길의 너비)를 의미한다.
SDRAM보다 2배 크기에 대폭역을 가지고 있다.

메모리의 주소 공간

물리 주소와 논리주소

CPU와 실행 중인 프로그램은 메모리에 몇 번지에 무엇이 저장되어 있는 지 알고 있지 못 한다.
왜냐하면 메모리에 저장이 된 정보는 시시각각 변하기 때문이다.
그래서 CPU와 실행 중인 프로그램은 물리 주소논리 주소를 이용한다.

물리 주소는 정보가 메모리 상 저장이 되어 있는 주소를 말한다.
논리 주소는 실행 중인 프로그램 각각에 부여된 0번지 부터 시작하는 주소를 말한다.

예를 들어
만약 A프로그램이 메모리 10번지부터 100번지까지 저장이 되어 있을 때
A프로그램의 물리 주소는 10번지부터 100번지가 되는 것이다.

그리고 CPU가 바라볼 때, A프로그램의 첫 시작인 10번지를 0번지로 바라보고
0번지부터 90번지까지 부여하는 주소가 논리 주소인 것이다.

좀 더 이해를 위해서 B프로그램을 추가 보자!

B프로그램은 A프로그램 다음 주소인 101번지부터 200번지까지 저장이 되어 있다.
그러면 B프로그램의 물리 주소는 101번지부터 200번지까지인 것이다.

그리고 마찬가지로 CPU가 바라볼 때 101번지에 0번지를 부여해서
논리 주소는 0번지부터 100번지까지이다.
즉, 논리 주소는 모든 실행 중인 프로그램에 시작 주소에 0번지를 부여한다.

그런데 CPU와 메오리가 서로 상호작용을 하기 위해서는 논리 주소와 물리 주소간의 변환이 이루어져야 한다.
논리 주소와 물리 주소는 CPU와 주소 버스 사이에 메모리 관리 장치MMU라는 하드웨어가 수행한다.

MMU는 베이스 레지스터에 저장한 프로그램의 물리 주소 시작점인 첫 번째 주소와 논리 주소를 더해서 물리 주소로 변환한다.
에시를 위해 위에 A프로그램을 다시 가지고 오자

A프로그램의 물리 주소의 시작 주소는 10번지이다.
이 10번지가 베이스 레지스터에 저장이 되어 있다.
그러면 CPU가 논리주소 20번지의 데이터에 관한 명령을 내리면
MMU 베이스 레지스터의 시작 주소와 CPU의 논리 주소를 더해서 물리 주소로 변환시켜 명령어르 실행한다.

메모리 보호 기법

위에서 논리 주로를 물리 주소 변환할 때 한 가지 문제점이 있다.
다시 예시를 가지고 와서 살펴보자

CPU가 100번지 데이터의 관한 명령을 내렸다고 해보자
이 논리주소를 물리 주소로 변환을 하면 110번지로 변환이 된다.
하지만 물리 주소를 보면 A프로그램의 물리 주소는 10번지부터 100번지까지이다.
110번지는 B프로그램이다.
즉, B프로그램이 영향을 받는 것이다.

이를 보호 하기 위해서 사용하는 레지스터가 한계 레지스터이다.
한계 레지스터에는 논리 주소의 최댓값 즉, 논리 주소의 마지막 주소가 담긴다.
그래서 CPU가 명령어를 내릴 주소가 이 한계 레지스터의 값보다 크면 인터럽트를 발생한다.

과정을 정리하면 CPU가 메모리에 접근을 하고자 하면 먼저 MMU를 거쳐 한계 레지스터 값과 비교를 하고
주소가 한계 레지스터의 값보다 크면 인터럽트를 발생하고
작으면 베이스 레지스터의 값과 더해서 메모리의 물리 주소로 접근을 한다.
이렇게 실행 중인 프로그램의 독립적인 공간을 확보하고 다른 프로그램을 침범하거나 침범 당하지 않게 해준다.

캐시 메모리

CPU는 프로그램을 실행하면서 빈번하게 메로리에 접근을 하게 되는데
메모리에 접근하는 시간이 CPU가 연산을 하는 시간보다 느리다.
이를 극복하기 위해서 있는 저장 장치가 캐시메모리이다.

저장 장치 계층 구조

컴퓨터가 사용하는 저장 장치들이 CPU를 기준으로 얼마나 가까운가를 계층적으로 나타내는 것이 저장 장치 계층 구조이다.
위로 올라 갈 수록 CPU에 가깝고 빠르고 용량이 작다.

캐시 메모리

캐시 메모리는 CPU와 메모리 사이에 있고 레지스터보다 용량이 크고 메모리보다 속도가 빠르고 SDRAM기반의 저장 장치 이다.
캐시 메모리는 메모리의 접근 속도를 조금이나 줄이기 위해 만들었다.
메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리를 가지고 와 활용하는 것이다.

캐시 메모리도 여러 개의 캐시 메모리가 있다.
CPU와 가까운 순서로 L1 캐시, L2 캐시, L3 캐시 라고 부른다.
용량은 L3 > L2 > L1 순이고
속도는 L1 > L2 > L3 순이다.

CPU가 데이터가 필요하다면 먼저, L1을 찾아 본다.
그리고 L1에 없다면 L2, L3순으로 데이터를 찾는다.

L1과 L2는 코어마다 고유하게 가지고 있고 L3는 여러 코어가 공유를 하고 있다.
이 보다 더 나아가서 L1 캐시는 데이터 L1 캐시, 명령어 L1 캐시로 나눌 수 있다.

참조 지역성 원리

여기서 한 가지 의문은 캐시는 메모리의 모든 내용을 저장할 수 없는데
무엇을 캐시 메모리의 저장을 하는가에 대한 것이다.

캐시 메모리는 CPU가 사용할 법한 대상을 예측해서 저장을 한다.
자주 사용할 것이라고 예측한 데이터가 실제로 맞아 CPU에서 활용이 될 경우 캐시 히트라고 한다.
에측이 틀려서 메모리로 접근을 해야 하는 경우는 캐시 미스라고 한다.
캐시가 히트가 되는 적중률을 캐시 적중률이라고 한다.

캐시 메모리는 한 가지 원칙을 가지고 메모리에서 가져올 테이터를 결정한다.
이 원칙이 참조 지역성의 원리이다.

CPU는 최근에 접근을 했던 메모리 공간에 접근하려는 경향이 있는데 이를 시간 지역성이라고 한다.
보통 프로그램은 한 메모리 공간에 모여 있는데 접근한 메모리 공간 근처를 접근하려는 경향을 공간 지역성이라고 한다.

캐시 메모리는 시간 지역성과 공간 지역성을 바탕으로 CPU가 사용할 만한 데이터를 예측한다.

profile
개발 공부 하기 위해 만든 블로그

0개의 댓글