1. 程式人生 > 其它 >計算機發展歷程

計算機發展歷程

什麼是計算機系統

計算機系統 = 硬體 + 軟體
硬體:計算機的實體,比如說CPU,記憶體條,硬碟等
軟體:具有各類特殊功能,而軟體又分為系統軟體和應用軟體

  • 系統軟體:用來管理整個計算機系統,比如說Windows系統,Linux系統等
  • 應用軟體:任務需要編織成的各種程式,比如QQ,微信,支付寶等

硬體的發展

發展階段`` 時間 邏輯元件 速度 記憶體 外存
第一代 1946-1957 電子管 幾千-幾萬 汞延遲線、磁鼓 穿孔卡片、紙帶
第二代 1958-1964 電晶體 幾萬-幾十萬 磁芯儲存器 磁帶
第三代 1964-1971 中小規模積體電路 幾十萬-幾百萬 半導體儲存器 磁帶、磁碟
第四代 1972-現在 大規模、超大規模積體電路 上千萬-上億 半導體儲存器 磁帶、磁碟、光碟、半導體光碟



軟體的發展

分為計算機語言的發展和作業系統的發展
計算機語言:機器語言,組合語言,高階語言
作業系統:Windows,Linux,安卓等

計算機硬體組成

計算機層次結構

馮諾依曼機特點

  1. 計算機硬體由運算器、儲存器、控制器、輸入和輸出裝置5個部分組成
  2. 指令和資料以同等地位儲存在儲存器並可按地址尋訪
  3. 指令是由操作碼和地址碼組成,操作碼用於表示這是一個什麼型別的操作,地址碼用於表示運算元儲存中的存放位置
  4. 指令在儲存器內按順序存放(一般情況下是這樣的,但在特定條件下也可以進行設定)
  5. 早期的馮諾依曼機器以運算器為中心,輸入輸出裝置通過運算器與儲存器傳送資料
  • 上圖中,實線是資料線,虛線是控制線(雙向)

馮諾依曼機缺陷(早期)
在控制器的指揮下,輸入和輸出裝置輸入一些資料交給運算器,如果產生中間結果,就會傳送給儲存器,計算完成後最終結果會給輸出裝置。
可以發現這種層次結構容易收到輸入和輸出裝置的牽制,因為他們的速度相較於運算器太慢了(短板效應)

現代計算機的組織結構

為了解決I/O裝置的速度和CPU速度差異懸殊的問題,現如今的計算機則採用以儲存器為中心的計算機結構組織,這種結果使I/O操作儘可能繞過CPU,直接在I/O裝置和儲存器之間完成,以提高系統的整體執行效率

計算機硬體概述

儲存器

儲存器的基本結構

儲存器基本結構:儲存器主要分為主存(記憶體)與輔存(外存)

  • 主存:CPU可以直接訪問;主要存放程式和資料;是計算機實現“儲存程式”控制的基礎;外存中資訊必須載入進主存之後CPU才可以訪問;
  • 輔存:CPU不可以直接訪問

主存的結構如下所示

  • 儲存體M:存放二進位制
  • MAR(地址暫存器):存放的是訪存地址(經過地址譯碼後找到所選儲存單元)
  • MDR(資料暫存器):存放的是要從儲存器中讀入或寫入的資訊
儲存器相關基本定義

儲存器相關基本定義:目前我們採用的半導體器件來承擔儲存任務,一個半導體觸發器由於有0和1兩個狀態,就可以記憶一個二進位制程式碼,關於儲存器有如下五個非常重要的概念。

  • 儲存元:也可稱為儲存元件和儲存基元,用來存放一位二進位制資訊
  • 儲存單元:由若干個儲存元組成,能存放多位二進位制資訊
  • 儲存體:許多儲存單元可組成儲存體,也即儲存矩陣
  • 儲存字:每個儲存單元中二進位制程式碼的組合即為儲存字,可代表數值、指令和地址等
  • 儲存字長:每個儲存單元中二進位制程式碼的位數就是儲存字長

上述概念可以這樣記憶:主儲存器由許多儲存單元組成,每個儲存單元包含多個儲存元,每個儲存元儲存1位二進位制程式碼0或1,故儲存單元可儲存一串二進位制程式碼,稱這串程式碼為儲存字,而這串程式碼的位數稱為儲存字長,儲存字長一般是一個位元組(8位)或位元組的偶數倍。
儲存器相關小考點

  • 資料在儲存體中是按照地址儲存的,每個地址對應一個儲存單元
  • 儲存單元數目=2 M A R 位數 2^{MAR位數}2
  • MAR位數(如果MAR為10位,則儲存單元數目為2 10 = 1024 2^{10}=10242 10 =1024)。它用於定址,其長度和PC(程式計數器)長度一致
  • MDR的位數表示儲存字長(例如MDR為16,表示儲存字長為16,也表示1個字(word)=16bit)
  • 注意區分字(word)和位元組(Byte),1個位元組等於8個bit,而1個字的大小取決於機器
  • 1B=1個位元組,1b=1個bit

