一 為何要學習計算機基礎python是編程語言,,即python是語言 語言有英語、法語,、葡萄牙語等,,但凡是語言,都是用來溝通的介質,。 程序員編程的本質就是讓計算機去工作,,而編程語言就是程序員與計算機溝通的介質 程序員要想讓計算機工作,必須知道計算機能干什么,,怎么干的,,這也就是我們必須學習計算機基礎的原因
然而光有編程語言和硬件也并不能滿足大家的編程需求,為什么這么說呢? 程序用編程語言寫程序,,最終開發(fā)出的結果就是一個軟件,,既然是軟件,那就與騰訊qq,、暴風影音,、快播等軟件沒有區(qū)別了。這些軟件必須運行在操作系統(tǒng)之上,,你肯定會問:為何要有操作系統(tǒng)呢,?沒錯,遠古時代的程序員確實是在沒有操作系統(tǒng)的環(huán)境下,,用編程語言之間操作硬件來編程的,,你可能覺得這沒有問題,但其實問題是相當嚴重的,,因為此時你必須掌握如何操作硬件的所有具體細節(jié),,比如如何具體操作硬盤(現(xiàn)在你得把硬盤拆開,然后你能看見的所有的東西,,你都得研究明白,,因為你編程時要用到它),這就嚴重影響了開發(fā)的效率,,操作系統(tǒng)的出現(xiàn)就是運行于硬件之上,,來控制硬件的,我們開發(fā)時,,只需要調用操作系統(tǒng)為我們提供的簡單而優(yōu)雅的接口就可以了
所以一套完整的計算機系統(tǒng)分為:計算機硬件,,操作系統(tǒng),應用軟件,,如下圖,。因而我們的python編程之路分為計算機硬件基礎,操作系統(tǒng)基礎,,和python編程三部分,,就讓我們先從計算機硬件學起吧 二 本節(jié)目標
三 計算機硬件發(fā)展史http://www.cnblogs.com/linhaifeng/p/6428430.html 四:計算機硬件介紹計算機硬件有五大部分:(計算機是人的奴隸,可以將其當作一個人去看,,請思考下述組件等同于人的哪些器官) #1,、控制器:計算機的指揮系統(tǒng)??刂破魍ㄟ^地址訪問存儲器,,從存儲器中取出指令,經(jīng)譯碼器分析后,,根據(jù)指令分析結果產(chǎn)生相應的操作控制信號作用于其他部件,,使得各部件在控制器控制下有條不紊地協(xié)調工作,。 #2、運算器:實現(xiàn)算術運算和邏輯運算的部件,。 #3,、存儲器:是計算機用來存放所有數(shù)據(jù)和程序的記憶部件。它的基本功能是按指定的地址存(寫)入或者?。ㄗx)出信息,。 計算機中的存儲器可分成兩大類:一類是內存儲器,簡稱內存或主存,;另一類是外存儲器(輔助存儲器),,簡稱外存或輔存。 存儲器由若干個存儲單元組成,,每個存儲單元都有一個地址,,計算機通過地址對存儲單元進行讀寫。一個存儲器所包含的字節(jié)數(shù)稱為存儲容量,,單位有B,、KB、MB,、GB,、TB等。 #4,、輸入設備:是向計算機中輸入信息(程序,、數(shù)據(jù)、聲音,、文字,、圖形、圖像等)的設備,。常見的輸入設備有:鍵盤,、鼠標,、圖形掃描儀,、觸摸屏、條形碼輸入器,、光筆等,。 外存儲器也是一種輸入設備。 #5,、輸出設備:主要有顯示器,、打印機和繪圖儀等。外存儲器也當作一種輸出設備,。 控制器+運算器=CPU,,CPU,、內存(主存儲器)以及其他I/O設備都由一條系統(tǒng)總線(bus)連接起來并通過總線與其他設備通信 現(xiàn)代計算機的結構更復雜,包括多重總線,,我們將在后面的小節(jié)介紹,,此時暫且讓我們以下圖為例來介紹各個部件 cpu是人的大腦,負責控制全身和運算 內存是人的記憶,,負責臨時存儲 硬盤是人的筆記本,,負責永久存儲 輸入設備是耳朵或眼睛或嘴巴,負責接收外部的信息存入內存 輸出設備是你的臉部(表情)或者屁股,,負責經(jīng)過處理后輸出的結果 以上所有的設備都通過總線連接,,總線相當于人的神經(jīng)
上課開始,老師講課,,學生聽課,,老師是程序員,學生是計算機,,學生的器官都是計算機各部分組成 1.你通過耳朵接收老師講的知識->輸入 2.通過自己的神經(jīng),,將接收的數(shù)據(jù)存入自己的內存/短期記憶(總線、內存) 3.光聽不行,,你還需要反應/處理老師講的知識,,于是你的大腦/cpu從短期記憶里取出知識/指令,分析知識/指令,,然后學習知識/執(zhí)行指令 (cpu取指,、分析、執(zhí)行) 4.你通過作業(yè)或者說話輸出你學到的結果 5.你想要永久將知識保存下來,,只能拿出一個筆記本,,把剛剛學會的知識都寫到本子上,這個本子就是硬盤(磁盤) 4.1 處理器通常將運算器和控制器合稱為中央處理器(Central Processing Unit,,CPU),。其中運算器用來主要負責程序運算與邏輯判斷,控制器則主要協(xié)調各組件和各單元的工作,,所以CPU的工作主要在于管理和運算,。可以說計算機的大腦就是CPU,,它從內存中取指令->解碼->執(zhí)行,,然后再取指->解碼->執(zhí)行下一條指令,周而復始,,直至整個程序被執(zhí)行完成,。 既然CPU的重點在于進行運算和判斷,那么要被運算與判斷的數(shù)據(jù)是從哪里來的,?CPU讀取的數(shù)據(jù)都是從主存儲器(內存)來的,!主存儲器內的數(shù)據(jù)則是從輸入單元所傳輸進來,!而CPU處理完畢的數(shù)據(jù)也必須先寫回主存儲器中,最后數(shù)據(jù)才從主存儲器傳輸?shù)捷敵鰡卧?/strong> 綜合上面所說的,,我們會知道其實計算機是由:輸入單元,、輸出單元、CPU(控制單元,、算術邏輯單元)與主存儲器五大單元構成的,。也可以說CPU+輸入輸出+主存儲器構成了電子計算機的三大核心組件,相關性如下圖: 在超大規(guī)模集成電路構成的微型計算機中,,往往將CPU制成一塊具有特定功能的芯片,,稱為微處理器,芯片里邊有編寫好的微指令集,我們在主機上的所有操作或者說任何軟件的執(zhí)行最終都要轉化成cpu的指令去執(zhí)行,如輸入輸出,,閱讀,,視頻,上網(wǎng)等這些都要參考CPU是否內置有相關微指令集才行,。如果沒有那么CPU無法處理這些操作,。不同的CPU指令集不同對應的功能也不同,這就好比不同的人腦,,對于大多數(shù)人類來說,,人腦的結構一樣,但是大家的智商都有差別,。 那么目前世界上的主流CPU由那些呢,?我們筆記本上貼的Intel、AMD是怎么回事呢,?下面我們來認識一下,;
View Code
了解寄存器
處理器設計的演變 1.最開始取值、解碼,、執(zhí)行這三個過程是同時進行的,,這意味著任何一個過程完成都需要等待其余兩個過程執(zhí)行完畢,時間浪費 2.后來被設計成了流水線式的設計,,即執(zhí)行指令n時,,可以對指令n+1解碼,并且可以讀取指令n+2,完全是一套流水線,。 3.超變量cpu,,比流水線更加先進,,有多個執(zhí)行單元,,可以同時負責不同的事情,比如看片的同時,,聽歌,,打游戲,。 兩個或更多的指令被同時取出、解碼并裝入一個保持緩沖區(qū)中,,直至它們都執(zhí)行完畢,。只有有一個執(zhí)行單元空閑,就檢查保持緩沖區(qū)是否還有可處理的指令 這種設計存在一種缺陷,,即程序的指令經(jīng)常不按照順序執(zhí)行,,在多數(shù)情況下,硬件負責保證這種運算結果與順序執(zhí)行的指令時的結果相同,。 內核態(tài)與用戶態(tài)
CPU的兩種工作狀態(tài):內核態(tài)與用戶態(tài)
多線程和多核芯片 moore定律指出,,芯片中的晶體管數(shù)量每18個月翻一倍,隨著晶體管數(shù)量的增多,,更強大的功能稱為了可能,,如 I.第一步增強:在cpu芯片中加入更大的緩存,一級緩存L1,,用和cpu相同的材質制成,,cpu訪問它沒有時延 II.第二步增強:一個cpu中的處理邏輯增多,intel公司首次提出,,稱為多線程(multithreading)或超線程(hyperthreading),,對用戶來說一個有兩個線程的cpu就相當于兩個cpu,我們后面要學習的進程和線程的知識就起源于這里,,進程是資源單位而線程才是cpu的執(zhí)行單位,。 多線程運行cpu保持兩個不同的線程狀態(tài),可以在納秒級的時間內來回切換,,速度快到你看到的結果是并發(fā)的,,偽并行的,然而多線程不提供真正的并行處理,,一個cpu同一時刻只能處理一個進程(一個進程中至少一個線程) III.第三步增強:除了多線程,,還出現(xiàn)了傲寒2個或者4個完整處理器的cpu芯片,如下圖,。要使用這類多核芯片肯定需要有多處理操作系統(tǒng)
4.2 存儲器計算機中第二重要的就是存儲了,,所有人都意淫著存儲:速度快(這樣cpu的等待存儲器的延遲就降低了)+容量大+價錢便宜。然后同時兼?zhèn)淙呤遣豢赡艿?,所以有了如下的不同的處理方?/p> 存儲器系統(tǒng)采用如上圖的分層結構,,頂層的存儲器速度較高,容量較小,,與底層的存儲器相比每位的成本較高,,其差別往往是十億數(shù)量級的
寄存器即L1緩存: 用與cpu相同材質制造,與cpu一樣快,因而cpu訪問它無時延,,典型容量是:在32位cpu中為32*32,,在64位cpu中為64*64,在兩種情況下容量均<1KB,。 高速緩存即L2緩存: 主要由硬件控制高速緩存的存取,,內存中有高速緩存行按照0~64字節(jié)為行0,64~127為行1,。,。。最常用的高速緩存行放置在cpu內部或者非常接近cpu的高速緩存中,。當某個程序需要讀一個存儲字時,,高速緩存硬件檢查所需要的高速緩存行是否在高速緩存中。如果是,,則稱為高速緩存命中,,緩存滿足了請求,就不需要通過總線把訪問請求送往主存(內存),,這畢竟是慢的,。高速緩存的命中通常需要兩個時鐘周期。高速緩存為命中,,就必須訪問內存,,這需要付出大量的時間代價。由于高速緩存價格昂貴,,所以其大小有限,,有些機器具有兩級甚至三級高速緩存,每一級高速緩存比前一級慢但是容易大,。 緩存在計算機科學的許多領域中起著重要的作用,,并不僅僅只是RAM(隨機存取存儲器)的緩存行。只要存在大量的資源可以劃分為小的部分,,那么這些資源中的某些部分肯定會比其他部分更頻發(fā)地得到使用,,此時用緩存可以帶來性能上的提升。一個典型的例子就是操作系統(tǒng)一直在使用緩存,,比如,,多數(shù)操作系統(tǒng)在內存中保留頻繁使用的文件(的一部分),以避免從磁盤中重復地調用這些文件,,類似的/root/a/b/c/d/e/f/a.txt的長路徑名轉換成該文件所在的磁盤地址的結果然后放入緩存,,可以避免重復尋找地址,還有一個web頁面的url地址轉換為網(wǎng)絡地址(IP)地址后,,這個轉換結果也可以緩存起來供將來使用,。 緩存是一個好方法,在現(xiàn)代cpu中設計了兩個緩存,再看4.1中的兩種cpu設計圖,。第一級緩存稱為L1總是在CPU中,通常用來將已經(jīng)解碼的指令調入cpu的執(zhí)行引擎,,對那些頻繁使用的數(shù)據(jù)自,,多少芯片還會按照第二L1緩存 。,。,。另外往往設計有二級緩存L2,用來存放近來經(jīng)常使用的內存字,。L1與L2的差別在于對cpu對L1的訪問無時間延遲,,而對L2的訪問則有1-2個時鐘周期(即1-2ns)的延遲。 內存: 再往下一層是主存,,此乃存儲器系統(tǒng)的主力,,主存通常稱為隨機訪問存儲RAM,就是我們通常所說的內存,,容量一直在不斷攀升,,所有不能再高速緩存中找到的,都會到主存中找,,主存是易失性存儲,,斷電后數(shù)據(jù)全部消失 除了主存RAM之外,許多計算機已經(jīng)在使用少量的非易失性隨機訪問存儲如ROM(Read Only Memory,,ROM),,在電源切斷之后,非易失性存儲的內容并不會丟失,,ROM只讀存儲器在工廠中就被編程完畢,,然后再也不能修改。ROM速度快且便宜,,在有些計算機中,,用于啟動計算機的引導加載模塊就存放在ROM中,另外一些I/O卡也采用ROM處理底層設備的控制,。 EEPROM(Electrically Erasable PROM,,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,但是與ROM相反,,他們可以擦除和重寫,。不過重寫時花費的時間比寫入RAM要多。在便攜式電子設備中中,,閃存通常作為存儲媒介,。閃存是數(shù)碼相機中的膠卷,是便攜式音譯播放器的磁盤,還應用于固態(tài)硬盤,。閃存在速度上介于RAM和磁盤之間,,但與磁盤不同的是,閃存擦除的次數(shù)過多,,就被磨損了,。
還有一類存儲器就是CMOS,它是易失性的,,許多計算機利用CMOS存儲器來保持當前時間和日期,。CMOS存儲器和遞增時間的電路由一小塊電池驅動,所以,,即使計算機沒有加電,,時間也仍然可以正確地更新,除此之外CMOS還可以保存配置的參數(shù),,比如,,哪一個是啟動磁盤等,之所以采用CMOS是因為它耗電非常少,,一塊工廠原裝電池往往能使用若干年,,但是當電池失效時,相關的配置和時間等都將丟失 4.3 磁盤
磁盤低速的原因是因為它一種機械裝置,,在磁盤中有一個或多個金屬盤片,,它們以5400,7200或10800rpm(RPM =revolutions per minute 每分鐘多少轉 )的速度旋轉,。從邊緣開始有一個機械臂懸在盤面上,,這類似于老式黑膠唱片機上的拾音臂。信息卸載磁盤上的一些列的同心圓上,,是一連串的2進制位(稱為bit位),,為了統(tǒng)計方法,8個bit稱為一個字節(jié)bytes,,1024bytes=1k,,1024k=1M,1024M=1G,所以我們平時所說的磁盤容量最終指的就是磁盤能寫多少個2進制位,。 每個磁頭可以讀取一段換新區(qū)域,,稱為磁道 把一個戈丁手臂位置上所以的磁道合起來,組成一個柱面 每個磁道劃成若干扇區(qū),,扇區(qū)典型的值是512字節(jié) 數(shù)據(jù)都存放于一段一段的扇區(qū),,即磁道這個圓圈的一小段圓圈,從磁盤讀取一段數(shù)據(jù)需要經(jīng)歷尋道時間和延遲時間 平均尋道時間 機械手臂從一個柱面隨機移動到相鄰的柱面的時間成為尋到時間,,找到了磁道就以為著招到了數(shù)據(jù)所在的那個圈圈,,但是還不知道數(shù)據(jù)具體這個圓圈的具體位置 平均延遲時間
機械臂到達正確的磁道之后還必須等待旋轉到數(shù)據(jù)所在的扇區(qū)下,,這段時間成為延遲時間
虛擬內存:
許多計算機支持虛擬內存機制,該機制使計算機可以運行大于物理內存的程序,,方法是將正在使用的程序放入內存取執(zhí)行,,而暫時不需要執(zhí)行的程序放到磁盤的某塊地方,這塊地方成為虛擬內存,,在linux中成為swap,,這種機制的核心在于快速地映射內存地址,由cpu中的一個部件負責,,成為存儲器管理單元(Memory Management Unit MMU)
PS:從一個程序切換到另外一個程序,,成為上下文切換(context switch),緩存和MMU的出現(xiàn)提升了系統(tǒng)的性能,,尤其是上下文切換
4.4 磁帶在價錢相同的情況下比硬盤擁有更高的存儲容量,,雖然速度低于磁盤,但是因其大容量,,在地震水災火災時可移動性強等特性,,常被用來做備份。(常見于大型數(shù)據(jù)庫系統(tǒng)中) 4.5 I/O設備 cpu和存儲器并不是操作系統(tǒng)唯一需要管理的資源,,I/O設備也是非常重要的一環(huán),。 見四中的圖,I/O設備一般包括兩個部分:設備控制器和設備本身,。 控制器:是查找主板上的一塊芯片或一組芯片(硬盤,,網(wǎng)卡,聲卡等都需要插到一個口上,,這個口連的便是控制器),,控制器負責控制連接的設備,它從操作系統(tǒng)接收命令,,比如讀硬盤數(shù)據(jù),,然后就對硬盤設備發(fā)起讀請求來讀出內容。 控制器的功能:通常情況下對設備的控制是非常復雜和具體的,,控制器的任務就是為操作系統(tǒng)屏蔽這些復雜而具體的工作,,提供給操作系統(tǒng)一個簡單而清晰的接口 設備本身:有相對簡單的接口且標準的,這樣大家都可以為其編寫驅動程序了,。要想調用設備,,必須根據(jù)該接口編寫復雜而具體的程序,于是有了控制器提供設備驅動接口給操作系統(tǒng),。必須把設備驅動程序安裝到操作系統(tǒng)中,。 4.5 輸入輸出設備#1、輸入設備 輸入設備的任務是把人們編好的程序和原始數(shù)據(jù)送到計算機中去,,并且將他們轉換成計算機內存所能識別和接受的信息方式,。 安輸入信息的形態(tài)可分為字符(包括漢字)輸入,、圖形輸入、圖像輸入及語言輸入等,。目前,,常見的輸入設備有:鍵盤、鼠標,、掃描儀等,。輔助存儲器(磁盤、磁帶)也可以看作輸入設備,。另外,,自動控制和檢測系統(tǒng)中使用的模數(shù)(A/D)轉換裝置也是一種輸入設備。 #2,、輸出設備 輸出設備的任務是將計算機的處理結果以人或其他設備所能接受的形式送出計算機,。 目前最常用的輸出設備是打印機和顯示器。輔助存儲器也可以看做輸出設備,。另外,,數(shù)模(D/A)轉換裝置也是一種輸出設備。 4.6 總線四小節(jié)中的結構在小型計算機中沿用了多年,,并也用在早期的IBM PC中,。但是隨著處理器和存儲器速度越來越快,單總線很難處理總線的交通流量了,,于是出現(xiàn)了下圖的多總線模式,,他們處理I/O設備及cpu到存儲器的速度都更快。 北橋即PCI橋:連接高速設備 南橋即ISA橋:連接慢速設備 主板圖解: 電源(Power)==心臟:所有的組件要能運作,,得要有足夠的電力供給才行,。這就好像心臟一樣,如果心臟不跳動了,,人就嗝屁了,,電腦也是如果沒有電源,那也就是一堆垃圾,,什么作用都沒有,。 4.7 啟動計算機在計算機的主板上有一個基本的輸入輸出程序(Basic Input Output system) BIOS就相當于一個小的操作系統(tǒng),它有底層的I/O軟件,,包括讀鍵盤,,寫屏幕,進行磁盤I/O,該程序存放于一非易失性閃存RAM中,。
啟動流程 1.計算機加電 2.BIOS開始運行,,檢測硬件:cpu、內存,、硬盤等 3.BIOS讀取CMOS存儲器中的參數(shù),,選擇啟動設備 4.從啟動設備上讀取第一個扇區(qū)的內容(MBR主引導記錄512字節(jié),,前446為引導信息,后64為分區(qū)信息,,最后兩個為標志位) 5.根據(jù)分區(qū)信息讀入bootloader啟動裝載模塊,,啟動操作系統(tǒng) 6.然后操作系統(tǒng)詢問BIOS,以獲得配置信息,。對于每種設備,,系統(tǒng)會檢查其設備驅動程序是否存在,如果沒有,,系統(tǒng)則會要求用戶按照設備驅動程序,。一旦有了全部的設備驅動程序,操作系統(tǒng)就將它們調入內核,。然后初始有關的表格(如進程表),,穿件需要的進程,并在每個終端上啟動登錄程序或GUI |
|