预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共15页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

竭诚为您提供优质文档/双击可除linux系统调用实验报告篇一:linux系统调用实验报告西安邮电大学(计算机学院)课内实验报告实验名称:系统调用专业名称:软件工程班级:软件学生姓名:学号(8指导教师:xxxxx实验日期:20XX年5月31日一.实验目的及实验环境实验目的:1)了解系统调用,学习系统调用函数的使用;2)理解调用系统调用与直接调用内核函数的区别;实验环境:ubuntu115二.实验内容1)对比调用系统调用和直接调用内核函数的区别;2)跟踪系统调用的执行;三.实验原理1)系统调用系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。总的概括来讲,系统调用在系统中的主要用途无非以下几类:?控制硬件——系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件时用到的write/read调用。?设置系统状态或读取内核数据——因为系统调用是用户空间和内核的215唯一通讯手段[2]所以用户设置系统状态,比如开/关某项内核服务(设置某个内核变量),或读取内核数据都必须通过系统调用。比如getpgid、getpriority、setpriority、sethostname?进程管理——一系统调用接口是用来保证系统中进程能以多任务在虚拟内存环境下得以运行。比如fork、clone、execve、exit等第二,什么服务应该存在于内核;或者说什么功能应该实现在内核而不是在用户空间。这个问题并没有明确的答案,有些服务你可以选择在内核完成,也可以在用户空间完成。选择在内核完成通常基于以下考虑:?服务必须获得内核数据,比如一些服务必须获得中断或系统时间等内核数据。?从安全角度考虑,在内核中提供的服务相比用户空间提供的毫无疑问更安全,很难被非法访问到。?从效率考虑,在内核实现服务避免了和用户空间来回传递数据以及保护现场等步骤,因此效率往往要比在用户空间实现高许315多。比如,httpd等服务。?如果内核和用户空间都需要使用该服务,那么最好实现在内核空间,比如随机数产生。2)KDb使用将其编译成名为getpid的执行文件“gcc–ogetpid/getpid.c”,使用KDb来产看它进入内核后的执行路径。1、激活KDb(按下pause键,当然你必须已经给内核打了KDb补丁);设置内核断点“bpsys_getpid”;退出kdb“go”;然后执行./getpid。瞬间,进入内核调试状态,执行路径停止在断点sys_getpid处。2、在KDb>提示符下,执行bt命令观察堆栈,发现调用的嵌套路径,可以看到在sys_getpid是在内核函数system_call中被嵌套调用的。3、在KDb>提示符下,执行rd命令查看寄存器中的数值,可以看到eax中存放的getpid调用号——0x00000014(=20).4、在KDb>提示符下,执行ssb(或ss)命令跟踪内核代码执行路径,可以发现sys_getpid执行后,会返回system_call函数,然后接者转入ret_from_sys_call例程。(再往后还有些和调度有关其他例程,我们这里不说了它们了。)415结合用户空间的执行路径,该程序大致可归结为以下几个步骤:1、该程序调用libc库的封装函数getpid。该封装函数将系统调用号_nR_getpid(第20个)压入eAx寄存器,2、调用软中断int0x80进入内核。(以下进入内核态)3、在内核中首先执行system_call,接着执行根据系统调用号在调用表中查找到的对应的系统调用服务例程sys_getpid。4、执行sys_getpid服务例程。5、执行完毕后,转入syscall_exit_work例程,系统调用中返回。四.测试数据及运行结果正常测试数据(3组)及运行结果;五.总结系统调用是一层用户进入内核的接口,内核公开的内核函数——export出来的——可以使用命令ksyms或cat/proc/ksyms来查看。我已经初步认识到了内核的重要性,以后会更加努力的学习。六.附录:(电子版附源代码)return0;1)#include}#include2)/*跟踪系统调用*/#include515#include#includeintmain(void)#include{#includelongID1,ID2;#include/*直接调用内核函数调用系统调用}篇二:操作系统实验报告Lin