導航:首頁 > 操作系統 > linux中斷嵌套

linux中斷嵌套

發布時間:2022-12-28 05:55:33

linux里的搶占-preempt

1. 什麼是搶占?

搶占就是進城切換, 以thread_info->preempt_count標識。

thread_info->preempt_count一物多用:

bit0-7代表的是搶占的次數,最大搶占深度為256次,

bit8-15代表的是軟中斷的次數,最大也是256次,

bit16-19表示中斷的次數,注釋的大概意思是避免中斷嵌套,但是也不能防止某些驅動中斷嵌套使用中斷,所以嵌套16層也是最大次數了。

bit20~23代表的NMI中斷

2.搶占的函數:

spin_lock()/spin_unlock()

disable_preempt()/enable_preempt()--禁止或使能內核搶占,調用下面的inc_preempt_count()/dec_preempt_count(),加了memory barrier。

inc_preempt_count()/dec_preempt_count()

get_cpu()/put_cpu()

3.調度點

a) 進程被阻塞時

b) 調整參數時,比如通過sched_setscheler() ,nice()等函數調整進程的調度策略,靜態優先順序時

c) 睡眠進程被喚醒時,比如wake_up喚醒等待隊列中的進程時,如果該進程具有更高優先順序則會設置當前

  進程TIF_NEED_RESCHED,如果允許內核態搶占,則會調度一次

d)中斷處理完時,如果中斷處理過程中設置了TIF_NEED_SCHED標志,中斷返回時,不論是要返回內核態還是用戶態,都會發生一次搶占.當然,在這也會檢查有沒有軟中斷需要處理。

e)執行了preempt_enable()函數。

Ⅱ 現在大火的嵌入式實時操作系統,你都了解多少

嵌入式實時操作系統強調了什麼?

系統最大的特點當然是嵌入。嵌入就意味著它和硬體的聯系很強,對硬體的適配和依賴度都是很高的,對於系統移植的難易度也就成了評價嵌入實時系統的重要方面。嵌入式操作系統移植的目的是使嵌入式操作系統能在某個微處理器或微控制器上運行。比如VxWorks是商用操作系統的有很多API函數及相關技術支持,所以移植和二次開發比較容易,但是移植成本較高。嵌入還意味著對於小型的硬體要求,主要是面對實時產生的數據,在數據產生終端進行快速的運算。所以系統極其強調靈敏性和實時性。

另一個特點就是實時。對於實時性的要求,有很多種實現措施。我們一一道來。首先就是分區處理的思想。對於核心的功能劃分,使用戶信息和系統程序和運行分列在不同的區劃里,保證任務的有效有序運轉。其次, 任務管理是嵌入式實時操作系統的核心和靈魂,決定了操作系統的實時性能。它通常包含優先順序設置、多任務調度機制和時間確定性等部分。 嵌入式操作系統支持多任務,每個任務都具有優先順序,任務越重要,賦予的優先順序應越高。優先順序的設置分為靜態優先順序和動態優先順序兩種。靜態優先順序指的是每個任務在運行前都被賦予一個優先順序,而且這個優先順序在系統運行期間是不能改變的;動態優先順序則是指每個任務的優先順序(特別是應用程序的優先順序)在系統運行時可以動態地改變。 嵌入式操作系統支持多任務,每個任務都具有優先順序。任務調度主要是協調任務對計算機系統資源的爭奪使用。對系統資源非常匱乏的嵌入式系統來說,任務調度尤為重要,它直接影響到系統的實時性能。通常,多任務調度機制分為基於優先順序搶占式調度和時間片輪轉調度。

基於優先順序搶占式調度:系統中每個任務都有一個優先順序,內核總是將CPU分配給處於就緒態的優先順序最高的任務運行。如果系統發現就緒隊列中有比當前運行任務更高的優先順序任務,就把當前運行任務置於就緒隊列中,調入高優先順序任務運行。系統採用優先順序搶占方式進行調度,可以保證重要的突發事件及時得到處理。

時間片輪轉調度:讓優先順序相同的處於就緒狀態的任務按時間片使用CPU,以防止同優先順序的某一任務長時間獨佔CPU。

在一般情況下,嵌入式實時操作系統採用基於優先順序搶占式調度與時間片輪轉調度相結合的調度機制。

第三,在運行的執行方式上,VXworks等系統採用進程和線程的執行方式,而市面上其他的系統多採用任務執行方式。

