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 冲刺】 4/12
今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 完成API文档编写 已完成 会遗漏一些部分的api,但是通过群里询问以及对页面的review解决 孙浩楷 根据UI设计, 实现左侧 ...
- BZOJ4401:块的计数(乱搞)
Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...
- php isset+{} 判断字符串长度比strlen效率高
PHP 变量后面加上一个大括号{},里面填上数字,就是指 PHP 变量相应序号的字符.例如:$str = 'hello';echo $str{0}; // 输出为 hecho $str{1}; // ...
- UART串口通信
#include "sys.h" #include "delay.h" #include "usart.h" u8 rdata[]; UAR ...
- ocv & derate & crpr
OCV: on-chip-variation 是指芯片在制造工艺P.工作电压V.环境温度T 等参数的局部变化情况下导致的 cell &net delay 变化,比如假设从clk 到两个reg ...
- Android 配置从GitHub上下载下来的不太规则的源代码库,并保证程序正常运行
用过github的朋友一定会发现,我们在github上下载下来的源代码(例子和库),放到eclipse中并不是总能正常运行的,它有可能会出现这样或者那样的错误,例如:找不到jar包,配置文件错误,R文 ...
- 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...
- QT1.1-与Opencv的hello world
qt:一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称 ...
- THUSC 2017 D1T2 杜老师
这是个非常有趣的数学题啦... 其实大概推一推式子就能得到一个信息,就是答案一定是$2$的整数次幂,并且其实答案就是$2^{R-L+1-sum}$,其中$sum$表示有多少个数不能用$L-i-1$的数 ...
- Delphi 7~XE系列升级安装Indy10.6
由于低版本Indy无法满足网络技术的日益更新,如SSL/TLS请求.RawHeaders与Cookie管理等问题处理. 我本身一直在用Delphi 2007,因为D2009开始底层的编码已不同,旧项目 ...