精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

性中国古装videossex| 久久精品色妇熟妇丰满人妻| yellow字幕网在线| 99re这里只有精品首页| 欧美一级淫片videoshd| 中文天堂资源在线| 一区二区在线免费播放| 色综合久久99| 最新热久久免费视频| 久久91亚洲人成电影网站| 黄色在线免费播放| 福利一区二区三区视频在线观看| 亚洲男同性恋视频| 免费久久久一本精品久久区| 艳妇乳肉豪妇荡乳av| 国产精品激情| 国产亚洲精品久久久久久| 男插女视频网站| 色婷婷综合久久久中字幕精品久久 | 春暖花开亚洲一区二区三区| 1000部国产精品成人观看| 精品久久久三级| 91美女精品网站| 久久深夜福利| 欧美黑人又粗大| 国精产品久拍自产在线网站| 三级小说欧洲区亚洲区| 6080yy午夜一二三区久久| 男人操女人免费软件| av大片在线| 国产精品水嫩水嫩| 欧美乱偷一区二区三区在线| www黄色网址| 美女国产一区二区三区| 2025国产精品视频| 久久久久久蜜桃| 午夜影院欧美| 在线观看精品国产视频| 亚洲精品理论片| 国产一区二区三区亚洲| 91精品国产91久久久久久一区二区 | 亚洲国产一区二区三区青草影视| 亚洲欧洲免费无码| 激情综合闲人网| 99久久精品一区二区| caoporen国产精品| 国产强被迫伦姧在线观看无码| 日本不卡高清视频| 国产精品99久久99久久久二8| 国产成人无码精品久在线观看 | 北条麻妃在线一区二区| 精品人妻无码一区二区三区换脸| 狼人精品一区二区三区在线| 精品国产一区二区三区av性色| 性鲍视频在线观看| 国产精品一区二区三区www| 欧美精品三级日韩久久| 免费看国产黄色片| 草莓视频成人appios| 在线看国产一区二区| 日批视频在线免费看| 人狥杂交一区欧美二区| 欧美性猛交xxxx富婆弯腰| 国产97在线 | 亚洲| 蜜桃视频在线观看播放| 黑人巨大精品欧美一区免费视频| 男人添女人下面高潮视频| 3344国产永久在线观看视频| 亚洲v中文字幕| heyzo国产| 高清电影一区| 欧美人与性动xxxx| 91大神免费观看| 99精品国产高清一区二区麻豆| 精品国产一区a| 亚洲制服丝袜在线播放| 亚洲资源网你懂的| 一本久久综合亚洲鲁鲁| 黄色录像免费观看| 欧美91精品| 亚洲 日韩 国产第一| 欧美 日韩 精品| 轻轻草成人在线| 91色中文字幕| 好吊视频一区二区三区| 国产亚洲精品资源在线26u| 亚洲国产欧洲综合997久久| 国产视频中文字幕在线观看| 一区二区三区精品| 女人扒开屁股爽桶30分钟| julia一区二区三区中文字幕| 欧美精品久久99| 亚洲熟女一区二区三区| 蜜桃成人av| 久久五月天综合| 五月天婷婷丁香| 日韩电影在线观看一区| 97se视频在线观看| 青青草免费在线视频| 国产精品成人免费| 日本在线xxx| 懂色aⅴ精品一区二区三区| 日韩欧美精品三级| 一区二区三区久久久久| 欧美日韩精品一本二本三本| 国产成人极品视频| 精品人妻无码一区二区| 久久久久久日产精品| www.-级毛片线天内射视视| 999福利在线视频| 欧美精品乱码久久久久久| 极品粉嫩小仙女高潮喷水久久| 国产韩国精品一区二区三区| 96精品视频在线| 99久久亚洲精品日本无码| 91蜜桃免费观看视频| 黄色录像特级片| 午夜无码国产理论在线| 亚洲国产精品大全| 日韩三级久久久| 巨乳诱惑日韩免费av| 91在线精品视频| 毛片网站在线| 香蕉久久一区二区不卡无毒影院 | 丰满女人性猛交| 成人天堂yy6080亚洲高清| 亚洲电影第1页| 亚洲色图综合区| 蜜臀91精品一区二区三区| 久久精品午夜一区二区福利| 性欧美video高清bbw| 欧美午夜片在线看| 久久精品国产亚洲av久| 亚洲国产精品一区| 99在线观看| 成年人网站在线| 欧美久久久久久蜜桃| 久久美女免费视频| 香蕉久久夜色精品| 国产一区二区视频在线免费观看| 婷婷丁香在线| 日韩亚洲电影在线| 日韩三级在线观看视频| 久久综合综合久久综合| 性欧美.com| 日本另类视频| 亚洲一区二区久久久| 亚洲 日本 欧美 中文幕| 波多野结衣一区二区三区| 国产精品视频网站在线观看| 韩国一区二区三区视频| 久久久国产精彩视频美女艺术照福利| 中文天堂在线资源| 欧美国产精品v| 黄色片视频在线| 欧美激情国产在线| 亚洲a中文字幕| 尤物yw193can在线观看| 日韩三级精品电影久久久| 中文字幕另类日韩欧美亚洲嫩草| 国模娜娜一区二区三区| 桥本有菜av在线| 久久视频社区| 久久久久国产精品www| 熟妇人妻中文av无码| 图片区小说区区亚洲影院| 国产精品300页| 老鸭窝亚洲一区二区三区| 欧美一区1区三区3区公司| www成人在线视频| 色婷婷**av毛片一区| 又污又黄的网站| 亚洲欧美日韩国产一区二区三区| 手机在线观看日韩av| 在线欧美三区| 日韩av大全| 99久久99九九99九九九| 欧美大片在线看免费观看| 神马午夜精品95| 色婷婷国产精品| 亚洲国产123| 成人福利在线看| 国内外免费激情视频| 91欧美日韩| 国产精品久久久久久久小唯西川 | 99久久99热这里只有精品| 亚洲自拍小视频| 午夜欧美激情| 日韩中文第一页| 国 产 黄 色 大 片| 一本到高清视频免费精品| 日本二区三区视频| 成人18视频在线播放| 午夜视频在线瓜伦| 亚洲国产精品91| 美女主播视频一区| 国产成人久久精品一区二区三区| 亚洲 日韩 国产第一| 1024国产在线| 亚洲精品电影网站| 国产一区二区三区四区视频 | www国产免费| 亚洲高清极品| www.久久久| 高清av一区| 97精品一区二区三区| 风间由美一区| 亚洲成人av在线| 一级黄色短视频| 欧美色播在线播放| 久久在线视频精品| 国产精品美女一区二区| 成人午夜精品无码区| 六月丁香综合在线视频| 少妇高潮喷水在线观看| 91成人网在线观看| 欧洲亚洲一区| 激情小说一区| 91久久久一线二线三线品牌| 蜜桃视频成人m3u8| 欧美在线观看视频| 波多野结衣在线播放| 久久视频在线观看免费| 国内精品一区视频| 亚洲精品www久久久| 国产999久久久| 欧美日韩成人一区二区| 五月婷婷激情五月| 黑人精品xxx一区一二区| 久久婷婷一区二区| 一区二区三区日韩欧美精品| 国产三级在线观看完整版| 久久亚洲一区二区三区明星换脸| 无码人妻丰满熟妇啪啪网站| 精品一区二区三区欧美| 538任你躁在线精品免费| 美女国产精品| 免费在线观看毛片网站| 亚洲专区一区二区三区| www.射射射| 亚洲激情黄色| 福利视频一二区| 精品999成人| 国产免费一区二区视频| 欧美精品二区| 韩国无码av片在线观看网站| 综合久久一区| 国产日韩欧美大片| 欧美激情成人在线| 日本道在线视频| 91精品推荐| 国产91在线亚洲| 黄色亚洲在线| 福利视频一二区| 亚洲在线免费| www.xxx亚洲| 欧美aaaaaa午夜精品| 一区二区三区 欧美| 免费亚洲电影在线| 男人午夜视频在线观看| 精品写真视频在线观看| 日本中文字幕在线不卡| 国产成人8x视频一区二区| 亚洲av成人片无码| 久久综合狠狠综合久久综合88 | 国产精品玖玖玖| 4438x亚洲最大成人网| www.成人精品| 亚洲精品久久久久久下一站| 日本福利片在线| 欲色天天网综合久久| 黄在线免费观看| 色与欲影视天天看综合网| 国产免费拔擦拔擦8x高清在线人| 欧美有码在线观看| 欧美性aaa| 高清国语自产拍免费一区二区三区| 国产成人精品亚洲线观看| 噜噜噜噜噜久久久久久91| 精品中文一区| 一级一片免费播放| 激情综合电影网| 日本三区在线观看| 国产呦萝稀缺另类资源| 毛茸茸free性熟hd| 欧美激情一区二区三区| 曰本女人与公拘交酡| 欧美日韩激情网| 国产又粗又猛又爽又黄的| 精品日产卡一卡二卡麻豆| 免费在线超碰| 欧美成在线视频| xxxxxx欧美| 亚洲自拍偷拍在线| 国产探花一区在线观看| 日韩精品第1页| 久久亚洲一区| 亚洲熟女乱综合一区二区| 久久久亚洲午夜电影| www.97视频| 日本高清视频一区二区| 亚洲精品成av人片天堂无码| 国产亚洲成精品久久| 后进极品白嫩翘臀在线播放| 国产国产精品人在线视| 1313精品午夜理伦电影| 亚洲一区二区四区| 国产日韩欧美一区| 日韩精品视频网址| 国产日韩成人精品| 国产精品1234区| 欧美精品色综合| 福利在线午夜| 国产91精品不卡视频| 日韩三级网址| 亚洲人成网站在线播放2019| 国产女优一区| 中文字幕天堂av| 亚洲色图一区二区| 中文字幕日日夜夜| 精品偷拍各种wc美女嘘嘘| 婷婷色在线资源| 91久久久久久久久久久久久| 成人免费在线播放| 国产日韩一区二区在线| 成人丝袜高跟foot| 欧美视频www| 欧美日韩一卡二卡三卡 | 最近2019年中文视频免费在线观看| 第一中文字幕在线| 91在线国产电影| 国产国产精品| 午夜免费福利视频在线观看| 久久久亚洲精品一区二区三区| 日韩精品久久久久久久| 欧美成人国产一区二区| 午夜影院免费在线| 91精品视频专区| 91精品国产自产拍在线观看蜜| 91人人澡人人爽人人精品| 久久久精品影视| 伊人手机在线视频| 精品丝袜一区二区三区| 中文av在线全新| 欧美午夜欧美| 日韩高清不卡一区| 天天操天天干天天操天天干| 日本韩国精品一区二区在线观看| 伦理片一区二区三区| 日本一区二区在线播放| 亚洲香蕉视频| 成人性视频欧美一区二区三区| 久久久亚洲高清| 国产精品xxxxxx| 中文字幕在线视频日韩| 欧美黄页免费| 熟女熟妇伦久久影院毛片一区二区| 黑人巨大精品欧美一区| 中文字幕在线有码| 精品国一区二区三区| h片精品在线观看| 久久精彩视频| 三级亚洲高清视频| 少妇愉情理伦三级| 91麻豆精品国产自产在线| 超碰个人在线| 成人免费视频网站| 夜夜嗨一区二区三区| 手机av免费看| 欧美日韩成人在线一区| 伊人精品影院| 鲁丝一区鲁丝二区鲁丝三区| 日本不卡中文字幕| 日韩欧美123区| 亚洲第一视频在线观看| 夜鲁夜鲁夜鲁视频在线播放| 色噜噜一区二区| 国产精品一区二区在线播放| 国产精品不卡av| 亚洲色图偷窥自拍| 亚洲一区有码| 日韩xxxx视频| 欧美激情在线一区二区三区| 国产美女明星三级做爰| 欧美精品videosex极品1| 最新国产精品视频| 97人人爽人人| 疯狂蹂躏欧美一区二区精品| 在线免费观看的av网站| 成人激情直播| 秋霞成人午夜伦在线观看| 精品无码m3u8在线观看| 亚洲人成电影网站色xx| 欧美视频精品全部免费观看| 国产超级av在线| 亚洲视频一区二区免费在线观看| 日韩一级免费视频| 国产欧美一区二区三区四区 | 乱亲女秽乱长久久久| 精品三级av在线导航|