RAM
주기억장치 즉 메모리는 보통 RAM(Random Access Memory)을 지칭한다. 메모리는 현재 실행되는 명령어와 데이터를 저장하는 부품이다. 여기서 중요한 점은 전원을 끄면 RAM에 저장된 명령어와 데이터가 모두 날아간다는 것. 이 내용으로 알 수 있는 것은 RAM은 휘발성 저장 장치이다.
휘발성 저장 장치(volatile memory) : 전원을 끄면 저장된 내용이 사라지는 저장 장치를 말한다.
비휘발성 저장 장치(non-volatile memory) : 전원이 꺼져도 저장된 내용이 유지되는 저장 장치를 말한다. ex) 하드 디스크나 SSD, CD-ROM, USB 메모리와 같은 보조기억장치
→ 보조기억장치는 전원을 꺼도 내용을 유지하지만, CPU는 보조기억장치에 직접 접근하지 못한다. 그래서 일반적으로 보조기억장치인 비휘발성 저장 장치에는 ‘보관할 대상’을 저장하고, 휘발성 장치인 RAM에는 ‘실행할 대상’을 저장한다. CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 복사하여 저장한 뒤 실행한다.
RAM의 용량과 성능
CPU가 실행하고 싶은 프로그램이 보조 기억장치에 있다면 이를 RAM으로 가져와야 할 텐데, RAM 용량이 적다면 보조 기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어진다. 하지만 RAM 용량이 충분히 크다면 보조 기억장치에서 많은 데이터를 가져와 미리 RAM에 저장할 수 있다. 이처럼 RAM 용량이 크면 많은 프로그램들을 동시에 빠르게 실행하는 데 유리하다.
→ RAM 용량이 커지면 프로그램 실행 속도가 어느 정도 증가하는 것은 맞지만, 용량이 필요 이상으로 커졌을 때 속도가 그에 비례해 증가하지는 않는다.
RAM의 종류
DRAM(Dynamic RAM) | SRAM(Static RAM | |
---|---|---|
재충전 | 필요 | 필요 X |
속도 | 느림 | 빠름 |
가격 | 저렴함 | 비쌈 |
집적도 | 높음 | 낮음 |
소비 전력 | 적음 | 높음 |
사용 용도 | 주기억장치(RAM) | 캐시 메모리 |
DRAM(Dynamic RAM) : 일반적으로 메모리로써 사용되는 RAM이며, 저장된 데이터가 동적으로 변하는(사라지는) RAM을 의미한다. 즉, DRAM은 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이다. 그래서 DRAM은 데이터의 소멸을 막기 위해 일정 주기로 데이터를 재활성화(다시 저장)해야 한다.
→일반적인 메모리로써 사용되는 이유는 소비전력이 비교적 낮고, 저렴하고, 집적도가 높기 때문에 대용량으로 설계하기가 용이하기 때문.
SRAM(Static RAM) : 저장된 데이터가 변하지 않는 RAM을 의미. (SRAM도 전원이 공급되지 않으면 저장된 내용이 날아간다.)
SDRAM(Synchronous Dynamic RAM) : 클럭 신호와 동기화된, 발전된 형태의 DRAM. ‘클럭 신호와 동기화 되었다’는 말은 클럭 타이밍에 맞춰 CPU와 정보를 주고 받을 수 있음을 의미. 즉, SDRAM은 클럭에 맞춰 동작하며 클럭마다 CPU와 정보를 주고받을 수 있는 DRAM.
DDR SDRAM(Double Data Rate SDRAM) : 최근 가장 흔히 사용되는 RAM으로, 대역폭을 넓혀 속도를 빠르게 만든 SDRAM이다. 여기서 대역폭(data rate)은 ‘데이터를 주고 받는 길의 너비’를 의미. 대역폭이 두 배 넓은 SDRAM을 말한다.
대역폭은 흔히 자동차 도로에 비유 되고 한다. 한 클럭에 하나씩 정보를 주고받을 수 있는 SDRAM과 비교했을 때 DDR SDRAM은 너비가 두 배인 도로와 같다. 즉, 한 클럭에 한 번씩 CPU와 데이터를 주고받을 수 있는 SDRAM에 비해 DDR SDRAM은 두 배의 대역폭으로 한 클럭당 두 번씩 CPU와 데이터를 주고받을 수 있다. 당연하게도 DDR SDRAM의 전송 속도가 두 배 가량 빠르다. 이런 이유에서 한 클럭당 하나씩 데이터를 주고 받을 수 있는 SDRAM을 SDR SDRAM(Single Data Rate SDRAM)이라 부르기도 한다.
DDR2 SDRAM은 DDR SDRAM보다 대역폭이 두 배 넓은 SDRAM. 즉 너비가 네 배 넓은 도로와 같다.
DDR3 SDRAM은 DDR2 SDRAM보다 대역폭이 두 배 넓고, SDR SDRAM보다 대역폭이 여덟 배 넓은 SDRAM.
그리고 최근에 흔히 사용되는 메모리는 DDR4 SDRAM으로, SDR SDRAM보다 16배 넓은 대역폭을 가진다.
→ DDR(N) SDRAM으로 생각해서 2의 N제곱으로 계산하면 대역폭의 너비를 계산할 수 있다.
주소는 물리 주소와 논리 주소가 있다. 물리 주소는 메모리 하드웨어가 사용하는 주소이고, 논리 주소는 CPU와 실행 중인 프로그램이 사용하는 주소이다.
물리 주소(physical address) : 메모리가 사용하는 정보가 실제로 저장된 하드웨어상의 주소.
논리 주소(logical address) : CPU와 실행 중인 프로그램이 사용하는 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소.
논리 주소와 물리 주소 간의 변환은 MMU에 의해 수행된다.
MMU(Memory Management Unit) : CPU와 주소 버스 사이에 위치한 하드웨어를 말한다. MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더해 논리 주소를 물리 주소로 변환한다.
베이스 레지스터는 프로그램의 가장 작은 물리 주소, 즉 프로그램의 첫 물리 주소를 저장하는 셈이고, 논리 주소는 프로그램의 시작점으로부터 떨어진 거리인 셈.
메모리 보호 기법으로 다른 프로그램의 영역을 침범할 수 있는 명령어는 위험하기 때문에 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호할 방법이 필요한데 이를 한계 레지스터가 담당한다.
한계 레지스터(limit register) : 논리 주소의 최대 크기를 저장한다.
→ 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 검사함으로써 메모리 내의 프로그램을 보호할 수 있다.
저장 장치 계층 구조(memory hierarchy) : 컴퓨터가 사용하는 저장 장치들은 ‘CPU에 얼마나 가까운가’를 계층적으로 나타낼 수 있는데, 각기 다른 용량과 성능의 저장 장치들을 계층화하여 표현한 구조이다.
캐시 메모리(cache memory) : CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치이다. 캐시 메모리는 CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위해 탄생했다.
캐시 메모리는 메모리보다 용량이 적어 CPU가 사용할 법한 대상을 예측하여 저장한다. 이때 자주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우를 캐시 히트(cache hit), 반대로 자주 사용될 것으로 예측해 캐시 메모리에 저장했지만 예측이 틀려 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 **캐시 미스(cache miss)**라 한다.
→캐시 미스가 발생하면 cpu가 필요한 데이터를 메모리에서 직접 가져와야 하기 때문에 캐시 메모리의 이점을 활용할 수 x. 캐시 미스가 자주 발생하면 성능 떨어짐.
캐시 적중률(cache hit ratio) : 캐시가 히트되는 비율을 말한다.
= 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
→ 캐시 적중률이 높으면 cpu의 메모리 접근 횟수를 줄일 수 있다.
캐시 메모리는 한 가지 원칙에 따라 메모리로부터 가져올 데이터를 결정한다. 바로 참조 지역성의 원리이다.
참조 지역성의 원리(locality of reference, principle of locality) : cpu가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리이다.
1️⃣ cpu는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. → 시간 지역성(temporal locality)
2️⃣ cpu는 접근한 메모리 공간 근처를 접근 하려는 경향이 있다. → 공간 지역성(spatial locality)
하드디스크(HDD ; Hard Disk Drive) : 자기적인 방식으로 데이터를 저장하는 보조기억장치.
플래터(platter) : 하드 디스크에서 실질적으로 데이터가 저장되는 동그란 원판을 말한다.
그 플래터를 회전 시키는 구성 요소를 **스핀들(spindle)**이라 하고, 스핀들이 플래터를 돌리는 속도는 분당 회전수를 나타내는 RPM(Revolution Per Minute)이라는 단위로 표현된다. 플래터를 대상으로 데이터를 읽고 쓰는 구성 요소는 헤드(head), 헤드는 플래터 위에서 미세하게 떠 잇는 채로 데이터를 읽고 쓰는, 마치 바늘같이 생긴 부품이며 원하는 위치로 헤드를 이동시키는 **디스크 암(disk arm)**에 부착되어 있다.
플래터는 **트랙(track)**과 **섹터(sector)**라는 단위로 데이터를 저장한다. 트랙은 마치 피자처럼 여러 조각으로 나누어지는데, 이 한 조각을 섹터라고 부른다. 섹터는 하드 디스크의 가장 작은 전송 단위이다. 하나 이상의 섹터를 묶어 **블록(block)**이라고 표현하기도 한다.
여러 겹의 플래터가 사용될 수 있는데, 이때 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위를 **실린더(cylinder)**라고 부른다. 쉽게 말해 한 플래터를 동심원으로 나눈 공간은 트랙, 같은 트랙끼리 연결한 원통 모양의 공간은 실린더.
하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉜다.
플래시 메모리(flash memory) : 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치.
플래시 메모리에 **셀(cell)**이라는 단위가 있다. 셀은 플래시 메모리에서 데이터를 저장하는 가장 작은 단위를 말한다. 이 셀이 모이고 모여 MB, GB, TB 용량을 갖는 저장 장치가 되는 것. 이 때 하나의 셀에 몇 비트를 저장할 수 있느냐에 다라 플래시 메모리 종류가 나뉜다. 한 셀에 1비트를 저장할 수 있는 플래시 메모리를 SLC(Single Level Cell)타입, 한 셀에 2비트를 저장할 수 있는 플래시 메모리를 MLC(Multiple Level Cell)타입, 한 셀에 3비트를 저장할 수 있는 플래시 메모리를 TLC(Triple-Level Cell)타입이라 한다. 큰 차이가 아닌 것처럼 보여도 이는 플래시 메모리의 수명, 속도, 가격에 큰 영향을 끼친다.
플래시 메모리 종류
구분 | SLC | MLC | TLC |
---|---|---|---|
셀당 bit | 1bit | 2bit | 3bit |
수명 | 길다 | 보통 | 짧다 |
읽기/쓰기 속도 | 빠르다 | 보통 | 느리다 |
용량 대비 가격 | 높다 | 보통 | 낮다 |
페이지(page) : 셀들이 모여 만들어진 단위, 읽기와 쓰기는 페이지 단위로 이루어짐.
블록(block) : 페이지가 모여 만들어진 단위, 삭제는 페이지보다 큰 블록 단위로 이루어짐.
플레인(plane) : 블록이 모여 만들어진 단위
다이(die) : 플레인이 모여 만들어진 단위
RAID(Redundant Array of Independent Disks) : 주로 하드디스크와 SSD를 사용하는 기술로, 데이터의 안전성 혹은 높은 성능을 위해 여러 개의 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술을 의미한다.
RAID의 구성 방법을 RAID 레벨이라 표현하는데, 가장 대중적인 레벨에 대해 알아보기
RAID 0 : 여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식. 단점은 저장된 정보가 안전하지 않다. RAID 0으로 구성된 하드 디스크 중 하나에 문제가 생긴다면 다른 모든 하드 디스크의 정보를 읽는데 문제가 생길 수 있어 등장한 것이 RAID 1.
RAID 1 : 복사본을 만드는 방식. 복구가 매우 간단하다는 장점과 하드 디스크 개수가 한정되었을 때 사용 가능한 용량이 적어지는 단점이 있다. 즉, 복사본이 만들어지는 용량만큼 사용자가 사용하지 못함. 결국 많은 양의 하드디스크가 필요하게 되고, 비용이 증가한다는 단점으로 이어짐.
RAID 4 : RAID 1처럼 완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보를 저장한 장치를 두는 구성 방식. 이때 ‘오류를 검출하고 복구하기 위한 정보’를 패리티 비트(parity bit)라 한다. 패리티를 저장한 장치를 이용해 다른 장치들의 오류를 검출하고, 오류가 있다면 복구한다. 이로써 RAID 1보다 적은 하드 디스크로도 데이터를 안전하게 보관할 수 있다. 하지만 어떤 새로운 데이터가 저장될 때마다 패리티를 저장하는 디스크에도 데이터를 쓰게 되므로 패리티를 저장하는 장치에 병목 현상이 발생한다는 문제가 있다.
RAID 5 : 패리티 정보를 분산하여 저장하는 방식으로 4의 문제인 병목 현상을 해소한다.
RAID 6 : 구성은 기본적으로 5와 같으나, 서로 다른 두개의 패리티를 두는 방식이다. 이는 오류를 검출하고 복구할 수 있는 수단이 두 개가 생긴 셈이다. 따라서 6은 4와 5보다 안전한 구성이라 볼 수 있다. 다만 새로운 정보를 저장할 때마다 함께 저장할 패리티가 두 개이므로, 쓰기 속도는 5보다 느리다. 따라서 6은 데이터 저장 속도를 조금 희생하더라도 데이터를 더욱 안전하게 보관하고 싶을 때 사용하는 방식이다.
→RAID 0은 데이터를 균등하게 분산하여 저장하고, RAID 1은 완전한 복사본을 만든다. RAID 4는 패리티를 저장한 장치를 따로 두는 방식이고, RAID 5는 패리티를 분산하여 저장하는 방식이고, RAID 6은 서로 다른 두 개의 패리티를 두는 방식이다.