在 1945 年馮諾依曼和其他計算機科學家們提出了計算機具體實作的報告,其遵循了圖靈機的設計,⽽且還提出⽤電⼦元件構造計算機,并約定了⽤⼆進制進⾏計算和存儲,還定義計算機基本結構為 5 個部分,分别是中央處理器(CPU)、記憶體、輸⼊裝置、輸出裝置、總線。
我們的程式和資料都是存儲在記憶體,存儲的區域是線性的。
資料存儲的機關是⼀個⼆進制位(bit) ,即 0 或 1。最⼩的存儲機關是位元組(byte) , 1 位元組等于 8 位。記憶體的位址是從 0 開始編号的,然後⾃增排列,最後⼀個位址為記憶體總位元組數 - 1,這種結構好似我們程式⾥的數組,是以記憶體的讀寫任何⼀個資料的速度都是⼀樣的。
中央處理器也就是我們常說的 CPU, 32 位和 64 位 CPU 最主要差別在于⼀次能計算多少位元組資料:
- 32 位 CPU ⼀次可以計算 4 個位元組;
- 64 位 CPU ⼀次可以計算 8 個位元組;
這⾥的 32 位和 64 位,通常稱為 CPU 的位寬。
之是以 CPU 要這樣設計,是為了能計算更⼤的數值,如果是 8 位的 CPU,那麼⼀次隻能計算 1 個位元組0~255 範圍内的數值,這樣就⽆法⼀次完成計算 10000 * 500 ,于是為了能⼀次計算⼤數的運算,CPU 需要⽀持多個 byte ⼀起計算,是以 CPU 位寬越⼤,可以計算的數值就越⼤,⽐如說 32 位 CPU 能計算的最⼤整數是 4294967295 。
CPU 内部還有⼀些元件,常⻅的有寄存器、控制單元和邏輯運算單元等。其中,控制單元負責控制 CPU⼯作,邏輯運算單元負責計算,⽽寄存器可以分為多種類,每種寄存器的功能⼜不盡相同。
CPU 中的寄存器主要作⽤是存儲計算時的資料,你可能好奇為什麼有了記憶體還需要寄存器?原因很簡單,因為記憶體離 CPU 太遠了,⽽寄存器就在 CPU ⾥,還緊挨着控制單元和邏輯運算單元,⾃然計算時速度會很快。
常⻅的寄存器種類:
- 通⽤寄存器,⽤來存放需要進⾏運算的資料,⽐如需要進⾏加和運算的兩個資料。
- 程式計數器,⽤來存儲 CPU 要執⾏下⼀條指令「所在的記憶體位址」,注意不是存儲了下⼀條要執⾏的指令,此時指令還在記憶體中,程式計數器隻是存儲了下⼀條指令的位址。
- 指令寄存器,⽤來存放程式計數器指向的指令,也就是指令本身,指令被執⾏完成之前,指令都存儲在這⾥。
總線是⽤于 CPU 和記憶體以及其他裝置之間的通信,總線可分為 3 種:
- 位址總線,⽤于指定 CPU 将要操作的記憶體位址;
- 資料總線,⽤于讀寫記憶體的資料;
- 控制總線,⽤于發送和接收信号,⽐如中斷、裝置複位等信号, CPU 收到信号後⾃然進⾏響應,這時也需要控制總線;
當 CPU 要讀寫記憶體資料的時候,⼀般需要通過兩個總線:
- ⾸先要通過「位址總線」來指定記憶體的位址;
- 再通過「資料總線」來傳輸資料;
輸⼊裝置向計算機輸⼊資料,計算機經過計算後,把資料輸出給輸出裝置。期間,如果輸⼊裝置是鍵盤,按下按鍵時是需要和 CPU 進⾏互動的,這時就需要⽤到控制總線了。