PINTOS - Memory Terminology

JinJinJaraΒ·2023λ…„ 9μ›” 22일
0

PINTOS

λͺ©λ‘ 보기
8/10

Source Files

πŸ“‚vm/ : 거의 λΉ„μ–΄μžˆλŠ” 디렉토리. project 3μ—μ„œ 여기에 가상 λ©”λͺ¨λ¦¬λ₯Ό κ΅¬ν˜„

πŸ“‚ include/vm/vm.h,Β vm/vm.c : 가상 λ©”λͺ¨λ¦¬μ˜ 기본적인 μΈν„°νŽ˜μ΄μŠ€ 제곡

  • 가상 λ©”λͺ¨λ¦¬ νƒ€μž… : -- VM_UNINIT, VM_ANON, VM_FILE, VM_PAGE_CACHE -- 의 μ •μ˜μ™€ μ„€λͺ…

πŸ“‚ include/vm/uninit.h,Β vm/uninit.c : μ΄ˆκΈ°ν™” λ˜μ§€ μ•Šμ€ νŽ˜μ΄μ§€λ“€μ„ μœ„ν•œ κΈ°λŠ₯ 제곡 (vm_type = VM_UNINIT)

  • λͺ¨λ“  νŽ˜μ΄μ§€κ°€ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ νŽ˜μ΄μ§€λ‘œ μ„€μ •λ˜κ³ , 이후 anonymous pageλ‚˜ file-backed page둜 λ³€ν™˜

πŸ“‚ include/vm/anon.h,Β vm/anon.c : anonymous pageλ₯Ό μœ„ν•œ κΈ°λŠ₯을 제곡 (vm_type =VM_ANON)
ν•œ λ©”λͺ¨λ¦¬ 검사 κΈ°λŠ₯ 포함

πŸ“‚ include/vm/file.h,Β vm/file.c : file-backed pageλ₯Ό μœ„ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€ (vm_type =Β VM_FILE)

πŸ“‚ include/vm/inspect.h,Β vm/inspect.c: 채점을 μœ„ν•œ λ©”λͺ¨λ¦¬ 검사 κΈ°λŠ₯ 포함 (μˆ˜μ •X)

πŸ“‚ include/lib/kernel/ : Pintos μ»€λ„μ—λ§Œ ν¬ν•¨λœ C 라이브러리의 일뢀

  • bitmaps, doubly linked lists, hash tables 같은 μžλ£Œν˜•μ΄ κ΅¬ν˜„
  • μ»€λ„μ—μ„œ 자유둭게 μ‚¬μš© κ°€λŠ₯ : #include <...> ν‘œκΈ°λ²• μ‚¬μš©

πŸ“‚ include/devices/disk.h,Β devices/disk.c : 블둝 λ””λ°”μ΄μŠ€λ‘œμ˜ μ„Ήν„° 기반 읽기/μ“°κΈ°λ₯Ό 제곡

  • 이 μΈν„°νŽ˜μ΄μŠ€λŠ” 블둝 λ””λ°”μ΄μŠ€λ‘œ μŠ€μ™‘ νŒŒν‹°μ…˜μ— μ ‘κ·Όν•  λ•Œ μ‚¬μš©

Memory Terminology

Pages , κ°€μƒνŽ˜μ΄μ§€

4,096 λ°”μ΄νŠΈ(νŽ˜μ΄μ§€ 크기)의 길이λ₯Ό κ°€μ§€λŠ” 가상 λ©”λͺ¨λ¦¬μ˜ μ—°μ†λœ μ˜μ—­

  • νŽ˜μ΄μ§€λŠ” λ°˜λ“œμ‹œ νŽ˜μ΄μ§€μ— μ •λ ¬(page-aligned)λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.
  • 각 νŽ˜μ΄μ§€λŠ” νŽ˜μ΄μ§€ 크기(4KiB)둜 κ· λ“±ν•˜κ²Œ λ‚˜λˆ„μ–΄μ§€λŠ” 가상 μ£Όμ†Œμ—μ„œ μ‹œμž‘
  • νŽ˜μ΄μ§€ μ˜€ν”„μ…‹(=μ˜€ν”„μ…‹) : 64λΉ„νŠΈ κ°€μƒμ£Όμ†Œμ˜ λ§ˆμ§€λ§‰ 12λΉ„νŠΈ
  • μƒμœ„ λΉ„νŠΈλ“€μ€ νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ˜ 인덱슀λ₯Ό ν‘œμ‹œν•˜κΈ° μœ„ν•΄ μ“°μž„
  • 64λΉ„νŠΈ μ‹œμŠ€ν…œμ€ 4단계 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ μ‚¬μš©

  • 컀널(가상)νŽ˜μ΄μ§€ 집합은 전역적이며, μ–΄λ–€ μ“°λ ˆλ“œλ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜κ³  μžˆλ“  간에 항상 같은 μœ„μΉ˜μ— 남아 있음

  • 각 ν”„λ‘œμ„ΈμŠ€λŠ” KERN_BASE (0x8004000000) 미만의 κ°€μƒμ£Όμ†Œκ°’μ„ κ°€μ§€λŠ” 독립적인 μœ μ €(가상)νŽ˜μ΄μ§€ 집합을 가짐

  • 컀널 : μœ μ € νŽ˜μ΄μ§€, 컀널 νŽ˜μ΄μ§€ λͺ¨λ‘μ— μ ‘κ·Ό κ°€λŠ₯

  • μœ μ € ν”„λ‘œμ„ΈμŠ€ : 본인의 μœ μ € νŽ˜μ΄μ§€μ—λ§Œ μ ‘κ·Ό κ°€λŠ₯


