20135320赵瀚青LINUX第五章读书笔记
第五章——系统调用
5.1 与内核通信
作用
- 1.为用户空间提供一种硬件的抽象接口
- 2.保证系统稳定和安全
- 3.除异常和陷入,是内核唯一的合法入口。
API、POSIX和C库
关于Unix接口设计:提供机制而不是策略
5.3 系统调用
5.3.1系统调用号
- 当用户空间的进程执行一个系统调用,就用系统调用号指明到底执行哪个系统调用。
- sys_ni_syscall():错误号,负责“填补空缺”,返回-ENOSYS,专门针对无效的系统调用。
- 存在sys_call_table。
5.3.2系统调用的性能
- 设计原则:简洁、高效
- 原因:很短的上下文切换时间
5.4系统调用处理程序
- 通知内核的机制是软中断实现的:通过引发一个异常来促使系统切换到内核态去指向异常处理程序,而此时的异常处理程序就是系统调用的处理程序。
- x86系统上的软中断是由int $0x80指令触发128号软中断。
5.4.1指定恰当的系统调用
eax寄存器传递系统调用号给内核。
5.4.2参数传递
- x86系统,ebx,ecx,edx,esi,edi按顺序存放前五个参数。
- 需要6个及以上参数,应用一个单独的寄存器存放指向这些参数在用户空间地址的指针。
- 返回值存放在eax。
5.5系统调用处理程序
通知内核
- 用户程序无法直接执行内核代码,由于内核驻留在受保护的地址空间上,不能直接调用内核空间中的函数。
- 应用程序以某种方式通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态,内核就可以代表应用程序在内核空间执行系统调用。
- 通知内核的机制是靠软中断实现的:通过引发异常来粗来系统切换内核态执行异常处理程序(系统调用处理程序)。
- 用户空间引起异常或陷入内核
指定恰当的系统调用
eax寄存器:将系统调用号传递给内核
system_call():与NR_syscall比较,检查有效性
call *sys_call_table(,%rax,8):执行相应的系统调用
参数传递
x86系统,ebx,ecx,edx,esi,edi按顺序存放前五个参数。
需要6个及以上参数,应用一个单独的寄存器存放指向这些参数在用户空间地址的指针。
返回值存放在eax
5.6 系统调用上下文64
5.6.1 绑定一个系统调用的最后步骤
- 首先,在系统调用表的最后加入一个表项。每种支持该系统调用的硬件体系都必须做这样的工作
- 对于所支持的各种体系结构,系统调用号都必须定义于<asm/unistd.h>中。
5.6.2 从用户空间访问系统调用
- 通常,系统调用靠C库支持。
Linux本身提供了一组宏。
5.6.3 为什么不通过系统调用的方式实现
建立一个新的系统调用的好处
- 系统调用创建容易且使用方便。
- Linux系统调用的高性能显而易见。
心得与体会
本周的学习内容是系统调用,在网易云课堂中这门课分为了两个部分,所以对这一章的理解也比较容易,系统调用基本上就分为三个部分,总的来说就是靠中断实现系统调用,三个部分为,API,中断向量,中断服务程序。这门课也进行了一半了,基本上也找到了模式,希望以后能够更加顺利地进行学习
20135320赵瀚青LINUX第五章读书笔记的更多相关文章
- 20135320赵瀚青LINUX第三章读书笔记
第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度 ...
- 20135320赵瀚青LINUX第四章读书笔记
概述 什么是进程调度 进程调度:在可运行态进程之间分配有限处理器时间资源的内核子系统. 一.调度策略 4.1进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状 ...
- 20135320赵瀚青LINUX第五周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 按照刘老师的周从三个角 ...
- 20135320赵瀚青LINUX第十八章读书笔记
概述:调试工作艰难是内核级开发区别于用户级开发的一个显著特点 18.1准备开始 内核调试往往是一个令人挠头不已的漫长过程.幸运的是,在这些费劲的问题中也有不少比较简单而且容易消灭的小bug,运气好你可 ...
- 20135320赵瀚青LINUX第八周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的是linux ...
- 20135320赵瀚青LINUX第七周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...
- 20135320赵瀚青LINUX第六周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 这周主要讲解的是进程. ...
- 期末总结20135320赵瀚青LINUX内核分析与设计期末总结
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这 ...
- 20135320赵瀚青LINUX内核分析第三周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...
随机推荐
- mysql数据的导入与导出
参考:http://blog.sina.com.cn/s/blog_81b2b2a1010188q0.html http://blog.csdn.net/xin_yu_xin/article/det ...
- [LintCode] 第一个错误的代码版本
/** * class VersionControl { * public: * static bool isBadVersion(int k); * } * you can use VersionC ...
- 桌面不显示IE图标解决方法
如果你的是WIN7,恰好你的桌面上IE图标不知道怎么被搞咩了. 向这里看过来,这里有一个文件你正好能用上. 使用方法很简单: 猛戳下载,猛戳两下安装 下载解决
- Jmeter--压测dubbo接口
Dubbo Interface Demo:https://blog.csdn.net/qi_lin7/article/details/53759528 Demo2:https://blog.csdn. ...
- ZOJ 3607 Lazier Salesgirl (枚举)
Lazier Salesgirl Time Limit: 2 Seconds Memory Limit: 65536 KB Kochiya Sanae is a lazy girl who makes ...
- glibc-2.23_large_bin链接方式_浅析
上面两个图应该合并为一个图,但是指针太多了,合并在一起看不清了,所以分成两张图 所有的块都通过fd和bk两个指针链接,但是为了加快查询速度,不同大小的chunk通过fd_nextsize和bk_nex ...
- Gartner提出的7种多租户模型
下面,我们就来看看在SaaS应用搭建过程中,可以采用什么样的多租户模型.从而能较为清晰地了解未来使用PaaS平台开发的SaaS,可以为用户提供哪些多租户的服务. Gartner提出了7种 ...
- SSH整合中,使用父action重构子类action类.(在父类中获取子类中的泛型对象)
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import com.opensymphony.x ...
- datasnap rest Windows客户端编写
首先吐槽一下XE关于datasnap的资料真的是太少了... 服务端用DSHTTPService1控件可以实现http接口方式的调用,返回的都是json格式数据,适用于跨平台解析. 这里着重强调一下d ...
- 【转】UML中类与类之间的5种关系表示
一.继承关系 继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一 ...