2 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
因?yàn)?..
許多程序不使用浮點(diǎn)數(shù),或者在任何給定的時(shí)間片上都不使用浮點(diǎn)數(shù);和
保存FPU寄存器和其他FPU狀態(tài)需要花費(fèi)時(shí)間;因此
...一個(gè)OS內(nèi)核可能只是關(guān)閉了FPU。Presto,沒有要保存和恢復(fù)的狀態(tài),因此可以更快地進(jìn)行上下文切換。(這就是模式的含義,僅表示已啟用FPU。)
如果程序嘗試FPU op,則該程序?qū)⑾萑雰?nèi)核,內(nèi)核將打開FPU,恢復(fù)可能已經(jīng)存在的所有保存狀態(tài),然后返回以重新執(zhí)行FPU op。
在上下文切換時(shí),它知道實(shí)際上要經(jīng)過狀態(tài)保存邏輯。(然后它可能會(huì)再次關(guān)閉FPU。)
順便說一句,我相信本書對(duì)內(nèi)核(而不僅僅是Linux)避免FPU ops的解釋不是很準(zhǔn)確。1個(gè)
內(nèi)核可以陷入自身,并為很多事情這么做。(計(jì)時(shí)器,頁面錯(cuò)誤,設(shè)備中斷等)。真正的原因是內(nèi)核特別不需要 FPU操作,而且還需要在完全沒有FPU的體系結(jié)構(gòu)上運(yùn)行。因此,它通過不執(zhí)行總是有其他軟件解決方案的操作,從而避免了管理自己的FPU上下文所需的復(fù)雜性和運(yùn)行時(shí)間。
有趣的是,如果內(nèi)核要使用FP,則必須多久保存一次FPU狀態(tài)。。。每個(gè)系統(tǒng)調(diào)用,每個(gè)中斷,內(nèi)核線程之間的每個(gè)切換。即使偶爾需要內(nèi)核FP,2在軟件中執(zhí)行它可能也會(huì)更快。
1.那是完全錯(cuò)誤的。
2.在某些情況下,我知道內(nèi)核軟件在哪里包含浮點(diǎn)算術(shù)實(shí)現(xiàn)。 一些體系結(jié)構(gòu)在硬件中實(shí)現(xiàn)傳統(tǒng)的FPU操作,但將一些復(fù)雜的IEEE FP操作留給軟件。(認(rèn)為:反常算術(shù)。) 當(dāng)發(fā)生某些奇怪的IEEE極端情況時(shí),它們會(huì)陷入軟件中,該軟件包含對(duì)可能陷入困境的操作進(jìn)行正確的模擬。
添加回答
舉報(bào)