Linux核心開發之記憶體與I/O訪問(四)

時間:晚上7點地點:寢室中..“小王,今天就不多話了,接著昨天沒講完的,不然連不起來了,都..”我催促著。  上節講到kmalloc()申請的記憶體若要被映射到使用者空間可以通過mem_map_reserve()設定為保留後進行。具體怎麼操作呢,給你一個模版吧:// 核心模組載入函數int __init kmalloc_map_init(void){ ../申請裝置號,添加cedv結構體 buffer = kmalloc(BUF_SIZE, GFP_KERNEL);

Linux核心開發之並發控制(四)

出招表七:訊號量(訊號量其實和自旋鎖是一樣的,就是有一點不同:當擷取不到訊號量時,進程不會原地打轉而是進入休眠等待狀態)Linux系統中與訊號量相關的操作主要有一下4種:1)定義訊號量    struct semaphore sem;2)初始化訊號量    void sema_init (struct semphore *sem, int val);    //設定sem為valvoid init_MUTEX(struct semaphore *sem);   

Linux核心開發之並發控制(三)

算了,既然給你那麼多秘籍了,也不在乎這剩下的兩三招:出招表五:順序鎖(seqlock)使用順序鎖,讀執行單元絕不會被寫執行單元阻塞,同時寫執行單元也不需要等待所有讀執行單元完成讀操作後才進行寫操作。但是寫執行單元之間仍然是互斥的。如果讀執行單元在讀操作期間,寫執行單元已經發生了操作,那麼,讀執行單元必須重新讀取資料,以便確保得到的資料是完整的。致命弱點:順序鎖有一個限制,就是它必須要求被保護的共用資源不含有指標。因為寫執行單元可能使得指標失效,但讀執行單元如果正要訪問該指標,將導致Oops。在L

Linux核心開發之非同步通知與非同步I/O(三)

   小王,聽說過AIO沒?外國人,就這樣,總是愛簡寫,簡寫的結果是咱們都不認識了。所謂AIO就是Asynchronous Input/Output非同步輸入/輸出,基本思想是允許進程發起很多的I/O操作,而不用阻塞或等待任何操作的完成,稍後或在接收到I/O操作完成的通知時,進程就可以檢索I/O操作的結果。“得得,你咋又跟我上起課來了呢,不是說好,今天CS嗎?是不是跟我講課特自信啊“小王抱怨到。“啊?不是吧,為啥這樣呢,那你到底聽不聽,別到時面試叫天天不靈叫地地不應的,別再找我哈”我氣憤的說。"

linux核心分析筆記—-上半部與下半部(上)

       嗨,嗨,如果您記性好的話,我在上一篇部落格中提到過這樣一件事:中斷處理是分為兩個部分:中斷處理常式是上半部,它接收到一個中斷,就立即執行,但只做有嚴格時限的工作;而另外被叫做下半部的另外一個部分主要做被允許能稍後完成的工作。這個下半部正是今天的重點。      

Linux核心開發之並發控制(二)

上集說到哪兒了呢?瞧這記性,什嗎?說到"天要下雨,娘要嫁人"那段。。這是誰在答話,廢話,我當然知道講到這裡了,我是說驅動講到哪裡了。算了,不管了..話說Linux開源社區的開發人員們做了什麼工作呢,很簡單:利用spin_lock()/spin_unlock()作為自旋鎖的基礎,將它們和關中斷local_irq_disable()/開中斷local_irq_enable(),關底半部local_bh_disable()/開底半部local_bh_enable(),關中斷並儲存狀態字local_ir

linux核心分析筆記—-核心同步

       核心同步講的比較多了,我也就不太囉嗦了,先說一些概念,然後就是方法。      

Linux核心開發之並發控制(五)

"小濤,還有多少啊,你看我本來就開玩笑似的說說火車票,飛機票的事,看MM的事,你在眉飛色舞,雞飛狗跳的沒完了呢…”"啊?怎麼這樣呢,本來一個寢室,做人的差別就那麼大囁,平時不好好學習,有問題了問我,給你免費教學,還滿腹牢騷,也太不夠朋友了吧…."我錘著桌子說."朋友,我還不夠朋友啊,你沒聽說嗎:朋友為我,兩肋插刀,我為朋友,插它兩刀..“小王打斷我,”聽你念經似的,都三個小時了,你瞧,都來五了,怎麼,你還想和老易的品三國pk一下誰的集..“ 

