當操作系統突然終止一個進程(讓我們假設Linux)通過GPF或SIGKILL或類似的操作系統時,操作系統是否將修改後的CPU緩存行刷新到主內存?有不同的行爲取決於CPU或操作系統?當進程崩潰時,操作系統是否刷新CPU緩存?
我正在評估非易失性內存功能,並想知道應用程序在發生崩潰時如何寫入內存。具體是否缺少當前修改的CPU緩存行。我還沒有找到有關這方面的官方聲明。
感謝您的幫助!
當操作系統突然終止一個進程(讓我們假設Linux)通過GPF或SIGKILL或類似的操作系統時,操作系統是否將修改後的CPU緩存行刷新到主內存?有不同的行爲取決於CPU或操作系統?當進程崩潰時,操作系統是否刷新CPU緩存?
我正在評估非易失性內存功能,並想知道應用程序在發生崩潰時如何寫入內存。具體是否缺少當前修改的CPU緩存行。我還沒有找到有關這方面的官方聲明。
感謝您的幫助!
一般來說,是。 「崩潰」進程不會導致最近的內存寫入丟失。
從CPU的角度來看,對於「正常」事件而言,引發異常的方式與對於致命異常相同。例如,訪問未映射的內存頁面並不總是通過GPF/SEGV導致崩潰;許多操作系統將使用該事件來實現動態內存分頁(例如,讀取內存映射文件的頁面;爲零填充內存區域分配物理內存;複製COW內存頁面)。類似地,操作系統可以解釋其他CPU異常(如軟件中斷或軟件模擬指令),並將其傳回進程而不會將其殺死。
(另外:。考慮核心轉儲的生成和調試器的情況下被打死並不總是立即銷燬過程;操作系統可以在內存中出於各種目的保持其狀態)
大多數操作系統會或者在上下文切換時刷新緩存,或者允許CPU正常從緩存中寫出頁面。無論哪種情況,最近的寫作肯定不會被忽略。
感謝您的回答,這非常有幫助!您能否隨時推薦任何優秀的文檔資源,在那裏我可以找到關於該主題的更多信息?也許我錯過了正確的搜索條件。 – torpedro
由於它屬於Unix和Linux,因此我正在投票關閉此題目,因爲它屬於Unix和Linux –
瞭解更多硬件相關方面的私密細節對*程序員*至關重要,所以我認爲這是這裏沒有脫離主題。誠然,這也可能是其他論壇的話題。 – Alfe