1. 程式人生 > >如何理解中斷的上半部和下半部

如何理解中斷的上半部和下半部

linux概念

上半部是不能中斷的

下半部是可以中斷的

對於適時要求高的,必須放在上半部

下半部的實現主要是通過軟中斷 ,tasklet,和工作佇列來實現的.

首先需要了解一下中斷的概念:一個“中斷”僅僅是一個訊號,當硬體需要獲得處理器對它的關注時,就可以傳送這個訊號。核心維護了一箇中斷訊號線的登錄檔,該登錄檔類似於I/O埠的登錄檔。

      模組在使用中斷前要先請求一箇中斷通道(或中斷請求IRQ),然後在使用後釋放該通道。用到的API就是request_irq()以及free_irq()。注意在呼叫request_irq()和free_irq()的時機最好是在裝置第一次開啟和最後一次關閉之後。

    對於中斷處理例程來講,它的一個典型的任務就是:如果中斷通知程序所等待的事件已經發生,比如新的資料到達就會喚醒在該裝置上休眠的程序。無論是快速還是慢速處理例程,程式設計師都應該編寫執行事件儘可能短的處理例程。如果需要執行一個長時間的計算任務,做好的辦法就是使用上下半部處理機制,以便讓工作在更安全的時間裡排程計算任務。

     上半部的功能是響應中斷。當中斷髮生時,它就把裝置驅動程式中中斷處理例程的下半部掛到裝置的下半部執行佇列中去,然後繼續等待新的中斷到來。這樣一來,上半部的執行速度就會很快,它就可以接受更多它負責的裝置所產生的中斷了。上半部之所以快,是因為它是完全遮蔽中斷的,如果它沒有執行完,其他中斷就不能及時地處理,只能等到這個中斷處理程式執行完畢以後。所以要儘可能多的對裝置產生的中斷進行服務和處理,中斷處理程式就一定要快。

    下半部的功能是處理比較複雜的過程。下半部和上半部最大的區別是可中斷,而上半部卻不可中斷。下半部幾乎完成了中斷處理程式所有的事情,因為上半部只是將下半部排到了它們所負責的裝置中斷的處理佇列中去,然後就不做其它的處理了。下半部所負責的工作一般是檢視裝置以獲得產生中斷的事件資訊,並根據這些資訊(一般通過讀裝置上的暫存器得來)進行相應的處理。下半部是可中斷的,所以在執行期間,如果其它裝置產生了中斷,這個下半部可以暫時的中斷掉,等到那個裝置的上半部執行完了,再回頭執行這個下半部。

         這上面大多數都是我們在查閱資料和聽老師講課獲取的知識內容但是具體是如何實現的呢?

         也許我們也知道tasklet和work_queue。知道這兩個是完成下半部的。在具體的過程中我們將如何實現呢?

        此處就是通過建立工作佇列的方式我們把初始化的操作都放在irq之前完成,在irq_handler()中將具體的工作提交到工作佇列中。queue_work 可以完成這個工作任務.

相關推薦

如何理解中斷半部半部

linux概念 上半部是不能中斷的 下半部是可以中斷的 對於適時要求高的,必須放在上半部 下半部的實現主要是通過軟中斷 ,tasklet,和工作佇列來實現的. 首先需要了解一下中斷的概念:一個“中斷”僅僅是一個訊號,當硬體需要獲得處理器對它的關注時,就

linux中斷處理的半部半部

裝置中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必要求中斷服務儘可能的短小精悍。但是,在大多數真實的系統中,當中斷到來時,要完成的工作往往並不會是短小的,它可能要進行較大量的耗時處理。 在Linux核心中,為了在中斷執行時間儘可能短和中斷處理需完成大量

Linux中斷半部半部

前言   cpu在執行程式時,如果有外部中斷觸發時,如定時器中斷、序列匯流排中斷等,cpu停止當前任務從而轉去響應中斷處理。對於中斷函式的處理,原則是儘快處理完事務並退出中斷,這一點也比較好理解,儘快處理中斷並返回,保證正常任務的執行,並q且能否響應其他事務的

個人理解中斷半部半部,硬中斷,軟中斷

中斷上半部分與中斷下半部分對比 在中斷處理程式中,既想讓程式執行的快,又想讓程式完成的工作量多,這兩個目的有抵觸。 鑑於這兩個目的不可調和的矛盾,中斷處理可以分為兩部分: 中斷處理工作,例如對接收中斷進行中斷或復位硬體,這些工作都在所有中斷被禁止的情況下完成。可以稍後完成的

linux中斷介紹(概念、頂半部半部、linux中斷程式設計)

中斷的概念: 指CPU在執行過程中,出現某些突發事件急待處理,CPU暫停執行當前程式,轉去處理突發事件,處理完後CPU又返回原程式被中斷的位置繼續執行.   中斷的分類: 內部中斷:來自cpu內部(軟體中斷、cpu溢位、觸發錯誤等) 外部中斷:來自cpu外部,由外設觸發

