공부기록

가상 메모리 페이징 본문

CS/OS

가상 메모리 페이징

코타쿠 2021. 5. 17. 17:58
  • 가상 메모리 페이징
    • 프로세스별 페이지 테이블이 필요
    • 존재비트 P : 해당 페이지가 메모리에 적재되어 있는지 여부
      • 적재 되어 있다면 그 항목은 그 페이지의 페이지 프레임 번호를 포함
      • 적재되어 있지 않다면 보조 메모리에 있고, 페이지 인덱스를 참조시 page fault가 일어나 페이지를 반입함
    • 수정비트 M : 해당 페이지가 메모리에 적재된 후 그 내용이 수정되었는지 여부
      • 수정되지 않았다면 page out할 때 이 페이지를 DISK에 쓰는 연산을 할 필요가 없어진다.
    • Other Control Bits
      • 페이지 수준에서 보호와 공유를 다루기 위한 비트들
  • 페이지 테이블 구조
    • 메모리에서 한 워드를 읽을 때 마다 페이지 번호와 오프셋으로 구성된 가상 주로(혹은 논리주소)를 프레임 번호와 오프셋으로 구성된 물리주소로 변환하는 과정을 수반
      • word : 메모리 기본 처리 단위 (32bit, 64bit)
    • 프로세스의 크기에 따라 페이지테이블의 크기가 달라지므로, 페이지 테이블은 메모리에 있어야함
    • 특정 프로세스가 수행될 때, 그 프로세스의 테이지 테이블의 시작주소를 한 레지스터에 저장
    • 가상주소의 페이지 번호는 테이블의 인덱스로 쓰여 대응되는 프레임 번호를 찾게 됨
      • 이는 가상주소의 오프셋과 결합되어 물리주소를 구성
  • 프로세스당 하나의 페이지 테이블의 문제점
    • 각 프로세스가 엄청나게 큰 가상메모리를 갖지게 된다.
    • 페이지 테이블을 저장하기 위한 메모리도 수용할 수 없을 정도로 커지게 된다.
  • 큰 페이지 테이블의 해결 방법
    • 대부분의 가상 메모리 기법은 페이지 테이블을 가상메모리에 저장한다.
      • 프로세스가 수행중일 때, 적어도 현재 참조중인 페이지의 테이블 항목과 페이지 테이블의 일부가 메모리에 있어야 한다.
    • 2 (N) 단계 구조 페이지 테이블 사용
      • 테이지 디렉토리 -> 테이지 테이블 -> 페이지 엔트리 의 구조를 가진다.
      • 한 페이지 테이블의 크기는 한 페이지와 동일한 크기로 제한
      • 페이지 디렉토리만 메모리에 있다면 페이지 테이블을 가상메모리에 page out 했다가 주메모리로 page in 시킬 수 있다.
    • 역페이지 테이블 (Inverted Page Table)
      • 가상주소의 페이지 인덱스 부분은 해시 함수를 통해 특정 해시값으로 사상
      • 해시값은 역페이지 테이블의 인덱스로 쓰이고 역페이지 테이블은 페이지 테이블 항목들로 구성
        • 페이지 인덱스가 중복되기 때문에 PID도 같이 저장한다.
      • 역페이지 테이블의 인덱스는 프레임의 인덱스와 같다.
        • 기존 페이지 테이블이 페이지 인덱스가 프레임 인덱스로 사상되는 대신에 역페이지 테이블은 프레임 인덱스가 특정 프로세스의 페이지 인덱스로 사상되기 때문에 역페이지 테이블이라고 한다.
      • 주기억 장치의 일부 부분 만큼이 고정적으로 테이블 저장에 쓰임, 즉 크기가 고정이다.
      • hash collision을 피하기 위해 chaining 기법을 사용했다.
      • 모든 hash value가 충돌하는 최악의 경우, 테이블을 모두 탐색해야 하는 단점을 가지고 있다.
    • TLB (Translation Lookaside Buffer)
      • 페이지 테이블 항목들을 위한 특수 고속 캐시 사용
      • 가장 최근에 참조된 페이지 테이블 항목을 유지
      • 가상 주소가 주어지면, 처음에 TLB를 살펴보아 그곳에 있으면 (TLB hit) 바로 프레임 번호가 추출됨
      • 해당 페이지 테이블 항목이 없으면 (TLB miss) 페이지 번호로 페이지테이블을 인덱싱하여 해당 페이지 테이블 항목 참조
      • 존재 비트가 1이면, 해당 페이지가 주기억 장치에 존재하므로, 페이지 테이블 항목에 저장된 프레임 번호를 사용하여 실주소를 구성
      • TLB는 페이지 테이블 항목을 포함하도록 갱신
      • 존재 비트가 0이면, 해당 페이지가 주기억장치에 없음을 의미함으로 page fault 발생
      • 하드웨어의 역할은 끝나고 OS가 호출되며, OS는 필요한 페이지를 적재하고 페이지 테이블 갱신하고 TLB를 보러 다시 간다 (결론적으로 TLB가 update 됨)
      • 연관 사상
        • TLB가 단지 페이지 테이블의 일부 항목만을 포함하기에 페이지 테이블 번호, 페이지 테이블 엔트리를 포함해야함
      • 페이지 크기
        • 페이지 크기가 작을 수록 내부 단편화의 양은 작아지나, 페이지 테이블의 크기는 커짐
        • 따라서 페이지테이블이 너무 크면 한 번의 메모리 참조에 대해 두 번의 페이지 폴트가 발생할 수 있다.

'CS > OS' 카테고리의 다른 글

교착상태 발견  (0) 2021.06.03
가상 메모리 세그먼트  (0) 2021.05.17
가상 메모리의 개요  (0) 2021.05.17
메모리 분할 - 세그먼테이션  (0) 2021.05.17
메모리 분할 - 페이지  (0) 2021.05.17