成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

鴻蒙內核源碼分析(中斷概念篇) | 外人眼中權勢滔天的當紅海公公

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

[[390736]]

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

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

https://harmonyos.51cto.com

 關于中斷部分系列篇將用三篇詳細說明整個過程.

中斷概念篇 中斷概念很多,比如中斷控制器,中斷源,中斷向量,中斷共享,中斷處理程序等等.本篇做一次整理.先了解透概念才好理解中斷過程.本篇的主角是海公公,用海公公打比方說明白中斷各個概念.

中斷管理篇 從中斷初始化HalIrqInit開始,到注冊中斷的LOS_HwiCreate函數,到消費中斷函數的 HalIrqHandler,剖析鴻蒙內核實現中斷的過程,很像設計模式中的觀察者模式. 可前往鴻蒙內核源碼分析(總目錄)查看.

● 中斷切換篇 用自下而上的方式,從中斷源頭純匯編代碼往上跟蹤代碼細節.說清楚保存和恢復中斷現場TaskIrqContext過程.可前往鴻蒙內核源碼分析(總目錄)查看.

中斷概念

中斷模塊的核心是中斷控制器,這可是 皇上(CPU) 身邊的大紅人海公公,外部人員找皇上辦點事都必須經過它.

什么是中斷?

● 中斷是指出現需要時,CPU暫停執行當前程序,轉而執行新程序的過程。即在程序運行過程中,出現了一個必須由CPU立即處理的事務。此時,CPU暫時中止當前程序的執行轉而處理這個事務,這個過程就叫做中斷。如圖:

● 外設可以在沒有CPU介入的情況下完成一定的工作,但某些情況下也需要CPU為其執行一定的工作。通過中斷機制,在外設不需要CPU介入時,CPU可以執行其它任務,而當外設需要CPU時,將通過產生中斷信號使CPU立即中斷當前任務來響應中斷請求。這樣可以使CPU避免把大量時間耗費在等待、查詢外設狀態的操作上,大大提高系統實時性以及執行效率。

中斷相關的硬件介紹

與中斷相關的硬件可以劃分為三類:設備(找皇上辦事的事多了去)、中斷控制器(海公公)、CPU(皇上威武,執天下耳)。

設備 發起中斷的源,當設備需要請求CPU時,產生一個中斷信號,該信號連接至中斷控制器。

中斷控制器 中斷控制器是CPU眾多外設中的一個,管理外設的外設,外設要使用CPU得先經過它仲裁, 它一方面接收其它外設中斷引腳的輸入,另一方面它會發出中斷信號給CPU。所以可以通過對中斷控制器編程來打開和關閉中斷源、設置中斷源的優先級和觸發方式。說的是海公公有權屏蔽大臣們的折子,降低娘娘們被臨幸的等級,讓你們見不到咱皇上. 常用的中斷控制器有VIC(Vector Interrupt Controller)和GIC(General Interrupt Controller)。在ARM Cortex-M系列中使用的中斷控制器是NVIC(Nested Vector Interrupt Controller)。在ARM Cortex-A7中使用的中斷控制器是GIC。

CPU 中斷控制器分發的中斷源的請求給各個CPU,CPU收到請求便中斷當前正在執行的任務,轉而執行中斷處理程序。 用二張圖說明下三者的關系,能看出咱海公公的權利有多大.

中斷控制器文檔可前往 ARM中斷控制器 gic_v2.pdf 查看每個寄存器的作用.以下為鴻蒙內核一小部分GIC寄存器的配置.

  1. #ifdef LOSCFG_PLATFORM_BSP_GIC_V2 
  2. #define GICC_CTLR                       (GICC_OFFSET + 0x00)            /* CPU Interface Control Register */ //CPU接口控制寄存器 
  3. #define GICC_PMR                        (GICC_OFFSET + 0x04)            /* Interrupt Priority Mask Register */ //中斷優先級屏蔽寄存器 
  4. #define GICC_BPR                        (GICC_OFFSET + 0x08)            /* Binary Point Register */    //二進制點寄存器 
  5. #define GICC_IAR                        (GICC_OFFSET + 0x0c)            /* Interrupt Acknowledge Register */ //中斷確認寄存器 
  6. #define GICC_EOIR                       (GICC_OFFSET + 0x10)            /* End of Interrupt Register */   //中斷結尾寄存器 
  7. #define GICC_RPR                        (GICC_OFFSET + 0x14)            /* Running Priority Register */   //運行優先寄存器 
  8. #define GICC_HPPIR                      (GICC_OFFSET + 0x18)            /* Highest Priority Pending Interrupt Register */ //最高優先級掛起中斷寄存器 
  9. #endif 

中斷源

● 所謂中斷源,即引起中斷的事件或原因,或發出中斷申請的來源. 可分為外部中斷源和內部中斷源兩大類。

◊ 外部中斷源是指由CPU的外部事件引發的中斷。主要包括:

