計算機組成原理

                             計算機組成原理

Linux 操作系統是UNIX 操作系統的一種克隆系統。它誕生于1991 年的10 月5 日(這是第一次正式向外公布的時間)。以后借助于Internet 網絡,并經過全世界各地計算機愛好者的共同努力下,現已成為今天世界上使用最多的一種UNIX 類操作系統,并且使用人數還在迅猛增長。當然,對于零基礎的同學來說,在學習Linux之前,我們先來了解一些計算機的基礎知識。

1.1計算機基礎

1946年2月14日,由美國軍方定制的世界上第一臺電子計算機“電子數字積分計算機”(ENIAC Electronic Numerical And Calculator)在美國賓夕法尼亞大學問世了,自此計算機以驚人的速度發展。

1.1.1 計算機的硬件組成

從ENIAC到當前最先進的計算機都采用的是馮·諾依曼體系結構。所以馮·諾依曼被計算機界稱為數字計算機之父。馮諾依曼提出將計算機分為5大結構,分別是:控制器,運算器,存儲器,輸入與輸出設備。控制器控制著各大部件的運作,運算器實現算術運算和邏輯運算,存儲器用來實現數據的存儲,輸入輸出設備負責數據流的輸入與輸出。如圖1-1

          blob.png

                        圖1-1

                                             

計算機的5大部件在控制器的統一指揮下,有條不紊的自動工作。由于運算器和控制器在邏輯關系上聯系十分緊密,尤其在大規模集成電路制造工藝出現后,這兩大部件往往集成在同一芯片上,我們將它稱之為CPU。把輸入輸出設備稱為I/O設備,而且各位要注意的是,我們所說的主機是指:CPU+內存。

要知道的是,計算機只識別二進制,所謂的二進制,簡單的理解來說就是表示兩種狀態,用0或1來表示。所以數據在計算機中的形式就是用二進制來表示的。每一種狀態(0或1)我們稱作一個位(bit),在計算機中,我們將8位為一個組,稱為一個字節。那么數據就是以字節的方式存儲在內存單元中。至于到底以多少字節存儲,這還要看它的數據類型。

當然,我們不扯那么遠,回到正題,那么CPU要想處理數據,必須從內存中取出數據操作的指令。那么什么是指令?說的簡單點,計算機指令就是指揮機器工作的指示和命令,程序就是一系列按一定順序排列的指令,執行程序的過程就是計算機的工作過程。所以我們也可以說,程序是由數據+指令組成。每個CPU都有自己的一套處理數據的指令,這就是指令集,他們的實現方式可能有所不同,所以有可能造成的問題就是,系統移植困難,即平臺的不兼容。

常見的CPU類型:x86、x86_64,常見的就是我們電腦通常使用的Intel的CPU和AMD的CPU;IBM公司生產的服務器AIX使用的就是CPU架構是powerpc;HP公司的服務器HP-UX使用的CPU架構是Alpha;還有就是我們手機常見的ARM架構。為什么我要談這個呢?因為至少現在我們要知道,CPU根據指令的類型分為精簡指令集(Reduced Instruction Set Computing )和復雜指令集(Complex Instruction Set Computing)。RISC與CISC的區別在于:RISC是在CISC指令系統基礎上發展起來的,有人對CISC機進行測試表明,各種指令的使用頻度相當懸殊,最常使用的是一些比較簡單的指令,它們僅占指令總數的20%,但在程序中出現的頻度卻占80%。復雜的指令系統必然增加微處理器的復雜性,使處理器的研制時間長,成本高。并且復雜指令需要復雜的操作,必然會降低計算機的速度。屬于RISC類的CPU:powerpc、arm、alpha。那么CISC:Intel、AMD。另外要知道的是,RISC型CPU與Intel和AMD的CPU在軟件和硬件上都不兼容。也就是說,由于微指令集的不同,所以將一款CPU的計算機設計的程序放到另一款CPU上的計算機去,可能無法運行。這就是我們應該考慮的CPU的兼容性問題。

