Linux 操作系统分析 中国科学技术大学计算机系 陈香兰( 0512 - 87161312 ) 助教:裴建国、冯晓静 Autumn 2008.

Slides:



Advertisements
Apresentações semelhantes
Story of Love & Miracle Se você acha que vai perder seu tempo para ler isso, está muito enganado. Vai se emocionar e pode até chorar. História verdadeira.
Advertisements

A avaliação do desempenho... 工作評分 … O dono de um talho foi surpreendido pela entrada de um cão dentro da loja. 肉檔老闆看見有頭狗走進來他店 裡來感到詫異. Ele enxotou-o mas.
Texto Bíblico 提摩太後書 2:3-6 2 Timóteo 2:3-6.
Se você acha que vai perder seu tempo para ler isso, está muito enganado. Vai se emocionar e pode até chorar.?História verdadeira e emocionante.? 如果您以为阅读本文会浪费时间,
我神真偉大 QUÃO GRANDE ÉS TU.
REFLEXÕES SOBRE ALFABETIZAÇÃO
UM PC 客户端简洁操作指导 青岛英特沃克网络科技有限公司 Qingdao IntWork NetTec Co.,Ltd.
Se você acha que vai perder seu tempo para ler isso, está muito enganado. Vai se emocionar e pode até chorar. História verdadeira e emocionante. Se.
Por Nessa vida aprendi que se aprende errando. 在生活中,有時“犯錯”才 能讓你真正學會。
“ Uma moça estava a espera de seu vôo, na sala de embarque de um grande aeroporto. 話說有位姑娘在機場 候機大堂等候上機.
SEMINÁRIO ECONÔMICO BRASIL - JAPÃO Comissão de Relações Exteriores e de Defesa Nacional da Câmara dos Deputados Embaixada do Japão do Brasil Cãmara de.
Sim 模拟器文件依赖关系 Makefile 的目标 All 包括 sim-fast , sim-safe , sim-eio , sim- bpred , sim-profile , sim-cheetah , sim- cache , sim-outorder 。
北极光 A Aurora Boreal 音乐 《布兰诗歌》序曲“命运女神” 作曲 卡尔·奥尔夫于1936年 演奏 波斯登交响乐团
操作系统原理 principles of operating systems 年 8 月孟静制作 版权所有 2 作者申明 本版内容的著作权为作者所有。因为教学目的使 用本版内容时,请注明所用资料来自本网站或由 本作者发送,并保留作者版权标记 “  2007 孟 静制作 版权所有 ” 。将本版内容用于其他目的前,
情報法 第7講 知的財産とネットワーク (1) 著作権保護とP2Pネットワーク、 オープンソース.
Internet Explorer 8 開発者向け技術概要 2009年3月22日 野良 info [at] poop.jp
东南大学 生物科学与医学工程系 科研项目及科研成果 信 息. 本系简介 院士 1 人 教授 13 人 副教授 17 人 教育部重点实验室 科研项目 科研成果 人才培养 ( 博士后,博士,硕士 )
在網頁中執行Java 程式.
年级大会( ) 最后十天 …. 1. 离校手续有哪些? 1. 学院手续:( 1 )学生证注销( 2 )党(团)关系转 递 2. 学校部门手续:( 1 )图书馆( 2 )财务处( 3 )教 材科 3. 个人重要材料手续:报到证的办理即户口迁移证的 办理即档案材料的转递(非常重要)
貝氏估計與WinBUGS 在社會科學的應用
サーバーのパスワード変更. Windows Vista の事前設定 ① [コントロールパネル]を開く ② [プログラム]を選択 ③ 開いた画面の[プログラムと機能]を選択 ④ 画面左のタスク欄の [ Windows の機能の有効化または無効化]を 選択 ⑤ 表示された機能一覧内の □ Telnet.
组织学与胚胎学 Histology and Embryology 采用教材:《组织学与胚胎学》 6 版 学时安排:讲课 36 学时;实习 36 学时 实习必备: 1. 组织学与胚胎学实习指导 2. 组织胚胎学实习图谱 主讲教师:蒋杞英.
Virus Term Project 組員:沈 峻 陳晁偉.
RJ-iTop TM ( 安拓 · 榕基 ) 网络隐患扫描系统 RJ-iTop TM 网络隐患扫描系统 技术白皮书幻灯片 国家 863 计划成果转化产品 福建榕基软件开发有限公司.
計算機概論(一) 課程簡介與說明 李明山
Linux 的虚拟文件系统. 11/03/09 嵌入式 OS 2/31 提纲  虚拟文件系统 VFS 的作用  VFS 的数据结构  文件系统类型  文件系统安装  路径名查找  VFS 系统调用的实现  文件加锁.
奧運聖火與火炬傳遞 浸信會沙田圍呂明才小學 全港小學生.關心祖國.齊顯愛國情(第三屆)比賽 延續賽 北京奧運專題報告
96學年度專題製作競賽 非揮發性記憶體薄膜特性之研究 指導老師:許正興 博士 大學電機四甲 U 何毅達
第二章 控制系统的数学描述 第一节 控制系统的数学模型 第二节 常微分方程的数值解法. 第一节 控制系统的数学模型 控制系统的数学模型在控制系统的研究中有着 相当重要的地位,要对系统进行仿真处理,首 先应当知道系统的数学模型,然后才可以对系 统进行模拟。同样,如果知道了系统的模型, 才可以在此基础上设计一个合适的控制器,使.
1.5 流行操作系统简介 Windows 操作系统 UNIX 操作系统家族 自由软件和 Linux 操作系统 IBM 系列操作系统 其他流行操作系统.
网站日常维护经验谈 化学化工学院 邱志金( Mstar) 星期四 主 要 内 容主 要 内 容主 要 内 容主 要 内 容.
許翠婷 程式設計 Visual Basic 6.0 許翠婷
第 9 章 ASP 程序调试与 错误处理 无论计划多么精密、经验多么丰富,脚 本错误 (bug) 可能在最初就使 ASP 服务器端脚 本无法正确运行。也就是说调试,即查找和 纠正脚本错误,对开发一个成功的和强健的 ASP 程序是非常重要的。 无论计划多么精密、经验多么丰富,脚 本错误 (bug) 可能在最初就使.
再續 : 癌症淺談 飲食營養篇 身心照顧篇.
三维观察的基本观念 形体表示 Objects Representation 三维建模 Modeling
邊界元素法 - 期末報告 C.W. Lin BEM formulation for reinforced plates  Engineering Analysis with Boundary Elements, Volume 33, Issue 6, June 2009, Pages.
第五章 觀光價值. 第一節 觀光事業對經濟及 社會的衝擊力 學者關心觀光事業對國家、地區、島嶼或 社區的經濟力有影響力。但是同時也會帶 來反制力。 利益的分通常會有不平均的現象。甚至, 觀光客會使當地帶來擁擠,污染、噪音、 干擾等情事。 觀光事業也可能帶來地方額外的開銷和負 擔。例如:都增加醫院、道路、水道等公.
《计算机网络》课件 制作人:谢希仁 《高等计算机网络》考核说明 张书钦
IA32 CPU MASM615 程式初體驗 程式初體驗 程式初體驗. 程式之組成  程式樣式 程式樣式  輸出功能  簡易資料輸出 輸出功能  簡易資料輸出 輸出功能  簡易資料輸出  輸入功能  鍵盤輸入 輸入功能  鍵盤輸入 輸入功能  鍵盤輸入  算數處理  基本程式碼.
第四章 计算机软件 软件的功能与分类 软件的功能与分类 系统软件 系统软件 通用应用软件 通用应用软件 软件开发 软件开发 计算机软件的法律保护 计算机软件的法律保护 计算机病毒 计算机病毒.
目次 セキュリティ ウイルス 不正アクセス 個人情報の保護 名誉毀損および侮辱行為 猥褻物の扱いに学ぶこと セキュリティを高めるために 暗号 © 外川@大阪大学核物理研究センター この資料に関する全ての著作権を全ての人に許諾しま す。
1 MATLAB 小傳與外觀 MATLAB 小傳 (1) 由 MathWorks 公司於 1984 年推出的數學軟體。 名稱是由「矩陣實驗室」﹙ MATrix LABoratory ) 所合成。 MATLAB 為各種動態系統模擬、數位訊號處理、 科學計算、科學目視等領域的標準程式語言。
影響健康的因素 健康是什麼? 怎麼樣才會更健康?.
图书馆网络基础知识讲座 2009 年 9 月 8 日星期二. 什么叫计算机网络 就是把分布在不同地理区域的计算机与专 门的外部设备用通信线路互联成一个规模 大、功能强的网络系统,从而使众多的计 算机可以方便地互相传递信息,共享硬件、 软件、数据信息等资源。通俗来说,网络 就是通过电缆或无线通讯等互联的计算机.
計概報告 ^~ 個人數位助理 PDA~^ 組員 : 羅秋盈 T495A032~ 張怡雲 T495A017~ 許凱婷 T495A036~
CloudAlive Fresh Everyday 让每台电视都成为云电视 让每个家庭尽享云服务 让每天都有心动感觉! ──10 大频道 海量应用 ── CloudAlive TV.
高中物理教師進階研習教材 宇宙學簡介 高文芳 交大物理所 2006/2/9-10
血红蛋白作为催化剂 高灵敏测定过氧化氢 报告人 : 刘立宇. 本文采用血红蛋白作为过氧化物酶 的替代物,用于催化 H 2 O 2 氧化对甲 基酚的反应体系。从而建立了高灵敏 测定痕量 H 2 O 2 的荧光分析法。
看昆蟲,學英語 鄭惠君 Joyce 曾得恩 Edward 白潔梵 Carol
第 5 章 螢幕的輸出. 本章提要 巨集 MACRO INCLUDE 與 DOS.H BIOS 的字元 I/O 流程控制假指令.
Linux 操作系统分析 中国科学技术大学计算机系 陈香兰( 0512 - ) Autumn 2009.
条码打印机 驱动安装及使用说明 北京华海智邦科技开发有限公司. 驱动安装 找到条码打印机驱动文件夹 把条码打印机驱动文件夹 拷到除 C 盘以外的其他盘里面,我已将打印 机驱动拷到 E 盘进行操作 接入条码打印机电源线和 USB 接口数据线 把条码打印机数据线的另外一边接在电脑主机的 USB 接口上,电源线.
低碳中秋小貼士 Algumas dicas para reduzir a emissão de carbono durante as festividades de Chong Chao (Bolo Lunar).
INTRODUÇÃO BREVE DA UNIVERSIDADE DE PODER ELÉTRICO DO NORTE DA CHINA(NCEPU)---O BERÇO DE ENGENHEIROS DE PODER ELÉTRICO DA CHINA 报告人:华北电力大学 国际合作处副处长 刘健夫.
电 磁 兼 容 Compatibilidade Eletromagnética
高压与特高压直流输电 外绝缘技术 (第七讲)
特高压直流输电 §4 特高压直流输电概念 4 Conceito de transmissção em corrente contínua em ultra alta tensão  特高压直流输电 指 ±800kV 及以上电压等级的直流输电工程及相关技术。
A prevenção de raio das linhas de
Manutenção e teste de linha de transmissão UHVDC
高压与特高压直流输电 外绝缘技术 ( 第五讲 ) Transmissão em Corrente Contínua em Alta ou Ultra-Alta Tensão Tecnologia de Isolamento Externo (Lição 5) 中国电力科学研究院 2009 年 11 月.
North China Electric Power University 4. 特高压直流输电线路带电作业 Trabalho em tensão de linha de transmissão UHVDC 王胜辉 Wang Shenghui.
2000 中国嵌人式系统大会 中国嵌人式系统大会 嵌人式实时操作系统 现状和未来 何小庆
中国电网概况 Breve Introdução da Rede Elétrica da China
GF2000 系列 指紋門禁 / 差勤系統 公司簡介 公司簡介 成功案例 成功案例 功能與特性 功能與特性 指紋機連線圖說 指紋機連線圖說.
IMMIGRANTS IN SÃO PAULO What foreign professionals have to say about living in the largest city of Brazil International Metropolis Conference, Tampere,
Electric Energy Research Center - CepelBaoding, China - September 2015 Centro de Pesquisas de Energia Elétrica Seminário China-Brasil: Isolação Externa,
善豐花園事故 緊急安置及支援計劃 O INCIDENTE DO EDIFÍCIO “SIN FONG GARDEN” PROGRAMA DE EMERGÊNCIA DE ACOLHIMENTO E DE APOIO.
特高压直流输电 Transmissção em Corrente Contínua em Ultra Alta Tensão 梁海峰 电力工程系电力教研室 华北电力大学 Liang Haifeng Departamento de Engenharia.
“ Uma moça estava a espera de seu vôo, na sala de embarque de um grande aeroporto. 話說有位姑娘在機場候機大堂等候上機.
Transcrição da apresentação:

