當前位置:首頁 > 公眾號精選 > 大魚機器人
[導讀]本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是Linux內核,能看懂Linux內核。


01

前言


本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是Linux內核,能看懂Linux內核。


擁有超過1300萬行的代碼,Linux內核是世界上最大的開源項目之一,但是內核是什么,它用于什么?




02

什么是內核


內核是與計算機硬件接口的易替換軟件的最低級別。它負責將所有以“用戶模式”運行的應用程序連接到物理硬件,并允許稱為服務器的進程使用進程間通信(IPC)彼此獲取信息。


03

內核還要分種類?


是的,沒錯。


3.1 微內核


微內核只管理它必須管理的東西:CPU、內存和IPC。計算機中幾乎所有的東西都可以被看作是一個附件,并且可以在用戶模式下處理。微內核具有可移植性的優(yōu)勢,因為只要操作系統(tǒng)仍然試圖以相同的方式訪問硬件,就不必擔心您是否更改了視頻卡,甚至是操作系統(tǒng)。微內核對內存和安裝空間的占用也非常小,而且它們往往更安全,因為只有特定的進程在用戶模式下運行,而用戶模式不具有管理員模式的高權限。


3.1.1 Pros

  • 可移植性
  • 安裝占用空間小
  • 小內存占用
  • 安全

3.1.2 Cons

  • 通過驅動程序,硬件更加抽象
  • 硬件可能反應較慢,因為驅動程序處于用戶模式
  • 進程必須在隊列中等待才能獲得信息
  • 進程不能在不等待的情況下訪問其他進程


3.2 單內核


單內核與微內核相反,因為它們不僅包含CPU、內存和IPC,而且還包含設備驅動程序、文件系統(tǒng)管理和系統(tǒng)服務器調用等內容。單內核更擅長于訪問硬件和多任務處理,因為如果一個程序需要從內存或運行中的其他進程中獲取信息,那么它就有一條更直接的線路來訪問信息,而不需要在隊列中等待來完成任務。但是,這可能會導致問題,因為在管理模式下運行的東西越多,如果行為不正常,就會有越多的東西導致系統(tǒng)崩潰。

3.2.1 Pros


  • 更直接地訪問程序的硬件
  • 流程之間更容易通信
  • 如果支持您的設備,它應該不需要額外安裝就可以工作
  • 進程反應更快,因為沒有等待處理器時間的隊列


3.2.2 Cons


  • 較大安裝體積
  • 較大內存占用
  • 不太安全,因為所有操作都在管理模式下運行




04

混合的內核


混合內核能夠選擇在用戶模式下運行什么,以及在管理模式下運行什么。通常情況下,設備驅動程序和文件系統(tǒng)I/O將在用戶模式下運行,而IPC和服務器調用將保持在管理器模式下。這是兩全其美,但通常需要硬件制造商做更多的工作,因為所有驅動程序的責任都由他們來承擔。它還可能存在一些與微內核固有的延遲問題。




4.1 Pros


  • 開發(fā)人員可以選擇什么在用戶模式下運行,什么在管理模式下運行
  • 比單片內核更小的安裝占用空間
  • 比其他型號更靈活


4.2 Cons


  • 會遭受與微內核相同的進程延遲
  • 設備驅動程序需要由用戶管理(通常)


05

Linux內核文件在哪里


Ubuntu中的內核文件存儲在/boot文件夾中,稱為vmlinux -version。vmlinuz這個名字來自于unix世界,早在60年代,他們就把內核簡單地稱為“unix”,所以當內核在90年代首次開發(fā)時,Linux就開始把內核稱為“Linux”。


當開發(fā)虛擬內存以便更容易地進行多任務處理時,將“vm”放在文件的前面,以顯示內核支持虛擬內存。有一段時間,Linux內核被稱為vmlinux,但是內核變得太大,無法裝入可用的引導內存,因此壓縮了內核映像,并將末尾的x更改為z,以顯示它是用zlib壓縮的。并不總是使用相同的壓縮,通常用LZMA或BZIP2替換,一些內核簡單地稱為zImage。


