到目前为止,我们写的代码都是用汇编写的,汇编的缺点就是,第一遍写完了,回头再过来看,又忘了,晦涩难懂。其实我感觉,写汇编的好处,就是能让自己去多了解一下cpu还有其它硬件的结构。硬件的的架构,决定软件的实现方式,硬件就好比基因,软件就是一个个的动物个体。
本次实践涵盖的内容包括《orange’s一个操作系统的实现》书中的第三章末尾、第四章、第五章。因为这些东西比较紧凑。
捋一下思路:
1. 中断与异常,在保护模式下是非常重要的一部分。
写过java代码的同学一定写过”try{}catch(Exception e)”进行异常捕获,也写过类似各种观察者模式类似”onEvent(event,handler)” 的代码。 中断与异常的处理,其实就是这种思想:a.用一个表格,注册一下各种事件发生的时候应该如何处理;2.当cpu执行时发生异常或者中断,就到这个表格中找到相应的处理程序进行处理。
2.用C语言写内核!
其实掌握了上面提到的异常与中断处理机制,接下去,要实现一个操作系统,完全可以用汇编接着写下去。但是,这实在让人崩溃,因为我们还有更好的方法,用C语言写! 书中第四章和第五章,主要目标就是这个。
有了这个目标,接下来就需要解决几个问题:
a. 内核代码会越来越多,而512字节的引导区明显会不够用,怎么办?
b. 如果使用C语言写代码,原有的汇编代码如何与C代码相互调用?
c. 用gcc或者其它编译工具编译后的目标文件,格式与nasm直接编译的