随笔分类 - 课程 Lab / MIT 6.828 操作系统工程
摘要:1. 建立内核虚拟地址的映射 在 Part 3,我们需要建立虚拟地址空间中内核部分的映射。 Exercise 5. Fill in the missing code in mem_init() after the call to check_page(). Your code should now
阅读全文
摘要:Part 2: Virtual Memory 1. 页式、段式、段页式 虚拟内存管理的意义在于,它可以将计算机可使用的内存范围从物理内存扩展到物理内存+磁盘。某一时刻,一个虚拟内存地址对应的数据可能并不实际存储在物理内存中。当然,CPU能直接访问的只有物理内存,若遇到了上述情况,首先从磁盘中将相关的
阅读全文
摘要:Part 1: Physical Page Management 练习 1. 在文件kern/pmap.c中,您必须实现以下函数的代码(可能按照给定的顺序)。 boot_alloc() mem_init()(只到调用check_page_free_list(1)) page_init() page_
阅读全文
摘要:MIT6.828这门课程在2018年之后已经改组成其他课程(MITS6.081),课程实验的更新也停止在2018年,因此环境配置方面可能会出现各种各样的问题,下面为2023年1月进行的配置流程。 环境:VMWare虚拟机 Ubuntu 22.04LTS x86_64 1. 编译器工具链检查 objd
阅读全文
摘要:Part 4: The Stack 1. 栈的初始化 练习 9. 确定内核初始化栈的位置,以及栈在内存中的确切位置。内核如何为其栈保留空间?栈指针初始化后指向这个保留区域的哪一“端”? 内核运行的第一个工作是开启虚拟地址和物理地址之间的映射(或者说分页),第二个工作就是初始化栈。在kern/entr
阅读全文
摘要:Part 3: The Kernel 1. 物理地址与虚拟地址的映射 我们在 5.3 中提到过,内核的第一条指令所在的物理地址0x100000被映射到虚拟地址0xF0100000。事实上,在 Lab 1 中,JOS 对前 4MB 的物理内存都进行了类似的映射,这是由kern/entrypgdir.c
阅读全文
摘要:Part 2: The Boot Loader 1. 从 Boot Loader 开始 BOIS从磁盘读取Boot Loader到指定内存区域0x7c00到0x7dff(512B),然后执行jmp指令,跳转到Boot Loader的第一条指令所在地址0x7c00。 (gdb) b *0x7c00 #
阅读全文
摘要:Part 1: PC Bootstrap 0. 前置知识 x86、i386、x86-64 x86,又称 IA-32(Intel Architecture, 32-bit),泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构。这个名称源于这个系列早期的处理器名称,它们都是80x86格式
阅读全文