[PintOS Project 3] TIL - 1

옵주비·2022년 6월 8일
0

PintOS Project3

목록 보기
1/6
post-thumbnail
post-custom-banner

2022-06-07 (Tue)

우여곡절 끝에 Project 1과 2를 끝내고, 이제 Project 3을 시작할 차례가 되었다. 팀도 3주만에 새로 구성되고, 티타임에 저녁에 협력사 설명회도 있었어서 오늘은 가용 시간이 많지는 않았다. 그래도 깃북을 살펴본 김에 가볍게 정리해보고자 한다.

3rd 프로젝트의 개요

위의 깃북에서 보듯이, 컴퓨터의 메인 메모리 크기가 한정됨에 따라, 현재로썬 PintOS에서 실행할 수 있는 프로그램의 수와 크기에 한계가 있다. 따라서 이번 3rd 프로젝트의 목적은, 무한대의 메모리가 있다는 illusion을 구현 함으로써, 갯수와 크기에 제한없이 여러 프로그램을 동시에 실행할 수 있도록 하는 것이다.

이번 프로젝트는 주로 VM 디렉토리에서 진행하게 되는데, 서로 다른 4가지 타입의 VMtype에 대한 정의와 설명은 _vm.hvm.c 에서 확인할 수 있으며, 그에 대한 연산은 각 타입별로 헤더 파일 및 C파일이 각각 분리되어 있다는 내용을 확인할 수 있었다. 다만 위와 같이 block.hblock.c 파일이 필요하다는데, 주어진 소스코드에선 도저히 찾아볼 수 없어서 처음으로 조교님께 질문 글을 남겨봤다. 요약하자면, pintos-kaist로 넘어오는 과정에서 생략된 것이라고 한다! 대신 disk.h와 disk.c를 참고하면 되겠다.

Virtual Memory 관련 용어 정리

이번 Project 3 깃북의 Introduction 부분에는 유독 용어 설명이 많다. 그만큼 가상 메모리에 대한 개념이 호락호락하진 않다는 것이겠지만, 열심히 정리해보자.

PAGES

  • page는 virtual page 라고도 부른다.
  • page는 연속된 영역의 virtual memory로, 4,096바이트(4KB) 크기이다.
  • page는 반드시 page-aligned 되어야 한다. 즉, virtual address의 시작점은 page size(4KB)로 딱 나누어 떨어져야 한다. 그래서 64비트 virtual address의 마지막 12개의 비트는 offset 으로 사용되며, page offset 이라고도 한다.
  • 상위 52개의 비트는 page table 내의 index를 나타내는데 사용된다.
  • 64비트 OS에서는 4-level page table을 사용하며, 그에 따라 virtual address는 아래의 그림과 같은 양상을 보이게 된다.
  • user (virtual) page set 은 KERN_BASE 로 정의한 0x8004000000 보다 아래에 존재하는 user page들로 이루어진 것을 말한다. 프로세스는 각각 독자적인 user page set 을 갖는다.
  • 반면, kernel (virtual )page set 은 global 하다. 즉, 현재 어떤 쓰레드 혹은 프로세스가 실행 중이든 kernel page set 은 같은 position을 지키게 된다.
  • kernel은 kernel page와 user page(현재 실행 중인 것에 한함)에 둘 다 접근이 가능한 반면, user process는 오직 자기 자신의 user page에만 접근이 가능하다.
  • PintOS에서는 vaddr.h 에 포함된 위의 매크로들을 활용해 virtual address 처리를 간단히 수행할 수 있다.

FRAMES

  • frame은 page frame, physical frame 이라고도 부른다.
  • frame도 page와 마찬가지로 page-size(4KB)이며 page-aligned 되어야 한다. 그래서 64비트 physical address는 다음과 같이 frame numberframe offset 으로 구분할 수 있다.
  • x86-64에서는 physical address로 직접 접근(access)하는 방법을 제공하지 않는다. PintOS의 경우에는 kernel virtual memory를 physical memory에 직접적으로 매핑시키는 방법 을 제공한다.
  • 예시) KERN_BASE에 위치한 virtual addressphysical address 0 에 접근한다. 또한, KERN_BASE + 0x1234 의 virtual addressphysical address 0x1234 에 접근한다.
  • 이와 같이 kernel virtual memory의 첫 번째 page가 physical memory의 첫 번째 frame에 매핑되고, 두 번째 page가 두 번째 frame에 매핑되기에, kernel virtual memory를 통해 frame에 접근이 가능하다.
  • PintOS에서는 vaddr.h 에 포함된 위의 매크로들을 활용해 physical address 와 kernel virtual address 간의 상호 변환(translation)을 손쉽게 수행할 수 있다.

PAGE TABLE

  • page table은 CPU가 virtual address를 physical address로 변환하기 위해 사용하는 자료구조 이다. 즉, page 를 frame 으로 변환한다.
  • 이 page table의 포맷은 x86-64 아키텍쳐에 의해 정의된 것으로, PintOS는 page table을 관리하는 코드를 mmu.c 에 제공하고 있다.
  • 아래의 다이어그램은 page와 frame의 관계를 보여준다.

  1. 좌측의 virtual address 는 page number와 offset으로 구성된다.
  2. 중앙의 page table 은 page number를 frame number로 바꿔준다.
  3. 이 frame number에다가 offset을 합치면 우측의 physical address가 된다.

SWAP SLOTS

  • swap slot은 swap partition 내에 있는 disk space 의 영역이다.
  • swap slot의 크기는 page-size(4KB) 이다.
  • 하드웨어적인 한계에도 불구하고 frame 보다 slot을 배치하는데 좀 더 유동적이긴 하지만, swap slot도 page-aligned 되어야 한다. 그렇게해서 나쁠 것이 하나도 없기 때문이다.

마무리

오늘은 간단히 깃북을 읽어보며, 크게 2가지를 파악할 수 있었다.
1. 이번에 수행할 Project 3의 구현 목적 (왜 필요한지)
2. 프로젝트 진행에 앞서 필요한 Virtual Memory 관련 개념

Project 2를 시작할 때는 도대체 Virtual Memory가 뭔지 전혀 감이 안 왔는데, 권영진 교수님의 강의를 듣고난 후에 몰입해서 깃북을 읽어봤더니 술술 이해가 되어 느낌이 좋다. 내일도 열심히 해보자 :)

post-custom-banner

0개의 댓글