所謂**的臨界段
指處理時不可分割的**。一旦這段**開始執行,不允許中斷的打入。
在進入臨界段**之前,需要關中斷,執行完臨界段**,開中斷。
學習過硬體作業系統的人都知道,我們在做緯度測量的時候,經常會用到ds18b20這樣的乙個晶元,這個晶元是乙個單元件協議,我們都知道
ds18b20
對時序的要求非常嚴格。我們通常是把它的
dq資料線拉高,拉高以後延時,比如說延時兩毫秒,然後再把
dq拉低,在這三步執行的過程中,是不允許中斷打人的,為什麼呢?
因為它對這個時序的要求非常高,比如這個兩毫秒是不能超過兩毫秒的,安如果在這個地方被中斷打入了,那中斷執行的時間可能會比較長,會大於兩毫秒,這樣的話,這個dq的資料線就變成了乙個高電頻,乙個低電頻,但是這個高電頻可能就不是兩毫秒了,可能會變成
10毫秒,那這樣的話,這協議就出問題了。
為了確保我們**在執行時,不被中斷,那麼我們該怎麼辦呢?那很簡單,在執行這個**臨界段的時候關中斷,這個**臨界段的執行完的時候開中斷。
資源和共享資源
資源:
任何為任務所占用的實體。如:印表機,鍵盤,顯示器等。另外資源也可以是乙個變數,乙個結構或者乙個陣列。
所以說我們作業系統中的資源是廣義的資源,任何為任務所服務的東西,我們都被稱為資源。
共享資源:
被乙個以上的任務使用的資源。
比如這裡面有個變數,這個變數是全域性變數,全域性變數假設它是乙個ledflag的狀態,在乙個
led中,我們要對這個
ledflag
進行修改,或者說做使用,而另外乙個按鍵當中,我們也要用到
ledflag
,那這樣的話,這乙個變數被兩個任務使用,首先這個變數是個資源,接下來這個資源,被兩個任務使用,這樣的資源就被稱為共享資源。
我們子啊使用共享資源的時候,必須使用一些手段來保證共享資源不出問題。什麼意思呢?假設led中剛剛把這個
ledflag
修改為1
,然後在按鍵中,又把它修改為
0了,就是在任務執行到
led中把這個
ledflag
修改為1
,接下來來判斷這個狀態。但是在這個之前,按鍵剛把它修改為
0了,那這個時候,我們來看就出問題了,我們把它改為
1,這個時候,判斷我們應該是
1,但是實際上由於按鍵這個任務的作用,它已經變成了
0,所以關於共享資源的訪問,我們必須滿足乙個條件叫做互斥。
對共享資源的訪問,必須滿足互斥:(獨佔)
滿足互斥的方法:
1、關中斷和開中斷。
在使用這個全域性變數或者共享資源之前呢,我們首先把這個中斷給關掉,當共享資源使用完畢以後,我們再把這個中斷給開啟就行了
2、使用測試並置位指令。
假設還是剛剛乙個led燈的任務,還有乙個按鍵任務,都會使用到乙個共享資源叫做
ledflag
,那這個時候我們使用乙個測試並置位,我們首先再加乙個變數
bit,我們把變數
bit初始化為0,當
led任務要使用
ledflag
的時候,我先判斷
bit是否等於
0,如果
bit等於
0,我們就把
bit置成
1,如果
bit等於
1的話,就表明我們這個
led正在使用,安接下來就可以使用
ledflag
了,使用完畢後,我們再把
bit置成
0,這樣的話每個任務在使用
ledflag
之前,首先判斷
bit的狀態,判斷完畢之後,如果能使用,就把
bit置成
1,使用完共享資源以後,再把
bit置成
0,這個方法就是測試並置位指令。我們發現,這樣乙個測試並置位指令就很好的避免了我們這個共享資源的訪問問題。
3、任務禁止切換,使用,允許任務切換。
因為不被任務切換,那麼這個時候,我們就不會被別的任務所打斷,那這個時候我們就可以使用這個共享資源,使用完畢之後,接下來開啟任務的切換功能就行了。
4、使用訊號量。
它和我們的使用測試並置位指令這條命令是差不多的,也就是說,在我們使用這個共享資源之前首先開啟乙個訊號量。我們用這個訊號量來約束共享資源的訪問,怎麼辦呢?首先還是這個訊號量,假設這個共享資源正在訪問的時候,我們把這個訊號量置為1,接下來,我們訪問共享資源,訪問後,再把這個訊號量變成
0,只不過在這裡我們需要注意,對訊號量它有兩個專業的術語,乙個叫做獲取訊號量,乙個叫做釋放訊號量。也就是說,我們使用共享資源的時候,首先來獲取這個訊號量,獲取到了以後,就使用共享資源,使用完畢以後,就把這個訊號量釋放。
死鎖
死鎖也稱為抱死。指2個任務無限期的互相等待對方控制的資源。
我們剛剛說有乙個ledflag這個共享資源,
led和按鍵這個任務都在使用它,假設我們這裡還有乙個
keyflag
,也就是說,按鍵也有乙個共享資源,如果出現這樣的情況,我們來看一下,假設
led這個任務在進行,在執行的過程中,它需要等待
keyflag
這個共享資源,但是
keyflag
這個資源被按鍵使用著,這個時候,
led燈就被掛起了,它要去等待這個資源,但是這個資源被按鍵使用,那它被掛起以後,按鍵就開始執行。假設執行到某個地方,按鍵要等待
ledflag
這個資源,但是這個資源又被
led使用著,那這個時候就出現了乙個問題,
led等待按鍵的資源,按鍵等待
led的資源,那這個時候,最終這兩個任務就被死死的困死,你等待我的,我等待你的,但是誰也等待不了誰,這樣的現象就被稱為死鎖。
photoshop的專業術語
在學習ps的過程中,經常會遇到一些專業術語,下面我們來對一些ps常用的 並且比較難理解的術語進行簡單講解。上圖中每乙個小方格就是乙個象素點,它記載著影象的各種資訊。上圖中的黑白相間的細線就是選擇區的邊界,對影象的操作只對選擇區內有效。上圖是對不同羽化值選區填充的效果。上圖中是對消除鋸齒和保留鋸齒的選...
AOP中的專業術語介紹
一 aop簡介 aop aspect oriented programming,面向切面程式設計 是一種新的方 是對傳統 oop object oriented programming,物件導向程式設計 的補充。aop 的主要程式設計物件是切面 aspect 而切面是把橫切關注點 模組化 在應用 a...
工作中的專業術語
beta 測試 beta測試指的是公測,可以針對所有使用者發布的公開測試版本,也可以是針對特定使用者 beta 使用者 發布。以收集使用者反饋 使用資料進行bug修復或小範圍功能更改。ab測試 ab測試指的是同時發布兩個不同的軟體版本,並讓使用者隨機訪問這些不同的版本。以收集使用者體驗資料和業務資料...