- 1、本文档共90页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统.ppt
xlanchen@2007.6.18 Embedded Operating Systems 嵌入式操作系统 陈香兰xlanchen@ /~xlanchen Spring 2007 中国科学技术大学计算机系 上周一 一些基本概念 内存寻址 上周二 进程描述符 进程切换 进程的创建和删除 进程调度 本次课 中断/异常 系统调用 中断和异常 xlanchen@2007.6.18 为什么会有中断 内核的一个主要功能就是处理硬件 处理器速度一般比外设快很多 内核必须处理其他任务,只有当外设真正完成了准备好了时CPU才转过来处理外设 也可以用轮询的方式来处理,但显然效率不高 中断机制就是满足上述条件的一种解决办法 主要内容 中断信号的作用和中断信号处理的一般原则 I/O设备如何引起CPU中断 x86 CPU如何在硬件级处理中断信号 Linux内核中软件级中断处理及其数据结构 中断和异常 中断(广义)会改变处理器执行指令的顺序,通常与CPU芯片内部或外部硬件电路产生的电信号相对应 中断——异步的:由硬件随机产生,在程序执行的任何时候可能出现 异常——同步的:在(特殊的或出错的)指令执行时由CPU控制单元产生 我们用“中断信号”来通称这两种类型的中断 中断信号的作用 中断信号提供了一种特殊的方式,使得CPU转去运行正常程序之外的代码 比如一个外设采集到一些数据,发出一个中断信号,CPU必须立刻响应这个信号,否则数据可能丢失 当一个中断信号到达时,CPU必须停止它当前正在做的事,并且切换到一个新的活动 为了做到这这一点,在进程的内核态堆栈保存程序计数器的当前值(即eip和cs寄存器),并把与中断信号相关的一个地址放入进程序计数器 中断信号的处理原则 快! 当内核正在做一些别的事情的时候,中断会随时到来。无辜的正在运行的代码被打断 中断处理程序在run的时候可能禁止了同级中断 中断处理程序对硬件操作,一般硬件对时间也是非常敏感的 内核的目标就是让中断尽可能快的处理完,尽其所能把更多的处理向后推迟 上半部分(top bottom)和下半部分(half bottom) 允许不同类型中断的嵌套发生,这样能使更多的I/O设备处于忙状态 尽管内核在处理一个中断时可以接受一个新的中断,但在内核代码中还在存在一些临界区,在临界区中,中断必须被禁止 中断上下文 中断上下文不同于进程上下文 中断或异常处理程序执行的代码不是一个进程 它是一个内核控制路径,代表了中断发生时正在运行的进程执行 作为一个进程的内核控制路径,中断处理程序比一个进程要“轻”(中断上下文只包含了很有限的几个寄存器,建立和终止这个上下文所需要的时间很少) 中断上下文举例 分析A,B,C,D在互相抢占上的关系 假设: 2个interrupt context,记为A和B 2个process,记为C和D 1, 假设某个时刻C占用CPU运行,此时A中断发生,C被A抢占,A得以在CPU上执行。 由于Linux不为中断处理程序设置process context,A只能使用 C的kernel stack作为自己的运行栈 2 ,无论如何,Linux的interrupt context A绝对不会被某个线程C或者D抢占!! 这是由于所有已经启动的interrupt contexts,不管是interrupt contexts之间切换,还是在某个interrupt context中执行代码的过程,决不可能插入scheduler调度例程的调用。 除非interrupt context主动或者被动阻塞进入睡眠,唤起scheduler,但这是必须避免的,危险性见第3点说明。 3 ,关于第2点的解释:首先,interrupt context 没有process context,如果被 某个进程抢占之后就没法恢复到原来的interrupt context下了,这即损害了A的利益也污染了C的kernel stack。 其次,如果interrupt context A由于阻塞或是其他原因睡眠,外界对系统的响应能力将变得不可忍受 4 ,那么interrupt context A和B的关系又如何呢? 由于可能在interrupt context的某个步骤打开了CPU的IF flag标志,这使得在A过程中,B的irq line已经触发了PIC,进而触发了CPU IRQ pin,使得CPU执行中断B的interrupt context,这是中断上下文的嵌套过程。 5,通常Linux不对不同的interrupt contexts设置优先级,这种任意的嵌套是允许的 当然可能某个实时Linux的patch会不允许低优先级的interrupt context抢占高优先级的interrupt contex
文档评论(0)