본문 바로가기

CS/운영체제

[ 운영체제 ] 메모리 계층 구조

반응형

이 글은 '메모리 관리'를 공부하기 전에 숙지하고 있으면 도움이 될만한 내용이다. 워밍업 단계라고 생각하자. 먼저 이 글을 포함해서 '메모리 관리' 파트를 읽을 때 컴퓨터구조 지식이 약간 필요하다. 즉, CPU의 작동 원리를 알고 있으면 학습 효과가 올라간다. 컴퓨터구조도 나중에 정리할 생각이기는 하지만 진짜 너무 깔끔하고 이해하기 쉽게 정리해놓은 영상이 있어서 소개를 먼저 하겠다. 20분 정도 되는 분량이지만 꼭꼭꼭 끝까지 보기를 바란다. 

 

[ CPU는 어떻게 작동할까 ] 클릭! 

 

위 영상을 다 봤다는 가정 하에 글을 쓰겠다. 만약에 글을 읽다가 생소한 용어가 있다면 위 영상을 꼭 시청하기를 바란다. 

 

 

컴퓨터의 부속 장치들은 크게 연산장치와 기억장치로 분류할 수 있다. 연산장치로는 CPU, GPU 등이 있고 기억장치로 DRAM, SDD, HDD 등이 있다.

 



 

 

운영체제가 관심있는 영역은 '기억 장치'다. 운영체제가 굉장히 복잡해진 이유도 기억 장치의 종류가 다양해졌기 때문이다. 만약에 컴퓨터에 기억 장치가 딱 하나만 있다면 운영체제가 복잡해질 이유가 없다. 애초에 기억 장치가 한 개 뿐이라면 운영체제가 없는게 효율적이다. 그렇다면 기억 장치의 종류가 다양해진 이유는 뭘까?

 

연산 장치와 기억 장치는 이름처럼 그 역할이 완전 다르다. 연산 장치는 순수하게 연산만 하는 장치고, 기억 장치는 데이터를 저장하는 장치다. 우리가 컴퓨터에 깔아놓은 수많은 프로그램들은 HDD 또는 SSD에 저장되어 있다(앞으로 SSD로 통일하겠다). 하지만 프로그램을 실행시키려면 프로세스가 CPU 위에 올라가야만 한다. 그런데 CPU는 데이터를 저장할 수 없다. 따라서 어떤 프로그램을 실행시키려면 SSD에 있는 명령어를 CPU 위에 올려줘야 한다

 

그런데 한 가지 문제가 있다. CPU와 SSD 사이의 거리가 너~~무 멀다. CPU가 1 clock에 한 가지 명령어를 수행할 수 있다고 가정하면, CPU와 SSD의 거리는 백만 clock 정도 된다. 즉, 하나의 명령어를 SSD로부터 끌어오기까지 백만 개의 명령어를 처리할 수 있는 시간이 낭비되는 것이다. 

 

거리 문제를 해결하는 방법은 아주 간단하다. CPU와 SSD 사이에 여러 개의 기억장치를 둬서 CPU가 필요한 데이터를 빠르게 끌어다 쓸 수 있도록 하면 된다. 이렇게 CPU와 SSD 사이에 중간다리 역할을 하는게 DRAM과 Cache다. 우리는 앞으로 이 중간다리 역할을 하는 놈들을 통틀어 '메모리'라고 부를 것이다. 메모리는 CPU가 접근 가능한 기억 장치이기도 하다. CPU는 필요한 데이터를 메모리에 요청하고, 만약에 메모리에 해당 데이터가 없으면 운영체제가 SSD에서 데이터를 가져오는 구조로 생각하면 된다. 

 

그렇다면 DRAM과 Cahce는 어떤 차이가 있을까?

DRAM (Main Memory) vs SRAM (Cache)

