logo资料库

操作系统系统调用课程设计.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
学生学号 课程成绩 课 程 设 计 课 程 名 称 操 作 系 统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 2011 — 2012 学年 第 1 学期
武汉理工大学计算机科学与技术学院《操作系统》课程设计 目录 课程设计任务书……………………………2 正文 一.设计题目与要求……………………….3 二.总的设计思想及系统平台、语言、工具 等…………………………………………..3 三.数据结构与模块说明(功能与流程图) ……………………………………………..3 四.源程序………………………………….6 五.运行结果与运行情况………………….6 六.调试记录……………………………….7 七.自我评析和总结……………………….9 八.评分表…………………………………10 1
武汉理工大学计算机科学与技术学院《操作系统》课程设计 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位:计算机科学与技术学院 题 目: 系统调用 初始条件: 理论:学习了《操作系统》课程,掌握对操作系统的了解。 实践:计算机技术系实验中心提供计算机及软件开发环境。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等 具体要求) 学习在 Linux 中产生一个系统调用以及怎样通过往 Linux 内核中增加一个新 函数从而在该内核空间中实现对用户空间的读写。这个函数的功能是返回当前的 系统时间。 时间安排: 2011 年 12 月 26 日-30 日 (第 17 周) 序号 1 2 3 阶段内容 所需时间 消化资料、系统设计 编程、调试 撰写报告 合计 1 天 3天 1 天 5天 指导教师签名: 2011 年 12 月 24 日 系主任(或责任教师)签名: 年 月 日 2
武汉理工大学计算机科学与技术学院《操作系统》课程设计 一. 设计题目与要求 设计题目:系统调用 学习在 Linux 中产生一个系统调用以及怎样通过往 Linux 内核中 增加一个新函数从而在该内核空间中实现对用户空间的读写。这个函 数的功能是返回当前的系统时间。 实验条件要求:每人一台 Linux 主机且有超级用户权限。 二. 总的设计思想及系统平台,语言,工具 等 1.设计思想:系统调用说的是操作系统提供给用户程序调用的一 组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系 统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统 打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得 系统时间或设置系统时间等。Linux 系统调用按照功能逻辑大致可分 为“进程控制”、“文件系统控制”、“系统控制”、“存管管理”、“网络 管理”、“socket 控制”、“用户管理”、“进程间通信”几类。 2.系统调用平台及语言: 本课程设计在 Linux 操作系统下,使用 c 语言完成.用到的工具有 GCC 编译器和 vi 编译器. 三. 数据结构与模块说明(功能与流程图) ctime(将时间和日期以字符串格式表示) 相关函数 time,asctime,gmtime,localtime 表头文件 #include 定义函数 char *ctime(const time_t *timep); 3
武汉理工大学计算机科学与技术学院《操作系统》课程设计 函数说明 ctime()将参数timep所指的time_t结构中的信息转换成真 实世界所 使用的时间日期表示方法,然后将结果以字符串形态返回。此函数 已经由时区转换成当地时间,字符串格式为“Wed Jun 30 21 :49 :08 1993\n”。若再调用相关的时间日期函数,此字符串可 能会被破坏。 返回值 返回一字符串表示目前当地的时间日期。 #include main() { time_t timep; time (&timep); printf(“%s”,ctime(&timep)); Untitled Document } gettimeofday(取得目前的时间) 相关函数 time,ctime,ftime,settimeofday 表头文件 #include #include 定义函数 int gettimeofday ( struct timeval * tv , struct timezone * tz ) 函数说明 gettimeofday()会把目前的时间有tv所指的结构返回,当 4
武汉理工大学计算机科学与技术学院《操作系统》课程设计 地时区的 信息则放到tz所指的结构中。 timeval结构定义为: struct timeval{ long tv_sec; /*秒*/ long tv_usec; /*微秒*/ }; timezone 结构定义为: struct timezone{ int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/ int tz_dsttime; /*日光节约时间的状态*/ }; 上述两个结构都定义在/usr/include/sys/time.h。 程序流程图 开始 产生系统调用 增加新函数 功能函数 5
武汉理工大学计算机科学与技术学院《操作系统》课程设计 放回当前时间 结束 四. 源程序 #include #include #include int main() { while(1) { char timebuf[100]; time_t t; time(&t); printf(“%s\n”,timebuf); fflush(stdout); sleep(1); } 日 %H: %M: %S",localtime(&t)); strftime(timebuf, sizeof(timebuf),"%Y 年 %m 月 %d return 0; } 五. 运行结果与运行情况 (1),输入 gedit time.c 命令,然后编写代码,如图: 6
武汉理工大学计算机科学与技术学院《操作系统》课程设计 (2)用 gcc 编译器进行编译连接,然后输入“./time”命令,运 行编译连接之后的程序。结果我们可以看到。此程序可以进行系 统调用来显示当前的日期和时间。 六. 调试记录 每个系统调用都是通过一个单一的入口点多路传入内核。eax 寄 存器用来标识应当调用的某个系统调用,这在 C 库中做了指定(来 自用户空间应用程序的每个调用)。当加载了系统的 C 库调用索引 和 参 数 时 , 就 会 调 用 一 个 软 件 中 断 (0x80 中 断 ) , 它 将 执 行 system_call 函数(通过中断处理程序),这个函数会按照 eax 内 容中的标识处理所有的系统调用。在经过几个简单测试之后,使用 system_call_table 和 eax 中包含的索引来执行真正的系统调 用了。从系统调用中返回后,最终执行 syscall_exit,并调用 resume_userspace 返回用户空间。然后继续在 C 库中执行,它 将返回到用户应用程序中。 1.向内核中添加新系统调用,需要执行 3 个基本步骤: (1)添加新函数。 7
分享到:
收藏