版本號將采用A.B.C.格式D在。B可能是2.6,C是您的版本,D表示您的補丁或補丁。




在/boot文件夾中還有其他非常重要的文件,稱為initrd.img-version、system.map-version, config-version。initrd文件用作一個小RAM磁盤,用于提取和執(zhí)行實際的內核文件。這個系統(tǒng)。map文件用于內核完全加載之前的內存管理,配置文件告訴內核在編譯內核映像時要加載哪些選項和模塊。

06

Linux內核體系結構


因為Linux內核是單片的,所以它比其他類型的內核占用空間最大,復雜度也最高。這是一個設計特性,在Linux早期引起了相當多的爭論,并且仍然帶有一些與單內核固有的相同的設計缺陷。



為了解決這些缺陷,Linux內核開發(fā)人員所做的一件事就是使內核模塊可以在運行時加載和卸載,這意味著您可以動態(tài)地添加或刪除內核的特性。這不僅可以向內核添加硬件功能,還可以包括運行服務器進程的模塊,比如低級別虛擬化,但也可以替換整個內核,而不需要在某些情況下重啟計算機。

想象一下,如果您可以升級到Windows服務包,而不需要重新啟動……


07

內核模塊


如果Windows已經安裝了所有可用的驅動程序,而您只需要打開所需的驅動程序怎么辦?這本質上就是內核模塊為Linux所做的。內核模塊,也稱為可加載內核模塊(LKM),對于保持內核在不消耗所有可用內存的情況下與所有硬件一起工作是必不可少的。


模塊通常向基本內核添加設備、文件系統(tǒng)和系統(tǒng)調用等功能。lkm的文件擴展名是.ko,通常存儲在/lib/modules目錄中。由于模塊的特性,您可以通過在啟動時使用menuconfig命令將模塊設置為load或not load,或者通過編輯/boot/config文件,或者使用modprobe命令動態(tài)地加載和卸載模塊,輕松定制內核。


第三方和封閉源碼模塊在一些發(fā)行版中是可用的,比如Ubuntu,默認情況下可能無法安裝,因為這些模塊的源代碼是不可用的。該軟件的開發(fā)人員(即nVidia、ATI等)不提供源代碼,而是構建自己的模塊并編譯所需的.ko文件以便分發(fā)。雖然這些模塊像beer一樣是免費的,但它們不像speech那樣是免費的,因此不包括在一些發(fā)行版中,因為維護人員認為它通過提供非免費軟件“污染”了內核。


內核并不神奇,但對于任何正常運行的計算機來說,它都是必不可少的。Linux內核不同于OS X和Windows,因為它包含內核級別的驅動程序,并使許多東西“開箱即用”。希望您能對軟件和硬件如何協(xié)同工作以及啟動計算機所需的文件有更多的了解。



08

Linux 內核學習經驗總結


開篇


學習內核,每個人都有自己的學習方法,仁者見仁智者見智。以下是我在學習過程中總結出來的東西,對自身來說,我認為比較有效率,拿出來跟大家交流一下。


內核學習,一偏之見;疏漏難免,懇請指正。



為什么寫這篇博客

剛開始學內核的時候,不要執(zhí)著于一個方面,不要專注于一個子系統(tǒng)就一頭扎到實際的代碼行中去,因為這樣的話,牽涉的面會很廣,會碰到很多困難,容易產生挫敗感,一個函數體中(假設剛開始的時候正在學習某個方面的某個具體的功能函數)很可能摻雜著其他各個子系統(tǒng)方面設計理念(多是大量相關的數據結構或者全局變量,用于支撐該子系統(tǒng)的管理工作)下相應的代碼實現,這個時候看到這些東西,紛繁蕪雜,是沒有頭緒而且很不理解的,會產生很多很多的疑問,(這個時候如果對這些疑問糾纏不清,刨根問底,那么事實上就是在學習當前子系統(tǒng)的過程中頻繁的去涉足其他子系統(tǒng),這時候注意力就分散了),而事實上等了解了各個子系統(tǒng)后再回頭看這些東西的話,就簡單多了,而且思路也會比較清晰。所以,要避免 “只見樹木,不見森林”,不要急于深入到底層代碼中去,不要過早研究底層代碼。


