重庆大学操作系统实验一(系统调用)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆大学
学生实验报告
实验课程名称操作系统原理
开课实验室重庆大学DS1501
学院软件工程年级2013 专业班
学生姓名学号
开课时间 2015 至 2016 学年第一学期
重庆大学软件学院制
《操作系统原理》实验报告
三、使用仪器、材料(软硬件开发环境)
Notepad++
expenv
四、实验步骤(实现的过程)
在下列四个文件内添加系统调用
U1、在epos/app/syscall-wrapper.S末尾,加入汇编语言接口“WRAPPER(time)”
U2、在epos/app/syscall.h中,加入C语言接口“time_t time(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,是定时器每秒钟中断的次数,即定时器中断的频率*/
typedeflong time_t;
time_t sys_time(){
return g_startup_time+g_timer_ticks/HZ;
}
以及
//实验一系统调用
//ctx->eax为系统调用的返回值
//ctx->esp为用户栈的栈顶指针
case SYSCALL_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("When loc is NULL\n");
printf("The time from 1970.1.1:%d\n",time(ptime));
time_t m_time=0;
printf("When loc is not NULL\n");
printf("Before syscall,the value of *loc:%d\n",m_time);
printf("The time from 1970.1.1:%d\n",time(&m_time));
printf("After syscall,the value of *loc :%d\n",m_time);
五、实验结果及分析(实现的效果,包括屏幕截图、系统总体运行情况和测试情况等)