sw사관학교정글

[week06] 가상 메모리란? Virtual Memory

D cron 2021. 12. 16. 22:22

가상 메모리(Virtual Memory)

우리는 main memory(RAM)를 가지고 있다. 그런데 main memory의 크기가 작아서 모든 정보를 담기에는 부족한 경우가 있다.

이 때 하드디스크까지 main memory(RAM)를 확장해서 사용하는 것을 큰 틀에서의 Virtual Memory 기법 이라고 한다.

물리 주소와 가상 주소

물리주소는 main memory(RAM)에만 존재하는 것이다.

가상주소는 하드디스크까지 메모리를 확장했을 때 얻을 수 있는 값들을 이야기한다.

물리주소와 가상주소가 어떻게 동작하는지 살펴보자.

일단 main memory가 16KB 크기를 가진다고 가정하자.

CPU가 가상메모리에서 어떤 주소를 할당해달라고 요청하면, MMU(memory management unit)가 요청을 처리해서 물리주소에 넣는다.

  • 이 때 우리는 1KB부터 20byte를 요청받았다면, 블록을 4KB 단위로 잘라서 할당해 준다. 그리고 0KB 자리에 메모리를 할당하게 된다.
  • 가상 메모리의 블록단위를 페이지page라고 하고 물리 메모리의 블록단위를 page frame이라고 하는데, 둘의 크기는 동일하다.

main memory보다 더 큰 사이즈의 요청이 들어오면 어떻게 될까?

사실 물리주소에 36KB가 들어갈 자리는 없지만, 마치 36KB만의 자리가 있는 것처럼 빈 공간(4KB)에 들어가서 사용하게 되고, 이것이 가상메모리의 핵심이다.

MMU의 역할은 무엇일까?

만약 CPU가 MMU에 36KB의 가상메모리가 어딨는지 요청한다면, 실제 물리주소의 4KB의 주소에 저장했다라고 기억하고 그 주소로 찾아가서 반환을 해줘야 한다.

이 과정을 일반화 시키면, 가상주소를 물리주소로 변환하는 작업인 주소변환 이 된다.

이 역할을 수행하는 것이 MMU의 역할이다.

CPU의 관점도 프로그래머의 관점과 같다.

우리가 가상메모리를 사용하면 정말 그 만큼의 메모리가 존재한다고 생각하면서 사용할 수 있는 것처럼, CPU도 똑같이 생각하고 명령을 내리고, MMU가 알아서 물리주소로 주소변환을 해준다.

실제 가상 메모리의 사용

앞서 살펴보았듯이 하드디스크까지 main memory(RAM)를 확장해서 사용하는 것을 큰 틀에서의 Virtual Memory 기법이라고 했다.

그런데 main memory 의 공간이 부족하다고 그냥 하드 디스크까지 확장해서 사용한다면 RAM이 하드디스크보다 속도가 훨씬 빠르기 때문에 RAM에 저장되어있는 메모리는 빠르게 접근하고, 하드 디스크에 저장되어있는 메모리는 느리게 접근하는 속도가 들쭉날쭉한 프로그램이 될 것이다.

이 문제를 해결하기 위해서 Virtual Memory는 RAM(main memory)을 하드디스크의 캐시처럼 사용한다.

이게 무슨말일까?

실제로는 모든 메모리공간을 하드디스크에 다 넣어버린다. 그리고 사용하는 것들만 블록 단위로 내가 필요한걸 빼서 RAM에 가져다 놓고 사용한다.

만약 RAM이 가득 차있다면?

RAM이 가득 차 있는데 새로운 할당 요청이 들어오면, 사용한지 가장 오래된 놈을 다시 하드디스크로 store시키고 할당할 놈을 하드 디스크에서 RAM으로 Load한다.

하드디스크는 기본적으로 저장할 때 file system을 기반으로 파일을 저장한다. 그래서 그림에서 하드디스크의 일부를 스왑 파일이라고 부른다.

스왑 파일은 기본적으로 보따리이고 여기서 필요한 것들을 꺼내서 RAM에 저장하고 사용한다.

참고자료

https://www.youtube.com/watch?v=p1CTX5L_loc&ab_channel=%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4