本節書摘來自華章計算機《計算機系統:核心概念及軟硬體實作(原書第4版)》一書中的第1章,第1.2節,作者:[美] j. 斯坦利·沃法德(j. stanley warford)著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
我們建構計算機是為了解決問題。早期的計算機主要解決數學和工程問題,後來的計算機強調商業應用的資訊處理,今天,計算機也控制各種諸如汽車發動機、機器人和微波爐之類的機器。計算機系統通過接收輸入、處理輸入并生成輸出來解決這些領域的問題。圖1-8說明了計算機系統的功能。
計算機系統由硬體和軟體組成。硬體(hardware)是系統的實體組成部分,一旦設計好,更改它會很困難且昂貴。軟體(software)是一組程式,它訓示硬體進行工作,比硬體容易修改。與隻能解決一種問題的專用機器相比,計算機的價值在于它是可以解決許多不同問題的通用機器。通過給系統提供不同的訓示,即不同的軟體,用相同的硬體可以解決不同的問題。
每台計算機有4個基本的硬體元件:
輸入裝置。
輸出裝置。
主存儲器。
中央處理單元(cpu)。
圖1-9以框圖的形式展示了這些元件。方框之間的線代表資訊流。總線是一組連接配接元件的線路,資訊通過總線(bus)從一個元件流向另一個元件。處理過程是在cpu和主存儲器(簡稱主存)中進行的。圖1-9中的各個元件通過總線互連的結構是常見的,但是也有其他可能的結構。
通常根據計算機硬體的相對實體大小對其進行分類:
小個人計算機。
中工作站。
大大型主機。
對于大型主機,僅僅cpu就能占據一個整個的機櫃,它的輸入/輸出(i/o)裝置和存儲器可能會填滿一個房間。個人計算機可以小到放在桌子上或者公文包裡。随着技術的發展,過去可能隻能在大型計算機上做的處理變得可能在更小的計算機上進行了。現在,個人計算機可以做很多過去隻有工作站或大型主機才能做的工作。
上述分類是基于計算機的實體大小,而不是存儲器大小。計算機系統使用者通常更關心存儲器的大小,因為它是一個更直覺的名額,指明硬體可以執行的有效工作量。計算速率是另一個對使用者來說很重要的特性。一般來說,使用者希望他的計算機cpu運算速率快并且存儲容量大,而輸入/輸出裝置和主存占用的實體空間又要小。
是以,當計算機科學家研究問題時,他們關心的是空間和時間—計算機系統記憶體儲問題所需的空間和解決問題所需的時間。他們通常用如圖1-10a所示的公制字首來表示空間或時間的大小數量。
例1.1在圖1-9中,假設通過總線從一個元件傳送一些資訊到另外一個元件需要4.5微秒(μs),(a)該傳送需要多少秒?(b)1分鐘内能發生多少次傳送?
(a)從圖1-10a可知,時間4.5微秒是4.5×10-6或者0.000 004 5秒。(b)因為1分鐘等于60秒,是以1分鐘内可發生的傳送次數是(60秒)/(0.000 004 5 秒/傳送),即13 300 000次傳送。注意,由于題目給出的原始資料是2位有效數字,是以結果的有效數字不能超過2位或3位。 □
圖1-10a說明在公制系統中,字首kilo-表示1000,mega-表示1 000 000。但是,在計算機科學中,kilo-表示210或者1024。1000 比1024小不到3%,是以你可以把計算機科學中的kilo-了解為1000,盡管它稍微大一點。這種方式同樣适用于mega-和giga-,如圖1-10b所示。這時,近似值的偏差更大一些,但是對于mega-,偏差仍在5%以内。采用這些看起來奇怪的慣例與在指令集架構層(isa3層)的資訊表示有關。
1.2.1輸入裝置
輸入裝置(input device)把從外部世界來的資訊傳送到計算機的存儲器。圖1-11展示了資料通過總線從輸入裝置到存儲器的路徑。輸入裝置的類型有很多種,包括:
鍵盤。
磁盤驅動器。
usb閃存驅動器。
滑鼠裝置。
條形碼讀碼器。
當在鍵盤上敲擊一個鍵時,你将一個字元發送到主存,這個字元以8位電子信号序列的形式存儲在存儲器中。序列中的每一位信号稱為一個二進制數字(binary digit)(或者比特,bit(有時也譯作“位”))。這個信号可以是高電壓,用符号1表示,或是低電壓,用符号0表示。8位信号序列組成的字元叫作1位元組(byte),如圖1-12所示。
辦公室文員在一台計算機鍵盤上進行輸入是在應用層(app7層),這是計算機系統結構中的最高抽象層次。他們不需要知道他們輸入的每字元的位模式(bit pattern)。而指令集架構層(isa3層)的程式員必須知道位模式。現在,你應該記住資料的一個位元組對應鍵盤的一個字元。
例1.2一個打字員以每分鐘35個單詞的速度在一台計算機鍵盤上輸入文本。如果平均每個單詞的長度是7個字元,那麼每秒有多少比特被傳送到主存呢?一個空格鍵是一個字元,假設平均每個單詞後有一個空格。
包括空格,每個單詞是8個字元,每秒輸入的字元數等于(35單詞/分鐘)×(8字元/單詞)×(1分鐘/60秒)=4.67字元/秒。因為一個位元組存儲一個字元,一個位元組包含8比特,是以比特率是(4.67字元/秒)×(1位元組/字元)×(8比特/位元組)=37.4比特/秒。 □
位元組的縮寫是大寫字母b,比特的縮寫是小寫字母b。是以,例1.2中的結果可以寫作37.4 b/s,再舉一個例子,你可以把12 000位元組寫作12 kb。
磁盤驅動器(disk drive)是計算機的一部分,我們從磁盤提取資料或者把資料寫到磁盤上。磁盤驅動器包括一個使磁盤旋轉的發動機,一個軸或輪毂夾用于把磁盤固定在發動機上,一個或多個用來探測磁盤表面單個比特的讀/寫頭。
硬碟被永久固定密封在磁盤驅動器中。通常,個人計算機的存儲容量為250 gb~1 tb之間,工作站的存儲容量為1 t~100 tb,大型主機的容量大于100 tb。硬碟驅動器通過在一個軸上堆疊數個盤片的方式來實作高容量,每個磁盤表面有一個專門的讀/寫頭。
CD光牒最初是作為音頻壓縮盤流行起來的,不過很快就用于為計算機存儲資料。CD光牒的記錄技術是基于雷射的,雷射可以形成高度聚焦的單色光束。CD光牒上有嵌入式的紋理,它從中心螺旋狀地盤出,上面有雷射束記錄的凹凸序列,每個凹或者凸代表被光束反射所探測到的比特資訊。一張cd的典型存儲容量是650 mb。dvd當初設計用來存儲多通道伴音的視訊資訊,現在也被計算機工業采用,一張dvd的典型存儲容量是4.7 gb。
例1.3要想把硬碟上20 gb資訊傳送到一組cd上,需要多少張cd?
硬碟上确切的位元組數是20×10 737 412 824,每片cd上的位元組數是650×1 048 576。然而,如果你滿足于近似值,你可以估計硬碟上是20×109位元組,每片cd是650×106位元組。需要的cd數量是(20×109)/(650×106)=31張。 □
usb閃存驅動器(flash drive),也稱為拇指驅動器,其實并不是一個磁盤驅動器。它是一個沒有移動部件的固态裝置,用來模仿硬碟驅動器的行為。縮寫usb表示通用串行總線(universal serial bus),它定義了許多硬碟驅動器和計算機系統之間的連接配接協定。當你把一個拇指驅動器插在計算機上時,對計算機來說,它就好像一個硬碟驅動器一樣。因為拇指驅動器沒有移動部件,是以它比硬碟驅動器要耐用,也不像硬碟驅動器,它是可移動的,存儲容量可以達到大約16 gb。
滑鼠(mouse)是一種非常常用的手持輸入裝置。光學滑鼠内部是一個小的發光二極管,它向下在桌面或者滑鼠墊上投射光束,光反射回一個每秒采樣1 500次的傳感器。滑鼠裡有一個數字信号處理器,它像一個被程式設計為隻處理一個任務的微小計算機:探測桌面或者滑鼠墊圖像中的模式,并确定從上次采樣到現在它們移動了多遠。滑鼠中的這個處理器從模式中計算滑鼠的方向和速度,然後把這些資料發送到個人計算機,計算機再在顯示器上顯示光标圖像。
條形碼讀碼器(bar code reader)是另一種高效的輸入裝置。最常見的條形碼也許就是超市商品上的通用産品代碼(universal product code,upc)(見圖1-13)。upc符号中的每個數字有7個垂直的資料元素,每個資料元素是白色或者黑色。條形碼讀碼器中的光電管檢測明暗區域并把它們轉換為比特,白色元素被讀為0,黑色元素被讀為1。圖1-14展示了圖1-13中upc符号右半部分中兩位數字的比特與黑白區域之間的對應關系。
圖1-15給出了upc中十進制數值和二進制數值之間的對應關系,左半部分和右半部分中的字元代碼是不一樣的。一個黑色的豎條是由1~4個相鄰的黑色區域構成,每個十進制數字都含有兩個黑條和2個白色的空間。左半部分的字元都始于白條終于黑條,右半部分的字元都始于黑條終于白色空間;每個左半部分的字元都有奇數個1,而每個右半部分的字元有偶數個1。
超市的收銀員在最高的抽象層次工作,他們不需要知道upc符号的細節,隻知道要錄入upc符号,如果沒有聽到确認的“哔”聲,那就是發生了錄入錯誤,必須重新掃描條形碼。然而在較低層次的程式員必須知道編碼的細節。例如,他們的程式必須檢測左半部分每個字元的1或者黑色元素的個數,如果左半部分的字元1的個數是偶數,那麼程式就不能釋出确認的哔聲。
1.2.2輸出裝置
輸出裝置(output device)從計算機的存儲器傳送資訊到外部世界。圖1-16展示了資料從主存到輸出裝置的通路。輸出時,資料經過與輸入裝置使用的一樣的總線。輸出裝置包括:
顯示屏(screen)。
列印機。
需要注意的是,磁盤驅動器和usb閃存驅動器既可以作為輸入裝置也可以作為輸出裝置。當磁盤用于輸入時,這個過程叫作讀;當磁盤用于輸出時,這個過程叫作寫。
顯示屏是一種類似于電視機螢幕的視覺顯示裝置,它可以是陰極射線管(crt)或平闆。顯示器是與鍵盤、cpu分開包裝的。終端(terminal)是顯示器加鍵盤。終端雖然好像是但其實并不是一台完備的通用個人計算機。終端與工作站和大型主機通信,沒有這些背景裝置,終端是沒有用的。另一方面,個人計算機是完備的,就算不連接配接到更大的機器也能處理資訊。個人計算機也能像終端一樣和其他機器通信。在計算機發展的早期,一台标準終端顯示屏有24行文本,一行最多80個字元。随着圖形使用者界面的出現,顯示屏的大小不再是固定的文本行數,因為視窗和對話框的大小可以是各種各樣的。不過,個人計算機上的終端仿真器程式在代表終端的視窗中有時遵循24行80字元的老标準。
顯示屏上的單個字元實際上是由一個矩形點陣網格組成,每個點稱為像素(pixel),它代表圖像的元素。在黑白顯示屏上,一個像素或明或暗。矩形網格中亮像素的模式形成了字元的圖像。圖1-17顯示了一個形成字元‘b’的5列7行的像素網格。更高品質的顯示屏在矩形網格中有更多的像素來形成更平滑的字元圖像。你看在9×13這樣的區域中,‘b’的圖像是多麼清晰。
列印機(printer)在性能和價格方面的差别很大。噴墨列印機的工作原理和顯示屏上顯示像素是一樣的。當列印頭移動通過紙張時,在适當的時刻向紙面噴射小的墨滴,形成所期望的圖像。由計算機程式來控制釋放墨水的時機。和顯示屏一樣,形成單個字元的點的數量越多,列印出來的圖像品質就越高。許多列印機有多種運作模式,從低品質高速度到高品質低速度。
頁面列印機是一種高品質的輸出裝置。大多數頁面列印機用雷射束在頁面上形成圖像。頁面列印機的成像系統也使用像素,但是像素間隔足夠緊密到不易察覺。一台常用的桌面雷射列印機每英寸有600或1 200像素,一台每英寸600像素的列印機每平方英寸有600×600(即360 000)像素,而商用排版機器每英寸有2 400像素或者更多。
1.2.3主存儲器
主存儲器(main memory,簡稱為主存)存儲被處理的資料和處理資料的程式。和磁盤一樣,主存也是用位元組來度量其容量的。小的個人計算機通常有1 gb主存,大的能夠達到8 gb;工作站通常有大于8 gb的主存;而大型主機有數百gb的主存。
主存的一個重要特性是,它是易失的。即,如果計算機的供電被有意或無意地中斷,那麼主存中的資訊就會丢失,而磁盤不會這樣。你可以從一台計算機上拔掉usb閃存,關掉機器,第二天回來時資訊仍然在你的閃存裡。
主存的另一個重要特性是,它的通路方式是随機的。實際上,組成主存的電子元件經常稱作随機通路存儲器(random access memory,ram)電路。不像硬碟驅動器,如果你剛從主存的一端獲得一些資訊,你可以不用經過中間的資訊立刻随機地從另一端得到資訊。
1.2.4中央處理單元
中央處理單元(central processing unit,cpu)包括控制計算機所有其他部分的電路。它有自己的存儲器,稱為寄存器(register)。cpu電路中也永久固化有一組指令。這些指令完成的工作有:從存儲器擷取資訊到寄存器、加、減、比較、把資訊從寄存器存儲回存儲器等。指令執行的順序不是固定不變的,這是由第三層的機器語言編寫的程式所決定的。
按照人的标準,機器指令的執行是很快的。cpu的速度一般用ghz(即千兆赫茲)來度量。1 hz是每秒1條指令,是以,1 ghz就是每秒10億條指令。
例1.4假設cpu的頻率是2.5 ghz,執行一條指令的平均時長是多少?
2.5 ghz表示每秒2.5×109條指令,那麼每條指令的時長是1/(2.5×109)=0.4×10-9秒或400皮秒。 □
為了處理存儲在主存中的資料,cpu必須首先把資料放到自己本地的寄存器中,然後處理這些資料,再把結果傳回到主存。最終,資料必須傳送到輸出裝置才能為使用者所用。圖1-18展示了一個完整作業的資料流。