操作系统课程设计.docx
- 文档编号:9359013
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:18
- 大小:195.95KB
操作系统课程设计.docx
《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
操作系统课程设计
GDOU-B-11-112
广东海洋大学学生实验报告书(学生用表)
实验名称
时钟的显示设计和实现
课程名称
操作系统
课程号
S1620034-0
学院(系)
信息学院
专业
计算机科学与技术
班级
1072
学生姓名
王旭浩
杨苏潮
叶韶文
学号
200711621230
200711621233
200711621234
实验地点
科技楼423
实验日期
一、实验目的(Experimentalgoal)
掌握时钟调用的实现原理。
二、开发环境(Developmentenvironment)
硬件(Hardware):
(CPU)AMDAthlon(tm)64X25600+2.9GHz
内存(Memory):
896MB
操作系统(Operatingsystem):
MicrosoftWindowsXP
软件(software):
minix3.1
三、实验内容(Experimentalcontent)
进程管理的系统调用的使用。
四、实验要求
1、掌握时钟的实现原理。
2、时钟实现的具体步骤。
3、实验完成后总结实验心得。
五、详细分析时钟显示设计及实现
因为要实现时钟调用,首先就要获得系统的时钟时间,接着是对得到的时间进行显示操作,实现在屏幕右上角的显示.因而为了达到预期效果则应该设立两个新的函数,一个就是所说的获得时间功能的getboottime函数,另一个就是设置显示的函数setboottime函数.
1.在实现前我们要定义个全局变量,获得时间boottime.vi/usr/src/kernel/glo.h
文件.定义EXTERNtime_tboottime,time_t是指boottime的计时单位是秒.如图
2.常量定义,vi/usr/src/include/minix/com.h文件,定义
#defineT_BOOTTIMEm4_l1消息常量
#defineSYS_SETBOOTTIME(KERNEL_CALL+28)核心调用的编号
#defineSYS_GETBOOTTIME(KERNEL_CALL+29)
将NR_SYS_CALLS改为30,因为系统只有28个,现在加了2个,所以变为30
如图
3.在文件/usr/src/kernel/system/do_times.c中添加do_setboottime函数和do_getboottime函数
处理系统sys_setboottime()函数的调用,在消息中取得T_BOOTTIME的值付给boottime
处理系统sys_getboottime()函数调用,取得消息变量T_BOOTTIME的值给boottime.
4.添加消息映射,作用是,把所接到的消息转换成函数映射.在/usr/src/kernel
目录下打开system.c在initialize函数中添加消息映射
MAP(SYS_SETBOOTTIME,do_setboottime)
MAP(SYS_GETBOOTTIME,do_getboottime)
当收到SYS_SETBOOTTIME消息的时候调用do_setboottime函数
当收到SYS_GETBOOTTIME消息的时候调用do_getboottime函数如图
5,.在当前目录下在system.h文件的条件编译中,将两个核心调用映射到do_unused
如图
当USE_TIMES定义为0的话指系统不需要执行时间管理,反之为1的话执行.
所以如果不行USE_TIMES,就把do_setboottime和do_getboottime映射成空函数do_unused.
6.在当前目录下把table.c中将SYS_GETBOOTTIME调用权赋值给DRV_C,使得TTY具备调用sys_getboottime的权限.
如图:
其中SYS_GETBOOTTIME的调用权限在PM_C中,但由于语句上说除了后面那些调用权限不可外都可以,所以不必加入它的调用权限,而SYS_SETBOOTTIME的权限在DRV_C中,其语句是所能执行后面的权限,固要加入.
7.vi/usr/src/kernel/clock.c的时钟中断处理函数clock_handler,使其每隔1秒向终端驱动程序发送消息
1、staticintc;定义静态整数c用来对中断次数的计数
2、每次时钟中断时更新c的值;
3、当c>=HZ时,将c清零,并向终端驱动程序发送消息。
其中HZ的值为60,所以中断60次就是1秒.
如图:
终端驱动设置TTY包括了光标设置等操作
8.在函数库中为新增加的两个核心调用添加接口函数
1、/usr/src/lib/syslib/sys_setboottime.c:
sys_setboottime(),供PM程序使用;更新Makefile文件,自动编译sys_setboottime函数。
准备个消息类型m,从消息中获取bottime,返回taskecall,返回SYS_SETBOOTTIME和消息缓冲区的地址m.
2、同理在r/src/include/minix/syslib.h:
_PROTOTYPE(intsys_setboottime,(time_tboottime));
准备个消息类型m和常量s,从消息中获取bottime,返回taskecall,返回SYS_GETBOOTTIME和消息缓冲区的地址m.*boottime获得消息时间.返回常量s.
3、/usr/src/lib/sysutil/getboottime.c:
getboottime(),供终端驱动程序使用;更新Makefile文件,自动编译sys_getboottime函数。
4、/usr/src/lib/syslib/sys_setboottime.c:
setboottime()供终端驱动程序使用;更新Makefile文件,自动编译sys_setboottime函数。
提示文件出于最新状态.
5、重新构造函数库
(1)cd/usr/src
(2)makeincludes#installincludefilesfromsrc
(3)makelibraries#compileandinstalllibraries
把/usr/src/includes子目录复制到/usr/include
生成正式函数库
四:
修改终端驱动程序,响应时钟中断处理函数的消息、在屏幕的固定位置显示时钟
1、修改/usr/src/drivers/tty/tty.c,当接收到中断来自于CLOCK的消息时,调用disp_clock()函数显示时钟
对消息进行判断.,如果来自于时钟消息的话就调用disp_clock函数来显示时间日期.
2、修改tty.h,添加disp_clock和do_display函数的原型
3.在当前目录下修改console.c,添加disp_clock函数。
因disp_clock要被tty.c调用,所以disp_clock不能声明为PRIVATE;同样,因do_display要被console.c调用,所以do_display不能声明为PRIVATE。
其作用是设置光标,然后显示时间,调用完后,恢复光标的位置.
之后退出,在/usr/src/tools目录下发出makeimage命令,构造成功后复制映像文件到
/boot/test,发出reboot命令.
4、建立一个新文件Seconds2Datetime.c,其中的do_display函数实现时钟显示。
5、更新.depend文件和Makefile文件,实现Seconds2Datetime.c的自动编译。
打开.depent文件,添加自动编译刚才创建的文件
打开Makefile文件,进行如图的添加.存盘退出.
五、修改/usr/src/servers/pm/time.c,在do_stime()函数中加入对sys_setboottime函数的调用。
六、生成并应用新的minix映像文件
发出makeimage命令,然后cpimage到/boot/clock
然后shutdown,进行如图操作
之后就有结果了
如图
心得体会:
如此浩瀚的工程如能成功实属不易,跟随老师的脚步,一步步的做来,但结果还是差强人意,不如意的地方比比皆是,是故,操作系统,其理奥,其博深,为其深究不为过.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计