운영체제 공룡책 내용 중 Storage-Device Hierarchy에 대한 정리이자 공부하면서 들었던 의문사항을 정리한 포스트이다.
우선 운영체제 공부를 하면서
"CPU-Memory-Disk 간 속도 차이가 있기 때문에..."
라는 말을 자주 들어봤다.
그런데, 어떠한 이유때문에 속도 차이가 발생하는 것인지 궁금했다.
결론적으로 해당 내용을 한 마디로 정리하자면 메모리 액세스 시 발생하는 속도 차이에 의해 하드웨어 부품 간 속도차이가 발생한다.
컴퓨터가 동작을 수행할 때 데이터나 명령어가 저장된 메모리에 접근을 한다.
흔히 말하는 메모리는 메인 메모리(RAM)이지만, 이 때 말하는 메모리는 데이터나 명령어를 저장하는 기억 장치라고 보면 된다.
CPU
CPU는 내부에 데이터나 명령어를 저장하는 레지스터가 존재한다.
당연히 CPU 내부의 연산 장치로부터 물리적인 거리도 가까울 뿐만 아니라, 용량이 작아 접근하는 시간이 굉장히 빠르다.
Main Memory
메인 메모리는 Random Access Memory(RAM)로써 이름에서 알 수 있듯이 어느 위치에 접근하든 접근 시간이 동일하다. 접근할 메모리 주소만 주면 해당 위치에 접근할 수 있다.
RAM에는 SRAM과 DRAM이 있다.
두 RAM을 설명하기에 앞서 사용 예를 알아보면 SRAM은 레지스터나 캐시, DRAM은 메인 메모리에 사용한다.
즉, SRAM은 빠른 대신 크기가 작고 비용이 비싸며, DRAM은 느린 대신 크기가 크고 비용이 싸다는 것을 알 수 있다.
DRAM은 Dynamic Random Access Memory이다.

📌 출처 : https://www.microcontrollertips.com/dram-vs-sram/
위 그림과 같이 1개의 트랜지스터와 1개의 캐패시터(Capacitor)로 구성된다. Capacitor에 전하가 저장되며 특정 전압이 달성되면 1, 그렇지 않으면 0으로 해석된다.
Capacitor는 갈수록 전하를 잃기 때문에 컴퓨터가 작동하는동안 주기적으로 전력을 공급(refresh)해줘야 한다.
SRAM은 Static Random Access Memory이다.

📌 출처 : https://www.microcontrollertips.com/dram-vs-sram/
SRAM은 다음과 같이 6개의 트랜지스터로 구성되어 있다. flip-flop 회로를 사용하여 데이터를 저장하기 때문에 DRAM처럼 데이터를 유지시키기 위해 주기적으로 전력을 공급해줄 필요가 없다. 해당 작업이 없기 때문에 SRAM이 DRAM보다 더 빠르다고 할 수 있다.
이렇듯 데이터가 유지되기 때문에 Static RAM이라 불리는 것이다.
이렇듯 Capacitor의 유무에 따라 속도는 결정되지만, SRAM은 6개의 트랜지스터로 구성이 되어 있기 때문에 차지하는 물리적 공간이 크다. 따라서, 용량이 크게 만들 수 없을 뿐더러 비싼 것이다.
📌 참고 : https://computing-jhson.tistory.com/21
Disk
디스크는 메모리보다는 느린 부품이며, 비휘발성의 특징을 가지기 때문에 컴퓨터의 전원을 종료하더라도 데이터를 유지한다.
디스크는 HDD와 SSD로 나눌 수 있다. 일반적인 상식으로는 SSD는 HDD보다 빠르다는 것만 알고 있다.
해당 포스팅에선 컴퓨터 구조적으로 간단하게 두 디스크를 비교할 것이다.
HDD
HDD는 하드디스크로써 원판(platter)에 데이터를 저장을 한다. 원판의 특정 섹터에 저장된 데이터를 읽기 위해서는 디스크의 자기 헤드가 해당 섹터를 가르키도록 위치시켜야한다. 이러한 물리적 이동이 필요하기 때문에 속도가 느리다.
SSD
SSD는 NAND Flash Memory로 구성된 저장 장치이다.

📌 출처 : https://youtu.be/sCraOvo1AyQ?si=oPRGju4uN5eoTCjA
NAND Flash Memory는 다음과 같이 구성되어 있다. 해당 구성을 '셀'이라 한다.
컴퓨터는 Floating Gate에 저장된 전자를 읽어 1과 0을 구분한다. 전자가 쌓여있으면 0, 전자가 없으면 1로 해석한다.
그렇다면 Floating Gate에 어떻게 전자를 위치시키고, 없앨까?
Tunnel oxide는 부도체이다. 즉, 전자가 안에서 밖으로, 밖에서 안으로 넘어가지를 못한다.
그러나 셀의 위쪽에 강한 + 전압을 걸어주게 되면 양자역햑의 터널링 현상으로 인해 전자가 P형 반도체 ➡️ Floating Gate로 넘어오게 된다. 이렇게 Floating Gate에 전자가 쌓이게 되면 0으로 해석하는 것이다.
Tunnel oxide가 부도체이기 때문에 이 상태에서 전원을 끄더라도 전자가 Floating Gate 안에 머물러있다. 즉, 비휘발성인 것이다.
반대로 1인 상태(초기)로 만들기 위해서는 셀의 위쪽에는 0V의 전압, 아랫쪽에는 강한 +전압을 걸어주게되면 마찬가지로 터널링 현상으로 인해 전자가 P형 반도체로 이동하게 된다.
자기 헤드 및 원판의 물리적인 이동 지연 시간이 걸리는 HDD와 달리 물리적인 이동 시간은 없기 때문에 SSD는 HDD보다 빠르며, 소음이 없다.
그러나 셀의 크기를 작게 만들어 여러 개의 셀을 이어붙인다면, 다른 셀에 걸리는 +전압에 주변 셀들이 영향을 받을 수가 있다. 그렇기 때문에 크기에 제약이 있고 비싼 것이다.
해당 방법을 해결하기 위해 삼성에서 CTF 및 V NAND 플래시 메모리를 개발하였다.

저장장치 계층도는 다음과 같이 구성되어 있다.
레지스터, 메인 메모리, 디스크는 앞서 설명한 내용과 동일하다.
Cache는 빠른 속도의 CPU와 상대적으로 느린 Memory 사이에 존재하는 저장 장치이다.
앞선 설명과 같이 Cache는 SRAM을 사용하기 때문에 속도가 빠르다. 따라서, 메모리의 데이터들을 Cache에 일부 저장하여 빠른 속도로 작업이 가능하도록 한다.
캐시는 계층(Layer) 구조를 가지고 있다. L1, L2, L3 캐시로 구분할 수 있으며 높은 순위의 레이어일수록 속도가 빠르며 용량이 작다.
on-chip인 캐시의 레이어가 많을수록 고성능이다.
그리고, 캐시는 unified cache와 split cache로 나뉜다.
split cache는 명령어를 저장하는 i-cache와 데이터를 저장하는 d-cache로 나눠진 구조를 가진다.
이와 같이 split cache를 사용한 아키텍쳐를 하버드 아키텍쳐, 그렇지 않으면 폰 노이만 아키텍쳐라 한다.
위와 같이 i-cache와 d-cache로 나누는 이유는 Structual Hazard를 방지하기 위함이다.
명령어와 데이터가 구분없이 저장된 unified cache를 사용할 경우 같이 저장된 명령어와 데이터를 동시에 접근하는 것에 문제가 발생할 수 있다.