操作系统课程设计 中断实现机制.doc

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计 中断实现机制

目 录 一、实验题目……………………………………………………4 二、模块整体功能介绍及主要目标……………………………5 三、头文件的分析………………………………………………10 四、数据结构的分析……………………………………………15 五、函数的分析…………………………………………………18 六、时钟中断(一个特别重要的中断) …………………………23 七、分析体会……………………………………………………27 八、参考文献……………………………………………………28 九、附录:Intel保留的中断号含义………………………………29 一、实验题目 1.1 课程设计题目: 中断实现机制源代码分析 1.2题目具体信息 Linux0.11内核源代码中的中断实现机制的源代码分析,主要涉及以下内容: (1) 操作系统中中断服务的处理过程,原理主要在电子书上的中断机制这部分讲到(即第35页的2.4.1—2.4.5); (2) 硬件中断处理类程序主要包括两个代码文件:asm.s 和traps.c 文件。(即电子书中的第150页的5.4—5.5)asm.s 用于实现大部分硬件异常所引起的中断的汇编语言处理过程。而traps.c 程序则实现了asm.s 的中断处理过程中调用相应的C函数程序,显示出错位置和出错号,然后退出中断。; (3)所包含的几个重要的头文件分别为: #include string.h // 字符串头文件。主要定义了一些有关字符串操作的嵌入函数。 #include linux/head.h // head 头文件,定义了段描述符的简单结构,和几个选择符常量。 #include linux/sched.h /* 调度程序头文件,定义了任务结构task_struct、初始任务0 的数据,还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。*/ #include linux/kernel.h // 内核头文件。含有一些内核常用函数的原形定义。 #include asm/system.h //系统头文件。定义了设置或修改描述符/中断门等的嵌入式汇编宏。 #include asm/segment.h // 段操作头文件。定义了有关段寄存器操作的嵌入式汇编函数。 #include asm/io.h // 输入/输出头文件。定义硬件端口输入/输出宏汇编语句; (4) 外几个硬件中断处理程序在文件system_call.s 和mm/page.s 中实现。 二、模块整体功能介绍及主要目标 当设备执行某个命令时,如“将读取磁头移动到软盘的第42扇区上”,设备驱动程序可以从查询方式和中断方式中选择一种来判断设备是否已经完成此命令。 查询方式意味着需要经常读取设备的状态,一直到设备状态表表明请求已经完成为止。如果设备驱动程序被连接进内核,这时使用查询方式将会带来灾难性后果:内核将在此过程中无所事事,直到设备完成目前的请求。有一种方法可以有效的改善这一弊端,就是通过使用系统定时器,使内核周期性调用设备驱动程序中的某个例程来检查设备状态。使用定时器是查询方式中最好的一种,但更有效的方法是使用中断。 基于中断的设备驱动程序,指的是在硬件设备需要服务时向CPU发一个中断信号,引发中断服务子程序被执行。这样就大大地提高了系统资源的利用率,使内核不必一直等到设备执行完任务后才开始有事可干,而是在设备工作期间内核就可以转去处理其它的事情,收到中断请求信号时再回头响应设备。其中断示意图如下: 其单个进程执行输出的中断时间线路图如下: 其中断处理过程流程图如下: 2.1 硬件对中断的支持 基于中断的驱动程序是需要一定硬件的支持并有相关软件的协调才能完成,一般的PC结构是通过两片8259A的级联来对各个硬件的中断提供支持的。基结构如下图。 8259A在初始化的时候,可以设定其工作方式和各个中断的优先级,可以屏蔽某些中断,同时也可以设定中断嵌套的方法。也就是说可以非常方便和灵活地控制各个设备的中断。上图给出了两个级连的中断控制器,每个控制器都有一个中断屏蔽寄存器,寄存器的每一位和一个中断对应。如果将此寄存器中某一位置位,就屏蔽掉了对应的中断请求,将对应位置0表示清除屏蔽。但是不幸的是中断屏蔽寄存器是只写的,所以无法读取写入的值勤。这也意味着Linux必须将写入屏蔽寄存器的值保存起来,在开中断和屏蔽中断的时候修改这些保存值,同时将新的屏蔽码写入寄存器中。 当某一设备需要服务时会通过中断控制器向CPU发送一个脉冲信号,CPU接到这个脉冲信号后不通过回送一个ACK信号通知中断控制器将中断号放到数据线上,然后CPU根据中断号去启动中断服务子程序。 2.2 Linux对中断的管理 Linux内核为了将来自硬件设备的中断传递到相应的设备驱动程序,在驱

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档