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 概述 本周是学习的主要是构造 ...
随机推荐
- json序列化懒加载问题
如果框架使用了json序列化对象,当配置了hibernate懒加载时,可能会抛出异常,或者出现N+1的问题,或者出现无限循环的问题.网上很多解决方案, 基本是这些:@JsonIgnore忽略可能出问题 ...
- Junit 3.8.1 源码分析(一)
写在前面:本文基于Junit3.8.1版本,因为这是我第一次进行源码学习,先从简单的源码开始学起 1. 示例代码 1.1 准备工作 下载Junit3.8.1的JAR包 需要下载junit-3.8.1- ...
- 【react表格组件】material-table 基本用法 & 组件override
教程: https://mbrn.github.io/material-table/#/ https://material-ui.com/api/table/ github: https://gith ...
- Win查询注册表获取CPU与内存参数
#include "stdafx.h" void dump_machine_info( HANDLE fh ) { CHAR Str[MAX_PATH*3]; CHAR MHzSt ...
- MySQL中的表级锁
数据的锁主要用来保证数据的一致性,数据库的锁从锁定的粒度上可以分为表级锁,行级锁和页级锁. MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制,比如MyISAM和MEMORY存 ...
- Python 能干什么
二.Python 只适合测试? 关于Python是一种什么样的语言,这里不打算说对象.类之类的术语.我们可以先来看一看,时至今日 Python 都在哪些领域里得以应用: 电信基础设施 (Twilio) ...
- Spark2.0机器学习系列之8:多类分类问题(方法归总和分类结果评估)
一对多(One-vs-Rest classifier) 将只能用于二分问题的分类(如Logistic回归.SVM)方法扩展到多类. 参考:http://www.cnblogs.com/CheeseZH ...
- maven+springmvc+spring+mybatis
一.项目搭建 1)创建maven项目 选择apache的maven-archetype-webapp 填入groupID : 例如 com.mracale artifactId :例如 shoppin ...
- facebook工具xhprof的安装与使用-分析php执行性能(转载)
下载源码包的网址 http://pecl.php.net/package/xhprof
- linux使用nohup命令后台运行程序
在linux服务器上搭建web服务器,用ssh客户端登陆后使用./startservice.sh脚本启动服务,但是当ssh断开连接后起的服务也会停掉. 这时可以用nohup ./startservic ...