精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

鴻蒙輕內核M核源碼分析系列二數據結構-任務就緒隊列

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[398858]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

鴻蒙輕內核源碼分析上一個系列,我們分析了雙向循環鏈表的源碼。本文會繼續給讀者介紹源碼中重要的數據結構,任務基于優先級的就緒隊列Priority Queue。在講解時,會結合數據結構相關繪圖,培養讀者們的數據結構的平面想象能力,幫助更好的學習和理解這些數據結構的用法。

1 任務就緒隊列

在任務調度模塊,就緒隊列是個重要的數據結構。任務創建后即進入就緒態,并放入就緒隊列。在鴻蒙輕內核中,就緒隊列是一個雙向循環鏈表數組,每個數組元素就是一個鏈表,相同優先級的任務放入同一個鏈表。

任務就緒隊列Priority Queue主要供內部使用,用戶進行業務開發時不涉及,所以并未對外提供接口。雙向循環鏈表數組能夠更加方便的支持任務基于優先級進行調度。任務就緒隊列的核心代碼在kernel\src\los_task.c文件中。

1.1 任務就緒隊列的定義

在kernel\src\los_task.c文件中定義了和任務就緒隊列相關的主要變量。

源碼如下:

  1. ⑴ LITE_OS_SEC_BSS LOS_DL_LIST *g_losPriorityQueueList = NULL
  2.  
  3. ⑵ static LITE_OS_SEC_BSS UINT32 g_priqueueBitmap = 0; 
  4.  
  5. ⑶ #define PRIQUEUE_PRIOR0_BIT              (UINT32)0x80000000 
  6.  
  7. ⑷ #define OS_PRIORITY_QUEUE_PRIORITYNUM    32 

 其中⑴表示任務就緒隊列,是一個雙向鏈表數組,后文初始化該數組時會將數組長度設置為⑷處定義的OS_PRIORITY_QUEUE_PRIORITYNUM;⑵表示優先級位圖,標識了任務就緒隊列中已掛載的就緒任務所在的優先級;⑶表示優先級為0的比特位;⑷表示任務就緒隊列支持的優先級個數32,所以鴻蒙輕內核優先級的取值范圍為0-31,數值越小優先級越大。

優先級位圖g_priqueueBitmap的bit位和優先級的關系為bit=31-priority,優先級數組g_losPriorityQueueList[priority]包含了OS_PRIORITY_QUEUE_PRIORITYNUM個數組元素,每個數組元素都是一個雙向鏈表,同一優先級的處于就緒狀態的所有任務都會掛載到對應優先級的雙向鏈表中。

示意圖如下:

2 任務就緒隊列操作

2.1 初始化任務就緒隊列

任務就緒隊列初始化函數為OsPriQueueInit(),系統初始化階段被調用,調用路徑為:main.c:main() --> kernel\src\los_init.c:LOS_KernelInit() --> kernel\src\los_task.c:OsTaskInit() --> OsPriqueueInit()。

源碼如下:

  1. STATIC UINT32 OsPriqueueInit(VOID) 
  2.     UINT32 priority; 
  3. ⑴  UINT32 size = OS_PRIORITY_QUEUE_PRIORITYNUM * sizeof(LOS_DL_LIST); 
  4.  
  5.     g_losPriorityQueueList = (LOS_DL_LIST *)LOS_MemAlloc(m_aucSysMem0, size); 
  6.     if (g_losPriorityQueueList == NULL) { 
  7.         return LOS_NOK; 
  8.     } 
  9.  
  10.     for (priority = 0; priority < OS_PRIORITY_QUEUE_PRIORITYNUM; ++priority) { 
  11. ⑵      LOS_ListInit(&g_losPriorityQueueList[priority]); 
  12.     } 
  13.     return LOS_OK; 

 ⑴處計算就緒隊列數組需要的內存大小,然后為任務就緒隊列申請內存,占用內存為OS_PRIORITY_QUEUE_PRIORITYNUM個雙向鏈表所需要的內存大小,運行期間該內存不會釋放,為系統常駐內存。⑵處代碼將每一個數組元素都初始化為雙向循環鏈表。

2.2 任務就緒隊列插入

任務就緒隊列插入函數為OsPriqueueEnqueue(),該函數把就緒狀態的任務插入任務就緒隊列的尾部。在任務就緒隊列中,先調用隊列頭部的任務,最后調用隊列尾部的任務。

