[운영체제] 가상 메모리 (Virtual Memory)

강민혁·2023년 4월 3일
0

기술면접 | 운영체제

목록 보기
28/32

가상 메모리 (Virtual Memory)에 대해 설명하세요

Keyword

물리 메모리 용량의 한계, 디스크, 여러 프로세스 메모리 공유, 페이지 테이블, 페이지 교체 알고리즘


Script

가상 메모리는 물리 메모리 용량의 한계를 극복하기 위해 만들어진 기술입니다. 프로그램이 필요로 하는 모든 메모리를 물리 메모리에 올리지 않아도, 디스크의 가상 메모리를 통해 프로그램을 실행할 수 있습니다.

그리고 이 뿐만 아니라, 가상 메모리를 통해 여러 프로세스가 메모리를 공유하는 것에도 이점을 가집니다. 가상 메모리 주소 공간을 페이지 테이블을 통해 관리하기 때문에, 같은 주소 공간에 mapping된 메모리는 각 프로세스에서 단 한번만 로드됩니다. 만약 가상 메모리를 사용하지 않으면, 각 프로세스마다 따로 동일한 메모리를 로드해야하는 비효율적인 방식으로 작동합니다.

물론, 가상 메모리를 사용함으로 인해서 디스크와 메모리 간의 데이터 전송이 발생하고, 이로 인해 성능 저하가 발생할 수 있습니다. 그래서 이 가상 메모리를 효율적으로 관리하기 위해 페이지 교체 알고리즘 등의 다양한 기술들이 존재합니다.


Additional

가상 메모리가 필요한 이유

먼저, 프로그램의 크기와 복잡도가 증가하면서 물리적 메모리 용량 자체가 부족해지는 문제를 해결하기 위함이다. 대용량 프로그램의 실행이 필요하다거나, 다중 프로그래밍을 지원해야 하는 경우에 메모리 용량이 부족할 수 있는데, 이를 가상 메모리를 통해 해결할 수 있다.

그리고, 프로세스 간의 메모리 공유와 보호를 위해서이다. 여러 프로세스가 같은 메모리를 사용하는 경우에, 페이지 테이블을 통해 가상 주소 공간에 mapping하기 때문에, 물리 메모리에는 실제로 한번의 로드만으로 사용가능하다. 물론 운영체제 내부에서는 동시성 문제나 메모리 보호 문제가 발생할 수 있기 때문에, 이를 해결하기 위해, 파일 잠금 기술이나 각 프로세스마다 별도의 가상 메모리 공간을 할당하는 등으로, 각 프로세스가 독립적으로 실행될 수 있도록 보호한다.

가상 주소 공간(Virtual Address Space)

가상 주소 공간은 프로세스가 실행될 때, 해당 프로세스가 사용할 수 있는 메모리 공간을 나타낸다. 이 메모리 공간은 가상의 메모리 주소로 표시되고, 각 프로세스는 자신만의 독립적인 가상 주소 공간을 할당 받는다.

이 공간은 주로, code, data, stack, heap 영역으로 이루어져 있다. 각 프로세스는 이렇게 가상 주소 공간을 할당 받고, 운영 체제는 해당 프로세스의 페이지 테이블을 이용해서 가상 주소를 실제 메모리 주소로 변환한다. 그리고 이 과정은 각 프로세스가 자신의 가상 주소 공간에서만 실행될 수 있도록 보호한다.

프로세스와 독립적인 가상 메모리 공간

각 프로세스는 운영체제로부터 독립적인 가상 메모리 공간을 할당 받는다. 독립적인 가상 메모리 공간을 할당받는다는 것의 의미는 '해당 가상 메모리 공간 내에서 메모리에 대한 접근 권한을 부여받는다'는 것이다.

이때, 각 프로세스가 실제로 물리 메모리에 접근하는 것이 아니라, 페이지 테이블을 이용해서 가상 주소를 물리 주소로 변환하는 페이지 테이블을 이용하여 메모리에 접근한다. 이 과정에서 운영체제는 현재 실행중인 프로세스에 대해서, 해당 PCB에 있는 각 프로세스의 페이지 테이블 정보를 통해 메모리에 접근한다.

가상 메모리를 통해, 여러 프로세스가 메모리를 공유하는 경우

예를 들어, 여러 프로세스가 같은 프로그램을 실행하는 경우가 있다. 이 경우, 해당 프로그램의 코드와 라이브러리 등의 데이터는 모든 프로세스에서 공유될 수 있다.

가상 메모리를 사용하지 않는다면, 모든 프로세스는 해당 프로그램의 코드와 데이터를 각각 메모리에 로드해야하는데, 매우 비효율적이다.

하지만 가상 메모리를 사용하면, 해당 프로그램의 코드와 데이터를 한 번만 메모리에 로드하고, 페이지 테이블을 사용하여 여러 프로세스가 이를 공유할 수 있게 된다. 결국 메모리 사용량을 줄이고, 메모리에 저장되는 중복 데이터의 양을 줄일 수 있다.

또, 여러 프로세스가 같은 파일을 사용하는 경우에도 가상 메모리의 이점이 있다. 예를 들어, A,B,C라는 세 개의 텍스트 편집기 프로그램이 같은 텍스트 파일을 편집하고 있다고 가정해보자. 그럼, 각각의 프로세스들은 자신만의 페이지 테이블을 갖게 되는데, 이 때 각 프로세스가 사용하고자 하는 텍스트 파일의 주소를 페이지 테이블에 맵핑한다. 이때, 모두 같은 가상 메모리 주소 공간에 맵핑하게 되면, 물리 메모리에는 단 한번의 로드만 이루어진다. 각 프로세스마다 독립적으로 로드되지 않는다.

결론적으로, 각 프로세스들은 각자 자신의 주소 공간으로 인식하는 해당 메모리가, 실제로는 물리 메모리에서 공유되고 있는 것이다.


Reference

Book - 혼자 공부하는 컴퓨터 구조+운영체제

profile
with programming

0개의 댓글