同济大学操作系统L08_M:UNIX中断处理过程源代码分析_第1页
同济大学操作系统L08_M:UNIX中断处理过程源代码分析_第2页
同济大学操作系统L08_M:UNIX中断处理过程源代码分析_第3页
同济大学操作系统L08_M:UNIX中断处理过程源代码分析_第4页
同济大学操作系统L08_M:UNIX中断处理过程源代码分析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、L08_M: UNIX中断处理过程源代码分析1. UNIX 中断响应过程UNIX 外部设备的中断矢量如下表所示。表1:外部设备的中断矢量和总线请求等级外部设备名 电传输出 纸带输入 纸带输出 线频时钟 程序时钟 行式打印机 RK 磁盘中断矢量地址 064 070 074 100 104 200 220中断处理程序地址 klou pcin pcou kwlp kwlp lpou rkio新处理机状态字 br4 br4 br4 br6 br6 br4 br5总线请求级 4 4 4 6 6 4 5设备处理子程序 klxint pcrint pcpint clock clock lpint rkint

2、r关于中断向量和中断处理程序入口的定义在low.s 文件中,如下所示。0500 / low core 0501 0502 br4 = 200 0503 br5 = 240br 定义 0504 br6 = 3000505 0506 0507 . = 0. 0508 br 1f 0509 4 05100511 / trap vectors 0512 trap; br7+0. / bus error 0513 trap; br7+1. / illegal instruction 0514 trap; br7+2. / bpt-trace trap 0515 trap; br7+3. / iot tr

3、ap 0540 . = 200. 0541 lpou; br4 0542 0543 . = 220. 0544 rkio; br5 0545 0546 . = 240. 0547 trap; br7+7. / programmed interrupt 0548 trap; br7+8. / flotaing point 0549 trap; br7+9. /segmentation violation 05500551 / 0552 / interface code to C0553 / 0554 0555 .globl call, trap如前所述,所有的中断处理程序都在跳转指令之后,执行一

4、段入口地址为call 的汇编指令,用于完成中断现场保护、转去执行设备处理子程序及中断返回前恢复现场的工作。这段汇编指令代码位于文件m40.s 中,具体代码及程序流程图如下所示。0776 0777 0778 0779 0780 0781 0782 0783 0784 0785 0786 0787 0788 0789 0790 0791 0792 0793 0794 0795 0796 0797 0798 0799 0800 0801 0802 0803 0804 0805call: 1: 2: 2: 1: 2:mov mov mfpi mov bic bit beq jsr bis tstb b

5、eq bic jsr br tst mtpi br bis jsr cmp mov tst mov rttPS, -(sp/ PS的值压入栈/ r1的值压入栈/ 先前态的sp 压入栈 / 取PS 的值压入栈 / 除最后五位皆清0 / 中断前是否为用户态/ 如果前态为核心态,跳转到0797/ 前态为用户态,转去执行r0指向的中断服务子程序 / 处理机优先级设为7,关中断 / 检测runrun 标志/ 如果runrun 未设置,跳转到0793 / 如果runrun 设置,开中断 / 转去执行swtch/ swtch返回后,跳转到0786 / 删除栈顶元素/ 前态为用户态,恢复sp / 跳转到080

6、1/ 先前态改为用户态/ 转去执行r0指向的中断服务子程序 / 删除两个栈顶元素 / 恢复r1/ 删除栈顶元素 / 恢复r0 / 中断返回 r1, -(sp sp 4(sp, -(sp $!37, (sp $30000, PS 1f pc, *(r0+ $340, PS _runrun 2f $340, PS ps, _swtch 2b (sp+ sp 2f$30000, PS pc, *(r0+ (sp+, (sp+ (sp+, r1 (sp+ (sp+, r02. 中断响应和返回时核心栈的变化处理机响应中断后,硬件处理即中断隐指令的工作过程见课件。跳转到call 之后,现场保护及现场恢复过

7、程中,核心栈的变化过程,如下图所示。内存高地址中断前栈顶ps pc r0nps r1sp dev tpc原ps 原pc 原r0新ps 原r1先前态的原sp 新ps 的后五位调用设备处理子程序的返回地址内存低地址压栈过程出栈过程硬件工作结束 jsr r0, call;0804 mov (sp+, r00803 tst (sp+0802 mov (sp+, r10795 mtpi sp先前态为核心态先前态为用户态0777 mov PS, -(sp0779 mov r1, -(sp0780 mfpi sp0782 bic $!37, (sp0785 / 0799 jsr pc, *(r0+0781

8、mov4(sp, -(sp(0786/0800)3. 跳转执行设备处理子程序及返回时核心栈的变化C 语言在编译程序在设备(或陷入)处理子程序首,先插入执行csv 子程序,在设备(或陷入)处理子程序执行结束前,跳转执行cret 子程序,如下所示。L : L +2: jsr r5, csv /将r5的值压入栈,pc 的值L +2送入r5,pc=csv,即转去执行csv 子程序 csv 是一段用汇编语言编写的子程序,位于文件m40.s 中,详细的指令代码如下。1418 /* - */ 1419 .globl csv 1420 csv: 1421 mov r5, r0 /将原r5的值存入r0,如上例中

9、,此处值为L +2 1422 mov sp, r5 /将sp 的值存入r5,r5指向当前栈顶 1423 mov r4, -(sp /r4的值压入栈 1424 mov r3, -(sp /r3的值压入栈 1425 mov r2, -(sp /r2的值压入栈 1426 jsr pc, (r0 /转去执行r0指向的指令代码,如上例中,此处值为L +2cret 也是一段汇编语言编写的子程序,位于文件m40.s 中,详细的指令代码如下。1428 /* - */ 1429 .globl cret 1430 cret: 1431 mov r5, r1 /将r5的值存入r1 1432 mov -(r1, r4

10、 /恢复r4 1433 mov -(r1, r3 /恢复r3 1434 mov -(r1, r2 /恢复r2 1435 mov r5, sp /恢复栈指针 1436 mov (sp+, r 5 /使r5指向前一重保护区 1437 rts pc /子程序返回上述过程中,核心栈的变化过程如下图所示。 为了便于访问中断现场保护区,将栈中保护r0的单元地址送入进程user 结构中的整型指针项u_ar0,于是,程序就能通过u_ar0及相应的位移量存访栈中各单元。为了增加程序的可读性,将这些位移量定义为符号常数如下(代码位于reg.h 文件中):2600 /*2601 * Location of the users stored 2602 * registers relative to R0. 2603 * Usage is u.u_ar0XX. 2604 */ 2605 #define R0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论