메모리 액세스 과정
-
프로그램을 실행 할 때, 반드시 모두 물리 메모리에 있어야 할 필요는 없으므로, 일부분만 물리 메모리에 올려 놓고 실행된다.
-
따라서 프로그램은 더 이상 물리 메모리에 의해서 더 이상 제약 받지 않으며, 사용자들은 매우 큰 가상 공간을 가정하고 프로그램을 만들 수 있고, 프로그래밍 과정이 간단해진다.
-
각 사용자 프로그램이 더 작은 메모리를 차지하므로 더 많은 프로그램을 동시에 수행할 수 있다.
-
가상 메모리에서는 페이지들이 실행 과정에서 실제 필요할 때, 메모리에 적재되게 된다.
-
위의 그림을 보면,
CPU
에서 메모리에 접근할 때,MMU
를 통해서 페이지 테이블에 접근한다. -
페이지 테이블은 가상 주소와 물리 주소를 맵핑하고 있고,
MMU
를 통해서 접근하는 메모리가 테이지 테이블에 맵핑 되어 있지 않다면 페이지 폴트(page fault
)를 발생 시킨다. -
페이지 폴트가 발생하고 나서 가상 메모리와 물리 메모리가 맵핑되고, 가상 메모리를 통해서 물리 메모리에 접근할 수 있게 된다.
페이지 교체
-
기본적인 페이지 교체는 다음과 같다. 메모리에서 빈 프레임이 없다면 현재 사용되지 않는 프레임을 찾아서 그것을 비워버린다.
-
그 프레임의 내용을 스왑 (
swap
) 공간에 쓰고 그 페이지가 메모리에 더 이상 존재하지 않는다는 것을 나타내기 위해서, 페이지 테이블을 비운다. -
어떤 페이지를 비울지에 대해서는 다음과 같은 알고리즘이 있다. (
FIFO
,LRU
,LFU
,MFU
)
세그먼트 폴트와 페이지 폴트의 차이점
-
세그먼트 폴트 : 세그먼트 폴트는 컴퓨터 소프트웨어의 실행중에 일어날 수 있는 오류로서, 프로그램이 허용되지 않은 메모리 영역에 접근을 시도하였을 때 발생합니다.
-
페이지 폴트 : 페이지 폴트는 메모리에 적재된 페이지 중에 사용 페이지가 없을 때 발생한다. 페이지 폴트가 발생하고 나서, 페이지 테이블에 가상 주소와 물리 주소가 맵핑되고 나서는 발생하지 않는다.
PS
명령어를 사용하여 실제 사용하는 메모리와 가상 메모리 크기를 확인하는 방법
ps
명령어를 통해서,RSS
항목을 보면 다음과 같이 설명하고 있다.- 상주하고 있는 메모리 사이즈이며, 스왑되지 않은 물리적 메모리라고 설명되어 있다.
- 반면에
VSZ
는 프로세스의 가상 메모리 크기라고 설명되어 있다.
ps -eo pmem,rss,vsz,comm
위의 명령어를 실행하여, 프로세스 별 실제 사용하고 있는 물리 메모리와 가상 메모리를 확인할 수 있다.
참고 문헌
>> Home