微吼云上線多路互動直播服務 加速多場景互動直播落地
616
2025-03-31
文章目錄
什么是操作系統
操作系統結構
Linux 內核 vs Windows 內核
內核
什么是內核呢?
內核有哪些能力呢?
內核是怎么工作的?
計算機啟動過程
系統調用
UNIX 系統調用
Windows系統調用
什么是操作系統
不知道你有沒有產生過這些疑問:
桌面上的圖標到底是啥?憑啥我在鼠標上一雙擊,就會出來一個美麗的畫面?這都是從哪里跑出來的?
憑什么我在鍵盤上噼里啪啦地敲,某個位置就會顯示我想要的那些字符?
電腦怎么知道我鼠標點擊的是這個地方,又是怎么知道我要輸入的是這個地方?
我在鍵盤上點“a”,是誰在顯示器上畫出“a”這個圖像呢?
為什么我一回車,這些字符就發到遙遠的另外一臺機器上去了?
現代計算機系統由一個或多個處理器、主存、打印機、鍵盤、鼠標、顯示器、網絡接口以及各種輸入/輸出設備構成。
然而,程序員不會直接和這些硬件打交道,而且每位程序員不可能會掌握所有計算機系統的細節,這樣我們就不用再編寫代碼了,所以在硬件的基礎之上,計算機安裝了一層軟件,這層軟件能夠通過響應用戶輸入的指令達到控制硬件的效果,從而滿足用戶需求,這種軟件稱之為 操作系統,它的任務就是為用戶程序提供一個更好、更簡單、更清晰的計算機模型。
我們一般常見的操作系統主要有Windows、Linux、FreeBSD 或 OS X,這種帶有圖形界面的操作系統被稱為 圖形用戶界面(Graphical User Interface, GUI),而基于文本、命令行的通常稱為 Shell。
這是一個操作系統的簡化圖,最下面的是硬件,硬件包括芯片、電路板、磁盤、鍵盤、顯示器等我們上面提到的設備,在硬件之上是軟件。大部分計算機有兩種運行模式:內核態和 用戶態,軟件中最基礎的部分是操作系統,它運行在 內核態中,內核態也稱為 管態和 核心態,它們都是操作系統的運行狀態,只不過是不同的叫法而已。操作系統具有硬件的訪問權,可以執行機器能夠運行的任何指令。軟件的其余部分運行在 用戶態下。
操作系統結構
Linux 內核 vs Windows 內核
Windows 和 Linux 可以說是我們比較常見的兩款操作系統的。
Windows 基本占領了電腦時代的市場,商業上取得了很大成功,但是它并不開源,所以要想接觸源碼得加入 Windows 的開發團隊中。
對于服務器使用的操作系統基本上都是 Linux,而且內核源碼也是開源的,任何人都可以下載,并增加自己的改動或功能,Linux 最大的魅力在于,全世界有非常多的技術大佬為它貢獻代碼。
這兩個操作系統各有千秋,不分伯仲。
操作系統核心的東西就是內核,這次我們就來看看,Linux 內核和 Windows 內核有什么區別?
內核
什么是內核呢?
計算機是由各種外部硬件設備組成的,比如內存、cpu、硬盤等,如果每個應用都要和這些硬件設備對接通信協議,那這樣太累了。
所以,這個中間人就由內核來負責,讓內核作為應用連接硬件設備的橋梁,應用程序只需關心與內核交互,不用關心硬件的細節。
內核有哪些能力呢?
現代操作系統,內核一般會提供 4 個基本能力:
管理進程、線程,決定哪個進程、線程使用 CPU,也就是進程調度的能力;
管理內存,決定內存的分配和回收,也就是內存管理的能力;
管理硬件設備,為進程與硬件設備之間提供通信能力,也就是硬件通信能力;
提供系統調用,如果應用程序要運行更高權限運行的服務,那么就需要有系統調用,它是用戶程序與操作系統之間的接口。
內核是怎么工作的?
內核具有很高的權限,可以控制 cpu、內存、硬盤等硬件,而應用程序具有的權限很小,因此大多數操作系統,把內存分成了兩個區域:
內核空間,這個內存空間只有內核程序可以訪問;
用戶空間,這個內存空間專門給應用程序使用;
用戶空間的代碼只能訪問一個局部的內存空間,而內核空間的代碼可以訪問所有內存空間。
因此,當程序使用用戶空間時,我們常說該程序在用戶態執行,而當程序使內核空間時,程序則在內核態執行。
應用程序如果需要進入內核空間,就需要通過「系統調用」,下面來看看系統調用的過程:
內核程序執行在內核態,用戶程序執行在用戶態。當應用程序使用系統調用時,會產生一個中斷。發生中斷后, CPU 會中斷當前在執行的用戶程序,轉而跳轉到中斷處理程序,也就是開始執行內核程序。內核處理完后,主動觸發中斷,把 CPU 執行權限交回給用戶程序,回到用戶態繼續工作。
Linux 內核由如下幾部分組成:內存管理、進程管理、設備驅動程序、文件系統和網絡管理等.如圖:
當今 Windows 7、Windows 10 使?的內核叫 Windows NT,NT 全稱叫 New Technology。
下圖是 Windows NT 的結構圖?:
計算機啟動過程
當你輕輕按下計算機的啟動按鈕時,你的主板就加上電了。
主板一般為矩形電路板,上面安裝了組成計算機的主要電路系統,一般有 BIOS 芯片、I/O 控制芯片、鍵盤和面板控制開關接口、指示燈插接件、擴充插槽、主板及插卡的直流電源供電接插件等元件。
在主板上,有一個東西叫ROM(Read Only Memory,只讀存儲器)。這和咱們平常說的內存RAM(Random Access Memory,隨機存取存儲器)不同。
咱們平時買的內存條是可讀可寫的,這樣才能保存計算結果。而 ROM 是只讀的,上面早就固化了一些初始化的程序,也就是BIOS(Basic Input and Output System,基本輸入輸出系統)。
如果你自己安裝過操作系統,剛啟動的時候,按某個組合鍵,顯示器會彈出一個藍色的界面。能夠調整啟動順序的系統,就是我說的 BIOS,然后我們就可以先執行它。
然后操作系統會詢問 BIOS 獲取配置信息。對于每個設備來說,會檢查是否有設備驅動程序。如果沒有,則會向用戶詢問是否需要插入 CD-ROM驅動(由設備制造商提供)或者從 Internet 上下載。一旦有了設備驅動程序,操作系統會把它們加載到內核中,然后初始化表,創建所需的后臺進程,并啟動登錄程序或GUI。
系統調用
你會發現,一個項目要想順暢進行,需要用到公司的各種資源,比如說蓋個公章、開個證明、申請個會議室、打印個材料等等。這里有個兩難的權衡,一方面,資源畢竟是有限的,甚至是涉及機密的,不能由項目組濫取濫用;另一方面,就是效率,咱是一個私營企業,保證項目申請資源的時候只跑一次,這樣才能比較高效。
為了平衡這一點,一方面涉及核心權限的資源,還是應該被公司嚴格把控,審批了才能用;另外一方面,為了提高效率,最好有個統一的辦事大廳,明文列出提供哪些服務,誰需要可以來申請,然后就會有回應。
在操作系統中,也有同樣的問題,例如多個進程都要往打印機上打印文件,如果隨便亂打印進程,就會出現同樣一張紙,第一行是 A 進程輸出的文字,第二行是 B 進程輸出的文字,全亂套了。所以,打印機的直接操作是放在操作系統內核里面的,進程不能隨便操作。但是操作系統也提供一個辦事大廳,也就是系統調用(System Call)。
系統調用也能列出來提供哪些接口可以調用,進程有需要的時候就可以去調用。這其中,立項是辦事大廳提供的關鍵服務之一。同樣,任何一個程序要想運行起來,就需要調用系統調用,創建進程。
如果一個進程在用戶態下運行用戶程序,例如從文件中讀取數據。那么如果想要把控制權交給操作系統控制,那么必須執行一個異常指令或者系統調用指令。操作系統緊接著需要參數檢查找出所需要的調用進程。
然后執行系統調用,把控制權移交給系統調用下面的指令。大致來說,系統調用就像是執行了一個特殊的過程調用,但是只有系統調用能夠進入內核態而過程調用則不能進入內核態。
UNIX 系統調用
為了能夠了解具體的調用過程,下面我們以 read 方法為例來看一下調用過程。
下面,我們會列出一些常用的 POSIX 系統調用,POSIX 系統調用大概有 100 多個,它們之中最重要的一些調用見下表
進程管理
文件管理
目錄和文件系統管理
其他
上面的系統調用參數中有一些公共部分,例如 pid 系統進程 id,fd 是文件描述符,n 是字節數,position 是在文件中的偏移量、seconds 是流逝時間。
Windows系統調用
UNIX 程序由執行某些操作或執行其他操作的代碼組成,進行系統調用以執行某些服務。Windows 系統則不同,Windows 應用程序通常是由事件驅動的。主程序會等待一些事件發生,然后調用程序去處理。最簡單的事件處理是鍵盤敲擊和鼠標滑過,或者是鼠標點擊,或者是插入 USB 驅動,然后操作系統調用處理器去處理事件,更新屏幕和更新程序內部狀態。這是與 UNIX 不同的設計風格。
當然,Windows 也有系統調用。在 UNIX 中,系統調用(比如 read)和系統調用所使用的調用庫(例如 read)幾乎是一對一的關系。而在 Windows 中,情況則大不相同。首先,函數庫的調用和實際的系統調用幾乎是不對應的。微軟定義了一系列過程,稱為Win32應用編程接口(Application Programming Interface),程序員通過這套標準的接口來實現系統調用。這個接口支持從 Windows 95 版本以來所有的 Windows 版本。
Win32 API 有大量的調用,用來管理視窗、幾何圖形、文本、字體、滾動條、對話框、菜單以及 GUI 的其他功能。為了使圖形子系統在內核態下運行,需要系統調用,否則就只有函數庫調用。
我們把關注點放在和 Win32 系統調用中來,我們可以簡單看一下 Win32 API 中的系統調用和 UNIX 中有什么不同(并不是所有的系統調用)
Linux Windows 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。