C内存2:程序是如何运行的
由內存1的講解我們知道,內存僅僅是一個存放指令和數據的地方,要完成計算功能需要將其讀取到CPU內部。
然而CPU內部又包含很多個小零件,它是一個復雜的計算機部件。
上圖中的運算單元相當于CPU的大腦功能,負責各種運算工作,而且每種運算工作都有對應的電路支持,速度很快。
寄存器(Register)是CPU內部一個非常小非常快速的存儲部件,但是它的容量是有限的。我們經常說到的多少位的CPU其實指的就是寄存器的位數,對于32位的CPU,每個寄存器一般能存儲32位(4個字節,一個字節是8位)的數據,對于64位的CPU每個寄存器一般能存儲64位(8個字節)的數據。為了實現程序中復雜的功能,現在的CPU都內置了幾十個甚至上百個寄存器,(嵌入式的功能單一,寄存器數量較少)。
寄存器在程序的執行過程中至關重要,不可或缺,它們可以用來完成數學運算、控制循環次數、控制程序的執行流程、標記CPU運行狀態等,CPU就是用它來記錄程序的運行狀態,然后根據他的值再決定下一步的操作。例如,EIP(Extern Instruction Pointer )寄存器的值是下一條指令的地址,CPU執行完當前指令后,會根據 EIP 的值找到下一條指令,改變 EIP 的值,就會改變程序的執行流程;CR3 寄存器保存著當前進程頁目錄的物理地址,切換進程就會改變 CR3 的值。
緩存:在CPU的內部設置一個緩存,是為了將使用頻繁的數據暫時讀取到緩存,當需要同一地址上的數據時,就不用再去訪問內存,直接從緩存讀取(對于不經常使用的數據依然從內存上讀取,對于那些數據保留在緩存上,哪些數據不保留都有復雜的算法控制)。因為雖然內存的讀取速度很快,但是同CPU比起來還是很慢,不在一個數量級上,這樣每次從內存讀取數據會嚴重拖慢CPU的運行速度,每次讀取會造成CPU等待無事可做。
所以我們購買電腦時也會關注緩存的容量,一級緩存是32KB,二級緩存是256KB,三級緩存是8MB。緩存容量越大,CPU越厲害。
要想讓CPU工作起來,是需要指令集的,我們編寫的C代碼最終也是會編譯成一條條的CPU指令集
總結
以上是生活随笔為你收集整理的C内存2:程序是如何运行的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C内存1:从硬盘 到 内存 到 CPU
- 下一篇: C内存3:虚拟地址