linux 中斷的上半部和下半部

linux 中斷的上半部和下半部2009-12-09 07:27另外,與Linux中斷息息相關的一個重要概念是Linux中斷分為兩個半部:上半部(tophalf)和下半部(bottom half)。上半部的功能是"登記中斷",當一個中斷髮生時,它進行相應地硬體讀寫後就把中斷常式的下半部掛到該裝置的下半部執行隊列中去。因此,上半部執行的速度就會很快,可以服務更多的插斷要求。但是,僅有"登記中斷"是遠遠不夠的,因為中斷的事件可能很複雜。因此,Linux引入了一個下半部,來完成中斷事件的絕大多數使命。

linux /proc/devices & /dev

請問:linux環境下,/dev/目錄下的內容與/proc/下檔案devices中的內容有什麼區別?我在目標板上做實驗時發現,當我向板子上載入驅動模組時,devices檔案中有變化,而/dev下根本沒有變化,/dev/下不也應該是裝置接點嗎,為什麼為模組建立裝置接點時,/dev/下卻沒有變化呢? 請各位幫幫忙,謝謝!!! /proc/devices/中的裝置是通過insmod載入到核心的,它可產生一個major供mknod作為參數。/dev/*.*

linux 管道學習

linux 管道學習 收藏 管道是Linux中很重要的一種通訊方式,是把一個程式的輸出直接連接到另一個程式的輸入,常說的管道多是指無名管道,無名管道只能用於具有親緣關係的進程之間,這是它與有名管道的最大區別。 有名管道叫named pipe或者FIFO(先進先出),可以用函數mkfifo()建立。 Linux管道的實現機制 在Linux中,管道是一種使用非常頻繁的通訊機制。從本質上說,管道也是一種檔案,但它又和一般的檔案有所不同,管道可以克服使用檔案進行通訊的兩個問題,具體表現為:·

Linux下USB轉串口的驅動

Linux下USB轉串口的驅動(2010-03-27 10:45:21){function anonymous(){scope.articel_quote_alert &&scope.articel_quote_alert('40d23f130100hgxv');return false;}}" href="javascript:;">SG_icon111" src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.

linux 中的struct resource

linux對掛接在4G匯流排空間上的裝置實體的管理方式 -- struct resource /usr/src/linux-2.6.21.5/include/linux/ioport.h struct resource { resource_size_t start; resource_size_t end; const char *name; unsigned long flags; struct resource *parent, *sibling, *child; }; struct

INIT_WORK–Linux 裝置驅動 Edition 3–7.6. 工作隊列

7.6. 工作隊列工作隊列是, 表面上看, 類似於 taskets; 它們允許核心代碼來請求在將來某個時間調用一個函數. 但是, 有幾個顯著的不同在這 2 個之間, 包括:tasklet 在軟體中斷上下文中啟動並執行結果是所有的 tasklet 代碼必須是原子的. 相反, 工作隊列函數在一個特殊核心進程上下文運行; 結果, 它們有更多的靈活性. 特別地, 工作隊列函數能夠睡眠.tasklet 常常在它們最初被提交的處理器上運行. 工作隊列以相同地方式工作,

linux 磁碟資訊

LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁碟分割進行管理的一種機制,LVM是建立在硬碟和分區之上的一個邏輯層,來提高磁碟分割管理的靈活性。前面談到,LVM是在磁碟分割和檔案系統之間添加的一個邏輯層,來為檔案系統屏蔽下層磁碟分割布局,提供一個抽象的盤卷,在盤卷上建立檔案系統。shell 命令fdiskdf2、lvm shell命令1:參看原生所有硬碟,包括沒有格式化           fdisk –l   

Linux學習筆記零零四

前幾天和同事討論到多核、多任務,感歎寫程式時多線程間同步的麻煩,擔心寫出來的程式會出問題,聽說多任務是比爾蓋茨發明的,然後,討論到如果這個世界沒有多任務會怎麼辦? 一個cpu在同一時間只能幹一件事情,所謂的多任務實際上是假的分時機制,我有一個同事寫了一個單片機上的類似於UCOS的作業系統,採用定時器 中斷來實現任務的切換以及以訊息驅動之。這種做法和現代作業系統中的多任務有什麼區別呢? Linux對進程的定義有四個要素:有一段可以執行的代碼、有獨立的使用者空間、有系統堆棧、有task_struct

Linux多線程編程執行個體解析

Linux系統下的多線程遵循POSIX線程介面,稱為pthread。編寫Linux下的多線程程式,需要使用標頭檔pthread.h,串連時需要使用庫libpthread.a。順便說一下,Linux下pthread的實現是通過系統調用clone()來實現的。clone()是Linux所特有的系統調用,它的使用方式類似fork,關於clone()的詳細情況,有興趣的讀者可以去查看有關文檔說明。下面我們展示一個最簡單的多線程程式

簡單的Linux關機程式

#include <signal.h>#include <stdio.h>#include <unistd.h>#include <sys/reboot.h>int main(int argc, char **argv){    /* first disable all our signals */        sigset_t set;    sigfillset(&set);    sigprocmask(SIG_BLOCK,

Vmware裡Linux在x windows與虛擬終端之間切換方法

    當我們在Vmware或者其他虛擬機器中安裝Linux後,想在XWindows與虛擬終端之間切換時,卻發現Ctrl+Alt+Fx不起作用,那麼我們如何解決這個問題呢?其實方法很簡單,我們只需要將Vmware或者其他虛擬機器軟體的熱鍵改成Ctrl+Alt+Shift即可,如Vmware具體方法如下:中文版——選擇編輯——參數——熱鍵,選擇Ctrl+Alt+Shift即可。英文版選擇edit-preferences-hotkeys選擇Ctrl+Alt+Shift   

linux下的__init和__exit首碼說明

原始定義:include/linux/init.hQUOTE: #define __init __attribute__ ((__section__ (".init.text")))#define __initdata __attribute__ ((__section__ (".init.data")))#define __exitdata __attribute__ ((__section__(".exit.data")))#define __exit_call

編譯linux核心產生的system.map檔案詳解

system.map內容格式為:線性地址 類型 符號具體內容如下: 00100000 A phys_startup_32c0100000 T startup_32c0100000 A _text                             注:表示核心代碼第一個位元組的地址c01000c6 t checkCPUtypec0100147 t is486c010014e t is386c0100199 t L6c010019b t check_x87c01001c2 t

Linux記憶體管理之kmalloc 與 __get_free_page()

            在裝置驅動程式中動態開闢記憶體,不是用malloc,而是kmalloc,或者用get_free_pages直接申請頁。釋放記憶體用的是kfree,或free_pages.  對於提供了MMU(儲存管理器,輔助作業系統進行記憶體管理,提供虛真實位址轉換等硬體支援)的處理器而言,Linux提供了複雜的儲存管理系統,使得進程所能訪問的記憶體達到4GB。  進程的4GB記憶體空間被人為的分為兩個部分--使用者空間與核心空間。使用者空間地址分布從0到3GB(PAGE_OFFSET,

[經典]Linux核心中get_free_page、kmalloc和vmalloc函數的區別(樣本Module)

  對於提供了MMU(儲存管理器,輔助作業系統進行記憶體管理,提供虛真實位址轉換等硬體支援)的處理器而言,Linux提供了複雜的儲存管理系統,使得進程所能訪問的記憶體達到4GB。  進程的4GB記憶體空間被人為的分為兩個部分--使用者空間與核心空間。使用者空間地址分布從0到3GB(PAGE_OFFSET,在0x86中它等於0xC0000000),3GB到4GB為核心空間。如所示:  核心空間中,從3G到vmalloc_start這段地址是實體記憶體映射地區(該地區中包含了核心鏡像、物理頁框表me

Linux核心中 kernel_thread函數的若干問題說明

 1.kernel thread是否只有在kernel thred中才被建立?2.kernel thread無法被kill?3.在module中建立的kernel thread,用kernel_thread函數,獲得的current->mm為什麼不為0 ?4.  先看一段代碼:#include <linux/kernel.h>#include <linux/module.h>static pid_t thread_pid;static struct

Linux 編程段錯誤(segmentation error)總結

   最近一段時間在linux下用C做一些學習和開發,但是由於經驗不足,問題多多。而段錯誤就是讓我非常頭痛的一個問題。不過,目前寫一個一千行左右的代碼,也很少出現段錯誤,或者是即使出現了,也很容易找出來,並且處理掉。    那什麼是段錯誤?段錯誤為什麼是個麻煩事?以及怎麼發現程式中的段錯誤以及如何避免發生段錯誤呢?    一方面為了給自己的學習做個總結,另一方面由於至今沒有找到一個比較全面介紹這個雖然是“particular

Linux下組譯工具及系統調用的深入分析

一)彙編來源程式分析:編寫一個AT&T的組合語言程式,使程式在運行時睡眠10秒鐘原始碼如下:#include "sys/syscall.h".datasleeptime:.long   10,0.text.global _start        .type _start, @function_start:        movl    $SYS_nanosleep, %eax        movl    $sleeptime,     %ebx        int     $0x8

Linux核心中常見的結構體對象中的函數指標賦值操作

常見的賦值操作兩種方法都可實現,Linux核心編程的相關書籍中看到方法一較多,周立功編寫的linux系統構建於驅動程式開發範例中見到的是方法二,於是奇怪,編寫兩種代碼實驗,都成功。賦值操作 方法一:static struct file_operations File_Ops_4_Our_Proc_File = {.read = module_output,.write = module_input,.open = module_open,.release =

Linux記憶體線性地址空間布局解析

 Linux記憶體線性地址空間大小為4GB,分為2個部分:使用者空間部分(通常是3G)和核心空間部分(通常是1G)。在此我們主要關注核心地址空間部分。核心通過核心頁全域目錄來管理所有的實體記憶體,由於線性地址前3G空間為使用者使用,核心頁全域目錄前768項(剛好3G)除0、1兩項外全部為0,後256項(1G)用來管理所有的實體記憶體。核心頁全域目錄在編譯時間靜態地定義為swapper_pg_dir數組,該數組從實體記憶體地址0x101000處開始存放。由圖可見,核心線性地址空間部分從PAGE_O

總頁數: 3772 1 .... 419 420 421 422 423 .... 3772 Go to: 前往

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。