CS:APP_chap_9

JP·2022년 12월 3일
0

CS:APP

목록 보기
2/2

가상메모리

  • 메인메모리를 디스크에 저장된 주소공간(address space)에 대한 캐시로 취급하여, 메인메모리를 효율적으로 사용
  • 각 프로세스에 통일된 주소공간 제공
  • 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호
  • 메모리 블럭을 디스크 파일의 부분으로 mapping. 메모리를 다른 프로세스들과 공유할 수 있게 함

전개 과정

  • 전반부: 어떻게 가상메모리가 작동하는지
  • 후반부: 어떻게 가상메모리가 사용되고 어플리케이션에 의해 관리되는지

가상주소(VA)

일단은, CPU내 'MMU'라는 하드웨어가 가상주소를 물리주소로 변환(주소 번역)함. 이 작업은 'base register'값에 '가상주소'값을 더함으로써, 해당 프로세스의 실제 물리주소를 리턴해준다. (후에 더 기술)

가상메모리 as a tool for caching

가상메모리는 '특정 사이즈'의 블록 단위로 분할되어 관리된다. 이 블록들을 '가상 페이지'라고 부르며, 물리 메모리도 비슷하게 '물리페이지'로 분할되어 사용된다.
'가상 페이지'는 Unallocated/Cached/Uncached로 상태가 나뉜다.

  • unallocated: 비할당된 블록
  • cached: 물리 메모리에 캐시되어 할당된 페이지들
  • uncached: 물리 메모리에 캐시되지 않은 할당된 페이지들

페이징 시스템

(출처: https://velog.io/@gndan4/OS-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC )

하나의 프로세스에서 특정 시간 동안 쓰는 메모리 영역은 4GB 중 아주 일부이기에, 일부분만 물리 메모리에 얹어놓고 쓰자는 것이 가상메모리의 컨셉이다.

그럼 어느 정도를 얹을 지에 대한 결정이 필요한데, 이를 '페이지(page)'라는 단위로 다루겠다고 하는 것이 페이징 시스템이다.

페이징(paging):

  • 크기가 동일한 페이지 단위로 가상 주소 공간과 이에 매칭되는 물리 주소 공간을 관리
  • 하드웨어 지원이 필요
    - 예) Intel x86 시스템(32bit)에서는 4KB, 2MB, 1GB 지원
  • 리눅스에서는 4KB로 paging
  • 페이지 번호를 기반으로 가상 주소와 물리 주소의 매핑 정보를 기록하고 사용한다.
    - 리눅스의 경우 4GB의 가상 메모리를 4KB 단위로 쪼개서 페이징하고 페이지 번호를 붙임
    - 페이지 단위로 물리 메모리에 넣고, 해당 데이터를 찾을 때에도 페이지 번호를 기반으로 주소를 찾게 된다.

페이징 시스템의 예시(리눅스)

  • 프로세스(4GB)의 PCG(Process Control Block)에 Page Table 구조체를 가리키는 주소가 들어 있음.
  • Table에는 가상 주소와 물리 주소 간 매핑 정보가 있음. 이를 통해 해당 페이지의 실제 물리 메모리 주소를 알아낼 수 있다.

Page Table

  • 가상 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표
  • 그 외에도 valid-invalid bit : 해당 페이지가 물리 메모리에 올라가 있는지; (v : 올라가있음. i : 올라가 있지 않음)
  • 가상 주소 v = (p, d);
    • p: 페이지 번호; d: 페이지 처음부터 떨어진 정도(위치);
    • 페이지 크기가 4KB인 경우, 가상 주소의 0~11비트가 변위(d)를 나타내고, 12비트 이상이 페이지 번호가 될 수 있음
  • 특정 프로세스에서 특정 가상 주소에 접근하려면,
    • 해당 프로세스의 Page Table에 가상 주소가 포함된 page 번호가 있는 지 확인
    • page 번호가 있으면, 이 page가 mapping된 첫 물리 주소(p')를 알아내고
    • p'+d가 실제 물리 주소인 것임

MMU

  • CPU는 가상 주소 접근 시
    • MMU 하드웨어 장치를 통해 물리 메모리 접근
  • 프로세스 생성 시, Page Table 정보가 '물리 메모리'에 생성됨
    • PCB 등에서 해당 페이지 테이블에 접근이 가능하고, 관련 정보는 물리 메모리에 적재
    • 프로세스 구동 시, 해당 Page Table의 base 주소(시작 주소)가 별도의 레지스터(CR3)에 저장됨.
    • CPU가 가상주소에 접근 시, MMU가 CR3를 통해 Page Table base 주소에 접근해서 물리 주소를 가져옴.

(p.775 추후에 다시 살펴볼 것.)

profile
human being acting like tiger

0개의 댓글