當前位置:首頁 > 科技 > 正文

圖解軟件:1. 什麼是計算機

第1章 什麼是計算機

作為開始,我們先來說說計算機到底是一種什麼樣的電子設備,它是由哪些部分組成的,以及這些部分在計算機程序運行的過程中都起到了什麼樣的作用。

1.1 CPU

計算機這個名詞你肯定都已經聽過很多次了。而且,很多人在日常辦公的過程中都離不開計算機。即使你平常用不到傳統意義上的計算機(或者說電腦),那起碼也應該用過智能手機,對吧?智能手機在中國的普及率已經相當高了。智能手機,甚至智能手表,也都是一種計算機,一種微型的計算機。在十幾、二十年前,人們還把可以擺在桌面上、包含了獨立的主機箱、顯示器、鍵盤、鼠标的那種計算機稱作微型計算機。但現如今,這種桌面電腦早已算不上微型的計算機了。

計算機最核心的部件其實隻有三個,即:控制器、運算器和存儲器。其中,控制器和運算器是中央處理器的主要組成部分。中央處理器也就是我們常說的CPU(Center Processing Unit)。CPU其實是一種集成電路。這種電路一般會由光刻機蝕刻到一塊矽基晶圓之上,再經過切割分離成一個一個的CPU。一個CPU中可以包含數以十億計的晶體管(可理解為電控開關)。

圖 1-1 一塊經蝕刻後的完整晶圓

自本世紀以來,CPU的性能提升方向已經從縱向轉為了橫向。這是什麼意思呢?原來的CPU中隻有一套可以互相配合并獨立對外提供計算能力的集成電路。這樣的一套電路被稱為一個CPU核心(core)。隻擁有一個CPU核心的CPU也被稱為單核CPU。要想進一步提高單核CPU的性能,我們就必須再改進CPU核心中的電路結構,以及再增加其中的電路密度。這就是所謂的縱向,即:隻聚焦于單核心之内的優化。

圖 1-2 單核CPU内部的大緻結構

圖注:

CPU電路闆:CPU芯片中的電路底闆,用于承載CPU核心以及相關的器件。

到了本世紀初,單個CPU核心中的電路密度已經很接近物理上的極限了。所以,各家CPU廠商都開始陸續地研發并推出了擁有多個核心的CPU,也稱多核CPU。顧名思義,一個多核CPU中會擁有多個CPU核心,或者說多套集成電路。這些CPU核心之間即保持着獨立又可以相互協作,從而能夠大大地增加多核CPU的性能。目前市場中發售的CPU内部大都擁有幾個或十幾個核心,有的最新的CPU甚至擁有幾十個核心之多。

圖 1-3 多核CPU内部的大緻結構

每一個CPU核心都會有自己獨立的控制器、運算器和寄存器。簡單來說,控制器指揮着運算器和寄存器,并以此來實現CPU指令的執行,以及數據的讀出和寫入。運算器主要用于各種算術和邏輯運算操作,比如算術中的加、減、乘、除,邏輯上的與、或、非、異或,以及移位、比較、傳送等。寄存器的作用是,在進行上述的運算操作期間,或者更通俗地講,在CPU運行計算機程序的過程中,臨時存儲那些馬上就要用到的指令和數據。這包括CPU指令、中間運算結果、程序運行狀态,以及相關的内存地址,等等。控制器和運算器都會頻繁地用到寄存器,甚至會獨占一些寄存器,所以它們之間的聯系是相當緊密的。

剖析控制器和運算器的運作原理都需要很多計算機專業的知識,因此我們對它們的介紹就暫時到此為止。我們下面重點來說說計算機核心部件中的存儲器。

1.2 存儲器

存儲器其實是一個通用的概念。隻要能夠把數據寫進來、讀出去,還能在一定條件下存得住數據的器件都可以被稱為存儲器。像已經基本絕迹的軟盤,以及我們現在常見的硬盤、U盤、光盤刻錄機都是存儲器。更确切地說,它們都屬于外存儲器。

圖 1-4 各種各樣的存儲器

這裡有一個概念需要特别說明一下。寬泛地講,指令也可以算作是一種數據,一種可以驅使CPU執行運算任務的特殊數據。一條CPU指令就代表着CPU可以執行的某項操作,其中會包含操作的代碼(或者說代号)和涉及的操作數(也可能是操作數在存儲器中的存儲地址,或者說存放位置)。這樣的操作可以是,對一個數進行正負号的反轉、對兩個數進行相加,等等。因此,我們在後面有時也會用“數據”這個詞來統稱指令和數據本身。不過不要忘了,“數據”原本指的是,靜靜地躺在存儲器中的、具有一定的結構(或者說格式)的一般性内容。