Frames , 물리(νŽ˜μ΄μ§€) ν”„λ ˆμž„

물리 λ©”λͺ¨λ¦¬ μƒμ˜ 연속적인 μ˜μ—­

  • ν”„λ ˆμž„ μ‚¬μ΄μ¦ˆ = νŽ˜μ΄μ§€μ‚¬μ΄μ¦ˆ
  • ν”„λ ˆμž„μ˜ μ‹œμž‘ μ£Όμ†ŒλŠ” νŽ˜μ΄μ§€ 크기의 배수둜 μ •λ ¬
                          12 11         0
    +-----------------------+-----------+
    |      Frame Number     |   Offset  |
    +-----------------------+-----------+
              Physical Address
  • 64λΉ„νŠΈ λ¬Όλ¦¬μ£Όμ†ŒλŠ” ν”„λ ˆμž„ λ„˜λ²„μ™€ ν”„λ ˆμž„ μ˜€ν”„μ…‹(λ˜λŠ” κ·Έλƒ₯ μ˜€ν”„μ…‹)으둜 λ‚˜λ‰¨

  • x86-64 μ‹œμŠ€ν…œ - Pintos
    : 컀널 가상메λͺ¨λ¦¬λ₯Ό 물리메λͺ¨λ¦¬μ— 직접 맀핑 ν•˜λŠ” 방식을 ν†΅ν•΄μ„œ λ¬Όλ¦¬μ£Όμ†Œ 에 μžˆλŠ” λ©”λͺ¨λ¦¬μ— 직접적 μ ‘κ·Ό

  • 컀널 가상메λͺ¨λ¦¬λ₯Ό ν†΅ν•˜λ©΄ ν”„λ ˆμž„λ“€μ— μ ‘κ·Ό κ°€λŠ₯


Page Tables

CPUκ°€ κ°€μƒμ£Όμ†Œλ₯Ό λ¬Όλ¦¬μ£Όμ†Œλ‘œ, 즉 νŽ˜μ΄μ§€λ₯Ό ν”„λ ˆμž„μœΌλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 자료ꡬ쑰

  • νŽ˜μ΄μ§€ ν…Œμ΄λΈ” 포맷은 x86-64 아킀텍쳐에 μ˜ν•΄ κ²°μ •
    • PintosλŠ” threads/mmu.cμ•ˆμ— νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ κ΄€λ¦¬ν•˜λŠ” μ½”λ“œ 제곡
                           +----------+
          .--------------->|Page Table|-----------.
         /                 +----------+           |
        |   12 11 0                               V  12 11 0
    +---------+----+                         +---------+----+
    | Page Nr | Ofs|                         |Frame Nr | Ofs|
    +---------+----+                         +---------+----+
     Virt Addr   |                            Phys Addr    ^
                  \_______________________________________/
  • νŽ˜μ΄μ§€μ™€ ν”„λ ˆμž„ μ‚¬μ΄μ˜ 관계 λ‚˜νƒ€λƒ„
    1) κ°€μƒμ£Όμ†Œ : νŽ˜μ΄μ§€ λ„˜λ²„μ™€ μ˜€ν”„μ…‹μ„ 포함
    2) νŽ˜μ΄μ§€ ν…Œμ΄λΈ” : νŽ˜μ΄μ§€ λ„˜λ²„λ₯Ό ν”„λ ˆμž„ λ„˜λ²„λ‘œ λ³€ν™˜
    3) λ¬Όλ¦¬μ£Όμ†Œ : ν”„λ ˆμž„ λ„˜λ²„λŠ” λ¬Όλ¦¬μ£Όμ†Œλ₯Ό νšλ“ν•˜κΈ° μœ„ν•œ λ―Έμˆ˜μ •λœ μ˜€ν”„μ…‹κ³Ό κ²°ν•©

Swap Slots

