[운영체제] 12. Virutal Memory
Reference - Operating Systems: Three Easy Pieces
https://pages.cs.wisc.edu/~remzi/OSTEP/
Beyond CPU and Flat Memory
이전까지 CPU virtualization에 대해서 배웠는데, CPU와 마찬가지로 메모리 또한 OS에서 virtualizing하여 관리한다.
메모리는 크게보면 RAM과 ROM으로 나뉘고, 이또한 세부적으로 여러 component로 나뉜다.
RAM(Random Access Memory)는 임의의 지점에서 Access할 수 있는 휘발성 메모리이며, SRAM과 DRAM으로 나뉜다.
이말인 즉슨 전원이 끊기면 메모리 내 데이터가 소실된다는 의미이다.
SRAM의 경우 빠르고 비싼 메모리이고, DRAM은 느리고 싼 메모리라 생각하면 편하다.
ROM(Read Only Memory)은 Nonvolatile Memory(비휘발성 메모리)의 일종이다. 비휘발성 메모리는 전원이 끊겨도 데이터가 소실되지 않는다. 전원이 들어와있는동안 강한 전압으로 전자를 저장하며, 이 전자를 매개체로 정보를 나타내는 원리이다. ROM 외에도 EEPROM, NAND Flash, Optane 등의 메모리가 있다.
NAND Flash(디지털 논리회로의 그 NAND Gate가 맞다.)의 경우 이를 활용해서 SSD를 만드는데, 가격은 조금 더 비싸지만 속도가 월등히 높아 현대 컴퓨터에선 이것이 HDD를 대체하여 Disk의 역할을 하고 있다.
그외에도 Nonvolatile Memory는 Disk Caches로 사용되기도 한다.
Memory는 Hierarchy 구조를 따른다.
위에서부터 차례로 Register, SRAM, DRAM, Optane, SSD / HDDs로 구성된다.
Hierarchy가 높을수록 작고, 빠르며, 용량 대비 비싸다.
왜 Hierarchy 구조를 따르냐함은 Locality 때문인데, 프로그램에서 사용하는 데이터(혹은 명령어)는 대부분 근처에 존재한다. 근처에 존재한다는 말이 곧 Locality를 의미하며, 한번 사용된 데이터가 곧 또 사용되기 쉽다는 의미의 Temporal Locality, 물리적으로 근처에 있는 주소의 데이터가 사용되기 쉽다는 의미의 Spatial Locality가 있다.
이때문에 자주 사용될 것이라 예상되는 데이터의 경우 높은 hierarchy에 둬서 빠르게 읽고 쓸 수 있게함으로써 컴퓨팅 성능을 올린다.
Memory Virtualization
앞으로 다룰 주요한 개념이다. 메모리 가상화는 물리적 메모리를 가상 메모리로 translate하는 과정을 뜻하며, 물리적으로 갖고 있는 하나의 메모리를 분할하여 프로세스에게 제공하고, 프로세스가 각각 가상의 메모리를 갖고 있는 것처럼 속이는 것, 그리고 그때 필요한 technique에 관한 내용이다.
Virtual Memory
Virtual Memory는 Virtual Address Space와 Address Translation이 합쳐져서 완성된다.
직관적으로 보이듯이, 1. 가상 주소 공간과 2. OS에서 이를 물리적 공간으로 번역하여 메모리 가상화를 구현한다. 메모리 가상화를 통해 메모리를 효율적으로 쓰고, 메모리를 보호하며, 모든 프로세스가 같은 선형 주소 공간을 사용하게 함으로써 개발자가 프로그래밍을 편하게 하도록 돕는다.
Virtual Address Space는 instruction이 작성된 Code, Dynamically allocate memory인 Heap, local variable을 저장하는 Stack으로 나뉜다. 모든 프로그램의 주소는 가상화되어 동작한다.