<aside> 💡 목차


</aside>

메모리의 특성

<aside> 💡 메모리의 특성


MIPS메모리는 32비트 단위로 고정되어있다

• 메모리는 데이터를 저장하는 공간입니다. 메모리는 컴퓨터의 데이터와 프로그램을 저장하는 장치입니다. 메모리는 일반적으로 휘발성 메모리와 비휘발성 메모리로 나눌 수 있습니다.

MIPS 메모리 모델은 메모리를 바이트 단위로 관리하며, 각 바이트는 32비트의 크기를 가지고 있습니다.


• 메모리에는 주소가 지정되어 있습니다.

책은 문자, 단어, 문장, 단락, 페이지 등으로 구성되어 있습니다. 페이지는 책의 주소에 해당합니다. 특정 페이지에 있는 내용을 읽으려면 해당 페이지 번호를 알아야 합니다.

메모리도 마찬가지입니다. 메모리는 데이터, 워드, 바이트 등으로 구성되어 있습니다. 워드는 메모리의 주소에 해당합니다. 특정 워드에 있는 데이터를 읽으려면 해당 워드 주소를 알아야 합니다.


• 메모리 주소는 고유해야 합니다.

컴퓨터의 메모리는 일반적으로 여러 개의 메모리 공간으로 나뉩니다. 각 메모리 공간은 다른 목적으로 사용됩니다.

예를 들어, 코드 메모리는 프로그램의 코드를 저장하고, 데이터 메모리는 프로그램의 데이터를 저장합니다.

메모리 공간은 독립적으로 작동합니다.

따라서 한 메모리 공간의 데이터를 다른 메모리 공간에 저장할 수 있습니다.

하지만 각 메모리 공간의 주소는 고유해야 합니다.


• MIPS 메모리에서는 주소가 4비트로 표현됩니다.

메모리 번지수는 메모리의 각 위치를 식별하는 데 사용되는 숫자입니다. 메모리 번지수는 고유해야 합니다. 즉, 같은 메모리 공간에 두 개의 동일한 번지수가 있을 수 없습니다.

MIPS 메모리 모델에서는 메모리 번지수가 4비트의 크기를 가지고 있습니다. 따라서 MIPS 메모리 모델은 2^4 = 16개의 메모리 위치를 지원합니다. MIPS 메모리 모델에서는 각 메모리 공간의 주소를 32비트(4바이트) 단위로 관리합니다.

</aside>

→ 메모리 공간과 메모리 주소 표현법

<aside> 💡 예시) 20층 아파트 = 메모리 공간

아파트 호실 = 메모리 주소


1️⃣20층이라는 자연수를 담을 2자리가 필요함

각 층은 주소를 나타내기 위해 두 자리 숫자로 번호가 매겨져 있습니다. 이는 컴퓨터의 메모리 주소가 일반적으로 이진수를 사용하여 표현되는 방식과 유사합니다.


2️⃣ 한 층마다 방의 개수가 99개 미만일터이니, 방 정보를 담을 자리 2자리가 필요함

각 호실은 한 층 내 호실번호를 나타내기 위해 두 자리 숫자로 번호가 매겨져 있습니다. 이는 데이터가 각각 고유한 주소를 가진 메모리 위치에 저장되는 방식과 유사합니다.

→ 20층짜리 아파트의 방들을 표현하기 위해 총 4자리가 필요함

$19층 2번째방 → \underline{1 9} \space \underline {0 2}$


이 비유에서는 20층 아파트 건물을 사용하여 단순화된 메모리 공간을 나타내고, 층과 방의 번호 지정 시스템을 사용하여 메모리 주소가 작동하는 방식을 설명합니다.

이 비유의 의도는 컴퓨터 아키텍처나 이진수에 익숙하지 않은 학생들이 메모리 주소 지정 및 컴퓨터 메모리의 데이터 저장 개념을 더 관련성이 높고 이해하기 쉽게 만드는 것입니다. 교수는 친숙한 실제 시나리오(아파트 건물)를 사용하여 메모리 주소 지정 개념을 단순화하고 메모리의 특정 데이터에 액세스하기 위해 주소를 지정하는 방법을 보여줍니다.

</aside>

→ 주소 지정 가능 메모리

<aside> 💡 CPU가 직접 주소 지정하거나 액세스할 수 있는 최대 메모리 양을 말함


MIPS를 포함한 대부분의 32비트 아키텍처의 경우 주소 지정 가능한 메모리는 $2^{32}$바이트입니다.

이는 CPU가 $2^{32}$개의 고유한 메모리 위치에 직접 액세스할 수 있으며 각 위치에는 1바이트의 데이터가 저장된다는 의미입니다.

</aside>

→ MIPS가 접근 가능한 메모리 주소 범위 🔥🔥🔥

<aside> 💡 MIPS 프로세서가 접근할 수 있는 주소 범위는 다음과 같다


16진수로 0x0000 0000 ~ 0xffff ffff 가 접근 가능한 주소 범위입니다

0x0000 0000 ~ 0xffff ffff 총 4,294,967,295 개의 조합이 있음
4bit 4bit 메모리 한칸당 4bit (1bytes)

즉, 메모리는 한칸당 1비트지만, MIPS에서 한번에 메모리를 읽을 수 있는 양인 워드가 32비트라 4바이트 단위로 주소를 지정할 수 있다

(1워드 = 4바이트 = 32비트)

MIPS는 32비트 CPU이기 때문에 메모리의 주소는 32비트로 표현됩니다.

<aside> 🔥 32비트 CPU, 64비트 CPU에서 말하는 비트는 결국 해당 컴퓨터(CPU) 가 한번에 읽을 수 있는 데이터의 양을 말하는거네!


32비트 컴퓨터에서 1워드는 32비트고 64비트 컴퓨터에서 1워드는 64비트다


이래서 32비트 컴퓨터는 램을 4GB $2^{32}$ 까지밖에 못썼구나…

64비트 컴퓨터의 램은 이론상 16EB $2^{64}$ 까지..

</aside>

</aside>

Addressing - 포인터를 어떻게 다룰 것인가?

<aside> 💡 Addressing : 포인터를 어떻게 다룰것인가?


변수에 값을 넣고 빼는건 어쨌든 포인터가 하는 일이더라…

MIPS에서 메모리에 접근할 때는 반드시 load/store 명령어를 사용해야 합니다. 즉, 다른 방법으로 메모리에 접근할 수 없습니다.


메모리에서 레지스터로 읽는 단위는 word (4byte) 입니다


MIPS는 단일 주소 지정 방식을 사용합니다. 단일 주소 지정 방식은 메모리 주소를 계산하기 위해 다음 식을 사용합니 레지스터의 값 + 16비트의 오프셋 = 메모리주소


Degenerate cases는 주소 지정 방식의 특수한 경우

Zero displacement -> register indirect addressing

오프셋이 0인 경우, 메모리 주소는 레지스터의 값과 같기 때문에, 레지스터 간접 주소 지정 방식으로 동작하게 됩니다.

lw $t1, 0($t0)

Register $0 -> 16 bit absolute addressing

레지스터 $0에는 항상 0이 저장되어 있기 때문에, 메모리 주소는 16비트 절대 주소로 간주됩니다.

lw $t0, 0($0)

</aside>

→ MIPS에서는 단일 주소 지정 방식을 사용합니다🔥

→ 메모리도 결국은 저장공간의 집합이다