Linux核心開發之中斷與時鐘(一)

“小王,醒醒,開始上課了,今天咱們開始講中斷,這可是進階東西,錯過不補哈”我使勁推著睡夢中的小王。“嗯?感情好啊,快點,快點”小王一聽有新東西講,像打了雞血似的興奮,連我都懷疑起她是不是性格中喜新厭舊。不管那麼多了,我講我的,她厭她的…  啥叫中斷?就是指cpu在執行過程中,出現了某些突發事件時CPU必須暫停執行當前的程式,轉去處理突發事件,處理完畢後CPU有返回原程式被中斷的位置並繼續執行。 

Linux核心開發之Helloworld

   學了那麼多程式語言,總是有一個Hello world開頭,不禁感歎Hello world的強大。呵呵,廢話少說,咋們的故事當然要從這個Hello world開始。 (1)linux開源當然少不了原始碼的貢獻,請看下邊(至於什麼是開源,悲劇的我現在也沒整明白): #include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL"); static int

Linux核心開發之並發控制(執行個體總結篇)

"小王,小王,別睡了,瞧你,咋還睡著了呢…"我催促他說."現在是公元前還是公元後啊,我的MM等急了沒.."呵呵,看他一臉傻笑。提醒各位路過的MM,如果沒有男友的,可以聯絡小王,電話:拐拐拐。“什麼,我的,呵呵,沒辦法,誰讓我這有才呢..”算算前邊有關並發控制的有關內容,都到五了,一連來了十一招,今天也不好意思再賣官子了,做一個最後的執行個體總結篇,下一節,就要開始新的內容了哦,沒趕上的可要加油了。執行個體篇:1.定義帶有裝置並發控制方案的結構體(諸如訊號量,自旋鎖等,反正前邊那麼多了)我是一名高

Linux核心開發之中斷與時鐘(三)

  晚上7點10分..“小濤哥,這章不是叫Linux裝置驅動程式之中斷與時鐘,前邊你講了中斷,還給了我很多模版,我都看懂了,這次是不是要開始講時鐘了..”“真聰明,越來越喜歡你這聰明的樣子了,說的不錯,今天就要開始一個新的模組--核心時鐘”我很少夸人,為啥今天誇她呢了,呵呵.  定時器,意思大家都明白,我就不說了,要是不明白,把它想成個鬧鐘總可以吧.. 

Linux核心開發之非同步通知與非同步I/O(一)

“小王,聽說過錦上添花吧..”我拍拍下王的頭說。“還錦上添花你,為你上次提的幾個東東,我是頭上長包..”小王氣憤地瞪著我。“啊,為啥這樣呢,本來還特意拒絕了MM的月份,抽出時間打算給你說點進階的東東,看來現在是不行了”我吃驚道,“這樣吧,這次就給你講些和前邊有關的東西,也不失為錦上添花不是?”。“好,我也是這麼打算的,就是沒好意思說,今天講些啥呢?”小王暗淡的眼光總算閃了閃。(為啥這麼難受呢,好像跟什麼會嚎叫的特像,哈哈) 

Linux核心開發之阻塞非阻塞IO—-輪詢操作

“小王,來聊聊,今天面試的情況怎麼樣,應該挺順利的吧..”看著小王平淡的眉頭,我問道。“唉,別提了,你說,我的運氣咋這差呢,面試前你不是給我講了有關阻塞的問題嗎,我見了面試官是吧,還跟他好好的用今天排隊的例子說了有關阻塞的問題,但是..”小王哀聲歎氣地說到。“別但是了,怎麼啦..”“可問題是面試官壓根就沒打算問我有關阻塞的問題及解決方案,但是問我說:這樣吧,你給我說說在Linux裝置驅動中有關非阻塞的方法,我這一聽,傻眼了不是,你剛好給我講的是阻塞的東西,可人家偏要問我有關非阻塞的問題,我..”

