原创 Linux存儲IO棧(3)-- 設備驅動模型

概述 Linux的設備驅動模型能夠帶來以下的優點: * 使用統一機制來表達設備與驅動之間的關係,規範設備驅動的編寫,核心代碼複用。 * 將系統中的設備以樹結構組織,並且通過sysfs將其呈現在用戶空間——包括所有的

原创 LKD:內存管理

內核本身不能像用戶空間那樣奢侈地使用內存。 頁:內核把物理頁作爲內存管理的基本單位。 MMU:內存管理單元,管理內存並把虛擬地址轉換爲物理地址的硬件。 內核用struct page結構表示系統中的每個物理頁。 區:由於硬件的限制,內核並不

原创 LDD:分配內存

kmalloc 除非被阻塞,否則運行很快,而且不對所獲取的內存空間請零,這意味着我們要將內存顯式地清空。 分配的區域在物理內存中也是連續的。 點贊 收藏 分享 文章舉報 我命由

原创 SCSI設備IO過程:磁盤上線與IO過程

一,SCSI設備上報過程:硬盤上線過程 SATA盤AHCI控制器初始化過程: ahci_init()  ->pci_module_init(&ahci_pci_driver); static struct pci_drive

原创 LKD:定時器和時間管理

內核函數:事件驅動和時間驅動 相對時間和絕對時間 週期性產生的事件——都是由系統定時器驅動的。系統定時器是一種可編程硬件芯片,它能以固定頻率產生中斷,該中斷就是所謂的定時器中斷,它所對應的中斷處理程序負責更新系統時間和執行需要週期性運行的

原创 LLD:內存映射和DMA

地址類型 用戶虛擬地址 物理地址 總線地址 內核邏輯地址 內核虛擬地址   用戶虛擬地址 用戶空間程序所看到的常規地址。用戶地址是32位或者64位的,這取決於硬件的體系結構。每個進程都有自己的虛擬地址空間。   物理地址 該地址在處理器和

原创 LKD:進程管理

進程   進程:處於執行期的程序,包括:可執行程序代碼、打開的文件、掛起的信號、內核內部數據、處理器狀態、一個或多個具有內存映射的內存地址空間及一個或多個執行線程、用來存放全局變量的數據段等。實際上,進程就是正在執行的程序代碼的實時結果。

原创 LKD:內核同步

臨界區:訪問和操作共享數據的代碼段。 競爭條件:如果兩個執行線程有可能處於同一個臨界區中同時執行,那麼這就是程序的一個bug。 同步:避免併發和防止競爭條件。 各種鎖機制之間的區別主要在於:當鎖已經被其他線程持有,因而不可用時的行爲表現—

原创 LKD:下半部

在2.6版本中,內核提供了三種下半部實現機制:軟中斷、tasklets和工作隊列。 內核定時器:把操作推遲到某個確定的時間段之後執行 軟中斷 <a>軟中斷由softirq_action表示,softirq.c中定義了包含有32個該結構體的

原创 LKD:工作隊列

工作隊列 工作隊列由內核線程執行,在進程上下文中執行。 工作隊列允許重新調度甚至是睡眠 在工作隊列和軟中斷/tasklet中做出選擇非常容易。如果推後執行的任務需要睡眠,就選擇工作隊列。不需要睡眠,就選擇軟中斷或tasklet 唯一能在進

原创 LKD:中斷

中斷請求(IRQ)線:不同設備對應的中斷不同,而每個中斷都通過一個唯一的數字標誌。重點在於特定的中斷總是與特定的設備相關聯,並且內核要知道這些信息。 異常:常常也稱爲同步中斷。如處理器執行到由於編程失誤導致的錯誤指令(如被0除),或者執行

原创 面向對象特性——C++多態性

1. 多態性是面向對象程序設計的關鍵技術之一。   2. 利用多態性技術,可以調用同一個函數名的函數,實現完全不同的功能。   3.C++中有兩種多態性:編譯時的多態性和運行時的多態性。    編譯時的多態性:通過函數的重載的運算符的重載