计算机组成原理详解
目錄
- 一、計算機組成原理
- 1. 什么是計算機?
- 2. 為什么要用計算機?
- 3. 計算機的五大組成部分
- 4. 操作系統概述
- 二、CPU工作原理
- CPU工作流程
- CPU指令集
- 啟動計算機
一、計算機組成原理
1. 什么是計算機?
俗稱電腦,即通電的大腦,電腦二字蘊含了人類對計算機的終極期望,希望它能真的像人腦一樣去工作,從而解放人力。
2. 為什么要用計算機?
世界是由聰明的懶人統治的,任何時期,總有一群聰明的懶人想要奴隸別人。在奴隸制社會,聰明的懶人奴役的是真正的人,而人是無法不吃、不喝、不睡覺一直工作的,但是計算機作為一臺機器是可以做到的,所以把計算機當奴隸是上上之選。
3. 計算機的五大組成部分
計算機有五大組成部分,既然計算機是人的奴隸,那么計算機設計核心肯定也是在模仿真正的人,所以我們完全可以把計算機的五大組件比喻成人類的各種器官
- 控制器
控制器是計算機的指揮系統,用來控制計算機其他組件的運行,相當于人類的大腦 - 運算器
運算器是計算機的運算功能,用來做算術運算和邏輯運算,相當于人腦。
ps:控制器+運算器=CPU,cpu相當于人的大腦 - 存儲器
存儲器是計算機的記憶功能,用來存取數據。
存儲器主要分為內存與外存:
? 內存相當于人的短期記憶。斷電數據丟失
? 外存(如磁盤),相當于記事的本子,斷電數據不會丟失,是用來永久保存數據的
? ps:內存的存取速度要遠遠高于外存 - 輸入設備input
輸入設備是計算接收外界輸入數據的工具,如鍵盤、鼠標,相當于人的眼睛或耳朵。 - 輸出設備output
輸出設備是計算機向外輸出數據的工具,如顯示器、打印機,相當于人說的話,寫出的文章。
ps:存儲器如內存、磁盤等既是輸入設備又是輸出設備,統稱為IO設備
一個非常重要的基礎知識:與運行程序相關的三大核心硬件
我們編寫的程序一定是要運行于計算機硬件之上,而站在硬件的角度,與運行程序有關的三大核心硬件為CPU、內存、硬盤。
程序最先是存放于硬盤中的,程序的運行是先從硬盤把代碼加載到內存中,然后cpu是從內存中讀取指令運行。
4. 操作系統概述
-
操作系統的由來
? 大前提:我們編程目的就是為了奴役計算機,讓計算機硬件自發地運行起來,然而硬件畢竟是”死的“,硬件的運行都是由軟件支配。倘若我們要開發一個應用程序,比如暴風音影,該軟件的一個核心業務就是播放視頻,開發者若要編寫程序完成播放視頻這個業務邏輯,必先涉及到底層硬件硬盤的基本運作(視頻文件都是先存放于硬盤中),這意味著開發者在編寫業務邏輯代碼之前,必須先編寫一個控制硬盤基本運行的控制程序,然而這僅僅只是一個開始,事實上,在編寫應用程序的業務邏輯前,需要開發者編寫出一套完整的控制程序用來控制所有硬件的基本運行(這要求開發者需要詳細了解計算機硬件的各種控制細節,例如我們必須把CPU里面所有指令集都掌握一遍),如此,所有的開發者在開發程序時都必須依次開發兩種:
1、編寫一套完整的的控制程序,用來控制硬件的基本運行,以及把復雜的硬件的操作封裝成簡單的接口
2、基于控制程序的接口開發包含一系列業務邏輯的程序,為了與控制程序區分,可以稱為應用程序,以ATM這款應用程序為例,業務邏輯有提款、轉賬、查詢余額等
? 綜上,對于不同公司的開發者來說,應用程序的業務邏輯各不相同,但硬件的控制程序都大致相同,為了避免所有程序員做重復勞動,以及不用再耗費精力去了解所有硬件的運行細節,有公司專門跳出來承擔起控制程序的開發任務,這里所說的控制程序指的就是操作系統。
? 操作系統的功能就是幫我們把復雜的硬件的控制封裝成簡單的接口,對于開發應用程序來說只需要調用操作系統提供給我們的接口即可 -
系統軟件與應用軟件
硬件以上運行的都是軟件,而軟件分為兩類: - 應用軟件(例如qq、word、暴風影音、酷我音樂、pycharm等)
- 操作系統,操作系統應用軟件與硬件之間的一個橋梁,是協調、管理、控制計算機硬件與應用軟件資源的控制程序。
-
計算機系統三層結構
綜上,我們開發應用程序本質是在控制硬件,但是我們直接打交道的是操作系統,應用程序都是通過操作系統來間接地操作硬件的,所以一套完整的計算機系統分為三層,如下
-
平臺
應用程序都是運行于操作系統之上,而操作系統則是運行于硬件之上的,所以承載應用程序的是一臺運行有操作系統的計算機,稱之為應用程序的運行平臺,即:硬件 + 操作系統 == 平臺
常見的平臺有:windows系統+某款硬件、linux系統+某款硬件、ubuntu+某款硬件等,我們在開發應用程序時就需要考慮到應用程序的跨平臺性,如果能開發出一款可以在任意平臺運行的應用程序,那對于開發者來說真是極大的福音。而決定應用軟件的跨平臺性的關鍵因素往往是編程語言的選擇,python恰好是一款跨平臺性語言,這也是我們學習它的原因之一。
二、CPU工作原理
CPU工作流程
CPU的核心工作在于進行運算和判斷,那么要被運算與判斷的數據是從哪里來的?
CPU讀取的數據都是從主存儲器(內存)來的,主存儲器內的數據則是從輸入單元所傳輸進來!而CPU處理完畢的數據也必須先寫回主存儲器中,最后數據才從主存儲器傳輸到輸出單元。
所以計算機五大組成部分的基本工作流程就是:輸入單元=>主存儲器=>CPU=>主存儲器=>輸出單元
而CPU會從內存中取指令->解碼->執行,然后再取指->解碼->執行下一條指令,周而復始,直至整個程序被執行完成。
總結CPU的大致工作流程就是:獲取指令—>解碼—>執行,詳細見下圖
CPU指令集
cpu是計算機的大腦,大腦里集成了一系列具體控制身體其他器官做事的指令集,所以站在純硬件角度去看,計算機所有其他組件都由cpu發出的指令控制。
我們程序員編程的目的是為了控制計算機硬件工作,程序員的代碼都會轉換成cpu的指令集才能去控制其他硬件,所以程序員是通過直接控制cpu來達到間接控制其他硬件的目的,具體流程如下:
內存中存放的是程序員的代碼/指令,cpu從內存中取出這些指令后需要翻譯成自己的指令去執行,即cpu在出場時內部就集成了一系列的指令集(指令集是cpu的靈魂)。
? 在超大規模集成電路構成的微型計算機中,往往將CPU制成一塊具有特定功能的芯片,稱為微處理器,芯片里邊有編寫好的微指令集,我們在主機上的所有操作或者說任何軟件的執行最終都要轉化成cpu的指令去執行,如輸入輸出,閱讀,視頻,上網等這些都要參考CPU是否內置有相關微指令集才行,如果沒有,那么CPU無法處理這些操作。
? 不同的CPU指令集不同對應的功能也不同,這就好比不同的人腦,對于大多數人類來說,人腦的結構一樣,但是大家的智商都有差別。
那么目前世界上的主流CPU由那些呢?我們筆記本上貼的Intel、AMD是怎么回事呢?
1、CPU的分類(了解)
我們已經知道CPU內部是含有微指令集的,我們所使用的的軟件都要經過CPU內部的微指令集來完成才行。這些指令集的設計主要又被分為兩種設計理念,這就是目前世界上常見到的兩種主要的CPU種類:分別是精簡指令集(RISC)與復雜指令集(CISC)系統。下面我們就來談談這兩種不同CPU種類的差異!
-
精簡指令集(了解)
精簡指令集(Reduced Instruction Set Computing,RISC):這種CPU的設計中,微指令集較為精簡,每個指令的運行時間都很短,完成的動作也很單純,指令的執行效能較佳;但是若要做復雜的事情,就要由多個指令來完成。常見的RISC指令集CPU主要例如Sun公司的SPARC系列、IBM公司的Power Architecture(包括PowerPC)系列、與ARM系列等。【注:Sun已經被Oracle收購;】
SPARC架構的計算機常用于學術領域的大型工作站中,包括銀行金融體系的主服務器也都有這類的計算機架構;
PowerPC架構的應用,如Sony出產的Play Station 3(PS3)使用的就是該架構的Cell處理器。
ARM是世界上使用范圍最廣的CPU了,常用的各廠商的手機、PDA、導航系統、網絡設備等,幾乎都用該架構的CPU。 -
復雜指令集
復雜指令集(Complex Instruction Set Computer,CISC)與RISC不同,在CISC的微指令集中,每個小指令可以執行一些較低階的硬件操作,指令數目多而且復雜,每條指令的長度并不相同。因此指令執行較為復雜所以每條指令花費的時間較長,但每條個別指令可以處理的工作較為豐富。常見的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架構的CPU。 -
總結:
CPU按照指令集可以分為精簡指令集CPU和復雜指令集CPU兩種,區別在于前者的指令集精簡,每個指令的運行時間都很短,完成的動作也很單純,指令的執行效能較佳;但是若要做復雜的事情,就要由多個指令來完成。后者的指令集每個小指令可以執行一些較低階的硬件操作,指令數目多而且復雜,每條指令的長度并不相同。因為指令執行較為復雜所以每條指令花費的時間較長,但每條個別指令可以處理的工作較為豐富。
2、x86架構64位
- x86架構
x86是針對cpu的型號或者說架構的一種統稱,詳細地講,最早的那顆Intel發明出來的CPU代號稱為8086,后來在8086的基礎上又開發出了80285、80386…,因此這種架構的CPU就被統稱為x86架構了。
由于AMD、Intel、VIA所開發出來的x86架構CPU被大量使用于個人計算機上面,因此,個人計算機常被稱為x86架構的計算機!
程序員開發出的軟件最終都要翻譯成cpu的指令集才能運行,因此軟件的版本必須與cpu的架構契合,舉個例子,我們在MySQL官網下載軟件MySQL時名字為:
Windows(x86,32-bit),ZIP Archive
(mysql-5.7.20-win32.zip)
我們發現名字中有x86,這其實就是告訴我們:該軟件應該運行在x86架構的計算機上。 - 64位
cpu的位數指的是cpu一次性能從內存中取出多少位二進制指令,64bit指的是一次性能從內存中取出64位二進制指令。
在2003年以前由Intel所開發的x86架構CPU由8位升級到16、32位,后來AMD依此架構修改新一代的CPU為64位,到現在,個人計算機CPU通常都是x86_64的架構。
cpu具有向下兼容性,指的是64位的cpu既可以運行64位的軟件,也可以運行32位的軟件,而32位的cpu只能運行32位的軟件。這其實很好理解,如果把cpu的位數當成是車道的寬,而內存中軟件的指令當做是待通行的車輛,寬64的車道每次肯定既可以通行64輛車,也可以通信32輛車,而寬32的車道每次卻只能通行32輛車
3、CPU歷史(了解)
微處理器由一片或少數幾片大規模集成電路組成的中央處理器。這些電路執行控制部件和算術邏輯部件的功能。微處理器能完成取指令、執行指令,以及與外界存儲器和邏輯部件交換信息等操作,是微型計算機的運算控制部分。它可與存儲器和外圍電路芯片組成微型計算機。
計算機的發展主要表現在其核心部件——微處理器的發展上,每當一款新型的微處理器出現時,就會帶動計算機系統的其他部件的相應發展,如計算機體系結構的進一步優化,存儲器存取容量的不斷增大、存取速度的不斷提高,外圍設備的不斷改進以及新設備的不斷出現等。根據微處理器的字長和功能,可將其發展劃分為以下幾個階段。
第1階段(1971——1973年)是4位和8位低檔微處理器時代,通常稱為第1代。
第2階段(1974——1977年)是8位中高檔微處理器時代,通常稱為第2代。
第3階段(1978——1984年)是16位微處理器時代,通常稱為第3代。
第4階段(1985——1992年)是32位微處理器時代,又稱為第4代。
第5階段(1993-2005年)是奔騰(pentium)系列微處理器時代,通常稱為第5代。
第6階段(2005年至今)是酷睿(core)系列微處理器時代,通常稱為第6代。“酷睿”是一款領先節能的新型微架構,設計的出發點是提供卓然出眾的性能和能效,提高每瓦特性能,也就是所謂的能效比。
4、 運算器與控制器(了解)
常將運算器和控制器合稱為中央處理器(Central Processing Unit,CPU)。
其中運算器用來主要負責程序運算與邏輯判斷,控制器則主要協調各組件和各單元的工作,所以CPU的工作主要在于管理和運算。可以說計算機的大腦就是CPU
運算器
運算器是對信息進行處理和運算的部件。經常進行的運算是算術運算和邏輯運算,所以運算器又可稱為算術邏輯運算部件(Arithmetic and Logical,ALU)。
運算器的核心是加法器。運算器中還有若干個通用寄存器或累加寄存器,用來暫存操作數并存放運算結果。寄存器的存取速度比存儲器的存放速度快很多。
控制器
控制器是整個計算機的指揮中心,它的主要功能是按照人們預先確定的操作步驟,控制整個計算機的各部件有條不紊的自動工作。
控制器從主存中逐條地讀取出指令進行分析,根據指令的不同來安排操作順序,向各部件發出相應的操作信號,控制它們執行指令所規定的任務。控制器中包括一些專用的寄存器。
5、cpu工作的兩種狀態內核態與用戶態
內核態:運行的程序是操作系統,可以操作計算機硬件
用戶態:運行的程序是應用程序,不可以直接操作計算機硬件
應用程序的運行必然涉及到計算機硬件的操作,所以計算機在工作時候頻繁發生內核態與用戶態的切換
6、多線程和多核芯片
moore定律指出,芯片中的晶體管數量每18個月翻一倍,隨著晶體管數量的增多,更強大的功能成為了可能,如
第一步增強:在cpu芯片中加入更大的緩存,一級緩存L1,用和cpu相同的材質制成,cpu訪問它沒有時延
第二步增強:一個cpu中的處理邏輯增多,intel公司首次提出,稱為多線程(multithreading)或超線程(hyperthreading),對用戶來說一個有兩個線程的cpu就相當于兩個cpu,我們后面要學習的進程和線程的知識就起源于這里,進程是資源單位而線程才是cpu的執行單位。
多線程運行cpu保持兩個不同的線程狀態,可以在納秒級的時間內來回切換,速度快到你看到的結果是并發的,偽并行的,然而多線程不提供真正的并行處理,一個cpu同一時刻只能處理一個進程(一個進程中至少一個線程)
第三步增強:除了多線程,還出現了包含2個或者4個完整處理器的cpu芯片,如下圖。要使用這類多核芯片肯定需要有多處理操作系統
7、 存儲器
-
寄存器即L1緩存:
用與cpu相同材質制造,與cpu一樣快,因而cpu訪問它無時延,典型容量是:在32位cpu中為3232,在64位cpu中為6464,在兩種情況下容量均<1KB。 -
高速緩存即L2緩存:
主要由硬件控制高速緩存的存取,內存中有高速緩存行按照064字節為行0,64127為行1。。。最常用的高速緩存行放置在cpu內部或者非常接近cpu的高速緩存中。當某個程序需要讀一個存儲字時,高速緩存硬件檢查所需要的高速緩存行是否在高速緩存中。如果是,則稱為高速緩存命中,緩存滿足了請求,就不需要通過總線把訪問請求送往主存(內存),這畢竟是慢的。高速緩存的命中通常需要兩個時鐘周期。高速緩存為命中,就必須訪問內存,這需要付出大量的時間代價。由于高速緩存價格昂貴,所以其大小有限,有些機器具有兩級甚至三級高速緩存,每一級高速緩存比前一級慢但是容易大。
緩存在計算機科學的許多領域中起著重要的作用,并不僅僅只是RAM(隨機存取存儲器)的緩存行。只要存在大量的資源可以劃分為小的部分,那么這些資源中的某些部分肯定會比其他部分更頻發地得到使用,此時用緩存可以帶來性能上的提升。一個典型的例子就是操作系統一直在使用緩存,比如,多數操作系統在內存中保留頻繁使用的文件(的一部分),以避免從磁盤中重復地調用這些文件,類似的/root/a/b/c/d/e/f/a.txt的長路徑名轉換成該文件所在的磁盤地址的結果然后放入緩存,可以避免重復尋找地址,還有一個web頁面的url地址轉換為網絡地址(IP)地址后,這個轉換結果也可以緩存起來供將來使用。
緩存是一個好方法,在現代cpu中設計了兩個緩存,再看4.1中的兩種cpu設計圖。第一級緩存稱為L1總是在CPU中,通常用來將已經解碼的指令調入cpu的執行引擎,對那些頻繁使用的數據自,多少芯片還會按照第二L1緩存 。。。另外往往設計有二級緩存L2,用來存放近來經常使用的內存字。L1與L2的差別在于對cpu對L1的訪問無時間延遲,而對L2的訪問則有1-2個時鐘周期(即1-2ns)的延遲。
內存:
RAM: 主存通常稱為隨機訪問存儲RAM,就是我們通常所說的內存,容量一直在不斷攀升,所有不能再高速緩存中找到的,都會到主存中找,主存是易失性存儲,斷電后數據全部消失
ROM: 除了主存RAM之外,許多計算機已經在使用少量的非易失性隨機訪問存儲如ROM(Read Only Memory,ROM),在電源切斷之后,非易失性存儲的內容并不會丟失,ROM只讀存儲器在工廠中就被編程完畢,然后再也不能修改。ROM速度快且便宜,在有些計算機中,用于啟動計算機的引導加載模塊就存放在ROM中,另外一些I/O卡也采用ROM處理底層設備的控制。
EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,但是與ROM相反,他們可以擦除和重寫。不過重寫時花費的時間比寫入RAM要多。在便攜式電子設備中中,閃存通常作為存儲媒介。閃存是數碼相機中的膠卷,是便攜式音譯播放器的磁盤,還應用于固態硬盤。閃存在速度上介于RAM和磁盤之間,但與磁盤不同的是,閃存擦除的次數過多,就被磨損了。
CMOS: 還有一類存儲器就是CMOS,它是易失性的,許多計算機利用CMOS存儲器來保持當前時間和日期。CMOS存儲器和遞增時間的電路由一小塊電池驅動,所以,即使計算機沒有加電,時間也仍然可以正確地更新,除此之外CMOS還可以保存配置的參數,比如,哪一個是啟動磁盤等,之所以采用CMOS是因為它耗電非常少,一塊工廠原裝電池往往能使用若干年,但是當電池失效時,相關的配置和時間等都將丟失
# TB,PB, Eb, Zb, YB 1B= 8bit 1KB=2(10)B=1024B; 括號中的數字為2的指數(即多少次方) 1MB=2(10)KB=1024KB=2(20)B; 1GB=2(10)MB=1024MB=2(30)B。 1TB=2(10) GB=1024GB=2(40)B 1PB=2(10) TB=1024TB=2(50)B 1EB=2(10) PB=1024PB=2(60)B 1ZB=2(10) EB=1024EB=2(70)B 1YB=2(10) ZB=1024ZB=2(80)B 1Byte相當於一個英文字母 Kilobyte(KB)=1024B相當於一則短篇故事的內容。 Megabyte(MB)=l024KB相當於一則短篇小說的文字內容。 Gigabyte(GB)=1024MB相當於貝多芬第五樂章交響曲的樂譜內容。 Terabyte(TB)=1024GB相當於一家大型醫院中所有的X光圖片資訊量。 Petabyte(PB)=l024TB相當於50%的全美學術研究圖書館藏書資訊內容。 Exabyte (EB)=1024PB;5EB相當於至今全世界人類所講過的話語。 Zettabyte(ZB)=1024EB如同全世界海灘上的沙子數量總和。 Yottabyte(YB)=1024ZB相當於7000位人類體內的微細胞總和。8、虛擬內存:
許多計算機支持虛擬內存機制,該機制使計算機可以運行大于物理內存的程序,方法是將正在使用的程序放入內存取執行,而暫時不需要執行的程序放到磁盤的某塊地方,這塊地方成為虛擬內存,在linux中成為swap,這種機制的核心在于快速地映射內存地址,由cpu中的一個部件負責,成為存儲器管理單元(Memory Management Unit MMU)
PS:從一個程序切換到另外一個程序,成為上下文切換(context switch),緩存和MMU的出現提升了系統的性能,尤其是上下文切換
啟動計算機
在計算機的主板上有一個基本的輸入輸出程序(Basic Input Output system)
BIOS就相當于一個小的操作系統,它有底層的I/O軟件,包括讀鍵盤,寫屏幕,進行磁盤I/O,該程序存放于一非易失性閃存RAM中。
啟動流程:
1.計算機加電
2.BIOS開始運行,檢測硬件:cpu、內存、硬盤等
3.BIOS讀取CMOS存儲器中的參數,選擇啟動設備
4.從啟動設備上讀取第一個扇區的內容(MBR主引導記錄512字節,前446為引導信息,后64為分區信息,最后兩個為標志位)
5.根據分區信息讀入bootloader啟動裝載模塊,啟動操作系統
6.然后操作系統詢問BIOS,以獲得配置信息。對于每種設備,系統會檢查其設備驅動程序是否存在,如果沒有,系統則會要求用戶按照設備驅動程序。一旦有了全部的設備驅動程序,操作系統就將它們調入內核。然后初始有關的表格(如進程表),穿件需要的進程,并在每個終端上啟動登錄程序或GUI
linux系統centos7啟動順序:https://www.cnblogs.com/linhaifeng/articles/13274099.html
總結
- 上一篇: 排队论
- 下一篇: 冰河木马实验(V8.4)