Linux核心開發之中斷與時鐘(二)

“小濤哥,快醒醒,快醒醒..”小王使勁推著睡夢中的我,“你不是說今天要講昨天有關的典型模板執行個體嗎…”“啊?小姐啊,現在才早上8點,還讓人睡覺不,別吵”我一頭鑽進被子裡說。“不管,誰讓你昨天不說完,還賣個小關子,害我昨天晚上都沒睡好,想了一晚上…”我揉揉蒙蒙的眼說:“行,權當看在你渴求的心情上,但只此一次,下不為例,我還想好好睡懶覺呢..”昨天我們講了有關中斷方面的東西,鑒於小王你不太懂,我今天就專門拿出一章來說說前邊中斷的使用典型模版,你照抄也方便不是:1)在中斷分類中,我們說到了有關向量中

Linux核心開發之阻塞/非阻塞IO—-等待對列

十一過後..小王也剛好即將大學畢業,現在要開始寫簡曆,投簡曆,找工作了。到了家工作單位,小王欣喜若狂,可再一看,心都涼了半截..“咋了,小王,看你找工作,我都來了幫你大氣,怕什麼,不就人多點嗎..”看著排到電梯口的長龍,我說(其實,我心裡也害怕,可也不能說出來不是)。“不是,你不知道,我並不怕面試上有問題,有你在,技術上還是問題嗎,不相信自己還不相信你啊,我主要是怕連面試的機會都沒有,你看那麼多人,不知道要排到哪裡去了,你說每年都這樣,那些人力主管部門的咋也不想個好辦法來改善一下..”小王抱怨道

Linux核心開發之中斷與時鐘(四)

“小王,小王,今天可是這一章節最後一節了,知識點咱們前邊都講過了,今天主要是給你用前邊的東西講一個實際例子---秒字元裝置驅動程式”  這個驅動程式會在被開啟的時候初始化一個定時器並將其添加到核心定時器鏈表中,每秒輸出一次當前的jiffies,這意味著,定時器處理函數中每次都要修改新的expires。不多說了,看程式碼分析:#include …//必要的系統標頭檔#define SECOND_MAJOR 252 /*預設的second的主裝置號*/static int

Linux核心開發之非同步通知與非同步I/O(二)

“曾經有一份真摯的愛情擺在面前,我卻不懂珍惜;曾經有一個承諾,我卻倍感珍惜,今天一定要好好講講..”講講啥,講講上節說的那個非同步通知的例子唄,大家喜歡看代碼,咋們就先上代碼:struct globalfifo_dev { struct cdev cdev; /*cdev結構體*/

Linux核心開發之記憶體與I/O訪問(三)

“小王,不瞞你說,我現在是悲喜交加啊,悲的是:這最後一章,我講的是膽顫心驚(以前自己都沒學好,現在也算還賬了),喜的是每講一張,我知道離結束就近了一點,趕快把這個東西過掉,進入下一環節,那又是我牛皮吹破天的時代了”看著小王期盼和懷疑的眼神,我,昔日的風采也不見了。“沒事的,小濤哥,其實說真的,不是我安慰你哈,從開始我什麼都不懂,到現在我也算個入門級的高手了,都是你一手帶過來的,我已經對你推崇備至了,你就放心吧,會的你盡情教,不會的,你慢慢說,我都聽你的”小王善解人意的說。“嗯,你真好,看來我沒看

Linux核心開發之記憶體與I/O訪問(一)

“小王,今天咱們開始講有關記憶體和I/O訪問的內容,心裡先要有點低,這部分內容還是有點煩,有點難的哦”說著話,我心裡都沒底,怕嚇著小王,不瞞你說,當時看這部分,我可是沒少費勁。“哦,那咋辦,不能不學是不?沒事,有小濤哥在,俺就不怕”小王信心十足的說。“哦!看不出來,還讓你來安慰我了”看著小王這充滿信心的樣子,我也沒啥顧慮了。好了,深吸一口氣,開始今天的課程。  

總頁數: 3662 1 .... 1200 1201 1202 1203 1204 .... 3662 Go to: 前往

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.