Linux 操作系统分析 主讲:陈香兰 助教:贾永泉、毛熠璐 3606864-83 (西区电三 421 ) Autumn 2007.

Slides:



Advertisements
Similar presentations
一、统计范围 注册地在湖里区的具有房地产开发资质的 房地产开发企业 无论目前是否有开发项目 无论开发的项目是在湖里区还是在其他区 没有开发项目的企业需要报送年报和月报 中的资金表(空表)。 新成立的项目公司,要先入库,再报报表。
Advertisements

第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
数控机床结构及维修 主编:于万成 王桂莲 副主编:李昊 人民邮电出版社 北京 ◎ 了解数控系统的组成和常见数控系统 的特点 ◎ 熟悉常见数控系统的参数设置 ◎ 掌握数控系统的常见故障诊断及维修 方法 调试与维修数控 机床的数控系统.
一、拟合优度检验 二、变量的显著性检验 三、参数的置信区间
计算机 在分析化学的应用 ( 简介 ) 陈辉宏. 一. 概述 信息时代的来临, 各门学科的研究方法都 有了新的发展. 计算机的介入, 为分析化学的进展提供了 一种更方便的研究方法.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
系统调用 Embedded Operating Systems2 系统调用的意义 操作系统为用户态进程与硬件设备进行交互提 供了一组接口 —— 系统调用 把用户从底层的硬件编程中解放出来 极大的提高了系统的安全性 使用户程序具有可移植性.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
内存寻址 Embedded Operating Systems2 在 intelx86 处理器下,有三种不同的地址 逻辑地址:每个逻辑地址由一个段 (segment) 和偏 移量 (offset) 组成 线性地址: 32 位无符号整数,可以表示 4G 的地址 空间.
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十九讲 ) 离散数学. 例 设 S 是一个集合, ρ ( S )是 S 的幂集合,集合 的交( ∩ ),并(∪)是 ρ ( S )上的两个代数运算, 于是,( ρ ( S ), ∩ ,∪) 是一个格。而由例 知.
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
嵌入式操作系统 陈香兰 助教:毛熠璐、吴昊 Spring 2008.
外文文献检索示例. 实验目的: 掌握利用计算机网络检索外文文献的基本方法; 了解熟悉下列数据库的结构、内容并掌握其检索方 法 ; 掌握检索的主要途径:出版物( Publication )、关键 词( Keyword )、作者( Author )等。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
第二章 贝叶斯决策理论 3学时.
操作系统原理课程设计指南 姜海燕 设计考核幻灯制作  1.1 封皮:系统名称,研制人员  1.2 目的及意义  1.3 功能设计:功能框图、用例图  1.4 结构设计:系统结构  1.5 核心技术及技术路线:画图  1.6 进度安排  1.7 人员安排  1.8.
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
1 学籍归档工作 年学籍归档工作安排 从 2008 年开始,改为按届移交档案 从 2008 年开始,改为按届移交档案 今年的归档工作范围: 今年的归档工作范围: 2014 年应届毕业班级 2014 年应届毕业班级 2014 年办理毕业证的往届生。 2014 年办理毕业证的往届生。 整理内容:根据.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
9的乘法口诀 1 .把口诀说完全。 二八( ) 四六( ) 五八( ) 六八( ) 三七( ) 三八( ) 六七( ) 五七( ) 五六( ) 十六 四十八 四十二 二十四 二十一 三十五 四十 二十四 三十 2 .口算, 并说出用的是哪句口诀。 8×8= 4×6= 7×5= 6×8= 5×8=
量子力学教程 ( 第二版 ) 3.4 连 续 谱 本 征 函 数 的 归 一 化 连续谱本征函数是不能归一化的 一维粒子的动量本征值为的本征函数 ( 平面波 ) 为 可以取 中连续变化的一切实数值. 不难看出,只要则 在量子力学中, 坐标和动量的取值是连续变化 的 ; 角动量的取值是离散的.
第二章 处理器管理 南通大学电子信息学院 2010 年 9 月. 第二章 处理器管理 2.1 中央处理器 2.2 中断技术 2.3 进程及其实现 2.4 线程及其实现 2.5 Linux 进程和线程 2.6 Windows 2003 进程和线程 2.7 处理器调度 2.8 作业的管理与调度 2.9.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
平行线的平行公理与判定 九年制义务教育七年级几何 制作者:赵宁睿. 平行线的平行公理与判定 要点回顾 课堂练习 例题解析 课业小结 平行公理 平行判定.
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
1 第 7 章 存储过程、触发器和程序包 在很多时候,都需要保存 PL/SQL 程序块,以便 随后可以重新使用。这也意味着,程序块需要一个名 称,这样需才可以调用或者引用它。命名的 PL/SQL 程序块可被独立编译并存储在数据库中,任何与数据 库相连接的应用程序都可以访问这些存储的 PL/SQL 程序块。
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
LOGO s 数控机床故障诊断与维修. 子项目 8 掌握 M 、 T 代码的工作原理并进行控制 冷却、转速、刀库等 。 任务 8.3 编制斗笠式刀库换刀 PLC 程序,排除故障.
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
名探柯南在侦查一个特大盗窃集团过程 中,获得藏有宝物的密码箱,密码究竟 是什么呢?请看信息: ABCDEF( 每个字 母表示一个数字 ) A :是所有自然数的因数 B :既有因数 5 ,又是 5 的倍数 C :既是偶数又是质数 D :既是奇数又是合数 EF :是 2 、 3 、 5 的最小公倍数.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
请同学们仔细观察下列两幅图有什么共同特点? 如果两个图形不仅形状相同,而且每组对应点所在的直线 都经过同一点, 那么这样的两个图形叫做位似图形, 这个点叫做位 似中心.
超星数字图书馆 一、页面的使用 进入数字图书馆网页 下载超星阅读器 查找图书.
企业产品标准信息公共服务平台 操作介绍 目录 一 、系统架构介绍 二 、企业产品标准自我声明填报系统 三 、企业产品标准公示系统.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
荆门市总工会会员信息采集系统 操作培训 融建信息技术有限公司 肖移海 QQ群号:
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
“ 百链 ” 云图书馆. 什么是百链云图书馆?1 百链云图书馆的实际效果?2 百链云图书馆的实现原理?3 百链云图书馆的价值?44 图书馆要做什么?55 提 纲.
参考文献管理软件. 常见参考文献管理软件 : 中文 : CNKI E-learning (目前免费) NoteExpress NoteFirst 英文: Refworks Endnote (网络版免费) Mendeley……
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
U niversity of S cience and T echnology of C hina VxWorks 及其应用开发 陈香兰 年 7 月.
张勤 人大报刊复印资料 专题全文数据库 简 介简 介 《人大报刊资料全文数据库》是中国人民大 学书报资料中心与北京博利群电子信息有限 公司联合开发研制的大型数据库光盘。它涵 盖面广、信息量大、分类科学、筛选严谨、 结构合理,是国内最具权威的社会科学、人.
人 有 悲 欢 离 合, 月有阴晴圆缺。月有阴晴圆缺。 华师大版七年级数学第二册 海口市第十中学 数学组 吴锐.
§5.6 利用希尔伯特 (Hilbert) 变换 研究系统的约束特性 希尔伯特变换的引入 可实现系统的网络函数与希尔伯特变换.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
韩文数据库使用说明 鲁锦松. 主要内容 一、为什么要用数据库 二、怎样利用中文数据库 三、怎样利用韩文数据库.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
SCI 数据库检索练习参考 本练习完全依照 SCI 数据库实际检索过程而 实现。 本练习完全依照 SCI 数据库实际检索过程而 实现。 练习中,选择了可以举一反三的题目,读 者可以根据题目进行另外的检索练习,如: 可将 “ 与 ” 运算检索改为 “ 或 ” 、 “ 非 ” 运算检索 等等。 练习中,选择了可以举一反三的题目,读.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

