操作系统课设-系统调用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

学号:0121310870318课程设计2014——2015学年第2学期课程名称操作系统学院计算机科学与技术学院专业软件工程专业班级软件1302姓名熊旺指导教师刘军目录设计题目与要求…………………………………………………………31.总的设计思想及系统平台,语言,工具…………………………….31.1设计思想………………………………………………………….31.2系统调用平台及语言…………………………………………….31.3SCI……………………………………………………………….41.4系统调用的一般步骤…………………………………………….41.4.1.对用户内存进行读写………………………………………41.4.2.使用系统调用…………………………………………….52.数据结构与模块说明(功能与流程图)……………………………52.1数据结构………………………………………………………….52.1.1运行结果…………………………………………………….72.2系统流程图……………………………………………………….83.源程序………………………………………………………………..84.调试记录……………………………………………………………..95.自我评价与总结……………………………………………………..96.参考文献…………………………………………………………….10评分表………………………………………………………………….11设计题目:系统调用要求:学习在Linux中产生一个系统调用以及怎样通过往Linux内核中增加一个新函数从而在该内核空间中实现对用户空间的读写。这个函数的功能是返回当前的系统时间。实验条件要求:每人一台Linux主机且有超级用户权限。1.总的设计思想及系统平台,语言,工具操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(systemcall)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序。、Linux系统调用,包含了大部分常用系统调用和由系统调用派生出的的函数。1.1设计思想:系统调用说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置系统时间等。Linux系统调用按照功能逻辑大致可分为“进程控制”、“文件系统控制”、“系统控制”、“存管管理”、“网络管理”、“socket控制”、“用户管理”、“进程间通信”几类。1.2系统调用平台及语言:本课程设计在Linux操作系统下,使用c语言完成.用到的工具有GCC编译器和vi编译器.1.3SCILinux中系统调用的实现会根据不同的架构而有所变化,而且即使在某种给定的体架构上也会不同。例如,早期的x86处理器使用了中断机制从用户空间迁移到内核空间中,不过新的IA-32处理器则提供了一些指令对这种转换进行优化(使用sysenter和sysexit指令)。由于存在大量的方法,最终结果也非常复杂。每个系统调用都是通过一个单一的入口点多路传入内核。eax寄存器用来标识应当调用的某个系统调用,这在C库中做了指定(来自用户空间应用程序的每个调用)。当加载了系统的C库调用索引和参数时,就会调用一个软件中断(0x80中断),它将执行system_call函数(通过中断处理程序),这个函数会按照eax内容中的标识处理所有的系统调用。在经过几个简单测试之后,使用system_call_table和eax中包含的索引来执行真正的系统调用了。从系统调用中返回后,最终执行syscall_exit,并调用resume_userspace返回用户空间。然后继续在C库中执行,它将返回到用户应用程序中。1.4系统调用的一般步骤向内核中添加新系统调用,需要执行3个基本步骤:(1)添加新函数。(2)更新头文件。(3)针对这个新函数更新系统调用表。1.4.1.对用户内存进行读写Linux内核提供了几个函数,可以用来将系统调用参数移动到用户空间中,或从中移出。方法包括一些基本类型的简单函数(例如get_user或put_user)。要移动一块儿数据(如结构或数组),您可以使用另外一组函数:copy_from_user和copy_to_user。可以使用专门的调用移动以null结尾的字符串:strncpy_from_user和strlen_from_user。您也可以通过调用access_ok来测试用户空间指针是否有效。这些函数都是在linux/include/asm/uaccess.h中定义的。可以使用access_ok宏来验证给定操作的用户空间指针。这个函数有3个参数,分别是访问类型(VERIFY_READ或VERIFY_WRITE),指向用户空间内存块的指针,以及块的大小(单位为字节)。如果成功,这个函数就返回0:1.4.2使用系统调用内核已经使用新系统调用完成更新,接下来就从用户空间应用程序中使用这些系统调用需要执行的操作2.数据结构与模块说明(功能与流程图)2.1数据结构ctime(将时间和日期以字符串格式表示)相关函数time,asctime,gmtime表头文件#includetime.h,localtime定义函数char*ctime(consttime_t*timep);函数说明ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为“WedJun3021:49:081993\n”。若再调用相关的时间日期函数,此字符串可能会被破坏。返回值返回一字符串表示目前当地的时间日期。#includetime.hmain(){time_ttimep;time(&timep);printf(“%s”,ctime(&timep));UntitledDocument}gettimeofday(取得目前的时间)相关函数time,ctime,ftime,settimeofday表头文件#includesys/time.h#includeunistd.h定义函数intgettimeofday(structtimeval*tv,structtimezone*tz)函数说明gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz所指的结构中。timeval结构定义为:structtimeval{longtv_sec;/*秒*/longtv_usec;/*微秒*/};timezone结构定义为:structtimezone{inttz_minuteswest;/*和Greenwich时间差了多少分钟*/inttz_dsttime;/*日光节约时间的状态*/};上述两个结构都定义在/usr/include/sys/time.h。2.1.1运行结果(1),输入gedittime.c命令,然后编写代码,如图:(2)用gcc编译器进行编译连接,然后输入“./time”命令,运行编译连接之后的程序。结果我们可以看到。此程序可以进行系统调用来显示当前的日期和时间。2.2系统流程图图一系统流程图3.源程序#includestdio.h#includeunistd.h#includetime.hintmain(){while(1){chartimebuf[100];time_tt;time(&t);开始产生系统调用增加新函数功能函数放回当前时间结束strftime(timebuf,sizeof(timebuf),%Y年%m月%d日%H:%M:%S,localtime(&t));printf(“%s\n”,timebuf);fflush(stdout);sleep(1);}return0;}4.调试记录在实验中,每个系统调用都是通过一个单一的入口点多路传入内核。eax寄存器用来标识应当调用的某个系统调用,这在C库中做了指定(来自用户空间应用程序的每个调用)。当加载了系统的C库调用索引和参数时,就会调用一个软件中断(0x80中断),它将执行system_call函数(通过中断处理程序),这个函数会按照eax内容中的标识处理所有的系统调用。在经过几个简单测试之后,使用system_call_table和eax中包含的索引来执行真正的系统调用了。从系统调用中返回后,最终执行syscall_exit,并调用resume_userspace返回用户空间。然后继续在C库中执行,它将返回到用户应用程序中。5.自我评价与总结一直习惯于用windows操作系统的我,对于Linux系统也只是听说而已,以前从来没有真正地用过,对它的所有理解都是来自于书本和网上的资料,对于系统调用也是在操作系统课程上首次听说。但是为了完成本次课程设计,我不得不去装了一个Linux系统,尽管很不习惯,还是尽量慢慢去适应它。万事开头难,一点也不假。在用了几天Linux之后,发现其实它并没有想象中的那样可怕,相反,却发现它有着Windows所没有的优点,所以渐渐地也开始喜欢上Linux了。通过几天的摸索,虽然还有一些东西并不是很懂,但大体上掌握了系统调用的原理,同时对系统内核也有了更加深入的了解。以前一直觉得很神秘很深奥的操作系统,在自己的慢慢摸索下,已经露出了它深藏的一角。看着这几天的成果,颇有点自豪感,虽然这不是什么大的进展,但毕竟是自己辛辛苦苦摸索出来的。我觉得自己在做课程设计的过程中,最大的收获是自己亲手实践所带来的成就感。在接到题目时,大脑是一片空白,面对几乎一窍不通的系统调用,有种深深的恐惧,担心自己肯定不会做。然而实际是,当自己坐在电脑前紧张地查阅资料摸索系统的时候,心里没有了丝毫的恐惧感,因为动手的时候我才发现,原来并不是那么令人恐怖。只要愿意坚持做,总会有收获的。6.参考文献[1]AbrahamSilberschatz,《OperatingSystemConcepts(SixthEdition)(操作系统概念)影印第六版》[M],高等教育出版社,2004.4[2]张尧学,《计算机操作系统教程(第三版)》[M].清华大学出版社,2001.7[3]庞丽萍,《操作系统原理(第三版)》[M],华中科技大学出版社,2000.12[4]百度百科-系统调用本科生课程设计成绩评定表班级:软件1302姓名:熊旺学号:0121310870318序号评分项目满分实得分1学习态度认真、遵守纪律102设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规范性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格指导教师签名:2015年月日

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功