Linux 操作系统分析 中国科学技术大学计算机系 陈香兰( 0512 - ) 助教:裴建国、冯晓静 Autumn 2008

系统调用 中国科学技术大学计算机系 陈香兰( 0512 - ) 助教:裴建国、冯晓静 Autumn 2008

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

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

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

OS Analysis6/37 系统调用程序及服务例程  当用户态进程调用一个系统调用时, CPU 切换到 内核态并开始执行一个内核函数。  在 Linux 中是通过执行 int $0x80 来执行系统调用的, 这条汇编指令产生向量为 128 的编程异常 (回忆, trapinit 中系统调用入口的初始化)  传参: 内核实现了很多不同的系统调用, 进程必须指明需要哪个系统调用,这需要传递一 个名为系统调用号的参数  使用 eax 寄存器

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

OS Analysis8/37  系统调用处理程序也和其他异常处理程序的结构 类似  在进程的内核态堆栈中保存大多数寄存器的内容 ( 即保存恢复进程到用户态执行所需要的上下文 )  调用相应的系统调用服务例程处理系统调用 sys_xxx  通过 ret_from_sys_call() 从系统调用返回

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

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

OS Analysis11/37 初始化系统调用  内核初始化期间调用 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 是合法的

OS Analysis12/37 system_call() 函数

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

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

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

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

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

OS Analysis18/37 SAVE_ALL Sys_write 需要的参数

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

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

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

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

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

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

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

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

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

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

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

OS Analysis30/37 …

OS Analysis31/37

OS Analysis32/37  比如下面一些系统调用的封装例程

OS Analysis33/37 write() 系统调用 宏展开的代码为:

OS Analysis34/37  编译后生成的汇编代码为:

OS Analysis35/37 系统调用的返回  参见中断中的返回

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

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