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