操作系統初識

馮諾依曼體系結構

描述了一臺計算機是如何構成的(又稱爲普林斯頓體系結構)

(99% 的計算機都是馮諾依曼體系結構的,硬件的特點會對軟件開發造成直接的影響)

 

內存

過去幾十年,CPU的發展速度十分迅猛

“摩爾定律”:18個月,芯片集成程度提高一倍,運算能力提高一倍,成本降低一半。

但是,現在這個定律失效了,因爲 CPU 集成程度更高,就需要讓單個原件儘量小,現在最厲害的工藝 7nm 級別,這樣的空間尺度上,經典物理已經接近失效,主要靠量子力學,現在解決這個問題的辦法是,人海戰術——一個  CPU 沒辦法再提高速度,那麼就只能多搞幾個 CPU 來解決,也就是現在的多核

GPU 是一種特殊的 CPU ,專門針對一些特定場景進行優化計算(矩陣等)

 

Java中寫得多代碼,主要都是在內存中,new 出來的對象就是在內存上申請空間,後面介紹的 IO流,就知道了如何讓程序和內存打交道

內存和外存的對比

  1. 內存的存儲空間比較少,外存的存儲空間比較大
  2. 內存的訪問速度較快(ns級別),外存的訪問速度比較慢(μs),大概查了三四個數量級
  3. 內存的成本比較高,外存的額成本比較低
  4. 內存如果斷電,數據就丟失了,外存如果斷電了,數據不丟失(持久化存儲)

 

操作系統

是一個搞管理的軟件。一方面管理計算機的硬件設備,另一方面管理計算機的軟件資源。

一個完整的操作系統 = 內核 + 配置的應用程序

 

OS定位

在操作系統中的定位是:一款純正的搞管理的軟件

 

例如:System.out.println("hello world!");

代碼真正執行的時候,println 會進入到依賴的庫當中,本質上需要操作顯示器這個硬件設備來完成,println 然後就會通過相關的系統調用進入到內核當中來執行代碼。這個內核中的代碼再來執行“讓顯示器輸出”這樣的動作。最後,內核調用顯卡驅動程序具體操作顯示器。

 

操作系統具體怎麼管理?

所謂管理核心工作主要是兩個方面:

  1. 描述:相當於是創建了一個 Student 類,類中包含一些需要的屬性,再根據當前的數據創建一堆 Student的實例
  2. 組織:藉助一定的數據結構,把這些Student 的實例放到一起,然後在按照一定的規則來篩選

 

進程(process)/任務(Task)

進程是一種操作系統中非常重要的軟件資源。把一個可執行程序跑起來,系統中就會創建一個對應的進程,如果這個程序執行結束了,系統就會隨之銷燬對應的進程,進程就可以看成是一個程序的執行的“過程”。

 

注意區分程序和進程,程序也可以成爲可執行文件:

  • 執行文件就是一個磁盤上的文件,靜態的,如果不去操作就不會發生變化
  • 當雙擊某個 exe 文件時,操作系統就會加載這個可執行程序,(加載:把 exe 文件中的很多內容都加載到內存中,分配了一些資源,並開始執行這個可執行程序中包含的指令),執行過程中就是一個進程。

進程也可以認爲是操作系統進行資源分配的最小單位。

PID 是進程 id 的身份標識符,關閉一個程序後再次打開,兩次產生的PID是不同的

 

進程管理

管理:先描述,再組織。

以 Linux 爲例:

  • 內核中使用一個 task_struct /PCB(進程控制塊)結構體來描述進程
  • 每創建一個進程,就同時創建了一個 PCB 這樣的類的實例。
  • 組織方式:使用雙向鏈表把所有的 PCB 對象串到一起。

雙擊一個 exe ,創建一個進程的時候,本質上就是在內核中,縣創建一個 PCB 對象,然後把這個對象加入到鏈表中。

關閉一個程序,結束一個進程的時候,本質上就是在內核中,找到這個對應的 PCB 對象,然後從鏈表上刪除,並且釋放該對象

通過任務管理器查看到的所有的進程信息,本質上就是在遍歷內核中的這個鏈表,一次讀取對應 PCB 中的節點信息

 

PCB 裏面包含哪些信息呢?

  1. pid(進程id):進程的身份標識
  2. 一組內存指針,指向該進程持有的一些重要數據在內存中得到位置。
  3. 狀態
  4. 優先級
  5. 進程的記賬信息
  6. 上下文

上述中3~6 爲了實現“進程調度”,如果資源非常充裕,那麼不需要調度。事實上是進程多,系統給進程分配的資源(CPU)很少,目的就是爲了讓大量的進程能夠很好的在有限的 CPU 上進行併發執行

 

併發:同一時刻 CPU 上只能執行一個程序的指令,由於CPU 計算/執行指令速度極快,我們就可以讓 CPU 這樣工作:先執行進程1 的指令,執行了一段時間後,執行進程2 的指令,再執行進程3 的指令……過一段時間後再繼續執行進程1 的指令,期間的時間間隔十分短,宏觀上來看,是在同時運行這些進程,但是微觀上來看,這些指令是串行執行的,只不過 CPU 切換速度極快,人宏觀上感知不到,這就是併發。

並行:是宏觀上是同時執行,微觀上也是同時進行。(兩個CPU 就可以同時執行兩個進行的指令)

實際工作中一般不會嚴格區分並行和併發,兩個術語可能會混淆使用。

 

操作系統中實現進程調度的模塊叫做“調度器”,實現具體調度的時候有很多策略,這些策略都依賴 PCB 的屬性

 

一個進程的狀態有這些狀態:

  • R:就緒狀態。正在 CPU 上執行,或者即將執行
  • S:睡眠狀態。這些進程沒法在 CPU 上執行,而是在等待。
  • D:深度睡眠狀態。進程在長時間的忙於 IO 操作,沒精力理會 CPU
  • X:退出狀態。進程已經被銷燬了
  • T
  • t
  • Z
  • ……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章