運算器

運算器:是計算機的執行部件,主要進行

  • 算數運算:比如加減乘除
  • 邏輯運算:比如與、或、非、異或、比較等等
運算器基本結構

運算器基本結構:由以下四部分構成

  • ALU(算數邏輯單元):運算器中造價最為高昂的部分,本質是一對電路
  • ACC(累加器):用於存放運算元,或運算結果
  • MQ(乘商暫存器):在乘除運算式,用於存放運算元或運算結果
  • X(運算元暫存器):用於存放運算元
運算器過程虛擬碼描述(瞭解)

設M為主存中的某一個儲存單元,(M)表示取M中的資料,->表示將內容送入暫存器

加法實現:假設ACC中已經存在一個數,那麼首先取M的內容送入運算元暫存器X,即(M)->X;然後兩者相加重新送入暫存器ACC中,即(ACC)+(M)->(ACC)

乘法實現:假設ACC中已經存在一個數,那麼首先取M的內容送入乘商暫存器MQ作為乘數,即(M)->MQ,再取ACC暫存器的內容放入X暫存器作為被乘數,即ACC->X,接著將ACC清零,即0->ACC,然後乘數乘以被乘數,一個送入乘積高位,一個送入乘積低位,即(X)×(MQ)->ACC//MQ

除法實現:假設ACC中已經存在一個數,首先取M的內容送入X作為除數,即(M)->X,ACC中的內容作為被除數,結果一個放入MQ作為整數部分,即(ACC)/(X)->MQ,另一個放入ACC作為餘數,即(ACC)%(X)->ACC

控制器

運算器:是計算機的指揮中心,由其指揮各部分自動協調地進行工作
指令:是指指揮機器工作的指示和命令,程式本質就是一系列按照一定順序排列的指令。人們用程式表達自己的意圖,控制器則通過指令指揮機器工作,指令 = 操作碼 + 地址碼

  • 操作碼:指示計算機要幹什麼
  • 地址碼:幹這些事情需要的原材料在哪裡

控制器基本結構

  • 控制單元(CU):分析指令、發出訊號、協調操作
  • 指令暫存器(IR):存放當前要執行的指令。注意其內容來源MDR,因為指令和資料本質是一樣的,都被存放在儲存器
  • 程式計數器(PC):存放當前要執行的指令地址。注意其與MAR直接連通,並且可以自動+1

控制器過程虛擬碼描述
完成一條指令的過程為:取指令(PC)->分析指令(IR)->執行指令(CU)

具體過程:首先取出指令,即(IR),接著獲取指令的操作碼,即OP(IR),然後獲取指令的地址碼,即AD(IR),然後將操作碼送入控制單元分析,即OP(IR)->CU,操作碼錶示需要幹什麼,但是幹活需要原材料,所以再把指令的地址碼送入MAR,AD(IR)->MAR,從MAR指示的儲存體取出原材料即可。

結合前面的加法,我們可以寫出完整的加法運算的過程的: 首要取加法指令,而指令儲存在儲存體中,想要取出指令必須要知道的指令的地址,而這個地址就存放在PC中,PC又和MAR直接相連,即(PC)->MAR,於是指令此時被放入了MDR中,那麼接著將指令放入IR中,即(MDR)->IR,接著取指令的操作碼送入控制單元,即OP(IR)->CU,然後再把原材料(就是一些運算元)的地址碼送入MAR,即AD(IR)->MAR。接著就可以進行加法操作了,由於上一步已經將運算元的地址碼送入了MDR中,所以現在送入運算元暫存器,即(MDR)->X,然後(ACC)+(X)->ACC,最後PC要自增,即(PC)+1->PC,表示下一條指令

計算機的工作過程

接下來以一段簡單的C語言程式碼為例展示計算機在背後所做的工作

以下程式非常簡單,聲明瞭4個變數並賦值,然後在main函式內進行運算

int a=2,b=3,c=1,y=0;
void main()
{
	y=a*b+c;
}

經過編譯器編譯後,這段程式在主存中就是這樣的

下半部分是定義的變數,上半部分則是對應於高階語言對應的機器指令
為了方便演示,我們將控制器、運算器和儲存體也放在旁邊

第一組
1:程式開始執行,PC的值為0,儲存的是第一條指令的地址。然後將PC的內容,也就是指令的地址送入到MAR中,即(PC)->MAR,MAR=0。也就是說控制器向儲存器指明,我接下來要訪問主存0號地址處的資料,同時告訴儲存器進行讀操作