嵌入式實時操作系統函數調用與服務的執行時間應具有可確定性。系統服務的執行時間不依賴於應用程序任務的多少。基於此特徵,系統完成某個確定任務的時間是可預測的。表1具體列出了4種操作系統的調度機制。

VxWorks具有高效的任務管理功能,它支持多任務,可分配256個優先順序,支持優先順序搶占式調試和時間片輪轉調度,實時性最好。μC/OS-II內核是針對實時系統的要求設計實現的,只支持基於固定優先順序搶占式調度;調度方法簡單,可以滿足較高的實時性要求。μClinux在結構上繼承了標准Linux的多任務實現方式,分為實時進程和普通進程,分別採用先來先服務和時間片輪轉調度;僅針對中低檔嵌入式CPU特點進行改良,且不支持內核搶占。eCos調度方法豐富,提供了兩種基於優先順序的調度器(即點陣圖調度器和多級隊列調度器),允許用戶在進行配置時選擇其中一個凋度器,適應性好。

此外,還涉及到任務的中斷管理。

中斷管理是實時系統中一個很重要的部分,系統經常通過中斷與外部事件交互。主要考慮是否支持中斷嵌套、中斷處理機制、中斷延時等。

以VXwoks為例,xWorks操作系統中斷管理採用中斷處理與普通任務分別在不同棧中處理的中斷處理機制,使得中斷只會引發一些關鍵寄存器的存儲,而不會導致任務的上下文切換,從而極大地縮短了中斷延時。同時,VxWorks的中斷處理程序只能在最短時間內通告中斷的發生,而將其他的非實時處理盡量放入被引發的中斷服務程序中來完成,這也縮短了中斷延時。但是凼為中斷服務程序不在一個固定的仟務上下文中執行,而目沒有任務控制塊,所以所有中斷服務程序使用相同的中斷堆棧。為了能處理最壞情況下的中斷嵌套,必須分配足夠大的中斷堆棧空間。

因商業原因,不對其他新型嵌入式實時操作系統做分析。

·有哪些厲害的MPU實時操作系統?

1、VXworks

VxWorks 操作系統是美國WindRiver公司於1983年設計開發的一種嵌入式實時操作系統(RTOS),是嵌入式開發環境的關鍵組成部分。良好的持續發展能力、高性能的內核以及友好的用戶開發環境,在嵌入式實時操作系統領域占據一席之地。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛星通訊、軍事演習、彈道制導、飛機導航等。在美國的 F-16、FA-18戰斗機、B-2 隱形轟炸機和愛國者導彈上,甚至連1997年4月在火星表面登陸的火星探測器、2008年5月登陸的鳳凰號,和2012年8月登陸的好奇號也都使用到了VxWorks上。

VxWorks操作系統有以下部件組成:

多任務調度(採用基於優先順序搶占方式,同時支持同優先順序任務間的分時間片調度)

任務間的同步

進程間通信機制

中斷處理

定時器和內存管理機制

總之,VxWorks的系統結構是一個相當小的微內核的層次結構。內核僅提供多任務環境、進程間通信和同步功能。這些功能模塊足夠支持VxWorks在較高層次所提供的豐富的性能的要求。

2、QNX

QNX是一種商用的遵從POSIX規范的類Unix實時操作系統,目標市場主要是面向嵌入式系統。它可能是最成功的微內核操作系統之一。

QNX成立於1980年,是加拿大一家知名的嵌入式系統開發商。

QNX的應用范圍極廣,包含了:控制保時捷跑車的音樂和媒體功能、核電站和美國陸軍無人駕駛Crusher坦克的控制系統[2],還有RIM公司的BlackBerry PlayBook平板電腦。

3、Rtems

RTEMS, 即: 實時多處理器系統(Real Time Executive for Multiprocessor Systems),是一個開源的無版稅實時嵌入操作系統RTOS。

它最早用於美國國防系統,早期的名稱為實時導彈系統(Real Time Executive for Missile Systems),後來改名為實時軍用系統(Real Time Executive for Military Systems),現在由OAR公司負責版本的升級與維護。無論是航空航天、軍工,還是民用領域RTEMS都有著極為廣泛的應用。

Ⅲ 5.2 Linux中斷注冊

注冊中斷最常用的函數是request_irq