我在大二的時候剛開始接觸內核,就犯了這個錯誤,一頭扎到內存管理里頭,去看非常底層的實現代碼,雖然也是建立在內存管理的設計思想的基礎上,但是相對來說,比較孤立,因為此時并沒有學習其它子系統(tǒng),應該說無論是視野還是思想,都比較狹隘,所以代碼中牽涉到的其它子系統(tǒng)的實現我都直接跳過了,這一點還算聰明,當然也是迫不得已的。


我的學習方法

剛開始,我認為主要的問題在于你知道不知道,而不是理解不理解,某個子系統(tǒng)的實現采用了某種策略、方法,而你在學習中需要做的就是知道有這么一回事兒,然后才是理解所描述的策略或者方法。


根據自己的學習經驗,剛開始學習內核的時候,我認為要做的是在自己的腦海中建立起內核的大體框架,理解各個子系統(tǒng)的設計理念和構建思想,這些理念和思想會從宏觀上呈獻給你清晰的脈絡,就像一個去除了枝枝葉葉的大樹的主干,一目了然;當然,肯定還會涉及到具體的實現方法、函數,但是此時接觸到的函數或者方法位于內核實現的較高的層次,是主(要)函數,已經了解到這些函數,針對的是哪些設計思想,實現了什么樣的功能,達成了什么樣的目的,混個臉熟的說法在這兒也是成立的。至于該主函數所調用的其它的輔助性函數就等同于枝枝葉葉了,不必太早就去深究。此時,也就初步建立起了內核子系統(tǒng)框架和代碼實現之間的關聯(lián),關聯(lián)其實很簡單,比如一看到某個函數名字,就想起這個函數是針對哪個子系統(tǒng)的,實現了什么功能。


我認為此時要看的就是LKD3,這本書算是泛泛而談,主要就是從概念,設計,大的實現方法上描述各個子系統(tǒng),而對于具體的相關的函數實現的代碼講解很少涉及(對比于ULK3,此書主要就是關于具體函數代碼的具體實現的深入分析,當然,你也可以看,但是過早看這本書,會感覺很痛苦,很枯燥無味,基本上都是函數的實現),很少,但不是沒有,這就很好,滿足我們當前的需求,還避免我們過早深入到實際的代碼中去。而且本書在一些重要的點上還給出了寫程序時的注意事項,算是指導性建議。主要的子系統(tǒng)包括:內存管理,進程管理和調度,系統(tǒng)調用,中斷和異常,內核同步,時間和定時器管理,虛擬文件系統(tǒng),塊I/O層,設備和模塊。(這里的先后順序其實就是LKD3的目錄的順序)。


我學習的時候是三本書交叉著看的,先看LKD3,專于一個子系統(tǒng),主要就是了解設計的原理和思想,當然也會碰到對一些主要函數的介紹,但大多就是該函數基于前面介紹的思想和原理完成了什么樣的功能,該書并沒有就函數本身的實現進行深入剖析。然后再看ULK3和PLKA上看同樣的子系統(tǒng),但是并不仔細分析底層具體函數的代碼,只是粗略地、不求甚解地看,甚至不看。因為,有些時候,在其中一本書的某個點上,卡殼了,不是很理解了,在另外的書上你可能就碰到對同一個問題的不同角度的描述,說不準哪句話就能讓你豁然開朗,如醍醐灌頂。我經常碰到這種情況。


