在將變數從主記憶體讀取到工作記憶體中,必須順序執行read、load;要將變數從工作記憶體同步回主記憶體中,必須順序執行store、write。並且這8種操作必須遵循以下規則:
- 1,不允許read和load、store和write操作之一單獨出現。即不允許乙個變數從主記憶體被讀取了,但是工作記憶體不接受,或者從工作記憶體回寫了但是主記憶體不接受。
- 2,不允許乙個執行緒丟棄它最近的乙個assign操作,即變數在工作記憶體被更改後必須同步改更改回主記憶體。
- 3,工作記憶體中的變數在沒有執行過assign操作時,不允許無意義的同步回主記憶體。
- 4,在執行use前必須已執行load,在執行store前必須已執行assign。
- 5,乙個變數在同一時刻只允許乙個執行緒對其執行lock操作,乙個執行緒可以對同乙個變數執行多次lock,但必須執行相同次數的unlock操作才可解鎖。
- 6,乙個執行緒在lock乙個變數的時候,將會清空工作記憶體中的此變數的值,執行引擎在use前必須重新read和load。
- 7,執行緒不允許unlock其他執行緒的lock操作。並且unlock操作必須是在本執行緒的lock操作之後。
- 8,在執行unlock之前,必須首先執行了store和write操作。
程序間共享記憶體的8種方式
無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式。有名管道 named pipe 有...
作業系統中記憶體分段與記憶體分頁的區別
參考 記憶體分段和分頁的區別 分段和分頁其實都是一種對位址的劃分或者對映的方式。兩者的區別主要有以下幾點 1 頁是資訊的物理單位 段是資訊的邏輯單位 分頁是實現離散的分配方式,以消除記憶體的外零頭,提高記憶體的利用率 分段含有一組其意義相對完整的資訊 比如 資料段 段 和堆疊等 分頁僅僅是由於系統管...
核心中與驅動相關的記憶體操作之十 記憶體屏障
雖然實際驅動中不常用 但是閱讀核心比較深層的 經常會遇到 為什麼存在記憶體屏障呢 先看一下下面的場景 編譯器和處理器為了提高效率 可能對讀和寫操作重新進行了排序,例如 在某些處理器上 以下 a 1 b 2 有可能在 a中存放新值之前就在 b中存放新值.但是,我們在操作記憶體或者和硬體互動時 常常需要...