일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 일지 시작한 지 얼마나 됐다고
- alarm clock
- 셋업
- 자 이제 시작이야
- 글루민
- 황금 장미
- 핀토스 프로젝트 1
- 글리치
- 가테
- 아직도 실험 중
- Project 1
- multi-oom
- 핀토스 프로젝트 4
- 끝
- 핀토스 프로젝트
- 핀토스 프로젝트 3
- 마일섬
- 노가다
- 바빠지나?
- PINTOS
- 핀토스 프로젝트 2
- 내일부터
- botw
- 제발흰박
- 파란 장미
- Today
- Total
목록전체 글 (128)
거북이의 쉼터
구현은 어디가고 다른 챕터 가이드라인이냐고 할 수 있다. 맞다. 사실 구현 포스팅을 작성하기 위해 열심히 코드를 조지고 있었다. 근데 작성을 하면서 수정을 하던 도중, VM_FILE을 destroy하는 상황에 사용하는 file_backed_destroy 함수를 구현하게 되었다. 해당 함수가 해야 하는 역할은 현재 VM_FILE의 dirty bit가 켜져있으면, 해당 내용을 원래 파일에 작성 (write_back)을 하고, 그 페이지에서 보유하고 있는 자원을 해소하는 것이었다. 그런데, 중요한 것은 이 write_back 역할을 하는 함수가 있다는 것이다. 바로 file_backed_swap_out이다. /* Swap out the page by writeback contents to the file. *..
지난 시간에 매뉴얼은 다 봤으니 설계를 해 보자. VM_FILE에 저장을 해야 하는 것들을 생각해보면: 인자로 들어가는 type (마커가 있을지도 모르기에) swap in/out을 하기 위해 해당 페이지가 어디에서 기원했는지를 알려주는 정보 (file 포인터, ofs 등) nullbyte 패딩을 위한 길이 해당 인자들은 struct file_page에 넣어주고 관리할 것이다. 문제는 해당 인자들을 넘기려면 aux에서 넘겨야 하기 때문에 file_backed_initializer에서는 해줄 것이 마땅히 없다. 중요한 것은 lazy_load_segment와 유사하게 aux가 넘겨지는 init을 구현해주는 것이다. 아직도 initializer 계열 함수에 kva가 들어가 있는 이유를 모르겠다. 왜지? swap..

드디어 VM_UNINIT과 VM_ANON의 좁고 편협한 사고에서 벗어나 VM_FILE을 다루게 되는 mmap이다. 보이는 것처럼 나는 아주 "절거워"질 예정이다. 지금 여기까지 해온 사람들에게는 익숙하겠지만 mmap은 파일의 내용을 메모리 상에 올려 입출력을 빠르게 해줄 수 있는 기법이다. 구현할 mmap의 형태는 다음과 같으며, void *mmap (void *addr, size_t length, int writable, int fd, off_t offset); addr에 주어진 length 만큼의 공간에 fd에 대응되는 파일의 offset에 해당하는 내용을 매핑한다. 이 때, 매핑된 해당 페이지의 쓰기 권한은 writable을 따른다. 주어진 addr은 반드시 page-aligned 되어 있어야 하며..
보호되어 있는 글입니다.