Linux 操作系统分析 中国科学技术大学计算机系 陈香兰( 0512 - 87161312 ) Autumn 2010.

Slides:



Advertisements
Similar presentations
CNKI 知识资源总库 应用培训 内容要点 一、知网及产品体系 二、新版检索平台 三、基础功能演示 四、应用案例演示 五、实际操作.
Advertisements

模板的使用 教育学 江西教育学院教育系 冯芳 2012 - 10. 第二章 教育学的产生和发展 第一节 教育学的研究对象和任务 第二节 教育学的产生与发展 第三节 学习教育学的意义与方法.
定 格 入 格 破 格 —— 新诗仿写复习训练 仿照下列句子,再把 “ 人生 ” 比喻成 “ 大海 ”“ 天空 ” , 造两个句子。 如果说人生是一首优美的乐曲,那么痛苦则 是其中一个不可或缺的音符。 参考答案: 1 、如果说人生是一望无际的大海,那么挫折则 是其中一个骤然翻起的浪花。 2 、如果说人生是一片湛蓝的天空,那么失意则.
县级实施妇女儿童发展纲要 的途径和方法 —— 制定和实 施县级跨部门行动计划 国务院妇儿工委办公室 儿童处 2014 年 6 月.
用 藥 安 全 用 藥 安 全 護 理 師 張 嘉 芬. 前 言 前 言 正確用藥的方法 藥袋上的秘辛 為了減少重大疾病或是醫療處理、 用藥不當的相關事件發生。
阿尔伯特亲王 阿尔伯特亲王纪念碑 维多利亚女王夫妇 维多利亚女王一家 建造水晶宫 水晶宫初建时的照片.
© 2001 孟静制作 版权所有 第二章 CPU 管理和进程、线程管理 2.1 CPU 管理概述 2.2 进程管理 2.3 进程模型实例分析 :UNIX 早期版本的 CPU 管理 子系统 ( 进程模型 ) 2.4 处理机管理实例分析 (2):linux CPU 管理(进程 模型) 2.5 线程模型.
第 3 章操作系统基础 3.1 操作系统概述 3.2 操作系统的功能模块 3.3 典型操作系统概述.
进 程. “ 程序 ” 和 “ 进程 ” 进程是 OS 对 CPU 执行的程序的运行过程的一种抽象。进程有自 己的生命周期,它由于任务的启动而创建,随着任务的完成(或 终止)而消亡,它所占用的资源也随着进程的终止而释放。 Linux 内核中通常把进程称为任务,每个进程主要通过一个称为进程描 述符(
嵌入式操作系统 陈香兰 Spring 2006 中国科学技术大学计算机系.
嵌入式操作系统 陈香兰 Spring 2007 中国科学技术大学计算机系.
梦想启航 ——大学生活与职业规划专题讲座.
河北保定外国语学校 高三家长会.
第 20 章 檢視系統資訊.
党的十八届四中全会 依法治国精神解读. 党的十八届四中全会 依法治国精神解读 一、十八届四中全会概况 中国共产党第十八届中央委员会第四次全体会议,于2014年10月20日至23日在北京举行。 全会审议通过了《中共中央关于全面推进依法治国若干重大问题的决定》。
以信息化带动教育现代化,打造教育的“南山质量”
翰林版國文第三冊第六課 《迢迢牽牛星》 設計者:郭宜幸.
证券市场法律制度与监督管理 作者:张学亮.
个体税收征管政策讲解 浏阳市地方税务局.
封面 2015易驾考最新分享: 科目二考试方法秘诀 文章来源:易驾考官网.
基于行业的 企业技术创新信息保障体系研究 刘 华 博士 中国科学技术信息研究所.
研商「99年宜蘭縣相關單位同步滅鼠工作」執行事宜
最新消息插播! 意見反應: 我是貴校學生的家長,請問貴校該給工讀生的薪水何時才肯發呢?現在已經是十一月中了,九月十月的薪水還沒入帳我們不知道是卡在哪個環節,但貴校是否知道有多少同學需要這筆錢去過生活、繳納房租? …………………………………………………….? 請各位報帳同仁、專兼任助理們務必養成平時定期清帳的習慣,不要等到年終或結案前才開始緊張。
第四讲 1949—1991年的中苏关系 及其经验教训.
“鼠标加水泥”的百货公司——武汉中百 朱巧巧 陆嘉怡 田泽宇.
我怀念的乡村记忆 陈秀华 社会工作0841.
沟通技巧 主讲:涂育俊.
Word高级应用——制作毕业论文 Word高级应用——制作毕业论文 6..
2-何鍇卉 14-曹凱茹 19-陳亮妤 21-陳思瑜 37-蔡庭瑜 39-賴俞亨 40賴思恩
第二章 项目一:企业厂区与车间平面设计 1.
UNIX的程序與工作控制 程序的定義與特性 程序的建立 相關指令 背景執行 調整程序優先權 signal與kill 工作控制
香港普通話研習社科技創意小學 周順強老師.
第7章 行政监督.
營建自動化 -營建管理資訊化 授課老師:劉俊杰 副教授 中華民國89年9月27日.
第8章 机床操作 主讲:臧红彬 博士.
教務業務(排課、試務)報告 報告人:林淑芬 轉分機 1611 報告業務:排課、編班、考試(含補考) 、推廣課程開班計畫 2016年3月12日.
申請土地徵收注意事項 內政部地政司 邱于蓉.
第三章 人类社会及其发展规律.
第一章 引论 1.1操作系统的概念 计算机系统: 计算机硬件 计算机软件 计算机硬件:运算器、控制器、存储器、输入设备和 输出设备
寫 作 教 學 6 電腦與我 時代改變,科技進步,電腦成為日常生活不可或缺的設備。我是二十一世紀的E世代少年,一隻滑鼠在手,樂趣無窮。
世界看遍 终归回到纯水岸 波托菲诺08年终总结. 世界看遍 终归回到纯水岸 波托菲诺08年终总结.
也許你很疑惑: 最近升官的同事,專業能力又沒你強! 情場得意的朋友,長的又沒你帥或美! 小曹要交新朋友,為什麼就是比較簡單!
行動研究就是一種行動性的研究,由行動者來進行研究,而不是由外於行動領域的學者與與科學家來進行,研究的問題也取自行動。
中国科学技术大学计算机系 陈香兰(0512- ) Spring 2011
第4章 作業系統的介紹及操作.
Linux Programming – Process & Signal
第2章 Linux概述 2.1 操作系统的功能和分类 2.2 Linux操作系统概述 2.3 Linux的应用现状与前景
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
1-1-1作業系統的功能 提供使用者操作介面 提供程式執行環境 控制輸入\輸出程序 分配系統資源 管理與維護磁碟中的檔案
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
詩文的形成 有意義的字詞 句子 段落 一首詩文的形成,是由有意義的字詞組成句子,再由句子組成段落。
一、選擇題 ( )1、下列敘述何者錯誤? (A)由彈弓射出的石子具有能量 (B)一物體具有作功的本領,則此物具有能 量 (C)被壓縮的彈簧具有能量,被拉長的彈簧 則不具有能量 (D)將地面的重物,吊到高處則此物具有能 量。 C.
实验一、进程控制 一、实验目的 1、加深对进程的理解,进一步认识并发执行的实质; 2、分析进程争用资源现象,学习解决进程互斥的方法;
7.1.1 设备管理的功能(P95) 分配设备:按设备的不同类型和操作系统选用的算法分配。包括分配相应的通道、设备控制器以及对未分配到的任务或怍业进行排队等; 控制和实现真正的输入输出操作。包括通道程序控制、启动设备、及时响应及处理中断讯号等; 对输入输出缓冲区进行管理。例如逻辑名的管理,多个缓冲区的分时以及串并行操作,同类多个外部设备的均衡工作,避免“忙的忙”和“闲的闲”;
Linux内核源代码导读 中国科学技术大学计算机系 陈香兰(0551- )
作業系統 第三章 作業系統結構.
操作系统的结构和硬件支持 第2章 操作系统的结构和硬件支持.
作業系統 第三章 作業系統結構.
李元金 计算机与信息工程学院 第 14 讲 存储器管理(3) 李元金 计算机与信息工程学院 1/
第 7 章 进程间的通信.
程序管理 蘇偉順助教.
喜雨亭記 國二甲 S 陳姿婷.
架构师成长感悟 吴隆烽
Computer Science & Information Management
全台灣最美的日出好美…好美… 這就是傳說中的潑墨二寮,耳聞她的日出有如國畫般 所以稱為潑墨二寮
统计学 第7章 参数估计 教师:张文利.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2009
手机淘宝“变形”产品—微淘 操作流程指南 (内测版).
技專校院多元入學管道 國立臺北科技大學 教務處 涂雅筑.
教務業務(排課、試務)報告 報告人:林淑芬 2014年9月06日 教務業務報告.
Presentation transcript:

Linux 操作系统分析 中国科学技术大学计算机系 陈香兰( 0512 - ) Autumn 2010

Linux 中的信号

Linux OS analysis3/58 信号  信号在最早的 Unix 系统中就已经被引入了,用于 在用户态进程间通信。  内核也用信号通知进程系统所发生的事情

Linux OS analysis4/58 信号  信号是很短的消息  标准信号  标准信号没有给参数、消息或是其他相随的信息留有 空间  通常使用一个数字来标识一个信号  信号可以被发送到一个进程或一组进程。

Linux OS analysis5/58 软件中断的概念  信号的产生和处理方式跟中断有些相似  信号是典型的异步事件 (当然也有一些事件是同步错误或异常)  大多数产生信号的事件对进程而言是随机出现  进程不可能做轮询来测试某个标志位或者变量来判别是否发生 了一个信号,而是必须告诉内核 “ 在某个信号发生时,应该执行 如下操作 ” ,这点跟中断处理例程相似,所以也不难理解标准信 号不带参数或者是其他的信息  跟硬件中断一样,任何动作,包括终止进程,都只能由接收到 信号的进程来执行,也就是在本进程的上下文中执行

Linux OS analysis6/58 信号的作用  使用信号的两个主要目的是:  让进程知道已经发生了一个特定的事件  强迫进程执行它自己代码中的信号处理程序 很多应用程序提供自己的信号处理程序 系统也会定义一些缺省的信号处理程序

Linux OS analysis7/58 信号的生成  异常  当一个进程出现异常(比如试图执行一个非法指令,除 0 ,浮点 溢出等),内核通过向进程发送一个信号来通知进程异常的发 生  其他进程  一个进程可以通过 kill 或是 sigsend 系统调用向另一个进程或一个 进出组发送信号。一个进程也可以向自身发送信号  终端  某些键盘字符如 ctrl+c 等会向终端的前台进程发送信号

Linux OS analysis8/58  作业控制  发送信号给那些想要读或写终端的后台进程。比如 shell 使用信 号来管理前台和后台进程  配额限制  当一个进程使用超过分配给它的 cpu 时间或是文件大小的限制, 内核发送一个信号给这个进程  通知  一个进程也许要求能被通知某些事件的发生。比如设备已经就 绪等待 I/O 操作  闹钟  定时器产生的信号,由内核发送给进程

Linux OS analysis9/58 Linux/i386 中的部分信号

Linux OS analysis10/58

Linux OS analysis11/58 信号举例: “Ctrl+c” 组合键  假设用户在 console 下按下 “ctrl+c” ,这将产生终端 中断  tty 驱动程序能识别出这个组合键,并向自己的前台进程 发送一个 SIGINT 信号。  当对应进程被调度执行时,它将在上下文切换返回到用 户态时检查到这个信号。  此外,通常前台进程就是被 ctrl+c 中断的 current 进程。当 进程从中断返回时,也会检查到这个信号。  检查到信号后,系统就会让进程执行相应的动作。

Linux OS analysis12/58 信号举例:异常  前面讲过,异常也是通过信号来实现的。  当程序发生除 0 错误或是有非法指令时,将引起一 个内核态的 trap 。  内核 trap 处理程序识别出这个异常并发送合适的信 号到当前进程。  当 trap 处理程序将要返回到用户态时,会检查并发 现信号,进程可能就会被终止。

Linux OS analysis13/58 异常处理程序异常处理程序 异常处理程序发出的信号异常处理程序发出的信号

Linux OS analysis14/58 例如:除 0 错 traps_32.c

Linux OS analysis15/58 又如:用户态访问越界 在 do_page_fault 中: 。。。

Linux OS analysis16/58 与信号相关的系统调用

Linux OS analysis17/58 信号传递的两个不同阶段  信号产生  内核更新进程描述符中跟信号相关的数据结构来表示 一个信号被发送给了这个进程  信号传递  内核强迫目标进程通过以下方式对信号作出反映: 或改变目标进程的执行状态, 或开始执行一个特定的信号处理程序, 或者两者都是

Linux OS analysis18/58 挂起信号  已经产生但还没有传递的信号称为挂起信号。  任何时候,一个进程仅存在给定类型的一个挂起 信号,同一进程同种类型的其他信号不被排队, 只被简单的丢弃。

Linux OS analysis19/58  信号的挂起时间长度往往不可预知,原因在于:  信号通常只被 current 进程传递  进程可以选择阻塞某种信号。 这种情况下,在取消阻塞之前进程将不接收这个信号  当进程执行一个信号处理程序函数时,通常屏蔽相应 的信号,即自动阻塞这个信号直到处理程序结束。因 此,所处理的信号的另一次出现不能中断信号处理程 序

Linux OS analysis20/58 信号的应答方式和响应时机  进程以三种方式对一个信号做出应答 1 ,显式的忽略这个信号 多数信号都可以使用这种方式进行处理。 2 ,执行系统默认的缺省操作,可以是: Terminate :进程被杀死 Dump :进程被杀死,且如果可能,创建包含进程上下文的 可用于调试的 core 文件

Linux OS analysis21/58 Ignore :简单的忽略信号 Stop :进程被停止,状态置为 TASK_STOPPED Continue :如果进程被挂起,则状态置为 TASK_RUNNING 。否则忽略该信号 3 ,捕获信号 为了执行用户希望的对某个事件的处理,可以由用户指定某 个信号的处理函数。

Linux OS analysis22/58 信号的应答方式和响应时机  注意 1 :阻塞 ≠ 忽略  阻塞仅仅推迟了传递的时间  忽略的信号总是被传递,但是没有进一步的操作  注意 2 :有两种信号不可以被显式的忽略、捕获 或阻塞: SIGKILL 和 SIGSTOP 。因为它们向超级 用户提供一种终止或停止进程的可靠的方法

Linux OS analysis23/58 信号的应答方式和响应时机  内核在如下时机检查进程的信号 1 ,从系统调用 / 中断返回到用户态之前,在 ret_from_intr 中执行这个检查 这个检查几乎在每个定时中断时都发生(约 10ms ) 代码在 i386\kernel\entry_32.S 中 2 ,进程从一个可中断的事件醒来后

Linux OS analysis24/58 代码阅读  thread_info 中的相关标志:

Linux OS analysis25/58 Flag 的位定义

Linux OS analysis26/58 信号相关标志位的设置与清除操作的调用情况

Linux OS analysis27/58  下面阅读 Entry_32.S 中部分相关的代码 除这里列出的标志之外的其他所有标志,包括信号挂起

Linux OS analysis28/58 Entry_32.S 中部分相关的代码

Linux OS analysis29/58 重复直到没有信号(或其他)要处理

Linux OS analysis30/58

Linux OS analysis31/58

Linux OS analysis32/58 内核在处理信号时需要注意的地方  记住每个进程阻塞哪些信号  当从内核态切换到用户态时,要检查是否有信号到达进 程  确定是否可以忽略信号。这发生在下列条件都满足时  目标进程没有被另一个进程跟踪  信号没有被阻塞  信号被目标进程忽略  处理这样的信号,即信号可能在进程运行期间的任一时 刻请求把进程切换到一个信号处理函数,并在这个函数 返回以后恢复原来进程的执行

Linux OS analysis33/58 与信号相关的数据结构  在进程描述符中与信号处理相关的字段有: 如果有信号被挂起,就设置这个标志,前面的 Entry_32.S 就根据这个快速判断有无挂起信号, 并根据这个标志调用 do_signal Thread_info 的 flag 信号描述符 被阻塞信号的掩码和临时掩码 记录被挂起的信号 信号处理描述符 信号处理程序备用堆栈的的地址和大小 驱动程序用于阻塞某些信号相关的函数、 参数和掩码

Linux OS analysis34/58

Linux OS analysis35/58  信号位数组 信号个数 Byte Per Word 2 组 ×32 位信号, 第一组 sig[0] 为 32 个标准信号 第二组为实时信号

Linux OS analysis36/58  信号描述符 signal_struct ,用来跟踪挂起的信号  还包括一些其他与信号处理关系并不密切的字段  与信号处理有关的字段包括: 计数器 Wait4() 等待队列 接收信号的线程组中最后一个进程 共享挂起信号

Linux OS analysis37/58  信号处理描述符  Sigaction 数据结构 计数器 各个信号的处理操作

Linux OS analysis38/58  sa_handler ,表示如何处理这个信号,可能的值 包括: 1 , SIG_DFL ,即 0 ,表示执行缺省操作 2 , SIG_IGN ,即 1 ,表示忽略这个信号 3 ,指向一个信号处理程序的指针,表示按照用户指定 的程序处理

Linux OS analysis39/58  sa_flags :一个标志集,指定必须怎样处理信号  sa_mask :指定处理本信号时,应当屏蔽的信号 仅用于 SIGCHLD ,当进程被停止时, 不向父进程发送 SIGCHLD 信号 仅用于 SIGCHLD ,当进程被停止时, 不向创建僵死状态 使用备用栈 带 info 自动的重新开始执行被中断的协调调用 执行信号处理程序时不屏蔽信号 执行信号处理程序后,重新设置缺省操作

Linux OS analysis40/58

Linux OS analysis41/58  挂起信号队列  共享挂起信号队列,信号描述符中的 shared_pending  私有挂起信号队列, pending 指出挂起的信号是什么 被挂起的信号的相 关信息组成的队列 数据结构为 sigqueue

Linux OS analysis42/58 信号的产生  内核通过调用 这几个函数来产生信号。这些函数只是更新目标 进程的进程描述符相关的域。但在条件满足的情 况下它们可以唤醒进程让目标进程接收信号

Linux OS analysis43/58 传递信号  内核在返回到用户态时调用 do_signal() 来处理非 阻塞的挂起信号: 参数: struct pt_regs *regs;//pt_regs 结构,指向当前进 // 程内核态堆栈中保存的寄存器

Linux OS analysis44/58  do_signal() 一位一位的检查当前被挂起的非阻 塞信号,其编号由 dequeue_signal() 返回,对应 于上面介绍的 action 结构中指定的处理方法:  如果是 SIG_IGN (忽略信号)

Linux OS analysis45/58  如果是 SIG_DFL (缺省操作)

Linux OS analysis46/58  如果信号有一个专门的处理程序, do_signal 就调用 handle_signal() 强迫执行该处理程序

Linux OS analysis47/58 Handle_signal  信号处理程序是用户态进程所定义的函数,并且 包含在用户态的代码段中  Handle_signal 运行在内核态,而信号处理程序运 行在用户态  问题: 1 ,必须返回用户态执行信号处理程序 2 ,必须按照原来进入内核的方式返回用户态 3 ,一旦返回用户态,内核堆栈就被清空,如何保存内 核堆栈的内容

Linux OS analysis48/58  Linux 采用的解决办法:  把保存在内核态堆栈中的上下文拷贝到当前进程的用 户态堆栈中  建立好信号处理程序所需的堆栈环境  当信号处理程序运行结束时,调用 sigreturn() 系统调 用把上面保存的内核堆栈的内容再拷贝回内核堆栈  然后正常返回

Linux OS analysis49/58

Linux OS analysis50/58 关于系统调用的重新执行  对于一次系统调用,内核可能无法立即满足  此时,进程通常进入等待状态, TASK_INTERRUPTIBLE 或者 TASK_UNINTERRUPTIBLE  对于前者,进程会因信号而被唤醒,此时系统调 用没有完成  不重新执行  强制重新执行  依赖 SA_RESTART 是否设置。若设置,则重新执行

Linux OS analysis51/58  信号处理的实现是比较复杂的,本课程不再一一 细讲

Linux OS analysis52/58 与信号处理相关的系统调用  kill(pid, sig) 系统调用  发送信号,对应于 sys_kill()  对于 pid 的值 1 ,如果大于 0 ,发送信号给指定的进程 2 ,如果 =0 ,把信号发送给同组的所有进程 3 ,如果 =-1 ,把信号发送给除 0 号、 1 号以及 current 进 程之外的所有进程 4 ,如果小于 -1 ,把信号发送给指定的进程组中的所 有的进程  阅读 sys_kill

Linux OS analysis53/58  sigaction(sig, act, oact) 系统调用  允许用户为信号指定(改变)一个操作,对应于 sys_sigaction()  参数: sig ,指明是哪一个信号 act ,指定新的操作 oact ,可选,用来存放旧的操作  阅读 sys_sigaction

Linux OS analysis54/58  signal(sig, handler) 系统调用  设置信号处理程序为 handler ,对应于 sys_singal()

Linux OS analysis55/58  sigpending() 检查挂起的阻塞信号  Sigsuspend() 把进程设置为 TASK_INTERRUPTIBLE 状态  ……

Linux OS analysis56/58 用户设置信号处理程序举例:

Linux OS analysis57/58 在 copy_signal 中:

Thanks ! The end.