Linux內核實現中斷和中斷處理(一)

来源:http://www.cnblogs.com/lenomirei/archive/2016/06/05/5562086.html
-Advertisement-
Play Games

Linux實現中斷處理 內核是怎麼知道應用程式要調用系統調用的呢?或者說應用程式怎麼通知系統內核自己需要執行一個系統調用,這是通過軟中斷實現的,通過引發一個異常來促使系統切換到內核態去執行異常處理程式 PS:什麼時候會從用戶態切換到內核態呢?1.中斷;2.陷阱;3.系統調用 中斷分為兩種,硬中斷和軟 ...


  • Linux實現中斷處理

內核是怎麼知道應用程式要調用系統調用的呢?或者說應用程式怎麼通知系統內核自己需要執行一個系統調用,這是通過軟中斷實現的,通過引發一個異常來促使系統切換到內核態去執行異常處理程式

PS:什麼時候會從用戶態切換到內核態呢?1.中斷;2.陷阱;3.系統調用

中斷分為兩種,硬中斷和軟中斷;

在許多處理器體繫結構處理異常和處理中斷的方式類似,為了助於理解,可以把異常想象成軟中斷,我們通常說的中斷是硬中斷,硬中斷是由硬體引起而不是軟體引起的

每一種中斷都有一個對應的中斷處理程式,如果一種中斷設備可以產生多種中斷,那這個中斷設備就有多個中斷處理程式對應,而一個中斷處理程式就是該設備對應的設備驅動程式中的一部分

我們想讓中斷處理程式運行的快,還想讓中斷處理程式多幹活,顯然是有衝突的,所以我們把中斷程式分為兩個部分,中斷處理程式是上半部分,能夠被允許稍後完成的工作會推遲到下半部去(註意!在執行中斷上半部分的時候,是不允許產生其他中斷的,所以設置標誌位IRQF_DISABLED

舉個慄子拿我們可愛的網卡來說事情吧,例如網卡從網上收集了很多數據包,於是我們的朋友網卡君就通知內核,嘿,我這來了一批新貨,要看看麽,於是內核屁顛屁顛的去處理了(調用中斷處理程式)中斷開始執行,通知硬體開始拷貝數據(從網卡到記憶體),這件事是很緊迫的,因為網卡有一定的緩存,超過緩存這家伙就不幹活了(丟棄數據包),為了壓榨網卡(讓他好好幹活),內核必須儘快處理這件事情,而且這件事情是硬體相關的(就是和網卡脫不了干係),沒了網卡幹不了,不能延後,拷貝完這些數據包之後的事情就可以放到下部分了,於是內核忙完了,又去處理剛纔被中斷的進程了

  • 中斷處理程式標誌

IRQF_DISABLED——在執行當前中斷處理程式的時候,禁止所有其他的中斷(野蠻!!儘量給想要儘快運行的輕量級中斷使用)

IRQF_SAMPLE_RANDOM——表明這個設備的中斷對內核熵池有貢獻

  PS:內核熵池負責提供從各種隨機事件導出真正的隨機數,就是說中斷啥時候來(隨機的),有個中斷產生速率(自然也隨機了),就拿去扔池      子里產生隨機數用了。。。和中斷關係似乎不是很大

IRQF_TIMER——專門為系統定時器的中斷處理而準備的

IRQF_SHARED——共用中斷線,中斷線可以理解為中斷單獨對著的一個號,同時一個號可以對應多個終端

  • 中斷和鎖之間不得不說的那些事兒

這裡簡單的把鎖分為兩類,自旋鎖和睡眠鎖(當然對應著很多具體的鎖),分為兩類是因為,自旋鎖是可以用於中斷(爭用該鎖會導致忙迴圈)的,但是擁有睡眠性質的鎖是不能用於中斷(爭用該鎖會導致睡眠),只能用於進程。我們之前說了,中斷處理程式的上半部分是很緊迫的,這麼緊迫的事情你怎麼可以去睡眠偷懶呢?!哪怕現在輪不到你,你也得給我等著!

為什麼不能讓中斷睡眠?因為睡眠是為了進程調度存在的,但是中斷處理程式一旦睡眠不僅沒有時間可以喚醒中斷處理程式,而且無法調度,因為進程有個進程號,但是中斷沒有,一旦當前的中斷處理睡眠了,沒有其他的東西會獲得處理器,而且中斷處理永遠不會被喚醒,那麼系統就會癱瘓

一定要在獲取鎖之前,禁止本地中斷!!!為啥呢?見下圖

 

欲知下半部分如何,且聽下回分解


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL事務:一組原子性的SQL查詢,或者說一個獨立工作單元 一個支持事務的存儲引擎或者關係型資料庫必然滿足ACID測試 A:atomicity,原子性;整個事務中的所有操作要麼全部成功執行,要麼全部失敗後回滾 C:consistency, 一致性;資料庫總是從一個一致性狀態轉換為另一個一致性狀態 ...
  • 1:記錄當前scn select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER 1159572 2:創建表 1:記錄當前scn select dbms_flashback.get_system_ ...
  • 前面文章針對CPU、記憶體、磁碟、語句、等待講述了SQL SERVER的一些基本的問題診斷與調優方式。為了方便閱讀給出導讀文章鏈接方便閱讀: SQL SERVER全面優化 Expert for SQL Server 診斷系列 這篇我們來說說TempDB,這個系統資料庫如何進行優化,怎麼樣平衡他的使用。 ...
  • 介面定義: 實現: 以上兩種方式均可以實現簡單的均衡演算法,第一種我參考許多前輩的寫法,第二種屬於自己想的.從概率論的角度出發都可以滿足需求,而且兩者效率相當(我原以為第二種實現方式速度更快,很遺憾的是結果證明並非如此,可能是Random對象取隨機數比較慢,我理論上認為沒有鎖會更快的),我個人覺得方法 ...
  • Mysql的Root密碼忘記,查看或修改的解決方法:1.首先啟動命令行2.在命令行運行:taskkill /f /im mysqld-nt.exe3.繼續在命令行運行:mysqld-nt --skip-grant-tables4.新開一個命令行運行:mysql -u root (如果沒有配置mysq ...
  • 1. Linux中所以內容以文件形式保存,包括硬體,所以在用命令行配置文件時,該配置僅僅是臨時生效。 2. Linux不靠擴展名區分類型,而是靠文件許可權。之所以有擴展名是為了便於管理。 .rpm二進位軟體包 .html .php網頁文件 .sh腳本文件 .conf配置文件 3. Linux所有存儲設... ...
  • 最近心血來潮,想學Linux,所以根據網上的建議,買了鳥哥的書。為了以後學習方便,準備安裝CentOS7。準備好鏡像文件和U盤後,4號晚上八點多開始施工,本以為幾個小時就可以弄好的東西,第一次讓我明白了什麼叫理想與現實的差距。鑒於CentOS7安裝的繁瑣程度和鳥哥的火熱程度,我決定把我安裝的全過程寫 ...
  • 虛擬機的安裝0Snapshot和clone 系統分區(由硬碟的性能所限制的) 1分區類型: 主分區:最多有4個 擴展分區:最多只能有1個;主分區加擴展分區最多有4個;不能寫入數據,只能包含邏輯分區,不能格式化。 邏輯分區: 2格式化(目的:在硬碟當中寫入文件系統) 格式化(高級格式化)又稱邏輯格式化... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...