好的,到目前為止至少我們知道了,CPU要想處理數據,需要從內存中去獲取到處理數據的指令,但是另外要知道的是CPU的處理速度比內存處理的速度要快的多,那怎么辦呢?那么為了協調CPU與內存之間的速度匹配問題,我們在其中間加入了緩存。實際工作時,CPU往往需要重復讀取同樣的數據塊,而緩存容量的增大,可以大幅度提升CPU內部讀取數據的命中率,而不用再到內存或者硬盤上尋找,以此提高系統性能。但是由于CPU芯片面積和成本的因素來考慮,緩存都很小。所以在CPU內部,緩存又分成了一級緩存,二級緩存等等,這就是為了減少在內存上搜索數據時的CPU等待時間。那CPU從內存或緩存中取出指令,放在哪里呢?CPU從存儲器或緩存中取出指令,放入指令寄存器,并對指令譯碼。它把指令分解成一系列的微操作,然后發出各種控制命令,執行微操作系列,從而完成一條指令的執行。

說了這么多,無非就是想簡單的描述一下CPU工作的概念過程,為了便于學習的理解,現在我們重新總結:

第一階段:CPU從存儲器或緩存中檢索指令,由程序計數器(Program Counter)指定存儲指令的位置。(程序計數器是寄存器的一種,它的作用是存放著下一條指令的地址,程序計數器簡稱PC)。這個過程是是將內存中的指令復制到寄存器中去,我們稱為加載。

第二階段:CPU根據存儲器提取到的指令來決定其執行行為。我們稱為操作。

第三階段:接著進入執行階段。該階段中,連接到各種能夠進行所需運算的CPU部件。例如,要求一個加法運算,算術邏輯單元(ALU,Arithmetic Logic Unit)將會連接到一組輸入和一組輸出。輸入提供了要相加的數值,而輸出將含有總和的結果。ALU內含電路系統,易于輸出端完成簡單的普通運算和邏輯運算(比如加法和位元運算)。如果加法運算產生一個對該CPU處理而言過大的結果,在標志暫存器里可能會設置運算溢出(Arithmetic Overflow)標志。

第四階段:運算器運算的結果會被暫時寫入到寄存器,再由寄存器寫回內存,這個過程我們稱之為存儲。隨之,PC計數器里面的值更新,指向下一條要處理的指令。這個過程稱為跳轉。

說到這,我們可以發現,CPU和內存可以說是計算機的核心結構了,那么我們現在單獨來介紹計算機硬件中一些比較重要的概念。

CPU

CPU可以稱作微處理器,它是計算機系統的核心,CPU進行算術運算或者邏輯運算并且管理來自主存的指令并執行它。CPU的操作對象是二進制數據;數據由0 和1 組成。1 和0 對應著電子開關的開路與斷路狀態。CPU的執行由外部時鐘來監控。這個時鐘稱為系統時鐘,它每隔相同的時間間隔就向CPU發送一個脈沖。在每個時鐘脈沖上,CPU都會做一些工作。比如,CPU每個時鐘脈沖上執行一條指令。CPU的速度一般以系統時鐘的速率來描敘,我們稱之為主頻。一個100MHz 的處理器每秒將接收100,000,000 個時鐘滴答,這就意味著CPU可以有100,000,000個指令周期,但是用CPU主頻來描敘CPU的工作能力是不正確的,因為它們所包含的指令集不同,所以執行的指令不相同,既然執行的指令不同,所以它的指令周期就不同,所以拿主頻來進行不同CPU性能的比較是不合適的。另外,CPU的主頻很高,但是內存的速度卻無法達到CPU的速度,所以不僅看主頻,還要看CPU與內存之間同步的那個頻率,這個頻率我們叫做外頻。此外,要處理的指令必須是從內存中取出來的,至于一次性從內存中取出多少位(bit),關鍵還是要看CPU的機器字長。如32位的CPU,那么一次性能從內存中取出2^32Bytes,大概就是4G的樣子,這也是為什么32位的CPU最大只能支持4G的內存,當然你也可以采取一些技術去擴展內存,但是這里我們就不多解釋了。那么指令從內存中出去來之后必須要放在一個合適的地方,這個地方就是我們的寄存器了。寄存器存放著來自內存的指令并且執行其里面存放的指令。不同的CPU,其寄存器的大小,數量,類型也不同。但是大概也差不多。比如我們上面所說的PC(程序計數器),他就是其中的一款寄存器,它的作用是存放著下一條指令的地址。另外,如果需要重復訪問內存一些數據,可以臨時存儲在堆棧指針寄存器(SP)中,它采用先進先出(棧)先進后出(堆)的方式來進行臨時數據的訪問。然后,指令的執行結果將保存在狀態寄存器(PS)中,當然,為了方便理解,我只是簡化了這些寄存器的作用,如果想知道更詳細的內容,可以查閱相關資料。