第 1個參數 irq 為中斷號
第 2 個參數 handler 為要中斷服務函數
第 3 個參數 flags為中斷標志位包含觸發方式,是否共享,是否支持嵌套等
第 4 個參數 name,通常是 設備驅動程序的名稱。該值用在 /proc/interrupt 系統文件上
第 5 個參數 dev 中斷名稱 可作為共享中斷時的中斷區別參數,也可以用來指定中斷服務函數需要參考的數據地址。建議將 設備結構指針作為 dev參數

flags參數定義

注冊中斷的另一個函數是request_threaded_irq
request_threaded_irq是將中斷處理函數線程化執行的介面,其實request_irq也是直接調用的request_threaded_irq,只不過線程化回調thread_fn設置為NULL,不進行中斷處理程序線程化處理。

和request_irq的參數有少許差異
handler:表示中斷服務常式,指向primary handler 和request_irq的中斷處理函數handler類似。中斷發生時優先執行primary handler;
如果primary handler 為NULL,且thread_fn不為NULL,那麼執行默認primary handler = irq_default_primary_handler。
thread_fn:中斷線程化,NULL表示沒有中斷線程化。thread_fn如果該參數不為NULL,內核會為該irq創建一個內核線程,
當中斷發生時,如果handler回調返回值是IRQ_WAKE_THREAD,內核將會激活中斷線程,
在中斷線程中,該回調函數將被調用,所以,該回調函數運行在進程上下文中,允許進行阻塞操作。

其中

其中

Ⅳ 當處理器開始處理異常時,異常的掛起狀態如何處理

熱門頻道

首頁

博客

研修院

VIP

APP

問答

下載

社區

推薦頻道

活動

招聘

專題

打開CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

arm
打開APP

ARM異常處理(2):中斷的輸入和掛起的6種情況分析 原創
2022-12-05 14:14:43

tilblackout

碼齡6年

關注
本節將描述中斷輸入和掛起的分析,這也同樣適用於NMI輸入,NMI在大多數情況下都將立即執行,除非:已經在執行NMI中斷處理程序、由調試器暫停或由於一些嚴重的系統錯誤導致晶元鎖定。

1、
當一個中斷輸入時,它將被掛起,然後被置於等待處理器處理請求的狀態,此時即使失能該中斷源,掛起的中斷最後仍會觸發其相應的中斷處理程序,而一旦中斷處理程序開始執行,該掛起狀態將被自動清除。
在這里插入圖片描述
2、
但是,如果掛起狀態在處理器開始響應掛起中斷之前被清除(例如,因為PRIMASK/FAULTMASK被設置為1,中斷沒有被立即執行,且掛起狀態需要通過軟體寫NVIC中斷控制寄存器來清除),此時中斷是可以被取消的。
在這里插入圖片描述
中斷的掛起狀態可以通過訪問NVIC寄存器來讀寫,所以用戶可以清除一個掛起的中斷標志位或者用軟體設置掛起寄存器以掛起一個新的中斷。
3、
當處理器開始執行一個中斷時,該中斷的狀態變為active,且掛起的位將被自動清除。同一個中斷處理函數在處理的過程中不能嵌套,只有當異常退出(exception exit)將其active狀態被清除後,才可以繼續響應同一中斷。
在這里插入圖片描述
4、
如果中斷源繼續發送中斷請求信號,中斷將會在終端服務處理函數的最後被再次掛起。
在這里插入圖片描述
5、
如果一個中斷在被處理之前在中斷請求線上產生了多個脈沖,它將被處理一次。
在這里插入圖片描述
6、
如果一個中斷的請求被取消,然後在中斷服務程序中再次被觸發,它將再次被掛起
在這里插入圖片描述
總結:

即使中斷被失能,掛起的中斷仍然可能產生
被失能的掛起的中斷在後面將其使能時仍然可以被觸發
因此,在啟用中斷之前,檢查是否設置了掛起寄存器是很有用的。中斷源可能在你啟用之前就已經被激活並設置了掛起狀態。如果有必要,可以在啟用中斷之前清除掛起狀態。

點擊閱讀全文
打開CSDN,閱讀體驗更佳

【RTOS】ARM Cortex-M異常處理過程
Cortex-M3與Cortex-M4 1. 處理器輸入、輸出和外設訪問 一般來說,外設在使用前需要初始化,一般包括以下幾步: 如果需要,設置時鍾控制迴路使能連接到外設和對應引腳的時鍾。許多現代微控制器允許對時鍾信號分布的精細調節,如使能/禁止到每個外設的時鍾連接以節省功耗。外設時鍾一般是默認關閉的,需要在編程外設前使能時鍾。有些情況下,可能還需要使能外設匯流排系統的時鍾。 有些情況下,可能還需要配置I/O引腳的操作模式。大多數微控制器都有復用的I/O引腳,可用於多種目的。為了使用外設,配置I/O引腳以匹配
繼續訪問

