

가상 주소는 Virtual Page Number(8비트) 와 Virtual Page Offset(6비트)으로 분리 가능하다
만약 0x03D4 라는 가상 주소가 있다면 일단 이걸 2진수로 변경하고 진행한다.
분해 결과
VPN : 00 0011 11 = 0x0FVPO : 01 0100 = 0x14TLB란?
가상 메모리의 주소를 물리 메모리의 주소로 번역하기 위해 사용되는 캐시.
VPN 분해 (VPN = 00 0011 11)
VPN는 또 TLB Tag(왼쪽부터 6비트), TLB Index(하위 2비트)로 분리 가능하다
분해 결과
TLBT(Tag) : 00 0011 (0x03)
TLBI(Index) : 11 (0x03)


PPN : 0x0DPPO = VPO(offset이기에 동일) : 0x14만약 TLB Miss 라면 MMU는 Page Table Entry에 접근한다. 만약 여기에도 없다면 그게 Page Fault.
전 단계에서 생성한 물리 주소로 L1 캐시에 접근하는 과정이다.
Cache Tag(CT), Cache Index(CI), Cache Offset(CO)로 분해가능하다.

CT(Tag) : 0011 01 (0x0D)CI(Index) : 01 01 (0x05)CO(Offset) : 00 (0x00)TLB 와 동일한 방식으로 찾는다.
CI로 인덱스를 확인하고, 그 테이블에 CT가 있는지를 확인, 존재한다면 Cache Hit, 없다면 Cache Miss.

위 예시는 캐시 히트이므로
물리 주소인 0x354 + Offset(CO) 주소로 부터 36바이트 만큼 데이터를 읽고
MMU를 거쳐, CPU로 전달된다.
가상 메모리를 구현하여 메모리 크기 제한을 없애기.

// vm.h
/* Representation of current process's memory space.
* We don't want to force you to obey any specific design for this struct.
* All designs up to you for this. */
struct supplemental_page_table {
};
vm_try_handle_fault 함수 수정만약 유효하다면, 해당 페이지에 들어갈 데이터의 위치를 파악,
file System, Swap slow, 0으로 채워진 페이지 등 어디서 데이터를 가져올건지를 정해야한다.
Page를 담을 frame 확보
Data를 frame에 채우기
Page table 항목을 업데이트 한다.
문과적 감성으로 Docs좀 친절히 써주면 좋겠당....^^