這與 this question有關。我不是Linux設備驅動程序或內核模塊的專家,但我一直在閱讀Rubini的「Linux設備驅動程序」[O'Reilly] & Corbet和一些在線資源,但我沒有能夠在這個特定問題上找到任何東西。在Linux設備驅動程序中使用浮點的編碼約定是什麼?
什麼時候允許內核或驅動程序模塊使用浮點寄存器?
如果是這樣,誰負責保存和恢復其內容?
(假設x86-64架構)
如果我理解正確,每當KM運行時,它使用的是硬件方面(或硬件線程或註冊設置 - 無論你怎麼稱呼它)已經被搶佔從一些應用程序線程。如果你用c編寫你的KM,編譯器將正確地確保通用寄存器被正確地保存和恢復(很像在應用程序中),但這不會在浮點寄存器中自動發生。就此而言,許多KM甚至無法假定處理器具有任何浮點功能。
我在猜測一個想要使用浮點的知識管理必須謹慎地保存並恢復浮點狀態嗎?有沒有標準的內核函數來做到這一點?
這是什麼編碼規範拼寫出來的任何地方?
它們對於SMP非SMP驅動程序是不同的嗎?
對於較早的非搶佔式內核和較新的搶佔式內核,它們有何不同?