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

鴻蒙內核源碼分析(CPU篇) | 內核是如何描述CPU的 ?

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

[[391700]]

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

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

https://harmonyos.51cto.com

本篇說清楚CPU

cpu是負責執行指令的,誰能給它指令?是線程(也叫任務), 任務是內核的調度單元,調度到哪個任務CPU就去執行哪個任務的指令. 要執行指令就要有個取指令的開始地址. 開始地址就是大家所熟知的main函數.一個程序被加載解析后內核會在ELF中找到main函數的位置,并自動創建一個線程,指定線程的入口地址為main函數的地址,由此開始了取指,譯指,執指之路.

多線程內核是怎么處理的? 一樣的, 以JAVA舉例,對內核來說 new thread中的run() 函數 和 main() 并沒有區別. 都是一個線程(任務)的執行入口. 注意在系列篇中反復的說任務就是線程,線程就是任務,它們是一個東西在不同層面上的描述.對應用層說線程,對內核層說任務. 有多少個線程就會有多少個入口,它們統一接受調度算法的調度, 調度算法只認優先級的高低,不會管你是main() 還是 run() 而區別對待.

定時器的實現也是通過任務實現的,只不過是個系統任務OsSwtmrTaskCreate,優先級最高,和入口地址OsSwtmrTask由系統指定.

所以理解CPU就要先理解任務,任務是理解內核的主線,把它搞明白了分析內核就輕輕松松,事半功倍了.看似高深的CPU只不過是摟草打兔子.

不相信?那就看看內核對CPU是怎么描述的吧.本篇就圍繞這個結構體展開說.

內核如何描述CPU?

[[391701]]

  1. typedef struct {//內核對cpu的描述 
  2.     SortLinkAttribute taskSortLink;             /* task sort link */    //task wait/delay 排序鏈表 
  3.     SortLinkAttribute swtmrSortLink;            /* swtmr sort link */   //定時器排序鏈表 
  4.     UINT32 idleTaskID;                          /* idle task id */      //空閑任務ID 見于 OsIdleTaskCreate 
  5.     UINT32 taskLockCnt;                         /* task lock flag */    //任務鎖的數量,當 > 0 的時候,需要重新調度了 
  6.     UINT32 swtmrHandlerQueue;                   /* software timer timeout queue id */   //軟時鐘超時隊列句柄 
  7.     UINT32 swtmrTaskID;                         /* software timer task id */    //軟時鐘任務ID 
  8.     UINT32 schedFlag;                           /* pending scheduler flag */    //調度標識 INT_NO_RESCH INT_PEND_RESCH 
  9. #if (LOSCFG_KERNEL_SMP == YES) 
  10.     UINT32 excFlag;                             /* cpu halt or exc flag */  //CPU處于停止或運行的標識 
  11. #endif 
  12. } Percpu; 

結構體不復雜,但很重要,一個一個掰開了說.

● taskSortLink是干什么用的? 一個任務在運行過程中,會經常會主動或被動中斷,而進入等待狀態.

◊ 主動中斷情況, 例如:主動delay300毫秒,這是應用層很常見的操作.