并不是說學習過程中對一些函數體的實現完全就忽略掉,只要自己想徹底了解其代碼實現,沒有誰會阻止你。我是在反復閱讀過程中慢慢深入的。比如VFS中文件打開需要對路徑進行分析,需要考慮的細節(jié)不少(.././之類的),但是其代碼實現是很好理解的。再比如,CFS調度中根據shedule latency、隊列中進程個數及其nice值(使用的是動態(tài)優(yōu)先級)計算出分配給進程的時間片,沒理由不看的,這個太重要了,而且也很有意思。


ULK3也會有設計原理與思想之類的概括性介紹,基本上都位于某個主題的開篇段落。但是更多的是對支持該原理和思想的主要函數實現的具體分析,同樣在首段,一句話綜述函數的功能,然后對函數的實現以1、2、3,或者a、b、c步驟的形式進行講解。我只是有選擇性的看,有時候對照著用source insight打開的源碼,確認一下代碼大體上確實是按書中所描述的步驟實現的,就當是增加感性認識。由于步驟中摻雜著各種針對不同實現目的安全性、有效性檢查,如果不理解就先跳過。這并不妨礙你對函數體功能實現的整體把握。


PLKA介于LKD3和ULK3之間。我覺得PLKA的作者(看照片,真一德國帥小伙,技術如此了得)肯定看過ULK,無論他的本意還是有意,總之PLKA還是跟ULK有所不同,對函數的仔細講解都做補充說明,去掉函數體中邊邊角角的情況,比如一些特殊情況的處理,有效性檢查等,而不妨礙對整個函數體功能的理解,這些他都有所交代,做了聲明;而且,就像LKD3一樣,在某些點上也給出了指導性編程建議。作者們甚至對同一個主要函數的講解的著重點都不一樣。這樣的話,對我們學習的人而言,有助于加深理解。另外,我認為很重要的一點就是PLKA針對的2.6.24的內核版本,而ULK是2.6.11,LKD3是2.6.34。在某些方面PLKA比較接近現代的實現。其實作者們之所以分別選擇11或者24,都是因為在版本發(fā)行樹中,這兩個版本在某些方面都做了不小的變動,或者說是具有標志性的轉折點(這些信息大多是在書中的引言部分介紹的,具體的細節(jié)我想不起來了)。


Intel V3,針對X86的CPU,本書自然是系統(tǒng)編程的權威。內核部分實現都可以在本書找到其根源。所以,在讀以上三本書某個子系統(tǒng)的時候,不要忘記可以在V3中相應章節(jié)找到一些基礎性支撐信息。


在讀書過程中,會產生相當多的疑問,這一點是確信無疑的。大到搞不明白一個設計思想,小到不理解某行代碼的用途。各個方面,各種疑問,你完全可以把不理解的地方都記錄下來(不過,我并沒有這么做,沒有把疑問全部記下來,只標記了很少一部分我認為很關鍵的幾個問題),專門寫到一張紙上,不對,一個本上,我確信會產生這么多的疑問,不然內核相關的論壇早就可以關閉了。其實,大部分的問題(其中很多問題都是你知道不知道有這么一回事的問題)都可以迎刃而解,只要你肯回頭再看,書讀百遍,其義自現。多看幾遍,前前后后的聯(lián)系明白個七七八八是沒有問題的。我也這么做了,針對某些子系統(tǒng)也看了好幾遍,切身體會。


當你按順序學習這些子系統(tǒng)的時候,前面的章節(jié)很可能會引用后面的章節(jié),就像PLKA的作者說的那樣,完全沒有向后引用是不可能的,他能做的只是盡量減少這種引用而又不損害你對當前問題的理解。不理解,沒關系,跳過就行了。后面的章節(jié)同樣會有向前章節(jié)的引用,不過這個問題就簡單一些了 ?,你可以再回頭去看相應的介紹,當時你不太理解的東西,很可能這個時候就知道了它的設計的目的以及具體的應用。不求甚解只是暫時的。比如說,內核各個子系統(tǒng)之間的交互和引用在代碼中的體現就是實現函數穿插調用,比如你在內存管理章節(jié)學習了的內存分配和釋放的函數,而你是了解內存在先的,在學習驅動或者模塊的時候就會碰到這些函數的調用,這樣也就比較容易接受,不至于太過茫然;再比如,你了解了系統(tǒng)時間和定時器的管理,再回頭看中斷和異常中bottom half的調度實現,你對它的理解就會加深一層。


