《Linux内核设计与实现》学习笔记3——系统调用
来源:互联网 发布:淘宝被骗2万报警有用吗 编辑:程序博客网 时间:2024/06/07 21:45
系统调用:内核提供的用户程序与内核进行交互的一组接口。
1. 与内核通信
主要作用:
1.1 对于应用程序:提供了访问应将的接口,提供了创建进程和进程间通信的机制,提供了申请操作心痛其他资源的能力。
1.2 对于操作系统:保证了系统的安全、稳定。
2. API、POSIX和C库
2.1 API(应用编程接口):定义了一组应用程序使用的编程接口。
API与系统调用没有直接对应关系。
2.2 POSIX::Unix世界中,最流行的API标准。
2.3 C库:C库实现了Unix系统的主要API,提供了POSIX的绝大数API
3. 系统调用
3.1 一般包括:输入的参数,可能产生的副作用和一种明确的操作。
3.2 系统调用号:用来指明到底要执行哪个系统调用。
系统调用号独一无二,不可变更,即使系统调用删除,系统调用号也不会回收。
sys_call_table:记录了所有已经注册过的系统调用的列表
4. 系统调用处理函数:system_call()
系统调用对应的软中断的异常处理函数:
应用程序通过软中断通知内核自己要执行一个系统调用,内核可以代表应用程序在内核空间执行。
4.1 指定恰当的系统调用:
通过寄存器,把系统调用号一并传给内核。
4.2 参数传递
参数和返回值一般通过寄存器传递,参数太多的情况下,可以用一个单独的寄存器存放参数的用户空间的地址
5.系统调用的实现
5.1 实现系统调用
用途:不提倡多用途的系统调用。
参数:很多系统调用通过标志参数确保向前兼容
5.2 参数验证:
(1)用户传入指针的检查:内存区属于用户空间,在进程的地址空间,内存权限标记。
(2)内核无论何时都不能轻率的接受来自用户空空间的指针,copy_to_user和copy_from_user必须其中一个被使用。
5.3 是否有合法权限。
6 系统调用上下文
6.1 绑定一个系统调用的最后步骤
(1)在系统调用表(sys_call_table)的最后加入一个表项
(2)定义系统调用号<asm/unistd.h>
(3)系统调用必须被编译到内核映像
6.2 从用户空间访问系统调用:
可以通过宏syscalln()直接对系统调用访问:
#define __NR_foo 283
__syscall0(long, foo)
直接就可以调用声明好的foo()来调用系统调用foo()
- 《Linux内核设计与实现》学习笔记3——系统调用
- 《Linux内核设计与实现》——系统调用
- 系统调用——linux内核设计与实现读书笔记
- 《linux内核设计与实现》Chapter5章系统调用(笔记)
- [笔记]《Linux内核设计与实现》第五章系统调用
- 《Linux内核设计与实现》--系统调用
- linux内核设计与实现:系统调用
- 读薄《Linux 内核设计与实现》(3) - 系统调用
- Linux内核设计与实现学习笔记
- 《Linux设计与实现》笔记——系统调用工作原理、添加系统调用的过程
- [Linux内核设计与实现]Linux系统调用
- 《Linux内核设计与实现》——第5章(系统调用)
- 《linux内核设计与实现》阅读笔记 第四章 系统调用
- 《linux内核设计与实现》学习笔记3进程管理
- Linux内核设计与实现 学习笔记(3)虚拟文件系统
- 【linux内核设计与实现-章节代码学习系列-系统调用】ubuntu 12.03 下系统调用实现
- Linux内核设计与实现读书笔记(4)-系统调用
- linux内核设计与实现(第五章)----系统调用
- 【NOIP2017提高组】仔细的检查
- 【个人笔记】学习使用sublime text
- 大数分解Pollard_rho模板
- TestNG入门教程-2-写第一个基于TestNG的用例
- MFC基于select模型的套接字类之服务器(1)
- 《Linux内核设计与实现》学习笔记3——系统调用
- Intellij IDEA开发环境搭建,scala配置及打包,jar包在spark中的运行
- Using resnet50 to extract feature
- C++集锦五 八大排序算法和三大查找算法
- Hibernate4 测试类(新的hibernate使用方法)
- APP启动慢解决方法(笔记)
- java 注解demo
- hadoop HA(热备)
- 数据库学习笔记-数据库的四大特性