導航:首頁 > 操作系統 > linuxkernel分析

linuxkernel分析

發布時間:2024-09-23 21:58:55

A. 什麼是linux kernel有什麼作用

Linux內核(英語:Linux kernel)是一種開源的類Unix操作系統宏內核。

工作於平板電腦、智能手機及智能手錶的Android操作系統同樣通過Linux內核提供的服務完成自身功能。

一個計算機系統是一個硬體和軟體的共生體,它們互相依賴,不可分割。計算機的硬體,含有外圍設備、處理器、內存、硬碟和其他的電子設備組成計算機的發動機。但是沒有軟體來操作和控制它,自身是不能工作的。

完成這個控制工作的軟體就稱為操作系統,在Linux的術語中被稱為「內核」,也可以稱為「核心」。Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網路通信,以及系統的初始化(引導)、系統調用等。

整個Linux操作系統家族基於該內核部署在傳統計算機平台(如個人計算機和伺服器,以Linux發行版的形式)和各種嵌入式平台,如路由器、無線接入點、專用小交換機、機頂盒、FTA接收器、智能電視、數字視頻錄像機、網路附加存儲(NAS)等。

工作於平板電腦、智能手機及智能手錶的Android操作系統同樣通過Linux內核提供的服務完成自身功能。盡管於桌面電腦的佔用率較低,基於Linux的操作系統統治了幾乎從移動設備到主機的其他全部領域。截至2017年11月,世界前500台最強的超級計算機全部使用Linux。

(1)linuxkernel分析擴展閱讀:

編程語言

Linux是用C語言中的GCC版(這種C語言有對標准C進行擴展)寫的,還有幾個用匯編語言(用的是GCC的"AT&T風格")寫的目標架構短段。因為要支持擴展的C語言,GCC在很長的時間里是唯一一個能正確編譯Linux的編譯器。

有許多其他的語言用在一些方面上,主要集中在內核構建過程中(這里指從源代碼創建可引導鏡像)。包括Perl、Python和多種腳本語言。有一些驅動可能是用C++、Fortran或其他語言寫的,但是這樣是強烈不建議的。

編譯器兼容性

GCC是Linux內核源代碼的預設編譯器。在2004年,Intel主張通過修改內核,以便Intel C++編譯器能正確編譯內核。在2009年,有通過修改內核2.6.22版而成功編譯的報告(並帶來平均8-9%性能增長)。

自從2010年,已經開始進行使用Clang建造Linux內核的努力,Clang是一個可作為替代的C語言編譯器;截止2014年4月12日,官方內核幾乎可以完全用Clang編譯。致力於這個目標的計劃叫做「LLVMLinux」,得名於Clang所基於的LLVM編譯器下部構造。

LLVMLinux不意圖復制Linux內核或LLVM,因此它是由最終提交給上游計劃的補丁構成的一個元計劃。使Linux內核可以用Clang編譯最大的好處是比GCC有更快的編譯速度,內核開發者可以得益於由此而來的更快的工作流程

B. 分析linux內核崩潰信息

分析kernel比較關鍵的就是看三點:
1) 內核會給出一個崩潰原因的猜測,這里是,CPU 0 Unable to handle kernel paging request at virtual address 00000000
2) 看pc指針的值,這里是epc == 00000000
3) 看調用棧Call Trace:[ //可惜後面沒給出來
通常是根據指針加上偏移值跟反匯編代碼對照,找到出問題的指令。
這個panic的原因比較明顯,應該是引用了空指針,試圖執行0x00000000出的代碼。

C. Linux Kernel是什麼

Linux kernel 譯為linux 內核,其基礎為linux平台,linux為C語言編寫的內核,基於此內核又衍生出了具體的Red hat linux 、open suse linux等具體的操作系統,一套基於Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux。

對於linux kernel,先看它的目錄結構,這里只挑幾個重要的說明。
arch 包括所有和體系結構相關的核心代碼。從裡面我們能看到arm、alpha、i386、mips、ia64這些文件夾,每種處理器架構都有不一樣的硬體模塊,這里就是要針對不同的架構進行不同的初始化。
init包含內核的初始化代碼(不是系統的引導代碼),其中有一個main.c文件,用於執行內核所有的初始化工作(包括初始化內存、初始化所有硬體、創建第一個任務task0,設置中斷允許標志位),然後移到用戶模式調用fork()函數創建新進程,並在控制台運行shell。
kernel 包含內核管理的核心代碼,瞅這名就知道,這貨是個重量級目錄,所有的處理任務的程序,包括fork、exit、調度程序(sched.c)以及一些系統調用(sys.c)、信號處理(signal.c)、時間函數(time.c),還有中斷異常處理、電源管理等等一系列調用關系錯綜復雜的函數。
mm 包含所有的內存管理代碼。其中包括實現進程的邏輯地址到實際物理地址的映射,實現分頁、分段機制,實現內存頁面異常中斷處理程序等。
drivers包含系統中所有的設備驅動程序,比如什麼cdrom啊bluetooth啊pci、i2c這些。
ipc 包含核心進程間的通信代碼。
fs 存放Linux支持的文件系統代碼,裡面有ext2、ext3、ext4、fat、ntfs等等一堆目錄。
net 內核的網路部分代碼,其每個子目錄對應於網路的一個方面,比如ieee80211、ipv4、ipv6這些目錄。
lib 包含核心的庫代碼,什麼strcpy、sprintf、sort這些函數都在裡面。更多Linux知識可參考《Linux就該這么學》。

閱讀全文

與linuxkernel分析相關的資料

熱點內容
什麼app可以教你化妝 瀏覽:545
程序員加班996怎麼過 瀏覽:827
有個什麼tv美女直播app 瀏覽:860
編譯gcc比較全的參數 瀏覽:204
stvd取消編譯器優化 瀏覽:423
pdf存儲格式 瀏覽:588
加密軟體提取時沒有這個鍵怎麼辦 瀏覽:913
可以用命令行做什麼好玩的東西 瀏覽:134
榮耀30s帶方丹編譯器嗎 瀏覽:55
黑甲蟲加密軟體加密後文件不見了 瀏覽:277
惠州程序員名單 瀏覽:180
java可移植性 瀏覽:743
加密卡寫卡工具 瀏覽:396
德善緣app是干什麼的 瀏覽:821
中山雲存儲伺服器 瀏覽:689
google蜂鳥演算法 瀏覽:952
為什麼程序員這么受人詬病 瀏覽:104
linuxgtk編程 瀏覽:255
迪拜用什麼app打車 瀏覽:634
java字元串不轉義 瀏覽:310