Computer Science/OS

Virtual Memory - (1) 메모리 관리 문제점 및 해결

[앙금빵] 2022. 10. 2.

 

1. 가상메모리 개요

가상 메모리는 기존 메모리 시스템에서 발생하는 여러 문제점들을 해결하기 위해 나온 여러 해법들 중 하나이며, 1960년대 상업용 운영체제에 적용되어 쓰이게 되었다. 현대 시스템은 가상 메모리(Virtual memory) 줄여서 VM이라고 알려진 메인 메모리의 추상화를 제공한다.

 

아래 그림은 가상 메모리 기술을 사용하지 않는 시스템(왼쪽), 가상 메모리 시스템(오른쪽) 을 나타낸다.

기존 메모리 시스템에서는 CPU가 물리 주소를 메인 메모리에 바로 입력하여 메모리 참조를 진행한다.

가상 메모리 시스템에서는 각 프로그램이 가상의 주소를 사용하도록 하며, CPU가 메모리 참조를 시도할 때는 MMU(Memory Management Unit)라는 하드웨어 장치를 이용하여 해당 가상 주소(Virtual Address)를 실제 메인 메모리의 물리 주소(Physical Address)로 변환한다.

 

사진 및 내용 출처: https://it-eldorado.tistory.com/52?category=761782

 


 

2. 기존 메모리 관리 문제점

앞서 가상 메모리는 기존 메모리 시스템에서 발생하는 문제점을 해결하기 위한 해법이라고 언급하였다. 그렇다면 기존 메모리 시스템에서는 어떠한 문제점이 있었는지 한번 알아보도록 하자.

 

문제 1. 실행되는 프로그램이 실제 물리메모리 크기보다 큰 경우

프로그램(Program)이 실행되면 프로세스 주소 공간(Process Address Space)이 Memory에 할당(생성) 되며, 리눅스 시스템 경우 이론적으로 한 프로세스당 4GB(= 2^32 bytes) 주소 공간(address space)이 주어진다.

 

그러나, 아래 그림과 같이 프로세스에 할당된 주소공간은 4GB이나, 컴퓨터에 실제 물리 메모리의 용량이 1GB인 경우일 때를 고려해보자. 이 경우 프로그램이 1GB 보다 높게 메모리 공간을 사용할 경우 Memory crash 가 발생할 수 있다.

 

 

문제 2. 메모리 주소 공간에서의 Memory Hole ( = Memory Fragmentation)

 

4GB 공간에 3개의 프로그램이 실행하는 상황을 고려해보자.

 

 

1. Program 1, 2가 메모리에 올라와 실행된다.
(4GB 중 총 3GB의 공간이 사용되므로 1GB의 여유 공간이 남는다.)

2. Program 1 실행이 종료된다.
(Program 2에서 2GB의 공간을 사용되며, 2GB의 여유 공간이 남는다.)

3. Program 3은 실행이 불가능하다.
(전체 메모리 공간 중 총 2GB의 여유 공간이 남더라도 비연속적인 메모리 구조에서 이를 할당할 수 없게 된다.)

 

이렇게 전체 여유 공간이 있더라도 비연속적인 구조로 프로그래밍이 실행되지 못하는 상황을 Memory Fragmentation 이라고 불린다.

 

문제 3. 메모리 영역 침범

각 프로그램은 32-bit 메모리 주소 공간에 접근할 수 있다. 그러나, 여러 프로그램이 동일한 주소를 참조하는 상황이 발생할 수 있다. 이러한 상황이 발생한 경우, 메모리 손상(Memory Corrupt) 혹은 메모리 충돌(Memory Crash)를 야기하며 보안과 안정성에 영향을 미치게 된다.

1. Program 1의 서비스 1는 1024 주소를 참조한다.
2. Program 2의 서비스 2는 1024 주소를 참조한다.


3. 기존 메모리 구조 문제 해결안

 

기존 메모리 시스템에서 대표적으로 발생하는문제점들을 해결하기 위해 가상 메모리라는 기술을 도입하여 해결하였다.

 

Sol 1. Mapping(사상)을 통한 부족한 물리 메모리 용량 해결

문제점 1에서 언급한  실행되는 프로그램이 실제 물리메모리 크기보다 큰 경우인 경우, Map(사상)을 이용하여 이를 해결하였다. 실행되는 프로그램은 가상의 주소(Virtual Address)를 할당하며 이는 실제 주소(Real Address)와는 다르다.

 

