順便發(fā)個(gè)招聘信息
深圳或杭州的兄弟姐妹有誰(shuí)有興趣到華為的嗎?要求重點(diǎn)本科2年經(jīng)驗(yàn)/碩士1年經(jīng)驗(yàn),有C語(yǔ)言開(kāi)發(fā)經(jīng)驗(yàn)。有興趣的將簡(jiǎn)歷 發(fā)到kgha@sohu.com,謝謝!
posted @ 2010-07-01 22:17 璞石 閱讀(1529) | 評(píng)論 (6) | 編輯 收藏
posted @ 2010-07-01 22:17 璞石 閱讀(1529) | 評(píng)論 (6) | 編輯 收藏
經(jīng)過(guò)3天沒(méi)日沒(méi)夜的定位,終于把一個(gè)阻塞近一個(gè)周的問(wèn)題解決了,再拖下去估計(jì)老大要把我給吃了。回想起這三天定位的過(guò)程,簡(jiǎn)直不亞于任何一部偵探小說(shuō)。無(wú)數(shù)次的失望,無(wú)數(shù)次的毫無(wú)頭緒或者千頭萬(wàn)序,但總能在關(guān)鍵時(shí)刻發(fā)現(xiàn)點(diǎn)點(diǎn)蜘絲馬跡,引導(dǎo)問(wèn)題進(jìn)一步深入。猜想、驗(yàn)證、再猜想、再驗(yàn)證。幾乎每次都覺(jué)得問(wèn)題很快就會(huì)找到頭緒了,結(jié)果測(cè)試的數(shù)據(jù)無(wú)情的否定了猜想。但是又能根據(jù)測(cè)試結(jié)果引入更加深層次的問(wèn)題。定位過(guò)程走了很多彎路,現(xiàn)在回想起來(lái)感覺(jué)就是磕磕碰碰的走過(guò)來(lái),很多沒(méi)有必要的工作也浪費(fèi)了大量的時(shí)間。真是有山窮水盡疑無(wú)路、柳岸花明又一村的感覺(jué)。真是佩服古人能用如此精確的語(yǔ)言把這種感覺(jué)說(shuō)出來(lái)。要是我想到死也想不出如何形容當(dāng)時(shí)的感覺(jué)了。^_^
每次定位完一個(gè)問(wèn)題后,在整理思路的時(shí)候,總是感覺(jué)這是多么自然而然的事情啊,居然當(dāng)時(shí)沒(méi)有想到。哈哈,可能很多人都有同樣的感受,可是真正身在其中有太多的因素干擾你,把你引入歧途,等你發(fā)現(xiàn)的時(shí)候又要從頭而來(lái)。由己及人,我們對(duì)待別人的問(wèn)題是否也是這樣,一個(gè)看似很簡(jiǎn)單的邏輯其中也包含了別人在很多錯(cuò)誤基礎(chǔ)上的嘗試。或許我們?cè)诔靶e人犯錯(cuò)誤的同時(shí),更要看到別人正在向正確邁進(jìn)。
呵呵,每次寫(xiě)B(tài)OLG都發(fā)現(xiàn)腦子有很多東西都混成一團(tuán),不知道從哪里開(kāi)始,寫(xiě)起來(lái)東一句西一句的,可能這也是我高中語(yǔ)文作文總是不及格的原因吧。看來(lái)要找時(shí)間好好整理下自己的思路了。
posted @ 2007-08-12 01:00 璞石 閱讀(312) | 評(píng)論 (0) | 編輯 收藏
posted @ 2007-06-02 00:52 璞石 閱讀(665) | 評(píng)論 (0) | 編輯 收藏
posted @ 2007-03-10 23:03 璞石 閱讀(392) | 評(píng)論 (0) | 編輯 收藏
posted @ 2007-03-04 16:34 璞石 閱讀(3167) | 評(píng)論 (1) | 編輯 收藏
在編寫(xiě)設(shè)備驅(qū)動(dòng)時(shí),
tasklet
機(jī)制是一種比較常見(jiàn)的機(jī)制,通常用于減少中斷處理的時(shí)間,將本應(yīng)該是在中斷服務(wù)程序中完成的任務(wù)轉(zhuǎn)化成軟中斷完成。
為了最大程度的避免中斷處理時(shí)間過(guò)長(zhǎng)而導(dǎo)致中斷丟失,有時(shí)候我們需要把一些在中斷處理中不是非常緊急的任務(wù)放在后面執(zhí)行,而讓中斷處理程序盡快返回。在老版本的
linux
中通常將中斷處理分為
top half handler
、
bottom half handler
。利用
top half handler
處理中斷必須處理的任務(wù),而
bottom half handler
處理不是太緊急的任務(wù)。
但是
linux2.6
以后的
linux
采取了另外一種機(jī)制,就是軟中斷來(lái)代替
bottom half handler
的處理。而
tasklet
機(jī)制正是利用軟中斷來(lái)完成對(duì)驅(qū)動(dòng)
bottom half
的處理。
Linux2.6
中軟中斷通常只有固定的幾種:
HI_SOFTIRQ(
高優(yōu)先級(jí)的
tasklet
,一種特殊的
tasklet)
、
TIMER_SOFTIRQ
(定時(shí)器)、
NET_TX_SOFTIRQ
(網(wǎng)口發(fā)送)、
NET_RX_SOFTIRQ
(網(wǎng)口接收)
、
BLOCK_SOFTIRQ
(塊設(shè)備)、
TASKLET_SOFTIRQ
(普通
tasklet
)。當(dāng)然也可以通過(guò)直接修改內(nèi)核自己加入自己的軟中斷,但是一般來(lái)說(shuō)這是不合理的,軟中斷的優(yōu)先級(jí)比較高,如果不是在內(nèi)核處理頻繁的任務(wù)不建議使用。通常驅(qū)動(dòng)用戶(hù)使用
tasklet
足夠了。
軟中斷和
tasklet
的關(guān)系如下圖:
?
???
???上圖可以看出,
ksoftirqd
是一個(gè)后臺(tái)運(yùn)行的內(nèi)核線(xiàn)程,它會(huì)周期的遍歷軟中斷的向量列表,如果發(fā)現(xiàn)哪個(gè)軟中斷向量被掛起了(
pend
),就執(zhí)行對(duì)應(yīng)的處理函數(shù),對(duì)于
tasklet
來(lái)說(shuō),此處理函數(shù)就是
tasklet_action
,這個(gè)處理函數(shù)在系統(tǒng)啟動(dòng)時(shí)初始化軟中斷的就掛接了。
Tasklet_action
函數(shù),遍歷一個(gè)全局的
tasklet_vec
鏈表(此鏈表對(duì)于
SMP
系統(tǒng)是每個(gè)
CPU
都有一個(gè)),此鏈表中的元素為
tasklet_struct
。此結(jié)構(gòu)如下
:
struct tasklet_struct
{
?????? struct tasklet_struct *next;
?????? unsigned long state;
?????? atomic_t count;
?????? void (*func)(unsigned long);
?????? unsigned long data;
};
每個(gè)結(jié)構(gòu)一個(gè)函數(shù)指針,指向你自己定義的函數(shù)。當(dāng)我們要使用
tasklet
,首先新定義一個(gè)
tasklet_struct
結(jié)構(gòu),并初始化好要執(zhí)行函數(shù)指針,然后將它掛接到
task_vec
鏈表中,并發(fā)一個(gè)軟中斷就可以等著被執(zhí)行了。
原理大概如此,對(duì)于
linux
驅(qū)動(dòng)的作者其實(shí)不需要關(guān)心這些,關(guān)鍵是我們?nèi)绾稳ナ褂?/span>
tasklet
這種機(jī)制。
Linux
中提供了如下接口:
DECLARE_TASKLET(name,function,data)
:此接口初始化一個(gè)
tasklet
;其中
name
是
tasklet
的名字,
function
是執(zhí)行
tasklet
的函數(shù);
data
是
unsigned long
類(lèi)型的
function
參數(shù)。
static inline void tasklet_schedule(struct tasklet_struct *t)
:此接口將定義后的
tasklet
掛接到
cpu
的
tasklet_vec
鏈表,具體是哪個(gè)
cpu
的
tasklet_vec
鏈表,是根據(jù)當(dāng)前線(xiàn)程是運(yùn)行在哪個(gè)
cpu
來(lái)決定的。此函數(shù)不僅會(huì)掛接
tasklet
,而且會(huì)起一個(gè)軟
tasklet
的軟中斷
,
既把
tasklet
對(duì)應(yīng)的中斷向量掛起
(pend)
。
兩個(gè)工作完成后,基本上可以了,
tasklet
機(jī)制并不復(fù)雜,很容易的使程序盡快的響應(yīng)中斷,避免造成中斷丟失。
posted @ 2007-02-10 00:18 璞石 閱讀(7362) | 評(píng)論 (4) | 編輯 收藏
posted @ 2007-02-06 21:07 璞石 閱讀(301) | 評(píng)論 (0) | 編輯 收藏