개발자로 근무하면서 기획자나, QA, 운영하시는 분들께 종종 질문들을 받습니다.
위와 같은 다양한 질문들을 받고 설명할 때, 경력과 근무하시는 환경에 따라 CS에 대한 이해가 각각 다르시기 때문에 어떻게 설명을 드려야 하는지 가끔 막막할 때가 있었습니다.
그럴 때마다 CS에 대해 비전공자 분들도 이해하실 수 있는 문서가 있어서 이를 바탕으로 설명할 수 있었으면 좋겠다고 생각했습니다.
이 글은 이처럼, 개발자와 같이 협업하면서 일하시는 분들이 이해하시면 좋을 내용과 원활한 설명을 위한 레퍼런스로써 역할을 수행할 수 있도록 하기 위해 작성되었습니다.
이 포스트는 강민철 님의 [혼자 공부하는 컴퓨터 구조+운영체제] 를 읽고 요약・정리한 글입니다.
RAM 에는 실행할 프로그램의 명령어와 데이터가 저장됩니다. 여기서 중요한 점은 전원을 끄면 RAM 에 저장된 명령어와 데이터가 모두 날아간다는 것입니다. 이렇게 전원을 끄면 저장된 내용이 사라지는 저장장치를 휘발성 저장장치라고 합니다.
반면, 전원이 꺼져도 저장된 내용이 유지되는 저장장치는 비휘발성 저장장치라고 합니다.
CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 가져와야 하는데, RAM 용량이 적다면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 오래걸립니다.
CPU는 프로그램을 실행하는 과정에서 메모리에 저장된 데이터를 빈번하게 사용하게 됩니다. 하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산속도보다 느립니다. CPU가 연산을 빨리 한다해도 메모리에 접근하는 시간이 느리면 CPU의 빠른 연산 속도는 아무런 쓸모가 없습니다.
이를 극복하기 위한 저장장치가 바로 캐시메모리 입니다.
모든 사용자들은 빠르고 동시에 용량이 큰 저장장치를 원합니다. 하지만 안타깝게도 빠른 저장장치와 용량이 큰 저장장치는 양립하기 어렵습니다.
컴퓨터가 사용하는 저장장치들은 CPU에 얼마나 가까운가를 기준으로 계층적으로 나타낼 수 있습니다. 이를 저장장치 계층구조라고 합니다.
CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느립니다. 그럼에도 불구하여 CPU는 프로그램을 실행하는 과정에서 메모리에 빈번하게 접근해야 합니다. CPU 연산 속도가 아무리 빨라도 메모리에 접근하는 속도가 그에 따라가지 못하면 이는 큰 의미를 가지기 힘듭니다.
그래서 등장한 저장장치가 캐시 메모리입니다. 이는 CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 저장장치입니다.
여러분이 사용하는 컴퓨터 내부에는 여러 개의 캐시메모리가 있습니다. 이 캐시 메모리들은 CPU (코어)와 가까운 순서대로 계층을 구성합니다. 코어와 가장 가까운 메모리를 L1(Level 1), 그 다음 가까운 캐시 메모리를 L2 캐시, 그 다음 가까운 캐시 메모리를 L3 캐시라고 부릅니다.
멀티코어 프로세서에서는 일반적으로 다음와 같이 구성됩니다.