简单了解计算机组成原理 -- CPU与操作系统
本文主要是從程序運行來看計算機組成原理
我們平時常說的程序, 大多指的是一個可執行文件 .exe, 當雙擊 .exe文件運行時, 操作系統就會讀取這個文件, 將其加載到內存中, 由CPU中的寄存器讀取相應指令, 運算后返回內存
Java代碼也是同理.
寫了一個 .java 被編譯成 .class 后被 JVM 進行加載, .class中保存的就是一些二進制指令 (和CPU無關), 也就會先放在內存中
1 計算機的大腦----CPU:中央處理器
1.1 簡介
- 芯片:主要指的就是CPU
在計算機中,機組,微機原理接口技術,計算機系統結構,模電,數電…都是在講CPU的,這幾門課是計算機的基礎
1.1.1 引入: CPU與顯卡的區別
- CPU:: 通用計算結構 -> 應對各種計算場景
- 相當于大學生, 參加工作, 可以從事各種工作, 當然能計算1+1
- 顯卡: 專用計算芯片 -> 特別擅長大量的簡單運算, 如: 大規模浮點數, 尤其是矩陣運算) - 相當于小學生, 只會算1+1,但有些場景下需要運算大量的1+1
- 游戲: 畫面非常復雜, 需要很大運算量
- 挖礦: 本質是狂算 哈希值, 相當于把自己電腦的算力貢獻出來, 替別人完成一些簡單運算, 當你的電腦算力為其他人提供了實質性幫助時, 他人就會給你一定報酬, 這個過程成為挖礦
- 機器學習: 模型的訓練, 也需要巨大的運算量 (如: 對龐大數據進行分析等)
1.1.2 一些基本參數
- 1.90GHz : CPU的主頻, 描述了CPU的運算速度
- Hz: 一秒震動 (運算) 一次
- G: 1G ≈10億
1.2 內部結構
1.2.1 本質: 一系列的門電路
半加器 (2bits輸入, 2bits輸出) + 全加器 (3bits輸入, 2bits輸出) -> 各種加法器 -> 各種門電路 -> 計算單元 / 控制單元/ 存儲單元… => CPU
1.2.1.1 CPU內部結構的發展方向
底層設備結構的變化, 對于程序員的代碼編寫方式, 也是有深遠影響的
1.2.1.1.1 制程 越來越小
-
什么是制程?
計算機芯片框架的運算速度
- 運算速度: 每秒處理的百萬級的機器語言指令數. 微機一般用主頻來描述運算速度. 主頻越高, 運算速度越快 -
為什么我們認為CPU的 制程 越小越好?
一個CPU芯片的面積是固定的,制程越小,單個門電路體積越小, 整個CPU上能夠搭載的門電路數量越多, CPU上的功能模塊越多, 算的就更快
但從物理角度來說, 制程是無法無限小的, 縱使無限小, 在nm尺度上, 經典力學已經處在失效的邊緣了. 目前就小制程CPU的研究方向于 “量子計算機”, 它的計算能力會比經典計算機提升好多個數量級
1.2.1.1.2 多核CPU
家用PC上, 好的CPU, 12核24線程 #并發編程
如果在服務器的CPU上, 核心數會更多
1.2.2 寄存器
- 功能: 存儲程序運行中的數據
- 和內存相比, 功能差不多, 數據斷電就消失; 同時, 存儲空間更小, 訪問速度更快 (比內存又快3-4個數量級)
- CPU的計算是針對寄存器中的值進行的, 輔助計算, 保存計算中所需要的中間結果
- 示例: 計算10+20
- 從 內存 中讀 10 到 寄存器A
- 從 內存 中讀 20 到 寄存器B
- 執行相加指令, 把兩個寄存器的值相加, 保存到 寄存器A 中
- 把 寄存器A 中的值寫回內存
1.3 CPU如何進行工作
1.3.1 指令: 人給計算機發布的命令
1.3.1.1 人與計算機的交流
-
人寫的: 高級語言
- Java/C 等編程語言構成的代碼
-
計算機認識的: 機器語言
- 二進制的指令
- [[attachment/未命名#^326d9f|指令表]] (極簡版本, 實際上指令有很多)
- 二進制的指令
-
編譯: 把 高級語言 翻譯成 機器語言
1.3.1.2 CPU執行一條指令的過程
1.3.1.2.1 程序計數器(PC指針)
在x86_32CPU叫做eip寄存器程序計數器中包含了一個"地址", 指示接下來要讀取哪個內存里的指令
解析指令
- 按照設定進行解讀. 如: 一個8bit 指令, 前4bit 是其操作碼(opcode), 表示指令要干什么; 后4bit 是操作數
- 指令00101110 => 從11010這個地址中讀取一個字節進到A寄存器中
- 0010 Load_A
- 1110 要讀取的內存地址
- 指令00101110 => 從11010這個地址中讀取一個字節進到A寄存器中
執行指令
然后, 程序計數器 進行累加, 再去讀取下一條指令(針對單純的順序語句)
1.3.1.3 CPU如何執行多條指令: “流水線”
負責讀指令的程序計數器讀完第一條, 緊接著讀第二條, 第三條…
負責解析指令的解析完第一條, 緊接著解析第二條, 第三條…
…
- 遇到條件判定, 循環, 函數調用時, 誰是第二條指令? 或 上一條指令還沒有解析完成時, 負責執行的已經執行完成, 怎樣執行未知的下一條語句 能夠將程序運行效率最大化?
CPU有很多相關的運算形式, 如: 分支預測…
1.3.1.3.1 分支預測
通俗來講, 就是CPU去猜測下一條指令, 如果猜中了, 流水線就繼續跑, 如果猜錯了, 重新按照實際情況再讀一遍指令
即: 第N條指令還沒執行完, 就要猜測第N+1條指令是什么, 并為其安排流水線
#問題 重讀一遍指的是繼續猜嗎? : 邊執行邊猜, 猜不中就等其按照流程執行完就行了
比如: 御魂計算器正在計算你的御魂需求, 然后你同時也亂配御魂, 如果你亂配的剛好滿足了你的御魂需求, 就不用繼續計算了. 但如果直到算完了也配不出來, 問題不大, 因為已經算完了, 然后就可以接著算下一套御魂…
1.3.1.3.2 時鐘周期
流水線之間為了相互配合而確定, 每個指令的執行都需要消耗幾個時鐘周期
- 1.9GHz CPU: 1s有19億個時鐘周期
CPU, 存儲器, 輸入設備, 輸出設備… 都是"硬件"設備, 普通用戶要和硬件打交道, 還是有點難度. 于是誕生了操作系統這個軟件, 用于管理各種硬件設備 并給各種軟件提供穩定的運行環境
Windows, MAC, 安卓…都是操作系統, 廠商不同, 細節有差別, 但核心工作都是上面兩條
2 操作系統
2.1 結構
2.1.1 應用程序
2.1.2 系統調用
如果你想在控制臺打印一個 “hello”, 這個過程中你必須調用庫函數 printf, 其內部就要調用 操作系統提供的系統調用write, 調用write時就會進入到內核來執行, 內核就要進一步控制硬件, 完成輸出過程
2.1.3 操作系統的核心部分: 內核
內核是操作系統實現其主要功能 (管理各種硬件設備, 并給各種軟件提供穩定的運行環境) 的部分
當我們使用操作系統進入內核時, 涉及到 用戶態 到 內核態 間的切換, 要運行的程序有很多, 但內核只有一個, 就很可能要排隊等待
2.1.4 驅動程序
是一個由 軟件廠商 提供的 軟件程序
直接和硬件設備打交道, 驅動程序相當于在 硬件 和 內核 之間來了一層轉換
用軟件操作硬件一般都很簡單, 因為硬件一般都會提供一些"寄存器"
2.1.5 硬件設備
- 操作系統結構示意圖:
總結
以上是生活随笔為你收集整理的简单了解计算机组成原理 -- CPU与操作系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 足球射门
- 下一篇: java信息管理系统总结_java实现科