標籤: 暫無標籤

駐留程序是一種特殊應用程序,它在裝入內存運行后,其部分代碼仍然駐留在內存,當該段代碼被激活時,它又進入運行狀態。常用的駐留程序是作為某個中斷處理程序的一部分,其激活條件就是系統產生了此中斷的中斷請求。

  駐留程序是一種特殊應用程序,它在裝入內存運行后,其部分代碼仍然駐留在內存,當該段代碼被激活時,它又進入運行狀態。常用的駐留程序是作為某個中斷處理程序的一部分,其激活條件就是系統產生了此中斷的中斷請求。

1 駐留程序 -駐留程序概述

  DOS 是一個單用戶的操作系統,它的核心程序是不允許重入的,說的具體一點,如果我們要編一個遞歸調用的程序,我們會把參數放在堆棧里,而不是用設置變數的方法,這樣在下一層程序返回時,不會有臨時變數被改變的危險,而 DOS 在處理中斷 INT 21H 時使用的臨時數據是放在內部數據區內的,如果在一個 INT 21H 過程中再發生另一個 INT 21H,在第二個 INT 21H 執行完以後回到第一個 INT 21H 時,原來保存的臨時數據就不是原來的樣子了,而是第二個 INT 21H 執行完后留下的『垃圾』,編一個內存駐留程序,隨時彈出一個窗口執行 INT 21H 功能,要想不死機,就必須先解決 DOS 的重入問題。


  解決重入問題有兩種方法,第一種是在進入 INT 21H 前人為保存 DOS 的內部數據結構到自己的緩衝區,在執行完后恢復,這種方法依賴於 DOS 的內部資料,而且不同的 DOS 版本的數據結構、數據位置是不一樣的,使用起來有相當的難度,而且對新版的操作系統的兼容程度是未知的。


  常用的辦法是在要激活駐留程序前,先檢測 DOS 的狀態,如果 DOS 是空閑的,就可以馬上激活,如果DOS 忙,就等到 DOS 空閑后再激活。本文就是討論檢測 DOS 狀態的方法。


  實際上,DOS 本身已經或多或少的考慮了這個問題,它本身有個 InDOS 標誌,在執行 DOS 功能時,它會把標誌 +1,退出時 -1,如果檢測 InDOS 不是 0,就說明 DOS 的某些功能在執行中。DOS 功能 INT 21H的 34H 子功能即是得到 InDOS 標誌的地址,在這個標誌前一個位元組是 DOS緊急錯誤標誌。在 DOS 忙判斷上有兩個特殊情況,一是 DOS 在緊急錯誤時會減少 InDOS 標誌,所以檢測到 InDOS 為 0 時還要確定錯誤標誌為 0,進入 DOS 才是安全的,二是有些 DOS 功能本身就允許重入,它們是一些不用到內部數據區的輸入命令等,如等待命令輸入時 DOS 執行的是輸入子功能,這時的 InDOS 為 1,但實際上是允許進入 DOS 的,在這中情況下,DOS 會不停的發 INT 28H 中斷,原來的 INT 28H 功能是不做任何事馬上返回。用戶可以在 INT 28H中掛上自己的程序而不必擔心 DOS 重入。

上一篇[荷]    下一篇 [褐]

相關評論

同義詞:暫無同義詞