ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:21.11KB ,
资源ID:2955470      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2955470.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux系统调用实验报告.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

linux系统调用实验报告.docx

1、linux系统调用实验报告竭诚为您提供优质文档/双击可除linux系统调用实验报告篇一:linux系统调用实验报告西安邮电大学(计算机学院)课内实验报告实验名称:系统调用专业名称:软件工程班级:软件学生姓名:学号(8指导教师:xxxxx实验日期:20XX年5月31日一.实验目的及实验环境实验目的:1)了解系统调用,学习系统调用函数的使用;2)理解调用系统调用与直接调用内核函数的区别;实验环境:ubuntu二.实验内容1)对比调用系统调用和直接调用内核函数的区别;2)跟踪系统调用的执行;三实验原理1)系统调用系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过

2、这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。总的概括来讲,系统调用在系统中的主要用途无非以下几类:?控制硬件系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件时用到的write/read调用。?设置系统状态或读取内核数据因为系统调用是用户空间和内核的唯一通讯手段2所以用户设置系统状态,比如开/关某项内核

3、服务(设置某个内核变量),或读取内核数据都必须通过系统调用。比如getpgid、getpriority、setpriority、sethostname?进程管理一系统调用接口是用来保证系统中进程能以多任务在虚拟内存环境下得以运行。比如fork、clone、execve、exit等第二,什么服务应该存在于内核;或者说什么功能应该实现在内核而不是在用户空间。这个问题并没有明确的答案,有些服务你可以选择在内核完成,也可以在用户空间完成。选择在内核完成通常基于以下考虑:?服务必须获得内核数据,比如一些服务必须获得中断或系统时间等内核数据。?从安全角度考虑,在内核中提供的服务相比用户空间提供的毫无疑问更

4、安全,很难被非法访问到。?从效率考虑,在内核实现服务避免了和用户空间来回传递数据以及保护现场等步骤,因此效率往往要比在用户空间实现高许多。比如,httpd等服务。?如果内核和用户空间都需要使用该服务,那么最好实现在内核空间,比如随机数产生。2)KDb使用将其编译成名为getpid的执行文件“gccogetpid/getpid.c”,使用KDb来产看它进入内核后的执行路径。1、激活KDb(按下pause键,当然你必须已经给内核打了KDb补丁);设置内核断点“bpsys_getpid”;退出kdb“go”;然后执行./getpid。瞬间,进入内核调试状态,执行路径停止在断点sys_getpid处。

5、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例程。(再往后还有些和调度有关其他例程,我们这里不说了它们了。)结合用户空间的执行路径,该程序大致可归结为以下几个步骤:1、该程序调用libc库的

6、封装函数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来查看。我已经初步认识到了内

7、核的重要性,以后会更加努力的学习。六附录:(电子版附源代码)return0;1)#include#include2)/*跟踪系统调用*/#include#include#includeintmain(void)#include#includelongID1,ID2;#include/*直接调用内核函数*/intmain(void)ID1=syscall(sYs_getpid);printf(syscall(sYs_getpid)=%ldnlongID;,ID1);ID=getpid();/*调用系统调用*/printf(getpid()=%ldn,ID);ID2=getpid();return

8、0;printf(getpid()=%ldn,ID2);篇二:操作系统实验报告Linux下的系统调用操作系统实验报告-Linux下的系统调用计算机10-4赵俊楠10081407实验目的:实现多个系统调用实验实验内容:添加简单系统调用、添加随机抽牌系统调、用模块添加系统调用实验步骤:(我是将三个系统调用添加完毕后一起编译的)1.在usr/src/linux-2.4/include/asmi386/unistd.h中添加#define_nR_print_info259和#define_nR_rank2602.在usr/src/linux-2.4/arch/i386/kernel/entry.s中添

9、加.longsYmboL_nAme(sys_print_info)和.longsYmboL_nAme(sys_rank);3.在usr/src/linux-2.4/kernel中添加asmlinkageintsys_rank(intvalue,intsuit)if(value=1)return(int)(4*13+suit);elsereturn(int)(4*(value-1)+suit);和asmlinkageintsys_print_info(inttestflag)printk(KeRn_emeRgItsmysyscallfunction!n);return0;4.在usr/src/l