子系統(tǒng)進行管理工作需要大量的數據結構。子系統(tǒng)之間交互的一種方式就是各個子系統(tǒng)各自的主要數據結構通過指針成員相互引用。學習過程中,參考書上在講解某個子系統(tǒng)的時候會對數據結構中主要成員的用途解釋一下,但肯定不會覆蓋全部(成員比較多的情況,例如task_struct),對其它子系統(tǒng)基于某個功能實現的引用可能解釋了,也可能沒做解釋,還可能說這個變量在何處會做進一步說明。所以,不要糾結于一個不理解的點上,暫且放過,回頭還可以看的。之間的聯(lián)系可以在對各個子系統(tǒng)都有所了解之后再建立起來。其實,我仍然在強調先理解概念和框架的重要性。


等我們完成了建立框架這一步,就可以選擇一個比較感興趣的子系統(tǒng),比如驅動、網絡,或者文件系統(tǒng)之類的。這個時候你再去深入了解底層代碼實現,相較于一開始就鉆研代碼,更容易一些,而且碰到了不解之處,或者忘記了某個方面的實現,此時你完全可以找到相應的子系統(tǒng),因為你知道在哪去找,查漏補缺,不僅完成了對當前函數的鉆研,而且可以回顧、溫習以前的內容,融會貫通的時機就在這里了。


《深入理解linux虛擬內存》(2.4內核版本),LDD3,《深入理解linux網絡技術內幕》,幾乎每一個子系統(tǒng)都需要一本書的容量去講解,所以說,剛開始學習不宜對某個模塊太過深入,等對各個子系統(tǒng)都有所了解了,再有針對性的去學習一個特定的子系統(tǒng)。這時候對其它系統(tǒng)的援引都可以讓我們不再感到茫然、復雜,不知所云。




比如,LDD3中的以下所列章節(jié):構造和運行模塊,并發(fā)和競態(tài),時間、延遲及延緩操作,分配內存,中斷處理等,都屬于驅動開發(fā)的支撐性子系統(tǒng),雖說本書對這些子系統(tǒng)都專門開辟一個章節(jié)進行講解,但是詳細程度怎么能比得上PLKA,ULK3,LKD3這三本書,看完這三本書,你會發(fā)現讀LDD3這些章節(jié)的時候簡直跟喝白開水一樣,太隨意了,因為LDD3的講解比之LKD3更粗略。打好了基礎,PCI、USB、TTY驅動,塊設備驅動,網卡驅動,需要了解和學習的東西就比較有針對性了。這些子系統(tǒng)就屬于通用子系統(tǒng),了解之后,基于這些子系統(tǒng)的子系統(tǒng)的開發(fā)—驅動(需進一步針對硬件特性)和網絡(需進一步理解各種協(xié)議)—相對而言,其學習難度大大降低,學習進度大大加快,學習效率大大提升。說著容易做來難。達到這樣一種效果的前提就是:必須得靜下心來,認真讀書,要看得進去,PLKA,ULK3厚得都跟磚頭塊兒一樣,令人望之生畏,如果沒有興趣,沒有熱情,沒有毅力,無論如何都是不行,因為需要時間,需要很長時間。我并不是說必須打好了基礎才可以進行驅動開發(fā),只是說打好了基礎的情況下進行開發(fā)會更輕松,更有效率,而且自己對內核代碼的駕馭能力會更強大。這只是我個人見解,我自己的學習方式,僅供參考。




語言