이 둘의 차이를 알기 위해서는 구조적으로 어떻게 다른지 이해할 필요가 있다. 컴퓨터구조에서 다루는 내용이니 간단하게만 언급하고 넘어가겠다. DRAM과 SRAM의 차이는 아래와 같다. 

 

DRAM (Dynamic Random Access Memory)
- 1 capacitor (전자를 저장해준다)
- 1 transistor
- 휘발성이기 때문에 저장된 내용을 읽었다가 다시 써주는 행위 반복 (refresh)
집적도가 커 많은 양의 데이터를 저장할 수 있다
refresh를 주기적으로 해줘야 하기 때문에 속도가 느리다

SRAM (Static Random Access Memory)
- 4 transistors for storage
- 2 transistors for access
- 비휘발성이라 refresh 과정 필요 없다
refresh 과정이 필요 없어서 속도가 빠르다
집적도가 작아 DRAM에 비해 적은 양의 데이터 저장 가능

 

추가로 DRAM은 transistor와 capacitor가 한 층으로 이루어져 있어 한 개의 area만 차지한다. 면적으로 따지면 1로 볼 수 있다. 그런데 SRAM은 transistor가 여섯 개나 필요하다. 면적으로 따지면 6이다. 따라서 같은 면적에 더 많은 데이터를 저장할 수 있는 것은 DRAM이다. 쉽게 쉽게 생각하자. 

 

결론은 DRAM은 느리지만 데이터 pool이 넓고, SRAM은 빠르지만 데이터 pool이 좁다. 

Tade-off : 용량 - 속도

운영체제의 목표는 속도와 용량이라는 두 마리 토끼를 잡는 것이다. 그렇다면 용량도 크고 속도도 빠른 기억 장치를 만들면 해결되지 않을까? 맞는 말이다. 하지만 안타깝게도 이 둘은 반비례 관계다. 용량이 크면 속도가 느리고, 속도가 빠르면 용량을 키우는 데 한계가 있다. 이건 직관적으로 생각해봐도 이해할 수 있다. 운동장 정중앙에서 박스를 가져오는 것과, 1평짜리 방 정중앙에서 박스를 가져오는 것 중 빠른 것은? 당연히 후자다. 

 

그리고 한 가지 문제가 더 있다. 속도에 따라 비용 차이가 어마무시하다. 빠를수록 비싸다. 좀 많이 비싸다. DRAM과 하드디스크의 1GB당 가격 차이가 얼마나 나는지 보고 오면 감이 잡힐 것이다. 

 

이에 대한 해결책이 바로 '메모리 계층 구조'다. 

메모리 계층 구조

메모리 계층 구조의 아이디어는 간단하다. 프로세서가 필요로 하는 데이터를 최대한 가까운 곳에 위치시켜 속도를 향상시키는 것이다. 현대 CPU는 캐시가 안에 내장되어 있고 L1 Cache부터 L3 Cache까지 있다. 프로세서는 L1 Cache부터 순차적으로 필요한 데이터를 요청하고, 최종 종착지인 메인 메모리에 데이터가 없으면 운영체제가 SSD에서 데이터를 가져온다. 

 

앞으로 배울 '메모리 관리' 파트에서는 어떻게 하면 Cache ~ main memory에 프로세서가 필요한 데이터를 효율적으로 저장할 수 있는지에 대한 내용을 배운다. 또한 '가상 메모리' 파트에서는 하드 디스크를 메인 메모리처럼 사용하는 방법을 배운다. 메인 메모리보다 용량이 큰 프로그램을 컴퓨터가 어떻게 실행시키는지, 그 해답을 '가상 메모리' 파트에서 찾을 수 있을 것이다. 

 

다음 시간에는 '주소 바인딩'에 대한 내용을 다룰 예정이다. 이 또한 '메모리 관리' 파트를 이해하는데 도움이 되는 내용이다. 논리적 주소의 필요성에 대해 알게 될 것이다. 

 

 

 

Memory in a Modern System

 

반응형