就續表之我見
理解三個變數:
osrdygrp
、osrdytbl
、osmaptbl
所謂就緒表,就是定義了兩個變數,
osrdygrp
是組向量,它就是乙個八位二進位制數(如:
10000100
),osrdytbl
是位向量,它就是乙個有八個元素的陣列,每個元素也是乙個八位二進位制數(如:
01100100
),osmaptbl是uc
為加快運算速度定義的乙個陣列,每個元素也是乙個八位二進位制數(為啥說它就加快運算了呢?若我們想使某個任務就緒,我們要把
osrdygrp
、osrdytbl
的某位上置
1,正好與2的
n次方(如
00000010是2
的1次方)相「或」,而
uc把用到的八個值計算好了存放在乙個陣列裡,用的時候只需要查就行了)
想讓乙個任務就緒:
osrdygrp |= osmaptbl[prio>> 3];
osrdytbl[prio>> 3] |= osmaptbl[prio & 0x07]
我們來看,乙個任務優先順序將它化成二進位制數,它的低三位與它在哪一組沒有任務關係!因為逢八才換組,而低三位最大才是七!但它能決定這個任務在一組的某個地方(即能決定
x的值)而它的接下去三位與它在一組中的哪個位置沒有任何關係!因為去掉低三位,接下去三位始終是八的倍數,始終指向組的首位址!但它能決定
y的值!這樣,在乙個矩陣中,
x的值和
y的值都決定了,那麼這個任務所在的位置就決定了。這樣,使乙個任務進入就緒狀態和脫離就緒狀態也就簡單了。
讓任務脫離就緒狀態:
if((
osrdytbl[prio>> 3] &= ~osmaptbl[prio & 0x07]
)== 0x00
)osrdygrp &= ~osmaptbl[prio >> 0]
找出處於就緒狀態的優先順序最高的任務:
y = osunmaptbl[osrdygrp];
x = osunmaptbl[osrdytbl[y]];
prio = y << 3 + x ;
如果不用查表的話,如入是
osrdygrp = 00000010
,osrdytbl = 00010000
,通過觀察可以口算出
prio = 8*1 + 4 = 12
,即:osrdygrp
右移一位得到1,
osrdygrp右移4
位得到1
osunmaptbl
如何確定的呢??????????????????????????
佈線之我見
前段時間參與了網路實驗室的整個實施過程,有些感想,在此涼涼,一起學習下。在這之前,佈線給我的認識就是 網線連電腦,通了就成!現在看來我真是把機房佈線想的過於簡單了。事實上機房建設是一項集網路技術 裝飾 安全防範 防火 抗乾攏等多學科的綜合系統工程,在實施的過程中,不光要講究能保證業務,更要講究美觀與...
需求之我見
更換手機,前乙個手機花了不少錢,但是用的不爽,介面難看 電池用的快 訊號不好 攝像頭畫素低 掉漆快,任何乙個小小的問題點,都成為了我不再使用這個品牌的理由。低階 花很多錢,還受氣 在親自辦理寬頻的過程中,電信提出了強制打包的其他產品,比如 我只要寬頻,卻推出寬頻 網路電視的 除此之外沒有其他 買不買...
看書之我見
宋皇帝趙恆說過 富家不用買良田,書中自有千鍾粟 安居不用架高堂,書中自有 屋 出門莫恨無人隨,書中車馬多如簇 娶妻莫恨無良媒,書中自有顏如玉 男兒若遂平生志。六經勤向窗前讀。表示的意思是 讀書考取功名是當時人生的一條絕佳出路,考取功名後,才能得到財富和美女。可是書中真的有 屋嗎?真的有顏如玉嗎?我暫...