还剩2页未读,继续阅读
文本内容:
重庆大学学生实验报告实验课程名称____________操作系统原理开课实验室______________DS1501学生姓名学号20131802胡其友学院软件学院年级件学专业班软件工程班2开课时间至学年第一学期20152016总成绩教师签名洪明坚软件学院制《操作系统原理》实验报告开课实验室年月日学院软件学院年级、专业、班2013级软件工姓名胡其友成绩程2班课程实验项目操作系统原理指导教师洪明坚名称名称教师教师签名洪明坚评语年月日
1.实验目的•进入实验环境-双击expenv/setvars.bat•检出checkout EPOS的源代码-svn checkout.cqu.edu.cn/svn/epos•编译及运行-cd epos/app-make run•清除所有的临时文件-make clean调试♦-make debug•在“Bochs EnhancedDebugger中,输入quit”退出调试-调试指令,请看附录A
2.实验内容•编写系统调用time*loc”-功能描述•返回从格林尼治时间1970年1月1日午夜起所经过的秒数如果指针loc非NULL,则返回值也被填到loc所指向的内存位置-数据类型其实就是long•typedef longtime_t;
3.实验步骤•Kernel space-KI、在machdep.c中,编写系统调用的实现函数sys_time”,计算用秒数需要用到•变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年午夜的秒数•变量g_timer_ticks-g_timer_ticks记录了EPOS启动以来定时器中断的总次数•宏定义HZ-HZ是定时器每秒钟中断的次数,即定时器中断的频率-K
2、在kernel,h的后面,加入声明sys_time•Kernel space-K
3、在syscall-nr.h中,定义系统调用的号码•ttdefine SYSCALL_time2014-K4在machdep.c的函数syscall中,增加“case SYSCALL_timen分支•读取参数的值-time t*loc=*timet**ctx-〉esp+4;•调用系统调用的实现函数sys_time-ctx-eax=sys_time;-ifloc!=NULL»*loc=ctx-eax;•User space-UI、在epos/app/syscal1-wrapper.S末尾,加入汇编语言接口u WRAPPERtime-U2在epos/app/syscall.h中,加入C语言接口timetime_t*loc;”-U
3、在epos/app/main.c中调用该系统调用,并打印出结果•要测试loc分别为NULL和非NULL两种情况
4.实验报告long timel,time2;timel=timeNULL;timetime2;printfn\ntimeNULL:%d\n\time1;printf\ntime2:%d\nn,time2;♦QEMUMachine ViewBootingEPOSFilesystem typeis fat,partition type0x06[Multiboot-kludge,loadaddr=0x110000,text-and-data=0xdlc0,bss=0x8674,entr=0x110000]e1come toEPOS opyrightC Z005-Z013MingJian HonghongmingjianPgmai
1.com11rights reserved.vailable memory0x0013b000-0x003df000676pagesask ttO:Initializing IDEcontroller...Doneask ttO:Initializing FATfile system...Done asktt0Loading a.out...Doneask tt0:Creating first usertask...imeNULL145Z343588imeZ145Z343588。