原创 導讀

內存管理 1. JMP指令 進程調度 1. 系統寄存器和數據結構 2. 進程-1:定義及其結構 3. 進程-2:進程上下文和中斷上下文 4. 進程-3: fork()函數 5. switch_to(n)函數 併發與競爭 1.

原创 Linux內核內存分配函數

i. 分配函數的選擇 kmalloc():如果需要連續的物理頁,可以使用此函數,這是內核中內存分配的常用方式,也是大多數情況下應該使用的內存分配方式。傳遞給函數的最常用的標誌是GTP_ATOMIC和GTP_KERNEL。前面的標誌表示

原创 下半部

i.  下半部 1.  下半部 執行與中斷處理密切相關但中斷處理程序本身不執行的工作。 2. 爲什麼用下半部 中斷處理流程(上半部)的侷限性: a) 中斷處理程序以異步方式執行並且可能會打斷重要代碼(也有可能是其他中斷處理程序)的執行。

原创 bus, device, driver 三者之間的關係

1. 總線,設備和驅動 總線:一個總線是處理器和一個或多個設備之間的通道. 爲設備模型的目的, 所有的設備都通過一個總線連接, 甚至當它是一個內部的虛擬的,"平臺"總線。 設備:設備就是連接在總線上的物理實體。設備是有功能之分的。具有相

原创 進程-3:fork()函數

1. 示例程序 #include <unistd.h>; #include <sys/types.h>; main () { pid_t pid; pid=fork(); if (pid

原创 Linux設備模型分析之kset

作者:劉昊昱  博客:http://blog.csdn.net/liuhaoyutz 內核版本:2.6.36   上一篇博客我們分析了Linux設備模型中kobject的註冊和使用,在這一篇文章中,我們來看一下kset的用法。 首先我

原创 中斷處理

作者:劉昊昱  博客:http://blog.csdn.net/liuhaoyutz 編譯環境:Ubuntu 10.10 內核版本:2.6.32-38-generic-pae LDD3源碼路徑:examples/short/   本

原创 進程-1: 進程定義及其結構

1. 定義 進程是處於執行期的程序以及它所包含資源的總稱。 2.組成部分 進程可分爲兩個部分:進程執行空間和任務狀態段TSS。 進程執行空間包含代碼段,堆棧段和數據段,還有爲各個特權級所需的獨立的堆棧空間。其中Stack0中分配了

原创 Linux設備模型分析之kobject

作者:劉昊昱  博客:http://blog.csdn.net/liuhaoyutz 內核版本:2.6.36   一、kobject應用舉例 Linux設備模型最基本的組成元素是kobject,我們先來看一個kobject的應用例子

原创 switch_to(n)函數

這篇文章我們來分析switch_to()函數, 分析的代碼取自linux kernel 0.11 sched.h文件, 我們只爲說明原理, 所以儘量簡單. 其中代碼註釋參考了趙炯老師<Linux內核完全註釋>一書, 言歸正傳,下面來看s

原创 進程-2:進程上下文和中斷上下文

1.     CPU的狀態 CPU總是處於以下3種狀態的一種: a)       內核態,運行於進程上下文,內核代表進程運行於內核空間; b)       內核態,運行於中斷上下文,內核代表硬件運行於內核空間; c)       用戶態

原创 自旋鎖

1. 定義 一個自旋鎖是一個互斥設備,它只能有兩個值:“鎖定”和“解鎖”。如果鎖可用,則“鎖定”位被設置,而代碼繼續進入臨界區;相反,如果鎖被其他人獲得,則代碼進入忙循環並重複檢查這個鎖,直到該鎖可用爲止。這個循環爲“自旋” 2. 實

原创 JMP指令

在讀代碼的時候,Jump指令用的特別多, 在中斷/異常, 虛實地址轉換, 任務切換等等等等,都用到了Jump指令,今天我們來討論一下究竟Jump都做了什麼事情. 下面用僞指令來描述Jump做了什麼事情, 又是怎麼區分這些事件的 JMP(

原创 併發與競爭

1.      併發和競爭          用現實情況說明一下,如下圖:                         如果ATM取錢或者Shopping刷卡是同時發生的,如果銀行沒做任何處理,則會出現如上情況。         

原创 系統寄存器和數據結構

以下這張圖包含了內存管理,進程調度和中斷精髓,如果完全理解好了這張圖,那麼對你來說,操作系統無任何神祕感。 在以後的文章,我會經常引用此圖。 PS: 這張圖是來自Intel Volume 3A: System Programming