ARM:ARM中斷異常的處理流程
裸板開發中,使用的就是現在的框架: ……………………………………………………………… main (void) { // 一系列的初始化 while (1) { // 周期性的事物 } } ↓+↓ 異常處理 (非同步事件的處理) ………………………
繼續訪問
ARM V8A體系結構-第十章 AArch64異常處理
概述 嚴格地說,中斷是指中斷軟體執行的流程。然而,在ARM術語中,這通常稱為異常。異常是指需要特權級(異常處理程序)執行某些操作以確保系統順利運行的條件或系統事件。每個異常都有一個相關的異常處理程序。一旦異常得到處理,特權級軟體會將core恢復到處理異常前的位置,以繼續處理它正在做的事情。 存在的異常類型如下: 中斷: 有兩種類型的中斷稱為IRQ和FIQ。FIQ的優先順序高於IRQ。 ...
繼續訪問

最新發布 ARM異常處理(1):異常類型、優先順序分組和異常向量表
Cortex-M3提供了一個功能豐富的異常體系結構,它支持很多系統異常和外部中斷。異常編號1-15表示系統異常,16及以上表示外部中斷輸入。大多數異常具有可編程優先順序,少數具有固定優先順序。當前正在運行的異常可以通過特殊寄存器或者中的欄位來查看。當一個使能的異常產生但不能被立即執行的時候(比如有一個更高優先順序的中斷服務程序正在處理),它會被掛起。
繼續訪問
ARM中斷和異常
中斷的定義:在CPU在執行一個程序時,對系統發生的某個事情,作出一種反應:CPU暫停正在執行的程序,保護現場後自動轉去處理相應的事件,處理完該事情,到會返回剛才的位置。 例子:如讀盤,盤有問題,無法讀,產生中斷,解決後,程序恢復,軟體錯誤也會中斷。 特點: 1) 中斷隨機的,提高實時性。 2) 中斷是可恢復的 3) 中斷是自動進行處理的 中斷源
繼續訪問
ARM 之六 Cortex-M 內核中斷/異常系統、中斷優先順序/嵌套 詳解
問題 最近在使用STM32F3晶元的時候,遇到這樣一個問題:如果外部中斷來的頻率足夠快,上一個中斷沒有處理完成,新來的中斷如何處理? 在調試時,發現有中斷有 掛起、激活、失能等狀態,考慮這些狀態都是幹啥用的呢!他們是Cortex-M核所共有的,因此這里不針對與具體用的STM32 MCU,直接上升到 Cortex-M內核來了解一下! 簡介   中斷(也稱為「異常」)是微控制器一個很常見的特性。中斷一......
繼續訪問

