-
Project3 IntroductionOS/Pintos 2022. 1. 25. 10:25
the number and size of programs that can run is limited by the machine's main memory size. In this assignment, you will remove that limitation by building an illusion of infinite memory.
실행할 수 있는 프로그램의 수와 크기는 기계의 주 메모리 크기에 의해 제한됩니다. 이 과제에서는 무한 확장 메모리에 대한 착각을 구축하여 이러한 제한을 제거할 것입니다.
Background
Source Files
이 프로젝트의 VM 디렉토리에서 작업합니다. Makefile이 업데이트되어 -DVM 설정을 켭니다.
지정된 템플릿을 따라야 합니다. 즉, 주어진 템플릿을 기반으로 하지 않은 코드를 제출하면 0pt가 됩니다.
수정해야할 세부 정보
- include/vm/vm.h, vm/vm.c
- 가상 메모리에 대한 일반 인터페이스를 제공합니다. 헤더 파일에서 가상 메모리 시스템이 지원해야 하는 VM_UNINIT, VM_ANON, VM_FILE, VM_PAGE_CACE 등의 다양한 VM_type에 대한 정의와 설명을 볼 수 있습니다. (현재로서는 VM_PAGE_CACE를 무시함). 또한 여기에서 추가 페이지 테이블을 구현합니다(아래 참조).
- include/vm/uninit.h, vm/uninit.c
- 초기화되지 않은 페이지에 대한 작업을 제공합니다(vm_type = VM_UNINIT). 현재 설계에서는 처음에 모든 페이지가 초기화되지 않은 페이지로 설정된 다음 익명 페이지 또는 파일 백업 페이지로 변환됩니다.
- include/vm/anon.h, vm/anon.c
- 익명 페이지에 대한 작업을 제공합니다(vm_type = VM_ANON).
- include/vm/file.h, vm/file.c
- 파일 백업 페이지에 대한 작업 제공(vm_type = VM_FILE)
- include/vm/inspect.h, vm/inspect.c
- 정지 작업을 위한 메모리 검사 작업을 포함합니다. 이 파일을 변경하지 마십시오.
이 프로젝트에 대해 작성하는 코드의 대부분은 VM 디렉토리와 이전 프로젝트에서 소개된 파일에 있는 파일입니다. 처음으로 몇 개의 파일만 보게 될 수 있습니다.
- include/devices/block.h, devices/block.c블록 장치에 대한 섹터 기반 읽기 및 쓰기 액세스를 제공합니다. 이 인터페이스를 사용하여 스왑 파티션을 블록 장치로 액세스합니다.
- Provides sector-based read and write access to block device. You will use this interface to access the swap partition as a block device.
Memory Terminology
Pages
페이지는 길이가 4,096바이트(page size)인 가상 메모리의 연속 영역입니다.
페이지는 페이지 정렬 상태여야 합니다. 즉, 페이지 크기로 균등하게 구분되는 가상 주소에서 시작해야 합니다.
따라서 64비트 가상 주소의 마지막 12비트는 페이지 오프셋입니다.
상위 비트는 곧 도입될 페이지 테이블의 인덱스를 나타내는 데 사용됩니다.
64비트 시스템에서는 가상 주소를 다음과 같이 만드는 4단계 페이지 테이블을 사용합니다.
각 프로세스에는 가상 주소 KERN_BASE(0x8004000000) 아래의 독립적인 사용자(가상) 페이지 세트가 있습니다.
반면에 커널(가상) 페이지들의 집합은 전역적이므로 어떤 스레드나 프로세스가 실행 중인지에 관계없이 같은 위치에 남아 있습니다.
커널은 사용자 페이지와 커널 페이지 모두에 액세스할 수 있지만 사용자 프로세스는 자신의 사용자 페이지에만 액세스할 수 있습니다.
Frames
프레임(frame)은 물리 주소의 연속 영역이다. 페이지와 마찬가지로 프레임도 페이지 크기와 정렬되어야 합니다. 64비트 물리적 주소는 다음과 같이 프레임 번호와 프레임 오프셋으로 나눌 수 있다:
x86-64는 물리적 주소의 메모리에 직접 액세스할 수 있는 방법을 제공하지 않습니다.
핀토스는 커널 가상 메모리를 물리적 메모리에 직접 매핑함으로써 이 문제를 해결한다
- 커널 가상 메모리의 첫 번째 페이지는 물리적 메모리의 첫 번째 프레임에 매핑되고, 두 번째 페이지는 두 번째 프레임에 매핑된다. 그러므로 프레임은 커널 가상 메모리를 통해 접근할 수 있다.
핀토스는 물리적 주소와 커널 가상 주소 사이를 변환하는 기능을 제공한다.
Page Tables
페이지 테이블(page table)은 CPU가 가상 주소를 실제 주소로 변환하기 위해 사용하는 데이터 구조이다.
페이지 테이블 형식은 x86-64 아키텍처에 의해 결정됩니다.
핀토스는 페이지 테이블 관리 코드를 threads/mmu.c로 제공합니다.
아래 다이어그램은 페이지와 프레임 간의 관계를 보여줍니다.
왼쪽의 가상 주소는 페이지 번호와 오프셋으로 구성됩니다.
페이지 테이블은 페이지 번호를 프레임 번호로 변환하고 수정되지 않은 오프셋과 결합하여 실제 주소를 가져옵니다.
Swap Slots
스왑 슬롯은 스왑 파티션에 있는 디스크 공간의 페이지 크기 영역입니다. 슬롯의 배치를 지시하는 하드웨어 제한은 프레임보다 유연하지만 스왑 슬롯은 단점이 없기 때문에 페이지 정렬을 해야 한다.
Resource Management Overview
다음과 같은 데이터 구조를 설계/구현해야 합니다.
Supplemental page table
Enables page fault handling by supplementing the page table. See Managing the Supplemental Page Table below.
페이지 테이블을 보완하여 페이지 장애 처리를 가능하게 합니다. 아래 추가 페이지 표 관리를 참조하십시오.
Frame table
Allows efficient implementation of eviction policy of physical frames See Managing the Frame Table below.
물리적 프레임의 제거 정책을 효율적으로 구현할 수 있습니다. 아래 프레임 테이블 관리를 참조하십시오.
Swap table
Tracks usage of swap slots. See Managing the Swap Table below.
스왑 슬롯의 사용을 추적합니다. 아래의 스왑 테이블 관리를 참조하십시오.
반드시 세 가지 완전히 다른 데이터 구조를 구현할 필요는 없습니다. 관련 리소스를 통합 데이터 구조로 전체 또는 부분적으로 병합하는 것이 편리할 수 있습니다.
각 데이터 구조에 대해 각 요소에 포함해야 하는 정보 (어떤정보?)를 결정해야 합니다. 또한 데이터 구조의 범위(프로세스별)와 해당 범위에 필요한 인스턴스 수를 결정해야 합니다.
설계를 단순화하기 위해 이러한 데이터 구조를 페이지링할 수 없는 메모리(예: calloc 또는 malloc에 의해 할당된 메모리)에 저장할 수 있습니다. 즉, 그 중 포인터가 유효하다는 것을 확신할 수 있습니다.
Choices of implementation (Performance perspective): 성능관점에서의 구현 선택사항
Managing the Supplemental Page Table
추가 페이지 표는 각 페이지에 대한 추가 데이터로 페이지 표를 보완합니다.
페이지 테이블의 형식에 따른 제약 때문에 필요합니다.
이러한 데이터 구조를 종종 페이지 테이블이라고도 합니다. 혼동을 줄이기 위해 "supplemental”이라는 단어를 추가합니다.
supplemental page table는 적어도 두 가지 목적으로 사용됩니다. 가장 중요한 것은 페이지 장애 시 커널이 추가 페이지 테이블에서 오류가 발생한 가상 페이지를 조회하여 어떤 데이터가 있어야 하는지 확인하는 것입니다. 둘째, 커널은 프로세스가 종료될 때 추가 페이지 테이블을 참조하여 어떤 리소스를 확보할 것인지 결정한다.
'OS > Pintos' 카테고리의 다른 글
Project 1,2 정리 (0) 2022.01.11 Pintos 프로젝트 시 도움받은 블로그들! (0) 2022.01.11 Project2 : SystemCall (0) 2022.01.11 Project2 : Argument Passing (0) 2022.01.10 Project2: User Programs(introduction) (0) 2022.01.10