第四周—扒开系统调用的“三层皮”
【洪韶武 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 】
第四周 扒开系统调用的“三层皮”
一、本周学习内容总结
1.系统调用的“三层皮”
- xyz函数—API
- systemcall—中断向量
- sysxyz—中断服务程序
2.系统调用的意义及API与系统调用的关系
(1)系统调用的意义:
- 把用户从底层的硬件编程中解放出来
- 极大提高了系统安全性
- 使用户程序具有可移植性
(2)API和系统调用:
- API与系统调用是不同的—API只是一个函数定义,系统调用通过软中断向内核发出一个明确请求。
- Libc库定义的一些API引用了封装例程—一般每个系统调用对应一个封装例程,库再用这些封装例程定义出给用户的API 。
- 不是每个API都对应一个特定的系统调用
- 返回值—大部分封装例程返回一个整数,-1多数情况下表示内核不能满足进程的要求。
3.用户态、内核态、中断
- Intel x86 CPU有四种不同的执行级别0——3,Linux只是用了其中的0和3来表示内核态和用户态
- 用户态—在相应的低执行状态下,代码的掌控范围受到限制,只能在对应级别允许的范围内活动
- 内核态—在高执行级别下,代码可以执行特权指令,访问任意的物理地址
- 中断处理是从用户态进入内核态的主要方式。系统调用是一种特殊的中断。
- 从用户态切换到内核态时必须保存用户态的寄存器上下文。中断/int指令会在堆栈寄存器上保存一些寄存器的值。
中断发生之后第一件事就是保存现场。保护现场就是进入中断程序,保存需要用到的寄存器的值,恢复现场就是退出中断程序,回复保存寄存器的数据。中断处理结束最后一件事就是恢复现场。
4.系统调用的参数传递方法
二、实验内容总结
以C语言和嵌入式汇编两种方式编写通过API进行系统调用的实例
选用20号系统调用getpid
- 库函数API使用系统调用
- C代码中嵌入汇编代码使用系统调用
- 实验结果
三、小结
这周学习到系统调用的过程,及三个关键点:应用程序在用户态调用API函数,该函数将对应的系统调用号及参数保存,触发软中断,然后陷入内核态,中断向量根据系统调用号调用对应的内核函数,内核函数执行完毕后将结果存放的eax中并返回给程序,程序返回的用户态。并通过实验进行了系统调用实例。
转载于:https://www.cnblogs.com/5219hsw/p/5297639.html
第四周—扒开系统调用的“三层皮”相关推荐
- LINUX内核分析第四周——扒开系统调用的三层皮
LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- 作业4:扒开系统调用的三层皮(上) 20135115臧文君
扒开系统调用的三层皮(上) 注:作者:臧文君,原创作品转载请注明出处,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000 ...
- 《Linux内核分析》 第四节 扒开系统调用的三层皮(上)
<Linux内核分析> 第四节 扒开系统调用的三层皮(上) 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com ...
- linux内核分析——扒开系统调用的三层皮(上)
20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 系统调用 ...
- 《Linux内核分析》 第四节 扒开系统调用的三层皮(上)
黄胤凯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.视频学习 1 ...
- 扒开系统调用的三层皮(下)
5234+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.给MenuO ...
- Linux内核设计第四周——扒开系统调用三层皮
Linux内核设计第四周 --扒开系统调用三层皮 一.知识点总结 (一).系统调用基础知识 1.用户态和内核态 内核态:在高级别的状态下,代码可以执行特权指令,访问任意的物理地址: 用户态:在相应的 ...
- 《Linux内核分析》期末总结及学习心得
[洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 一.学习心得 本学 ...
- linux及安全期中总结——20135227黄晓妍
Linux及安全期中总结 黄晓妍 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...
最新文章
- 关于loader加载的东西必须是继承sprite
- codeforces Gargari and Permutations(DAG+BFS)
- Linux文件系统之swap
- mysql存储过程 --游标的使用 取每行记录 (多字段)
- qj71c24n通讯实例_Q系列串行口通信模块用户参考手册QJ71C24N(基础篇).pdf
- 读博的经验对我读学位期间指导最大的文章
- java常用8种 设计模式
- 51单片机 protues 的仿真程序源文件
- Android 权限的一个类型系统模型
- essay写作要点以及正确的书写格式
- Cron范式每日凌晨一点执行
- 【脚本语言系列】关于Python测试工具lettuce
- 基于Cycle Spinning的移不变小波去噪
- 微信小程序云开发 操作数据库-数据的批量更新
- 【可达编程】 P0815 歌手大赛
- 使用Fiddler抓取夜神模拟器上的包
- 99行不用指针 c语言贪食蛇,小白99行C代码编写经典游戏贪吃蛇(多关版本)
- Python简单绘图一
- redis中AOF自动重写条件
- ABP VNext学习日记15
热门文章
- 如何在Linux系统上刷抖音
- python安装pip之后 pip命令报错解决方法
- 数据分析学习笔记—python简单操作EXCEL
- cv2.error: opencv(4.4.0)_【OpenCV 4开发详解】图像连通域分析
- python3 namedtuple_去年发布的Python 3.8 稳定版,帮你们来一波特性全面解读
- 平面最近点对问题(分治)
- 数据结构实验 2.连续整数之和(2012年北航研究生入学考试)
- Android中JNI编程出现“Invalid arguments ' Candidates are: void * malloc(?) '”的解决方案
- FTP的主、被动模式
- Java中Object转Map类型,Map转Object类型