[OS] 10. 가상 메모리

KYJ의 Tech Velog·2023년 4월 18일
0

OS

목록 보기
19/23
post-thumbnail

물리 메모리 크기의 한계를 극복하기 위해 나온 기술입니다. 프로세스를 실행할 때 실행에 필요한 일부분만 메모리에 로드하고 나머지는 디스크에 두는 것입니다. 프로세스 전체가 물리적 메모리에 있는 것처럼 수행되는 것입니다. 따라서, 물리적 메모리가 훨씬 많이 있는 것처럼 보이게 됩니다.

메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수행할 수 있기 때문에 더 많은 프로그램을 동시에 실행할 수 있게 됩니다.

프로세스의 일부분은 앞서 포스팅했던 페이지 단위일수도 있고 세그먼트 단위일 수도 있습니다. 현재는 대부분 페이지 단위를 사용한다고 합니다.


Demand Paging

실제로 필요할 때 페이지를 메모리에 올리는 것입니다. 이를 통해 CPU 이용률과 처리율이 높아지고 더 많은 사용자를 수용할 수 있습니다.

Demand Paging은 페이지 테이블에서 해당 페이지가 메모리에 있는지 나타내는 valid-invalid bit를 사용합니다. bit가 invalid이면 페이지가 물리 메모리에 없다는 것을 의미합니다. 따라서, 처음에는 페이지 테이블의 모든 페이지가 invalid로 초기화되어있습니다. bit가 invalid한 페이지의 주소를 변환하려고 하면 page falut 오류가 발생합니다.

주소를 변환하는 과정은 다음과 같습니다.

  1. 하드웨어가 TLB를 확인합니다.
  2. TLB hit일 경우 바로 주소를 변환하고, TLB miss일 경우 페이지 테이블을 확인합니다.
  3. 페이지 테이블의 valid-invalid bit가 valid라면 주소를 변환하고 TLB에 페이지를 올립니다. invalid라면 page fault가 발생합니다.
  4. page fault가 발생하면 MMU가 운영체제에 Trap을 걸고 커널 모드로 들어가서 page fault handler가 invoke됩니다.
  5. 유효하지 않은 참조인 경우 프로세스를 종료시키고 유효하다면 빈 페이지 프레임을 얻습니다. 빈 프레임이 없다면 victim page를 선택하여 대체합니다.
  6. 운영체제는 참조된 페이지를 디스크에서 메모리로 로드(I/O)하고 disk I/O가 끝날 때까지 이 프로세스는 CPU를 빼앗깁니다.
  7. disk I/O가 끝나면 페이지 테이블이 업데이트되고 valid-invalid bit가 valid로 바뀝니다. 그리고 ready queue에 프로세스를 넣어줍니다.
  8. 프로세스가 CPU를 잡게 되면서 이어서 실행됩니다.

Pure Demand Paging

프로세스가 최초로 실행될 때는 어떤 페이지가 필요한지 알 수 없기 때문에 아무 페이지도 올리지 않는 것입니다. 따라서, 프로그램을 하나 실행하면 page fault가 바로 발생합니다. 정말 순순하게 필요한 페이지만 올리는 것을 의미합니다. 메모리를 최대한 효율적으로 사용할 수 있지만 처음 실행할 때부터 page fault가 발생하기 때문에 속도 면에서 비효율적입니다.

Prepaging

프로그램을 실행할 때 필요할 것이라 생각되는 페이지를 미리 올리는 것입니다. page fault가 발생할 확률이 적으므로 속도 면에서 효율적이지만 미리 올라간 페이지를 사용하지 않는다면 메모리가 낭비됩니다.

Effective Access Time

Demand Paging은 페이지 테이블에 원하는 페이지가 없으면 backing store에서 메모리로 가져오는 과정이 있습니다. 따라서, 페이지가 있을 때와 없을 때의 시간 차이가 발생합니다. 이를 고려해서 평균적으로 얼마나 걸리는지 계산한 것은 유효 접근 시간(Effective Access Time)이라고 합니다.

  • Page Fault 발생 확률 = p
  • 메모리를 읽는 시간 = T1
  • Page Fault가 발생했을 때 시간 = T2
    주로 backing store를 읽는 시간
  • 유효 접근 시간 = (1 - p) T1 + p T2

T2가 T1보다 훨씬 크기 때문에 p가 작아야 즉, page fault 발생 확률이 작아야 유효 접근 시간이 줄어듭니다. 현실적으로 페이지 부재가 발생할 확률은 지역성의 원리 때문에 매우 낮습니다.

지역성의 원리

메모리 접근은 시간 지역성과 공간 지역성을 가집니다.

  • 시간 지역성
    CPU는 어느 메모리 공간을 읽은 후에 나중에도 그 공간을 다시 읽을 확률이 높습니다.
  • 공간 지역성
    CPU가 메모리 공간을 읽을 때 인접한 범위 내에서 읽습니다.

backing store를 HDD가 아니라 SSD나 DRAM을 사용하면 더 효율적입니다.

0개의 댓글