重庆大学操作系统实验一(系统调用)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

五、实验结果及分析(实现的效果,包括屏幕截图、系统总体运行情况和测试情况等)

相关文档
最新文档