或換句話說:syscall
和int <kernel-interrupt-number>
有什麼區別?系統調用指令的目的是什麼?
我能想到的唯一明顯原因是中斷號在不同的操作系統中有所不同,並且擁有新的獨特指令可以提供更高的一致性。然而,系統調用的數字和參數在不同的操作系統中仍然存在差異,所以一致性的增益非常低。
可能攔截中斷需要更多的內核工作? (因此使用syscall
會有性能提升)
或換句話說:syscall
和int <kernel-interrupt-number>
有什麼區別?系統調用指令的目的是什麼?
我能想到的唯一明顯原因是中斷號在不同的操作系統中有所不同,並且擁有新的獨特指令可以提供更高的一致性。然而,系統調用的數字和參數在不同的操作系統中仍然存在差異,所以一致性的增益非常低。
可能攔截中斷需要更多的內核工作? (因此使用syscall
會有性能提升)
您正處於正確的軌道上; syscall
指令的動機主要是性能。你可以閱讀更多關於這個in AMD's "SYSCALL and SYSRET Instruction Specification"。
從文檔一些摘錄:
爲了發起到操作系統的調用,應用程序 傳輸通過門的描述符控制給OS(任務,中斷 ,告警,呼叫柵極)。控制轉移通過使用CALL指令或軟件中斷使用 來完成。設置這些控制門 (以及稍後通過RET或IRET指令返回)是 減慢了與分段相關的開銷。
....
SYSCALL和SYSRET是用於低延遲 系統調用和返回在操作系統與平坦 內存模型和沒有分割的指令。這些指令 已通過減少檢查次數和內存 進行了優化,這些參考通常是在 與當前CALL/RET指令方法進行比較時,呼叫或返回的時間小於內部時鐘週期數的四分之一。