Linux 操作系统分析 主讲:陈香兰 助教:贾永泉、毛熠璐 (西区电三 421 ) Autumn 2007

系统调用

Linux Operating Systems Analysis3 系统调用的意义 操作系统为用户态进程与硬件设备进行交互提 供了一组接口 —— 系统调用 把用户从底层的硬件编程中解放出来 极大的提高了系统的安全性 使用户程序具有可移植性

Operating Systems Analysis4 API 和系统调用 应用编程接口 (application program interface, API) 和系统调用是不同的 API 只是一个函数定义 系统调用通过软中断向内核发出一个明确的请求 Libc 库定义的一些 API 引用了封装例程 (wrapper routine ,唯一目的就是发布系统调 用 ) 一般每个系统调用对应一个封装例程 库再用这些封装例程定义出给用户的 API

Operating Systems Analysis5 不是每个 API 都对应一个特定的系统调用。 首先, API 可能直接提供用户态的服务 ( 比如一些数 学函数 ) 其次,一个单独的 API 可能调用几个系统调用 不同的 API 可能调用了同一个系统调用 返回值 大部分封装例程返回一个整数,其值的含义依赖于 相应的系统调用 -1 在多数情况下表示内核不能满足进程的请求 Libc 中定义的 errno 变量包含特定的出错码

