2024. 4. 23. 21:06ㆍComputer Science/컴퓨터 구조
1) 메모리(RAM) vs 저장장치(ROM)
메모리는 기억 장치입니다. 크게 휘발성 메모리인 RAM과 비휘발성 메모리인 ROM을 구분할 수 있습니다.
RAM은 Ramdom Access Memory의 약자로 컴퓨터가 꺼지면 데이터가 날아가는 휘발성인 대신, 속도가 빨라서 컴퓨터와 저장 장치사이에 존재합니다.
ROM은 Read Only Memory의 약자로 과거에는 읽기만 가능한 형태로 저장했기 때문에 이러한 이름이 붙여졌습니다. 점점 EPROM -> EEPROM -> Flash Memory 형태로 발전하면서 읽고 쓸 수 있게 되었음에도 비휘발성이라는 특성을 그대로 유지하고 있기 때문에 RAM과 대비해서 ROM이라고 통칭하기도 합니다. 우리는 혼란을 줄이기 위해 휘발성 메모리인 RAM을 그냥 메모리라고 부르고, 비휘발성 메모리인 ROM 계열은 Disk라고 부르겠습니다.
우리가 주로 '메모리' 라고 하는 것은 주기억장치로 RAM을 지칭합니다. 메모리가 왜 존재하는 지를 알아보기 전에 컴퓨터의 간단한 동작 원리를 짚고 넘어가겠습니다. 컴퓨터는 프로그램을 실행합니다. 프로그램을 실행하기 위해선 CPU가 명령어를 해석하고 연산해야 합니다. 따라서 명령어가 저장된 장치에서 하나씩 꺼내와야하기 때문에, 저장 장치가 필요합니다.
그럼 SSD, HDD 등 Disk라고도 불리는 저장 장치에서 명령어를 하나씩 꺼내면 되는데 메모리가 왜 필요한지에 대한 의문이 생깁니다. 비휘발성 메모리 특성상 빠르게 데이터를 읽고 쓸 수 없습니다. CPU의 성능이 4GHz라면, 초당 40억번의 clock 속도로 명령어를 연산해내는 반면에 Disk에서 명령어를 빼오는 속도는 매우 느리기 때문입니다. 따라서 이러한 속도 차이를 보완할 방법으로 탄생한 것이 바로 메모리 입니다.
메모리는 CPU와 Disk 사이에 존재하며 Disk의 명령어들, 즉 실행할 프로그램을 읽어와 미리 저장합니다. 메모리는 Disk와 구조 차이로 인해 데이터를 읽고 쓰는데 걸리는 시간이 상대적으로 적습니다. 따라서 CPU는 Disk에 접근하여 명령어를 읽어오는 대신, 메모리에서 읽어옴으로써 더 빠르게 연산을 할 수 있게 됩니다.
반대로 Disk없이 메모리만으로 모든 것을 저장하면 되지 않을까? 에 대한 답변은 아래와 같습니다.
메모리가 Disk에 비해 매우 비싸기 때문에 큰 용량을 만들면 그만큼 컴퓨터 가격도 비싸집니다. 비싼 컴퓨터는 많은 수요를 만들기 어렵습니다. 따라서, 컴퓨터는 저렴한 가격으로 속도를 높이는 방향으로 발전되어 왔으며, 다양한 크기의 메모리로 계층 구조를 만든 것도 이러한 이유 때문입니다. 메모리 크기의 한계로 커다란 프로그램을 실행시키기 위해서는 작은 단위로 쪼개서 메모리에 올려야 하는데, 이 과정에서 효율성을 높이기 위한 여러 알고리즘들이 존재하며 각 운영체제는 상황에 맞는 알고리즘을 채택하게 됩니다.
2) 메모리 계층 구조
위치 | 장점 | 단점 | 역할 | |
Disk (SSD, HDD) |
CPU 외부 | 용량이 매우 큼 비휘발성 가격이 쌈 |
매우 느림 | 실행할 프로그램들을 저장 |
메인 메모리 (DRAM) |
CPU와 Disk 사이 | 가격이 쌈 용량대비 크기가 작음 |
상대적으로 느림 | 실행중인 프로그램 저장 |
캐시 메모리 (SRAM) |
CPU와 메모리 사이 | 속도가 빠름 | 가격이 비쌈 크기대비 용량이 작음 |
최근에 실행한 프로그램 저장 |
레지스터 | CPU와 캐시 사이 (CPU 내부) |
속도가 매우 빠름 | 용량이 매우 작음 | 메모리 주소 저장 명령어 저장 연산 결과 저장 상태 저장 등 |
3) 메모리 동작 원리
삼성전자나 하이닉스가 만든 DRAM의 용량은 일반적으로 8GB 입니다. 그런데 최근 나온 게임들의 용량을 보면 10GB는 우습고 콜 오브 듀티 같은 고퀄리티 게임의 경우 100GB도 훌쩍 뛰어 넘습니다. 이렇게 하나의 프로그램이 메모리의 용량 보다 크면 컴퓨터는 해당 프로그램을 어떻게 실행시킬 수 있을까요? CPU는 어차피 명령어를 1 개씩 처리하는데, 애초에 해당 프로그램의 모든 명령어를 미리 메모리에서 저장하고 있을 필요가 있을까요?
여기서 나온 개념이 바로 가상 메모리입니다. 메모리에 모든 프로그램을 올릴 필요 없이, 작은 단위로 나누어 실행에 필요한 부분만 메모리에 올리는 개념이죠. 이는 모두 비싼 메모리로 인해 작은 사이즈의 용량을 사용하는 대신, 큰 메모리를 사용하는 것 같은 효과를 얻기 위함입니다. 가상 메모리에 대한 자세한 개념과 관련 알고리즘은 다음 포스팅에서 다루고, 여기선 실제 DRAM에 메모리를 읽고 쓰는 과정을 더 자세히 알아보겠습니다.
위 그림은 32bit 운영체제의 메모리 구조를 단순화한 모습입니다. 각 메모리 셀은 커패시터로 이루어져 있으며, 파란색은 1, 회색은 0을 의미합니다. 각각의 커패시터의 전압을 측정하여 충전이 되어 있으면 1, 방전되어 있으면 0으로 해석하는 방식입니다. 커패시터는 배터리와 같이 가만히 있으면 방전되기 때문에 주기적으로 전기신호로 충전을 해주어야 합니다.
혹시 메모리가 휘발성인 이유를 눈치채셨나요?
커패시터라는 간단한 구조로 인하여 메모리를 읽고 쓰는 데는 간편하지만, 전기 신호가 없으면 방전되는 특성이 메모리가 데이터를 영원히 저장하지 못하는 이유입니다.
메모리에 접근할 때는 주소를 참조해야 합니다. 32bit 운영체제의 32bit는 레지스터의 크기를 의미합니다. 레지스터는 메모리에서 명령어를 읽고 쓸 때 저장하는 buffer 입니다. 여기서 우리는 하나의 명령어 단위는 4 byte 크기를 가진다는 것을 알 수 있습니다. 레지스터는 명령어 말고도 주소를 저장하는 역할을 합니다. 32bit가 표현할 수 있는 숫자는 2의 32승이므로 약 43억개입니다. 따라서 32bit 운영체제의 메모리 최대 크기는 43억 * 1byte = 4GB 임을 계산할 수 있습니다.
메모리 단위는 왜 하필 1byte일까요? 1 bit나 명령어 단위인 4 byte로 바꾸면 어떤 문제가 생길까요?
만약 4GB의 메모리 단위가 1bit 라면 필요한 메모리 주소는 43억 * 8개가 됩니다. 이를 표현하기 위해 메모리 주소는 3개의 bit가 추가적으로 필요합니다. 그럼 레지스터를 두 개를 사용해야 되므로 별로 좋아보이진 않습니다.
또한, 영어 알파벳과 특수 문자를 표현하는 ascii 코드가 1바이트면 충분했기 때문에, 국제 표준으로 1바이트가 정해졌습니다. 따라서 모든 컴퓨터 부품 및 운영체제가 1 바이트 메모리에 맞게 아키텍처가 설계되었다고 합니다.
(4바이트 단위의 메모리를 만든다고 해도, 호환성이 없어서 아무도 사용하지 않겠죠)
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 캐시 메모리(Cache Memory)와 지역성(Locality) (0) | 2024.05.01 |
---|---|
[컴퓨터 구조] CPU / 명령어 사이클( Instruction Cycle ) (1) | 2024.04.18 |
[컴퓨터 구조] 명령어란? (0) | 2024.04.17 |
[컴퓨터 구조] 컴퓨터를 구성하는 요소 (0) | 2024.04.17 |