TIL - 2024/05/31

박상우·2024년 6월 9일
0

📝 TIL

목록 보기
38/45
post-thumbnail

Page - Virtual Memory

가상 메모리의 연속적인 영역, page는 page 크기로 나누어 떨어지는 가상 주소에서 시작해야하며 이를 페이지 정렬이라고 한다.

64비트 환경에서 가장 주소 마지막 12비트는 page offset을 의미하고, 상위 페이지는 페이지 테이블의 인덱스를 나타내는데 사용한다.

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
  • 각 영역에 대한 설명

    1. Sign Extend (비트 63~48)

    • 설명: 상위 16비트는 대부분의 시스템에서 가상 주소의 부호 확장을 나타냅니다. 이는 가상 주소의 부호 비트를 반복하여 확장하여 가상 주소의 전체 길이를 맞추는 데 사용됩니다.
    • 역할: 일반적으로 가상 주소의 부호를 유지합니다. 예를 들어, 48비트보다 작은 주소를 64비트로 확장할 때 사용됩니다.

    2. Page-Map Level-4 Offset (비트 47~39)

    • 설명: 페이지 맵 레벨 4(PML4) 테이블의 오프셋입니다.
    • 역할: PML4 테이블은 최상위 페이지 테이블로, 이 오프셋을 사용하여 PML4 테이블 내의 엔트리를 찾습니다. PML4 엔트리는 페이지 디렉토리 포인터 테이블(PDPT)의 물리 주소를 가리킵니다.

    3. Page-Directory Pointer Offset (비트 38~30)

    • 설명: 페이지 디렉토리 포인터 테이블(PDPT) 내의 오프셋입니다.
    • 역할: PDPT는 PML4 엔트리가 가리키는 테이블로, 이 오프셋을 사용하여 PDPT 내의 엔트리를 찾습니다. PDPT 엔트리는 페이지 디렉토리 테이블(PDT)의 물리 주소를 가리킵니다.

    4. Page-Directory Offset (비트 29~21)

    • 설명: 페이지 디렉토리 테이블(PDT) 내의 오프셋입니다.
    • 역할: PDT는 PDPT 엔트리가 가리키는 테이블로, 이 오프셋을 사용하여 PDT 내의 엔트리를 찾습니다. PDT 엔트리는 페이지 테이블(PT)의 물리 주소를 가리킵니다.

    5. Page-Table Offset (비트 20~12)

    • 설명: 페이지 테이블(PT) 내의 오프셋입니다.
    • 역할: PT는 PDT 엔트리가 가리키는 테이블로, 이 오프셋을 사용하여 PT 내의 엔트리를 찾습니다. PT 엔트리는 실제 물리 페이지의 물리 주소를 가리킵니다.

    6. Page Offset (비트 11~0)

    • 설명: 페이지 내 오프셋입니다.
    • 역할: 페이지의 특정 위치를 지정합니다. 페이지가 물리 주소로 변환된 후, 이 오프셋은 페이지 내의 특정 바이트를 가리킵니다.

Frame - Physical Memory

물리적인 프레임(페이지). 연속적인 물리 메모리 영역. 프레임의 크기도 페이지와 마찬가지로 페이지 크기만큼 정렬되어야한다.

물리 메모리의 하위 12비트는 Offset을 나타내고, 상위 비트는 프레임 번호를 나타낸다.
예를 들어, 0x12345ABCDEF라는 물리 주소가 있을 때, 하위 12비트 (DEF)는 오프셋이고, 상위 비트 (12345ABC)는 프레임 번호.

                          12 11         0
    +-----------------------+-----------+
    |      Frame Number     |   Offset  |
    +-----------------------+-----------+
              Physical Address

x86-64 아키텍처에서는 물리 주소에서 직접 메모리에 접근하는 기능을 제공하지 않는다. PintOS에서는 커널의 가상 메모리를 물리 메모리에 직접 매핑한다. 커널 가상 메모리의 첫번째 페이지는 물리 메모리의 첫번째 프레임에 매핑되고 두번째 페이지는 두번째 프레임에 매핑.

PintOS에서는…