2+3:主儲存器會根據MAR記錄的地址資訊,到儲存體中找出0號地址對應的二進位制資料,並將其放入到MDR中,此時MDR中存放了第一條指令。即M(MAR)->MDR,此時MDR=000001 0000000101

4:接著將MDR中的指令放入IR中,於是控制器就存放了當前要執行的指令。即(MDR)->IR,(IR)=000001 0000000101

5:這條指令的前6個位元位是操作碼,會被送入到控制單元CU中,CU分析後,得知這是一條取數命令。即OP(IR)->CU

6:取數指令會將變數a的內容放入暫存器ACC中。但是現在變數a不知道在哪裡,所以現在會把指令的地址碼送到MAR當中,即(MAR)=5

7+8:接著主儲存器根據MAR指明的地址,也就是a的地址(5),去儲存體中找出5號地址的資料,並將其放入MDR當中。即M(MAR)->MDR,(MDR)=0000000000000010,也即(MDR)=2

9:接著在控制單元的指揮下,MDR中的資料就被放入到了ACC中。至此第一條指令完成

10:最後PC自增1,進行下一條指令,即(PC)=1

接下來進行下一組操作

1:程式接著執行,PC的值為1,儲存的是第二條指令的地址。然後將PC的內容,也就是指令的地址送入到MAR中,即(PC)->MAR,MAR=1。也就是說控制器向儲存器指明,我接下來要訪問主存1號地址處的資料,同時告訴儲存器進行讀操作

2+3:主儲存器會根據MAR記錄的地址資訊,到儲存體中找出1號地址對應的二進位制資料,並將其放入到MDR中,此時MDR中存放了第二條指令。即M(MAR)->MDR,此時MDR=000100 0000000110

4:接著將MDR中的指令放入IR中,於是控制器就存放了當前要執行的指令。即(MDR)->IR,(IR)=000100 0000000110

5:這條指令的前6個位元位是操作碼,會被送入到控制單元CU中,CU分析後,得知這是一條乘法命令。即OP(IR)->CU

6:接著把指令的地址碼送到MAR當中,即(MAR)=6

7+8:接著主儲存器根據MAR指明的地址,也就是b的地址(6),去儲存體中找出6號地址的資料,並將其放入MDR當中。即M(MAR)->MDR,(MDR)=0000000000000011,也即(MDR)=3

9:由於是乘法,所以控制單元將MDR中的內容送入到乘商暫存器MQ中,即(MDR)->MQ,此時(MQ)=0000000000000011=3

10:先把a的值放入通用暫存器X中,即(ACC)->X,(X)=2

11:CU告訴ALU,讓其進行乘法運算。即(MQ)×(X)->ACC,(ACC)=6。注意如果乘積過大,需要MQ輔助儲存,也就是最上面講到過的(X)×(MQ)->ACC//MQ


接著進行下一組操作,具體過程就不詳細演示了,步驟如下

1:PC儲存2號指令的地址,(PC)->MAR,(MAR)=2
2+3:M(MAR)->MDR,(MDR)=000011 0000000111
4:(MDR)->IR,(IR)=000011 0000000111
5:OP(IR)->CU,CU分析操作碼,得知這是加法執行
6:Ad(IR)->MAR,將指令的地址碼送入MAR,(MAR)=7
7+8:M(MAR)->MDR,(MDR)=00000000 00000001=1
9:(MDR)->x,(X)= 00000000 00000001=1
10:(ACC)+(X)->ACC,(ACC)->7,由ALU實現加法運算


接著進行下一組操作

1:(PC)->MAR,(MAR)=3
2+3:M(MAR)->MDR,MDR=000010 0000001000
4:(MDR)->IR,(IR)000010 0000001000
5:OP(IR)->CU,CU分析得知,這是存數指令
6:AD(IR)->MAR,(MAR)=8
7+8:(ACC)->MDR,MDR=7
9:(MDR)->地址為8的儲存單元,導致y=7

最後再讀取到停機指令時,計算機通過中斷機制就結束了程式的執行

計算機系統的層次結構

計算機系統的層次結構:指的是計算機系統由硬體和軟體兩大部分所構成,而如果按功能再細分,可分為7層。把計算機系統按功能分為多級層次結構,就是有利於正確理解計算機系統的工作過程,明確軟體,硬體在計算機系統中的地位和作用。


計算機效能指標

儲存器的效能指標

儲存器的效能指標主要有:儲存容量,單位成本,儲存速度
儲存容量 = 儲存字數 * 儲存字長
儲存字數:儲存器的地址空間大小
(用在儲存裡的M常表示2^20, 而在通訊中常表示10^6)
字長:一次存取操作的資料量(單位bit)

CPU的效能指標

系統整體效能指標