본문 바로가기

SW 사관학교 JUNGLE/개발일지

[PintOS-KAIST]Project3: Virtual Memory preview

이번 핀토스 프로젝트 3의 주제인 가상메모리 구현에 앞서 알아야 할 몇가지 사전 지식들을 정리하려고 한다.

 

가상 메모리

가상 메모리는 물리 메모리(실제 메모리)의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술이다. 프로그래머는 가상 메모리 덕분에 물리 메모리의 크기에 구애받지 않고 작업할 수 있는 커다란 공간을 얻게 되는 셈이다. 즉, 가상 메모리(virtual memory)는 크기가 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술이다.

가상 메모리를 사용하면서 실제 물리 메모리에 연결하는과정이 필요한데,이러한 작업을 동적 주소 변환(Dynamic Address Translation, DAT)라고 한다. 동적 주소 변환을 거치면 프로세스가 아무 제약 없이 사용자의 데이터를 물리 메모리에 배치할 수 있다. 이 과정에서 메모리 관리자 물리 메모리를 어떤 방법으로 나눌지, 사용자 프로세스를 어디에 배치할 지, 부족한 물리 메모리를 어떻게 처리할 지 등의 복잡한 문제를 처리한다.

 

메모리를 분할하는 방식은 가변 분할 방식고정 분할 방식으로 나누는데 가변 분할 방식을 이용한 메모리관리 기법은 세그멘테이션, 고정 분할 방식을 이용한 메모리 관리 기법은 페이징이라고한다.이중 paging에 대해 설명하겠다. 메모리를 관리하는 페이징 기법에서 가상 주소를 물리 주소로 변환하는 방법과 매핑 테이블 관리 방법에 대해 설명하겠다.

 

고정분할 방식을 이용한 가상메모리 관리 기법을 우리는 paging이라고 했다. 이는 물리 주소 공간을 같은 크기로 나누어 사용한다.

여기서 페이지는 프로세스 입장에서 바라본 메모리 공간이고 프레임은 물리 메모리 공간이다.페이지 테이블은 페이지와 프레임간의 매핑 정보인데 이는 프로세스마다 하나씩 존재한다. 하나의 페이지는 하나의 프레임과 매핑되는데 이에 대한 매핑정보를 페이지 테이블이 가지고 있어 가상주소가 물리메모리의 어디에 매핑되어있는지를 페이지 테이블을 통해 확인할 수 있다. 그런데, 저기 invalid라고 써져 있는 페이지테이블을 보자 이 의미는 페이지 5번에 대한 매핑정보가 프레임에 매핑되어있지 않다라는것을 의미한다. 즉,해당 페이지가 swap영역에 있다는것을 의미한다.

 

운영체제의 swapper는 물리메모리에 동작하고 있는 모든 프로세스를 로드하지 않는다. 운영체제의 pager는 프로세스의 모든 페이지를 물리 메모리에 로드하지 않는다.(메모리 효율을 위함)모든 페이지를 물리 메모리에 로드하지 않는다라는 말은 즉, 프로그램의 페이지가 물리 메모리에 부재할 수 있다라는것을 의미한다. 이는 page fault로 정의하고 이러한 page fault 발생시 가상 메모리에서 해당 페이지를 찾는 과정을 진행한다.

 

Demand page 는 다음과 같은 과정으로 진행된다.1.cpu는 물리메모리를 확인하여 페이지가 없으면 trap을 발생하여 운영체제에 알린다.2.운영체제는 cpu의 동작을 잠시 멈춘다.3.운영체제는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인한다. 없으면 프로세스를 중단한다.4.page fault 이면, 현재 물리 메모리에 비어있는 프레임이 있는지를 찾는다. 5.비어있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화한다.6.만약 프레임이 비어있지 않다면 프레임중 희생 프레임을 선별하고 이를 스왑영역으로 swap out후, 필요한 페이지를 물리메모리에 로드한다.7.중단되었던 cpu 다시 시작한다.

'SW 사관학교 JUNGLE > 개발일지' 카테고리의 다른 글

[PintOS-KAIST]Project2: SYSTEMCALL(1)  (2) 2024.05.14
[PintOS-KAIST]Project1:preview  (2) 2024.05.03
[PintOS-KAIST]Loading  (0) 2024.04.27