프레임은 물리 메모리의 연속된 블록이며, 가상 메모리 시스템에서 중요한 역할을 합니다. x86-64 아키텍처에서는 물리 주소에 직접 접근할 수 없으므로, Pintos는 커널 가상 메모리를 물리 메모리에 매핑하여 이 문제를 해결합니다. 이를 통해 물리 주소와 커널 가상 주소 간의 변환이 가능해지며, 커널이 물리 메모리의 특정 위치에 접근할 수 있게 됩니다.


Offset

Offset은 페이지와 프레임의 특정 위치를 지정하는데 사용됩니다. 다음과 같은 역할을 합니다:

  1. 페이지/프레임 내의 위치 지정:

    • 페이지 오프셋 (Page Offset): 페이지 내에서의 위치를 지정
    • 프레임 오프셋 (Frame Offset): 프레임 내에서의 위치를 지정
    • 예를 들어, 64비트 주소 체계에서 하위 12비트는 페이지 또는 프레임 내의 위치를 지정하는데 사용됩니다. 이는 4KB(2^12) 페이지의 크기와 일치
  2. 주소 변환 과정:

    • 가상 주소는 두 부분으로 나뉩니다: 페이지 번호(Page Number)와 페이지 오프셋(Page Offset).
    • 페이지 번호는 페이지 테이블을 통해 물리 메모리의 프레임 번호로 변환됩니다.
    • 페이지 오프셋은 변하지 않고 그대로 유지되며, 물리 주소의 일부로 사용됩니다.
    • 예를 들어, 가상 주소 0x12345ABCDEF에서 0xDEF는 페이지 오프셋으로, 나머지 상위 비트 0x12345ABC는 페이지 번호로 사용됩니다. 페이지 테이블을 통해 0x12345ABC에 해당하는 프레임 번호가 결정되면, 오프셋 0xDEF는 그대로 물리 주소의 하위 12비트로 사용됩니다. 물리 주소가 0x987654 라면 최종 물리 주소는 0x987654DEF 이다.
  3. 효율적인 메모리 접근:

    • Offset을 사용하여 페이지와 프레임 내의 특정 위치를 빠르게 접근할 수 있습니다.
    • 이는 메모리 관리의 효율성을 높이고, 가상 메모리 시스템이 효과적으로 동작하게 합니다.

Page Table

                          +----------+
         .--------------->|Page Table|-----------.
        /                 +----------+            |
        |   12 11 0                               V  12 11 0
    +---------+----+                         +---------+----+
    | Page Nr | Ofs|                         |Frame Nr | Ofs|
    +---------+----+                         +---------+----+
     Virt Addr   |                            Phys Addr    ^
                  \_______________________________________/
  1. 가상 주소 (Virtual Address):

    • 페이지 번호 (Page Nr): 가상 주소의 상위 비트는 페이지 번호를 나타낸다.
    • 오프셋 (Ofs): 가상 주소의 하위 비트는 오프셋을 나타냅니다. 오프셋은 페이지 내에서 특정 위치를 가리킵니다.
  2. 페이지 테이블 (Page Table):

    페이지 테이블은 페이지 번호(가상)를 프레임 번호(물리)로 변환합니다. 이는 페이지 테이블이 가상 주소의 페이지 번호를 받아들이고, 해당 페이지가 물리 메모리 내에서 어떤 프레임에 위치하는지 정보를 제공합니다.

  3. 물리 주소 (Physical Address):

    • 프레임 번호 (Frame Nr): 페이지 테이블을 통해 얻은 프레임 번호는 물리 메모리 내의 특정 프레임을 식별합니다.
    • 오프셋 (Ofs): 오프셋은 변하지 않고 그대로 유지됩니다. 이는 가상 주소의 오프셋이 물리 주소의 오프셋으로 그대로 사용됨을 의미합니다.

Page Fault

프로그램이 메모리에 접근할때 요청한 데이터가 물리 메모리에 존재하지 않아서 발생하는 경우.

