2013-06-25 51 views
1

或換句話說:syscallint <kernel-interrupt-number>有什麼區別?系統調用指令的目的是什麼?

我能想到的唯一明顯原因是中斷號在不同的操作系統中有所不同,並且擁有新的獨特指令可以提供更高的一致性。然而,系統調用的數字和參數在不同的操作系統中仍然存在差異,所以一致性的增益非常低。

可能攔截中斷需要更多的內核工作? (因此使用syscall會有性能提升)

回答

1

您正處於正確的軌道上; syscall指令的動機主要是性能。你可以閱讀更多關於這個in AMD's "SYSCALL and SYSRET Instruction Specification"

從文檔一些摘錄:

爲了發起到操作系統的調用,應用程序 傳輸通過門的描述符控制給OS(任務,中斷 ,告警,呼叫柵極)。控制轉移通過使用CALL指令或軟件中斷使用 來完成。設置這些控制門 (以及稍後通過RET或IRET指令返回)是 減慢了與分段相關的開銷。
....
SYSCALL和SYSRET是用於低延遲 系統調用和返回在操作系統與平坦 內存模型和沒有分割的指令。這些指令 已通過減少檢查次數和內存 進行了優化,這些參考通常是在 與當前CALL/RET指令方法進行比較時,呼叫或返回的時間小於內部時鐘週期數的四分之一。