1. 程式人生 > >並發編程之始

並發編程之始

技術分享 mis 應該 http 全局 存儲 觸發 本地 提問

  從今天開始看《並發編程的藝術》,然後留下學習的筆記,是學習,是提問,是散發思維,是形成自己的知識體系。抱著學習研究的態度,去學習這本書,去深挖一門技術。看完一遍,還有一遍,如此反復。好,廢話不多說,馬上開始頭腦風暴。

上下文切換,時間片,線程調度算法

1 什麽是上下文切換,上下文切換的原理是什麽? 上下文怎麽切換?什麽時候會上下文切換?

  在操作系統層面,有一個概念叫模式切換,從用戶態到內核態,在我理解來,內核進程是用戶態進程所共享的,在實際的ram(ddr3,ddr4)空間中,根據地址映射,不會發生改變,所以在內核態和用戶態之間切換,TLB(存在於CPU內部的頁表緩存,實際的頁表存在於sdram空間中,當然假如TLB miss 的話,就需要從根據cpu拿到的虛地址,

技術分享圖片

根據高幾位的頁幀號,和頁內偏移,發送尋址信號到sdram空間中定位到具體的存儲單元)不會刷新。

  還有就是進程的上下文切換,由於從一個虛擬地址空間到另外一個地址空間,對於多核機器來說,本地core的TLB,應該是除了內核的頁表外,都會被刷新,cpu緩存中的數據,也要被清空,設置為invaliad。這就導致,進程切換的時候,很多東西都是未命中,需要重新加載。 那prev進程的現場保存到哪裏呢? 據說是保存在內核進程的堆棧中。http://www.cnblogs.com/wz19860913/archive/2010/05/25/1742583.html

技術分享圖片

  線程的上下文切換,  省略了進程切換時全局頁表目錄的切換,但是還是會把用戶數據,狀態字段存到pcb中。

  什麽時候會觸發上下文切換? (這裏的疑問??)

我的猜測,只有在系統時鐘周期到了,或者由於中斷,陷入內核態,才會觸發調度算法。

歡迎各位大佬,來踩兩腳,批評我的不對之處。哎,《並發編程的藝術》第一節就那麽讓人頭疼。

  

並發編程之始