當源程序中有需要操作系統服務的要求時,編譯程序就會在由源程序轉換成的目標程序中安排一條“訪管指令”並設置一些參數。當目標程序執行時,中央處理器若取到了“訪管指令”就產生一個中斷事件,中斷裝置就會把中央處理器轉換成管態,並讓操作系統處理該中斷事件。操作系統分析訪管指令中的參數,然后讓相應的“系統調用”子程序為用戶服務。其次,訪管指令是在目態下使用的指令。
我們知道,用戶程序只能在目態下運行,並且不能使用特權指令。因而就存在這么一個問題:如果用戶程序想要啟動外設,或者要完成在目態下無法完成的工作,該怎么辦?要解決這一問題必須有三個條件:
(1)需要有一條指令,能使處理機從目態進入管態,並向操作系統提交要代為完成的工作;
(2)在管態下由操作系統完成用戶程序的請求;
(3)操作系統完成所做工作后能返回到用戶程序,即從管態回到原來的目態。
解決這個問題要靠訪管指令。訪管指令本身不是特權指令,其基本功能是讓程序擁有“自願進管”的手段,從而引起訪管中斷。
還有自己找的一些資料,訪管指令由指令碼和訪管中斷號兩部分組成,即 SVC n ,式(1) 其中SVC(super visor call)為指令碼,表明是訪管指令;n為訪管中斷號,其值是一整數,具體表示何種訪問請求。當中斷發生時,硬件終端裝置將訪管中斷號n送入舊的程序狀態字內的中斷碼字段,訪管中斷總控程序由系統堆棧中將其取出,並據此轉入對應的服務程序中。(這里面有點需要注意的,系統調用的程序是根據訪管中斷號來確定的)。
在實際使用時,用戶程序與操作系統之間還需要相互傳遞參數和返回值。因此,用戶使用訪管指令的一般形式為:准備參數 ;SVC n ;取返回值 式(2)。根據具體房管要求約定,參數及返回值可以通過寄存器傳遞,也可以通過內存傳遞。對於后者,操作系統必須能夠訪問進程空間。
通常,將式(2)稱為系統調用指令,它除了訪管指令外,還有准備參數和取返回值。為了使用方便,在高級語言中一般將其寫為同過程調用相類似的形式,即:返回值=系統調用名稱(參數1,參數2,...,參數n) 式(3)。 當然,編譯程序會將式(3)翻譯成形如(2)的形式。其中,系統調用名稱對應式(1),不同的系統調用名稱對應不同的整數n。在有些書籍中,也稱式(3)為代表式(2)的宏指令或廣義指令。