一、操作系統
會使用linux系統
建議大家先學會linux的基礎指令,可以看菜鳥教程網站進行學習。
1、各種定義
- 操作系統定義
- 管理計算機的 硬件 和軟件資源, 能對各類作業進行調度,方便用戶使用計算機的程序集合。
- 操作系統運行在內核態(也叫管態,核心態)。在這個狀態,操作系統可以對所有的硬件訪問。
注意:操作系統是最基礎的軟件。
- 用戶接口程序定義
- 用戶接口程序有
shell和GUI
- shell:用戶與操作系統交互的程序,基于文本的是shell。
- GUI:用戶與操作系統交互的程序,基于圖標的是GUI。
- 用戶接口程序有
注意:用戶接口程序并不屬于操作系統。
- 信息
- 位(bit)+ 上下文(context)= 信息
- 位(Bit) 是計算機中最小的數據單位,表示一個二進制的 0 或 1。
- 上下文 是數據所處的環境或規則,決定了如何解釋這些位。
- ASCII碼構成的文件就是文本文件
- 其余是二進制文件
- 位(bit)+ 上下文(context)= 信息
- 內核態和用戶態
- 內核態:
- 操作系統的“核心大腦”,權限高但需謹慎操作。
- 用戶態:
- 普通程序的“沙箱”,權限受限但安全。
- 所以操作系統會把一部分代碼放在內核態,另一部分放在用戶態來保證安全。
- 普通程序的“沙箱”,權限受限但安全。
- 內核態:
- 程序接口
- 普通用戶無法直接使用程序接口,而是使用
系統調用
來用程序接口。
- 普通用戶無法直接使用程序接口,而是使用
2、程序被其他程序翻譯成不同格式
在linux的gcc編譯器下。我們有一些對文件的操作。操作系統和編譯器是輔助關系。
這些操作是【巧妙記憶:ESc iso】
①預處理階段:
- 使用
gcc -E xxx.c -o xxx.i
命令- 作用:處理 #include、#define、#ifdef 等預處理指令。
②編譯階段:
- 使用
gcc -S xxx.i -o xxx.s
命令- 作用:將預處理后的代碼轉換為匯編代碼。
③匯編階段:
- 使用
gcc -c xxx.s -o xxx.o
命令- 作用:將匯編代碼轉換為機器碼(二進制目標文件)。
④鏈接階段:
- 使用
gcc xxx.o -o xxxx
命令- 作用:將目標文件與庫文件(如 libc.so)鏈接,生成可執行文件。
如果我們使用world.c
文件進行以上操作。那這4個階段將構成編譯系統(compilation system)。那么命令的執行過程如下圖:
3、面臨的問題
當一個代碼輸入到操作系統上,我們的硬盤【不同的用戶,硬盤的來源是不同的,材質會不同等等】該如何讀取呢?等等。
所以我們就需要用到操作系統的4個重大部分,也是未來學習的過程中重點知識。
- 運行任務的管理:進程和線程、調度和同步機制
- 運行任務的存儲管理:內存管理
- 運行任務的外設管理:I/O設備
- 存儲數據設備的管理:文件管理
二、硬件
上面這張就是一個硬件分布圖【看看就行了,不要死記硬背】。
1、CPU
中央處理單元(CPU),簡稱處理器。
- CPU作用:處理和執行指令。
- CPU的寄存器:存儲下一條要執行的指令。
- 通用寄存器
- 程序計數器(PC)
- 作用:存儲下一條要執行的指令的內存地址。
- 堆棧指針(SP)
- 作用:指向當前堆棧的頂部地址,管理函數調用時的棧操作。能保護信息和恢復信息。
- 指令寄存器(IR)
- 作用:存放當前執行指令。
- 狀態寄存器(FLAGS)
- 作用:記錄運算結果狀態(如零標志ZF、進位標志CF)。
- PSW:并不是一直需要保存,而是運行狀態才需要。在記錄狀態【已經沒有運行了】不用。
- CPU的算術邏輯單元ALU
- 作用:執行算術和邏輯運算。
- 指令集架構
- 處理器想要處理一條指令,也需要通過一定的規則,這個規則就是指令集架構。
- 指令類型如下:
- 加載指令:用于將數據從內存加載到寄存器中。
- 存儲指令:用于將數據從寄存器存回到內存中。
- 運算指令:用于對來自寄存器和內存的操作數進行運算,例如 add 指令將兩個操作數相加并將結果保存在寄存器或內存中。
- CPU的流水線
- 當CPU正在執行第N條指令時,它可以同時解碼第N+1條指令,并讀取第N+2條指令,這種形式就叫
流水線
。
- 當CPU正在執行第N條指令時,它可以同時解碼第N+1條指令,并讀取第N+2條指令,這種形式就叫
- CPU的超標量
- CPU中可以有多個執行單元,例如一個做加法運算,一個做乘法運算。在它們做運算的時候,把許多取指單元和解碼單元放入緩存區(cache)中,等到某一個執行單元有空了,就把緩存區中的它們拿一個出來執行。雖然看起來指令亂序了,實際上工作人員肯定設計方法來有序進行。
2、內存
理想情況下,內存應該是非常快速的(比執行一條指令還要快,以避免拖慢CPU的執行效率),同時容量足夠大且成本低廉。然而,當前的技術手段無法同時滿足這三個要求。因此,存儲系統采用了一種分層次的結構來解決這個問題。
2.1、 寄存器
- 寄存器與CPU同樣的材質,跟CPU一樣快
2.2、 高速緩存(Cache)
- 位于CPU與主存(內存)之間的超高速臨時存儲器,由SRAM構成,用于減少CPU訪問數據的延遲。
- 局部性原理:
- 是指:CPU訪問存儲器的時候,無論是讀指令還是存取數據,所訪問的存儲單元都被區域聚集到一個連續區域中了。也就是說程序具有訪問局部區域里的數據和代碼的趨勢。
2.3、主存
- 主存是指計算機中用于臨時存儲正在運行的程序和數據的硬件部件,屬于RAM(隨機存取存儲器)。斷電后數據丟失(易失性)。
- ROM(只讀存儲器) 斷電后不數據丟失,一旦ROM存儲了數據,那么數據就不能被修改了。
- EEPROM(電可擦可編程只讀存儲器)和 閃存(Flash Memory)與ROM不同,支持數據的擦除和重新寫入【重寫數據來修正程序錯誤】。
- CMOS(Complementary Metal-Oxide Semiconductor,互補金屬氧化物半導體) 存儲器
- 作用:存儲BIOS/UEFI設置(如啟動順序、日期時間、硬件參數)。確保即使在電源關閉后也能持續追蹤這些關鍵數據。
- 特性:易失性存儲器,依賴**紐扣電池(CR2032)**維持數據(斷電后不丟失)。
2.4、磁盤
在市面上的磁盤有2類,我們先看機械磁盤,然后看固態磁盤。
推薦觀看這個視頻,用的《CSAPP》書講解
2.4.1、機械磁盤(HDD)
主體結構介紹
- 盤片(platter):上圖中的圓盤就是盤片。上面有磁性的記錄材料,可以記錄數據。
- 盤面(surface):每個盤片有2個面 ,這個面就是盤面。
- 主軸(spindle):可以旋轉。主軸帶動盤片以固定的速率高速旋轉。
- 讀/寫頭:來讀寫盤面表面存儲的數據。上下盤面都有一個讀/寫頭.
- 所有的讀寫頭都是一起運動的,垂直并列。
- 磁盤臂:通過磁盤臂的運動就可以運行讀寫數據的行為了。如果需要讀取目標文件,盤面就會旋轉起來。
- 尋找位置的這個過程【不包括旋轉】叫尋道。
細節分析
先是磁道
- 磁道:盤面的表面劃分了一圈圈的磁道
- 扇區:磁道里面有許多扇區。
- 扇區與扇區之間有一些小間隙,存儲的不是 數據 而是 標識信息。
- 扇區與扇區之間有一些小間隙,存儲的不是 數據 而是 標識信息。
- 扇區:磁道里面有許多扇區。
然后單位
- byte是字節單位,不要理解成比特bit了。
- 在I/O設備里的單位是不同的。如下圖
然后對扇區的訪問時間主要分布為3個部分
扇區訪問時間 = 尋道時間+旋轉時間+傳送時間
- 尋道時間:磁盤臂尋道過程的時間。
- 旋轉時間:盤片旋轉將請求數據所在扇區移至讀寫磁頭下方所需要的時間
- 傳送時間:完成傳輸所請求的數據所需要的時間。
單位
- 扇區: 硬盤的最小讀寫單元
- 塊/簇: 是操作系統針對硬盤讀寫的最小單元
- page: 是內存與操作系統之間操作的最小單元。
2.4.2、固態硬盤(SSD)
在現在的電腦幾乎都是固態硬盤了。固態硬盤的缺陷就是容易磨損。推薦看這個視頻了解
- 固態硬盤由一個或多個
閃存芯片
構成的。- 使用閃存芯片 取代了 傳統的機械臂轉動和盤片旋轉方式。
- 閃存轉換站(FTL)
- 功能與磁盤控制器類似:都是將操作系統對邏輯塊的請求 翻譯成 對底層物理設備的訪問。
- 固態硬盤的擦除操作
- 固態硬盤除了讀/寫操作,還多了擦除操作。
- 但是擦除只能把1 變成 0 ,而不能把0 變成1 。 所以每一個page在放入數據前都是 1 。
3、I/O設備
3.1、定義
I/O設備就是可以將數據輸入到計算機 或者 可以接收計算機輸出數據的外部設備 , 屬于計算機的硬件部分。
3.2、分類
3.2.1、按使用特性分類
- 人機交互類 外部設備:數據傳輸慢---->用于人機交互
- 存儲設備:數據傳輸快---->用于數據存儲
- 網絡通信設備:數據傳輸介于2者之間---->用于網絡通信
3.2.2、按傳輸速率分類
- 低速設備:每秒幾個到幾百字節
- 中速設備:每秒千到萬字節
- 高速設備:每秒可以到千兆字節
3.2.3、按信息交換的單位
- 塊設備:傳輸速率較高,可尋址,即對它可隨機地讀/寫任一塊。
- 字符設備:傳輸速率較慢,不可尋址。在輸入/輸出時,常采用中斷驅動方式。
4、設備控制器和設備驅動器
設備控制器【硬件】:負責直接控制物理設備,能夠接收并執行來自操作系統的指令。
設備驅動器【軟件】:設備控制器通過設備驅動器利用中斷與操作系統通信。
5、實現輸入和輸出的方式有三種
- 忙等待:一直循環直到需要的條件滿足。會一直占據CPU,CPU一直輪詢I/O設備直到I/O操作完成。
- 設備驅動程序啟動設備并且讓該設備在操作完成時發生中斷,設備驅動程序在這個時刻返回。操作系統接著在需要時阻塞調用者并安排其他工作進行。當設備驅動程序檢測到該設備操作完成時,它發出一個 中斷 通知操作完成。
- 引入DMA控制器,代替CPU直接管理I/O設備與內存之間的數據傳輸。【直接存儲器訪問(Direct Memory Access, DMA) 芯片】