ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SW 정글 84일차] Project 3 - Memory Mapped Files
    기타/SW 사관학교 정글 2021. 10. 26. 02:43

    오늘은 project3 memory mapped files 과제 구현을 시작했다.

    일단은 깃북과 한양대에서 만든 pintos ppt를 참고하면서 과제를 파악하고 코드를 이해하고 구현하는 것을 시도했다.

     

     

    1. Memory Mapped Files

    이번 과제에서는 지난 번에 했던 anonymous page와 다르게 memory-mapped page는 file-backed mapping이다.

    즉, project 3 초반에 정리한 내용 중에 page의 type에는 uninit, anonymous page, file-backed page3가지가 있다고 했었다.

    이 중에서 file-backed page에 mapping하는 경우를 이번 과제에서 구현하는 것이다.

    페이지의 내용은 존재하는 file의 복사본이 들어간다고 이해하면 된다.

    만약에 page fault가 발생하면 물리 프레임이 즉시 할당되고 contents는 파일에서 메모리로 복사된다.

    memory_mapped page가 unmmaped되거나 swapped out되면 content의 변경사항이 file에 반영된다.

     

     

     

     

    2. 내가 해야할 mmap()그리고 munmap()

    이번 과제에서 내가 해야할 것은 mmap()과 munmap() system call을 구현하는 것이다.

    mmap(), munmap()이라는 함수의 역할이 메모리에 접근하여 어떠한 행위를 하는 것이므로 유저모드가 아닌 커널모드에서 이루어져야한다.

    따라서 커널이 mmap()과 munmap()을 시스템 콜함수로 가지고 있어야한다.

    anonymous page를 구현할 때 정리한 것 중에 VM system에서는 lazy load(페이지를 할당받았을 때 물리 메모리에 실제 데이터가 자리를 잡고 가상 주소와 물리 주소가 매핑되는 것이 아닌 진짜 해당 데이터가 필요할 때 혹은 접근할 때 그제서야 물리메모리에 올리고 주소를 매핑하는 것)를 한다고 했다.

     

    memory_mapped page도 마찬가지이다.

    mmap()은 VM에 내가 인자로 준 정보를 활용하여 페이지를 할당받고 page fault가 일어나면 설정된 lazy_load_file함수가 실행되면서 실제 메모리에 매핑된다.

     

     

     

     

    3. 내가 이해한 mmap()함수의 흐름

    mmap() 시스템 콜 코드와 실제로 memory mapping이 일어나는 do_mmap() 그리고 page fault 시 어떻게 되는지를 직접 써보며 공부를 했다.

    mummap()은 함수가 간단하여 이해하기가 비교적 쉬웠다.

    memory mapping된 file을 mmap_file_info라는 구조체에 관리를 해준다.

    해당 구조체를 for문으로 돌리면서 mummap()해주고자하는 file을 찾아서 삭제를 해주고 동시에 spt에서도 관리가 되고 있으므로 spt에서도 해당 page를 remove해주면 된다.

     

     

     


    [오늘의 나는 어땠을까?]

    오늘은 계획한대로 project3 memory mapped files 과제를 마무리했다.

    남은 과제는 swap in/ swap out인데 미리 이 과제를 한 동료들에게 들으니 매우 어렵다고들 한다...

    일단 내 계획은 file system 개념을 먼저 공부할 생각이다.

    swap in/ swap out이라는 것이 swap disk와  memory사이에서 일어나는 것이여서 file system개념이 잡히지 않고서 먼저 건드리면 더 어렵다고 느껴질 것 같기 때문이다.

     

    이제는 pintos와 마주칠 날이 얼마 남지 않은 것같다.

    pintos를 가장 긴 기간동안 만난만큼 좋은 인연으로 남았으면 좋겠다.

    지금은 그닥 좋은 인연은 아니다..

    나를 너무 괴롭힌다.

    하지만 좋은 지식을 쌓게 해주고 나를 성장하게 해주니까 완전 악연은 아니기도하다.

    댓글

Designed by Tistory.