10、inux-2.4/kernel/ksyms中添加#ifndef_mips_expoRT_sYmboL(sys_call_table);#endif至此,三个实验的系统调用添加完毕下面开始编译内核。5.makecleanmakemrpropermakeoldconfigmakedepmakebzImagemakemodulesmakemodules_installmakeinstall在添加系统调用时候一定要专心、仔细,否则在编译的时候会出现错误,改起来很麻烦!6.重启Linux后,显示界面如下(没有改内核版本号)7.进入新内核后不要忘了将#define_nR_print_info260添加到中

11、8.然后编写三个测试程序分别测试新的系统调用结果如下图:关于test_print_info259和#define_nR_rank关于card关于call和test_call实验总结:本次实验的内容涉及到Linux的系统调用。所谓系统调用,即操作系统为应用程序提供的与内核进行交互的一组接口。通过此接口,用户态下的应用程序可以转化为内核态,同时调用相应的内核函数运行,从而可以实现应用程序和系统内核的交互。通过三个实验对Linux的系统调用原理进行验证。第一个实验是简单的系统调用的添加;第二个实验则是丰富了系统调用的功能,实现了一个抽牌的功能,而不仅仅是打印语句;第三个实验则是将编译内核改进成了内核

12、模块的编译,这样在不重启调用编译后内核的前提下插入编译的系统调用内核模块,即可以调用新的系统功能。对于这次实验,我觉得最大的困难在于如何编译内核。开始的时候只知道makeclean和makedep,却在makebzImage的时候出现了一堆选项让选y/n/m,后来才知道只要打makeoldconfig按原来的配置就可以了。然后是在makebzImage的时候出现了两个错误:一个是字母打错了,一个是位置加错了。又回去改,重新make。makemodules花费的时间最长,之后还算很顺利,只不过重启之后系统又自动进入Redhat2.4.20-8我不知道,在执行test_print-info的时候显

13、示i=-1,syscallfailed!,以为添加系统调用失败了!后来才发现是进错了地方。虽然对于这次实验,大多数内容都已经给出了,但是还是花了我很多时间。过程很纠结,还好最后成功了!最后,感谢老师在课上关于系统调用知识的讲解,有助于我对本次实验更好的理解。篇三:Linux系统调用实现机制实验报告-内核安装详解Linux系统调用实现机制实验报告实验目的:熟悉Linux系统调用过程,掌握系统调用的基本原理并在实验中实现系统调用的添加。实验所需软件:实验平台:Vmwareworkstation;系统环境:RedhatLinux9.0;传输工具:Ftpserver(servusetup);实验过程:

14、一、实验环境的搭建(一)在window下安装虚拟机Vmwareworkstation;(二)在虚拟机上安装Redhat9.0系统;(三)在window下安装Ftpserver,实现Linux与windows文件共享。1.Ftp服务器的配置打开Ftpserver,在管理控制台中选择新建域,系统会弹出配置域向导的对话框,这里按要求填入相应信息,即可配置成功一个ftp服务器。步骤1要求用户填入域的名称和说明,名称必须填写,说明可以不填。例如:在名称中输入Linux实验,选择下一步,便进入到域向导的步骤2。步骤2是服务器访问协议和端口的配置,默认即可,点击下一步进入步骤3。步骤3是Ip地址的配置,输入

15、windows主机的Ip地址(202.112.147.176)。确认无误后,点击完成。接下来要做的就是为域添加用户,根据添加用户向导,逐个填写用户名,密码,根目录(即共享的文件目录)以及访问权限。本次实验的配置为:tml(用户名),密码为空,e:安全操作系统实验材料(存放config-2.4.18formp.txt和linux-2.4.18.tar.gz的目录),完全访问(访问权限)。到此,服务器的配置已经完成。2.在Linux下访问服务器,并下载文件启动Vmware中的Redhat9.0系统,打开终端控制台,进入到/home/tml目录下(接下来就是要把Ftp服务器的共享文件下载到此目录下)

