- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华南理工大学《操作系统》
大作业报告
题目:高级操作系统与分布式系统大作业
学 院 计算机科学与工程
专 业 计算机科学与技术 (全英创新班)
学生姓名 xxxxxx
学生学号 2012********
联系方式 Tel)/651476895(QQ)_
指导教师 吴一民
课程编号 S0812011
课程学分 2 分
起始日期 2016年1月11 日
实验概述
【实验目的及要求】
内核版本要求:
Linux-2.6.18
实验任务:
1.修改system_call (),使内核能够记录每一个系统调用被使用的次数。同时,为了使应用
程序能够查询到这些数据,本实验要求实现两个系统调用,一个供应用程序来查询某个特
定系统调用被使用的次数,另一个系统调用将系统调用计数清零。编制一个用户态程序调
用你所增加的这两个系统调用,统计在一段时间内各系统调用被调用的次数。
2.修改系统的缺页异常处理程序使之能够记录系统缺页次数和当前进程的缺页次数。同样,
本实验也要求实现两个系统调用,一个供应用程序查询缺页次数,另一个系统调用将缺页
计数清零。编制一个用户态程序你所增加的这两个系统调用,统计在一段时间内你的进程
缺页的次数。
【实验环境】
操作系统:Centos-5.8-i386(内核版本2.6.18-308)
编译的内核: 2.6.18
虚拟机:VMwareWorkstation 12.1.0.2487
【虚拟机账号密码】★★★★
账号:root
密码:aaasss
实验一
实验内容
【实验原理】
linux系统调用是linux在其内核里都有一些内建的函数,这些函数可以用来完成一些系统级别的功能。
这些函数代表了从用户空间到内核空间的一种转换,例如在用户空间调用open函数,则会在内核空间调用
sys_open。Linux中每个系统调用都有相应的系统调用号,这样,通过这个独一无二的号就可以关联系统调
用。当用户空间的进程执行一个系统调用的时候,这个系统调用号就被用来指明到底是要执行哪个系统调
用。进程不会提及系统调用的名称。在这次试验采用的linux-2.6.18内核中共有317个系统调用,他们储存在
sys_call_table的数据结构当中,这个数据结构在此内核中的entry.S中定义。sys_call_table是一张由指向实
现各种系统调用的内核函数的函数指针组成的表。
在用户空间无法直接调用系统调用来执行内核代码,所以需要通过软中断的方式来实现系统调用。通
过int $0x80指令产生系统软中断,触发异常使得系统切换到内核态执行128号异常处理程序,调用
system_call()函数。但是仅仅陷入内核空间是不够的,还需要通过eax寄存器把相应的系统调用号传递给
内核。在陷人内核之前,用户空间就把相应系统调用所对应的号放入eax中了。这样系统调用处理程序一旦
运行,就可以从eax中得到数据。system_call()函数通过将给定的系统调用号与NR_syscalls做比较来检查
其有效性。如果它大于或者等于NR syscalls,该函数就返回一ENOSYS。否则,就执行相应的系统调用。由
于系统调用表中的表项是以32位(4字节)类型存放的,所以内核需要将给定的系统调用号乘以4,然后用所
得的结果在该表中查询其位置。
Linux系统本身并未有记录系统调用次数的数据结构,因此我们需要在内核中定义一个全局数组来记录
每个系统调用被执行的次数。从调用的原理上看,要记录每个系统调用被执行的次数,我们可以在
system_call()参数检查成功后,对相应的系统调用次数做一次增量操作,这样就完成了执行次数记录的工
作。为了能得到该数组信息和对该数组进行操作,我们还需要定义自己的系统调用。我们定义的系统调用
可以相应地在entry.S中的sys_call_table添加,并重新编译内核,使用该函数。
实验过程:
1. 安装vmwareworkstat
文档评论(0)