jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. 수정사항 정리
    1. file_page 구조체 변경
    2. 초기화 규칙
    3. file_backed_destroy 수정
      1. 이전
      2. 이후
    4. do_mmap 수정
      1. 이전
      2. 이후
    5. lazy_load_segment 수정
      1. 이전
      2. 이후

수정사항 정리

file_page 구조체 변경

  • bool owns_file; 인자 추가
  • 파일 페이지가 file_reopen으로 얻은 핸들을 닫을지 추적


초기화 규칙

  • file_backed_initializer

    • owns_file = false로 초기화
  • do_mmap

    • aux 설정 시 owns_file = true로 설정
  • process.clazy_load_segment

    • owns_file = false로 복제 (공유 핸들 중복 close 방지)


file_backed_destroy 수정

이전

  • pml4 dirty 비트 확인 후 file_write_at 호출 → pml4_clear_page 수행
  • 프레임은 남겨둠
  • 파일 포인터가 있으면 무조건 file_closepml4_clear_page

이후

  • dirty 비트 확인 및 동기화 → 매핑 해제
  • frame->page, page->frame 끊기
  • vm_free_frame 호출해 프레임 반환
  • owns_file 플래그 확인 → mmap용으로 오픈한 핸들만 닫음
  • 포인터, 플래그 무조건 초기화


do_mmap 수정

이전

  • struct file_pageaux 복사 (소유 정보 없음)

이후

  • aux 생성 시 owns_file = true 설정
  • 실패 시 file_close로 누수 방지


lazy_load_segment 수정

이전

  • 실행 파일 세그먼트도 동일하게 복사

이후

  • 실행 파일 핸들은 공유되므로 owns_file = false로 복사
  • 중복 file_close 방지