源碼如下:

  1. STATIC VOID OsPriqueueEnqueue(LOS_DL_LIST *priqueueItem, UINT32 priority) 
  2. ⑴  if (LOS_ListEmpty(&g_losPriorityQueueList[priority])) { 
  3. ⑵      g_priqueueBitmap |= (PRIQUEUE_PRIOR0_BIT >> priority); 
  4.     } 
  5.  
  6. ⑶  LOS_ListTailInsert(&g_losPriorityQueueList[priority], priqueueItem); 

 ⑴處先判斷指定優先級priority的任務就緒隊列是否為空,如果為空,則在⑵處更新優先級位圖,將第31-prioritybit位設置為1。⑶處把就緒狀態的任務插入任務就緒隊列的尾部,進行排隊。

2.3 從任務就緒隊列中刪除

從任務就緒隊列中刪除的函數為OsPriqueueDequeue()。任務被刪除、進入suspend阻塞狀態、優先級調整等場景中,都需要調用該函數把任務從任務就緒隊列中刪除。

源碼如下:

  1. STATIC VOID OsPriqueueDequeue(LOS_DL_LIST *priqueueItem) 
  2.     LosTaskCB *runningTask = NULL
  3. ⑴  LOS_ListDelete(priqueueItem); 
  4.  
  5. ⑵  runningTask = LOS_DL_LIST_ENTRY(priqueueItem, LosTaskCB, pendList); 
  6. ⑶  if (LOS_ListEmpty(&g_losPriorityQueueList[runningTask->priority])) { 
  7. ⑷      g_priqueueBitmap &= ~(PRIQUEUE_PRIOR0_BIT >> runningTask->priority); 
  8.     } 

 ⑴把任務從任務就緒隊列中刪除。⑵獲取被刪除任務的任務控制塊信息,以獲取任務的優先級。刪除完任務后隊列可能成為空隊列,所以⑶處代碼判斷任務就緒隊列是否為空,如果為空,則需要執行⑷處代碼,更新優先級位圖,將第31-prioritybit位設置為0。

2.4 獲取隊列中的最高優先級節點

獲取任務就緒隊列中優先級最高的鏈表節點的函數為OsPriQueueTop()。

源碼如下:

  1. STATIC LOS_DL_LIST *OsPriqueueTop(VOID) 
  2.     UINT32 priority; 
  3.  
  4. ⑴  if (g_priqueueBitmap != 0) { 
  5. ⑵      priority = CLZ(g_priqueueBitmap); 
  6. ⑶      return LOS_DL_LIST_FIRST(&g_losPriorityQueueList[priority]); 
  7.     } 
  8.  
  9.     return (LOS_DL_LIST *)NULL

 ⑴處判斷優先級位圖g_priqueueBitmap是否為0,如果為0則直接返回NULL,說明任務就緒隊列中沒有任何就緒狀態的任務。 ⑵處計算g_priqueueBitmap以二進制表示時高位為0的位數,其值就是任務的優先級priority,以此方法得到的優先級就是任務就緒隊列中所有優先級里最高的。然后⑶處從該優先級的隊列&g_losPriorityQueueList[priority]中獲取第一個鏈表節點,獲取的就是任務就緒隊列中優先級最高的任務。

2.5 獲取指定優先級的就緒任務的數量

獲取任務就緒隊列中指定優先級的任務數量的函數為OsPriqueueSize()。

源碼如下:

  1. STATIC UINT32 OsPriqueueSize(UINT32 priority) 
  2.     UINT32 itemCnt = 0; 
  3.     LOS_DL_LIST *curPQNode = (LOS_DL_LIST *)NULL
  4.  
  5. ⑴  LOS_DL_LIST_FOR_EACH(curPQNode, &g_losPriorityQueueList[priority]) { 
  6. ⑵      ++itemCnt; 
  7.     } 
  8.  
  9.     return itemCnt; 

 ⑴處代碼使用宏LOS_DL_LIST_FOR_EACH定義的for循環遍歷指定優先級priority的雙向鏈表,如果獲取到新節點則表示該優先級下有一個就緒任務,然后執行⑵處代碼,對計數進行加1操作,返回的結果就是指定優先級下有多少個就緒任務。

小結

掌握鴻蒙輕內核的優先級就緒隊列Priority Queue這一重要的數據結構,會給進一步學習、分析鴻蒙輕內核源代碼打下了基礎,讓后續的學習更加容易。后續也會陸續推出更多的分享文章,敬請期待。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-05-10 15:05:56

鴻蒙HarmonyOS應用

2021-06-17 09:36:07

鴻蒙HarmonyOS應用

2021-04-30 15:06:34

鴻蒙HarmonyOS應用

2021-06-04 14:15:10

鴻蒙HarmonyOS應用

2021-05-13 09:47:08

鴻蒙HarmonyOS應用

2021-09-22 14:36:32

