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

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

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

       好的,第六天的笔记开始!

                  

       如题,今天的主要内容就是分割编译与中断处理。

       首先说分割编译。这是由于把所有函数都放在一个源文件里使得略显庞大,为此可以根据功能划分为多个文件。

而各个文件公用的,比如定义的常数,和公用的函数的声明,便写在.h的文件里,也就是头文件里。这样,在每个文

件开始时,只要写上#include "xxx.h"即可。一个细节,""代表头文件和源文件在同一个文件夹里,<>则表示头文件

在编译器所提供的文件夹里。

                                     

       现在对昨天的笔记中的GDT做一些补充说明。段的属性中有一个标志位,叫Gbit,当这个标志位是1的时候,

limit的单位是页(page),而不是字节(byte),在电脑的CPU里,一页是4KB。

       接下来的内容,是今天最重要的内容,也就是PIC。这里开始引入中断,是为了接下来马上连带着的鼠标和键盘

的部分,这里是头,要好好看懂。所谓PIC就是programmable interrupt controller,是一个将8个中断信号集合成

一个中断信号的装置。如Intel的 8259A。关于PIC的具体知识可以参照《微机接口》。其最关键的内容是

ICW(initial control word)和 OCW(operate control word)。鼠标是IRQ12,键盘是IRQ1,而本书中INT 0x20到

INT 0x2f接收中断信号IRQ0到IRQ15 。在编写完中断例程asm_handler21后,应将例程注册到idt的0x21号。

      注册的具体语句如下:

       set_garedesc(  idt + 0x21,    (int)asm_inthandler21,   2*8,     AR_INTGATE32 );

      这样设定完之后,如果发生第21号中断,CPU就会自动调用asm_handler21。此处2*8代表段号是2,*8是因为

低3位有别的意思。最后的AR_INTGATE32 将IDT的属性设定为0x008e,它表示中断处理的有效设定。

      第6天的笔记到此结束,明天开始更进一步地研究利用中断完成对鼠标和键盘的控制。


抱歉!评论已关闭.