內存

所有計算機系統都有一個由不同速度與大小的存儲器組成的層次結構。最快的存儲器是高速緩存,它被用來暫存主存中的內容。這種存儲器速度非??斓浅0嘿F,大多數CPU都含有少量的片上高速緩存或者將其放在主板上。通過加入這種緩存中間層的機制,使得CPU與內存之間更加協調工作。具體我們可以看下圖:

               blob.png

       一般來說,越靠近寄存器的價格越高,容量越小,并且訪問數據的速度快。

總線

主板上分立的部件通過稱為總線的線路連接在一起。系統總線的功能在邏輯上被劃分為三部分:

地址總線數據總線控制總線。地址總線為數據傳輸指明內存位置(地址)。數據總線包含傳輸的數據。數據總線是雙向的;它允許數據讀入CPU也支持從CPU讀出來。控制總線則包含幾條表示路由分時和系統的控制信號。這些總線通過總線插槽與擴展設備控制器連接,常見的總線接口有:例如ISA 和PCI,總之,總線是將外設連接到系統的常用方式。至于具體內容,可網上瀏覽。

控制器和外設

外設是一些物理設備,比如說圖象卡或者磁盤,它們受控于位于主板或者主板上插槽中的控制芯片。IDE 磁盤被IDE 控制器芯片控制,而SCSI 磁盤由SCSI 磁盤控制器芯片控制。這些控制器通過各種總線連接到CPU 上或相互間互連。目前制造的大多數系統使用PCI 和ISA總線來連接主要系統部件。控制器是一些類似CPU 的處理器,它們可以看做CPU 的智能幫手。CPU 則是系統的總控,而控制器可以理解為是他們管理I/O設備的秘書。在總線上的每個控制器可以被CPU 所單獨尋址,這是軟件設備驅動程序能寫入寄存器并能控制這些控制器的原因。

I/O端尋址

CPU為了訪問外設控制器上的數據和狀態信息,需要首先指出它們的地址,這種地址稱為I/O端口地址,或者簡稱端口。通常一個I/O控制器的端口包括了訪問數據的數據端口,輸入命令的命令端口,和控制器執行狀態的狀態端口。端口地址的設置方法一般有兩種:統一編址獨立編址。

端口統一編址的原理是把I/O控制器中的端口地址歸入存儲器尋址地址空間范圍內。因此這種編址方式也稱為存儲器映像編址。CPU訪問一個端口的操作與訪問內存的操作一樣,也使用訪問內存的指令。端口獨立編址的方法是把I/O控制器的尋址空間單獨作為一個獨立的地址空間對待,稱為I/O地址空間。每個端口有一個I/O地址與之對應,并且使用專門的I/O指令來訪問端口。一般選擇采用的是端口獨立編址的方式

