20135320赵瀚青LINUX第五周学习笔记
2016-03-24 22:00
411 查看
赵瀚青原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
概述
按照刘老师的周从三个角度讲述这个星期的学习内容。第一个角度知道自己在干什么,这周主要内容就是在menu菜单中添加两个自己的功能,也就是上周我们编辑的两个函数,如何实现就是在test.c也就是make中编译的文件中添加两个函数,然后就进行编译,实现了功能,然后进行gdb调试,可以看出这个代码的变化情况。第二个角度,为什么做这个,知道简单的原理,本周是为了让我们更加了解系统调用,就是在文件中添加两个函数,然后通过menu实现让我们知道操作系统基本工作原理。第三个角度,有什么意思,让我们更加了解操作系统,然后顺利的了解Linux内核。
遇到的问题
1、在实验楼中使用了copy指令但是总是显示错误,无法将配置好的menu复制到虚拟机中
解决方式:使用git命令,然后就顺利复制了
2、make rootfs的时候出现错误
解决方式,代码中输入错误了几处地方
实验内容
1、先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/aeac09e781f00c0d066f3022644c4ec4.png)
2、在test.c中增加我编写的两个函数:getpid()和getpidasm()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/152f92d7c061f845c875b35abb0a85df.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/2f145d7d73030bb77103062d02063d02.png)
3、在main函数中增加两个函数的MenuConfig命令项:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/9717ba6da1e457357087358e02be20f6.png)
4、编译运行,在MenuOS中输入help,可以查看当前所有的系统调用,分别执行getpid、getpidasm进行系统调用
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/db037993e5151ccb8a2a0acca9fb6a35.png)
5、插入断点并调试
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/a780546a375d87f012a8361edb1c5823.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/2598809d79ca81ccebc190ebbee0c094.png)
2. 从system_call到iret过程分析
如下图所示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/12/4fc64064a2e2ddb1699a61721bdcb372.png)
五、总结:从系统调用处理过程到一般的中断处理过程
系统调用就是特殊的一种中断
1. 保存现场
在系统调用时,我们需要SAVE_ALL,用于保存系统调用时的上下文。 同样,中断处理的第一步应该也要保存中断程序现场。 目的:在中断处理完之后,可以返回到原来被中断的地方,在原有的运行环境下继续正确的执行下去。
2. 确定中断信息
在系统调用时,我们需要将系统调用号通过eax传入,通过sys_call_table查询到调用的系统调用,然后跳转到相应的程序进行处理。 同样,中断处理时系统也需要有一个中断号,通过检索中断向量表,了解中断的类型和设备。
3. 处理中断
跳转到相应的中断处理程序后,对中断进行处理。
4. 返回
系统调用时最后要restore_all恢复系统调用时的现场,并用iret返回用户态。 同样,执行完中断处理程序,内核也要执行特定指令序列,恢复中断时现场,并使得进程回到用户态
相关文章推荐
- Centos 6.5下安装图形界面
- linux vi 编辑器的使用
- linux基础命令(7)
- Linux面试题
- Linux 学习笔记 2016.03.24
- Linux驱动开发-10、Linux延时处理
- Linux驱动开发-9、Linux定时器
- linux下安装升级mysql到新版本(5.1-5.7)
- Linux GCC常用命令
- 解决Linux Fedora 虚拟机root用户登录提示"鉴定故障"的问题
- linux下文件类型获取
- 如何在Linux中设置Eclipse的快捷方式
- 如何把一个命令加入到某个用户sudo的列表中
- Linux命令操作文件,发布代码到服务
- 在linux中安装JDK(tar.gz)
- Linux软件包安装命令
- 深入浅出linux系统umask值及其对应的文件权限讲解
- Linux下安装JDK(删除openjdk)
- CentOS 6.x配置NFS服务端并在Mac上挂载
- Linux添加/删除用户和用户组