知識(shí)點(diǎn)匯總
信號(hào)量
信號(hào)量是1965年由著名的荷蘭計(jì)算機(jī)科學(xué)家Dijkstra提出的,其基本思路是使用一種新的變量類型,即信號(hào)量來記錄當(dāng)前可用資源的數(shù)量。
-
在信號(hào)量的具體實(shí)現(xiàn)上,有兩種不同的方式。
- (1)方式一:要求信號(hào)量的取值必須大于或等于0。如果信號(hào)量的值等于0,表示當(dāng)前已沒有可用的空閑資源;如果信號(hào)量的值大于0,則該值就代表了當(dāng)前可用的空閑資源數(shù)量;
- (2)方式二:信號(hào)量的取值可正可負(fù)。如果是正數(shù)或0,其含義與方式一是相同的;如果是負(fù)數(shù),則它的絕對(duì)值就代表正在等待進(jìn)入臨界區(qū)的任務(wù)個(gè)數(shù)。
信號(hào)量是由操作系統(tǒng)來維護(hù)的,任務(wù)不能直接去修改它的值,只能通過初始化和兩個(gè)標(biāo)準(zhǔn)原語(即P、V原語)來對(duì)它進(jìn)行訪問。在初始化時(shí),可以指定一個(gè)非負(fù)整數(shù),即空閑資源的總數(shù)。所謂的原語,通常由若干條語句組成,用來實(shí)現(xiàn)某個(gè)特定的操作,并通過一段不可分割或不可中斷的程序來實(shí)現(xiàn)其功能。原語是操作系統(tǒng)內(nèi)核的一個(gè)組成部分,必須在內(nèi)核態(tài)下執(zhí)行。原語的不可中斷性是通過在其執(zhí)行過程中關(guān)閉中斷來實(shí)現(xiàn)的。
P、V原語作為操作系統(tǒng)內(nèi)核代碼的一部分,是一種不可分割的原子操作。它們?cè)谶\(yùn)行時(shí),不會(huì)被時(shí)鐘中斷所打斷。另外,在P、V原語中包含有任務(wù)的阻塞和喚醒機(jī)制,因此,當(dāng)任務(wù)在等待進(jìn)入臨界區(qū)的時(shí)候,會(huì)被阻塞起來,而不會(huì)去浪費(fèi)CPU時(shí)間。
P原語中的字母P,是荷蘭語單詞測(cè)試的首字母。它的主要功能是申請(qǐng)一個(gè)空閑的資源,把信號(hào)量的值減1。如果成功的話,就退出原語;如果失敗的話,這個(gè)任務(wù)就會(huì)被阻塞起來。V原語當(dāng)中的字母V,是荷蘭語單詞增加的首字母。它的主要功能是釋放一個(gè)被占用的資源,把信號(hào)量的值加1,如果發(fā)現(xiàn)有被阻塞的任務(wù),就從中選擇一個(gè)把它喚醒。
采用信號(hào)量來實(shí)現(xiàn)任務(wù)之間的互斥,優(yōu)點(diǎn)有兩個(gè):一是可以設(shè)置信號(hào)量的計(jì)數(shù)值,從而允許多個(gè)任務(wù)同時(shí)進(jìn)入臨界區(qū);二是當(dāng)一個(gè)任務(wù)暫時(shí)無法進(jìn)入臨界區(qū)時(shí),它會(huì)被阻塞起來,從而讓出CPU給其他的任務(wù)。
大多數(shù)嵌入式操作系統(tǒng)都提供了信號(hào)量的機(jī)制,用戶可以通過函數(shù)調(diào)用的方式去使用。