实现DOS重入的有效途径.pdfVIP

  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文档。上传文档
查看更多
维普资讯 孪 。 第 14卷第 6期 微 计 算 机 应 用 V01.14,No.6 1993年 11月 M ICROCOM PUTER APPLICATIONS Nov..1993 I一I 实现 DOS重人的有效途径 蕈 晓芝 (安庚石油化工 总厂计算机站 , 安庆 246001) 摘要: 讨论一种利用。。 可交换数据区 实现Do 重人的新方法,介绍了实现该方法的 具体技术 以硬相应的程序框架结掏,并给出了一个程序实例。 关键词:DOS重人 SDA 未分开 DOS功能 TSR程序 DOS是一个严格的单任务操作系统,在执行系统功能调用时,不能被中断而执行其他的 DOS任务,并在 中断结束后恢复原调用的功能。通常,我们称DOS的这种特性为不可重入性, 这就使得在开发 TSR程序时,无法直接使用 DOS的系统功能调用 (INT21H),给程序编制 带来了很大难度 笔者利用DOS可交换数据区SDA(SwappableDataArea)和未公开的DOS 功能 .很好地解决了DO S重入 问题,实践证 明这种方法实用方便,安全可靠。 1 基本思想 . 一 般来讲 ,DOs是不可重入的,究其原因主要有 以下几点 1.1 DOS内部堆栈的切换 DO S系统功能调用时,系统堆栈将被切换到 I/O堆栈、磁盘堆栈或辅助堆栈这三个 内部 堆栈中,并且栈指针 SP指向栈的顶部。正 由于存在这种堆栈切换操作 ,当DOS重入时,系 统会把当前进程的数据调入堆栈中,从而破坏被中断进程的原栈 内数据,导致系统崩溃 1.2 程序段前缀 PSP的继承 DOs为每个程序分配一个程序段前缀PSP,但它一次只能识别一个 PSP,往往最后执行 程序的PSP是当前有效的。若 TSR程序要中断-个正在运行的程序而执行时,DO S仍将使 用被中断程序的PSP资源。这样,一旦TSR程序涉及到PSP修改操作时,如打开文件 (INT 21H 的 3DH功能),就将前后台进程联系在一起 ,有可能造成系统混乱 。 1.3 磁盘传送区DTA 的共用 磁盘传送区DTA是DOS用于FCB功能传送文件数据的内存缓冲区,也用匹配文件查找 功能调用 (INT21H的4EH和4FH功能)。但DO S内部只维护一个DTA 的内存地址,若不 采取措施,前后台进程有可能同时使用一个DTA,而使前台系统DTA数据丢失,影响系统 正确运行 由此可见,如果我们能够在插入的中断进程前后设法保存和恢复包括三个 内部堆栈、PSP 以及 DTA在 内的DO S所有 内部数据,那就可 在 中断进程 中执行DOS系统功能调用,而不 一 12 — 维普资讯 破坏前台内部数据,并能恢复前台系统调用的功能。 DOS可交换数据区SDA正好满足上述保存和恢复D0s内部数据的需要。SDA是DOS 的数据段,它是一块包含当前 DOS所有 内容的数据空间.其中包括当前 PSP、DTA 以及三个 内部堆栈等 DOS内部数据信息。这样 ,就可以在进入 中断进程后 .首先保存当前SDA,然后 再安全重入 DOS,中断返回前恢复原先的SDA,从而不必担心破坏DOS的内部数据 .也不 必检查 DOS的安全标志,几乎可 以在任何 时候调用DOs系统功能。因此 .保存与恢复 DOS 的SDA是实现 DOS重入 的关键所在 。 2 实现方法 2I SDA的保存与恢复 要实现DOS重入 ,必需能够保存和恢复DOSSDA,如何得到SDA呢?DOS提供了未公 开的INT21H功能5D06H可以读取DOS的SDA,它返回DOS可交换数据区SDA 的地址和 大小 。 INT 21H功能 5D06H 的调用格式 输入 : AX一5D0

文档评论(0)

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

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

1亿VIP精品文档

相关文档