1. 메모리 구조

컴퓨터 내부에 데이터를 저장하는 메모리라고 부를 수 있는 것들은 크게 4가지가 있는데

<aside> 💡

레지스터 → 캐시 메모리 → 주기억장치 (RAM) → 보조기억장치 (HDD/SSD)

</aside>

이렇게 4가지가 존재한다. 레지스터 쪽으로 갈 수록 용량이 작고 처리속도가 빨라진다.

그렇다면 우리가 프로그램을 실행하면 데이터는 컴퓨터 내부에서 어떻게 움직일까?

이번 과제는 CPU와 메모리간의 데이터 저장 방식보단(캐시나 레지스터 저장 방식), 메모리와 보조기억장치 간의 데이터 저장 방식을 더 중점적으로 다루므로 학습 또한 그러한 방향으로 진행하였다.

그리고 솔직히 메모리에 대해 아예 모르진 않는다고 생각했는데, 특정 기법이나 지식이 왜 존재하고 어디에 쓰이는지 등은 전혀 제대로 알고있지 못한다는 것을 깨달았다. 알고있는 지식들이 굉장히 조각조각 단편화 되어있다는 점을 인지하고 이번 학습은 개념 하나를 파고들기보단 흐름 위주로 정리해보았다.

2. 가상 메모리

우리는 컴퓨터에서 동시에 여러 프로세스들을 실행할때가 많은데, 그 프로그램들의 용량을 전부 합쳐보면 실제 물리적 메모리(RAM)에 적재 가능한 용량을 훨씬 초과할때도 많다는것을 알수있다.

그런데도 프로그램들은 잘 돌아간다. 이게 어떻게 가능한 것일까?

바로 가상메모리라는 개념 덕분이다.

가상메모리는 가상 주소를 이용해서 프로세스에 더 큰 논리적 공간을 제공하는 시스템이다. 가상의 주소가 뭐지? 라는 생각이 들지만 여기선 일단 넘어가고 그냥 메모리의 주소라고 생각하면 된다. 가상주소(논리 주소)에 대한 설명은 4. 페이지 테이블에 설명되어 있다.

아무튼 이 메모리는 0번지부터 시작되는 메모리 영역이 제공되는데, 말 그대로 ‘가상’의 메모리 이기 때문에 실제 물리 메모리의 제약 사항이나 다른 프로세스의 존재를 신경 쓰지 않고, 마치 무한한 메모리가 있는 것처럼 프로그램을 작성할 수 있다.