linux第二次读书笔记
第五章系统调用
系统调用是用户进程与内核进行交互的接口。为了保护系统稳定可靠,避免应用程序恣意忘形。
5.1与内核通信
系统调用在用户空间进程和硬件设备间添加了一个中间层,
作用:为用户空间提供了一种硬件的抽象接口;保证了系统的稳定和安全,避免应用程序不正确使用硬件,窃取其他进程的资源,或做出危害系统的行为;为了实现多任务和虚拟内存。
Linux提供的系统调用比大部分操作系统少得多。
5.2 API、POSIX、和C库
一个API定义了一组应用程序使用的编程接口。(API和系统调用不是一一对应)API可以在各种不同的操作系统上实现,给应用程序提供完全相同的接口,而API本身的实现在不同系统中可能迥异。
Unix的API基于POSIX,Linux尽力与POSIX和SUSv3兼容
Linux的系统调用作为C库的一部分提供。
5.3系统调用
访问系统调用通常通过C库中定义的函数调用,通常需要定义参数,而且可能产生副作用(使系统状态发生改变)。系统调用还会返回了一long类型的值表示成功或错误。
定义系统调用:asmlinkage long sys_***
限定词 返回类型 命名规则
系统调用号:每个系统调用被赋予一个系统调用号,用户空间执行系统调用时,用系统调用号指明系统调用。一旦分配不再变更,系统调用被删除,其系统调用号也不允许回收利用。内核记录了系统调用表中所有已注册的系统调用列表,存储在sys_call_table中
系统调用的性能:Linux系统调用比其他操作系统要快,原因:上下文切换时间短;系统调用程序和系统调用都很简洁。
5.4系统调用处理程序
内核驻留在受保护的地址空间上,因此应用程序要通知内核自己需要使用系统调用。通知内核是靠软中断实现,引发异常时系统切换到内核态。通过int $0x80触发中断,执行128号异常处理程序(系统调用处理程序)
指定恰当的系统调用:X86上系统调用号通过eax寄存器传递给内核
参数传递:除了系统调用号还需要传递外部参数,按顺序存储在ebx,ecx,edx,esi和edi五个寄存器中,很少有需要六个参数的。
5.5系统调用的实现
实现系统调用:1、决定用途(不提倡采用多用途);2、调用的参数、返回值和错误码应该是什么(借口力求简洁,参数尽可能少,力求稳定);3、设计接口尽量为将来做考虑(是否有不必要的限制,是否可移植);
提供机制(mechaniam)不提供策略(policy)
参数验证:必须仔细检查参数是否合法有效,因为系统调用在内核空间执行,如果有不合法输入,那会威胁系统安全和稳定。最重要的检查是 检查用户提供的指针是否有效。在接收一个用户空间的指针之前,内核必须保证1、指针指向的内存区域属于用户空间。进程绝不能哄骗内核去读内核空间的数据;2、指针指向的内存区域在进程的地址空间里。进程绝不能哄骗内核去读其他进程的数据;3、进程绝不能绕过内存访问限制。
内核提供copy_to_user(),copy_from_user()两个方法完成检查拷贝数据
5.6系统调用上下文
内核在执行系统调用的时候处于进程上下文,在进程上下文中,内核可以休眠,并且可以被抢占。休眠说明系统调用可以使用内核提供的绝大部分功能。可以抢占说明新进程可以使用相同的系统调用。
绑定一个 系统调用的最后步骤:1、在系统调用表的最后加入一个表项;2、系统调用号必须定义于<asm/unistd.h>;3、系统调用必须被编译进内核映像。
从用户空间访问系统调用:只写出系统调用gilc恐怕并不提供支持。Linux本身提供一组宏_syscalln(),n的范围从0到6,代表需要传递给系统调用的参数个数。
新建一个系统调用的好处:1、系统调用容易创建且使用方便;2、系统调用很高效。
新建一个系统调用的坏处:1、需要系统调用号,这需要一个内核在处于开发版本的时;候官方分配给你;2、系统调用的接口不允许改动;3、需要将系统调用分别注册到每个需要支持的体系结构中;4、在脚本中不容易调用系统调用,也不能从文件系统直接访问系统调用;5、对于简单信息交换,系统调用大材小用;
linux第二次读书笔记的更多相关文章
- 20135320赵瀚青LINUX第二章读书笔记
第二章-从内核出发 获取内核代码 使用git 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/tor ...
- Linux第二章读书笔记
1.获取内核源码 1.1Git 分布式的:下载和管理Linux内核源代码: - 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/lin ...
- 2013337朱荟潼 Linux第二章读书笔记——从内核出发
1.获取内核源码 1.1Git 分布式的:下载和管理Linux内核源代码: - 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/lin ...
- 《深入理解Linux内核》 读书笔记
深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...
- Linux第二次学习笔记
#Linux第二次实验(第三周) 学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 熟练使用gdb调试技术 熟悉makefile ...
- Linux内核分析 读书笔记 (第一章、第二章)
第一章 Linux内核简介 1.1 Unix的历史 Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的. 在Unix中,所有东西都被当做文件,这种抽象使对数据和对设备的操作是通过一套相 ...
- 《鸟哥的Linux私房菜:基础学习篇》第二部分读书笔记
一.Linux的文件权限与目录配置 1. Linux用户身份与用户组记录的文件:默认情况下,/etc/passwd记录所有的系统账号与一般身份账号及root的相关信息,/etc/shadow记录个人的 ...
- linux私房菜-读书笔记
第零章:计算机概论 计算机:接受用户输入指令和数据,经过中央处理器的数据和逻辑单元运算处理器处理后,以产生或存储成有用的信息. 计算机硬件的五大单元:输入单元.输出单元.CPU内部控制单元.算术逻辑单 ...
- 《Linux程序设计》--读书笔记---第十三章进程间通信:管道
管道:进程可以通过它交换更有用的数据. 我们通常是把一个进程的输出通过管道连接到另一个进程的输入: 对shell命令来说,命令的连接是通过管道字符来完成的: cmd1 | cmd2 sh ...
随机推荐
- Linux下的sysfs与udev的关系是什么?
sysfs sysfs 把连接在系统上的设备和总线组织成为一个分级的文件,它们可以被从用户的空间存取到.简单介绍sysfs文件系统,您可能想知道 sysfs 是怎么认出系统中存在的设备以及应该使用什 ...
- php程序开发之实现网页跳转
php程序开发之实现网页跳转的三种方式 2017年04月16日 20:44:14 阅读数:3352 PHP目前是用来开发WEB项目的首选语言.Web项目中,从一个网页跳转到另一个网页是最常用的技术之一 ...
- Some reading, some thinking.
update:感谢助教0 0又学会一招,play 了一下CSS Part 1 · Reading Author Article Note Madcola <两年波折路(考研.工作.考研)> ...
- C# Repeater、webdiyer:AspNetPager分页 AspNetPager分页样式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/vaecnfeilong/article/details/32712611 AspNetPager分页 ...
- MyCat不适用场景(使用时避免)
1.非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的.例如下图中的一个Mycat分库方案: · 根据 tt_waybill 表的 id 字段来进行分片 · ...
- [BJWC2011]元素
嘟嘟嘟 题中说选的数的编号亦或和不能为0,也就是在这个集合中,不能用不同的选取方案亦或出相同的值.由此联想到线性基的一个性质是,每一个数都能由线性基中特定的一些数亦或得到. 所以我们就是要求出这些数的 ...
- 整数划分 NBUT - 1046
题目很简单,把一个正整数分割成N个正整数之和.但是你得把所有的划分方法列出来,以字典序升序排序.对于每种划分方法,小的数字在前面. 思路:直接深度优先搜索,注意要判断前一位一定会比将要放入答案的因子小 ...
- PHP批量抓取远程网页图片并存到本地实现方法和源码
做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢.有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不 ...
- ORB-SLAM2(4) 离线双目数据测试
官网 https://github.com/raulmur/ORB_SLAM2 1从http://www.cvlibs.net/datasets/kitti/eval_odometry.php下载数据 ...
- Ubuntu 14.04服务器配置 (1) 安装和配置
http://jingyan.baidu.com/article/9c69d48fb9fd7b13c8024e6b.html ssh是一种安全协议,主要用于给远程登录会话数据进行加密,保证数据传输的安 ...