[Jungle] Week10 . VM 공부 키워드

somi·2024년 5월 31일
0

[Krafton Jungle]

목록 보기
61/68

virtual memory

: 컴퓨터 시스템에서 실제 물리적 메모리(RAM)의 제약을 극복하고 더 큰 주소 공간을 사용할 수 있게 해주는 메모리 관리 기법

  • 추상화된 주소 공간 => 각 프로세스는 자신만의 가상 주소 공간을 가짐. 이는 실제 메모리 주소와 독립적

  • VM은 일반적으로 페이지 단위로 관리 -> 필요한 메모리 페이지를 디스크에서 RAM으로 불러오고 사용되지 않는 페이지를 디스크로 내보내는 swapping 기법 사용 => 실제 물리 메모리보다 더 많은 메모리를 사용할 수 있는 것처럼 보이게

  • 가상 주소는 하드웨어의 MMU(Memory Management Unit)에 의해서 물리 주소로 변환됨


paging?

  • page : 가상 메모리를 일정한 크기로 나눈 작은 블록 - 보통 4kb, 8kb
  • page frame: 물리 메모리를 일정한 크기로 나눈 작은 블록

  • 가상주소 VA = <P, D>
    Page = 가상 주소 / 한 페이지의 크기
    D(Distance, Offset) : 가상주소 % 한 페이지의 크기

  • 물리 주소 PA = <F, D>
    F(frame) = page table을 통해서 획득
    D = 가상 주소의 D와 동일

주소 변환
1. 페이지 번호를 사용해서 페이지 테이블 조회 -> 페이지 테이블을 통해 페이지가 실제 물리 메모리에 위치하는 주소(프레임)을 찾음
2. 가상 주소를 물리 주소로 변환
: 페이지 테이블에서 해당 페이지의 물리 매모리 내 위치 (프레임 번호)를 찾은 후, 이 프레임 번호에 가상 주소의 오프셋을 더해서 최종 물리 주소 결정

예시)
가상 주소가 32 bit
페이지의 크기가 4KB(2^12) (=4096 바이트)
하위 12 bit는 offset, 나머지 상위 비트는 Page number

만약 가상 주소가 0x12345678이라면, 페이지 번호는 0x12345이고, 오프셋은 0x678
페이지 테이블을 조회해서 0x12345에 해당하는 프레임 번호를 찾고, 이를 오프셋 x678과 결합해서 최종 물리 주소를 얻음

페이지의 크기가 4KB면 오프셋은 항상 12bit로 고정된다. 4KB = 2^12 byte
오프셋: 페이지 내에서 특정 데이터의 위치를 가리키는 데 사용되는 비트 수.
페이지 크기가 고정되어 있으면 오프셋을 표현하는 데 필요한 비트 수도 고정된다.
페이지의 크기가 변경되면 오프셋을 표현하는데 필요한 비트 수도 증가 => 페이지 크기가 8KB(2^13 byte)면 오프셋을 표현하는데 13비트가 필요하다.

페이지 크기가 커져서 오프셋을 나타내는 비트의 수가 커지면, 페이지 번호를 나타내는 비트 수는 그만큼 줄어들게 된다. 가상 주소 공간에서 페이지 수가 줄어들고 각 페이지가 더 많은 데이터를 담게 되는 것!

페이지의 크기가 증가하면 한 페이지가 담을 수 있는 데이터의 양이 증가하고 이에 따라 전체 메모리를 나누는 페이지의 수가 감소.

그렇다면 page offset이 큰 경우와 작은 경우의 장단점?

페이지가 큰 경우(큰 오프셋)

  • 페이지 테이블의 크기 감소 - 필요한 페이지의 수가 줄어듦 -> 더 적은 메모리
  • TLB 효율성: 더 많은 메모리를 한번에 매핑할 수 있어서 히트율 증가
  • 한번의 I/O 작업으로 더 많은 데이터를 전송할 수 있음
  • 페이지 폴트가 발생했을 때 큰 페이지를 메모리에 로드하는데 시간이 더 오래 걸릴 수 있음

페이지 크기가 작은 경우 (작은 오프셋)

  • 메모리 낭비 감소 -> 마지막 페이지의 사용되지 않는 공간이 줄어들어 메모리 효율성 증가
  • 페이지 폴트 비용 감소 -> 작은 크기의 페이지를 메모리에 로드하면 됨
  • 페이지 크기가 작아지면 필요한 페이지의 수도 증가 -> 페이지 테이블의 크기도 커짐. -> 관리하는 메모리의 양 증가
  • 페이지 크기가 작으면 TLB가 더 자주 갱신되어야 함 -> 미스율이 증가할 수 있음
  • 한번의 IO 작업으로 전송할 수 있는 데이터의 양이 줄어들어서 I/O 성능 저하될 수 있음

