学生学号
课程成绩
课 程 设 计
课 程 名 称
操 作 系 统
开 课 学 院
计算机科学与技术学院
指导老师姓名
学 生 姓 名
学生专业班级
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