windows 和 linux 可以說是我們比較常見的兩款作業系統。
windows 基本占領了電腦時代的市場,商業上取得了很大成功,但是它並不開源,所以要想接觸原始碼得加入 windows 的開發團隊中。
這兩個作業系統各有千秋,不分伯仲。
作業系統核心的東西就是核心,這次我們就來看看,linux 核心和 windows 核心有什麼區別?
什麼是核心呢?
計算機是由各種外部硬體裝置組成的,比如記憶體、cpu、硬碟等,如果每個應用都要和這些硬體裝置對接通訊協議,那這樣太累了。
所以,這個中間人就由核心來負責,讓核心作為應用連線硬體裝置的橋梁,應用程式只需關心與核心互動,不用關心硬體的細節。
核心核心有哪些能力呢?
現代作業系統,核心一般會提供 4 個基本能力:
核心是怎麼工作的?
核心具有很高的許可權,可以控制 cpu、記憶體、硬碟等硬體,而應用程式具有的許可權很小,因此大多數作業系統,把記憶體分成了兩個區域:
使用者空間的**只能訪問乙個區域性的記憶體空間,而核心空間的**可以訪問所有記憶體空間。
因此,當程式使用使用者空間時,我們常說該程式在使用者態執行,而當程式使核心空間時,程式則在核心態執行。
應用程式如果需要進入核心空間,就需要通過「系統呼叫」,下面來看看系統呼叫的過程:
核心程式執行在核心態,使用者程式執行在使用者態。當應用程式使用系統呼叫時,會產生乙個中斷。發生中斷後, cpu 會中斷當前在執行的使用者程式,轉而跳轉到中斷處理程式,也就是開始執行核心程式。核心處理完後,主動觸發中斷,把 cpu 執行許可權交回給使用者程式,回到使用者態繼續工作。
linux 的開山始祖是來自一位名叫 linus torvalds 的芬蘭小夥子,他在 1991 年用 c 語言寫出了第一版的 linux 作業系統,那年他 22 歲。
linux 核心設計的理念主要有這幾個點:
mutitask
mutitask 的意思是多工,代表著 linux 是乙個多工的作業系統。
多工意味著可以有多個任務同時執行,這裡的「同時」可以是併發或並行:
smpsmp 的意思是對稱多處理,代表著每個 cpu 的地位是相等的,對資源的使用許可權也是相同的,多個 cpu 共享同乙個記憶體,每個 cpu 都可以訪問完整的記憶體和硬體資源。
這個特點決定了 linux 作業系統不會有某個 cpu 單獨服務應用程式或核心程式,而是每個程式都可以被分配到任意乙個 cpu 上被執行。
elfelf 檔案格式
elf 把檔案分成了乙個個分段,每乙個段都有自己的作用。
另外,elf 檔案有兩種索引,program header table 中記錄了「執行時」所需的段,而 section header table 記錄了二進位制檔案中各個「段的首位址」。
那 elf 檔案怎麼生成的呢?
我們編寫的**,首先通過「編譯器」編譯成彙編**,接著通過「彙編器」變成目標**,也就是目標檔案,最後通過「鏈結器」把多個目標檔案以及呼叫的各種函式庫鏈結起來,形成乙個可執行檔案,也就是 elf 檔案。
那 elf 檔案是怎麼被執行的呢?
執行 elf 檔案的時候,會通過「裝載器」把 elf 檔案裝載到記憶體裡,cpu 讀取記憶體中的指令和資料,於是程式就被執行起來了。
monolithic kernel
monolithic kernel 的意思是單核心,linux 核心架構就是單核心,意味著 linux 的核心是乙個完整的可執行程式,且擁有最高的許可權。
單核心的特徵是系統核心的所有模組,比如程序排程、記憶體管理、檔案系統、裝置驅動等,都執行在核心態。
不過,linux 也實現了動態載入核心模組的功能,例如大部分裝置驅動是以可載入模組的形式存在的,與核心其他模組解耦,讓驅動開發和驅動載入更為方便、靈活。
分別為單核心、微核心、混合核心的作業系統結構
與單核心相反的是微核心,微核心架構的核心只保留最基本的能力,比如程序排程、虛擬機器記憶體、中斷等,把一些應用放到了使用者空間,比如驅動程式、檔案系統等。這樣服務與服務之間是隔離的,單個服務出現故障或者完全攻擊,也不會導致整個作業系統掛掉,提高了作業系統的穩定性和可靠性。
微核心的核心功能少,可移植性高,相比單核心有一點不好的地方在於,由於驅動程式不在核心中,而且驅動程式一般會頻繁呼叫底層能力的,於是驅動和硬體裝置互動就需要頻繁切換到核心態,這樣會帶來效能損耗。華為的鴻蒙作業系統的核心架構就是微核心。
還有一種核心叫混合型別核心,它的架構有點像微核心,核心裡面會有乙個最小版本的核心,然後其他模組會在這個基礎上搭建,然後實現的時候會跟單核心類似,也就是把整個核心做成乙個完整的程式,大部分服務都在核心中,這就像是單核心的方式包裹著乙個微核心。
當今 windows 7、windows 10 使用的核心叫 windows nt,nt 全稱叫 new technology。
下圖是 windows nt 的結構:
windows nt 的結構
windows 和 linux 一樣,同樣支援 mutitask 和 smp,但不同的是,windows 的核心設計是混合型核心,在上圖你可以看到核心中有乙個 microkernel 模組,這個就是最小版本的核心,而整個核心實現是乙個完整的程式,含有非常多模組。
windows 的可執行檔案的格式與 linux 也不同,所以這兩個系統的可執行檔案是不可以在對方上執行的。
windows 的可執行檔案格式叫 pe,稱為可移植執行檔案,副檔名通常是.exe
、.dll
、.sys
等。
pe 的結構你可以從下圖中看到,它與 elf 結構有一點相似。
pe 檔案結構
對於核心的架構一般有這三種型別:
linux 的核心設計是採用了單核心,windows 的核心設計則是採用了混合核心。
這兩個作業系統的可執行檔案格式也不一樣, linux 可執行檔案格式叫作 elf,windows 可執行檔案格式叫作 pe。
巨人的肩膀
windows編譯linux核心
清華映象 安裝ncurses devel bison make config 遍歷選擇編譯核心功能 make allyesconfig 啟用核心全部功能 make allnoconfig 核心功能選項全部為否 make menuconfig 開啟文字選單選項,對視窗有限制,盡量調大視窗,否則會出錯 ...
windows核心原理與實現
本文章是作者本人在學習 windows原理與實現 一書時的一些總結和筆記 2.1處理器模式 intelx86處理器 0 最高端特權,cpu處在核心模式,可以訪問當前程序的位址空間和系統空間 3 最低特權,處在使用者模式,只能訪問當前程序的位址空間。2.2記憶體管理 共享的系統位址空間和私有的程序位址...
Windows核心原理與實現之核心載入
在intel x86系統上,windows作業系統獲得控制首先從硬碟的主引導記錄 mbr 開始,windows setup程式在安裝windows時填充mbr 其他的磁碟管理器也可能填充mbr mbr包含 和資料,其 稱為引導 在系統引導時首先獲得控制 mbr中的資料時一張分割槽表,制定了每個分割槽...