16、。1)通过命令ifconfig设置虚拟机Ip地址,具体为在命令行中输入:ifconfigeth0202.112.147.175(与服务器同一个段);2)接下来便可访问ftp服务器,在linux命令行下输入:ftp202.112.147.176;3)服务器询问你用户名和口令,分别输入tml(密码为空)待认证通过即可;用get命令下载文件,getconfig-2.4.18formp.txtconfig-2.4.18formp.txt(下载文件config-2.4.18formp.txt到/home/tml目录),getlinux-2.4.18.tar.gzlinux-2.4.18.tar.gz。以

17、上完成了通过FTp服务器实现windows与Linux系统资源共享的工作,在Linux系统下获得了实验必备的原材料Linux-2.4.18.tar.gz和config-2.4.18formp.txt,只是完成的实验的第一步。二、Linux内核编译、配置与调试以下的实验步骤都是在Vmwareworkstation虚拟机和RedhatLinuxV9.0系统操作环境中进行。1.内核配置与编译1)使用命令tarzxf解压缩Linux内核源代码压缩文件linux-2.4.18.tar.gz,并将解压缩(:linux系统调用实验报告)后生成的目录linux拷贝一份,并重新命名为linux-2.4.18(放

18、在/home目录下)。2)在/home目录下,利用命令mv/tml/config-2.4.18formp.txt/linux-2.4.18/.config将位于Linux内核源代码顶层目录的Linux内核缺省配置文件.config替换为实验用内核配置文件。3)进入Linux内核源代码顶层目录linux-2.4.18,运行如下命令序列配置和编译Linux系统内核及其模块:2.内核安装与测试为使虚拟机系统基于上面生成的Linux内核启动,需要做一下几件事:将Linux内核映像文件bzImage(根文件系统);将系统映射文件system.map拷贝和安装到启动分区及目录/boot下;同时,应在系统启

19、动加载程序gRub配置文件中添加关于该内核的启动配置项。注意:本步骤要求用户身份为超级管理员即根用户root,具体的操作如下:1)将目录/home/linux-2.4.18/arch/i386/boot/下的映像文件拷贝到/boot目录下,即在linux-2.4.18目录下执行命令:2)拷贝和安装Linux系统映射文件system.map,并创建其与系统映射文件system.map之间的符号链接,在boot目录下执行以下命令:3)修改系统启动加载程序配置文件grub.conf,在目录/boot/grub/下。在配置文件中添加关于Linux2.4.18内核的启动配置项:4)在Linux2.4.1

20、8目录下执行命令makemodules_install,安装可动态加载的内核模块。安装的内容位于/lib/modules/2.4.18目录下。5)执行命令reboot重启系统,并便可以选择自制Linux内核系统(如下图)。6)接下来,便可执行命令dmesg查看启动过程输出信息,详细内容参见附录一。三、Linux系统调用添加与实现1.内核增加系统调用1)根据题目要求,要在系统中增加一条系统调用,其作用是获取特定进程标识符pID所对应的资源使用情况,包括用户态或内核态的执行时间(以秒和微秒为单位)、无需或需要物理输入输出操作的页面错误次数、进程置换出内存的次数等。2)此系统调用是Linux内核系统

21、调用getrusage()的一个变种,所以在添加之前先阅读和分析getrusage()及sys_getrusage()相关源代码,在目录/home/linux-2.4.18/linux/kernel下的sys.c文件中,详细见附录二。3)题目为我们提供好了新添加系统调用的名称get_process_usage,其函数原型为:4)根据题目条件,结构体structtml_rusage的可定义为:.2.分析getrusage()和sys_getrusage()的源代码1)函数getrusage()的作用是获取系统资源使用情况。2)数据结构rusage在头文件resource.h中定义,详见附录三。3)sys_getrusage()只是调用了内核函数getrusage(),是内核提供给用户的接口。3.新增系统调用并编写应用程序调用该系统1)定义数据结构tml_rusage,定义在目录/home/linux-2.4.18/include/linux的resource.h中。2)在添加sys.c中添加函数get_process_usage()和系统调用函数sys_get_process_usage()的代码;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2