필요해지면 그때 메모리에 로딩하는 방법. 프로세스가 실행을 시작할 때 당장 필요한 메모리 부분만 메인메모리에 로드된다.

“A page is allocated “

페이지에 해당하는 페이지 구조체는 존재하지만 연결된 프레임은 아직 없고, 페이지에 대한 실제 콘텐츠들이 아직 메모리에 로드되지 않았다는 의미. 페이지 폴트로 인해 실제로 콘텐츠가 필요하다는 시그널을 받을 때 콘텐츠가 로드된다.

Lazy Loading 흐름

1. 커널이 페이지 할당 요청을 받으면 vm_alloc_page_with_initializer 호출

bool vm_alloc_page_with_initializer (enum vm_type type, void *va,
        bool writable, vm_initializer *init, void *aux);

함수 인자

→ aux 를 통해서 세그먼트를 읽을 파일을 찾고 최종적으로는 세그먼트를 메모리에서 읽어야 함.

함수가 하는 일

: 초기화 되지 않은 페이지를 생성 (페이지 구조체를 할당)하고 페이지 타입에 맞는 적절한 초기화 함수를 세팅. 페이지 폴트를 처리하는 과정에서 uninit_initialize 을 호출하고 이전에 당신이 세팅해 놓은 초기화 함수를 호출합니다.

static const struct page_operations uninit_ops = {
	.swap_in = uninit_initialize,
	.swap_out = NULL,
	.destroy = uninit_destroy,
	.type = VM_UNINIT,
};

위 함수는 처음으로 폴트가 발생한 페이지를 초기화 합니다. 먼저 uninit 페이지의 멤버변수인 vm_initializer와 aux를 가져온 후, page_initializer를 함수포인터로 호출합니다. 여기서 함수 포인터로 호출하는 부분을 수정하게 될 것입니다.