我們再說回存儲器。作為計算機核心部件的存儲器隻有三種,即:寄存器、高速緩存和内存儲器(也就是我們常說的内存)。我們在前面已經講過了寄存器的用途。它是CPU核心裡面的一種器件。雖然高速緩存也用于暫存指令和數據,但它暫存的往往是近期會用到的數據,而不是馬上就要用的數據。實際上,高速緩存是CPU核心(包括寄存器)與内存之間的橋梁。它的數據存儲容量要比寄存器大得多,但卻比内存小得多。而它的數據存取速度要比内存快得多,但卻比寄存器慢得多。

圖 1-5 寄存器、高速緩存與内存儲器的特征

由此,我們可以說,高速緩存的作用就是為CPU進行數據的緩沖。一旦把近期很可能會用到的數據先拷貝進高速緩存,(當CPU真正要使用它們的時候)就能夠以快得多的速度進行讀出了。正因為如此,高速緩存所處的位置在寄存器與内存之間。更确切地說,高速緩存通常會被封裝在CPU的電路闆之上,但會被隔離在CPU核心之外。

圖 1-6 寄存器、高速緩存與内存儲器的位置

你可能仍然有一個疑惑,為什麼不能讓CPU核心直接去訪問内存呢?或者說,為什麼不讓CPU核心直接存取内存中的數據呢?兩點之間直線最短啊,為什麼還要繞到高速緩存那裡呢?

要知道,很早以前的CPU裡是沒有高速緩存的。那是因為,那時候的CPU的運轉速度與内存的運轉速度相差并不是特别大。但是現在不同了,随着不斷的改進,CPU的運轉速度已經提高太多了。它在效率方面已經遠遠地甩開了内存。如果依然按照之間的連接方法,CPU就會嚴重地受到内存的拖累,從而根本無法産生應有的功效。與内存相比,高速緩存的容量很小,但是速度很快,很适合實現重要數據的臨時存儲和就近訪問。它可以有效地彌補CPU與内存之間的鴻溝,對CPU來說越來越重要,所以最終被集成在了CPU之内。

強調一下,寄存器基本上隻為CPU核心的當前運算任務提供數據存儲支持,而高速緩存主要是為了解決(CPU與内存之間的)效率差的。另外,内存主要負責裝載需要運行的計算機程序以及相關的數據。它同樣是計算機正常運行所必需的器件。

而且還要注意,這三種存儲器都無法持久地存儲數據。其中的數據都是斷電即丢失的。而且,由于它們的容量都比較小,所以其中隻會暫存對計算機的正常運行來說最重要的那部分數據。而其餘的更多的數據,都會被存儲在外存儲器上。

從原理上講,外存儲器是可以持久存儲數據的。一旦數據被存儲在其中,就不會因沒有電力供應而丢失。我們平常使用的各種計算機,包括桌面電腦、筆記本電腦、智能手機以及智能手表都一定會擁有硬盤這類外存儲器。我們自己編寫的文檔、從網絡中下載的音樂,以及衆多的計算機軟件都會被儲存到硬盤之上。所以說,硬盤是計算機本身最大、最基礎的資料庫。當我們要繼續編寫文檔、播放音樂、運行軟件的時候,計算機一定會先從這個資料庫中讀出相應的數據。

總之,這些存儲器都各有各的特點,各有各的作用。

1.3 數據的流動

請看下面這幅圖。它展現了數據在計算機的各個存儲器之間的流動。

圖 1-7 數據在各個存儲器之間的流動

我們剛才提到,當計算機需要運行軟件(即一系列程序的組合)或使用數據的時候,會先從硬盤中讀出它們。讀到哪裡呢?計算機會先把這些相關的數據(包括指令和數據本身)讀出到内存當中。換句話說,它會把将要用到的數據從硬盤複制到内存。

請注意,所謂的數據在各個存儲器之間的流動,是通過複制來實現的,而不是移動。移動數據意味着,數據會出現在新的位置上,但不會再存在于原先的位置上。而複制數據是指,數據會出現在新的位置上,且仍會在原先的位置上保留。對于複制這個操作,我們可以說,處在新位置上的數據是處在舊位置上的數據的副本。

我們接着講正題。隻有處在内存當中的程序(即一系列指令的組合)和數據才有可能被CPU拿去使用。對于它們來說,處于内存當中是為CPU所用的必要條件。簡單來說,當CPU準備運行程序的時候,會把當前要執行的指令以及鄰近的一些指令從内存複制到高速緩存當中。如果在執行指令的過程中,CPU發現需要用到某些數據,那麼它還會把那些數據以及相鄰的一些數據也複制到高速緩存裡。

這裡存在着兩個基本的假設:

如果内存的某個位置上的數據剛剛被CPU用到了,那麼它很可能會在近期被再次使用;

