jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. 페이징
    1. 간단 정의
    2. 핵심 요소
    3. 하는 거

페이징

메모리 관리기법이다

간단 정의

프로세스의 가상 주소 공간을 고정 크기 블록(페이지) 으로 쪼개고, 이를 물리 메모리의 프레임에 필요한 것만 매핑해 쓰는 메모리 관리 기법


사실상 csapp에 나온다


핵심 요소

페이징이니까 가장 중요한건 페이지다

  • 페이지 : 가상 메모리의 고정 크기 블록

  • 프레임 : 물리 메모리의 같은 크기 블록

  • 페이지 테이블 : 각 페이지가 어느 프레임에 매핑 되었는지, 권한은 뭔지 기록된 거

  • TLB : 최근 변화 결과 캐시


하는 거

  1. 프로그램이 가상주소(VA)로 읽기 시도

  2. 가상 주소 분해 : [페이지 번호 | 오프셋]

  3. TLB 조회 (죠낸 빠른 길 될지 아닐지)

    • 히트 : 프레임 번호 (PFN) 획득
      -> 물리주소 = [PFN|오프셋]
      -> 메모리 접근 완료

    • 미스 : 페이지 테이블로 가서 PTE 조회
      -> 유효하고 권한 OK
      -> TLB 채움
      -> 물리 주소 만들고 접근

  4. PTE가 없음/무효 -> 페이지 폴트(오류) 발생 -> 커널 진입

  5. 커널 처리

    • ZFOD: 새 물리 페이지 하고 0으로 채우기

    • 이런저런거 etc

    • 자세한건 여기로

  6. 페이지 테이블 갱신 & TLB 업데이트

  7. 원래 명령 재시도 → 물리 메모리 접근 완료