VMA(Virtual Memory Area)


PCB(task_struct)안에 있는 mm(main memory_struct)안에는 mmap field가 있는데 mmap이 VMA 연결리스트를 가리키고 있다.

mm_struct = Pocess Addres Space 프로세스에 할당된 메모리에 대한 정보

address space중에서도 vma(사용중인 메모리)를 관리하는 리스트가 따로 있다. 이것이 vm_area_struct이고 이 안에는 해당 area의 start, end adrress, 권한(읽기, 쓰기, 실행 등) 등이 담겨있다.

mm_struct 구조체 필드에는 VMA뿐만아니라, page directory : page mapping table도 있다.

page mapping table


프로그램의 크기가 크면, 프로그램 전체를 메인 메모리에 못 올리기 때문에, 나눠서 메인 메모리에 올리는데 이때 일정한 크기로 나눈걸 page라고한다.

그러면 일정한 크기로 나눠진 page를 run time에 메인 메모리에서 읽어오는데 이것을 page fault라고한다.

page fault의 발생으로 page가 메인 메모리에 올라오면, 그 page에 대한 주소정보또한 가지고 있어야 하기에 이것들을 모아둔걸 page table 또는 page mapping table이라고 한다.

Page Table은 프로그램의 Page수만큼 할당된다.

page의 주소 + page의 크기(offset)

16비트 32비트 64비트 컴퓨터마다 address(레지스터의 크기)의 크기가 다르기 때문에 그에 맞춰서 할당가능한 page의 수가 달라진다(4KB가 표준). Mapping Table의 수가 정해진다면 컴퓨터의 address크기 - Mapping Table 수 만큼 page를 쓸 수 있다.

순서

32비트 컴퓨터 기준으로 20비트(약 100만) 만큼의 page를 쓸 수 있는데 많이 쓰지를 않으니 불필요한 세그먼트가 너무 많다. 그래서 반으로(10비트로) 낮추고 1대 1로 대칭이되는 table을 하나더 만든다. (1024 * 1024 = 100만개의 세그먼트에서 1024개의 table에 각각의 세그먼트에 1024가 할당된다.)그리고 table에 비어 있는 세그먼트는 만들어주지 않고, table에 등록되어있는 page만 10비트(1024)를 할당해준다.

프로세스 마다 PCB가 있다. 이 task_struct구조체는 mm을 참조하고 있는데, 이 mm_struct는 address space를 가지고 있다. address space 공간에 데이터로 쓰고 있는 것들이 있는데 이것들은 vm_area_struct가 연결리스트로 가리키고 있다.

mm_struct에는 pgd(page drectory)도 있다.

Pgd는 페이지와 페이지를 관리하는? 가리키는? 부분으로 나뉜다.

PTE(PageTableEntry)에는 페이지에 대한 정보가 담겨있다.