◊ 一般中、慢速外設,如鍵盤、打印機、鼠標等;

◊ 數據通道,如磁盤、數據采集裝置、網絡等;

◊ 實時時鐘,如定時器定時已到,發中斷申請;

◊ 故障源,如電源掉電、外設故障、存儲器讀出出錯以及越限報警等事件。

● 內部中斷源是指由CPU的內部事件(異常)引發的中斷,主要包括:

◊ 由CPU執行中斷指令INT n引起的中斷;

◊ 由CPU的某些運算錯誤引起的中斷,如除數為0或商數超過了寄存器所能表達的范圍、溢出等;

◊ 為調試程序設置的中斷,如單步中斷、斷點中斷;

◊ 由特殊操作引起的異常,如存儲器越限、缺頁等。

◊ 核間中斷,比如cpu a 讓 cpu b 停止工作,產生調度等等.

這些都是想找咱皇上辦事的人.

中斷類型

把中斷源劃分為三種中斷類型

● PPI:私有外設中斷(Private Peripheral Interrupt),是每個CPU私有的中斷。最多支持16個PPI中斷,硬件中斷號從ID16~ID31。PPI通常會送達到指定的CPU上,應用場景有CPU本地時鐘。 類似于皇上自己的一些私事,不方便說的,比如大明湖畔的夏雨荷來了.

● SGI:軟件觸發中斷(Software Generated Interrupt)通常用于多核間通訊,最多支持16個SGI中斷,硬件中斷號從ID0~ID15。SGI通常在內核中被用作核間中斷(inter-processor interrupts),信號會送達到系統指定的CPU上. 主要用于多個皇上(CPU)并存的情況,皇上們直接約一起玩.

● SPI:公用外設中斷(Shared Peripheral Interrupt),最多可以支持988個外設中斷,硬件中斷號從ID32~ID1019。 屬于外部公事,這種事比較多,比如無法預測的吳三桂同志突然造反了,黃河決堤了等等,所以排號也多,除了前面兩種其他的都屬于這類的.

中斷請求

“緊急事件”需向CPU提出申請(發一個電脈沖信號),要求CPU暫停當前執行的任務,轉而處理該“緊急事件”,這一申請過程稱為中斷請求,這個申請必須經過中斷控制器仲裁.

找皇上辦事的人先寫報告走流程,要求都要經過咱海公公處過濾.

中斷觸發

中斷源向中斷控制器發送中斷信號(電平觸發或邊沿觸發),中斷控制器對中斷進行仲裁,確定優先級,將中斷信號送給CPU。中斷源產生中斷信號的時候,會將中斷觸發器置“1”,表明該中斷源產生了中斷,要求CPU去響應該中斷。

相當于辦事的折子,折子統一到了海公公這處理,編號.

中斷優先級

為使系統能夠及時響應并處理所有中斷,系統根據中斷時間的重要性和緊迫程度,將中斷源分為若干個級別,稱作中斷優先級。

海公公給折子分好優先級.如花娘娘優先級最高,西施娘娘給的銀子少優先級最低.

中斷處理程序

當外設產生中斷請求后,CPU暫停當前的任務,轉而響應中斷申請,即執行中斷處理程序。產生中斷的每個設備都有相應的中斷處理程序。

海公公把折子交給了咱皇上,皇上一一處理所有折子.

中斷向量表

● 中斷號 :每個中斷請求信號都會有特定的標志,使得計算機能夠判斷是哪個設備提出的中斷請求,這個標志就是中斷號。

● 中斷向量 :中斷服務程序的入口地址。

● 中斷向量表是存儲中斷向量的存儲區,中斷向量與中斷號對應,中斷向量在中斷向量表中按照中斷號順序存儲。 中斷向量表是所有中斷處理程序的入口,如下圖所示中斷處理過程:把一個函數(用戶中斷服務程序)同一個虛擬中斷向量表中的中斷向量聯系在一起。當中斷向量對應中斷發生的時候,被掛接的用戶中斷服務程序就會被調用執行。

所有中斷都采用中斷向量表的方式進行處理,即當一個中斷觸發時,處理器將直接判定是哪個中斷源,然后直接跳轉到相應的固定位置進行處理,每個中斷服務程序必須排列在一起放在統一的地址上。中斷向量表一般由一個數組定義或在起始代碼中給出.

皇上把折子一對一的仔細處理,找到給對應折子辦事的人.

用戶中斷服務程序(ISR)

在用戶中斷服務程序(ISR)中,分為兩種情況:

● 第一種情況是不進行線程切換,這種情況下會進行任務中斷上下文TaskIrqContext切換,用戶中斷服務程序和中斷后續程序運行完畢后退出中斷模式,返回被中斷的線程。

● 另一種情況是,在中斷處理過程中需要進行線程切換,這種切換還會進行任務上下文TaskContext的切換.

具體下面辦事的人把事辦完.