Mapping을 통해 가상 주소(Virtual Address)를 실제 메인 메모리의 물리 주소(Physical Address)로 변환하여 메모리 참조를 진행한다. 가상 메모리 시스템에서는 각 프로그램이 사용하는 가상 주소 공간(Virtual Address Space)를 우선적으로 다른 저장소(ex. HDD, SSD)를 바라 볼 수 있도록 하고, 자주 사용되는 부분을 메인 메모리로 가져와서 사용한다. 이를 통해 이를 통해 메모리 사용에 있어 보다 유연성을 제공받을 수 있다.

 

다시말해, 메인 메모리를 디스크의 캐시로 사용함으로써 하나의 메인 메모리에서 여러 프로세스를 로드하는 것을 가능하게 한다.

 

 

예를 통해 동작 방식에 대하여 조금 더 자세히 알아보자.

Step 1. 프로그램 0, 1, ,2, 3 에 대한 가상 주소가 할당된다.

Step 2. Mapping 을 통해 각 물리 메모리 주소 공간에 사상이 된다.

Step 3. 여기서, Program 0, 1, 2 가 물리 메모리 주소 공간에서 실행되며 물리 메모리에서는 더이상 여분의 공간이 존재하지 않는 상황을 생각해보자.

Step 4. Program 3이 실행될 때, 물리 주소 공간에 여분이 없기에, 가장 오랫동안 실행된 Program 0을 Disk로 이동시키며 Mapping Table을 업데이트한다.

Step 5. 프로그램 3은 Map 을 통해 빈 공간의 물리 주소로 할당되어 실행된다.

 

Q) 굳이 물리 메모리에서 실행되는 프로그램을 Disk로 이동시키고 다른 프로그램을 실행시키는 이유는?

A) 프로그램이 RAM에서 실행되는 것이 Disk 에서 실행되는 것보다 훨씬 빠르기에 만약, Disk에서 프로그램이 실행된다면 퍼포먼스 저하를 겪을 수 있다. 그렇기에 사람들은 메모리 용량이 부족하면 컴퓨터 램 용량 확보를 통해서 문제를 해결한다.

 

Sol 2. Mapping(사상)을 통한 Memory Fragmentation 해결

Map을 통해 비연속적인 물리 주소 공간으로 할당이 가능케 함으로써 , Memory Fragmentation 문제를 해결을 시도하였다. 

 

Sol 3. Mapping(사상)을 통한 프로그램 보호

여러 프로그램이 동일한 주소를 참조하여 메모리 손상(Memory Corrupt) 혹은 메모리 충돌(Memory Crash) 문제점을 해결하기 위해 각 물리 Address 주소를 할당함으로써 한 프로그램이 다른 프로그램의 주소  공간에 접근하는 것을 막을 수 있다.  또한, 공유 자원에 대해서도 Pointing이 가능하기에 완전 고립으로 유발될 수 있는 문제점을 해결할 수 있다.

 

여기서, 완전 고립으로 유발될 수 있는 문제점은 여러 프로그램이 공유 자원을 사용하는 경우 동기화를 위해 주기적으로 Disk에 확인을 진행하며 이는 퍼포먼스 저하를 말한다.


4. 가상 메모리를 사용하는 이유

프로그램 내 어떤 Option이나 기능들은 사용빈도가 제각각 다르며 프로그램 실행에 있어 모든 부분이 동시에 요구되지 않는다. 만약 프로그램을 일부 메모리에 올려놓고 실행할 수 있다면 많은 이점을 가져갈 수 있다.

 

가상 메모리 장점

프로그램 일부만을 메모리에 올려놓고 실행하게 되면, 시스템과 사용자 모두에게 이득이 된다.

 

  • 프로그램은 물리 메모리 크기에 비해 더는 제약받지 않게 된다. 사용자들은 매우 큰 가상 주소 공간을 가정하고 프로그램을 만들 수 있으므로 프로그래밍 작업이 간단해진다.
  • 각 프로그램이 더 작은 메모리를 차지함으로써 더 많은 프로그램을 동시에 수행할 수 있게 된다. 이에 따라 응답시간(response time, turn around time)은 늘어나지 않으면서도 CPU 이용률(utilization)과 처리율(throughput)이 높아진다.
  • 프로그램을 메모리에 올리고 스왑(swap)하는데 필요한 I/O 횟수가 줄어들기에 프로그램들이 보다 빨리 실행된다.

 

요약.
(1) 프로그램이 물리 메모리보다 클 수 있다.
(2) 프로그램 전체가 메모리에 있을 필요는 없다.
(3) 프로세스가 메모리를 공유할 수 있음으로서 프로세스를 보다 효율적으로 생성할 수 있다.

 

참조

https://it-eldorado.tistory.com/52?category=761782

https://www.youtube.com/watch?v=qlH4-oHnBb8

댓글