全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
前面把课程要求做了一个简单的翻译,从课程的要求说明中其实已经能够得到很多的提示。这个alarm的功能,其实有点类似回调函数的概念,触发的条件是中断计数器。但是,这个触发逻辑是软件实现的。
首先,得实现一个alarm的系统调用。有了之前date的添加经历,这个还是很容易的。
首先为了能够实现这样的触发机制,这里对进程的数据结构做了一定的修改。
接着,这里增加了一个初始化的处理。其实,这里也埋下了一个bug,那就是如果是这么初始化的话,只要是OS运行的时间足够长,这个alarm其实一定会触发。我考虑的方式是直接增加一个初始化的使能参数,而网络上参考了一下其他人的设计其实大部分设计都是采用了带有符号的数据类型初始化的时候给一个负值。我自己已经调试完了基本的功能,这个暂时不去改了。
接下来,增加这个宏定义。
与之对应的,增加这个系统调用的查询表。
增加汇编代码中的调用entry。
User.h中增加系统调用接口的声明。
接下来是系统调用的实现。这样,系统调用的基本框架就实现了。接下来,准备测试的用户代码。
为了能够生成alarmtest的系统应用,需要修改makefile。
Makefile中增加如上的配置。这样,最后生成的系统镜像中在文件系统中会带有这个可执行文件。这样,一个基本的框架就实现了,具体的alarm的触发还得继续设计。按照提示,这个需要在trap中做处理。
这里的判断条件信息在要求附加的提示信息中都已经给出来了,如果上面的alarmticks具有正负号的话,的确是能够保证这里不会出现误触发。
最后进行编译以及测试,测试的结果如上,alarm的信息已经出现了。