鴻蒙HarmonyOS應用

2021-06-04 09:57:49

鴻蒙HarmonyOS應用

2022-01-10 15:31:44

鴻蒙HarmonyOS應用

2022-01-12 10:50:23

鴻蒙HarmonyOS應用

2021-05-20 09:50:20

鴻蒙HarmonyOS應用

2021-10-20 16:08:57

鴻蒙HarmonyOS應用

2021-05-25 09:28:34

鴻蒙HarmonyOS應用

2021-05-17 09:28:59

鴻蒙HarmonyOS應用

2021-05-08 15:14:50

鴻蒙HarmonyOS應用

2021-05-31 20:30:55

鴻蒙HarmonyOS應用

2021-05-14 10:34:29

鴻蒙HarmonyOS應用

2021-11-08 15:06:15

鴻蒙HarmonyOS應用

2022-03-03 18:28:28

Harmony進程任務管理模塊

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2022-03-11 20:23:14

鴻蒙源碼分析進程管理
點贊
收藏

51CTO技術棧公眾號

欧美在线极品| 免费av网站观看| 91蜜臀精品国产自偷在线| 欧美一区二区福利在线| 男的插女的下面视频| 欧美69xxxxx| 国产一区二区三区观看| 久久久影视精品| 第一次破处视频| 天堂va在线高清一区| 色一情一乱一乱一91av| 国产一区二区三区播放| 韩国三级在线观看久| 国产成人综合亚洲网站| 国产成人a亚洲精品| 青青草原国产视频| 日韩精品2区| 精品视频在线播放免| 97免费公开视频| 日本美女久久| 欧美日韩裸体免费视频| 黑人巨茎大战欧美白妇| 成人好色电影| 97久久精品人人做人人爽50路| 国产精品久久99久久| 国产午夜小视频| 在线观看免费一区二区| 国产亚洲精品va在线观看| 国产精品一级无码| 亚洲精品伦理| 欧美亚洲一区三区| 无码aⅴ精品一区二区三区浪潮 | 国产精品久久久久久久久毛片 | 亚洲一区二三区| 中国成人亚色综合网站| 69av亚洲| 欧美激情一区二区三区蜜桃视频| 久久精品magnetxturnbtih| 国产富婆一级全黄大片| 久久99久久99精品免视看婷婷| 国产成人久久精品| 成年人视频在线免费看| 亚洲区欧美区| 国内久久久精品| 久草中文在线视频| 欧美日韩精品免费观看视频完整| 久久精品2019中文字幕| 91av手机在线| 欧美va久久久噜噜噜久久| 中文字幕在线精品| 影音先锋男人资源在线观看| 成人羞羞网站入口免费| 综合欧美国产视频二区| 四虎影视1304t| 欧美成免费一区二区视频| 视频直播国产精品| 久久久久久久久久97| 久久精品亚洲欧美日韩精品中文字幕| 中文字幕久久精品| 欧洲性xxxx| 久久精品青草| 欧美激情在线观看视频| 日韩成人在线免费视频| 亚洲制服av| 国产精品劲爆视频| 国产精品区在线观看| 国产乱理伦片在线观看夜一区| 91久久久一线二线三线品牌| 亚洲AV无码精品国产| 不卡av免费在线观看| 久久久久久久久久久久久久一区 | 美女精品视频一区| 久久国产露脸精品国产| 国产亚洲精品自拍| 国产精品久久久久久亚洲影视| 亚洲 小说区 图片区| 国产一区二区免费在线| 国产精品日韩欧美一区二区三区 | 亚洲网站免费观看| 国产在线播放一区二区三区| 超碰97国产在线| 性xxxx视频播放免费| 欧美激情一区二区三区| 中文字幕第50页| 美女高潮视频在线看| 色噜噜狠狠成人中文综合| 久久久精品高清| 黄色免费大全亚洲| 国产一区二区黄| 无码人妻精品一区二区三区夜夜嗨| 国产精品videosex极品| 日韩69视频在线观看| 国产麻豆91视频| 91在线国产福利| 国产精品无码乱伦| 美女扒开腿让男人桶爽久久软| 欧美网站一区二区| 男人添女人荫蒂国产| 精品一级毛片| 久久久伊人欧美| 在线观看视频中文字幕| av中文字幕一区| 一区在线电影| 色偷偷色偷偷色偷偷在线视频| 欧美日韩一区成人| 亚洲av成人无码一二三在线观看| 日韩在线观看| 人九九综合九九宗合| 国产jzjzjz丝袜老师水多| 2021国产精品久久精品| 日韩a级黄色片| 久久久久久久性潮| 日韩精品视频免费专区在线播放| 欧美成人一区二区三区高清| 美女免费视频一区二区| 蜜桃麻豆91| 麻豆蜜桃在线| 91精品欧美福利在线观看| 鲁丝一区二区三区| 国产精品久久国产愉拍| 99影视tv| 18av在线视频| 欧美电影一区二区| 天天干天天舔天天操| 亚洲一区自拍| 国产原创精品| 俺来也官网欧美久久精品| 欧美一区二区三区人| 国产免费嫩草影院| 日韩精品视频网站| 免费在线成人av电影| 阿v视频在线| 精品sm捆绑视频| 久久久久久免费观看| 黄一区二区三区| 中文精品一区二区三区| 亚洲成人高清| 日韩在线观看免费全| 五月婷婷丁香在线| 久久久精品日韩欧美| 青青草视频在线免费播放| 色悠久久久久综合先锋影音下载 | а√在线中文网新版地址在线| 日韩欧美亚洲国产精品字幕久久久| 色哟哟一一国产精品| 麻豆精品蜜桃视频网站| 亚洲精品久久区二区三区蜜桃臀| 国产综合色在线观看| 国产一区二区三区视频免费| 欧美高清69hd| 国产精品国产三级国产普通话三级| 一级黄色香蕉视频| 成人免费在线观看av| 国产精品三级在线| 黄色小网站在线观看| 欧美一区二区观看视频| 欧美被狂躁喷白浆精品| 成人自拍视频在线| 日日碰狠狠添天天爽超碰97| 日韩三级视频| 国产成人精品一区| 伊人免费在线| 欧美一二三区在线观看| 免费看一级一片| 91在线国产福利| 亚洲激情在线观看视频| 亚洲国产日韩欧美在线| 99久久精品无码一区二区毛片| a级片免费在线观看| 日韩精品中文字幕视频在线| 无码人妻丰满熟妇奶水区码| 国产精品你懂的| 成年人性生活视频| 免费视频一区| 黄色网络在线观看| 青青草久久爱| 国产精品视频网站| 最新日本在线观看| 亚洲精品国产精品久久清纯直播 | 少妇淫片在线影院| 在线观看成人黄色| 精品国自产在线观看| 狠狠爱在线视频一区| 黑人狂躁日本娇小| 成人激情小说乱人伦| 91av俱乐部| 国产精品av久久久久久麻豆网| 欧美日韩精品免费看| 91亚洲精品在看在线观看高清| 久久人人爽人人爽人人片av高请| 九色在线播放| 欧美大片一区二区| 波多野结衣午夜| 亚洲一区二区三区在线看| 夜夜春很很躁夜夜躁| 成人美女视频在线看| 成人亚洲视频在线观看| 好看的av在线不卡观看| 欧美日韩一区二区三区在线视频 | 日韩亚洲欧美成人| 超碰在线播放97| 欧美中文一区二区三区| 伊人国产在线观看| 中文字幕高清不卡| 好吊色视频一区二区三区| 另类小说综合欧美亚洲| 欧美不卡在线播放| 国产精品成人99一区无码 | www.夜夜爽| 99国产精品视频免费观看一公开| 天天干天天操天天干天天操| 在线日韩一区| 国产精品日本一区二区| 国产999精品在线观看| 国产成人精品a视频一区www| av影院在线免费观看| 日韩在线观看你懂的| 青青免费在线视频| 欧美成人国产一区二区| 在线免费av网| 欧美亚洲综合网| 台湾佬中文在线| 午夜精品福利一区二区三区av| 朝桐光av在线| 国产精品国产三级国产普通话蜜臀 | 欧美日韩免费做爰视频| 亚洲欧美综合在线精品| 日本成人午夜影院| 国产亚洲精品bt天堂精选| 中文成人无字幕乱码精品区| 成人免费三级在线| 亚洲欧美激情一区二区三区| 国产最新精品免费| 亚洲va在线va天堂va偷拍| 麻豆久久久久久久| 一区二区三区韩国| 美日韩一区二区三区| 婷婷丁香激情网| 人禽交欧美网站| jizz18女人| 激情五月婷婷综合网| 污污视频在线免费| 国产在线不卡一卡二卡三卡四卡| 高潮一区二区三区| 国产在线精品一区二区| 黄色一级片免费播放| 国产一区二区免费在线| 亚洲成人激情小说| 成人午夜在线免费| 美女又爽又黄免费| 91视频观看视频| 久久久久久亚洲中文字幕无码| 久久久一区二区三区| 欧美偷拍一区二区三区| 国产精品三级av在线播放| 顶级黑人搡bbw搡bbbb搡| 亚洲天堂成人网| 久草免费在线观看视频| 性感美女久久精品| 亚洲s码欧洲m码国产av| 欧美专区亚洲专区| 一本色道久久综合精品婷婷| 91精品国产全国免费观看| 亚洲AV无码精品国产| 亚洲精品成人免费| 黄色毛片在线看| 精品国产拍在线观看| 美女羞羞视频在线观看| 欧美黑人性生活视频| 最新欧美色图| 国产欧美va欧美va香蕉在| 久久久91麻豆精品国产一区| 精品一区2区三区| 久久不见久久见国语| 二级片在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 最新中文字幕视频| 国产精品久久久久久久午夜片| 欧美日韩在线观看免费| 欧美日韩在线视频一区二区| 在线免费观看视频网站| 精品免费国产一区二区三区四区| 日韩大片b站免费观看直播| 日韩在线小视频| av日韩国产| 国产欧美亚洲精品| 激情视频极品美女日韩| 亚洲自拍的二区三区| 最新日韩欧美| 国产原创精品在线| 99精品国产99久久久久久白柏| 免费精品在线视频| 第一福利永久视频精品| 国产视频aaa| 亚洲欧美激情四射在线日| www.欧美日本韩国| 国产成人aa精品一区在线播放| 欧美欧美在线| 亚洲巨乳在线观看| 国产色综合网| 日本55丰满熟妇厨房伦| 国产欧美日本一区视频| 日本少妇激情舌吻| 51精品久久久久久久蜜臀| 玖玖综合伊人| 久久久久日韩精品久久久男男 | 模特精品在线| 日本人妻一区二区三区| 中文字幕成人av| 四虎精品永久在线| 日韩欧美国产一区在线观看| av在线电影免费观看| 97在线免费视频| 伊色综合久久之综合久久| 亚洲一区高清| 日韩国产高清在线| 亚洲av无码一区二区三区网址| 一区二区三区四区蜜桃| 亚洲影院一区二区三区| 亚洲品质视频自拍网| 国产美女精品写真福利视频| 超碰97在线资源| 欧美日韩国产探花| 女人扒开腿免费视频app| 国产精品久久久久aaaa| 国产精品无码粉嫩小泬| 亚洲免费一在线| 久久男人av资源站| 国产区二精品视| 亚洲一级黄色| 欧美色图校园春色| 最新国产成人在线观看| 中文字幕乱码视频| 亚洲午夜精品视频| 欧美日韩不卡| 欧美一区二区三区在线免费观看| 先锋a资源在线看亚洲| 免费a级黄色片| 色综合视频在线观看| 蜜桃成人在线视频| 日韩美女免费线视频| 你微笑时很美电视剧整集高清不卡| 日本一区二区黄色| 久久久久久久综合日本| 你懂的国产在线| 亚洲人成免费电影| 第四色男人最爱上成人网| 欧洲国产精品| 美女网站色91| 污软件在线观看| 日韩欧美电影在线| 草美女在线观看| 精品一区二区三区日本| 中日韩男男gay无套| 精品成人av一区二区三区| 无吗不卡中文字幕| 男人久久精品| 国产精品久久久久免费a∨| 成人一区而且| 亚洲国产综合av| 亚洲午夜在线电影| 视频一区二区三区在线看免费看| 人妖精品videosex性欧美| 欧美人与物videos另类xxxxx| 熟妇人妻无乱码中文字幕真矢织江| 国产精品不卡在线观看| 性做久久久久久久| 992tv成人免费影院| 美女精品一区最新中文字幕一区二区三区| 熟妇人妻va精品中文字幕 | 正在播放国产一区| 成人在线视频区| 精品少妇一区二区三区在线| 国产片一区二区| 99久久精品国产色欲| 性色av一区二区三区| 成人av动漫在线观看| 久草福利在线观看| 黑人巨大精品欧美一区二区三区 | 精品国产一区二区三区久久久蜜臀 | 黑人巨大精品| 中文字幕一区二区中文字幕| 成人激情小说网站| 中文字幕人妻一区二区三区视频 | 中国一级黄色录像| 93久久精品日日躁夜夜躁欧美| 中文字幕精品一区二| 欧美极品少妇与黑人| 国产欧美高清视频在线| 亚洲成人av免费观看| 亚洲v中文字幕| 看黄网站在线观看| 久久精品ww人人做人人爽| 韩国成人精品a∨在线观看| 日日夜夜综合网| 欧美二区乱c黑人| 日韩理论片av| 欧美大片免费播放器| 日韩女优电影在线观看| 国产精品久久久久久久久免费高清|