<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      操作系統中鎖的實現原理(轉)

      轉自 http://blog.sina.com.cn/u/1978709325

      在多線程編程中,為了保證數據操作的一致性,操作系統引入了鎖機制,用于保證臨界區代碼的安全。通過鎖機制,能夠保證在多核多線程環境中,在某一個時間點上,只能有一個線程進入臨界區代碼,從而保證臨界區中操作數據的一致性。

      所謂的鎖,說白了就是內存中的一個整型數,擁有兩種狀態:空閑狀態和上鎖狀態。加鎖時,判斷鎖是否空閑,如果空閑,修改為上鎖狀態,返回成功;如果已經上鎖,則返回失敗。解鎖時,則把鎖狀態修改為空閑狀態。

      看起來很簡單,大家有沒有想過,OS是怎樣保證這個鎖操作本身的原子性呢?舉個例子,在多核環境中,兩個核上的代碼同時申請一個鎖,兩個核同時取出鎖變量,同時判斷說這個鎖是空閑狀態,然后有同時修改為上鎖狀態,同時返回成功。。。兩個核同時獲取到了鎖,這種情況可能嗎?廢話,當然是不可能,可能的話,我們使用鎖還有啥意義。但是,咦?等等,雖然我知道肯定不可能,但是你剛才說的貌似還有點道理,看來OS實現這個鎖還不是看起來這么簡單,還是有點道道的。

      為了弄明白鎖的實現原理,我們首先看看如果OS不采用任何其他手段,什么情況下會導致上鎖失敗?假如我們把加鎖過程用如下偽碼表示:
      1、read lock;
      2、判斷lock狀態;
      3、如果已經加鎖,失敗返回;
      4、把鎖狀態設置為上鎖;
      5、返回成功。
      明白匯編的同學一看就明白上述每一步都能對應到一條匯編語句,所以我們可以認為每一步本身是原子的。

      那么什么情況能夠導致兩個線程同時獲取到鎖呢?
      1、中斷:假設線程A執行完第一步,發生中斷,中斷返回后,OS調度線程B,線程B也來加鎖并且加鎖成功,這時OS調度線程A執行,線程從第二步開始執行,也加鎖成功。
      2、多核:當然了,想想上面舉的例子,描述的就是兩個核同時獲取到鎖的情況。

      既然明白鎖失敗的原因,解決手段就很明確了:
      先考慮單核場景:
      1、既然只有中斷才能把上鎖過程打斷,造成多線程操作失敗。我先關中斷不就得了,在加鎖操作完成后再開中斷。
      2、上面這個手段太笨重了,能不能硬件做一種加鎖的原子操作呢?能,大名鼎鼎的“test and set”指令就是做這個事情的。(怎么,test and set是干什么的?同學,看來你上課時不夠專心啊,趕緊回頭復習復習)

      通過上面的手段,單核環境下,鎖的實現問題得到了圓滿的解決。那么多核環境呢?簡單嘛,還是“test and set”不就得了,這是一條指令,原子的,不會有問題的。真的嗎,單獨一條指令能夠保證該指令在單個核上執行過程中不會被中斷打斷,但是兩個核同時執行這個指令呢?。。。我再想想,硬件執行時還是得從內存中讀取lock,判斷并設置狀態到內存,貌似這個過程也不是那么原子嘛。對,多個核執行確實會存在這個問題。怎么辦呢?首先我們得明白這個地方的關鍵點,關鍵點是兩個核會并行操作內存而且從操作內存這個調度來看“test and set”不是原子的,需要先讀內存然后再寫內存,如果我們保證這個內存操作是原子的,就能保證鎖的正確性了。確實,硬件提供了鎖內存總線的機制,我們在鎖內存總線的狀態下執行test and set操作,就能保證同時只有一個核來test and set,從而避免了多核下發生的問題。

      總結一下,在硬件層面,CPU提供了原子操作、關中斷、鎖內存總線的機制;OS基于這幾個CPU硬件機制,就能夠實現鎖;再基于鎖,就能夠實現各種各樣的同步機制(信號量、消息、Barrier等等等等)。所以要想理解OS的各種同步手段,首先需要理解本文介紹的內容,這時最原點的機制,所有的OS上層同步手段都基于此。

      posted @ 2014-11-04 10:23  log_a  閱讀(937)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av日韩av综合在线观看| 国产95在线 | 欧美| 国产亚洲亚洲国产一二区| 蜜桃在线一区二区三区| 成人午夜av在线播放| 丰满少妇被猛烈进出69影院 | 国产伊人网视频在线观看| 久久久久亚洲A√无码| 国产精品国产精品国产专区不卡| 亚洲精品中文综合第一页| jizzjizz日本高潮喷水| 欧美猛少妇色xxxxx猛叫| 国产精品一区二区小视频| 亚洲第一区二区三区av| 少妇人妻偷人精品免费| 超碰人人超碰人人| a在线观看视频在线播放| 欧美人成精品网站播放| 九九热久久只有精品2| 国产一区一一区高清不卡| 爆乳日韩尤物无码一区| 国产一级二级三级毛片| 亚洲另类激情专区小说图片| 久久久亚洲精品无码| 亚洲午夜伦费影视在线观看| 国产精成人品日日拍夜夜| 国内精品自产拍在线播放| 欧美亚洲另类制服卡通动漫 | 99国产精品永久免费视频| 欧美熟妇性XXXX欧美熟人多毛| 小污女小欲女导航| 亚洲精品美女久久久久9999| 成人看的污污超级黄网站免费| 定结县| 亚洲国产精品综合久久2007| 国产成人精品国内自产色| 2020精品自拍视频曝光| 亚洲国产精品嫩草影院久久| 成人免费亚洲av在线| 国产亚洲精品97在线视频一| 国产精品自在线拍国产|