比如:我要輸入echo “hello”命令,讓其在屏幕上顯示,那么首先,我們要將echo “hello”這些字符用鍵盤輸入,鍵盤上有一個稱為鍵盤編碼器的東西,它專門用來掃描按鍵所按下和松開的狀態信息(我們叫它掃描碼),并且將這些掃描碼發送到鍵盤控制器中。每當我們敲入一個按鍵后,那么CPU就會尋址鍵盤控制器的端口,然后賦予鍵盤控制器一些處理權限,于是鍵盤控制器將接收過來的掃描碼進行解碼,并把解碼的數據發送到操作系統的鍵盤數據隊列中,再由控制器將權利并執行結果的狀態信息交還給CPU,CPU根據執行的結果的狀態信息并通過尋址找到顯卡控制器所對應的端口,然后賦予顯卡控制器相應的處理權限,顯卡控制器通過I/O操作指令,對其相應的I/O端口區域進行寫操作,這樣屏幕的內容就顯示出來了。還是那句話,這里只是簡化了具的工作過程,反正我的理解就是,CPU訪問I/O設備,就會將自己的秘書(I/0控制器)叫來,然后把什么事情都交給秘書做就行了,然后做完事情之后,秘書要把做好的結果上報給領導(CPU),然后由領導決定下一件事該做啥。

CPU訪問I/O設備的方式

CPU訪問I/O設備有三種方式:輪詢、中斷、DMA(直接訪問內存)。下面我們分別來進行介紹:

    輪詢:就是CPU通過循環查詢I/O設備來查看控制器中的狀態信息。也就是說,CPU會挨家挨戶的查看哪個I/O設備有請求。這種方式耗費了大量的CPU的時間,所以效率不怎么好。

    中斷:說的通俗點,就是CPU不再挨家挨戶去看誰有請求了,而是等待有I/O請求的設備去叫它,也就是說,你需要請求寫操作,你就申請,這時候,CPU就會放下手頭要處理的事情,馬上去響應你的回答,這就是我們所說的中斷。當完成中斷請求的服務后,CPU又會繼續做剛才停下來的事情。Linux大多數I/O設備控制都采用這樣的方式。

    DMA:直接訪問內存,上面的輪詢和中斷都需要經過CPU的處理,才能將它搬入內存,那么采用DMA技術,數據不需要經過CPU而直接進入內存,這樣操作的效率很高。

原創文章,作者:N24_小輝,如若轉載,請注明出處:http://www.www58058.com/54900

(1)
N24_小輝N24_小輝
上一篇 2016-10-27
下一篇 2016-10-27

相關推薦

  • 馬哥教育網絡班21期+第八周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:也叫做橋接器,工作在OSI七層中第二層數據鏈路層,主要是用來連接兩個局域網的一種存儲或者轉發設備,它能將一個大的LAN分隔      為多個網段,也可以將多個LAN互聯為一個邏輯LAN,網橋是在數據層上實現的局域網互聯;即使…

    Linux干貨 2016-09-08
  • 軟件包管理(rpm篇)

    軟件包管理(rpm篇)靜態和動態鏈接    鏈接主要作用是把各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確地銜接,分為靜態鏈接和動態鏈接    靜態鏈接        把程序對應的依賴庫復制一份到包&nbsp…

    Linux干貨 2017-04-24
  • 馬哥教育網絡班19期+第九周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin),分別這兩類用戶的個數,通過字符串比較來實現。 #!/bin/bash for user_shell in `awk -F: '{print $7}'&nbsp…

    Linux干貨 2016-07-01
  • LVM 邏輯卷管理器

    1、什么是LVM:PV、PE、VG、LV的意義    LVM:Logical Volume Manager(邏輯卷管理器),可以將多個物理分區整合成看起來像一個磁盤一樣,并可隨意增加或減少邏輯卷大小 dm:device mapper,將一個或多個底層塊設備組織成一個邏輯設備的模塊; /dev/mapper/VG_NAME-LV_NAME …

    Linux干貨 2016-09-19
  • grep文本查找和正則表達式

    一、grep grep: (Global search REgular expression and Print outthe line)全局查找正則表達式并且打印結果行。不會對輸入的文本進行修改。 Unix的grep家族包括grep、egrep和fgrep,egrep是grep的擴展,支持更多的正則元字符; fgrep就是fixed grep或f…

    Linux干貨 2016-08-07
  • pam_mysql認證ftp虛擬用戶賬號

    pam_mysql認證ftp虛擬用戶賬號: 虛擬用戶:        用戶賬號存儲于何處?        文件、MySQL、Redis、…       &nb…

    2017-06-13
欧美性久久久久