摘要: 现在你的操作系统内核已经具备一定的异常处理能力了,在这部分实验中,我们将会进一步完善它,使它能够处理不同类型的中断/异常。 Handling Page Fault 缺页中断是一个非常重要的中断,因为我们在后续的实验中,非常依赖于能够处理缺页中断的能力。当缺页中断发生时,系统会把引起中断的线性地址存放 阅读全文
posted @ 2016-05-17 21:07 fatsheep9146 阅读(5892) 评论(5) 推荐(2) 编辑
摘要: Introduction 在这个实验中,我们将实现操作系统的一些基本功能,来实现用户环境下的进程的正常运行。你将会加强JOS内核的功能,为它增添一些重要的数据结构,用来记录用户进程环境的一些信息;创建一个单一的用户环境,并且加载一个程序运行它。你也可以让JOS内核能够完成用户环境所作出的任何系统调用 阅读全文
posted @ 2016-05-01 23:28 fatsheep9146 阅读(7801) 评论(1) 推荐(2) 编辑
摘要: Part 3 Kernel Address Space JOS把32位线性地址虚拟空间划分成两个部分。其中用户环境(进程运行环境)通常占据低地址的那部分,叫用户地址空间。而操作系统内核总是占据高地址的部分,叫内核地址空间。这两个部分的分界线是定义在memlayout.h文件中的一个宏 ULIM。JO 阅读全文
posted @ 2016-03-31 02:58 fatsheep9146 阅读(6089) 评论(6) 推荐(1) 编辑
摘要: Lab 2: Memory Management lab2中多出来的几个文件: inc/memlayout.h kern/pmap.c kern/pmap.h kern/kclock.h kern/kclock.c memlayout.h描述了虚拟地址空间的结构,我们需要通过修改pmap.c文件来实 阅读全文
posted @ 2016-03-23 17:45 fatsheep9146 阅读(10677) 评论(3) 推荐(1) 编辑
摘要: 在32位操作系统和64位操作系统上,基本数据类型分别占多少字节呢? 32位操作系统: char : 1 int :4 short : 2 unsigned int : 4 long : 4 unsigned long : 4 long long : 8 float : 4 double : 8 指针 阅读全文
posted @ 2016-03-20 15:01 fatsheep9146 阅读(1106) 评论(0) 推荐(1) 编辑
摘要: Lab 1中Exercise 9的解答报告 Exercise 1.9: 判断一下操作系统内核是从哪条指令开始初始化它的堆栈空间的,以及这个堆栈坐落在内存的哪个地方?内核是如何给它的堆栈保留一块内存空间的?堆栈指针又是指向这块被保留的区域的哪一端的呢? 答: 1. 首先需要判断操作系统内核是从哪条指令 阅读全文
posted @ 2016-03-10 14:37 fatsheep9146 阅读(3633) 评论(2) 推荐(0) 编辑
摘要: Lab 1 Exercise 10 为了能够更好的了解在x86上的C程序调用过程的细节,我们首先找到在obj/kern/kern.asm中test_backtrace子程序的地址, 设置断点,并且探讨一下在内核启动后,这个程序被调用时发生了什么。对于这个循环嵌套调用的程序test_backtrace 阅读全文
posted @ 2016-03-10 14:37 fatsheep9146 阅读(4216) 评论(2) 推荐(0) 编辑
摘要: Exercise 1.8 我们丢弃了一小部分代码---即当我们在printf中指定输出"%o"格式的字符串,即八进制格式的代码。尝试去完成这部分程序。 解答: 在这个练习中我们首先要阅读以下三个源文件的代码,弄清楚他们三者之间的关系: 三个文件分别为 \kern\printf.c,\kern\con 阅读全文
posted @ 2016-03-08 15:54 fatsheep9146 阅读(5103) 评论(2) 推荐(3) 编辑
摘要: Lab 1 Part 3: The kernel 现在我们将开始具体讨论一下JOS内核了。就像boot loader一样,内核开始的时候也是一些汇编语句,用于设置一些东西,来保证C语言的程序能够正确的执行。 使用虚拟内存 在运行boot loader时,boot loader中的链接地址(虚拟地址) 阅读全文
posted @ 2016-03-08 15:53 fatsheep9146 阅读(7198) 评论(2) 推荐(2) 编辑
摘要: 继承是面向对象编程技术中非常重要的一个基本概念。它背后的基本思想就是:通过已有的类来创建一个新的类,这个新的类可以重用(或继承)已有的类方法;新的类也可以加入新的方法和属性。 在这里我们通过一个实例来讲解继承的基本知识。假设我们在为一个公司设计一个管理系统,管理公司的人员,我们首先定义了一个雇员类E 阅读全文
posted @ 2016-02-27 14:09 fatsheep9146 阅读(1064) 评论(0) 推荐(1) 编辑