如果一個内存位置上的數據剛剛被CPU用過了,那麼在其鄰近位置上的數據很可能也會在近期被使用。

高速緩存到底會緩沖哪些數據?基于的就是上述假設。與此同時,高速緩存在緩沖新的數據的時候,如果發現其容量不夠了,那麼它就會先删除掉其中那些在最近很少被用到的數據。

讓我們說得更簡單、宏觀一些。CPU将要用到的指令和數據會一步一步地從離它更遠且速度更慢的存儲器中被複制過來。複制到哪裡呢?複制到離CPU更近但容量更小的存儲器裡。正因為離CPU越近的存儲器容量越小,所以越到後面其緩沖的數據量也就越小。到了寄存器這一層,它就隻能暫存那些CPU馬上就要用到的指令和數據了。但由于它的存取速度相當快,因此CPU立刻就能拿到數據并加以使用。

另一個方面,如果CPU需要将新數據(比如運算結果等)寫入存儲器,或者需要對現有的數據進行更新,那麼這些數據的流動方向就會與讀出它們時正好相反,即:從寄存器,到高速緩存,再到内存,甚至到硬盤。不過,與數據的讀出不同的是,數據的寫入所面臨的實際情況要複雜一些。這會涉及到數據一緻性、數據緩沖策略、程序性能等諸多問題。

綜上所述,經過一級一級的準備、一層一層的緩沖,CPU執行程序的速度可以得到極大的優化。這些存儲器在這裡都起到了非常關鍵的作用。

1.4 存儲器的層次

計算機中的衆多存儲器共同組成了一種層級結構。如下圖所示。

圖 1-8 衆多存儲器組成的層次結構

圖注:

單位造價:每存儲一個單位(如一個字節)的數據所需要的器件制造成本。

本地:可以理解為當前的計算機。

遠程:可以理解為除當前計算機以外的其他計算機。這是一個比較籠統的詞。處在當前計算機之外的、可以被當前計算機訪問到的空間都可以算是“遠程的”。不論這個訪問的途徑是家用網絡、專有線路、公共互聯網還是通訊衛星,都是如此。

計算機主闆:計算機中用于承載其核心部件(如CPU芯片和内存)、周邊部件(如硬盤、顯卡、聲卡等)以及相關器件的電路底闆。

圖中共有7個層級,包含了目前主流的計算機涉及到的衆多存儲器。層級越低的存儲器容量越小,速度越快,其集成度越高(如寄存器會被集成到CPU核心裡,它距離CPU核心中的控制器和運算器最近)。也正因為如此,層級越低的存儲器的單位造價越高。

1.5 小結

好了,我們現在來總結一下。

我們在本章簡要地介紹了一下計算機的各個組成部分及其含義和用途。計算機最核心的部件有:控制器、運算器和存儲器。其中,控制器和運算器是被集成在CPU核心當中的。除此之外,CPU核心中還包含了一種存儲器——寄存器。

現如今,擁有多個CPU核心的CPU(即多核CPU)已經很普遍了。在這樣的CPU當中,核心之間即獨立又協同。這裡的獨立指的是,每一個CPU核心都擁有自己的控制器、運算器和寄存器。而協同的意思是,這些CPU核心可以相互配合、共同對外提供強大的計算能力。

在上述器件之中,存儲器對于普通的軟件開發者和使用者來說是最直觀和有用的。顧名思義,能夠存儲數據的器件就叫做存儲器。此外,存儲器通常還會提供數據讀出和寫入的功能。

寄存器處于CPU核心之内,高速緩存處于CPU核心之外的CPU電路闆之上,而内存儲器(即内存)就屬于CPU之外的器件了。但由于CPU運行程序、使用數據都必須通過内存,所有它對于計算機來說也是不可或缺的。像硬盤這樣的外存儲器雖然不屬于計算機的核心部件,不過我們在日常肯定會需要這樣的大容量資料庫,因此計算機中也不能少了它們。

最後,計算機正常運行所需的程序和數據,以及我們需要用到的各種軟件和文件,都會被儲存在某個存儲器當中。在真正使用它們之前,計算機都會先把它們放到内存裡,并在适當的時候将它們複制到高速緩存和寄存器之中。另一方面,一旦有新數據要存儲,或者要更新現有的數據,計算機就會把它們從寄存器逐步地複制到高速緩存、内存甚至硬盤之上。通過說明計算機對各種存儲器的利用,我們就能夠從側面了解到計算機的基本運轉方式。

在介紹了計算機自身的各種器件(即硬件)之後,我們會從下一章開始涉及那些依托于計算機硬件的數據和軟件。

你可能想看:

有話要說...

取消
掃碼支持 支付碼