◊ 被動中斷情況, 例如:申請互斥鎖失敗,等待某個事件發生 等等. 發生這些情況時任務將被掛到taskSortLink上.

  1. UINT32 OsTaskWait(LOS_DL_LIST *list, UINT32 timeout, BOOL needSched) 
  2.     LosTaskCB *runTask = NULL
  3.     LOS_DL_LIST *pendObj = NULL
  4.  
  5.     runTask = OsCurrTaskGet();//獲取當前任務 
  6.     OS_TASK_SCHED_QUEUE_DEQUEUE(runTask, OS_PROCESS_STATUS_PEND);//將任務從就緒隊列摘除,并變成阻塞狀態 
  7.     pendObj = &runTask->pendList; 
  8.     runTask->taskStatus |= OS_TASK_STATUS_PEND;//給任務貼上阻塞任務標簽 
  9.     LOS_ListTailInsert(list, pendObj);//將阻塞任務掛到list上,,這步很關鍵,很重要! 
  10.     if (timeout != LOS_WAIT_FOREVER) {//非永遠等待的時候 
  11.         runTask->taskStatus |= OS_TASK_STATUS_PEND_TIME;//阻塞任務再貼上在一段時間內阻塞的標簽 
  12.         OsAdd2TimerList(runTask, timeout);//把任務加到定時器鏈表中 
  13.     } 
  14.  
  15.     if (needSched == TRUE) {//是否需要調度 
  16.         OsSchedResched();//申請調度,里面直接切換了任務上下文,至此任務不再往下執行了. 
  17.         if (runTask->taskStatus & OS_TASK_STATUS_TIMEOUT) {//這條語句是被調度再次選中時執行的,和上面的語句可能隔了很長時間,所以很可能已經超時了 
  18.             runTask->taskStatus &= ~OS_TASK_STATUS_TIMEOUT;//如果任務有timeout的標簽,那么就去掉那個標簽 
  19.             return LOS_ERRNO_TSK_TIMEOUT; 
  20.         } 
  21.     } 
  22.     return LOS_OK; 
  23. LITE_OS_SEC_TEXT STATIC INLINE VOID OsAdd2TimerList(LosTaskCB *taskCB, UINT32 timeOut) 
  24.     SET_SORTLIST_VALUE(&taskCB->sortList, timeOut);//設置idxRollNum的值為timeOut 
  25.     OsAdd2SortLink(&OsPercpuGet()->taskSortLink, &taskCB->sortList);//將任務掛到定時器排序鏈表上 
  26. #if (LOSCFG_KERNEL_SMP == YES)//注意:這里的排序不是傳統意義上12345的排序,而是根據timeOut的值來決定放到CPU core哪個taskSortLink[0:7]鏈表上 
  27.     taskCB->timerCpu = ArchCurrCpuid(); 
  28. #endif 

  1. `OsAdd2SortLink`,將任務掛到排序鏈表上,因等待時間不一樣,所以內核會對這些任務按時間長短排序. 

● 定時器相關三個變量,在系列篇定時器機制篇中已有對定時器的詳細描述,可前往查看.

  1. SortLinkAttribute swtmrSortLink;//CPU要處理的定時器鏈表 
  2. UINT32 swtmrHandlerQueue; //隊列中放各個定時器的響應函數 
  3. UINT32 swtmrTaskID; // 其實就是 OsSwtmrTaskCreate 

搞明白定時器的機制只需搞明白: 定時器(SWTMR_CTRL_S),定時任務(swtmrTaskID),定時器響應函數

(SwtmrHandlerItem),定時器處理隊列swtmrHandlerQueue 四者的關系就可以了. 一句話概括:定時任務swtmrTaskID是個系統任務,優先級最高,它循環讀取隊列swtmrHandlerQueue中的已到時間的定時器(SWTMR_CTRL_S),并執行定時器對應的響應函數SwtmrHandlerItem.