Linux操作系統原理與應用05:中斷和異常
目錄 1. 中斷概述 1.1 什麼是中斷 1.2 為什麼引入中斷 1.3 中斷的分類 1.4 CPU什麼時候響應中斷 2. 中斷控制器簡介 2.1 中斷的C/S模型結構 2.2 作為中介的中斷控制器 2.3 高級可編程中斷控制器(APIC) 2.4 機制與策略分離的中斷機制 3. Linux內核中斷子系統框架 4. 中斷向量與中斷描述符表 4.1 中斷向量 4.1.1 中斷向量的概念 4.1.2 中斷向量的分配 4.2 中斷描述符表(IDT) 4.2.1 實模式中斷向量表
繼續訪問
ARM 處理器 ~ 中斷與異常
教材:嵌入式系統及應用,羅蕾、李允、陳麗蓉等,電子工業出版社 中斷與異常定義ARM 中的工作模式除 User 和 System 外,均為異常模式,這里的異常是廣義的,包含以下三類情況外部中斷(外部中斷)由於 CPU 外部的原因而改變程序執行流程,屬於非同步事件,可以屏蔽軟體中斷(自陷) 通過處理器擁有的軟體指令,可預期地使正在執行的程序改變執行流程,以執行特定的程序 顯式的事件,無條件執行 屬同步事
繼續訪問
嵌入式-ARM-學習總結(7):按鍵與中斷
嵌入式-ARM-學習總結(7):按鍵與中斷一、按鍵1.S5PV210的按鍵2.按鍵的2中相應方法:輪詢方式和中斷方式3.按鍵對應的GPIO模式設置4.輪詢方式處理按鍵的程序流程5.代碼編寫6.按鍵消抖二、中斷1.什麼是中斷2.為什麼需要中斷3.異常向量表4.異常和中斷的區別和聯系5.為什麼中斷處理要先在匯編中進行6.中斷的基本過程7.S5PV210中斷處理的主要寄存器三、中斷代碼(1)綁定中斷異常向量表(2)初始化中斷控制器的基本寄存器(3)綁定我們寫的isr到VICnVECTADDR寄存器(4)使能中斷(
繼續訪問
異常和中斷
一、異常和中斷簡介 中斷一般由硬體(如外設和外部輸入引腳)產生的事件,它會引起程序流偏離正常的流程(如給外設提供服務)。當外設或硬體需要處理器的服務時,一般會出現下面的流程: ①外設確認到處理器的中斷請求。 ②處理器暫停當前執行的任務 ③處理器執行外設的ISR,若有必要可以選擇由軟體清除中斷請求。 ④處理器繼續執行之前暫停的任務。 所有的cortex-m處理器都會提供一個用於中斷處理的嵌套向量中斷控制器(NVIC)。除了中斷請求,還有其他需要服務的事件,將其稱為異常。按照ARM的說法,中斷也是一種異常。co
繼續訪問

十.ARM裸機學習之中斷系統2(S5PV210按鍵外部中斷及中斷處理)
一.輪詢方式處理按鍵 參考 E:\Linux\8.key_open 二.中斷方式處理按鍵 2017/11/21 23:30 參考:http://blog.csdn.net/u010479322/article/details/51447181 http://blog.51cto.com/9291927/1787523 1.異常向量表分析: (1)、復位(
繼續訪問
ARM之按鍵K2觸發中斷,並在超級終端上列印『S『
ARM之按鍵K2觸發中斷,並在超級終端上列印'S'
繼續訪問
嵌入式RTOS---異常和中斷處理流程
ARM中斷體系 以S3C2440講解 1 中斷體系硬體原理 中斷處理分為統一的中斷處理和獨立的中斷處理; 1.1 統一的異常和中斷處理 1.1.1 ARM的異常模式 所謂異常,指的是中止了程序正常的執行過程而不得不完成一些特殊的工作(異常工作)。 中斷也是一種異常,中斷包括由外部硬體產生的外部中斷和內部硬體產生的內部中斷。 異常分為同步異常(SWI 軟體指令產生的異常)和非同步異...
繼續訪問

ARM V8 程序指南—— 第十章 AArch64 異常處理(翻譯)
第十章 AArch64 異常處理 嚴格來說,中斷是說軟體執行流程的東西,但是,在arm術語中,統稱為異常。異常是需要特權軟體(異常處理程序)執行某些操作以確保系統順利運行的條件或系統事件。每種異常類型都有一個異常處理程序。一旦處理完異常,特權軟體就會讓內核准備好恢復它在處理異常之前所做的任何事情。 下面介紹了幾種異常: Interrupt: 一般有兩種,分為irq 和 fiq。fiq的優先順序高於IRQ,這兩種異常通常都與內核上的輸入引腳相關。假設中斷未被禁用,外部硬體斷言了一個中斷請求並在當前指令完成執行時
繼續訪問

ARM 之十二 Cortex-M 內核異常處理、異常定位方法、在線調試、Keil MDK-ARM 的使用
  在 ARM 平台上開發,開發工具的選擇其實並不是很多,基本可以分為三大類:Keil MDK-ARM、IAR for ARM、GCC for ARM 系,其中用的比較多的基本就是 Keil MDK-ARM、IAR for ARM 這倆。而 GCC for ARM 系的 IDE 有很多,但是他們統一都是使用 GCC for ARM 作為編譯器構建套件,IDE 都是各家自定義的。例如,ST 有、SEGGER 有 Embedded Studio。 構建(Build)   從源文件到可執行文件,需要經過預處理、編
繼續訪問

【Linux】ARM篇八--中斷實驗
ARM篇8--中斷實驗一、前言二、准備工作三、CPU與硬體的交互方式四、輪詢方式實現按鍵實驗1、電路原圖2、按鍵的實現五、RAM中斷實現原理六、GPIO中斷1、GPX1CON2、EXT_INT41CON寄存器3、EXT_INT41_MASK寄存器七、中斷控制器1、ICDDCR寄存器2、ICDISER寄存器3、ICDIPTR寄存器八、中斷的實現1、ICCIAR寄存器2、EXT_INT41_PEND寄存器3、ICCEOIR寄存器九、完整代碼與燒入1、中斷完整代碼2、程序燒入步驟十、實驗現象1、輪詢按鍵實驗現象.
繼續訪問

【ARM】arm異常中斷處理知識點
ARM處理器7種類型異常 按優先順序從高到低的排列如下: 復位異常(Reset) 數據異常(Date Abort) 快速中斷異常(FIQ) 外部中斷異常(IRQ) 預取異常(Prefetch Abort) 軟體中斷異常(SWI) 未定義指令異常(Underfined instruction) 當異常發生時 處理器會把...
繼續訪問
arm裸機的按鍵設置和中斷
按鍵的物理特性 **(1)、平時沒人按的時候,彈簧把按鍵按鈕彈開。此時內部斷開的。 (2)、有人按下的時候,手的力量克服彈簧的彈力,將按鈕按下,此時內部保持接通(閉合)狀態;如果手拿開,則彈簧作用下按鈕又彈開,同時內部又斷開。 (3)、一般的按鍵都有4個引腳,這4個引腳成2對:其中一對是常開觸點(像上面描述的不按則斷開,按下則閉合);一對是常閉觸點(平時不按時是閉合的,按下後是斷開的)** 按鍵的電學原理(結合原理圖分析) **(1)硬體接法: SW5:GPH0_2 SW6:GPH0_3 SW78
繼續訪問

ARM介面實驗—中斷實驗
ARM—中斷實驗
繼續訪問

【ARM】中斷控制 ——第六篇
中斷可以理解為當系統出現了意外情況,可以自動停止當前正在執行的程序,並轉入執行新情況的程序中進行執行,處理完後會回到原被暫停的程序繼續執行。
繼續訪問

arm
寫評論

評論

收藏

點贊



分享
打開CSDN APP閱讀體驗更佳

Ⅳ 什麼時候會kernel panic

什麼時候可能出現內核崩潰,kernrl panic呢?

Linux在中斷處理程序中,它不處於任何一個進程上下文,如果使用可能睡眠的函數,則系統調度會被破壞,導致kernel panic。因此,在中斷處理程序中,是不能使用有可能導致睡眠的函數(例如信號量等)。

在中斷發起的軟中斷中,其上下文環境有可能是中斷上下文,同理,也不能調用可能導致睡眠的函數。軟中斷執行時,全局中斷是打開的,而中斷程序執行時,全局中斷是禁止的。

軟中斷除了系統調度進入點,當軟中斷數量頻繁時,內核中有一個專門的軟中斷的後台程序daemon來處理其事務。

還有內核堆棧溢出,或者指針異常訪問時,也會出現kernel panic。

堆棧溢出:程序循環或者多層嵌套的深度過多時,可能會導致棧溢出。

顯而易見,除0異常、內存訪問越界、緩沖區溢出等錯誤時,當這些事件發生在應用程序時,Linux內核的異常處理機制可以對這些由應用程序引起的情況予以處理。當應用程序出現不可恢復性錯誤時,Linux內核可以僅僅終止產生錯誤的應用程序,而不影響其他程序。如果上述操作發生在內核空間,就會引起kernel panic。

還有內核陷入死鎖狀態,自旋鎖嵌套、在內核線程中,存在死循環的操作等等都會引起kermel panic。

Ⅵ linux中軟中斷(softirq)為什麼不能嵌套

硬中斷能嵌套........................嗯..........這個說法很奇怪................
根據我的理解是硬中斷能被硬中斷搶斷.................不知道你所謂的嵌套何指.
軟中斷都在下半部處理.處理時間即長.涉及資源又多.在這里需要同步的地方非常多.難度也比較高..........軟中斷如果沒記錯的話.是不能被同種類型搶斷.可以被非同類型搶斷.因為同類型多涉及相同資源.如果被同類搶斷的話.上一個佔有的資源未釋放.這一個又一直得不到資源.就會一直被阻塞.造成系統進退不得.所以才禁止同類搶斷.
不過在不同下半部解決方案設計中.限制也不一樣.具體可以自行了解.

不知道你說的可以嵌套指的是什麼東西..................

Ⅶ Linux如何及時響應外部中斷

FPGA每隔100us給運行linux的ARM一個中斷,要求在20us內響應中斷,並讀走2000*16bit的數據。
目前主要的問題是,當系統同時發生多個中斷時,會嚴重影響linux對FPGA中斷的響應時間。如何解決?

1、首先想到了ARM的FIQ,它可以打斷IRQ中斷服務程序,保證對外部FIQ的及時響應。但是發現linux只實現了IRQ,沒有顯示FIQ。
linux是從devicetree讀取中斷號,加入中斷向量表的。

interrupts = <0x0 0x32 0x0>;中的第一個欄位0表示非共享中斷,非零表示共享中斷,SDK產生的dts統一為0,此時第二欄位的值比XPS中的小32;如果第一欄位非零,則第二欄位比XPS小16.
最後欄位表示中斷的觸發方式。
IRQ_TYPE_EDGE_RISING =0x00000001,
IRQ_TYPE_EDGE_FALLING =0x00000002,
IRQ_TYPE_LEVEL_HIGH =0x00000004,
IRQ_TYPE_LEVEL_LOW =0x00000008,
很明顯,devicetree根本沒有提供通知linux有FIQ的渠道。
2、再來看linux的IRQ
linux的中斷分為上半部和下半部,上半部運行在IRQ模式,會屏蔽所有中斷,下半部運行在SVC模式,會重新打開中斷。
也就是說,當一個中斷的上半部正在運行時(不能再次響應中斷),FPGA的中斷是不能被linux響應的;
反過來,當FPGA中斷的上半部正在運行時(不能再次響應中斷),其他的中斷也不能被linux響應;
unsigned long flags;
...
local_irq_save(flags);
....

local_irq_restore(flags);

3.
ARM有七種模式,我們這里只討論SVC、IRQ和FIQ模式。
我們可以假設ARM核心有兩根中斷引腳(實際上是看不見的),一根叫 irq pin, 一根叫fiq pin.
在ARM的cpsr中,有一個I位和一個F位,分別用來禁止IRQ和FIQ的。
先不說中斷控制器,只說ARM核心。正常情況下,ARM核都只是機械地隨著pc的指示去做事情,當CPSR中的I和F位為1的時候,IRQ和FIQ全部處於禁止狀態。無論你在irq
pin和fiq pin上面發什麼樣的中斷信號,ARM是不會理你的,你根本不能打斷他,因為他耳聾了,眼也瞎了。
在I位和F位為0的時候,當irq
pin上有中斷信號過來的時候,就會打斷arm的當前工作,並且切換到IRQ模式下,並且跳到相應的異常向量表(vector)位置去執行代碼。這個過程是自動的,但是返回到被中斷打斷的地方就得您親自動手了。當你跳到異常向量表,處於IRQ的模式的時候,這個時候如果irq
pin上面又來中斷信號了,這個時候ARM不會理你的,irq
pin就跟秘書一樣,ARM核心就像老闆,老闆本來在做事,結果來了一個客戶,秘書打斷它,讓客戶進去了。而這個時候再來一個客戶,要麼秘書不斷去敲門問,要麼客戶走人。老闆第一個客戶沒有會見完,是不會理你的。
但是有一種情況例外,當ARM處在IRQ模式,這個時候fiq pin來了一個中斷信號,fiq
pin是什麼?是快速中斷呀,比如是公安局的來查刑事案件,那才不管你老闆是不是在會見客戶,直接打斷,進入到fiq模式下,並且跳到相應的fiq的異常向量表處去執行代碼。那如果當ARM處理FIQ模式,fiq
pin又來中斷信號,又就是又一批公安來了,那沒戲,都是執法人員,你打不斷我。那如果這個時候irq
pin來了呢?來了也不理呀,正在辦案,還敢來妨礙公務。
所以得出一個結論: IRQ模式只能被FIQ模式打斷,FIQ模式下誰也打不斷。
在打不斷的情況下,irq pin 或 fiq pin隨便你怎麼發中斷信號,都是白發。
所以除了fiq能打斷irq以外,根本沒有所謂中斷嵌套的情況。
Linux不用FIQ,只用到了IRQ。但是我們有時候一個中斷需要處理很長時間,那我們就需要佔用IRQ模式那麼長的時間嗎?沒有,linux在IRQ模式下只是簡單的記錄是什麼中斷,馬上就切換回了SVC模式,換句話說,Linux的中斷處理都是在SVC模式下處理的。
只不過SVC模式下的ISR上半部關閉了當前中斷線,下半部才重新打開

Ⅷ 中斷服務函數能不能帶形參和返回值

從本質上來講,中斷是一種電信號,當設備有某種事件發生時,它就會產生中斷,通過匯流排把電信號發送給中斷控制器。如果中斷的線是激活的,中斷控制器就把電信號發送給處理器的某個特定引腳。處理器於是立即停止自己正在做的事,跳到中斷處理程序的入口點,進行中斷處理。

(1) 硬中斷

由與系統相連的外設(比如網卡、硬碟)自動產生的。主要是用來通知操作系統系統外設狀態的變化。比如當網卡收到數據包的時候,就會發出一個中斷。我們通常所說的中斷指的是硬中斷(hardirq)。

(2) 軟中斷

為了滿足實時系統的要求 ,中斷處理應該是越快越好。linux為了實現這個特點,當中斷發生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理事件比較長的工作,放到中斷之後來完成,也就是軟中斷(softirq)來完成。

(3) 中斷嵌套

Linux下硬中斷是可以嵌套的,但是沒有優先順序的概念,也就是說任何一個新的中斷都可以打斷正在執行的中斷,但同種中斷除外。軟中斷不能嵌套,但相同類型的軟中斷可以在不同CPU上並行執行。

(4) 軟中斷指令

int是軟中斷指令。

中斷向量表是中斷號和中斷處理函數地址的對應表。

int n - 觸發軟中斷n。相應的中斷處理函數的地址為:中斷向量表地址 + 4 * n。

(5)硬中斷和軟中斷的區別

軟中斷是執行中斷指令產生的,而硬中斷是由外設引發的。

硬中斷的中斷號是由中斷控制器提供的,軟中斷的中斷號由指令直接指出,無需使用中斷控制器。

硬中斷是可屏蔽的,軟中斷不可屏蔽。

硬中斷處理程序要確保它能快速地完成任務,這樣程序執行時才不會等待較長時間,稱為上半部。

軟中斷處理硬中斷未完成的工作,是一種推後執行的機制,屬於下半部。

(1) 注冊中斷處理函數

注冊中斷處理函數:

/**  * irq: 要分配的中斷號  * handler: 要注冊的中斷處理函數  * flags: 標志(一般為0)  * name: 設備名(dev->name)  * dev: 設備(struct net_device *dev),作為中斷處理函數的參數  * 成功返回0  */ int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,      const char *name, void *dev);

