WIL project 3 Virtual Memory(1)

김지수·2022년 12월 6일
0

SW사관학교정글5기

목록 보기
10/13

Big picture : user program 실행시키기

  • 물리 메모리는 제한되어 있지만, 많은 프로세스들은 물리 메모리를 사용하고 싶어한다. 물리 메모리는 매번 모든 프로세스들의 페이지를 저장하기엔 크기가 충분하지 않습니다.
  • 만약 페이지가 물리메모리가 필요하지 않다면, "Paged out(swap table이나 file system에 쓰여진)"을 얻게 됩니다.
  • 프로세스가 페이지가 필요하거나 물리 메모리에 없다면, "page in("paging out"의 또다른 페이지)"을 얻게 된다

Things to do

  • Supplmental page table
  • Physical frame management
  • Lazy loading(demand paging)을 위한 page fault handler를 변경한다. - Stack growth, file-maped etc
  • mmap, munmap
  • Swap in/out

Terminology

  • Page : 가상 메모리의 연속적인 영역
  • Frame : 물리 메모리의 연속적인 영역
  • Page Table : 가상 주소를 물리 주소로 변환해주는 자료 구조(page to frame)
  • Eviction : 페이지의 프레임으로 부터 페이지를 지우고 잠재적으로 이것을 스왑 테이블이나 파일 시스템에 써준다.
  • Swap Table : 제거된 페이지가 Swap partition에 기록되는 위치

Data structure you must design

  • Supplemental page table : 각 페이지를 위한 supplemental data를 추적하는 프로세스별 데이터 구조 / 예를 들어 데이터(frame / disk / swap)의 위치, 커널 가상 주소를 가르키는 포인터 active, inactive 등등
  • Frame table : 할당되거나 free되어 있는 Physical frame의 추적을 유지하고 있는 전역 자료 구조
  • Swap table : Swap slot들의 추적을 유지한다
  • File mapping table : 각각의 페이지에 매핑된 메모리가 매핑된 파일들의 추적을 유지하는 것

Many choices for data structures

  • Arrays : 가장 간단하게 구현이 가능하지만, 메모리를 낭비하는 밀도가 낮다
  • Lists : 꽤나 심플한 편이지만 리스트를 순회하는데 시간을 많이 소모한다
  • Bitmaps : true 또는 false가 될 수 있는 비트 배열, 동일한 리소스 집합에서 사용량을 추적할 때 유용
  • Hash Tabbles : key-value 1 대 1 매칭 구조이기 때문에 삽입, 삭제, 검색 시간복잡도가 O(1)을 가진다. 하지만 순서를 보장하지 않고, 같은 인덱스에 모든 키값과 데이터가 저장되어(전부 충돌한 경우) O(n)의 시간 복잡도를 가진다.

Concept of lazy loading

  • 가상 주소가 만들어질 때(mmap), pintos는 구조체 페이지를 가상 주소에 연결한다.
  • 각 가상 주소는 다양한 목적으로 사용되곤 한다.
    (1) anonymous memory, (2) file-backed memory
    • 구조체 페이지는 정보를 반영한다(구조체 페이지로 이동)
    • 구조체 페이지가 할당되는 것은 physical frame이 가상주소에 할당된 것을 의미하지는 않다. 실제 physical frame은 ()안에 할당된다

Struct page and page_operations

  • frame이 할당되고 나서 contents를 어떻게 채울 것인가?
    • 페이지는 처음에 uninit_page로 시작한다
    • anonymouse memory를 위한 페이지 -> anon_initializer 사용
    • file-backed memory를 위한 페이지 -> file_map_initializer 사용
    • 어떤 함수가 각각의 페이지 타입에 따른 initializer와 연관이 되어있을까?

Supplemental Page Table

  • 각각의 페이지에 대한 추가적인 정보를 담은 page table을 보충한다
  • page table을 바로 바꾸지 않는 이유는 page table 형식의 제한 때문이다
    • spt_find_page : spt와 가상주소로 부터 구조체 페이지를 찾는다
  • 두 가지 목적
    • page fault 시 커널은 어떤 그리고 어디에 데이터가 있는지 찾기 위해 supplemental page table을 참고한다
    • 프로세스가 종료되었을 때 커널은 어떤 리소스를 free 시켜줄지 결정한다



Memory management

아래의 정리글은 반효경 선생님의 운영체제 강의를 듣고 작성하였습니다.
운영 체제 강의 <- 관련 영상

📎 Logical & Physical Address

📒 Logical Address (=Virtual Address)

  • 프로세스마다 독립적으로 가지는 주소 공간
  • 각 프로세스마다 0번지부터 시작
  • CPU가 보는 주소는 Logical Address

📒 Physical Address

  • 메모리에 실제 올라가는 주소

📎 Address Binding (주소 바인딩)

📒 Address Binding

  • Symbolic Address -> Logical Address -> Physical Address
  • Logical Address에서 Phsical Address로 변환되는 시점은 언제일까??
    📝 Compile time binding
    • 물리적 메모리 주서가 컴파일 시 알려짐
    • 시작 위치 변경시 재 컴파일
    • 컴파일러는 절대코드를 생성
      📝 Load time binding
    • Loader의 책임하에 물리적 메모리 주소 부여
    • 컴파일러가 재배치가능코드(relocatable code)를 생성한 경우 가능
      📝 **Execution time binding(=Run time binding)
    • 수행이 시작된 이후에도 프로세스의 메모리 상 위치를 옮길 수 있음
    • CPU가 주소를 참조할 때마다 binding을 점검(address mapping table)
    • 하드웨어적인 지원 필요

📎 가상 메모리 Paging

  • 페이징 기법(pagind)은 컴퓨터가 메인 메모리에서 사용하기 위해 2차 기억장치로부터 데이터를 저장하고 검색하는 메모리 관리 기법
  • 즉, 가상기억장치는 모두 같은 크기의 블록으로 편성하여 운용하는 기법
  • 일정한 크기의 블록을 페이지(page)라고 한다.

📒 Frame & Page

  • 프레임(Frame) : 물리 메모리를 일정한 크기로 나눈 블록
  • 페이지(Page) : 가상 메모리를 일정한 크기로 나눈 블록
  • 페이지가 하나의 프레임을 할당 받으면, 물리 메모리에 위치하게 된다. 프레임을 할당 받지 못한 페이지들은 외부 저장장치에 저장되며, 이 때도 프레임과 같은 크기 단위로 관리된다.

📒 Page table

  • 페이지 테이블은 프로세스의 정보를 저장하고 있으며, 하나의 프로세스는 하나의 페이지 테이블을 가진다. 테이블은 다음과 같은 색인과 내용으로 구성
    • 색인 : 페이지 번호
    • 내용 : 해당 페이지에 할당된 물리 메모리(프레임)의 시작 주소, 이 시작 주소와 페이지 주소를 결합하여 물리 메모리 주소를 알 수 있다.

📒 Page table entry

  • 페이지 테이블의 레코드, PTE의 각 필드에는 일반적으로 다음 내용이 기록 된다
    • 페이지 기본주소(Page base address)
    • 플래그 비트
      • 접근 비트(Accessed bit) : 페이지에 대한 접근이 있었는지를 나타낸다.
      • 변경 비트(Dirty bit) : 페이지 내용의 변경이 있었는지를 나타낸다.
      • 현재 비트(Present bit) : 현재 페이지에 할당된 프레임이 있는지를 나타낸다.
      • 읽기/쓰기 비트(Read/Write bit) : 읽기/쓰기에 대한 권한을 표시한다.

0개의 댓글