PLKA是個德國人用德語寫的,后來翻譯成英文,又從英文翻譯成中文,我在網上書店里沒有找到它的紙質英文版,所以就買了中文版的。ULK3和LKD3都是英文版的。大牛們寫的書,遣詞造句真的是簡潔,易懂,看原版對我們學習計算機編程的程序員來說完全不成問題,最好原汁原味。如果一本書確實翻譯地很好,我們當然可以看中文版的,用母語進行學習,理解速度和學習進度當然是很快的,不作他想。看英文的時候不要腦子里想著把他翻譯成中文,沒必要。




API感想


“比起知道你所用技術的重要性,成為某一個特別領域的專家是不重要的。知道某一個具體API調用一點好處都沒有,當你需要他的時候只要查詢下就好了。”這句話源于我看到的一篇翻譯過來的博客。我想強調的就是,這句話針應用型編程再合適不過,但是內核API就不完全如此。


內核相當復雜,學習起來很不容易,但是當你學習到一定程度,你會發(fā)現,如果自己打算寫內核代碼,到最后要關注的仍然是API接口,只不過這些API絕大部分是跨平臺的,滿足可移植性。內核黑客基本上已經標準化、文檔化了這些接口,你所要做的只是調用而已。當然,在使用的時候,最好對可移植性這一話題在內核中的編碼約定爛熟于心,這樣才會寫出可移植性的代碼。就像應用程序一樣,可以使用開發(fā)商提供的動態(tài)庫API,或者使用開源API。同樣是調用API,不同點在于使用內核API要比使用應用API了解的東西要多出許多。


當你了解了操作系統(tǒng)的實現—這些實現可都是對應用程序的基礎性支撐啊—你再去寫應用程序的時候,應用程序中用到的多線程,定時器,同步鎖機制等等等等,使用共享庫API的時候,聯(lián)系到操作系統(tǒng),從而把對該API的文檔描述同自己所了解到的這些方面在內核中的相應支撐性實現結合起來進行考慮,這會指導你選擇使用哪一個API接口,選出效率最高的實現方式。對系統(tǒng)編程頗有了解的話,對應用編程不無益處,甚至可以說是大有好處。



設計實現的本質,知道還是理解


操作系統(tǒng)是介于底層硬件和應用軟件之間的接口,其各個子系統(tǒng)的實現很大程度上依賴于硬件特性。書上介紹這些子系統(tǒng)的設計和實現的時候,我們讀過了,也就知道了,如果再深入考慮一下,為什么整體架構要按照這種方式組織,為什么局部函數要遵循這樣的步驟處理,知其然,知其所以然,如果你知道了某個功能的實現是因為芯片就是這么設計的,CPU就是這么做的,那么你的疑問也就基本上到此為止了。再深究,就是芯片架構方面的設計與實現,對于程序員來講,無論是系統(tǒng)還是應用程序員,足跡探究到這里,已經解決了很多疑問,因為我們的工作性質偏軟,而這些東西實在是夠硬。


比如,ULK3中講解的中斷和異常的實現,究其根源,那是因為Intel x86系列就是這么設計的,去看看Intel V3手冊中相應章節(jié)介紹,都可以為ULK3中描述的代碼實現方式找到注解。還有時間和定時器管理,同樣可以在Intel V3 ?對APIC的介紹中獲取足夠的信息,操作系統(tǒng)就是依據這些硬件特性來實現軟件方法定義的。


又是那句話,不是理解不理解的問題,而是知道不知道的問題。有時候,知道了,就理解了。在整個學習過程中,知道,理解,知道,理解,知道……,交叉反復。為什么開始和結尾都是知道,而理解只是中間步驟呢?世界上萬事萬物自有其規(guī)律,人類只是發(fā)現而已,實踐是第一位的,實踐就是知道的過程,實踐產生經驗,經驗的總結就是理論,理論源于實踐,理論才需要理解。我們學習內核,深入研究,搞來搞去,又回到了芯片上,芯片是物質的,芯片的功用基于自然界中物質本有的物理和電子特性。追本溯源,此之謂也。



