1. 程式人生 > >程式是怎麼執行的-總結於《程式是怎麼跑起來的》

程式是怎麼執行的-總結於《程式是怎麼跑起來的》

首先我們需要知道這些基礎的計算機軟硬體知識。
1.程式執行必要的硬體
1.必須有一個儲存器,記憶程式和資料的儲存器。
2.必須有一個控制器,控制程式執行的控制器。
3.必須有一個運算器,完成資料加工處理的運算器。
4.必須有輸入裝置和輸出裝置,用於進行人機通訊。
2.程式是什麼,由什麼組成?
程式是指示計算機每一步動作的計算機指令,由指令(機器語言)和資料組成。
程式的執行環境=作業系統+硬體。
3.cpu
1.暫存器:用來暫時儲存指令、和資料。不同的cpu內部有20-幾百個暫存器,瞭解即可。
A.暫存器的主要種類和功能
種類 功能
累加暫存器 儲存執行運算的資料和運算後的資料
標誌暫存器 儲存運算處理後的CPU的狀態
程式計數器 儲存下一條指令所在記憶體的地址
基址暫存器 儲存資料記憶體的起始地址
變址暫存器 儲存基址暫存器的相對地址
通用暫存器 儲存任意資料
指令暫存器 儲存指令。CPU內部使用,程式設計師無法通過程式對該暫存器進行讀寫操作
棧暫存器 儲存棧區域的起始地址

B.如圖例項(x86系列cpu主要暫存器)
暫存器名 名稱 主要功能
eax 累加暫存器 同上圖
ebx 基址暫存器 儲存記憶體地址
ecx 計數暫存器 計算迴圈次數
edx 資料計算器 儲存資料
esi 源地址暫存器 儲存資料傳送源的記憶體地址
edi 目標地址暫存器 儲存資料傳送目標的記憶體地址
ebp 擴充套件基址指標暫存器 儲存資料儲存領域基點的記憶體地址
esp 擴充套件棧指標暫存器 儲存棧中最高位資料的記憶體地址
2.控制器:負責把記憶體上的指令、資料等資料讀入暫存器,並根據指令執行的結果來控制計算機。
3.運算器:負責運算從記憶體讀入到暫存器的資料。
4.時鐘:負責發出cpu開始計時的時鐘訊號
4.指令在cpu內部執行示意圖
這裡寫圖片描述


C.指令在cpu內部執行示意圖
擴充套件,如圖D、機器指令的主要型別及功能
型別 功能
資料轉送指令 暫存器和記憶體、記憶體和記憶體、暫存器與外圍裝置之間的讀取操作
運算指令 用累加暫存器執行算術運算、邏輯運算、比較運算以及移位運算
跳轉指令 實現條件分支、迴圈、強制跳轉等
call/return 指令 函式的呼叫、返回呼叫前的地址
D.機器指令的主要型別及功能
高階語言編寫出來的程式,最後都轉變為這些簡單的指令了。
5.記憶體
記憶體的作用是用於暫時存放CPU中的運算資料,以及與硬碟等外部儲存器交換的資料。計算機記憶體主要以下幾種:
a. 高速緩衝儲存器(Cache):它位於CPU與記憶體之間,讀寫速度比記憶體更快的儲存器。當CPU向記憶體中寫入或讀出資料時,這個資料也被儲存進高速緩衝儲存器中。當CPU再次需要這些資料時,CPU就從高速緩衝儲存器讀取資料,而不是訪問較慢的記憶體,當然,如需要的資料在Cache中沒有,CPU會再去讀取記憶體中的資料。
b. 只讀儲存器(ROM):ROM表示只讀儲存器(Read Only Memory),ROM中的一旦被寫入就不能再更改,資訊只能讀出,即使機器停電,這些資料也不會丟失。ROM一般用於存放計算機的基本程式和資料,如BIOS ROM。
c. 隨機儲存器(RAM):隨機儲存器(Random Access Memory)表示既可以從中讀取資料,也可以寫入資料。當機器電源關閉時,存於其中的資料就會丟失。也就是我們常說的記憶體條。
d. 可以把記憶體想象成這樣。
記憶體
這裡寫圖片描述

6.磁碟
磁碟的原理與使用都比較簡單,筆者不再詳細講。
看完基礎的計算機軟硬體知識,我們來了解程式語言,所以這裡以java和C語言為例。有的讀者可能要問為什麼要以倆個為例。因為倆種語言在執行過程存在差別(雖然現在用編譯型、解釋型來分類程式語言已經有點力不從心了)。
計算機不能直接理解高階語言,只能直接理解機器語言,所以必須要把高階語言翻譯成機器語言,計算機才能執行高階語言編寫的程式。
1. C語言
C語言是屬編譯類語言。編譯型語言寫的程式執行之前,需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,比如exe檔案,以後要執行的話就不用重新翻譯了,直接使用編譯的結果就行了(exe檔案),因為翻譯只做了一次,執行時不需要翻譯,所以編譯型語言的程式執行效率高,但是可移植性差。

E.C語言編譯過程
這裡寫圖片描述
2. Java語言
同C語言一樣,java也是將java語法記述的原始碼編譯後執行。不過,編譯後生成的並不是針對特定硬體環境使用的原生代碼,而是位元組碼(也是我們說的.class檔案)。執行時由java虛擬機器轉換成原生代碼執行。所以程式碼的可移植性好,執行效率低。

F.java語言編譯過程
這裡寫圖片描述
總結
一種是程式編譯成機器語言,作業系統把機器語言(指令)複製到記憶體。記憶體中最有可能被cpu用到的資料放入cache。然後cpu與記憶體互動處理資料(程式執行)。
二是java虛擬機器解釋成機器語言放到記憶體中,記憶體中最有可能被cpu用到的資料放入cache。然後cpu與記憶體互動處理資料(程式執行)。
這裡寫圖片描述