原创 linux內核部件分析(四)——更強的鏈表klist

     前面我們說到過list_head,這是linux中通用的鏈表形式,雙向循環鏈表,功能強大,實現簡單優雅。可如果您認爲list_head就是鏈表的極致,應該在linux鏈表界一統天下,那可就錯了。據我所知,linux內核代碼中至少

原创 linux內核部件分析(二)——原子性操作atomic_t

         在任何處理器平臺下,都會有一些原子性操作,供操作系統使用,我們這裏只講x86下面的。在單處理器情況下,每條指令的執行都是原子性的,但在多處理器情況下,只有那些單獨的讀操作或寫操作纔是原子性的。爲了彌補這一缺點,x86提供

原创 面對慘淡的人生

     記不清自己上次按照預定完成計劃是什麼時候了,只記得在十分鐘前我還在爲以前寫的程序修改bug。如果說有什麼是最讓程序員沮喪的,那就是長期以來都無法完成自己的計劃;如果說還有更糟糕的,那就是在無法完成計劃的同時還要爲以前寫的程序不斷

原创 spin lock在kernel 2.4與2.6中的實現與改進

1. TAS lock (test-and-set) 這是最簡單的spinlock,CPU會在硬件上提供一些指令來幫助OS實現spinlock, 比如x86就有xchg, LOCK指令前綴等指令。。。 test_and_set()可以利用

原创 Everything you never wanted to know about kobjects, ksets, and ktypes

    要理解kobject抽象及其之上的設備驅動模型並不簡單,難點之一就在於,沒有一個明顯的起點。要處理好kobject,需要理解一些別的類型,而這些類型又是相互引用的。爲了讓事情簡單,我們採用多遍的過程,從模糊的概念出發,逐漸增加細節

原创 人該怎樣強大起來2

    前幾天看到俞敏洪先生在《我們》欄目談大學生就業問題的訪談,我深受觸動。其實現在大學生也好,研究生也好,都是在高校的象牙塔內,作爲天之驕子,感受不到在社會上生存的壓力。再加上現在高校普遍採用放羊式教學,嚴進寬出,學生的能力和素質並沒

原创 linux內核部件分析(十)——設備驅動模型之class

       前面看過了設備驅動模型中的bus、device、driver,這三種都是有跡可循的。其中bus代表實際的總線,device代表實際的設

原创 linux內核部件分析(十一)——waitqueue與線程的阻塞

    當你必須一個複雜的系統,協調系統的方方面面,靈活地支持各種機制和策略,即使很簡單的問題也會變得很複雜。linux絕對就是這樣一個複雜的系統。所以我們要理解它,儘量從原理的角度去理解事務的處理流程,儘量避免各種細枝末節的干擾,儘量規

原创 linux內核部件分析(七)——設備驅動模型之driver

     上節我們分析設備驅動模型中的device,主要是drivers/base/core.c,可以說是代碼量最大的一個文件。本節要分析的驅動driver,就要相對簡單很多。原因也很簡單,對於driver,我們能定義的公共部分實在不多,

原创 人該怎樣強大起來

     身處這個紛繁複雜的社會,一不小心,二十多個年頭已經從指間溜走。已經大學畢業的我卻依然如剛上學時的懵懂,一樣不知道未來在哪裏,一樣感覺到自己的脆弱。如果說一定有什麼變化,或許是夢想吧。最初的我,夢想完全是自由的,可以天馬行空,可以

原创 linux內核部件分析(五)——設備驅動模型的基石kobject

      之前我們分析了引用計數kref,總結了sysfs提供的API,並翻譯了介紹kobject原理及用法的文檔。應該說準備工作做得足夠多,ko

原创 做一個程序員的條件

    曾經,我以爲做一個程序員是最輕鬆而有趣的。程序員們擁有和計算機同樣的神祕感,並可以控制計算機做自己想做的事。但實際情況已經和數十年前不同了,那個整臺計算機只有64K RAM的時代已經遠去了,我們正在日益被瘋長的代碼與程序所淹沒,從

原创 linux內核部件分析(六)——設備驅動模型之device

     linux的設備驅動模型,是建立在sysfs和kobject之上的,由總線、設備、驅動、類所組成的關係結構。從本節開始,我們將對linux這一設備驅動模型進行深入分析。      頭文件是include/linux/device

原创 linux內核中的內存屏障

前言        之前讀了關於順序一致性和緩存一致性討論的文章,感覺豁然開朗。對linux內核中出現的種種同步和屏障,想做一點總結。 緩存一致性        之前一直認爲linux中很多東西是用來保證緩存一致性的,其實不是。緩存一致

原创 開篇

    在我看來,寫博客的目的不是取悅讀者,也不是炫耀自己。博客應該是一種傾訴,一種記錄,一種鞭策。     我們都有傾訴的慾望,程序員更是如此。糾結了一整天的bug終於被解決了,哪怕起因只是自己一不留神把變量名打錯了,你也會想好好找人傾