中斷處理函數本身:

所以中斷服務函數帶不帶形參和返回值主要是看中斷是發生在裸機上還是實時系統中。

http://blog.csdn.net/xy010902100449/article/details/49247527

Ⅸ Linux進入臨界去開關中斷的幾種方式

進入中斷時候關閉全局的中斷是為了避免程序處理中斷過程中,再進入另一個中斷打亂執行的順序,也就是為了防止中斷嵌套的情況發生。比如在irq_handler函數中首先就應該關閉中斷。或者,在某些操作順序中是不允許中斷發生打斷的情況。例如在驅動中常用的方式:

unsigned int flag;
local_irq_save(&flag);
... ... ... ...
local_irq_restore(&flag);

spin_loc_irqsave 禁止中斷(只在本地處理器)在獲得自旋鎖之前; 之前的中斷狀態保存在 flags 里. 如果你絕對確定在你的處理器上沒有禁止中斷的(或者, 換句話說, 你確信你應當在你釋放你的自旋鎖時打開中斷),你可以使用 spin_lock_irq 代替, 並且不必保持跟蹤 flags. 最後, spin_lock_bh 在獲取鎖之前禁止軟體中斷, 但是硬體中斷留作打開的。

閱讀全文

與linux中斷嵌套相關的資料

熱點內容
考駕照怎麼找伺服器 瀏覽:882
阿里雲伺服器如何更換地區 瀏覽:970
手機app調音器怎麼調古箏 瀏覽:501
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:17
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:274
冒險島什麼伺服器好玩 瀏覽:541
如何在伺服器上做性能測試 瀏覽:793
命令序列錯 瀏覽:259
javaif的條件表達式 瀏覽:576
手機app上傳的照片怎麼找 瀏覽:531
雲伺服器面臨哪些威脅 瀏覽:748
c語言各種編譯特點 瀏覽:177
路由器多種加密方法 瀏覽:604
程序員阻止電腦自動彈出定位 瀏覽:168
如何做伺服器服務商 瀏覽:763