가상 메모리(Virtual Memory)란?
가상 메모리는 물리 메모리와 논리 메모리를 분리함으로써, 작은 메모리를 가지고도 얼마든지 큰 가상 주소 공간을 프로그래머에게 제공할 수 있는 기술이다.
가상 메모리를 사용하면 프로세스 전체를 메모리에 온전히 올리지 않아도 실행할 수 있다. 즉, 물리 메모리의 크기보다 큰 프로그램을 실행할 수 있다.
요구 페이징 (Demand Paging)
요구 페이징은 필요한 페이지만 메인 메모리에 로드하는 페이징 방식이다.
HDD, SDD와 같은 보조 저장장치에 저장된 실행 파일을 실행하려면 메인 메모리로 로딩하는 작업이 필요한데, 요구 페이징을 사용하면 실행 파일 전체를 메모리에 올리지 않고 실행 중에 요청된(demanded) 페이지만 메모리에 로드한다.
이때 메모리에 로드되지 않은 페이지에 접근하면 페이지 폴트(page fault)가 발생한다. 요구 페이징 방식에서 페이지 폴트를 어떻게 처리하는지 알아보자.
페이지 폴트를 처리하는 과정
페이지 폴트 발생시 페이지 폴트 트랩(page-fault trap)을 발생시켜 운영체제에 인터럽트를 건다. 페이지 폴트를 처리하는 과정은 다음과 같다.
- 프로세스에 대한 페이지 테이블을 검사하여 메모리 참조 값이 유효(valid)인지 무효(invalid)인지 확인한다.
- 무효한 페이지에 대한 참조이면 → 해당 프로세스를 중단한다.
- 유효한 페이지인데 메모리에 로딩되지 않았다면 → 페이지를 보조 저장장치로부터 가져온다.
- 물리 메모리에서 가용 프레임(free frame)을 찾는다.
- 가용 프레임에 페이지 폴트가 발생한 페이지를 할당하도록, 해당 페이지를 보조 저장장치에서 읽어온다.
- 해당 페이지가 메모리에 있다는 것을 저장하기 위해 페이지 테이블 갱신, 프로세스의 내부 테이블을 수정한다. (invalid bit → valid bit)
- 트랩에 의해 중단되었던 명령어를 다시 수행한다. 이제 프로세스는 페이지가 메모리에 있는 페이지에 접근할 수 있다.
'운영체제' 카테고리의 다른 글
[OS] 경쟁 상태(Race Condition) (0) | 2024.05.14 |
---|---|
[OS] 새로운 프로세스는 어떻게 만들어질까? fork(), exec(), wait() (0) | 2024.05.02 |
쉘(Shell)과 커널(Kernel) (0) | 2023.09.18 |
[OS] 프로세스 스케줄링 (3) | 2023.07.20 |
크론탭(crontab)을 이용한 스케줄링 (0) | 2023.07.11 |