[06.02/week13]TIL

CHO WanGi·2025년 6월 2일

KRAFTON JUNGLE 8th

목록 보기
64/89

오늘 하루 요약


진짜 길잃음

✏️ 오늘의 한 일

  • Page Loading flow
  • PintOS SPT 구현 관련 함수 구현

🌈오늘의 성장!

Page Loading flow

Pml4을 보조하는 용도로 SPT를 사용한다...라는걸 알 수 있었다.

PintOS SPT 구현 관련 함수 구현

저번 글에서 SPT 초기화는 완료했다.
물론 TC가 없기에 검증은 못한다
이후 SPT 구현에 필요한 spt_find_pagespt_insert_page

spt_find_page

주어진 보조 테이블(spt)에서 특정 가상 주소(VA) 에 해당하는 struct page 정보를 탐색

/* Find VA from spt and return page. On error, return NULL. */
/*
	주어진 spt에서 주어진 va에 해당하는 struct page 정보를 탐색
*/
struct page *
spt_find_page(struct supplemental_page_table *spt UNUSED, void *va UNUSED)
{
	struct page *page; // 키 비교용 임시 페이지
	struct hash_elem *elem;
	if (spt == NULL || va == NULL)
	{
		return NULL;
	}

	/* TODO: Fill this function. */
	// 1. va를 key로 사용
	page->va = va;
	// 2. hash_find 함수 호출, spt에서 해당 키 가진 struct hash_elem 찾기
	elem = hash_find(&spt->pages, &page->hash_elem);
	// 3. 찾은 hash_elem => hash_entry 활용해서 페이지를 리턴
	// 4. 못찾으면 NULL
	return elem != NULL ? hash_entry(elem, struct page, hash_elem) : NULL;
}

spt_insert_page

spt에 전달된 struct page 정보를 삽입

/* Insert PAGE into spt with validation. */
bool spt_insert_page(struct supplemental_page_table *spt UNUSED,
										 struct page *page UNUSED)
{
	int succ = false;
	/* TODO: Fill this function. */
	// 유효성 검사 어떻게? => find를 통해서 주소에 대응되는것 체크
	// 없다면 집어 넣으면 되고 있다면 false 유지

	// NULL 을 반환해야 들어갈 수 있기에 true가 뒤로 가야함
	return hash_insert(&spt, &page->hash_elem) ? false : true;
}
  • spt_insert_page 수정 전 코드
	 if (hash_find(&spt->pages, &page->hash_elem) == NULL)
	 {
	 	hash_insert(&spt, &page->hash_elem); // spt에 페이지 삽입
	 	succ = true;
	 }
	 return succ;
	

처음에 find로 없어야 삽입할 수 있다고 해서 저렇게 했는데
팀원이 애초에 insert가 유효성검사를 하면서 삽입한다고 해서
간결하게 수정하였다.

⛏ 오늘의 삽질

도대체 뭐 부터 해야 해요...?

profile
제 Velog에 오신 모든 분들이 작더라도 인사이트를 얻어가셨으면 좋겠습니다 :)

0개의 댓글