티스토리 뷰
컴퓨터에서 말하는 메모리란 크게 2가지 종류가 있다. RAM 그리고 HDD(SSD) 이다. 1차적으로 RAM 메모리를 주로 사용하고, HDD(SSD) 를 swap 형태로 이용하여 2차적인 메모리로 활용을 한다. 그런데 만약 sw 를 구현할 때 이 메모리들 자체에 의존성을 갖게된다면, 어떻게 될까 제품마다 혹은 크기에 따라서 코드를 그때마다 바꿔줘야한다.
그러나 범용 OS 라는게 등장하면서 가상화된 체계 위에서 SW를 돌리다 보니 그럴 필요성이 많이 줄어들었고,
이때 필요한 것이 바로 가상 메모리이다.
가상 메모리 덕분에 위에서 말한 장치적 의존성 특히나, 메모리 의존성을 없애준다는 것도 한 몫하지만, 관리적 차원에서 높은 추상성을 제공해줌으로써 접근 제어 측면에서 보안성 또한 챙길 수 있게된다.
메모리의 관리에 있어 최소 단위는 1byte이다. 그리고 해당 1byte를 관리하는 주소 체계는 32bit 이다. 그래서 메모리가 주소 범위가 0번 부터 4,294,967,296 번 이고, 이는 운영체제가 인식하는 주소 범위가 4GB 가 한계라는 것이다. 물론 현대에는 64비트 운영체제 및 64비트를 처리하는 CPU를 사용하고 있는 시점에서는 2^64 - 1 크기 범위의 메모리를 사용하고 있긴 하나, 64비트 단위의 메모리는 예외적인 부분이 많기에, 32비트 기준으로 설명한다.

32비트 응용 SW 라고 할때, 해당 응용 SW에게 4GB 크기의 VMS를 할당하게되고, 2GB는 User 단, 2GB는 Kernel 단에서 사용한다. 심지어 User 단에서 0.2xxx 크기 만큼을 또 OS에
서 사용하게되어, 결국 해당 프로그램이 사용할 수 있는 메모리 크기는 약 1.7xx 밖에 사용하지 못한다.
커널단 즉, OS 쪽에서 중요한건 M.M 메모리 메니저이다. 해당 영역은 RAM + SWAP 영역을 합친 곳인데, SWAP 영역은 늘리면 늘릴 수록 I/O 효율이 떨어지기에 비용을 고려하여 어디를 늘리는 것이 가장 효율적인지를 고민해보아야한다.
그리고 각각의 프로세스 마다, VMS 공간을 4GB를 할당받고, 거기서 2GB를 User 단으로 활용한다고 할 때, 실제 물리 메모리를 사용을 하는가? 그렇지 않다. 만약 hello world를 출력하는 프로그램이 있다고 할 때, 2GB를 할당받는다고는 하지만, 실제로 물리메모리 상에서는 끽해봤자 1MB 조차도 안될 것이다.

각각의 프로세스에서 VMS 상에서는 주소 번호 시작이 0번 부터 시작한다. 그리고 메모리를 공간을 사용할 때 가상 메모리 공간 상에서는 100번이라고 해도, 실제 매핑된 물리 메모리 주소 번호는 다른 번호로 나타낼 수 있다. 아니면 아예 RAM이 아니라 SWAP OUT 되어 HDD(SSD) 상의 공간으로 옮겨질 수 있는 것이다. 즉, 각각의 프로세스가 가상메모리 주소 체계에서 같은 번호의 주소 공간을 가리킨다고 하여 실제 메모리 상에서도 같은 번호의 주소 공간인가? 절대 그렇지 않다는 것이다.

이러한 매핑 테이블을 통해서 가상 주소 공간의 메모리 주소가 실제 물리 메모리 상의 주소값과 매핑되어 변환되는 체계가 바로 동적 주소 변환 체계이다.
해당 그림의 예시는 세그먼트상의 예시이고, paging 기법을 적용해도 개념은 똑같다.
이렇게 가상 메모리 체계에서 매핑 테이블을 통해 저렇게 관리를 하다보면, 실제로 프로세스 A가 죽어버리면, 세그먼트 0번 자리를 못쓰게 되는가? 그렇지 않다. 매핑 테이블에서 해당 테이블 값을 지우고, MM이 프로세스 A와 관련된 물리 메모리 공간을 회수하면 될 일이다. 이렇게 메모리가 가상화된 체계 속에서 관리가 잘되면 잘될 수록 메모리 회수율이 높다는 것이기에 굳이 재부팅을 할 필요성을 못 느낀다. 그리고 그만큼 메모리 공간에대한 통제 또한 잘하고 있다는 것으로도 볼 수 있다.
'운영체제' 카테고리의 다른 글
| 가상 메모리 접근 권한 (0) | 2026.09.27 |
|---|---|
| 페이징 기법 (0) | 2026.09.27 |
| 메모리 분할 방식 (0) | 2026.06.05 |
| 메모리 오버레이와 스왑 (2) | 2025.02.03 |
| 절대주소와 상대주소 (1) | 2025.01.26 |
