가상메모리란 무엇입니까?

가상 메모리, 또는 가상 기억 장치는 메모리를 관리하는 방법의 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식을 말한다. 이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다.

가상적으로 주어진 주소를 가상 주소(virtual address) 또는 논리 주소(logical address) 라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical address) 또는 실주소(real address)라고 한다. 가상 주소의 범위를 가상 주소 공간, 물리 주소의 범위를 물리 주소 공간이라고 한다.

가상 주소 공간은 메모리 관리 장치(MMU)에 의해서 물리 주소로 변환된다. 이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리상에 어떻게 존재하는지를 의식할 필요가 없어진다. 대부분의 현대적 아키텍처와 운영 체제는 가상 메모리 기능을 제공하며, 각 응용 프로그램에 더 적합한 메모리 관리를 위해 어도비 포토샵과 같은 일부 응용 프로그램은 스스로 가상 메모리를 관리하기도 한다.

가상 메모리의 개념은 1957년에 발표되었다. 실제 적용된 것은 맨체스터 대학이 Atlas용으로 1961년에 개발한 것이 최초이다. 1965년에 MIT가 개발한 MULTICS 시스템 이후 본격적으로 채용되기 시작했다. 가상 메모리는 크게 나누어 세그먼트(segment) 방식과 페이징 방식의 2종류가 있다. 예를 들어 MC68000 시스템에서는 68451(세그먼트(segment) 방식)과 68851(페이징 방식) 두 가지의 MMU가 준비되어 있었다.

▲ 가상 메모리는 활성 RAM과 DASD 상의 비활성 메모리로 결합되어 있다

  • 개념

(1) 보조기억 장치의 일부를 주기억장치처럼 사용하는 것

(2) 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 기법

(3) 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용

(4) 가상기억장치 주소를 주기억장치 주소로 바꾸는 변환 작업 필요(Mapping)

(5) 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용

▲ 주소 변환 순서

  • 가상기억장치(가상메모리) 구현 기법

(1) 페이징 기법 Paging

가. 가상 기억 장치와 주기억장치 영역을 동일한 크기로 나눈 후 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행

나. 외부 단편화는 발생하지 않으나 내부 단편화 발생

(2) 세그먼테이션 기법 Segmentation

가. 가상 기억 장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억 장치에 적재

나. 기억 공간 절약을 위해 사용함

다. 프로그램을 배열, 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트라고 하며 각 세그먼트는 고유한 이름과 크기를 갖고 있음

라. 기억장치 보호키 (Storage Protection Key) 필요

  • 페이지 크기에 따라

(1) 페이지 크기가 작을 경우

가. 페이지의 단편화가 감소되고 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어 듬

나. 페이지 맵 테이블의 크기가 커지고 맵핑 속도가 늦어짐

- 프로세스(프로그램) 수행에 필요한 내용만 주기억장치에 적재할 수 있고 국부성(locality)에 더 일치할 수 있기 때문에 기억장치 효율이 높아짐

다. 디스크 접근 횟수가 많아져 전체적인 입/출력 시간은 늘어남

(2) 페이지 크기가 클 경우

가. 페이지 정보를 갖는 페이지 맵테이블의 크기가 작아지고 맵핑 속도가 빨라짐

나. 디스크 접근 횟수가 줄어들어 전체적 입/출력의 효율성이 증가됨

- 페이지의 단편화가 증가, 한 개의 페이지를 주기억 장치로 이동하는 시간이 늘어남

- 프로그램 수행에 불필요한 내용도 주기억장치에 적재될 수 있음

운영체제

하드웨어와 소프트웨어에 대해 설명해보세요.

운영체제

캐시와 캐시의 종류에 대해 설명해보세요.

커뮤니티 Q&A

이론과 관련된 게시글이에요.

이해가 안 되거나 궁금한 점이 있다면 커뮤니티에 질문해 보세요!

게시글 작성하기