이때 운영체제가 해당 데이터를 디스크에서 메모리로 가져와야한다.

  1. Page Fault 발생 : 프로그램이 특정 메모리 주소에 접근할 때, 해당 페이지가 물리 메모리에 없으면 Page Fault가 발생한다.
  2. 운영체제 인터럽트 : CPU는 현재 작업을 중단하고 운영체제에게 제어를 넘긴다.
  3. 페이지 테이블 검사: OS가 페이지 테이블을 검사하여 해당 페이지가 어느 디스크 위치에 있는지 확인한다.
  4. 디스크에서 메모리로 페이지 로드: OS는 디스크에서 페이지를 읽어 물리적 메모리로 로드한다. 물리적 메모리가 꽉찼다면, OS는 페이지 교체 알고리즘을 통해 사용하지 않는 메모리를 디스크로 보내고 공간을 확보한다.( Swapping )
  5. 페이지 테이블 업데이트: 페이지가 물리적 메모리에 로드되면, OS는 페이지 테이블을 업데이트하여 물리적 메모리를 갱신한다.
  6. 프로세스 재개: 페이지가 운영체제가 중단한 작업을 다시 시작해서 프로그램이 요청한 메모리에 접근할 수 있게 한다.

→ 현재 PintOS에서는 exit()시스템 콜을 통해 프로세스를 종료시키고 있다. Page Fault Handle을 통해 Page Falut를 해결하고 정상적으로 메모리 참조가 가능하도록 수정해야한다.

Page Fault 유형

  1. 소프트웨어 Page Fault: 프로그램이 실행될 때 요청한 페이지가 현재 메모리에 없는 경우 발생해. 이 경우 운영체제가 페이지를 디스크에서 메모리로 가져옴.
  2. 하드웨어 Page Fault: 메모리 자체의 문제로 발생해. 예를 들어, 메모리 모듈의 손상이나 잘못된 연결로 인한 문제 등이 여기에 해당돼.

Page Exchange Policy

  • FIFO : 가장 먼저 들어온 페이지를 가장 먼저 교체한다.
  • LRU ( Least Recently Used ) : 가장 오랫동안 사용되지 않은 페이지를 교체한다.
  • Optimal Page Replacement : 앞으로 사용되지 않을 페이지를 교체한다. 가장 효율적이지만 미래 예측 기법이 들어가기 때문에 구현이 어렵다.
  • LFU (Least Frequently Used ): 참조 횟수가 가장 적은 페이지를 교체한다.

Swapping

프로세스가 실행되기 위해서는 메모리에 반드시 올라가야한다. 메모리가 가득차 옮길 수 없는 현재 메모리에서 다른 저장공간에 잠시 옮겼다가 다시 돌아오는 방식을 Swaping이라고 한다.

주기억 장치에 적재한 하나의 프로세스를 잠시 보조기억장치(Swap Disk)에 적재했다가 피요할 때 다시 꺼내서 메모리를 교체하는 기법.

가상 메모리는 실제 물리적인 RAM이 더 큰 용량을 가진 것 처럼 동작하는 개념. 프로그램이 필요로 하는 메모리 공간이 실제로는 RAM에 존재하지 않더라도, 가상 메모리를 통해 디스크에 있는 데이터를 필요에 따라 불러올 수 있음. Sapping은 이러한 가상 메모리의 구현 방법 중 하나로, 실제로 사용되지 않는 데이터를 옮기고 필요할 때 다시 불러오는 역할을 함.

메모리를 효율적으로 활용하면서 물리적인 RAM의 한계를 극복하는데 중요한 역할을 한다. Swapping 일어나면 I/O 작업이 늘어나고 성능 저하가 발생할 수 있기 때문에 이를 최소화하기 위한 최적화 작업을 수행함.

Context Switching vs Swapping

Context Switching

  • 실행 중인 프로세스나 스레드와 다음에 실행할 프로세스와 스레드간 전환을 관리하는 것을 의미. 다중 프로세스나 스레드를 실행하는 시스템에서 여러 작업을 동시에 처리할 수 있도록 함. 프로세스나 스레드간 전환시 발생. 현재 실행중인 프로세스나 스레드의 상태를 PCB로서 저장하고 다음에 실행할 프로세스나 스레드와 상태를 로드하는 과정을 수행

Swapping

  • 메모리 관리 기술로 물리적인 RAM이 부족한 경우 사용되어 현재 사용하지 않는 프로세스나 데이터르 보조 저장 장치로 옮기는 것을 의미. 메모리 한계를 극복하여 더 많은 프로그램을 실행할 수 있음
profile
나도 잘하고 싶다..!

0개의 댓글