操作系统课程实验报告(三)
来源:互联网 发布:罗斯科的画 知乎 编辑:程序博客网 时间:2024/06/05 03:24
这是实验楼操作系统课程(李治军老师教学)的第三个实验——系统调用——的实验报告。
报告正文
我认为做这个实验,先在脑海中把系统调用的过程理一次,再动手会好一些,以下实验报告也会根据这个思路进行。
一个应用程序,在编译的过程中,将它使用的 API展开成包含一系列(也有可能没有)系统调用的语句。根据我现在的理解,也就是展开成调用了 int 0x80中断的内嵌汇编的形式。
首先从 int 0x80入手修改。int 0x80会在 IDT 中找到相对应的中断描述符,从而找到中断例程的入口,然后进行执行这个例程,到这一步为止我们都还并不需要修改文件。
接下来,int 0x80会去执行system_call函数了,kernel/system_call.s是我们需要修改的,仅需要改nr_system_calls = 74,这个数字说明int 0x80中断可以提供多少种功能(调用),由于我们需要添加两个调用,所以将72改为74。
现在system_call要执行了,它根据传进来的系统调用号(放在eax中)来执行相应的系统调用,它根据include/linux/sys.h中的定义的函数指针数组来找到这个调用的函数入口,所以我们要在sys.h中加入我们需要的两个调用的函数指针 sys_iam 和 sys_whoami,然后用两条extern声明表示这两个函数的实现在别的文件里。
来到这里,我们已经指明了 int 0x80中断怎么寻找我们新增的两个调用了,接下来就是真正去实现sys_iam和sys_whoami了,将这两个函数的实现放在kernel/who.c中。这里我写了好几个printk函数用于调试,因为我不会用gdb。说实话编写who.c的时候我遇到的最大的困难是不知道要包含哪些头文件,我只包含了几个我能搞清楚的头文件(包括printk的头文件等),侥幸实验成功。
最后,我们修改一下makefile,这个跟着实验提示做就好,一般没啥大问题。
make完了,就跑虚拟机吧!
在虚拟机下面,修改usr/include/unistd.h,增加两个调用号的宏和函数声明,将来编写的应用程序里的API包含这个头文件,才能顺利展开成包含int 0x80 的形式。
然后在虚拟机下编写两个应用程序 iam.c和 whoami.c,测试新增的两个调用,输出符合预期即可。
- 操作系统课程实验报告(三)
- 操作系统课程实验报告(四)
- 操作系统实验三实验报告
- 软件工程课程实验报告:实验三
- 中山大学软件工程操作系统实验三报告
- 电子科技大学---操作系统课程实验(一)
- 电子科技大学---操作系统课程实验(二)
- 数据结构实验报告(三)
- 操作系统实验报告
- 操作系统实验报告 lab1
- 操作系统实验报告 lab2
- 操作系统实验报告 lab3
- 操作系统 lab4 实验报告
- 操作系统实验报告 lab4
- 操作系统实验报告 lab5
- 操作系统实验报告 lab8
- 操作系统实验报告 lab6
- 操作系统实验报告 lab7
- 【补充】U-boot启动代码指令级分析与启动图解
- Spring框架是什么
- zepto源码之deferred.js
- Less、Sass环境配置(Webstorm和Sublime两种)
- Android中显示图片进行放大或缩小
- 操作系统课程实验报告(三)
- TOJ 3519.Ones and Zeros
- 面向对象程序设计概述
- scala
- SVN报错:sqlite[S5]:database is locked
- 易企cms附加属性的调用
- C++ STL replace()函数常用用法详解
- 【知识点】 --- 容斥原理
- 震惊!!!excel竟然能当爬虫用!!!