이번에는 컴퓨터의 메모리에 대해 조금 더 자세히 알아보자. 컴퓨터의 메모리 구조를 그림으로 간략하게 표현하면 아래와 같다.(물론 실제 메모리의 물리적인 모습은 훨씬 복잡하다.)
맨 위(레지스터) 부터 천천히 알아보자.
- 레지스터 : 메모리 구조의 가장 상단 부분이며, 접근 속도가 "매우" 빠르다. 하지만 용량이 매우 적다. 그리고 엄청엄청 비싸다.(구글에 가격을 쳐 보면 자세히 나온다. 같은 용량의 레지스터와 하드 디스크의 가격 차이는 정말 어마어마하다.) 여기서 말하는 접근 속도란 CPU에서 레지스터의 접근 속도이다.
- 캐시 : 컴퓨터 메모리 구조에서 중요한 부분중 하나이다. 캐시는 보통 L1캐시(KB), L2캐시(MB)로 나뉘고, 또 I-cache(instruction을 담는 캐시), d-cache(데이터를 담는 캐시)로 나뉜다. 이렇게 나뉘는 이유는 캐시 또한 레지스터 못지 않게 접근 속도가 빠른 반면, 저장할 수 있는 용량이 작기 때문에 캐시를 나눴다. RAM과 레지스터 사이에 캐시를 두는 이유는 빠른 속도와 큰 용량간의 균형을 유지하기 위해서이다. 즉, 레지스터에서 처리하기엔 너무 큰 용량이고, RAM에서 처리하기엔 충분한 용량이지만 RAM은 레지스터보다 접근 속도가 현저히 느리다. 즉, 이 부분을 상쇄하기 위해 생겨난것이 캐시이다.
- 메인 메모리인 RAM(랜덤 액세스 메모리)는 컴퓨터가 실제 작업을 처리하는 곳이다(GB). 여기에는 현재 실행 중인 프로그램과 그 프로그램이 필요로 하는 데이터가 들어있다. CPU가 작업을 수행할 때 RAM에서 데이터를 읽고 쓰며 작업을 진행한다. 또한 RAM은 CPU와 직접적으로 소통하면서 데이터를 빠르게 전달하는 역할을 한다. 이 말은 CPU가 빠르게 RAM에 있는 정보에 접근하여 작업을 처리한다는 것이다. CPU가 RAM의 데이터를 빠르게 접근할 수 있어야 성능이 좋아지는데, 이를 위해 캐시가 중요하게 사용된다.
- 하드 디스크 : 우리가 흔히 알고 있는 CD, USB등등이 하드 디스크이다. CPU에서 접근 속도가 매우매우 느리다. 하지만 용량이 매우 크고, 용량당 가격이 훨씬 저렴하기 때문에 많은 용량 저장을 필요로 할때는 하드 디스크는 좋은 선택지이다.
캐시(SRAM)은 byteAddressable한 자료를 가질 수 있는데, 이는 컴퓨터가 메모리에 저장된 데이터를 하나의 바이트 단위로 주소 지정하여 읽거나 쓸 수 있다는 뜻이다. 0과 1로 표현되는 비트 단위의 데이터를 처리하는 컴퓨터는 이러한 byteAddressable한 형태로 데이터를 다루기 때문에, 이 형식이 아닌 데이터를 가져오려면 더 많은 비용이 든다.
SRAM은 해시 테이블과 비슷한 개념이다. 해시 테이블은 특정 요소를 빠르게 가져오는 데 유용한데, SRAM 역시 주소를 통해 데이터를 빠르게 가져올 수 있어서 접근 시간이 빠르고, 이는 O(1)의 시간복잡도 이다. 그러나 byteAddressable이 아닌 다른 형태의 데이터에 접근하기 위해서는 연결 리스트와 같이 순회하면서 데이터를 찾아야 해서 시간이 더 오래 걸린다. 이는 O(n)의 시간복잡도를 갖게 된다.
그러면 메모리는 어떻게 저 아래있는 데이터를 cpu까지 가져올까? CPU의 영역에는 레지스터, 캐시, 메인 메모리 모두가 있다.예를들어, 우리가 원하는 데이터가 usb에 있다고 해 보자. 컴퓨터에 usb를 꽂고, 컴퓨터에게 usb에 있는 문서를 읽어오라고 시킨다면, 먼저 CPU에서 원하는 메모리를 찾으려고 할것이다. 그러면 위 그림에서처럼 아래로 한단계씩 내려간다. 먼저 레지스터에 원하는 데이터가 있는지 확인하고, 없으면 캐시로 내려가서 확인하고(이때, 캐시에 원하는 메모리가 있으면 그것을 캐시 히트(cache hit)이라고 하고 없으면 캐시 미스(cache miss)라고 한다. 우리가 원하는 데이터는 결국 하드 디스크에 있으므로 하드 디스크가 있는 레벨까지 계속 내려간다. 하드 디스크에서 원하는 데이터를 찾으면 한단계씩 위로 데이터를 복사한다.(여기서 중요한 점은, 데이터를 '옮긴다'는게 아니라 '복사' 해서 위로 올린다. 결국 레지스터 레벨까지 복사가 되면, 마침내 CPU는 원하는 데이터를 읽어오는것이다.(여기서 알 수 있듯, 데이터가 아래에 있으면 있을수록 해야되는일은 더 많아진다.)
마지막으로, 이건 그냥 알아두면 좋은 지식인데, 메인 메모리를 포함한 그 위쪽은 Volatile이라고 불리우고, 그 아래는 non-volatile 이라고 불리운다. 각각의 뜻은, volitale은 컴퓨터를 종료하면 안에 있던 모든 데이터가 컴퓨터 종료와 동시에 사라진다는 뜻이고, 컴퓨터를 다시 켜면 텅 빈 상태로 다시 시작된다. 반대로 non-volitale은 컴퓨터를 종료해도 데이터는 안에 그대로 남아있는다.
'컴퓨터 구조 + 운영체제(OS)' 카테고리의 다른 글
운영체제 pt 1. 운영체제(Operating System)의 기초(System call) (0) | 2024.01.18 |
---|---|
캐시 일관성(Cache coherence) (1) | 2023.12.05 |
병렬 컴퓨팅(Parallel Computing) (0) | 2023.12.04 |
가상 메모리(Virtual Memory)와 TLB 의 개념 (1) | 2023.11.30 |
컴퓨터 캐시의 동작 과정 (0) | 2023.11.29 |