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 概述 本周是学习的主要是构造 ...
随机推荐
- angular4 form 表单中 input输入框的disabled属性
直接加[disabled]="isDisabled"属性的话,出现报错 根据提示,做如下修改 private isEdit: boolean = true; private isD ...
- distinct用group by优化
当数据量非常大,在同一个query中计算多个不相关列的distinct时,往往很容易出现数据倾斜现象,导致运行半天都不能得到结果. 比如以下的SQL语句(a, b, c没有相关性): select d ...
- 为什么在Java中不使用finalize()方法
我们都知道finalize()方法是回收分配给对象的内存之前调用垃圾收集器线程的基本语句.在这篇文章中,我们将会深入这个方法. 这篇文章中的章节: 1.finalize()方法不能保证执行(这个将要用 ...
- 剑指Offer——数据流中的中位数
题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. ...
- 荣誉墙项目day28 django常用函数
1.在网页上渲染字符串from django.http import HttpResponsereturn HttpResponse(u"hello world") 2.渲染网页f ...
- 15.Update Documents-官方文档摘录
1.插入数据 db.inventory.insertMany( [ { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: ...
- C++ 带有通配符*与?的字符串匹配
题目:两个字符串,一个是普通字符串,另一个含有*和?通配符,*代表零个到多个任意字符,?代表一个任意字符,通配符可能多次出现.写一个算法,比较两个字符串是否相等. 发现许多公司笔试面试都有这道题目,于 ...
- 【Android】自己定义相机的实现(支持连续拍照、前后摄像头切换、连续对焦)
~转载请注明http://blog.csdn.net/u013015161/article/details/46921257 介绍 这几天.写了一个自己定义照相机的demo.支持连续拍照和摄像头切换. ...
- linux 配置SSH网络传输数据安全方案,JDK,Tomcat和Eclipes
一.通过ssh实现安全远程访问linux系统 ssh :secure shell 加密: 1. 对称加密 (加密密钥与解密密钥相同) des .aes 2. 非对称加密(加密密钥与解密密钥不同) RS ...
- Jenkins+Ant+Jmeter自动化测试平台
持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动 ...