您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 重庆大学操作系统实验一(系统调用)
重庆大学学生实验报告实验课程名称操作系统原理开课实验室重庆大学DS1501学院软件工程年级2013专业班学生姓名学号开课时间2015至2016学年第一学期总成绩教师签名洪明坚重庆大学软件学院制《操作系统原理》实验报告开课实验室:DS15012016年1月5日学院软件学院年级、专业、班姓名成绩课程名称操作系统原理实验项目名称系统调用指导教师教师评语教师签名:年月日一、实验目的(软件需求文档)编写系统调用“time_ttime(time_t*loc)”a)功能描述i.返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc非NULL,则返回值也被填到loc所指向的内存位置b)数据类型time_t其实就是longi.typedeflongtime_t;二、实验原理(软件设计文档)1、在machdep.c中,编写系统调用的实现函数“time_tsys_time()”,计算用户需要的秒数。需要用到变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1月1日午夜的秒数变量g_timer_ticks记录了EPOS启动以来定时器中断的总次数宏定义HZ是定时器每秒钟中断的次数,即定时器中断的频率2、在kernel.h的后面,加入声明time_tsys_time();3、在syscall-nr.h中,定义系统调用的号码#defineSYSCALL_time20144、在machdep.c的函数syscall中,增加“caseSYSCALL_time”分支读取参数的值time_t*loc=*(time_t**)(ctx-esp+4);调用系统调用的实现函数sys_timectx-eax=sys_time();if(loc!=NULL)*loc=ctx-eax三、使用仪器、材料(软硬件开发环境)Notepad++expenv四、实验步骤(实现的过程)在下列四个文件内添加系统调用U1、在epos/app/syscall-wrapper.S末尾,加入汇编语言接口“WRAPPER(time)”U2、在epos/app/syscall.h中,加入C语言接口“time_ttime(time_t*loc);”U3、在epos/app/main.c中调用该系统调用,并打印出结果•要测试loc分别为NULL和非NULL两种情况machdep.c中添加函数//计算需要的秒数/*变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1月1日午夜的秒数变量g_timer_ticks,记录了EPOS启动以来定时器中断的总次数宏定义HZ,是定时器每秒钟中断的次数,即定时器中断的频率*/typedeflongtime_t;time_tsys_time(){returng_startup_time+g_timer_ticks/HZ;}以及//实验一系统调用//ctx-eax为系统调用的返回值//ctx-esp为用户栈的栈顶指针caseSYSCALL_time:{time_t*loc=*(time_t**)(ctx-esp+4);//一个参数ctx-eax=sys_time();if(loc!=NULL)*loc=ctx-eax;//统计的秒数存到loc所指内存中break;}主函数调用:time_t*ptime=NULL;printf(WhenlocisNULL\n);printf(Thetimefrom1970.1.1:%d\n,time(ptime));time_tm_time=0;printf(WhenlocisnotNULL\n);printf(Beforesyscall,thevalueof*loc:%d\n,m_time);printf(Thetimefrom1970.1.1:%d\n,time(&m_time));printf(Aftersyscall,thevalueof*loc:%d\n,m_time);五、实验结果及分析(实现的效果,包括屏幕截图、系统总体运行情况和测试情况等)
本文标题:重庆大学操作系统实验一(系统调用)
链接地址:https://www.777doc.com/doc-1964448 .html