● idleTaskID空閑任務,注意這又是個任務,每個cpu核都有屬于自己的空閑任務,cpu沒事干的時候就待在里面.空閑任務長什么樣? Look!

  1. LITE_OS_SEC_TEXT WEAK VOID OsIdleTask(VOID) 
  2.     while (1) {//只有一個死循環 
  3.     #ifdef LOSCFG_KERNEL_TICKLESS //低功耗模式開關, idle task 中關閉tick 
  4.     if (OsTickIrqFlagGet()) { 
  5.         OsTickIrqFlagSet(0); 
  6.         OsTicklessStart(); 
  7.     } 
  8.     #endif 
  9.         Wfi();//WFI指令:arm core 立即進入low-power standby state,等待中斷,進入休眠模式。 
  10.     } 
  11.  
  12. 一個死循環,只有一條匯編指令`Wfi`. 啥意思? 
  13. `WFI`(Wait for interrupt):等待中斷到來指令. `WFI`一般用于cpuidle,WFI 指令是在處理器發生中斷或類似異常之前不需要做任何事情。具體在[鴻蒙內核源碼分析(總目錄)](https://my.oschina.net/u/3751245/blog/4626852)自旋鎖篇中有詳細描述,可前往查看. 

● taskLockCnt 這個很簡單,記錄等鎖的任務數量.任務在運行過程中優先級是會不斷地變化的, 例如 高優先級的A任務在等某鎖,但持有鎖的一方B任務優先級低,這時就會調高B的優先級至少到A的等級,提高B被調度算法命中的概率,如此就能快速的釋放鎖交給A運行. taskLockCnt記錄被CPU運行過的正在等鎖的任務數量.

● schedFlag 調度的標簽.

  1. typedef enum { 
  2. INT_NO_RESCH = 0,   /* no needs to schedule *///不需要調度 
  3. INT_PEND_RESCH,     /* pending schedule flag *///阻止調度 
  4. } SchedFlag; 

調度并不是每次都能成功的,在某些情況下內核會阻止調度進行.例如:OS_INT_ACTIVE硬中斷發生的時候.

  1. STATIC INLINE VOID LOS_Schedule(VOID) 
  2.     if (OS_INT_ACTIVE) {//發生硬件中斷,調度被阻塞 
  3.         OsPercpuGet()->schedFlag = INT_PEND_RESCH;// 
  4.         return
  5.     } 
  6.     OsSchedPreempt();//搶占式調度 

● excFlag標識CPU的運行狀態,只在多核CPU下可見.

  1. #if (LOSCFG_KERNEL_SMP == YES) 
  2. typedef enum { 
  3.     CPU_RUNNING = 0,   /* cpu is running */     //CPU正在運行狀態 
  4.     CPU_HALT,          /* cpu in the halt */    //CPU處于暫停狀態 
  5.     CPU_EXC            /* cpu in the exc */     //CPU處于異常狀態 
  6. } ExcFlag; 
  7. #endif 

以上為內核對CPU描述的全貌,不是很復雜.多CPU的協同工作部分在后續篇中介紹.

參與貢獻

訪問注解倉庫地址

Fork 本倉庫 >> 新建 Feat_xxx 分支 >> 提交代碼注解 >> 新建 Pull Request

新建 Issue

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

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

https://harmonyos.51cto.com

 

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

2021-03-11 11:14:39

鴻蒙HarmonyOS應用

2021-04-09 16:39:41

鴻蒙HarmonyOS應用

2021-07-06 09:45:03

鴻蒙HarmonyOS應用

2009-12-21 11:16:56

Fedora內核源碼

2021-01-22 09:47:22

鴻蒙HarmonyOS應用開發

2021-03-15 15:18:16

鴻蒙HarmonyOS應用

2021-04-02 09:42:54

鴻蒙HarmonyOS應用

2021-04-01 17:36:30

鴻蒙HarmonyOS應用開發

2011-07-28 10:11:04

CPU開源Linux內核3.1

2025-10-17 09:24:51

2021-05-10 08:20:32

CPU 符號整數

2021-04-07 15:11:26

鴻蒙HarmonyOS應用

2021-03-30 15:30:44

鴻蒙HarmonyOS應用開發

2021-04-12 18:14:56

鴻蒙HarmonyOS應用開發

2021-06-24 11:21:45

Linux 5.14MicroWatt處理器

2020-08-31 19:15:28

CPU內核SGX

2019-03-27 09:14:38

CPU內核應用程序

2017-12-08 09:56:28

內核服務器性能

2010-05-27 16:41:30

Linux查看版本

2023-04-28 08:42:08

Linux內核SPI驅動
點贊
收藏

51CTO技術棧公眾號

美女网站色91| 精品人妻av一区二区三区| 四虎5151久久欧美毛片| 欧美综合天天夜夜久久| 天天操天天干天天玩| 隣の若妻さん波多野结衣| 久操成人av| 欧美日韩高清不卡| 日韩欧美在线电影| 国产人妖在线播放| 久久国产毛片| 久久99久久久久久久噜噜| 白丝女仆被免费网站| 亚洲青青久久| 欧美色图在线视频| 精品欧美国产| 97人妻精品一区二区三区软件| 激情综合激情| 精品免费视频一区二区| 久久天天东北熟女毛茸茸| 男人天堂一区二区| 国产专区一区| 中文字幕日韩av| 六十路息与子猛烈交尾| 999精品嫩草久久久久久99| 欧美午夜视频一区二区| av中文字幕av| 免费av在线网站| 久久精品视频免费| 国产欧美日韩一区| 99久久精品日本一区二区免费 | 国产一区在线观看麻豆| 7777免费精品视频| 亚洲一区二区三区四区av| 欧美精选视频一区二区| 精品国产成人av| 人妻互换免费中文字幕| 成人精品在线播放| 精品午夜久久福利影院| 国产精品久久久久久久久久久新郎| 国产福利久久久| 中文视频一区| 精品久久久网站| 加勒比av中文字幕| 粉嫩91精品久久久久久久99蜜桃| 黑人巨大精品欧美一区二区一视频 | 九九九九九国产| 在线成人视屏| 亚洲欧洲美洲综合色网| 日本电影一区二区三区| 久草在线免费福利资源| wwwwww.欧美系列| 国产成人极品视频| 久久久久久久久久影院| 精品成人免费| 国内精品免费午夜毛片| 2021亚洲天堂| 欧美精品91| 久久免费成人精品视频| 日本在线视频免费观看| 欧美色婷婷久久99精品红桃| 日韩一区二区三区电影在线观看| 久久精品国产露脸对白| 国产成人久久精品一区二区三区| 欧美美女一区二区| 日韩av在线播放不卡| 激情网站在线| 亚洲成人手机在线| 欧美在线观看成人| 久久精品女人天堂av免费观看| 色诱视频网站一区| 日av中文字幕| 日韩精品一页| 欧美r级在线观看| 精品国产一区在线| 九九精品久久| 色偷偷888欧美精品久久久| 亚洲AV无码国产成人久久| jizzjizz欧美69巨大| 久久久国产精彩视频美女艺术照福利| 欧美日韩免费做爰视频| 亚洲精品123区| 国产精品99久久99久久久二8| 一区二区视频网站| 国产·精品毛片| 久久综合色一本| 成人午夜福利视频| 91麻豆免费在线观看| 亚洲精品一区二区三区蜜桃久| 丰满人妻一区二区三区免费| 97久久精品人人澡人人爽| 日韩中文字幕av在线| 自由的xxxx在线视频| 国产精品天美传媒| 97在线免费视频观看| 国产三级电影在线播放| 在线精品观看国产| 国产乱淫av麻豆国产免费| 九九精品在线| 欧美丰满老妇厨房牲生活| 91午夜精品亚洲一区二区三区| 激情综合色播激情啊| 国产综合精品一区二区三区| 一本一道波多野毛片中文在线| 亚洲午夜私人影院| 性刺激的欧美三级视频| 给我免费播放日韩视频| 日韩在线观看你懂的| 亚洲一区欧美在线| 韩国三级在线一区| 日韩av在线电影观看| а√天堂8资源在线| 8v天堂国产在线一区二区| 精品无码在线视频| 欧美亚韩一区| 成人精品aaaa网站| 国产系列电影在线播放网址| 国产亚洲精品资源在线26u| 欧美一级中文字幕| 九七影院97影院理论片久久| 日韩成人免费视频| 欧美极品aaaaabbbbb| 免费观看日韩电影| 欧美亚洲另类久久综合| av蜜臀在线| 日韩免费观看高清完整版在线观看| 人妻视频一区二区| 香蕉精品999视频一区二区| 成人av免费看| a级影片在线观看| 欧美日韩精品欧美日韩精品一 | 精品久久久久久久久久久下田| 久久久久免费精品国产| 精品二区在线观看| 亚洲精品国产高清久久伦理二区| 一道本视频在线观看| 欧美日韩123| 国产91在线播放| 亚洲色图21p| 亚洲一区二区在线免费看| 色男人天堂av| 91精品综合久久久久久久久久久 | 久久综合伊人77777麻豆最新章节| 久久97精品| 国内精品伊人久久| 日本黄色三级视频| 午夜精品久久久久久久蜜桃app| 人妻精品无码一区二区三区| 福利电影一区 | jizzyou欧美16| 在线观看日韩专区| 自拍偷拍第八页| 欧美激情中文不卡| 国产一伦一伦一伦| 国产精品99一区二区三| 成人国产精品av| a级影片在线观看| 精品国产乱码久久久久久图片 | 欧美成人视屏| 5858s免费视频成人| 日韩视频中文字幕在线观看| 国产伦精品一区二区三区免费| 国产精品12p| aiai久久| 欧美一级大片在线观看| 激情小视频在线观看| 在线国产电影不卡| 天天色天天综合| 国产成人精品三级| 国产精品秘入口18禁麻豆免会员| 国产欧美日韩免费观看| 蜜臀久久99精品久久久无需会员| 国产日产亚洲系列最新| 一区二区三区日韩欧美精品 | 日本一区免费视频| 精品综合久久久久| 国产字幕视频一区二区| 快播亚洲色图| 国产精品原创视频| 欧美激情精品久久久久久变态| 少妇喷水在线观看| 91福利视频网站| 久久久精品视频免费观看| av电影在线观看一区| 999精彩视频| 国精品一区二区三区| 日本不卡久久| 99亚洲乱人伦aⅴ精品| 青青久久av北条麻妃海外网| 免费高清在线观看| 亚洲激情在线视频| 91丨九色丨蝌蚪丨对白| 国产区在线观看成人精品| 中文字幕第一页在线视频| 日韩香蕉视频| 综合色婷婷一区二区亚洲欧美国产| www国产精品| 国产精品美乳一区二区免费 | 国产精品丝袜一区二区三区| 欧美aaaaaaa| 在线电影av不卡网址| 日本xxxx人| 91精品综合久久久久久| 欧美a视频在线观看| 亚洲精品国产成人久久av盗摄| 成人国产精品久久久网站| 国产成人av一区二区| 看欧美ab黄色大片视频免费 | 欧美日韩在线二区| 国产日韩亚洲精品| 自拍偷拍亚洲| 国产精品99久久久久久www| 丰满大乳少妇在线观看网站| 亚洲图片欧美日产| 久久久久久无码午夜精品直播| 亚洲免费观看高清完整版在线| 国产成人精品无码免费看夜聊软件| 国产福利一区二区三区视频在线| 国产熟人av一二三区| 亚洲乱亚洲高清| 欧美日韩午夜爽爽| 日韩一区亚洲二区| 欧洲精品码一区二区三区免费看| 北条麻妃在线一区二区免费播放| 成人国产精品久久久久久亚洲| 三上悠亚国产精品一区二区三区| 午夜精品福利视频| 蜜臀av国内免费精品久久久夜夜| www.亚洲成人| 幼a在线观看| 一区二区三区精品99久久 | 国产精品三级电影| 久久精品无码一区| 久久久亚洲精品石原莉奈| 四季av综合网站| 不卡一区二区三区四区| 亚洲中文字幕无码专区| 亚洲天堂久久| 特大黑人娇小亚洲女mp4| 99精品小视频| 在线不卡日本| 香蕉视频国产精品 | 亚洲美女黄网| 日韩av新片网| 亚洲黑丝一区二区| 自拍日韩亚洲一区在线| 亚洲国产高清视频| 欧美一级视频免费看| 亚洲国产免费看| 欧美日韩黄色一级片| 亚洲永久免费精品| 国产无套粉嫩白浆内谢的出处| 久久久成人网| 午夜激情在线观看视频| 麻豆精品国产传媒mv男同| 亚洲视频一二三四| 国产一区视频网站| 美女露出粉嫩尿囗让男人桶| 成人免费视频一区| 黑丝av在线播放| 26uuu国产在线精品一区二区| 久久亚洲AV成人无码国产野外| 久久久99久久精品欧美| 欧美成人另类视频| 日韩美女久久久| 久久久精品视频免费| 狠狠躁夜夜躁人人爽天天天天97 | 欧美一区二区在线播放| 国产黄色一级大片| 日韩久久午夜影院| 国产福利小视频在线| 日韩视频一区在线| 黑人精品视频| 国产成人亚洲综合91| 日韩国产一二三区| 国产一区二区免费在线观看| 欧美极品在线观看| 手机在线视频你懂的| 红桃视频欧美| 日韩av片网站| 国产成人免费在线| 亚洲国产日韩一区无码精品久久久| 国产精品国产精品国产专区不片| 久久午夜无码鲁丝片午夜精品| 欧美日韩一区二区精品| 亚洲天天综合网| 色偷偷久久一区二区三区| 曰批又黄又爽免费视频| 精品国产一区二区三区久久影院| 九色在线观看| 欧美日韩xxxxx| 偷拍中文亚洲欧美动漫| 亚洲自拍偷拍一区| 国产成人手机高清在线观看网站| 免费成人深夜夜行网站视频| 久久久777| 99免费观看视频| 国产精品乱人伦| 四虎精品永久在线| 亚洲一区在线观看网站| 日韩国产成人在线| 精品国产乱码久久久久久久| 成人亚洲性情网站www在线观看| 久久久久国产精品免费| 国产成人免费精品| 精品在线视频一区二区| 中文在线播放一区二区| 国产精品人人爽人人爽| thepron国产精品| www.5588.com毛片| 欧美亚洲一区二区在线观看| 日本精品999| 久久福利视频导航| 日日夜夜综合| 水蜜桃亚洲一二三四在线| 日本道不卡免费一区| 国产又黄又大又粗视频| 成人精品在线视频观看| 成人免费精品动漫网站| 欧美写真视频网站| 国产高清自拍视频在线观看| 欧美重口另类videos人妖| 久久悠悠精品综合网| 无码人妻精品一区二区三区99v| 日本中文一区二区三区| www.中文字幕av| 高跟丝袜一区二区三区| 午夜成人鲁丝片午夜精品| 久久久久久久国产精品视频| 精品中文字幕一区二区三区四区 | 美女91在线| 亚洲中国色老太| 91精品高清| 久久aaaa片一区二区| 亚洲视频一区二区在线| 国产精品主播一区二区| 日韩亚洲欧美中文在线| 欧美高清你懂的| 亚洲欧美国产不卡| 久久精品99国产精品| 亚洲一级理论片| 欧美精品v国产精品v日韩精品| 日韩精品毛片| 91在线精品播放| 综合久久亚洲| 亚洲AV成人精品| 亚洲福利电影网| 四虎影视2018在线播放alocalhost| 国内揄拍国内精品| 亚欧日韩另类中文欧美| 国模杨依粉嫩蝴蝶150p| 欧美国产国产综合| 一级黄色片免费看| www国产精品com| 亚洲大奶少妇| 少妇av一区二区三区无码| 91免费精品国自产拍在线不卡| 亚洲精品午夜国产va久久成人| 亚洲视频一区二区| 久久免费资源| 日韩成人手机在线| 91视频观看免费| 中国老头性行为xxxx| 久久久精品视频成人| 99热这里只有精品首页| 91视频最新入口| 国产精品视频一二| 国产剧情久久久| 久久久久久久久久久国产| 亚洲人成网www| www.xxx麻豆| 美女久久久精品| 九九精品视频免费| 精品国产乱码91久久久久久网站| 性xxxxfreexxxxx欧美丶| 亚洲成人自拍视频| 丰满岳乱妇一区二区三区| 五月婷婷视频在线| 久久精品国产v日韩v亚洲| 成人免费在线电影网| 天堂社区在线视频| 亚洲精品国产一区二区三区四区在线| 日本xxxx人| 国产日韩综合一区二区性色av| 午夜精品久久| 日韩一区二区a片免费观看| 欧美一区二区三区在线观看视频| aa国产成人| 在线免费一区| 2020国产精品| 亚洲国产一二三区| 久久中文字幕视频| 香蕉久久99| 波多野结衣电影免费观看| 色哟哟一区二区在线观看| www在线观看播放免费视频日本| 久久另类ts人妖一区二区| 国产一区二区三区在线看麻豆| 国产精品久久久久久久久久久久久久久久久 | av一区二区三区免费|