24.1 64位文件系统

想要实现文件系统,就需要一个超级块和一个文件系统位图。在我们的操作系统中,超级块位于98号扇区,文件系统位图位于99号扇区,文件从100号扇区开始存放。

本章代码24/FS.h定义了FCB,一个FCB的大小是32字节,一个扇区可以存放16个FCB,其中,最后一个FCB改为存放魔数,这些FCB组成了超级块。

本章代码24/FS.hpp实现了文件系统的各个接口,其实现思路与32位操作系统一致,这里不再赘述。

24.2 64位键盘驱动

想要实现键盘驱动,就需要先实现一个具有阻塞功能的IO队列。IO队列的实现位于本章代码24/IOQueue.h24/IOQueue.hpp中,其实现思路与32位操作系统一致,这里不再赘述。

键盘驱动的实现位于本章代码24/Keyboard.h24/Keyboard.hpp中,其实现思路与32位操作系统一致,这里不再赘述。

键盘接在IO APIC上,IO APIC使用索引寄存器和数据寄存器进行访问,其中,索引寄存器的地址是0xfec00000,数据寄存器的地址是0xfec00010。键盘在IO APIC中的索引是0x120x13,其中,0x12号寄存器用于设定中断向量号等信息,0x13号寄存器用于设定中断需要发送给哪个CPU。在我们的操作系统中,0x12号寄存器固定设为0x21,表示键盘中断的中断向量号是0x210x13号寄存器固定设为0x0,表示键盘中断发送给第一个CPU。

接下来,请看本章代码24/Int.hpp

第21\~24行,在IO APIC中安装键盘中断。

接下来,请看本章代码24/Int.s

intKeyboard函数是键盘中断处理函数。

第126\~127行,发送中断响应信号。

第129\~132行,从0x60端口读取键盘扫描码,然后调用键盘驱动函数。

第173行,在中断处理函数表中安装键盘中断处理函数。

接下来,请看本章代码24/Syscall.s

第5行,导入inputStr函数。

第63行,在系统调用表中安装inputStr函数,其系统调用号是1。

24.3 64位外壳程序

本章代码24/Shell.h24/Shell.hpp实现了外壳程序,其实现思路与32位操作系统一致,这里不再赘述。

24.4 编译与测试

本章代码24/Test.c继续测试0号与2号系统调用。新增的循环用于使任务的运行时间变长,以观察3特权级任务与外壳程序共存时的效果。

本章代码24/Kernel.c测试了外壳程序。


樱雨楼
26 声望1 粉丝

Stay Gold