動手寫代碼


紙上得來終覺淺,絕知此事要躬行。只看書是絕對不行的,一定要結合課本給出的編程建議自己敲代碼。剛開始就以模塊形式測試好了,或者自己編譯一個開發(fā)版本的內核。一臺機器的話,使用UML方式調試,內核控制路走到哪一步,單步調試看看程序執(zhí)行過程,比書上的講解更直觀明了。一定要動手實際操作。



參考書

LDD3? ? ? ? ? Linux Device Driver 3rd

LKD3? ? ? ? ? Linux Kernel Development 3rd
ULK3? ? ? ? ? Understanding the Linux Kernel 3rd
PLKA? ? ? ? ? Professional Linux Kernel Architecture
UML? ? ? ? ? ? User Mode Linux
Intel V3? ? ? ?Intel? 64 and IA-32 Architectures Software Developer’s Manual ?Volume 3 (3A, 3B & 3C): System Programming Guide


作者在寫書的時候,都是以自己的理解組織內容,從自己的觀點看待一個主題,關注點跟作者自身有很大的關系。出書的時間有先后,后來人針對同一個主題想要出書而又不落入窠臼,最好有自己的切入方式,從自己的角度講解相關問題,這才值得出這本書,千篇一律是個掉價的行為,書就不值錢了。


盡信書不如無書。
http://lwn.net/Articles/419855/ 此處是一篇關于LKD3的書評,指出了其中的錯誤,當你讀完的時候,不妨去找找,看一下自己在其中所描述的地方有什么特別的印象。
http://lwn.net/Articles/161190/此處是一篇對ULK3的介紹,我認為其中很關鍵的幾句話就可以給本書定位:


Many of the key control paths in the kernel are described, step by step;


一步一步地講述內核控制路徑的實現。


The level of detail sometimes makes it hard to get a sense for the big ?picture, but it does help somebody trying to figure out how a particular function works.


對代碼講解的詳細程度有時候很難讓讀者把握住它的主旨大意,但是確實有助于讀者理解一個特定的函數到底是如何工作的。


Indeed, that is perhaps the key feature which differentiates this book. It is ?very much a “how it works” book, designed to help people understand the ?code.


事實上,這也正是本書與眾不同的地方。更像一個“如何工作”的書,幫助讀者理解代碼實現。


It presents kernel functions and data structures, steps the reader through them, but does not, for example, emphasize the rules for using them. ?UTLK is a study guide, not a programming manual.


本書描述了內核函數和數據結構,引導讀者穿行于其間,但是,并沒有著重強調使用它們的法則。UTLK是一本學習指南,而不是編程手冊。


這幾句話對本書的描述非常到位?;诖?,作為指導性原則,我們就可以很有效率地使用它了。


看一本技術書籍,書中的序言部分絕對是首先應該翻閱的,其次就是目錄。我發(fā)現在閱讀過程中我會頻繁的查看目錄,甚至是喜歡看目錄。



結尾


興趣的力量是無窮的。興趣能帶來激情,如果工作可以和興趣結合到一起,工作起來才會有熱情,那么工作就不只是工作了,更是一種享受。


Linux,我的興趣,我的動力,我的方向,我的未來!




轉自公眾號:人人都是極客

來源網址:(轉載請保留)


blog.chinaunix.net/uid-24669930-id-4039377.html
https://www.linuxrumen.com/rmxx/1406.html

-END-

| 整理文章為傳播相關技術,版權歸原作者所有 |
|?如有侵權,請聯(lián)系刪除 |


往期好文合集


嵌入式牛人 | 這些單片機編程思想超硬核

STM32:從菜鳥到牛人就是如此簡單!

增量式PID是什么?不知道你就落伍了

最 后

若覺得文章不錯,轉發(fā)分享,也是我們繼續(xù)更新的動力。
5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機、等等 在公眾號內回復「更多資源」,即可免費獲取,期待你的關注~

免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