page table

: 가상 주소를 물리 주소로 변환하는데 사용되는 자료구조

각 프로세스는 자신만의 페이지 테이블을 갖고 있고 이 테이블은 가상 주소 공간을 페이지 단위로 나눈 후 각 페이지가 실제 메모리(RAM)의 어느 위치에 해당하는지를 매핑한다.

page table entry(PTE)

페이지 테이블 내에 있는 각각의 엔트리
한 개의 페이지 테이블 엔트리는 한 개의 가상 페이지와 그에 해당하는 한 개의 물리 페이지 사이의 매핑 정보를 담고 있다.

  • Present bit(P)
  • R/W: 페이지에 쓰기가 허용되는지 결정
  • U/S 사용자/슈퍼바이저: 사용자 모드 프로세스가 페이지에 액세스 할 수 있는지 결정
  • PWT, PCD, PAT 및 G: 페이지에 대한 하드웨어 캐시의 동작을 결정
  • reference bit(A)
  • dirty bit(D)
  • PFN(page frame number)

가상 메모리는 페이지 테이블을 통해 구현된다. 페이지 테이블은 가상 주소와 물리 주소 간의 매핑을 관리한다


translation lookaside buffer(tlb)

: 가상 주소를 물리 주소로 변환하는 데 필요한 page table 항목을 저장하는 고속 캐시

가상 주소를 물리 주소로 변환하는 과정의 효율성을 높이기 위해 도입
-> 가상 주소를 물리 주소로 변환할 때 매번 페이지 테이블을 참조하여 여러 단계의 메모리 접근을 하면 성능 저하를 유발하기 때문에!

최근에 참조된 PTE를 빠르게 접근할 수 있는 메모리 캐시로 가상 주소를 물리 주소로 변환하는 과정을 가속화
=> CPU는 매번 전체 페이지 테이블을 검색하는 대신 TLB 내에서 먼저 변환 정보를 찾음 - 메모리 접근 시간 크게 단축

가상 주소로 메모리를 접근할 때 CPU는 먼저 TLB 확인하여 해당 가상 주소의 변환 정보가 있는지 확인

  • TLB hit: 페이지 테이블 참조할 필요 없이 바로 물리 주소를 얻을 수 있어서 메모리 접근 시간 크게 단축
  • TLB miss: 페이지 테이블을 직접 참조해야 함 -> 추가적인 시간 소요

TLB의 효율성은 TLB hit rate에 의해 결정됨

TLB 또한 제한된 크기의 캐시라서 오래된 항목을 새 항목으로 교체하는 다양한 교체 기법- LRU, FIFO 등을 사용해서 효율적으로 관리됨


page fault

: 프로세스가 접근하려는 가상 주소에 해당하는 페이지가 물리적 메모리(RAM)에 없을 때 발생
-> 해당 페이지가 디스크의 스왑 영역이나 파일 시스템에 있을 수 있다.

  • 해당 가상 주소에 대응하는 페이지가 물리적 메모리에 존재하는지 여부를 MMU 통해서 확인 -> 페이지가 없으면/ 페이지 테이블에 유효한 매핑 없으면 page fault

  • page fault 처리하는 핸들러 =>
    필요한 페이지가 디스크 상의 스왑 영역이나 파일에 있을 경우, os는 물리적 메모리에 공간 확보. 이미 메모리가 가득 찬 경우, 일부 페이지를 디스크로 스왑아웃하여 공간 확보

  • 필요한 페이지를 디스크에서 물리적 메모리로 로딩

  • 페이지가 메모리로 로드되면 페이지 테이블이 업데이트 -> 새로운 물리적 주소로 매핑됨

  • 페이지 로딩과 테이블 업데이트가 완료되면 원래의 메모리 접근 연산이 재시도 -> 페이지가 물리적 메모리에 있으므로 정상적인 메모리 접근이 가능해짐


lazy loading

: 데이터나 객체가 실제로 필요한 순간까지 로딩을 지연시키는 방법
-> 필요 없는 로딩 시간을 줄이며 시스템 초기 응답 시간 개선에 도움

