210225 개발일지(80일차) - 운영체제(OS) 프로젝트 #3-4 VM Type(uninit, anon, file)

고재개발·2021년 3월 4일
0

OS Project

목록 보기
21/28

VM Type 확인

아래와 같이 vm.h 에 구현이 돼있다.
project4에서 쓰일 VM_PAGE_CACHE말고 위의 3개를 알아보자.

enum vm_type {
	/* page not initialized */
	VM_UNINIT = 0,
	/* page not related to the file, aka anonymous page */
	VM_ANON = 1,
	/* page that realated to the file */
	VM_FILE = 2,
	/* page that hold the page cache, for project 4 */
	VM_PAGE_CACHE = 3,

	/* Bit flags to store state */

	/* Auxillary bit flag marker for store information. You can add more
	 * markers, until the value is fit in the int. */
	VM_MARKER_0 = (1 << 3),
	VM_MARKER_1 = (1 << 4),

	/* DO NOT EXCEED THIS VALUE. */
	VM_MARKER_END = (1 << 31),
};

VM_UNINIT

한 번도 메모리에 load(initialize)되지 않은 것으로, uninit상태에서는 vm_anon혹은 vm_file타입으로 변할 가능성(?)을 갖고있다.

/* Uninitlialized page. The type for implementing the
 * "Lazy loading". */
struct uninit_page {
	/* Initiate the contents of the page */
	vm_initializer *init;
	enum vm_type type;
	void *aux;
	/* Initiate the struct page and maps the pa to the va */
	bool (*page_initializer) (struct page *, enum vm_type, void *kva);
};

VM_ANON(anonymous)

file type이 아닌 stack, heap, excutable 같은 메모리다. file type은 disk로 돌아갈 수 있지만, 이 친구들은 돌아갈 곳이 없다. 다음에 나올 swap in/out할 때, swap_disk를 따로 만들어서 여기에 swap in/out을 시켜줘야하는 것을 유의하자.
아래 깃북 내용을 참고해서 함수들을 만들어줘야 한다.

VM_FILE

단어 그대로 file type으로, 다음에서 구현할 swap in/out뿐 아니라 mmap과 munmap도 구현해줘야 한다. mmap과 munmap에 대해 알아보자.

profile
고재개발

0개의 댓글