半部半部

又想中斷處理程式執行得快,又想中斷處理程式完成的工作量多,這兩個目的顯然有所抵觸。鑑於兩個目的之間存在此消彼長的矛盾關係,所以我們一般把中斷處理切為兩個部分或兩半。 中斷處理程式是上半部。接受到一箇中斷,他就立即開始執行,但只做嚴格時限的工作。例如對接受的中斷進行應答或復位

載文件

posit comm ng- 點擊 下載 log 如果 odin 代碼 1.提示如下錯誤,表示添加的項目沒有找到對應的python配置文件 解決方法如下圖:File-Setting-Project Interpreter選擇右上角的小齒輪,點擊more,找到pyth

如何在SecureCRT中給linux載文件 安裝redis

per med jpg 對話 分享 解壓 -i jin ccf 首先建立文件 /download sz和rz命令無法用。則用以下1.和2.3步驟 需要上傳或者下載,需要使用rz和sz命令。如果linux上沒有這兩個命令工具,則需要

在windowslinux之間用SecureCRT來載文件

命令行工具 鏈接 關閉 默認目錄 usr 按鈕 eas add 編譯安裝 SecureCRT可以使用linux下的zmodem協議來快速的傳送文件,使用非常方便.具體步驟:一.在使用SecureCRT上傳下載之前需要給服務器安裝lrzsz:A:CentOS中使用yum安裝即

selenium-Python之進行文件的載文件

auto sof 窗口 blog bsp 進行 文件 批量上傳文件 nbsp 在利用Selenium進行批量上傳文件時,遇到如下的Windows窗口進行上傳、下載操作時,可以通過pywinauto進行操作。上傳窗口如下 使用pywinauto,需知Windows窗口控件的

centos如何在命令行中使用 ftp 命令載文件

centos ftp 本文中,介紹在 Linux shell 中如何使用 ftp 命令。包括如何連接 FTP 服務器,上傳或下載文件以及創建文件夾。盡管現在有許多不錯的 FTP 桌面應用,但是在服務器、SSH、遠程會話中命令行 ftp 命令還是有很多應用的。比如。需要服務器從 ftp 倉庫拉取備份

#Java Web累積#關於MUI的拉加載

問題: javascrip resource 3.0 stat settime 文檔 port 上拉刷新 其實按照MUI的文檔去寫,也沒什麽問題: JSP中: <%@ page contentType="text/html;charset=UTF-8" langua

Java轉型轉型

tin tle cells 簡單 直接 父類引用 log pad fat Java 轉型問題其實並不復雜,只要記住一句話:父類引用指向子類對象。 什麽叫父類引用指向子類對象,且聽我慢慢道來. 從2個名詞開始說起:向上轉型(upcasting) 、向下轉型(do

Linux 使用rzsz 載文件

Linux 下使用rz和sz 上傳和下載一、安裝方法[root@ocbsap01 code]# yum -y install lrzsz二、上傳下載文件測試1、條件:需要使用SecureCRT或者Xshell等客戶端工具連接Linux2、上傳下載命令測試1)上傳(rz)在客戶端SSH命令行運行rz命令,命令如

CentOS 6.9使用Shell腳本實現FTP自動載文件

ftp shell 一、安裝配置FTP:# yum -y install vsftpd# service vsftpd start# ss -tunlp | grep 21//添加本地FTP登錄用戶ftpuser# useradd ftpuser# echo 123456 | passwd --std

用SecureCRT來載文件

分享圖片 img 技術分享 errors secure ctrl rri root 輸入 在使用SecureCRT上傳下載之前需要給服務器安裝lrzsz: yum -y install lrzsz rz中的r意為received(接收),輸入rz時、意為服務器接收文件,既將

SecureCRT來載文件

目前 鏈接 cal ssh 流行 主機 統一 crc 直接 用SSH管理linux服務器時經常需要遠程與本地之間交互文件.而直接用SecureCRT自帶的上傳下載功能無疑是最方便的,SecureCRT下的文件傳輸協議有ASCII、Xmodem、Zmodem。 文件傳輸協議:

[18/11/16]列印三角三角

1 /* 2 列印圖案 考察for迴圈的巢狀*/ 2 #include<stdio.h> 3 int main () 4 {

C# 如何在Excel中插入

上標和下標常見於一些數學公式和化學表示式中,有時候我們需要將這些數學公式和化學式插入到Excel中,因此就涉及到如何在Excel中插入上標和下標。本文將介紹如何使用C#和Spire.XLS元件在Excel文件中插入上標和下標。 在使用以下程式碼前,需要引用Spire.Xls.dll到工程中,

PullToRefreshListView拉+輪播圖多條目+fragment巢狀fragment+二次取樣+側拉點選切換fragment+PullToRefreshGritView圖片展示

側拉 程式碼 1提取的基類 1.1Activity的基類 package com.example.zonghelianxi02.ui.activity; import android.os.Bundle; import android.support.annotation.Nulla