知識點匯總
信號量
信號量是1965年由著名的荷蘭計算機科學家Dijkstra提出的质礼,其基本思路是使用一種新的變量類型市栗,即信號量來記錄當前可用資源的數(shù)量缀拭。
-
在信號量的具體實現(xiàn)上,有兩種不同的方式填帽。
- (1)方式一:要求信號量的取值必須大于或等于0蛛淋。如果信號量的值等于0,表示當前已沒有可用的空閑資源篡腌;如果信號量的值大于0褐荷,則該值就代表了當前可用的空閑資源數(shù)量;
- (2)方式二:信號量的取值可正可負嘹悼。如果是正數(shù)或0叛甫,其含義與方式一是相同的层宫;如果是負數(shù),則它的絕對值就代表正在等待進入臨界區(qū)的任務(wù)個數(shù)其监。
信號量是由操作系統(tǒng)來維護的萌腿,任務(wù)不能直接去修改它的值,只能通過初始化和兩個標準原語(即P抖苦、V原語)來對它進行訪問毁菱。在初始化時,可以指定一個非負整數(shù)锌历,即空閑資源的總數(shù)贮庞。所謂的原語,通常由若干條語句組成究西,用來實現(xiàn)某個特定的操作窗慎,并通過一段不可分割或不可中斷的程序來實現(xiàn)其功能。原語是操作系統(tǒng)內(nèi)核的一個組成部分卤材,必須在內(nèi)核態(tài)下執(zhí)行捉邢。原語的不可中斷性是通過在其執(zhí)行過程中關(guān)閉中斷來實現(xiàn)的。
P商膊、V原語作為操作系統(tǒng)內(nèi)核代碼的一部分伏伐,是一種不可分割的原子操作。它們在運行時晕拆,不會被時鐘中斷所打斷藐翎。另外,在P实幕、V原語中包含有任務(wù)的阻塞和喚醒機制吝镣,因此,當任務(wù)在等待進入臨界區(qū)的時候昆庇,會被阻塞起來末贾,而不會去浪費CPU時間。
P原語中的字母P整吆,是荷蘭語單詞測試的首字母拱撵。它的主要功能是申請一個空閑的資源,把信號量的值減1表蝙。如果成功的話拴测,就退出原語;如果失敗的話府蛇,這個任務(wù)就會被阻塞起來集索。V原語當中的字母V,是荷蘭語單詞增加的首字母。它的主要功能是釋放一個被占用的資源务荆,把信號量的值加1妆距,如果發(fā)現(xiàn)有被阻塞的任務(wù),就從中選擇一個把它喚醒函匕。
采用信號量來實現(xiàn)任務(wù)之間的互斥毅厚,優(yōu)點有兩個:一是可以設(shè)置信號量的計數(shù)值,從而允許多個任務(wù)同時進入臨界區(qū)浦箱;二是當一個任務(wù)暫時無法進入臨界區(qū)時吸耿,它會被阻塞起來,從而讓出CPU給其他的任務(wù)酷窥。
大多數(shù)嵌入式操作系統(tǒng)都提供了信號量的機制咽安,用戶可以通過函數(shù)調(diào)用的方式去使用。