20135316王剑桥Linux内核学习笔记第四周
20135316王剑桥 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC 1000029000
1、内核态:在高执行级别,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态。而在相应的低级别执行状态下,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动。从而保证真个系统更稳定。
2、Intel x86的CPU有四种不同执行级别0—3,Linux只使用其中的0和3来分别表示内核态和用户态。
3、Cs寄存器的最低两位表示当前代码的特权级别。
4、0xc0000000以上的地址空间只能在内核态下被访问;0x00000000-0xbfffffff的地址空间在两种状态下都能被访问。(逻辑地址)
5、中断处理是从用户态进入内核态的主要方式。
6、系统调用是一种特殊的中断。
7、从用户态切换到内核态时必须保存用户态的寄存器上下文。中断/int指令会在堆栈寄存器上保存一些寄存器的值。(用户态栈顶地址、当时的状态字、当时的cs:eip的值)
8、中断发生之后第一件事就是保存现场。保护现场就是进入中断程序,保存需要用到的寄存器的值,恢复现场就是退出中断程序,回复保存寄存器的数据。中断处理结束最后一件事就是恢复现场。
9、操作系统为用户态进程与硬件设备进行交互提供了一组接口—系统调用:把用户从底层的硬件编程中解放出来;极大地提高了系统的安全性;使用户程序具有可移植性。
10、应用编程接口API(一个函数),不是每一个API都对应一个系统调用。
11、系统调用的三层皮:xyz,system-call和sys-xyz。
12、当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数
13、系统调用号使用eax寄存器。每个系统调用至少有一个参数。
14、寄存器传递参数的限制:每个参数的长度不能超过寄存器的长度(32位)、在系统调用号(eax)之外,参数的个数不能超过六个(ebx,ecx,edx,esi,edi,ebp)。如果超过六个则将某一个寄存器参数作为一个指针,指向一块内存。
实验过程:
1、库函数API使用系统调用

2、C代码中嵌入汇编代码使用系统调用

3、实验结果

总结:通过这次课的学习以及对实验的操作,使我认识到,系统调用大大致过程:应用程序在用户态调用API函数,该函数将对应的系统调用号及参数保存,触发软中断,然后陷入内核态,system_call根据系统调用号调用对应的内核函数,内核函数执行完毕后将结果存放的eax中并返回给程序,程序返回的用户态。
20135316王剑桥Linux内核学习笔记第四周的更多相关文章
- 20135316王剑桥Linux内核学习笔记
王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理 ...
- 20135316王剑桥Linux内核学习笔记第三周
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 三个法宝:存储程序计算机.函数调 ...
- 20135316王剑桥Linux内核学习记笔记第七周
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 一.可执行程序是怎么得来的? 编译 ...
- Linux内核学习笔记-2.进程管理
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习笔记二——进程
Linux内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
- Linux内核学习笔记之seq_file接口创建可读写proc文件
转自:http://blog.csdn.net/mumufan05/article/details/45803219 学习笔记与个人理解,如有错误,欢迎指正. 温馨提示:建议跟着注释中的编号顺序阅读代 ...
- Linux内核学习笔记
1.vanbreaker的专栏 2.LinuxKernel Exploration 3.DroidPhone的专栏 4.Linux内核研究以及学习文档和ARM学习以及研究的开放文档 [力荐] 5. ...
- Linux内核学习笔记——内核内存管理方式
一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页 ...
随机推荐
- 阿里八八Alpha阶段Scrum(7/12)
今日进度 叶文滔: Andriod Studio新版打开旧版项目存在兼容性问题,仍在寻求解决办法 王国超: 今天还是在调bug,真机运行总是闪退 俞鋆: 正在学习api制作和相关的文档编写,研究了一些 ...
- Ecstore 默认图片压缩质量差的问题解决方法
修改app/image/lib/clip.php文件 }elseif( function_exists('imagecopyresampled')){ $quality = 80; $image_p ...
- unity3D iTween的使用
iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出.让你做开发更轻松,用它能够轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等 到官网看看 http://itwe ...
- dubbo接口访问控制
微服务背景下,一个web应用都可能不再service依赖,而是通过RPC调用远端服务器上的服务.这些服务里,就包括了一些不能轻易暴露的后台功能接口.暴露出去的dubbo接口注册到某一个zk上后,该du ...
- 使用uploadify多文件上传,单个删除上传成功的图片
总体思路:在用uploadify上传成功一张图片,用js生成相应的元素,放到指定的位置,并且加上删除的标志.在保存的时候,把是img的所有的值,放到对应到字段里. jsp: <tr> &l ...
- Python2.7-string模块
string模块 1.模块内定义的常数 字母(ascii_letters.letters),数字(digits.hexdigits.octdigits),空格(whitespace),大小写(asci ...
- Python2.7-decimal
decimal 模块,提供了对小数精确的计算,内置的 float 类型是以二进制的浮点数保存的,是不准确的,小数点后会有很多奇怪的数字,虽然在一般情况下计算是没问题的,因为近似相等,小数点后十几位才会 ...
- [Usaco2012 Dec]First! BZOJ3012
分析: 其实我们可以很容易的想到,如果一个串是另一个串的子串,那么必定长的那个串不可能是字典序最小的串.其次,如果一个串为了使他成为字典序最小的串儿出现了矛盾的情况,那么也不可能是字典序最小的串.那么 ...
- struts2_Interceptor
题目要求:要求当未登录访问某些Action时,自动跳转到登录界面. 1. 2. 3. 4. 5.默认拦截器堆栈为defautStack,但一旦用户添加了拦截器,默认拦截器失效 6. 7. struts ...
- 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装
一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...