예시) 웹 페이지에서 스크롤을 내릴 때 추가적인 이미지가 로드되는 경우 - 사용자가 해당 콘텐츠 도달하기 전까지는 리소스를 로드하지 않는다.


Demand paging

: 가상 메모리 시스템에서 사용되는 기법
-> 프로세스가 실제로 필요로 하는 페이지만 물리 메모리에 로드하는 방식
=> 접근 시점에 Page fault를 발생시켜서 필요한 페이지를 디스크에서 메모리로 load. 이를 통해 메모리 사용 최적화하고 시스템의 전체적인 성능을 개선시킴.

Demand paging의 장점

  • 실제로 필요한 페이지만 로드하기 때문에 메모리 사용량이 최적화
  • 모든 페이지를 로드하지 않기에 초기 로딩 시간 단축
  • 프로그램이 필요로 하는 메모리만 동적 할당 가능

단점

  • 페이지 폴트가 발생할 때마다 디스크에서 데이터를 읽어오는 시간이 추가되므로 성능 저하가 발생할 수 있음
  • 페이지 폴트 핸들링과 같은 복잡성 증가

swap disk

: 가상 메모리 관리의 일부로 사용되는 디스크 공간
-> 물리적 메모리(RAM)가 부족할 때 일시적으로 데이터를 저장하기 위해 사용되며 이를 통해 시스템 메모리 활용을 최적화할 수 있다.

  • 현재 사용되지 않는 비활성 메모리 페이지를 스왑 디스크로 이동 시켜서 물리적 메모리를 해제할 수 있음
  • 페이지 폴트가 발생할 때, 필요한 페이지를 물리적 메모리에 로드하기 위해 스왑 디스크로부터 데이터를 가져옴. 사용되지 않는 페이지는 스왑 디스크로 이동

장점

  • 가상 메모리를 확장할 수 있음
  • 추가적인 물리적 메모리 구매 없이 메모리 자원을 효율적으로 사용할 수 있음

단점

  • 디스크 I/O는 메모리 접근보다 훨씬 시간이 더 오래 걸리기에 자주 사용하면 성능 저하
  • 빈번한 스왑 디스크의 사용은 특히 SSD의 경우 디스크의 수명을 단축시킬 수 있다고 함

swap partition

: 하드 드라이브 특정부분을 가상 메모리로 사용하는 것
-> RAM이 부족할 때, 사용되지 않는 데이터를 RAM에서 스왑 파티션으로 이동시켜 물리적 메모리 확보

swap bitmap

: 스왑 공간의 사용 상태 추적
-> 각 스왑 페이지가 사용 중인지 여부를 나타내는 비트들의 배열

  • 예를 들면 비트맵의 한 비트가 1이면 해당 스왑 페이지가 사용중, 0이면 사용 가능함을 의미

    swap partition은 실제로 데이터를 저장하는 공간, swap bitmap은 그 공간의 사용 상태를 추적하는 메타데이터

page replacement policy

: 가상 메모리 시스템에서 물리적 메모리(RAM)이 가득 찼을 때 어떤 페이지를 교체할지 결정하는 매커니즘

  • FIFO(First-In, First-Out): 가장 오래 전에 메모리에 적재된 페이지 교체
  • LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 페이지 교체
  • Optimal Page Replacement: 앞으로 가장 사용되지 않을 페이지 교체 -> 미래를 예측할 수 없기 때문에 실제 구현은 불가능하지만 성능 비교의 기준점.

clock algorithm

시계 형태의 구조를 사용하여 페이지 교체 결정. 각 페이지는 사용 비트를 가지고 있으며 이 비트는 페이지가 참조될 때마다 설정

시계 바늘처럼 동작하는 포인터가 페이지 프레임 순환하면서 참조 비트 확인 -> 0인 페이지 찾을 때까지 포인터 이동.
참조 비트가 0인 페이지를 찾으면 해당 페이지를 새로운 페이지로 교체. 만약 모든 페이지의 참조 비트가 1로 설정되어 있다면 포인터가 다시 한 바퀴 돌면서 비트를 0으로 클리어하고 첫 0 비트 페이지 교체

second chance algorithm

: 각 페이지에가 Second Chance를 제공.
포인터가 페이지 프레임을 순환하면서 참조 비트 확인 -> 포인터가 참조 비트가 1로 설정된 페이지를 만나면 그 페이지는 한번 더 기회를 받아 참조 비트가 0으로 클리어되고 포인터는 다음 페이지로 이동.
1인 페이지를 만나도, 그 페이지를 바로 교체하지 않고 두번째 기회를 줌. 0으로 초기화하고 포인터는 다음 페이지로 이동한다는 말.

