JOS在一开始实现的是简单的RR算法,没有优先级调度。
下面我实现了具有Priority的RR调度算法。首先我们需要增加一个sys_env_set_priority()的系统调用。
» Read more: 在JOS上实现基于Priority的RR_sched
JOS在一开始实现的是简单的RR算法,没有优先级调度。
下面我实现了具有Priority的RR调度算法。首先我们需要增加一个sys_env_set_priority()的系统调用。
» Read more: 在JOS上实现基于Priority的RR_sched
IDT本质是在kernel中的一个数组,是中断向量id到中断描述符(也即中断服务程序起始地址)的映射。
我画了一个图,图解IDT处理流程。
» Read more: 设定IDT表以及中断处理函数编写
今天阅读了一下计算机对于异常处理的章节,我把一些有用的摘出来,方便以后回顾。
异常控制除了中断,还包括system call,我会一直向这篇文章中添加自己读书内容的。
» Read more: 异常控制流(读书笔记)
之前我们建立了基本的物理页,下面我们建立系统的虚拟地址系统,也就是二级页表。
对于所有对内存的访问,地址都被解释成虚拟地址,并由MMU 执行过程。程序员的工作是设置和维护页目录和页表。
实现虚拟页表的关键在于页目录,页表中存的是物理地址,而页目录项,页表项本身地址是虚拟地址。
» Read more: JOS虚拟页表的实现
最近将JOS的启动流程学习了一遍,细化了系统从real mode到32-bit的转变。
但是在系统真正要接管内存,分配真正页表之前,要有一个简单的页表将kernel code载入到内存中。
我们先使用一个static void i386_detect_memory(void) 函数来探测物理内存一共有多少pages,一个page为4K.
另外我们看一下JOS的memery map就可以发现我们做的工作,写这部分一定要有好的大局观。知道每部分初始化位于内存的哪个位置。