此次,对域结构进行了进一步完善,除了“子域”的概念没有出来外,域结构的最基本特性已经展现出来了。下面就对“域”的一些特点进行一下简单总结。然后利用“域”来重新实现键盘驱动程序。
一个域,包含以下几个基本要素:
1.生命值
2.(主动)动作函数 //action 函数
3.(被动)动作函数 //on 事件(函数)
4.子域 //未实现
域结构的操作(相当于域结构的系统调用函数):
1.运行域结构 //yu.c 中的run()函数
(1)执行动作双向循环链表中的一个动作
(2)执行.(被动)动作函数(on事件)列表里的所有函数
(3)指向下一个(主动)动作
2.加载(主动)动作函数 //向动作双向循环链表添加一个动作,见yu.c 中的AddAction(struct action_s *newAction)函数
3.移除(主动)动作函数 //从动作双向循环链表移除一个动作,见yu.c 中的DelAction(struct action_s *delAction)函数
4.注册一个on 事件 //可重复性的向on事件列表添加函数(p.s:(主动)动作函数具有唯一性)
域结构运行特点:
动作周期:执行一遍run()函数,形成一个动作周期,在这个过程里,只有一个(主动)动作和以及执行此周期前的所有on 事件被执行,在此过程中,向on事件列表添加的函数,会在下一个动作周期执行。
域周期:动作双向循环链表中所有的(主动)动作都被执行了一遍,形成一个域周期,在一个域周期内一个(主动)动作最多执行一遍,若在一个域周期内添加了新的(主动)动作,将会在周期结束时,或者说下各个域周期开始时被执行(若没有在此域周期内又被移除掉的话)。
之所以要花费精力来将“域”的情况进行如上总结,是因为我以后将会完全利用域结构来实现这个操作系统,若不理解域的特性,就无法理解程序的内在逻辑。
此次实现键盘驱动,我将键盘的字符输入功能和键盘作为控制器的控制功能分离开来,利用域结构的结构特点分别实现。主要实现的是将所有可显示字符的提取部分,控制部分,根据当前需要简单实现了几个。其他的控制功能,可以随时随意的添加,而不会对以实现部分有什么影响。
为了便于理解,先使用“域语言”伪代码描述一遍:
除了键盘驱动程序以外,此次,还对显示器(视频)的端口进行了简单的操控,实现上下移动显示区域,以防止屏幕显示超出时,看不到新新的显示内容。
在下一步里,将进一步完善它,并争取实现一个简单的tty。
下面是此次新添加或有过修改的代码。
在print.c中添加了一个换行函数,函数代码如下
code:kernel.c(改)
code:yu.h(改)
code:yu.c(改)
code:keyboard.h(改)
code:keyboard.c(改)
code:console.h(新)
code:console.c(新)