가상 메모리란?
위키에서는 하기와 같이 정의한다.
가상 메모리 또는 가상 기억 장치는 메모리를 관리하는 방법의 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방법을 말한다.
이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치(Memory: RAM)보다 큰 메모리 영역을 제공하는 방법으로 사용된다.
가상적으로 주어진 주소를 가상주소(Virtual address) 또는 논리 주소(logical address)라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical address) 또는 실주소(real address)라고 한다.
가상 주소의 범위를 가상 주소 공간, 물리 주소의 범위를 물리 주소 공간이라고 한다.
가상 주소 공간은 메모리 관리 장치(MMU)에 의해 물리 주소로 변환 된다.
이 덕분에 프로그래머는 가상 주소 공간에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리상에 어떻게 존재하는지 의식할 필요 없다. (맞는 표현이나 가상 메모리를 설명하기 위한 적절한 비유는 아닌 것 같음.)
대부분 현대적 아키텍처와 운영 체제는 가상 메모리 기능을 제공하며, 각 응용 프로그램에 더 적합한 메모리 관리를 위해 어도비 포토샵과 같은 일부 응용 프로그램은 스스로 가상 메모리를 관리하기도 한다.
Wiki의 설명이 어렵다고 생각 되는 분은 하기 링크의 사이트를 통해 접근하기 바란다. (쉽게 설명 되어 있음)
http://cappleblog.co.kr/247
Appendix
포토샵과 같은 해당 응용프로그램들은 프로세스가 실제 필요로 하는 부분만 메모리로 올리는 Demand-Paging 기법을 사용한다.
만약 메모리가 모두 소진되어 저장 공간이 부족하다면, 해당 툴들의 작업 내용은 어디에 저장 될까?
이러한 작업을 저장하기 위해 디스크 공간을 메모리처럼 활용할 수 있는 가상 메모리 공간이 운영체제에서는 운용되고 있으며, 디스크 상에 존재하는 이러한 파일을 paging file (또는 swap file)이라고 하며,
모든 프로세스가 사용할 수 있는 가상 메모리로 사용된다.
(리눅스를 비롯한 모든 운영체제의 기본은 file의 형태로 관리되어 진다.)
모든 프로세스들은 자신만의 가상 주소 공간을 가지고 있다.
32비트/64비트 프로세스는 각 비트수에 맞게 최대 4GB/16GB의 주소 공간을 가진다.
모든 프로세스들은 자신만의 주소 공간을 가지고 때문에, 특정 프로세스 내에서 쓰레드가 수행될 때 해당 쓰레드는 프로세스가 소유하고 있는 메모리에 대해서만 접근이 가능 하다.
다른 프로세스에 의해 소유된 메모리는 숨겨져 있으며, 접근이 불가하다.
윈도우 또한 운영체제 자체가 소유하고 있는 메모리 또한 숨겨져 있다. 이는 특정 프로세스의 수행 중인 쓰레드가 운영체제의 데이터에 접근하는 것이 불가능함을 의미 한다.
따라서 A 프로세스가 0x12345678 주소에 무엇인가를 저장하였으나, B 프로세스 역시 0x12345678 주소에 무엇인가를 저장할 수 있으며, 이 주소들은 완전히 독립되어 있는 것이다.
'Software' 카테고리의 다른 글
리눅스(Linux) vs 유닉스(Unix) 역사 및 차이 비교 (3) | 2016.04.21 |
---|---|
(용어)BSD(Berkeley Software Distribution) and Shell(셸) (0) | 2016.04.21 |
GNU C library(glibc) 와 C library(libc)와의 관계 (0) | 2016.04.12 |
정적 라이브러리 & 동적 라이브러리 (0) | 2016.01.27 |
커널(Kernel)이란? (0) | 2015.08.31 |