참고로 0인 페이지는 최근에 사용되지 않았음을 의미해서 이러한 페이지가 교체됨.


anonymous page

: 파일과 연관되지 않은 메모리 페이지
-> 특정 파일에 매핑되지 않고 프로세스의 힙, 스택, 동적 할당된 메모리 등에서 주로 사용
예) malloc을 통해 동적 메모리 할당할 때 이 메모리는 anonymous page에 할당됨

  • 기본적으로 0으로 초기화 -> 다른 프로세스가 사용했던 데이터를 노출시키지 않기 위해

  • 물리 메모리가 부족할 때 스왑아웃될 수 있음.

file-backed page

: file-mapped pages, 가상 메모리 시스템에서 파일의 내용을 메모리에 매핑한 페이지
프로그램 실행 파일이나 데이터 파일과 같은 실제 파일과 직접 연관되어 있는 메모리 페이지
-> 프로세스가 파일의 데이터에 빠르게 접근하게끔

  • 동일한 파일을 여러 프로세스가 매핑할 경우, 파일 기반 페이지는 여러 프로세스 간에 공유될 수 있음.

DMA , direct memory access

cpu를 거치지 않고 주변 장치가 직접 메모리와 데이터를 주고받을 수 있게 하는 기술

=> cpu가 데이터 전송 작업에서 해방되어 다른 작업을 수행할 수 있게 됨

DMA는 페이지 폴트가 발생할 때 메모리와 디스크 간의 데이터를 효율적으로 전송할 수 있다. 페이지 폴트 처리 시간을 줄여줌
I/O 작업이 CPU 개입 없이도 효율적으로 처리될 수 있어서 가상 메모리 시스템의 I/O 성능이 향상
DMA를 통해 주변 장치가 메모리에 직접 접근 가능 -> 메모리 접근 시간 단축


pintos project 3. virtual memory

구현 전 깃북 내용 간단히 정리해보기

핀토스의 가상 메모리

  • 사용자 가상 메모리: 0 ~ KERN_BASE
  • 커널 가상 메모리: kERN_BASE ~
    하나의 프로세스는 하나의 사용자 가상 메모리를 가짐.

pages

  • 가상 메모리의 연속된 영역, 보통 4096 byte, 4KB
  • 페이지는 페이지 크기로 정확히 나눠지는 가상 주소로 시작해야 함
  • 64 bit system -> 가상 주소의 마지막 12 bit가 페이지 오프셋, 상위 비트는 페이지 테이블의 인덱스 - 각각의 페이지 테이블에서 어디에 위치하는지 표시하기 위함,
  • 4단계 페이지 테이블을 사용
    Sign Extend (상위 16비트)
    Page-Map Level-4 Offset (9비트)
    Page-Directory Pointer Offset (9비트)
    Page-Directory Offset (9비트)
    Page-Table Offset (9비트)
    Page Offset (12비트)
63          48 47            39 38            30 29            21 20         12 11         0
+-------------+----------------+----------------+----------------+-------------+------------+
| Sign Extend |    Page-Map    | Page-Directory | Page-directory |  Page-Table |    Page    |
|             | Level-4 Offset |    Pointer     |     Offset     |   Offset    |   Offset   |
+-------------+----------------+----------------+----------------+-------------+------------+
              |                |                |                |             |            |
              +------- 9 ------+------- 9 ------+------- 9 ------+----- 9 -----+---- 12 ----+
                                          Virtual Address

Frames

  • 물리 메모리의 연속된 영역
                         12 11         0
    +-----------------------+-----------+
    |      Frame Number     |   Offset  |
    +-----------------------+-----------+
              Physical Address
              

Page Tables

  • 페이지 번호를 프레임 번호로 변환, 변환된 프레임 번호와 원래의 오프셋을 결합해서 물리 주소를 얻음
                          +----------+
         .--------------->|Page Table|-----------.
        /                 +----------+            |
        |   12 11 0                               V  12 11 0
    +---------+----+                         +---------+----+
    | Page Nr | Ofs|                         |Frame Nr | Ofs|
    +---------+----+                         +---------+----+
     Virt Addr   |                            Phys Addr    ^
                  \_______________________________________/
profile
📝 It's been waiting for you

0개의 댓글