메모리와 레지스터

Seyeon Ko·2020년 9월 26일
4

컴퓨터 구조

목록 보기
1/1

RAM:Random Access Memory

초기의 컴퓨터는 Memory에 들어있는 정보를 바로바로 꺼내 쓰기 어려웠다.
그 이유는 그 당시 컴퓨터의 설계 특성상 메모리의 특정 위치에 바로바로 접근할 수 없었기 때문이다.
메모리의 위치들을 M[0]~M[100]까지 나타내었다고 하자.
예를 들자면 초기의 컴퓨터는 M[78]에 접근하기 위해서는 M[0],M[1],M[2],...,M[77],M[78] 같이 일련의 과정을 거쳐야 했다.(직선식 배치)
그러나 현재의 컴퓨터는 M[78]이라는 위치에 위의 과정 없이 바로 접근할 수있다.(행렬식 배치를 통해 특정 행과 열에 전기신호를 주면 특정 위치에 접근할 수 있는 식이다.)
즉,RANDOM하게 메모리에 접근할 수 있다는 뜻이다.

Register

레지스터는 CPU의 데이터 처리 속도를 높이기 위해 도입되었다.
CPU의 데이터 처리 속도에 큰 영향을 미치는 요소 중에 하나가, 바로 Memory access time이었다. CPU가 메모리에 직접 접근해서 데이터를 꺼내오는 것이 상당한 시간을 소요했던 것이다.

그래서 나온것이 레지스터이다.
메모리가 슈퍼마켓이라면, 레지스터는 냉장고이다.

CPU가 원할 데이터를 메모리에서 미리 꺼내서 레지스터에 저장해 둔다.
(슈퍼마켓에서 장을 봐서 미리 냉장고에 재료들을 준비해둔다.)

CPU가 원할 때마다 레지스터에서 데이터를 꺼내고 처리한다.
(요리사가 원할 때마다 냉장고에서 재료들을 꺼내고 요리한다.)

최대 인식 가능 메모리 용량과 레지스터 크기의 관계

32bit CPU는 최대 4GB RAM 밖에 인식하지 못한다고 한다. 왜 그런지 알아보자.

32bit CPU는 CPU안에 있는 레지스터의 크기가 32bit라는 말이다.

이 32bit 짜리 레지스터에는 CPU에 필요에 따라 정수형 데이터 ex)0x00000004가 저장될수도 있고, 필요에 따라 메모리 주소값 ex)0x48615135 이 저장될수도 있다.

어쨌거나 32bit 레지스터는 32bit이하의 데이터만 저장 가능하므로, 만약 저장하려는 메모리 주소가 32bit 이상이라면, 그 메모리 주소는 이 레지스터에 저장할 수 없다.

즉,
1)32bit CPU는 32bit 크기의 레지스터를 가지고 있음,(CPU안 레지스터의 수는 여러 개)
2)32bit의 레지스터에는 32bit이하의 데이터만 저장가능
3)따라서 32bit 초과 메모리 주소는 저장 불가능=인식 불가능

이제 우리는 32bit CPU는 최대 32bit까지의 메모리 주소만 기억할수 있다는 것을 알았다.
이제 최대 인식 가능 메모리 용량이 4GB 라는 건 어떻게 나온 것인지 알아보자.

메모리는 기본적으로 한 주소당 8bit=1byte의 데이터를 저장하고 있다.
그러므로, 메모리의 용량=메모리 주소 개수 * 1byte 이다.

아까 우리는 32bit CPU는 최대 32bit 까지의 메모리 주소만 기억할수 있다고 했다.
따라서 최대 인식 가능 메모리 용량= 2^32 1byte=4 2^30*byte= 4Gbyte이다.(G=2^30)

추가내용

초기의 컴퓨터 CPU인 intel8080은 8bit 레지스터를 가진 8bit-CPU였다.
하지만 intel8080은 16bit 메모리 주소를 표현할수 있었다.
어떻게 그게 가능했을까?
해답은 바로 현대의 32bit-CPU처럼 레지스터 하나만 이용해 메모리 주소를 저장한것이 아니고,
레지스터 2개를 한쌍으로 묶어서 그 한 쌍에 메모리 주소를 저장하는 방식이었다.
intel8080은 총 7개의 8bit레지스터를 가지고 있었는데, 8bit 레지스터 두개를 한쌍으로 묶어 마치 16bit 레지스터 처럼 사용하여 16bit 메모리주소를 저장한 것이다. (이러한 레지스터쌍이 3쌍 있었다.)

RISC-V와 레지스터

risc-v은 레지스터들을 조작할 수 있는 명령어들을 가진 명령어 집합의 한 종류이다.

명령어의 예시를 들면,
1)레지스터A에 다른 레지스터B의 값을 저장하는 명령
2)레지스터A가 가지고있는 값과 레지스터B가 가지고 있는 값을 더한 결과값을 레지스터C에 저장하는 명령
3)레지스터A가 가지고 있는 메모리 주소값에 접근해 메모리에 들어있는 데이터를 가져와서 레지스터 B에 저장하는 명령
4)레지스터 A가 가지고 있는 값과 레지스터B가 가지고 있는 값을 비교하는 명령
5)...
등등 여러가지 명령어들이 있다.

이 명령어 안에는 어떤 레지스터를 조작할 것인지 알려주기 위해 레지스터의 주소값이 들어있고, 이 명령어가 어떤 목적의 명령어인지 알려주는 opcode등 여러 값들도 함께 들어있다.
이미지 출처: https://inst.eecs.berkeley.edu/~cs61c/resources/su18_lec/Lecture7.pdf
위에가 바로 risc-v의 명령어의 포맷인데, risc-v의 경우, 명령어의 크기를 32bit로 설정하였음을 알수 있다. 이 명령어의 경우 레지스터의 주소값을 3개 받았다.이 안에 rs2,rs1,rd가 다 레지스터의 주소값들이다.
이미지 출처: https://inst.eecs.berkeley.edu/~cs61c/resources/su18_lec/Lecture7.pdf
위는 각각 몇 비트로 이루어져 있는지 나타낸 것이다. 위에서 알수 있듯이 risc-v는 레지스터 하나의 주소값의 크기를 5bit로 설정하였다.

profile
ㅎㅎ

0개의 댓글

관련 채용 정보