广东海洋大学学生实验报告书(学生用表)
一、实验目的(experimental goal)
掌握时钟调用的实现原理。
二、开发环境(development environment)
硬件(hardware):(cpu) amd athlon(tm)64x2 5600+ 2.9ghz
内存(memory):896mb
操作系统 (operating system):microsoft windows xp
软件(software):minix3.1
三、实验内容(experimental content)
进程管理的系统调用的使用。
四、实验要求。
1、掌握时钟的实现原理。
2、时钟实现的具体步骤。
3、实验完成后总结实验心得。
五、详细分析时钟显示设计及实现。
因为要实现时钟调用,首先就要获得系统的时钟时间,接着是对得到的时间进行显示操作,实现在屏幕右上角的显示。因而为了达到预期效果则应该设立两个新的函数,一个就是所说的获得时间功能的getboottime函数,另一个就是设置显示的函数setboottime函数。
1.在实现前我们要定义个全局变量,获得时间 /usr/src/kernel/
文件。定义extern time_t boottime,time_t是指boottime的计时单位是秒。如图。
2.常量定义,vi /usr/src/include/minix/文件,定义。
#define t_boottime m4_l1 消息常量。
#define sys_setboottime (kernel_call + 28) 核心调用的编号。
#define sys_getboottime (kernel_call + 29)
将nr_sys_calls改为30,因为系统只有28个,现在加了2个,所以变为30
如图。3. 在文件/usr/src/kernel/system/do_中添加do_setboottime函数和do_getboottime函数。
处理系统sys_setboottime()函数的调用,在消息中取得t_boottime的值付给boottime
处理系统sys_getboottime()函数调用,取得消息变量t_boottime的值给boottime.
4.添加消息映射,作用是,把所接到的消息转换成函数映射。在/usr/src/kernel
目录下打开在initialize函数中添加消息映射。
map(sys_setboottime, do_setboottime)
map(sys_getboottime, do_getboottime)
当收到sys_setboottime消息的时候调用do_setboottime函数。
当收到sys_getboottime消息的时候调用do_getboottime函数如图。
5,.在当前目录下在文件的条件编译中,将两个核心调用映射到do_unused
如图。当use_times定义为0的话指系统不需要执行时间管理,反之为 1的话执行。
所以如果不行use_times,就把do_setboottime和do_getboottime映射成空函数do_unused.
6. 在当前目录下把中将sys_getboottime调用权赋值给drv_c,使得tty具备调用sys_getboottime的权限。
如图:其中sys_getboottime的调用权限在pm_c中,但由于语句上说除了后面那些调用权限不可外都可以,所以不必加入它的调用权限,而sys_setboottime的权限在drv_c中,其语句是所能执行后面的权限,固要加入。
/usr/src/kernel/的时钟中断处理函数clock_handler,使其每隔1秒向终端驱动程序发送消息。
1、static int c;定义静态整数c用来对中断次数的计数。
2、每次时钟中断时更新c的值;
3、当c>=hz时,将c清零,并向终端驱动程序发送消息。其中hz的值为60,所以中断60次就是1秒。
如图:终端驱动设置tty包括了光标设置等操作。
8. 在函数库中为新增加的两个核心调用添加接口函数。
1、/usr/src/lib/syslib/sys_ sys_setboottime(),供pm程序使用;更新makefile文件,自动编译sys_setboottime函数。
准备个消息类型m,从消息中获取bottime,返回taskecall,返回sys_setboottime和消息缓冲区的地址m.
2、同理在r/src/include/minix/ sys_setboottime, (time_t boottime));
准备个消息类型m和常量s ,从消息中获取bottime,返回taskecall,返回sys_getboottime和消息缓冲区的地址m. *boottime获得消息时间。返回常量s.
3、/usr/src/lib/sysutil/供终端驱动程序使用;更新makefile文件,自动编译sys_getboottime函数。
4、/usr/src/lib/syslib/sys_ :setboottime()供终端驱动程序使用;更新makefile文件,自动编译sys_se tboottime函数。
提示文件出于最新状态。
5、重新构造函数库。
(1)cd /usr/src
(2)make includes #install include files from src
(3)make libraries #compile and install libraries
把/usr/src/includes子目录复制到/usr/include
生成正式函数库。
四:修改终端驱动程序,响应时钟中断处理函数的消息、在屏幕的固定位置显示时钟。
1、 修改/usr/src/drivers/tty/当接收到中断来自于clock的消息时,调用disp_clock()函数显示时钟。
对消息进行判断。,如果来自于时钟消息的话就调用disp_clock函数来显示时间日期。
2、修改添加disp_clock和do_display函数的原型。
3.在当前目录下修改添加disp_clock函数。因disp_clock要被调用,所以disp_clock不能声明为private;同样,因do_display要被调用,所以do_display不能声明为private。
其作用是设置光标,然后显示时间,调用完后,恢复光标的位置。
之后退出,在/usr/src/tools目录下发出make image命令,构造成功后复制映像文件到。
boot/test,发出reboot命令。
4、建立一个新文件其中的do_display函数实现时钟显示。
5、更新。depend文件和makefile文件,实现的自动编译。
打开。depent文件,添加自动编译刚才创建的文件。
打开makefile文件,进行如图的添加。存盘退出。
五、修改/usr/src/servers/pm/在do_stime()函数中加入对sys_setboottime函数的调用。
六、生成并应用新的minix映像文件。
发出make image命令,然后cp image 到/boot/clock
然后shutdown,进行如图操作。
之后就有结果了。
如图。心得体会:
如此浩瀚的工程如能成功实属不易,跟随老师的脚步,一步步的做来,但结果还是差强人意,不如意的地方比比皆是,是故,操作系统,其理奥,其博深,为其深究不为过。
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....