操作系统思维导图(一)
操作系統(tǒng)總思維導(dǎo)圖
操作系統(tǒng)概述
現(xiàn)在計(jì)算機(jī)系統(tǒng)由一個(gè)或多個(gè)處理器、主存、打印機(jī)、鍵盤、鼠標(biāo)、顯示器、網(wǎng)絡(luò)接口以及各種輸入/ 輸出設(shè)備構(gòu)成 。
然而,程序員不會(huì)直接和這些硬件打交道,而且每位程序員不可能掌握所有計(jì)算系統(tǒng)的細(xì)節(jié),這樣我們就不用編寫代碼了 所以在硬件的基礎(chǔ)上,計(jì)算機(jī)暗轉(zhuǎn)一層軟件,這層軟禁啊能夠通過響應(yīng)用戶的輸入的指令達(dá)到控制硬件的效果 , 從 而滿足用戶需求,這種軟件稱之為操作系統(tǒng), 它的任務(wù)就是用戶程序提供一個(gè) 更好,更簡(jiǎn)單、 更清晰的計(jì)算機(jī)模型。
常見的操作系統(tǒng)主要有Windows、Linux、 FreeBSD 或者 OSX , 這種帶有圖形界面的操作系統(tǒng)稱為 圖形用戶界面(GUI). 而基于文本、命令行的通常稱為Shell 。
操作系統(tǒng)的構(gòu)建圖:
操作系統(tǒng)所處的位置:
這是一個(gè)操作系統(tǒng)的簡(jiǎn)化圖, 最下面的是硬件,硬件包含芯片、電路板、磁盤、鍵盤、顯示器等我們上面提到的設(shè)備, 在硬件之上是軟件。大部分計(jì)算機(jī)有兩種運(yùn)行模型: 內(nèi)核態(tài) 和 用戶態(tài), 軟件中最基礎(chǔ)的部分是 操作系統(tǒng), 它運(yùn)行在內(nèi)核態(tài)中, 內(nèi)核態(tài)也稱為 管態(tài) 和 核心態(tài), 他們都是操作系統(tǒng)的運(yùn)行狀態(tài),只不過是不同的叫法而已。 操作系統(tǒng)具有硬件的訪問權(quán)限 ,可以執(zhí)行機(jī)器能夠運(yùn)行的任何指令。 軟件的其余部分 運(yùn)行在 用戶態(tài) 下。
用戶接口程序(Shell 或者 CUI) 處于用戶態(tài)中,并且它們位于用戶態(tài)的最低層,允許用戶運(yùn)行其他程序,例如Web 瀏覽器、 電子郵件閱讀器、音樂播放器等。 而且,越靠近用戶態(tài)得到應(yīng)用程序 越容易 編寫, 如果你不喜歡某個(gè)電子郵件閱讀器 你就可以重新寫一個(gè)或者換一個(gè) ,但你不能自行寫一個(gè)操作i系統(tǒng)或者是中斷處理程序。 這個(gè)程序由硬件保護(hù),防止外部對(duì)其進(jìn)行修改。
計(jì)算機(jī)硬件簡(jiǎn)介
操作系統(tǒng)與 運(yùn)行操作系統(tǒng)的內(nèi)核關(guān)系密切。 操作系統(tǒng)擴(kuò)展了計(jì)算機(jī)指令集并管理計(jì)算機(jī)的資源。 操作系統(tǒng)因此必須足夠了解硬件的運(yùn)行, 這里我們先簡(jiǎn)要介紹一下現(xiàn)代計(jì)算機(jī)中的計(jì)算機(jī)硬件。
CPU
CPU 是計(jì)算機(jī)的大腦, 它主要和內(nèi)存進(jìn)行交互, 從內(nèi)存中提指令并執(zhí)行它**。一個(gè)CPU的執(zhí)行周期是從CPU 中提取第一條指令,解碼并解決它的類型和操作數(shù), 執(zhí)行,然后再提取、解碼執(zhí)行后續(xù)的指令**。
重復(fù)該循環(huán)直到程序運(yùn)行完畢。
每個(gè)CPU都有一組可以執(zhí)行的特定指令集。因此,X86 的CPU 不能執(zhí)行ARM 的程序并且ARM的CPU 也不能執(zhí)行X86 的程序。由于訪問內(nèi)存獲取或數(shù)據(jù)要比執(zhí)行指令花費(fèi)的時(shí)間長(zhǎng), 因此所有的CPU 內(nèi)部都會(huì)包含一些寄存器 來保存關(guān)鍵變量和臨時(shí)結(jié)果。 因此,在指令集合中通常會(huì)有一些指令用于把關(guān)鍵字從內(nèi)存中加載到寄存器中, 以及把關(guān)鍵字從寄存器存入到內(nèi)存中。還有一些其他的指令會(huì)把來自寄存器和內(nèi)存的操作數(shù)進(jìn)行組合, 例如add 操作就會(huì)把兩個(gè)操作數(shù)相加并把結(jié)果內(nèi)存中。
除了用于保存變量和臨時(shí)結(jié)果的通用寄存器外, 大多數(shù)計(jì)算機(jī)還有幾個(gè)特殊的寄存器,這些寄存器對(duì)于程序員可見的。 其中之一就是 程序計(jì)數(shù)器(Program cunnter), 程序計(jì)數(shù)器會(huì)指示下一條需要從內(nèi)存 提取指令的地址。提取指令后,程序計(jì)數(shù)器將更新下一條 需要 提取的地址 。
另一個(gè)寄存器是 堆棧指針(stack pointer), 它 指向內(nèi)存中當(dāng)前棧的頂端。棧堆指針會(huì)包含輸入過程中的有關(guān)參數(shù), 局部變量以及沒有保存在寄存器中的臨時(shí)變量。
還有一個(gè)寄存器是PSW(program Status Word) 程序狀態(tài)字寄存器, 這個(gè)寄存器是操作系統(tǒng)維護(hù)的 8 個(gè)字節(jié) (64)位long 類新房數(shù)據(jù)集合。 它會(huì)跟蹤當(dāng)前系統(tǒng)的狀態(tài)。 除非發(fā)生系統(tǒng)結(jié)束, 否則我們可以忽略PSW。用戶程序通常可以讀取整個(gè)PSW, 但通常只能寫入某些字段。PSW 在系統(tǒng)調(diào)用和I/O 中起著重要的作用。
操作系統(tǒng)必須了解所有的寄存器。 **在時(shí)間多路復(fù)用(time multiplexing) 的CPU 中,操作系統(tǒng)往往停止運(yùn)行一個(gè)程序轉(zhuǎn)而運(yùn)行另外一個(gè)。**每次當(dāng)操作系統(tǒng)停止運(yùn)行一個(gè)程序時(shí), 操作系統(tǒng)會(huì)保存所有的寄存器的值, 以便于后續(xù)重新運(yùn)行該程序。
為了提高性能, CPU 設(shè)計(jì)人員早就放棄了同時(shí)去讀取、 解碼和執(zhí)行一條簡(jiǎn)單的指令。 許多現(xiàn)代的CPU 都同時(shí)讀取多條指令的機(jī)制。 例如, 一個(gè)CPU 可能會(huì)有單獨(dú)訪問,解碼 和 執(zhí)行單元, 所以,當(dāng)CPU 執(zhí)行第N 條指令時(shí),還可以對(duì)N +1 條指令解碼, 還可以讀取N+ 2 條指令, 像這樣的組織形式 被稱為 流水線(pipeline )。
比流水線更先進(jìn)的設(shè)計(jì)是 超標(biāo)量(superscalar) CPU 下面是超標(biāo)量CPU 的 設(shè)計(jì)
從上面這個(gè)設(shè)計(jì)中, 存在多個(gè)執(zhí)行單元,例如, 一個(gè)用來機(jī)型整數(shù)運(yùn)算、一個(gè)用來浮點(diǎn)數(shù)運(yùn)算、一個(gè)用來布爾值運(yùn)算。 兩個(gè)或者更多的指令被一次性取出、 解碼 并放入緩存區(qū)中,直至它們執(zhí)行完畢。只要一個(gè)執(zhí)行單元空閑,就會(huì)去檢查緩沖區(qū)是否可以執(zhí)行的命令. 如果有 , 就把指令從緩存區(qū)中取出并執(zhí)行。 這種設(shè)計(jì)的含義是應(yīng)用程序通常是無(wú)序執(zhí)行的。在大多數(shù)情況下,硬件負(fù)責(zé)保證這種運(yùn)算的結(jié)果與順序執(zhí)行指令時(shí)的結(jié)果相同。
除了用在嵌入式系統(tǒng)中非常簡(jiǎn)單的CPU 之外 , 多數(shù)CPU 都有兩種模式 , 即前面已經(jīng)提到的內(nèi)核態(tài) 和 用戶態(tài)。 通常情況下 ,PSW 寄存器 中一個(gè)二進(jìn)制位會(huì)控制當(dāng)前狀態(tài)是內(nèi)核態(tài)還是用戶態(tài)。 當(dāng)運(yùn)行在內(nèi)核態(tài)時(shí),**CPU 能夠執(zhí)行任何指令集合中的指令并且能夠使用硬件的功能。**在臺(tái)式機(jī)和服務(wù)器上,操作系統(tǒng)通常以內(nèi)核模式運(yùn)行, 從而可以訪問完整的硬件。在大多數(shù)嵌入式中, 一部分運(yùn)行在內(nèi)核態(tài)下, 剩下的一部分運(yùn)行在用戶態(tài)下。
用戶應(yīng)用程序通常運(yùn)行在用戶態(tài)下, 在用戶態(tài)下,CPU 只能執(zhí)行指令集中的一部分并且只能訪問硬件的一部分功能。 一般情況下是,在用戶態(tài)下, 有關(guān)I/O 和 內(nèi)存保護(hù)的所有指令是禁止執(zhí)行的。
當(dāng)然, 設(shè)置PSW 模式的二進(jìn)制位為內(nèi)核態(tài)也是禁止的。
為了獲取操作系統(tǒng)的服務(wù), 用戶程序必須使用 系統(tǒng) 調(diào)用(system call) ,系統(tǒng)調(diào)用會(huì)轉(zhuǎn)換為內(nèi)核態(tài)并調(diào)用操作系如。 TRAP 指令用于把用戶態(tài)切換為內(nèi)核態(tài)并啟用操作系統(tǒng)。 當(dāng)有關(guān)工作完成之后, 在系統(tǒng)調(diào)用后面的指令會(huì)把控制權(quán)交給用戶程序。我們會(huì)在后面探討操作系統(tǒng)的調(diào)用細(xì)節(jié)。
需要注意的是操作系統(tǒng)在進(jìn)行系統(tǒng)調(diào)用時(shí)會(huì)存在陷阱。大部分的陷阱會(huì)導(dǎo)致硬件發(fā)出警告,比如說試圖被零除 或 浮點(diǎn)下溢你。 在所有的情況下,操作系統(tǒng)都能得到控制權(quán)并決定如何處理異常情況。 有時(shí) 由于出錯(cuò)的原因 ,程序不得不停止。
多線程和多核芯片
Intel Pentinum 4 也就是奔騰處理器引入 了被稱為 多線程(multithreading) 或 超線程 (hyperthreading, Inter 公司的命名) 的 特性,X86 處理器核其他的一些CPU 芯片就是這樣做的。
包括 SSPARC 、Power5、Inter Xeon 和 Inter Core 系列。 近似地說, 多線程允許CPU 保持兩個(gè)不同的線程狀態(tài)并且在 納秒級(jí)(nanosecond) 的時(shí)間完成切換。 線程是一種輕量級(jí)的進(jìn)程, 我們會(huì)在后面說到。 例如, 如果一個(gè)進(jìn)程要從內(nèi)存中讀取指令(這通常會(huì)經(jīng)歷幾個(gè)時(shí)鐘周期)、多線程CPU 則可以切換至另一個(gè)線程. 多線程不會(huì)提供真正的并行處理。在一個(gè)時(shí)刻只有一個(gè)進(jìn)程在運(yùn)行 。
對(duì)于操作系統(tǒng)來講,多線程是有意義的,因此每個(gè)線程對(duì)操作系統(tǒng)來說都像是一個(gè)單個(gè)的CPU。 比如一個(gè)有兩個(gè)CPU的操作系統(tǒng),并且每個(gè)CPU 運(yùn)行兩個(gè)線程,那么這對(duì)于操作系統(tǒng)來說就可能是4 個(gè)CPU。
除了多線程之外,現(xiàn)在許多CPU 芯片上都具有四個(gè)、八個(gè)或者更多完成的處理器或內(nèi)核。 多核芯片在其上有效地承載了四個(gè)微型芯片,每個(gè)微型芯片都有自己的獨(dú)立CPU。
帶有共享L2 緩存的四核芯片
帶有分離L2 緩存的4核芯片
如果要說在絕對(duì)核心數(shù)量方面,沒有能贏過現(xiàn)在的GPU (Graphics Processing Unit),GPU 是指成千上萬(wàn)個(gè)微核組成的處理器。 它們擅長(zhǎng)處理大量并行的簡(jiǎn)答計(jì)算。
總結(jié)
以上是生活随笔為你收集整理的操作系统思维导图(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选择的串口 _ 不存在或开发板没有连接_
- 下一篇: java信息管理系统总结_java实现科