frame_table프레임 테이블을 만들어야하는 이유는 뭘까? 우리는 페이지 폴트시 프레임을 할당하고 페이지와 매핑해야한다. 이때 그것을 관리하는 페이지가 필요하게된다. 그렇담 이것을 언제 활용하게 될까?프레임 테이블은 현재 물리메모리에 올릴수 있는 프레임이 꽉차 더이상 물리메모리에 올릴수 없을때 어느 프레임을 swap out을 할지 정할때 사용하게 된다. 이때 프레임 테이블을 참조해 교체 알고리즘에 때라 swap out할 프레임을 정하게 된다.struct framevm헤더 파일에 frame_table을 정의한다. list로 frame_table을 만든 이유는 clock 교체 알고리즘을 사용하기 위해서다.그리고 frame 구조체에 프레임 테이블에 삽입할 list_elem을 정의한다.vm/vm.hstruc..
Supplement Page Table보충 페이지 테이블은 각 페이지에 대한 추가 데이터를 가지고 있어 페이지테이블을 보완한다. 보충 페이지 테이블이 필요한 이유는 크게 두가지다페이지 폴트 발생 시, 커널이 보충 페이지 테이블을 참고해 프레임과 매핑이 안되었는지 안되었을때 프레임에 할당해야할 데이터는 어떤 데이터인지를 확인한다.커널은 프로세스가 종료될 때 메모리 누수를 막기위해 해제해야할 페이지를 보충 페이지 테이블을 참조해 결정한다. 페이지 폴트 처리페이지 폴트 발생시 커널은 anonymous page인지 file-backed페이지인지 확인한다. 파일 또는 스왑 슬롯에서 페이지를 가져와야 한다면. userprog/exception.c의 페이지 폴트 핸들러 page_fault()는 vm/vm.c의 페이지..
Virtual Memory가상메모리는 DRAM의 추상화다. 이게 무슨 말일까? CPU가 데이터를 읽고 쓰려면 물리메모리 즉, DRAM에 적재되어야 사용할 수 있다. 이때 우리는 이런 경우를 신경쓸 필요가 있나?파일을 로드하거나 동적으로 메모리를 할당할때 물리메모리의 어느곳에 적재되어야하는지물리메모리의 크기보다 데이터의 크기가 클때 어떻게 해야하는지현재 실행중인 프로세스가 다른 프로세스가 사용중인 메모리 영역을 침범하지는 않는지 우리는 이런 경우를 신경 쓰지 않고 정적 파일을 물리메모리에 로드하거다 동적으로 메모리를 할당 받는다. 이런 궂은 일은 운영체제가 하고 우리에게는 API를 제공해주는 거다. 우리는 DRAM을 추상화한 가상메모리를 사용하는거다.처음 운영체제를 설계할때 디자인 컨셉중에 하나는 하나의 ..