Archive for March, 2014

设定IDT表以及中断处理函数编写

March 26th, 2014

IDT本质是在kernel中的一个数组,是中断向量id到中断描述符(也即中断服务程序起始地址)的映射。
我画了一个图,图解IDT处理流程。
» Read more: 设定IDT表以及中断处理函数编写

异常控制流(读书笔记)

March 13th, 2014

今天阅读了一下计算机对于异常处理的章节,我把一些有用的摘出来,方便以后回顾。
异常控制除了中断,还包括system call,我会一直向这篇文章中添加自己读书内容的。
» Read more: 异常控制流(读书笔记)

JOS虚拟页表的实现

March 10th, 2014

之前我们建立了基本的物理页,下面我们建立系统的虚拟地址系统,也就是二级页表。

对于所有对内存的访问,地址都被解释成虚拟地址,并由MMU 执行过程。程序员的工作是设置和维护页目录和页表。
实现虚拟页表的关键在于页目录,页表中存的是物理地址,而页目录项,页表项本身地址是虚拟地址。
» Read more: JOS虚拟页表的实现

JOS的物理页表分配实现

March 4th, 2014

最近将JOS的启动流程学习了一遍,细化了系统从real mode到32-bit的转变。
但是在系统真正要接管内存,分配真正页表之前,要有一个简单的页表将kernel code载入到内存中。

我们先使用一个static void i386_detect_memory(void) 函数来探测物理内存一共有多少pages,一个page为4K.
另外我们看一下JOS的memery map就可以发现我们做的工作,写这部分一定要有好的大局观。知道每部分初始化位于内存的哪个位置。

» Read more: JOS的物理页表分配实现