现在的位置: 首页 > 综合 > 正文

《30天自制操作系统》学习笔记——第五天

2014年06月10日 ⁄ 综合 ⁄ 共 1287字 ⁄ 字号 评论关闭

       新的一天又来到啦!话说为啥这么兴奋呢?想说说学习这本书的动机。看这本书到

现在,真的觉得是对c和汇编在开发应用方面的一本非常好的教材。从中可以回顾c和汇

编,学习开发过程,还有就是,了解一个最基础的操作系统。这些事情对我来说是非常

诱人的,于是学习这本书便是有意义的。

        回到正题,开始第五天的笔记。


         


       第五天一开始讲的是结构体。从书中的例子,我们可以更直观地体会为什么会有结

构体这样的东西。c语言是面向过程的语言,它相较于汇编的一大改进就是对函数的改

进。原来在汇编中,调用函数时只有标号,而参数分布地比较混乱,当编写一个稍复

杂的程序时,都需要自己先列个表,特地将函数和参数先列出来。在c语言中,调用一个

函数时,可以反映出函数标号,又可以反映出返回值类型,和所有的参数。也就是说,

它将一个子程序封装地更好了,并且直观地展现出它的外特性。但是其实一看这本书,

立马会有体会,有的函数,参数实在是太多了,虽说每个函数打头都要声明,但是一多

了,还是觉得不舒服。这就有了结构体。结构体是类的鼻祖。它相当于是一个自定义的

各种数据类型的元素的集合。它将很多具有某种现实意义的数据都归纳到一起,在传递

参数的时候,就可以以传递结构体的方式,而传递其包括的所有参数。这样就会显得方

便,而且思路清晰。


       后面作者介绍了显示字符和鼠标的方法,此处鼠标只是显示,不能动,而且其背景

是固定色,所以没什么好说的。

        接下来,作者介绍的东西我感觉就比较重要了,那就是GDT和IDT的初始化。GDT

是globle(segment)description table的缩写,就是全局段号记录表。为什么会有它是

为了解决多程序占用内存地址冲突的问题。如果不同的程序使用不同的段,那么即便大

家都有ORG 0 这样也不会冲突了。补充一句ORG指令后面跟的是偏移地址。而GDT这

个全局段号记录表到底记录了什么东西呢?它包括:

(1)段的大小

(2)段的起始地址

(3)段的管理属性(禁止写入,禁止执行,系统专用等)

      CPU用8个字节(64)位来表示这些信息。即

struct SEGMENT_DESCRIPTIOR{

short limit_low,base_low;

char base_mid,access_right;

char limit_high,base_high;

}

       段号类似于第四天的笔记中写的调色板号,但是段号可以用0~8191(2的13次

方)。于是定义这么多段就需要8192*8=64KB的空间,这就是GDT。

接下来讲了IDT,interrrupt descriptor table,中断记录表。每条信息也是8字节。

struct GATE_DESCRIPTOR{

short offset_low,selector;

char dw_count,access_right;

short offset_high;

}

       IDT记录了0~255的中断号码与调用函数的对应关系。(哎呀,这个功能好像中断

向量表啊!)

       虽然内容还没讲解完,但第五天的开发也就到此终止了,欠缺的内容一定会在之后

的笔记中继续补上。

抱歉!评论已关闭.