文章目錄 一、馮諾依曼體係二、CPU的基本工作流程1.邏輯門2.門電路(Gate Circuit)1.非門2.與門3.或門4.異或門 3.算術邏輯單元 ALU(Arithmetic & Logic Unit)1.算術單元2.邏輯單元 三、存儲器四、操作係統(OS)1,進程2.進程管理(重點)並發式執行並行式執行 3. 進程的屬性(1) 進程的狀態(2) 進程的優先級(3) 進程的上下文(4) 進程的記賬信息 4. 虛擬地址空間 總結
一、馮諾依曼體係
清爽的鑰匙,可以說是計算機的祖師爺。被後人成為“現代計算機之父”
它提出了計算機製造的三個基本原則,即采用二進製邏輯、程序存儲執行以及計算機由五個部分組成(運算器、控製器、存儲器、輸入設備、輸出設備),這套理論被稱為lhdrg體係結構。
CPU 中央處理器: 進行算術運算和邏輯判斷.存儲器: 分為外存和內存, 用於存儲數據(使用二進製方式存儲)輸入設備:用戶給計算機發號施令的設備.輸出設備: 計算機個用戶匯報結果的設備
如果對於存儲空間
磁盤 > 內存 > CPU
如果對於訪問速度
CPU > 內存 > 磁盤
CPU想必都不陌生,現在的電腦CPU已經到了 11 代了,這個 2.40GHz是什麽意思呢。這其實是CPU的主頻
粗略的說:CPU的主頻就是時鍾的震蕩的每秒次數,可近似的看作每秒執行的指令數。簡單的說就是主頻決定了CPU的運算速度。
接下來,草莓视频黄片在线看用一個從無到有的過程,一步步搭建一個 CPU 出來,希望大家可以借助這個過程,理解CPU、內存等計算機主要部件的工作原理。
1.邏輯門電子開關 —— 機械繼電器(Mechanical Relay)
通過電子開關,草莓视频黄片在线看可以實現 1 位(bit) 的看似無用的邏輯運算。
接下來,草莓视频黄片在线看學習如何使用電子開關構建一些有用的部件 —— 門電路。可以實現 1 位(bit) 的基本邏輯運算。其實幾個門電路非常好理解,Java的邏輯運算差不多。
1.非門非門非常好理解,輸入為 true 輸出 false,輸入false 則輸出 true
兩個都為 true才輸出true,否則輸出false
一個為 1則為1,兩個為 false 則為false
通過非門與門和或門相結合就形成了異或門,相同為 false,不相同則為 true
這裏的 true 和 false 在計算機裏其實就是 1 和 0
3.算術邏輯單元 ALU(Arithmetic & Logic Unit)ALU 是計算機中進行算數、邏輯運算的核心部件,是計算機的數學大腦.
說到運算草莓视频黄片在线看首先想到二進製的運算,這個想必大家都了解,逢二進一嘛。
算數單元,負責計算機裏的所有數字操作,比如四則運算,當然它能做的遠遠不止這些。
半加器:
半加器就是通過一個與門和異或門,來計算兩個 1位(bit)數的相加,既要考慮到和也要考慮到進位。
全加器:
全加器是通過兩個半加器進行 3個1位(bit)的數 進行運算,同樣要考慮計算出來的和是否要進位
加法器
通過1個半加器和7個全加器就能組成一個能計算 8個位 1位(bit) 的全加器。
圖中的A和B就是輸入的兩個數的第幾個bit位,同理 S 就是輸出數的 bit 位
算術單元支持的操作當然遠不止這些,通過繼續組合邏輯門,算數單元可以做到加減乘除甚至更多的算術運算,但一個加法器作為演示已經足夠了。
其實計算機隻能做加法運算,都是通過加法器來實現的,因為計算機裏存的都是補碼,就是為了通過加法器來計算加減乘除運算,隻不過更複雜,這裏就不深究。
邏輯單元主要用來進行邏輯操作,最基本的操作就是 與、或、非操作,但不隻是一位(bit)數的比較
三、存儲器
存儲器分為內存和外存
內存:就是平時所說的電腦內存,也就相當於手機的運存。
外存:磁盤、U盤等。
內存比較而且貴,外存比較大但比較便宜。
內存有一個特點:它可以隨機訪問內存中任意地址的數據。
外存其實也有隨機訪問的能力,但開銷較大,所以外存更適合順序訪問。
內存的訪問速度非常快,外存的訪問速度非常慢。
CPU上其實也能存儲,CPU上的寄存器,內存更小速度非常的快,也更加的貴!
四、操作係統(OS)操作係統是一個"搞管理" 的軟件
1.管理硬件設備
2.管理軟件資源(文件、進程)
所謂的”管理“一般值的是兩個方麵:描述+組織
進程是操作係統中非常核心的一個概念,進程其實是計算機完成工作的一個"過程"
如圖所示:進程就是一個正在運行的程序,要想讓進程跑起來,就得給這個進程分配一定的係統硬件資源(CPU,內存,磁盤,網絡帶寬…)
關於進程,最核心的問題就是進程在係統中是如何被管理的,
管理 = 描述(PCB) + 組織
PCB:進程的控製塊,這是一個C語言的結構體類似於Java中的類,一個結構體對象就對應一個進程
組織:使用一定的數據結構來組織,常見的作法就是使用雙向鏈表
查看進程列表,本質上就是遍曆操作係統內核中的這個鏈表,並顯示其中的屬性;
創建一個進程:本質上就是創建一個PDB對象,加入到內核的鏈表中
銷毀一個進程,本質上就是把這個PCB對象從內核鏈表中刪除掉
PCB中大概有那些屬性呢?
pid:一個進程的身份標識,一個機器同一時刻,不可能有兩個進程的 pid 相同
內存指針:描述了這個進程使用的內存空間是哪個範圍(虛擬地址空間)
文件描述符表:描述了這個進程都打開了那些文件
係統中打開一個文件,其實就得到了一個"文件描述符",這個文件描述符就像一個遙控器一樣,文件數據是存放在磁盤上的,代碼中操作磁盤數據不像操作內存數據那麽方便,所以往往是借助這種遙控器的方式來操作
2.進程管理(重點)草莓视频黄片在线看電腦上有幾百個進程在運行,但電腦隻有1個CPU,而且一般都是4核或者8核的CPU,8核心相當於CPU有8個分身,那麽這麽多進程是怎麽運行的呢?
進程這麽多,CPU就那麽幾個分身。那麽就涉及到進程調度了,電腦上的多任務係統其實就是基於進程調度這樣的機製來完成的。
並發式執行並發式執行:1個CPU運行多個進程,
由於CPU的運行速度極快,雖然CPU在一直進行切換,但是咱們坐在電腦前的用戶,是感知不到這個切換的過程的。
並行式執行:多個CPU,運行多個進程
CPU1運行進程1,CPU2運行進程2.
進程1和進程2無論是微觀還是宏觀,都是同時執行的。
真實的計算機,真實的操作係統在進行進程調度的時候,是並發並行兩種策略綜合使用的。
3. 進程的屬性 (1) 進程的狀態運行狀態:進程正在運行
就緒狀態:進程已經做好準備,隨時準備被CPU調度執行
阻塞狀態:進程在此狀態不能執行,隻有等阻塞該進程的事件完成後才能執行,比如編程時等待草莓视频黄片在线看輸入
(2) 進程的優先級給進程安排不同的優先級,優先級越高的進程,更容易被CPU調度執行。
(3) 進程的上下文記住進程上次運行到哪個指令了,方便下次調度的時候能夠繼續從這個位置來運行。
進程的上下文,主要是存儲調度出CPU之前,寄存器中的信息(把寄存器信息保存到內存中)
等到這個進程下次恢複到CPU上執行的時候,就把內存保存好的數據恢複到寄存器中。(進程本身是感知不到自己啥時候被調度出CPU的)
記錄進程在CPU上執行了多久了,用來輔助決定這個進程是繼續執行,還是要調度出CPU了。
4. 虛擬地址空間一個進程想要運行,就需要給它分配一些係統資源,其中內存就是一個最核心的資源。
物理地址:真實的內存的地址
假設:
0x100 - 0x700 這個內存分給 進程1
0x100 - 0x700 這個內存分給 進程2
0x100 - 0x800 這個內存分給 進程3
這裏的地址都是操作係統抽象出來的虛擬地址
係統會自動的把這個虛擬地址轉換成真實的物理地址
為什麽要有虛擬地址空間?而不直接訪問真實的物理地址?
目的就是為了一定程度的減少內存訪問越界,帶來的後果
比如:
進程1 的內存範圍 0x100 - 0x700,如果我的代碼嚐試修改 0x701的地址的數據,這個操作就是越界訪問(錯誤的操作)
如果這是一個真實的物理地址,這個修改就真的把 0x701給修改了,
恰好 0x701是進程2 要使用的內存地址,此時進程2 可能就出 bug 了,就會直接奔潰
但如果進程訪問的是虛擬地址,也嚐試修改0x701
此時係統就要針對 0x701 來查詢頁表,找到對應的物理地址
由於 0x701 已經是非法地址,在 頁表中查不到了,係統就會明白,是在越界訪問,於是就直接讓這個進程出現崩潰(係統就會發送一個型號,這個信號通常會導致進程奔潰),防止影響到其它線程。
這樣做,就讓進程和進程之間相互影響的可能性變小了,隔離性增加了,進程也就更加穩定了。
虛擬地址空間:好處就是讓進程之間獨立性提高了,不至於相互影響,整個係統更加穩定。
缺點:兩個進程需要相互配合的時候,溝通起來就困難了(進程間通信)
進程1 和 進程2 由於虛擬地址空間(進程的獨立性),導致很難相互進行訪問對方的內存。
如果要想相互交流溝通,就需要使用一些特殊的手段,比如:文件,管道(是內核中提供的一個隊列),消息隊列,信號量等
總結
進程的幾個重要屬性:
進程的狀態進程的優先級進程的上下文進程的記賬信息