You've successfully subscribed to The Daily Awesome
Great! Next, complete checkout for full access to The Daily Awesome
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Success! Your billing info is updated.
Billing info update failed.
MIT6.828 | Lab 2: Memory Management

MIT6.828 | Lab 2: Memory Management

. 4 min read

LINK

引言

本次实验将编写操作系统的内存管理代码,分为两个部分:

  • 第一部分是内核的物理内存分配器,使内核能够分配和释放内存。 你的分配器将以4096字节为单位工作,称为page。 你的任务是
    • 维持一个记录page分配状态的数据结构
    • 多少进程正在共享每一个分配的page
    • 编写分配和释放page的程序
  • 第二部分是虚拟内存,它将内核和用户软件使用的虚拟地址映射到物理内存中的地址。 当指令使用内存时,x86硬件的内存管理单元(MMU)执行映射,查询一组page table。 您需要根据我们提供的规格修改JOS设置MMU的页面
$ git checkout -b lab2 origin/lab2
$ git merge lab1

Lab2 包含以下新文件:

  • inc/memlayout.h
  • kern/pmap.c
  • kern/pmap.h
  • kern/kclock.h
  • kern/kclock.c

inc/memlayout.h描述了必须通过修改 pmap.c 来实现的虚拟地址的布局

memlayout.hpmap.h 定义了PageInfo,用于跟踪哪些物理内存页面是free的

kclock.ckclock.h 操纵PC的电池供电时钟和CMOS RAM硬件,其内部的BIOS记录PC包含的物理内存大小等信息

pmap.c 需要读取设备硬件以计算物理内存大小,但这部分已经完成了:你不需要知道CMOS硬件的工作细节。

请特别注意 memlayout.hpmap.h,因为本实验要求您使用并理解它们包含的许多定义。 您可能也想查看 inc / mmu.h,因为它还包含许多对本实验有用的定义。

MIT6.828 | Lab 2: Memory Management - Part 1: Physical Page Management
操作系统必须跟踪物理RAM的哪些部分是空闲的以及哪些是当前正在使用的。 JOS使用 page granularity 管理PC的物理内存以使用MMU映射和保护每个分配的内存。Part1 目的是编写物理页面分配器,它通过 struct PageInfo 对象的链接列表跟踪哪些页面是空闲的(与xv6不同,它们没有嵌入到自由页面中),每个对应一个物理页面。 在编写剩余的虚拟内存实现之前,您需要编写物理页分配器,因为页表管理代码需要分配用于存储页表的物理内存。
MIT6.828 | Lab 2: Memory Management - Part 2: Virtual Memory
虚拟地址、线性地址和物理地址在x86术语中,虚拟地址由 段选择器 segment selector 和段内的偏移量 offset 组成。 线性地址是您在分段翻译 segment translation 之后, 页面翻译 page translation 之前获得的。 物理地址是在段和页面翻译之后最终得到的,最终在硬件总线上抵达RAM的内容。
MIT6.828 | Lab 2: Memory Management - Part 3: Kernel Address Space
JOS将处理器的32位线性地址空间分为两部分。 我们将在实验3中开始加载和运行的用户环境(进程)将控制下部的布局和内容,而内核始终保持对上部的完全控制。 划分线某种程度上由inc/memlayout.h中的符号ULIM定义,为内核保留大约256MB的虚拟地址空间。

参考链接:
https://xinqiu.me/2016/12/09/MIT-6.828-2/