CS 스터디 2주차 - 가상 메모리

Lilac-_-P·2023년 5월 1일
0

가상메모리가 필요한 이유

RAM의 물리적 한계

컴퓨터의 모든 프로그램은 CPU에 의해 실행되기 위해 메인 메모리인 RAM에 적재되어야 한다. 하지만, RAM은 하드웨어이므로 물리적 한계점이 존재한다. 흔히 말하는 RAM 용량이 이에 해당한다.

RAM은 본인의 최대 용량을 넘는 데이터를 한번에 기억할 수 없다. 따라서, 멀티 태스킹 환경에서 여러 프로그램이 실행된다면, RAM은 동시에 실행되는 모든 프로그램의 데이터를 한번에 모두 RAM에 적재할 수가 없다.

참고.
프로그램이 메모리에 적재되어 실행되는 상태를 프로세스라고 부르니, 후술할 내용들에서는 '프로세스'를 사용한다.

메모리 관리의 불편함과 위험성

만약 동시에 실행하는 모든 프로세스의 메모리 사용량 총합이 물리적 RAM의 용량을 넘지 않는다고 가정해보자.
각 프로세스가 실행되고 종료될 때마다 프로세스에 맞게 메인 메모리에 공간을 확보하고, 배정해야한다. 프로세스 별로 필요한 공간이 천차만별이기 때문에, 이를 관리하는 것은 매우 어렵고 복잡하다.

또, 물리적 한계로 인한 문제는 발생하지 않겠지만, 메모리 관리 측면에서 문제가 발생할 가능성이 있다.
예시로, 모든 프로세스가 물리적 RAM의 공간을 필요한 만큼씩 나눠서 사용하는 것이기 때문에, 프로그래머의 실수로 한 프로세스가 다른 프로세스가 사용하는 메모리 공간에 접근하게 되면 심각한 장애가 발생한다.


따라서, 가상 메모리는 실제 이용 가능한 RAM을 '추상화하여' 메모리를 사용하는 모든 프로세스들에게 매우 큰 메모리로 보이게 만드는 것을 말한다. 각 프로세스에 '실제 메모리 주소가 아닌 가상의 메모리 주소' 를 주는 방식이다. 쉽게 말하면, 모든 프로세스들에게 각자 본인만 사용할 수 있는 통일된 메모리 공간을 배정해주는 것이다.

가상메모리를 사용함으로써 다음과 같은 이점을 얻을 수 있다.

  1. 메모리 관리의 단순화: 각 프로세스마다 가상메모리의 통일된 주소 공간을 배정할 수 있으므로 메모리 관리가 단순해진다.

  2. 메모리 용량 및 안정성 보장: 한정된 공간의 램이 아닌 본인만의 가상메모리 공간을 배정함으로써 물리 메모리 크기에 제약받지 않고 더 많은 프로그램을 동시에 실행할 수 있고, 프로세스들끼리 메모리 침범이 일어날 여지를 크게 줄인다.

  3. 메모리 사용의 효율성 증대 : 프로세스에서 실제로 사용되지 않는 영역을 제외하고 메모리에 적재함으로써, 메모리에 적재하는 용량을 줄인다.

미해결.
공유 메모리에서는 어떻게 가상 메모리를 공유하는가?

CPU의 가상 메모리 사용

가상 메모리의 크기는 CPU가 한번에 처리할 수 있는 주소의 비트 수에 달려있다.

32 bit CPU에서 가상메모리의 크기는 2^32 - 1(4GB)이고,
64 bit CPU에서 가상메모리의 크기는 2^64 - 1(16,000,000 TB)이다.

CPU는 프로세스를 실행할 때 가상 메모리의 주소를 사용하고, CPU가 특정 가상 메모리 주소에서 데이터를 읽고 쓸 때만 MMU(Memory Management Unit)에 의해 가상 메모리의 주소가 RAM의 물리 주소로 변환되어 실제 RAM의 데이터를 가져온다.

페이징과 세그멘테이션

가상 메모리를 사용하면 프로세스에서 실제로 필요한 영역만 메모리에 적재함으로써, 실제 물리 메모리에 적재되는 메모리 용량을 줄일 수 있었다.

하나의 프로세스에서 특정 시간 동안 쓰는 메모리 영역은 전체 메모리 영역중 아주 일부분이기 때문에 일부분만 실제 물리 메모리에 올려놓고 쓰자는 것이 가상 메모리의 컨셉이다. 그러므로, 어느 정도의 사이즈만큼 메모리에 올릴 지에 대한 결정이 필요하다.

이를 결정하는 방법으로 크게 두 가지 방식이 있는데, 페이징과 세그멘테이션이다.

페이징

페이징 기법은 프로세스의 가상 주소 공간과 물리 주소 공간을 일정한 크기의 페이지라는 단위로 분할하여 사용하는 방법이다. 용어 구별을 위해 가상 주소에 있는 분할된 공간 하나를 페이지, 물리 주소의 분할된 공간 하나를 프레임이라고 한다. 각각의 페이지는 각각의 프레임과 1대1로 매핑되어있고, 프로세스 별로 페이지와 프레임을 매핑하고 있는 정보를 페이지 테이블을 PCB(Process Control Block)에 보관하고 있다.

세그멘테이션

세그멘테이션 기법은 동일한 고정적인 크기로 메모리는 분할했던 페이징 기법과는 다르게, 세그먼트라는 논리적 단위로 가변적으로 메모리를 분할한다. 세그먼트는 가변적인 크기를 갖고 있기 때문에, 각각의 세그먼트가 어떤 크기 만큼의 주소 공간을 차지하고 있는지 알기 위해 세그멘테이션 테이블에 해당 정보를 저장한다.


실제 운영체제의 가상 메모리 관리

현대의 운영체제들은 대부분 위에서 설명한 페이징과 세그멘테이션을 혼용한 방법을 이용하여 가상 메모리를 관리한다. 세그멘테이션과 페이징을 혼용한 방법에서는 먼저 세그멘테이션을 이용하여 프로세스의 주소 공간을 논리적으로 분할하고, 분할된 각 세그먼트를 여러 개의 페이지로 나눈다. 이렇게 나누어진 주소 공간은 페이징 기법을 이용하여 실제 물리적 메모리와 매핑된다. 두 방식을 모두 사용하기 때문에 혼용 기법에서는 세그멘테이션 테이블과 페이지 테이블 모두 사용한다.

추가적인 공부할 Keyword

  • 페이징과 세그멘테이션
  • MMU 와 TLB
profile
열심히 하자

0개의 댓글