Operating Systems Analysis6 系统调用程序及服务例程 当用户态进程调用一个系统调用时, CPU 切换 到内核态并开始执行一个内核函数。 在 Linux 中是通过执行 int $0x80 这条汇编语言来执 行系统调用的,这条汇编指令产生向量为 128 的编 程异常 传参: 内核实现了很多不同的系统调用,进程必须传 递一个名为系统调用号的参数来指明需要调用 的系统调用, eax 寄存器就用作这个目的

Operating Systems Analysis7 所有的系统调用返回一个整数值。这里的返回 值与封装例程返回值的约定是不同的。 正数或 0 表示系统调用成功结束 负数表示一个出错条件,此时这个负值将要存放在 errno 变量中返回给应用程序。内核没有设置或使 用 errno 变量,封装例程在系统调用返回取得返回 值之后设置这个变量

Operating Systems Analysis8 系统调用处理程序也其他异常处理程序的结构 类似,执行下列操作 在进程的内核态堆栈中保存大多数寄存器的内容 ( 即保存恢复进程到用户态执行所需要的上下文 ) 调用名为系统调用服务例程的相应的 C 函数来处理 系统调用 通过 ret_from_sys_call() 从系统调用返回

Operating Systems Analysis9 应用程序、封装例程、系统调用处理程序及系统调用 服务例程之间的关系

Operating Systems Analysis10 为了把系统调用号与相应的服务例程关联起来, 内核利用了一个系统调用分派表 (dispatch table) 。 这个表存放在 sys_call_table 数组中, sys_call_table 有 NR_syscalls 个表项 ( 通常是 256) :第 n 个表项 对应了系统调用号为 n 的服务例程的入口地址的指针 观察 sys_call_table

Operating Systems Analysis11 初始化系统调用 内核初始化期间调用 trap_init() 函数建立 IDT 表中向量 128 对应的表 项,语句如下: trap_init set_system_gate(0x80,$system_call);system_call 该调用把下列值存入这个系统门描述符的相应字段 : segment selector 内核代码段 __KERNEL_CS 的段选择符 offset 指向 system_call() 异常处理程序的入口地址 type 置为 15 。表示这个异常是一个陷阱,相应的处理程序不禁止 可屏蔽中断 DPL( 描述符特权级 ) 置为 3 。这就允许用户态进程访问这个门,即在用户程序中使 用 int $0x80 是合法的

Operating Systems Analysis12 system_call() 函数

Operating Systems Analysis13 参数传递 系统调用也需要输入输出参数,例如 实际的值 用户态进程地址空间的变量的地址 甚至是包含指向用户态函数的指针的数据结构的地址 system_call 是 linux 中所有系统调用的入口点,每个系 统调用至少有一个参数,即由 eax 传递的系统调用号 一个应用程序调用 fork() 封装例程,那么在执行 int $0x80 之 前就把 eax 寄存器的值置为 2( 即 __NR_fork) 。 这个寄存器的设置是 libc 库中的封装例程进行的,因此用户 一般不关心系统调用号

Operating Systems Analysis14 很多系统调用需要不止一个参数 普通 C 函数的参数传递是通过把参数值写入堆栈 ( 用 户态堆栈或内核态堆栈 ) 来实现的。但因为系统调 用是一种特殊函数,它由用户态进入了内核态,所 以既不能使用用户态的堆栈也不能直接使用内核态 堆栈 用户态堆栈 用户态 C 函数内核态堆栈内核态 C 函数

Operating Systems Analysis15 在 int $0x80 汇编指令之前,系统调用的参数被写入 CPU 的寄存器。然后,在进入内核态调用系统调用 服务例程之前,内核再把存放在 CPU 寄存器中的参 数拷贝到内核态堆栈中。因为毕竟服务例程是 C 函 数,它还是要到堆栈中去寻找参数的 用户态堆栈 用户态 C 函数内核态堆栈内核态 C 函数 寄存器

Operating Systems Analysis16 回想一下在进入中断和异常处理程序前,在内核态 堆栈中保存的 pt_regs 结构,此时 pt_regs 结构中的 一些寄存器被用来传递参数或者 pt_regs 结构本身 就是参数

Operating Systems Analysis17 参数传递举例 处理 write 系统调用的 sys_write 服务例程声明如下 该函数期望在栈顶找到 fd , buf 和 count 参数 在封装 sys_write() 的封装例程中,将会在 ebx 、 ecx 和 edx 寄存器中分别填入这些参数的值,然后在进入 system_call 时, SAVE_ALL 会把这些寄存器保存在堆栈中,进入 sys_write 服务例程后,就可以在相应的位置找到这些参数 asmlinkage 使得编译器不通过寄存器 (x=0) 而 使用堆栈传递参数

