计算机系统I-第9章.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机系统 I ;系统调用于实现特定操作,这些操作需要程序员具备某些不熟悉专业领域的知识,或者为了安全性而需要保护的操作。 专业性:比如对外部设备操作时需要了解外部设备的工作原理,内部的I/O寄存器以及对它们的操作顺序。这些都和具体硬件相关,不同的外部设备可能要求不一样。 安全性:多个用户程序可能共享某个外部设备资源,用户编写程序直接操作外部设备,一个小错误可能会影响到很多其它的用户程序。;并不是每个程序员知道(或者想知道)这个层次的技术细节。 解决方法:提供服务子程序或者系统调用(通常作为操作系统的一部分) ,用户通过这些子程序或者系统调用来安全和方便的实现底层操作。 ;用户程序使用系统调用 操作系统执行调用操作 结束后将控制权返回给用户程序 在LC-3里,通过TRAP 机制来实现系统调用。 ;包括一组服务子程?? 操作系统的一部分 – 服务程序起始固定的内存地址 LC-3中实现的服务子程序位于系统代码区(below x3000) 最多支持 256个服务子程序 起始地址表 存放在 x0000 到 x00FF 的内存中(256x16bit) 。每16位存放一个系统服务子程序的起始地址。 在别的系统中可能称为为“系统控制块”,或 “陷入矢量表”;TRAP 指令 用户程序通过TRAP指令来实现系统调用。操作系统将以用户程序身份执行某个特定的服务程序,并在执行结束后将控制权返回 LC-3: TRAP指令通过指令中8-bit的 trap vector来指示调用256个服务子程序中的哪一个。 链接回到用户程序 提供从服务程序返回到用户程序的机制;Trap 向量 指示调用哪个系统服务程序(x00-xff) 通过8位trapvect8索引起始地址表,获得对应系统调用的入口地址 LC-3实现的方法: 起始地址表存放在内存的 0x0000 – 0x00FF处,8-bit trap vector 通过高位0扩展成16位的内存地址,该内存地址处存放的就是相应调用的入口地址 如何执行 从起始地址表查找服务程序地址,加载到PC中 如何返回 将下一条指令的地址(当前的PC值)保存到R7;TRAP;如何返回用户程序?即回到trap指令的下一条指令继续运行 执行trap指令时将PC保存在R7 服务程序使用JMP R7就可以返回到用户程序 LC-3 汇编语言使用RET (return) 助记符来取代 “JMP R7”。 因此:必须保证服务程序没有改变R7,否则无法返回。 ;TRAP 机制流程; .ORIG x3000 LD R2, TERM ; Load negative ASCII ‘7’ LD R3, ASCII ; Load ASCII difference AGAIN TRAP x23 ; input character ADD R1, R2, R0 ; Test for terminate BRz EXIT ; Exit if done ADD R0, R0, R3 ; Change to lowercase TRAP x21 ; Output to monitor... BRnzp AGAIN ; ... again and again... TERM .FILL xFFC9 ; -‘7’ ASCII .FILL x0020 ; lowercase bit EXIT TRAP x25 ; halt .END; .ORIG x0430 ; syscall address ST R7, SaveR7 ; save R7 R1 ST R1, SaveR1 ; ----- Write character TryWrite LDI R1, CRTSR ; get status BRzp TryWrite ; look for bit 15 on WriteIt STI R0, CRTDR ; write char ; ----- Return from TRAP Return LD R1, SaveR1 ; restore R1 R7 LD R7, SaveR7 RET ; back to user CRTSR .FILL xF3FC CRTDR .FILL xF3FF SaveR1 .FILL 0 SaveR7 .FILL 0 .END;TRAP Routines and their Assembler Names;在以下情况,必须要保存寄存器的内容: 如果该寄存器的内容会被系统调用使用 并在后续操作中将修改该寄存器. 谁保存? 调用服务程序的程序(调用者保存)? 需要知道系统调用会修改或使用那些寄存器什么,但实际可能不知道服务

文档评论(0)

iris + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档