μŠ€μ™‘ νŒŒν‹°μ…˜ λ‚΄μ˜ λ””μŠ€ν¬ 곡간에 μžˆλŠ” νŽ˜μ΄μ§€ 크기의 μ˜μ—­

  • ν•˜λ“œμ›¨μ–΄μ  μ œν•œλ“€λ‘œ 인해 λ°°μΉ˜κ°€ κ°•μ œλ˜λŠ” 것(μ •λ ¬)이 ν”„λ ˆμž„μ—μ„œλ³΄λ‹¨ μŠ¬λ‘―μ—μ„œ 더 μœ μ—°
  • μŠ€μ™‘ μŠ¬λ‘―μ€ νŽ˜μ΄μ§€ 크기에 μ •λ ¬ν•˜λŠ” 것 ꢌμž₯

Resource Management Overview

μ„Έ κ°€μ§€μ˜ μ™„μ „νžˆ λ³„κ°œμ˜ 자료ꡬ쑰λ₯Ό κ΅¬ν˜„ν•˜λŠ” 것이 ν•„μˆ˜ μ•„λ‹ˆλ‹€.
μ„œλ‘œ μ—°κ΄€λœ μžμ›λ“€μ„ ν†΅ν•©λœ 자료ꡬ쑰둜 μ „λΆ€, λ˜λŠ” λΆ€λΆ„μ μœΌλ‘œ ν•©μΉ˜λŠ” 것 이 더 νŽΈλ¦¬ν•  수 μžˆλ‹€.

  • 각 μžλ£Œκ΅¬μ‘°μ—μ„œ 각각의 μ›μ†Œκ°€ μ–΄λ–€ 정보λ₯Ό 담을지 λ₯Ό μ •ν•˜κΈ°
  • 자료ꡬ쑰의 λ²”μœ„ λ₯Ό 지역(ν”„λ‘œμ„ΈμŠ€λ³„)으둜 할지, μ „μ—­(전체 μ‹œμŠ€ν…œμ— 적용)으둜 할지도 μ •ν•˜κΈ°
  • ν•΄λ‹Ή λ²”μœ„μ— ν•„μš”ν•œ μΈμŠ€ν„΄μŠ€μ˜ 수 도 κ²°μ •

섀계 λ‹¨μˆœν™”λ₯Ό μœ„ν•΄, non-pageable λ©”λͺ¨λ¦¬ (calloc μ΄λ‚˜ malloc 에 μ˜ν•΄ ν• λ‹Ήλœ)에 μ΄λŸ¬ν•œ μžλ£Œκ΅¬μ‘°λ“€ μ €μž₯ κ°€λŠ₯
= μžλ£Œκ΅¬μ‘°λ“€ μ‚¬μ΄μ˜ 포인터가 μœ νš¨ν•œ μƒνƒœλ‘œ μœ μ§€λ κ±°λž€ 사싀을 보μž₯ν•  수 μžˆλ‹€

  • Supplemental page table, 보쑰 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”

    • νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ λ³΄μ‘°ν•΄μ„œ, νŽ˜μ΄μ§€ 폴트 핸듀링이 κ°€λŠ₯ν•˜λ„λ‘ ν•΄μ€Œ
  • Frame table , ν”„λ ˆμž„ ν…Œμ΄λΈ”

    • 물리 ν”„λ ˆμž„μ˜ eviction policy(β€œμ«“μ•„λ‚΄κΈ° 정책”)λ₯Ό 효율적으둜 κ΅¬ν˜„ν•˜λ„λ‘ ν•΄μ€Œ
  • Swap table , μŠ€μ™‘ ν…Œμ΄λΈ”

    • μŠ€μ™‘ 슬둯이 μ‚¬μš©λ˜λŠ” 것을 좔적



  • Page-Map-Level-4 Offset은 PML4 ν…Œμ΄λΈ”μ˜ Entryλ₯Ό 가리킨닀.

  • PML4 ν…Œμ΄λΈ”μ€ 가상 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 물리 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•œ νŽ˜μ΄μ§€ ν…Œμ΄λΈ” 계측 ꡬ쑰의 κ°€μž₯ μƒμœ„ λ ˆλ²¨λ‘œμ„œ
    κ·Έ μ•ˆμ—λŠ” μ—¬λŸ¬κ°œμ˜ PML4 Entry κ°€ μ‘΄μž¬ν•œλ‹€.

  • PML4 Entry μ—λŠ” νŽ˜μ΄μ§€ 디렉토리 포인터(PDP), ν”Œλž˜κ·Έ 및 μ œμ–΄ 정보, 기타 메타데이터가 μžˆλ‹€.
    λ˜ν•œ λ‹€μŒ 레벨의 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”λ‘œ 이어지도둝 ν•˜μ—¬, μ΅œμ’…μ μœΌλ‘œ 가상 μ£Όμ†Œλ₯Ό 물리 μ£Όμ†Œλ‘œ λ³€ν™˜ν•œλ‹€.

0개의 λŒ“κΈ€