가상 메모리 Virtual Memory
프로그램이 혼자 메모리를 사용하는 것처럼 메모리를 가상화한 것
애플리케이션을 실행하는데 최소한 얼마만큼의 메모리가 필요한가에 집중하여 메모리를 사용할 수 있다
애플리케이션의 일부분만 메모리 (기억 장치) 에 올려진다면, 메모리에 올라가지 않은 나머지는
어디에 위치해야 할까? -> 보조 기억장치, 디스크에 위치한다, 즉, 가상 메모리의 핵심은 보조 기억장치이다
가상 메모리의 주요 기능 및 특징
1) 보안성 및 안정성
프로그램이 메모리에 간접 접근하며 기본적으로 프로그램 간 메모리가 분리되며
필요한 경우에만 특정 메모리를 서로 공유해 메모리 접근에 대한 오류를 줄인다
2) 개발 용이성
프로그램은 각자 고유한 메모리를 사용하여 실제 메모리 용량과는 무관하게 프로그램을 만들 수 있다
3) 메모리 관리
운영체제는 프로그램이 추상화된 가상 메모리에 대해 별도 사용되지 않는다고 판단되는
메모리의 일부분을 압축하거나 스왑하여 실제 메모리의 공간을 확보한다
+ 압축이라는 건 할당된 메모리들을 다 모아서 가용 메모리 용량을 늘리는 것, 근데 압축을 하면 오버헤드가 많이 발생해서 비효율적
MMU Memory Management Unit
가상 메모리를 구현하기 위한 특수 메모리 관리 하드웨어
MMU는 가상 메모리 주소를 물리 주소로 변환하고, 메모리를 보호하는 기능을 수행한다
MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행된다
그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로
MMU는 RAM을 여러 부분 (페이지, Pages) 로 나누어 각 페이지를 하나의 독립된 항목으로 처리한다
+ MMU 는 페이지 테이블에 키 - 값 쌍 (엔트리) 으로 페이지 정보를 저장한다
페이지 번호와 오프셋을 가지고 페이지에 접근하여 Frame Number 를 가지고 온다
(FN은 물리적 주소를 가리키지만, 정확히 어떤 주소를 가리키는지 공부하라고 함
오프셋은 시작점으로부터의 상대 주소
페이지 Page
가상 메모리의 주소 공간을 일정한 크기의 블록으로 나눈 단위를 페이지라고 하고, 각 페이지는 물리 메모리의 특정 위치에 대응된다
페이지의 크기는 하드웨어에 의해 결정이 되며 운영체제는 이러한 페이지들을 페이지 테이블 안에 집어 넣어서 관리하고 있다
+ 페이지는 Disk에 있다
페이지 테이블은 가상 주소와 물리 메모리의 실제 주소를 연결시켜주는 테이블이다
가상 메모리 공간은 비페이징 공간 Nonpaged Space 과 페이징 공간 Paged Space 으로 나뉘어져 있다
비페이징 공간은 항상 물리 메모리에 존재하는 공간으로 페이징 파일로 옮겨지지 않는다
반면 페이징 공간은 운영체제가 필요하지 않을 경우 물리 메모리에서 페이징 파일로 옮길 수도 있는 공간이다
따라서 비페이징 공간은 페이지 폴트가 절대로 일어나지 않는다
+ 페이지는 execve() 라는 시스템 콜이 들어올 때 가상 메모리를 할당해 준다
페이징 Paging
가상 메모리를 고정 크기의 페이지로 나누어 물리적 메모리에 매핑하는 메모리 관리 기법
프로세스의 논리 주소 공간을 페이지 Page 라는 일정 단위로 자르고
메모리의 물리 주소 공간을 Frame 이라는 페이지와 동일한 일정 단위로 자른 뒤
페이지를 프레임에 할당하는 가상 메모리 관리 기법
페이지 폴트 Page Fault
운영체제는 사용되지 않는 페이지를 물리 메모리에 계속 저장하지 않고 디스크에 있는 페이징 파일로 옮긴다 (swap)
페이지 테이블에서 유효 비트를 통해 페이지가 실제 물리 메모리에 존재하는지 알 수 있다 Valid Bit - Flag Data
프로세스가 가상 주소에 접근하게 되어 MMU가 페이지 테이블을 참조한 뒤 페이지를 확인해 보는데
유효하지 않을 경우 페이지 폴트 Page Fault 라는 트립을 발생시킨다
페이지 폴트를 감지한 운영체제는 CPU의 동작을 잠시 중단시킨 뒤 해당 페이지를 페이징 파일에서 가져와서
물리 메모리의 비어있는 공간에 적재시키고 페이지 테이블을 최신화시킨 뒤 CPU의 동작을 재개시킨다
사용되지 않는 페이지를 페이징 파일로 옮기는 것과
물리 메모리에 없는 페이지를 페이징 파일에서 가져와서 물리 메모리에 적재하는 일은 운영체제가 자동으로 수행한다
다만 페이지 폴트는 그 과정 상 디스크에 접근하기 때문에 파일 입출력이 발생하므로 성능이 하락된다
쉽게 다시 설명하면, RAM은 제한적이기 때문에 RAM에 존재하는 페이지도 있고 Disk에 존재하는 페이지도 있는데
CPU가 가상 주소로 접근한 페이지가 Disk에 있으면 (RAM 상의 물리적 주소가 없으면) 페이지 폴트가 발생하고,
해당 페이지를 RAM으로 올리는 과정에서 I/O이 발생하니 주의가 필요하다
페이지 폴트가 자주 일어날수록 I/O가 잦으므로 성능이 떨어진다 (이건 나중에 봐야지)
+ 페이지 폴트가 일어나면 MMU가 트랩 함수 발생 -> CPU가 예외 처리 핸들러 호출 ->
가상 주소를 분해해서 페이지 번호와 오프셋을 분리시켜서 가상 메모리에서 해당 페이지 값을 다시 찾아오고
DMA로 가서 메모리에 적재시킨다 (Direct Memory Access, 모든 데이터 읽거나 쓸 때 DMA를 거침)
+ 팀 스터디
PCB Process Control Block
디스크에 SWAP 영역이 있는데
재배치 가능한 목적 파일과 동일한 구조로 이루어져 있다
다시 정리하면
가상메모리는 Disk (보조기억장치) 에서 실행할 프로세스의 일부분만 RAM에 실어서 실행하기 위한 기술
페이지는 가상 주소를 정리해둔 공간이고, 물리 주소와 일대일 대응된다
MMU가 그 페이지를 참고하여 가상 주소의 실제 물리 주소를 찾을 수 있다
가상 주소로 접근한 페이지가 RAM에 없고 Disk에만 있으면 페이지 폴트가 일어난다
(아직 RAM에 적재되지 않은, 첫 진입 시에 페이지 폴트가 일어난다)
가상메모리가 생길 때 실행할 페이지를 RAM에 적재하면서 주소를 받으면
'TIL' 카테고리의 다른 글
[TIL] 시스템 콜 System Call (0) | 2024.10.21 |
---|---|
[TIL] 단편화 Fragmentation (2) | 2024.10.19 |
[TIL] RB Tree 구현하기 #2 (1) | 2024.10.17 |
[TIL] 이진 탐색 트리 BST, Binary Search Tree (0) | 2024.10.15 |
[TIL] Red-Black Tree 기본 개념 (3) | 2024.10.11 |