Linux内核设计与实现第四周读书笔记
第5章系统调用

5.1与内核通信
主要作用:
- 为用户控件提供了一种硬件的抽象接口。
- 保证了系统稳定性与安全性。
- 为用户空间&系统提供公共接口。
5.2API、POSIX和C库
一般情况,应用程序通过在用户空间实现的应用编程接口API而不是直接通过系统调用来编程。(因为应用程序使用的这种编程接口实际上不需要和内核提供的系统调用对应)
总之,Unix系统调用提供机制而不提供策略。换句话说,Unix的系统调用抽象出了用于完成某种确定的目标的函数。
5.3系统调用
- asmlinkage(限定词):编译指令,通知编译器仅从栈中提取该函数的参数。
- sys_xxxx():系统调用的函数名前加上sys_,都应遵守的命名规则。
5.3.1系统调用号
一旦分配就不能再有任何变更,否则编译好的应用程序就会崩溃。此外,如果一个系统调用被删除,它所占用的系统调用号也不允许备被回收利用。
内核记录了系统调用表中的所有已注册过的系统调用列表,存储在sys_call_table中。
5.3.2系统调用的性能
快
原因:进程上下文切换快;系统调用处理程序&系统调用简洁
5.4系统调用处理程序
用户空间的程序无法直接执行内核代码。
通知内核的机制是靠软中断实现的:通过引发一个异常来促使系统切换到内核态来执行异常处理程序。此时的异常处理程序实际上就是系统调用处理程序。(int$0x80)
5.4.1指定恰当的系统调用
在陷入内核之前,用户空间就把相应系统调用所对应的号放入eax中。
5.4.2参数传递
参数用寄存器传递。
5.5系统调用实现
Linux系统调用实现时并不徐璈太关心它与系统调用处理程序之间的关系,难在设计和实现。
5.5.1实现系统调用
- 决定它的用途,每个为系统调用都应该有一个明确的用途。
- 新系统调用的参数、返回值和错误码又该是什么呢?接口应该力求简洁,参数尽可能少。
- 系统调用设计得越通用越好。
5.5.2参数验证
系统调用必须仔细检查它们所有的参数是否合法有效。
1检查用户提供的指针是否有效
- 指针指向的内存区域属于用户空间。
- 指针指向的内存区域在进程的地址空间里。
- 如果是读,则内存应被标记为可读。进程决不能绕过内存访问限制。
2检查针对是否有合法权限
5.6系统调用上下文
- 内核在执行系统调用时处于进程上下文。current指针指向当前任务,即引发系统调用的那个进程。
- 在进程上下文中,内核可以休眠并且可以被抢占。
- 当系统调用返回的时候,控制权仍在system_call()中,它负责切换到用户空间,并让用户进程继续执行下去。
5.6.1绑定一个系统调用的最后步骤
当编写完一个系统调用后,把它注册成一个正式的系统调用:
- 在系统调用表的最后中加入一个表项。
- 对于所支持的各种体系结构,系统调用号都必须定义于<asm/unistd.h>中。
- 系统调用必须被编译进内核映象(不能被编译成模块)。
- 最后,用户空间就可以调用系统调用函数了。
5.6.2从用户空间访问调用
- 通常系统调用靠C库支持。
- Linux本身提供了一组宏,用于直接对系统调用进行访问。
5.6.3为什么不通过系统调用的方式实现
建立一个新的系统调用非常容易,但却绝不提倡这么做。
Linux内核设计与实现第四周读书笔记的更多相关文章
- 《Linux内核设计与实现》 Chapter4 读书笔记
<Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子 ...
- 《Linux内核分析》第六周 读书笔记
<Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...
- linux内核分析 1、2章读书笔记
一.linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机: 1965年,Bell实验室.MIT.GE(通用电 ...
- 《Linux内核分析》第七周 读书笔记
<深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将 ...
- 《Linux内核设计》第17章学习笔记
- 《linux内核》课本第五章读书笔记
- 《Linux内核设计与实现》课本第一章&第二章学习笔记
<Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- 《Linux内核设计与实现》读书笔记 - 目录 (完结)
读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: < ...
随机推荐
- 四、Django之模型与管理后台-Part 2
一.数据库安装 打开mysite/settings.py配置文件,这是整个Django项目的设置中心.Django默认使用SQLite数据库,因为Python源生支持SQLite数据库,所以你无须安装 ...
- Java学习计划
Java学习计划&书单--2018.10.13 W3C Struts教程 W3C Spring教程 W3C Hibernate教程 <深入JavaWeb技术内幕> Java Web ...
- Linux sync命令的作用分析
Sync命令 在用reboot命令启动unix系统后,系统提示出错信息,部分应用程序不能正常工作.经仔细检查系统文件,并和初始的正确备份进行比较,发现某些文件确实被破坏了,翻来覆去找不到文件遭破坏 ...
- [linux] vim在源代码中自动添加作者信息(转载)
原文出处: http://www.vimer.cn/2009/10/用vim在源代码中添加你的个人信息.html vim ~/.vimrc "进行版权声明的设置 "添加或更新头 m ...
- KETTLE元数据表
表名 说明 R_CLUSTER R_CLUSTER_SLAVE R_CONDITION R_DATABASE 数据库连接信息 R_DATABASE_ATTRIBUTE 数据库属性 R_DATABASE ...
- ie6下,莫名被复制出一段文字解决
在IE6下使用浮动可能会出现文字重复的情况. 在IE6下,浮动层之间有注释文字的话,之前那个浮动层的内容文字就有可能遭遇一个“隐形”的复制,但是代码里查看文字可并没有多出来. 看个例子: HTML & ...
- USACO 1.2.3 Name That Number 命名那个数字(打开文件)
Description 在威斯康辛州牛大农场经营者之中,都习惯于请会计部门用连续数字给母牛打上烙印.但是,母牛用手机时并没感到这个系统的便利,它们更喜欢用它们喜欢的名字来呼叫它们的同伴,而不是用像这个 ...
- 石家庄铁道大学网站首页UI分析
今天的软件工程王老师讲了UI的设计,以前狭隘的认为只有移动设备上的界面叫UI,百度一下才发现UI其实有这么多含义:UI即User Interface的简称.泛指用户的操作界面,UI设计主要指界面的样式 ...
- Android开发第二阶段(2)
昨天:总结了第一阶段的开发经验 今天:学习了一下java中对事件处理这块的初步了解比如设置监听器等 明天:我会走进我们的代码去看看相关的一些知识.
- 软工1816 · BETA 版冲刺前准备
任务博客 组长博客 总的来讲Alpha阶段我们计划中的工作是如期完成的.不过由于这样那样的原因,前后端各个任务完成度不算非常高,距离完成一个真正好用.完美的软件还有所差距. 过去存在的问题 测试工作未 ...