저장장치는 크게 휘발성, 비휘발성 두가지 종류로 나눌 수 있고, 저장장치 구조에는 계층이 있습니다.
휘발성 저장장치(NVS)은 전기적 저장장치로, RAM, 캐시, 레지스터가 이에 속합니다.
비휘발성 저장장치(NVM)은 기계적 저장장치로, ROM, HDD, SSD, 자가 디스크, 광학 디스크, 자가 테이프가 이에 속합니다.
저장장치 구조는 속도가 빠른 또는 비트당 비용이 작은 순서대로 나열하면 레지스터, 캐시메모리, 메인메모리, SSD, 자가디스크, 광학디스크, 자기테이프이며 저장용량이 큰 순서는 역순입니다. 이때 레지스터와 캐시 메모리는 CPU안에 위치합니다.
비교적 생소한 캐시의 기능에 대해 웹 캐싱을 빗대어 이해해보겠습니다. 특정한 페이지가 갑자기 유입이 많아졌다고 생치면, 기존에 검색엔진을 통해서만 열 수 있었던 사이트페이지를, 동일한 페이지 자체를 만들어서 캐시 서버에 넣어 둘 수 있습니다. 그렇게 함으로써 웹 브라우저들이 그 페이지로 유입할 때 검색엔진에 부하를 주지 않고 캐시 서버로 가서 페이지에 접속할 수 있습니다. 저장장치에서의 캐시도 마찬가지 입니다. 메인메모리는 레지스터에 내용을 올려서 CPU는 명령을 실행하게 되는데, 이때 메인메모리가 캐시에 내용을 올리고 캐시가 레지스터에 내용을 올려서 CPU가 명령을 실행하는 것이 레지스터에 바로 명령을 올리면서 명령을 실행할 때보다 빠를 수 있습니다. 왜냐하면 CPU는 코드를 보고 특정하게 많이 실행되는 부분(locality)을 판단해서 미리 메인메모리에서 캐시로 올려두는데(hit), 캐시에서 레지스터로 올리는건 아주 빠르기 때문입니다. 결국 캐시에 없는 부분만 메인메모리에서 레지스터로 올리면 되는 형태가 됩니다.
※ 소스코드의 locality란? 소스코드에 많이 실행되는 특정 부분이 있음.
※ locality한 부분이 캐시에 잘 올라 갔으면 hit이라하고 아니면 miss라 합니다. miss라 해도 메인메모리에서 직접 레지스터에 등록할 것이므로 실행에는 문제가 없습니다.
---
다음 글에서는 입출력 구조에 대해 알아보겠습니다.