Operating Systems Analysis18 SAVE_ALL Sys_write 需要的参数

Operating Systems Analysis19 传递返回值 服务例程的返回值是将会被写入 eax 寄存器中 这个是在执行 “return” 指令时,由编译器自动完成 的

Operating Systems Analysis20 验证参数 在内核打算满足用户的请求之前,必须仔细的检查所有 的系统调用参数 比如前面的 write() 系统调用, fd 参数是一个文件描述符, sys_write() 必须检查这个 fd 是否确实是以前已打开文件 的一个文件描述符,进程是否有向 fd 指向的文件的写权 限,如果有条件不成立,那这个处理程序必须返回一个 负数

Operating Systems Analysis21 只要一个参数指定的是地址,那么内核必须检查它是否 在这个进程的地址空间之内,有两种验证方法: 验证这个线性地址是否属于进程的地址空间 仅仅验证这个线性地址小于 PAGE_OFFSET 对于第一种方法: 费时 大多数情况下,不必要 对于第二种方法: 高效 可以在后续的执行过程中,很自然的捕获到出错的情况 从 linux2.2 开始执行第二种检查

Operating Systems Analysis22 对用户地址参数的粗略验证 在内核中,可以访问到所有的内存 要防止用户将一个内核地址作为参数传递给内核,这 将导致它借用内核代码来读写任意内存 检查方法: 最高地址: addr+size-1 1 、是否超出 3G 边界 2 、是否超出当前进程的地址边界 对于用户进程:不大于 3G 对于内核线程:可以使用整个 4G

Operating Systems Analysis23 访问进程的地址空间 系统调用服务例程需要非常频繁的读写进程地址 空间的数据

Operating Systems Analysis24 访问进程地址空间时的缺页 内核对进程传递的地址参数只进行粗略的检查 访问进程地址空间时的缺页,可以有多种情况 合理的缺页:来自虚存技术 由于错误引起的缺页 由于非法引起的缺页

Operating Systems Analysis25 非法缺页的判定 在内核中,只有少数几个函数 / 宏会访问用户地址 空间 对于一次非法缺页,一定来自于这些函数 / 宏 可以将访问用户地址空间的指令的地址一一列举 出来,当发生非法缺页时,根据引起出错的指令 地址来定位 Linux 使用了异常表的概念 __ex_table, __start___ex_table, __stop___ex_table

Operating Systems Analysis26 __ex_table 的表项 哪条指令访问了用户地址空间如果这条指令引起了非法缺页,该怎么处理 Fixup 所指向的代码,称为修正代码 通常为汇编代码

Operating Systems Analysis27 缺页异常对非法缺页的处理 在缺页异常 do_page_fault 中,若最后发现是 非法缺页,就会执行下面的操作 假设找到了修正代码,会发生什么事情? 该操作使用引起出错的代码地址在异常表中进行查找,若找到,就返回 相应的修正代码地址

Operating Systems Analysis28 IDT 表, 进入异 常处理 某内核函数 缺页 缺页处理 作为一次故障,要重新执行引起出错的代码 正常情况下,这个 eip 在发生异常时, 由硬件保存到堆栈中 因此,正常情况下,返回此处 非法异常 修改堆栈中的 eip ,指向修正代码 因此,非法缺页时,返回此处 修正代码 异常处理后,返回 eip 指定的位置执行

Operating Systems Analysis29 内核封装例程 系统调用主要由用户态进程使用,但也可以被内 核线程使用。而内核线程是不能使用库函数的, 为了简化相应的封装例程, linux 定义了七个从 _syscall0 到 _syscall6 的一组宏

Operating Systems Analysis30 …

Operating Systems Analysis31

Operating Systems Analysis32 比如下面一些系统调用的封装例程

Operating Systems Analysis33 write() 系统调用 宏展开的代码为:

Operating Systems Analysis34 编译后生成的汇编代码为:

Operating Systems Analysis35 系统调用的返回 参见中断中的返回

Operating Systems Analysis36 中断、异常、系统调用小结 用户态 内核态 IDT 表 中断 异常 系统调用 iretreturn_from_intr return_from_exception return_from_syscall

Operating Systems Analysis37 Project 分析中断、异常和系统调用的代码,提交分析 报告 采用某种方法截获一个中断,例如键盘中断 采用某种方法制造缺页异常 自己编写一个系统调用