中斷嵌套

在允許中斷嵌套的情況下,在執行中斷服務程序的過程中,如果出現高優先級的中斷,當前中斷服務程序的執行將被打斷,以執行高優先級中斷的中斷服務程序,當高優先級中斷的處理完成后,被打斷的中斷服務程序才又得到繼續執行,如果需要進行線程調度,線程的上下文切換將在所有中斷處理程序都運行結束時才發生,如下圖所示。

先把西施娘娘的事停了,現如花娘娘殺到,優先級高,老奴安排皇上先辦如花娘娘,再接著辦西施娘娘.奴才擔心皇上這身子骨吃不吃得消.​

中斷共享

當外設較少時,可以實現一個外設對應一個中斷號,但為了支持更多的硬件設備,可以讓多個設備共享一個中斷號,共享同一個中斷號的中斷處理程序形成一個鏈表。當外部設備產生中斷申請時,系統會遍歷執行中斷號對應的中斷處理程序鏈表直到找到對應設備的中斷處理程序。在遍歷執行過程中,各中斷處理程序可以通過檢測設備ID,判斷是否是這個中斷處理程序對應的設備產生的中斷。

簡單一句話就是:共用一個折子,分別辦多件事.

核間中斷

屬于SGI中斷類型,對于多核系統,中斷控制器允許一個CPU的硬件線程去中斷其他CPU的硬件線程,這種方式被稱為核間中斷。核間中斷的實現基礎是多CPU內存共享,采用核間中斷可以減少某個CPU負荷過大,有效提升系統效率。

  1. typedef enum {//鴻蒙核間中斷 
  2.     LOS_MP_IPI_WAKEUP, //喚醒CPU 
  3.     LOS_MP_IPI_SCHEDULE,//調度CPU 
  4.     LOS_MP_IPI_HALT, //停止CPU 
  5. } MP_IPI_TYPE; 

可以看出CPU之間可以相互喚醒,調度,停止.

核間中斷有點特殊,出現于多個皇上(CPU)的情況. 皇上之間可以相互使喚,停止工作.比如:A皇上通過海公公讓B皇上休息.

功能API

參與貢獻

● 訪問注解倉庫地址

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

新建 Issue

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

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

https://harmonyos.51cto.com

 

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

2021-03-24 17:18:41

鴻蒙HarmonyOS應用開發

2021-03-30 15:30:44

鴻蒙HarmonyOS應用開發

2021-03-11 11:14:39

鴻蒙HarmonyOS應用

2021-04-08 09:32:17

鴻蒙HarmonyOS應用

2021-01-22 09:47:22

鴻蒙HarmonyOS應用開發

2021-03-15 15:18:16

鴻蒙HarmonyOS應用

2021-05-11 09:54:55

鴻蒙HarmonyOS應用

2021-12-01 15:59:22

鴻蒙HarmonyOS應用

2021-04-09 16:39:41

鴻蒙HarmonyOS應用

2021-03-11 16:07:40

鴻蒙HarmonyOS應用開發

2021-04-12 18:14:56

鴻蒙HarmonyOS應用開發

2021-04-13 09:20:15

鴻蒙HarmonyOS應用開發

2021-04-01 17:36:30

鴻蒙HarmonyOS應用開發

2021-04-07 15:11:26

鴻蒙HarmonyOS應用

2022-03-31 16:26:49

鴻蒙源碼分析進程管理

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2022-03-03 18:28:28

Harmony進程任務管理模塊

2020-07-28 08:54:39

內核通信Netlink

2022-03-11 20:23:14

鴻蒙源碼分析進程管理

2021-04-02 09:42:54

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线视频网址 | 91麻豆精品国产91久久久久久久久 | 亚洲一区视频在线 | 精品国产一区二区三区久久狼黑人 | 男女又爽又黄视频 | 日韩欧美精品 | 成人日b视频 | 亚洲精品欧美精品 | 自拍第一页 | 国产精品婷婷 | 在线一区 | 亚洲国产欧美日韩 | 97色在线观看免费视频 | 99福利视频 | 成人在线观看免费视频 | 日韩成人在线电影 | 精品国产18久久久久久二百 | 91精品中文字幕一区二区三区 | 免费三级网站 | 国产美女黄色片 | a毛片视频网站 | 久久精品无码一区二区三区 | 日韩精品免费 | 特一级黄色毛片 | 亚洲巨乳自拍在线视频 | 91在线看片 | 婷婷丁香在线视频 | 国产精品三级久久久久久电影 | 在线免费国产 | 国产一区二区欧美 | 欧美一区二区三区四区在线 | 国产一区 | 嫩草视频在线看 | 秋霞a级毛片在线看 | 欧美片网站免费 | 亚洲人在线 | 国产欧美精品一区二区色综合朱莉 | 亚洲电影中文字幕 | 欧美综合久久久 | 国产成人精品区一区二区不卡 | 91资源在线观看 |