計算機基礎知識

爲什麼學學習計算機基礎python

            編程語言,簡單的說就是語言,語言有英語,法語,日語,但凡是語言,都是用開溝通的介質。程序員要讓計算機工做,必須知道計算機能幹什麼,這就是程序員必須學習計算機基礎的緣由。然而光有編程語言和硬件也並不能知足你們的變成需求。程序員利用編程語言寫程序,最終開發出的結果就是一個軟件,好比:騰訊qq,暴風影音,快播等軟件沒有區別了。這些軟件必須運行在操做系統之上。   linux

             因此一套完整的計算機系統分爲:計算機硬件,操做系統,軟件(程序員開發的就是軟件),以下圖。咱們的python編程之路分爲計算機硬件基礎,操做系統基礎,和Python編程三部分。程序員

 計算機硬件介紹web

 

                 從概念上講,一臺簡單的我的計算機能夠抽象爲相似下圖的模型,CPU、內存以及硬盤都由一條系統總線(bus)鏈接起來並經過總線與其餘設備通訊現代計算機的結構更復雜,包括多重總線,咱們將在後面的小節介紹,此時暫且讓咱們如下圖爲例來介紹各個部件數據庫

 

 

 

                        理解各部分功能的一個簡單的方法是,把計算機各部分組件往人的身上套,好比:編程

                                                                                                 1.cpu至關於人的大腦,負責運算  緩存

                                                                                                 2.內存至關於人的記憶,負責臨時存儲網絡

                                                                                                 3.硬盤至關於人的筆記本,負責永久存儲多線程

 4.輸入設備至關於耳朵或眼睛,負責接收外部的信息傳給cpu架構

5.輸出設備至關於你的表情,負責通過處理後輸出的結果

6.以上全部的設備都經過總線鏈接,總線至關於人的神經

 

                         上課開始,老師講課,學生聽課,老師是程序員,學生是計算機,學生的器官都是計算機各部分組成

 

1.老師經過學生的眼睛和耳朵將本身的知識/指令傳給學生(輸入)

 

                                         2.學生在接收知識/指令後,經過本身的神經,將其放入本身的內存/短時間記憶(總線、內存)

 

                                                                             3.學生的大腦/cpu從短時間記憶裏取出知識/指令,分析知識/指令,而後學習知識/執行指令 (cpu取指、分析、執行)

 

                                                      4.學生的表情會直接反映出本身是否聽懂,這就是輸出,老師瞅一眼就知道學生有沒有學會(輸出)

 

                                                                                   5.學生想要永久將知識保存下來,只能拿出一個筆記本,把剛剛學會的知識都寫到本子上,這個本子就是硬盤(磁盤)

                  

             計算機的大腦就是CPU,它從內存中取指令->解碼->執行,而後再取指->解碼->執行下一條指令,周而復始,直至整個程序被執行完成。

 

每一個cpu都有一套可執行的專門指令集,任何軟件的執行最終都要轉化成cpu的指令去執行。因此Pentium(英特爾第五代x86架構的微處理器)不能執行SPARC(另一種處理器)的程序。這就比如不一樣的人腦,對於大多數人類來講,人腦的結構同樣,因此別人會的東西你也均可以會,但對於愛因斯坦的腦子來講,它會的你確定不會。

 

因訪問內存以獲得指令或數據的時間比cpu執行指令花費的時間要長得多,因此,全部CPU內部都有一些用來保存關鍵變量和臨時數據的寄存器,這樣一般在cpu的指令集中專門提供一些指令,用來將一個字(能夠理解爲數據)從內存調入寄存器,以及將一個字從寄存器存入內存。cpu其餘的指令集能夠把來自寄存器、內存的操做數據組合,或者用二者產生一個結果,好比將兩個字相加並把結果存在寄存器或內存中。

 

    寄存器的分類:

 1.除了用來保存變量和臨時結果的通用寄存器外

 2.多數計算機還有一些對程序員課件的專門寄存器,其中之一即是程序計數器,它保存了將要取出的下一條指令的內存地址。在指令取出後,程序計算器就被更新以便執行後期的指令

 3.另一個寄存器即是堆棧指針,它指向內存中當前棧的頂端。該棧包含已經進入可是尚未退出的每一個過程當中的一個框架。在一個過程的堆棧框架中保存了有關的輸入參數、局部變量以及那些沒有保存在寄存器中的臨時變量

 4.最後 一個很是重要的寄存器就是程序狀態字寄存器(Program Status Word,PSW),這個寄存器包含了條碼位(由比較指令設置)、CPU優先級、模式(用戶態或內核態),以及各類其他控制位。用戶一般讀入整個PSW,可是隻對其中少許的字段寫入。在系統調用和I/O中,PSW很是重要

 寄存器的維護:

 操做系統必須知曉全部的寄存器。在時間多路複用的CPU中,操做系統會常常停止正在運行的某個程序並啓動(或再次啓動)另外一個程序。每次中止一個運行着的程序時,操做系統必須保存全部的寄存器,這樣在稍後該程序被再次運行時,能夠把這些寄存器從新裝入。

 

  處理器設計的演變

 

1.最開始取值、解碼、執行這三個過程是同時進行的,這意味着任何一個過程完成都須要等待其他兩個過程執行完畢,時間浪費

 

2.後來被設計成了流水線式的設計,即執行指令n時,能夠對指令n+1解碼,而且能夠讀取指令n+2,徹底是一套流水線 

3.超變量cpu,比流水線更加先進,有多個執行單元,能夠同時負責不一樣的事情,好比看片的同時,聽歌,打遊戲。

兩個或更多的指令被同時取出、解碼並裝入一個保持緩衝區中,直至它們都執行完畢。只有有一個執行單元空閒,就檢查保持緩衝區是否還有可處理的指令

這種設計存在一種缺陷,即程序的指令常常不按照順序執行,在多數狀況下,硬件負責保證這種運算結果與順序執行的指令時的結果相同。

內核態與用戶態

多數CPU都有兩種模式,即內核態與用戶態

  一般,PSW中有一個二進制位控制這兩種模式。

  內核態:當cpu在內核態運行時,cpu能夠執行指令集中全部的指令,很明顯,全部的指令中包含了使用硬件的全部功能,(操做系統在內核態下運行,從而能夠訪問整個硬件)

  用戶態:用戶程序在用戶態下運行,僅僅只能執行cpu整個指令集的一個子集,該子集中不包含操做硬件功能的部分,所以,通常狀況下,在用戶態中有關I/O和內存保護(操做系統佔用的內存是受保護的,不能被別的程序佔用),固然,在用戶態下,將PSW中的模式設置成內核態也是禁止的。

  內核態與用戶態切換  

  用戶態下工做的軟件不能操做硬件,可是咱們的軟件好比暴風影音,必定會有操做硬件的需求,好比從磁盤上讀一個電影文件,那就必須經歷從用戶態切換到內核態的過程,爲此,用戶程序必須使用系統調用(system call),系統調用陷入內核並調用操做系統,TRAP指令把用戶態切換成內核態,並啓用操做系統從而得到服務。

多線程和多核芯片

moore定律指出,芯片中的晶體管數量每18個月翻一倍,隨着晶體管數量的增多,更強大的功能稱爲了可能,如

I.第一步加強:在cpu芯片中加入更大的緩存,一級緩存L1,用和cpu相同的材質製成,cpu訪問它沒有時延

II.第二步加強:一個cpu中的處理邏輯增多,intel公司首次提出,稱爲多線程(multithreading)或超線程(hyperthreading),對用戶來講一個有兩個線程的cpu就至關於兩個cpu,咱們後面要學習的進程和線程的知識就起源於這裏,進程是資源單位而線程纔是cpu的執行單位。

多線程運行cpu保持兩個不一樣的線程狀態,能夠在納秒級的時間內來回切換,速度快到你看到的結果是併發的,僞並行的,然而多線程不提供真正的並行處理,一個cpu同一時刻只能處理一個進程(一個進程中至少一個線程)

III.第三步加強:除了多線程,還出現了傲寒2個或者4個完整處理器的cpu芯片,以下圖。要使用這類多核芯片確定須要有多處理操做系統

存儲器

計算機中第二重要的就是存儲了,全部人都意淫着存儲:速度快(這樣cpu的等待存儲器的延遲就下降了)+容量大+價錢便宜。而後同時兼備三者是不可能的,因此有了以下的不一樣的處理方式

存儲器系統採用如上圖的分層結構,頂層的存儲器速度較高,容量較小,與底層的存儲器相比每位的成本較高,其差異每每是十億數量級的

 

  寄存器即L1緩存:

用與cpu相同材質製造,與cpu同樣快,於是cpu訪問它無時延,典型容量是:在32位cpu中爲32*32,在64位cpu中爲64*64,在兩種狀況下容量均<1KB。

  高速緩存即L2緩存:

主要由硬件控制高速緩存的存取,內存中有高速緩存行按照0~64字節爲行0,64~127爲行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(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是由於它耗電很是少,一塊工廠原裝電池每每能使用若干年,可是當電池失效時,相關的配置和時間等都將丟失

磁盤

 

每一個磁頭能夠讀取一段換新區域,稱爲磁道

把一個戈丁手臂位置上因此的磁道合起來,組成一個柱面

每一個磁道劃成若干扇區,扇區典型的值是512字節

數據都存放於一段一段的扇區,即磁道這個圓圈的一小段圓圈,從磁盤讀取一段數據須要經歷尋道時間和延遲時間

平均尋道時間是指當用戶發出指令要尋找一個文件時,磁盤磁頭開始移動到存儲那個文件位置所須要的時間,從指令發出尋址命令到找到目標文件的時間稱爲尋址時間

平均延遲時間當找到文件的時候,須要磁道轉一圈在讀取這個數據這個讀取時間就是平均延遲時間。

虛擬內存與MMU許多計算機都有虛擬內存機制會讓磁盤的某塊地方劃分爲虛擬內存,通常大於內存的1.5倍,讓計算機能運行大於內存的應用程序,會把沒用的應用程序存放到虛擬內存裏面等待處理,爲了保障計算機的運行只能犧牲計算機的運行速度

因此會很卡。在linux中成爲swap,這種機制的核心在於快速地映射內存地址,由cpu中的一個部件負責,成爲存儲器管理單元(Memory Management Unit MMU)。

 磁帶

在價錢相同的狀況下比硬盤擁有更高的存儲容量,雖然速度低於磁盤,可是因其大容量,在地震水災火災時可移動性強等特性,常被用來作備份。(常見於大型數據庫系統中)

 

 總線

四小節中的結構在小型計算機中沿用了多年,並也用在早期的IBM PC中。可是隨着處理器和存儲器速度愈來愈快,單總線很難處理總線的交通流量了,因而出現了下圖的多總線模式,他們處理I/O設備及cpu到存儲器的速度都更快。

北橋即PCI橋:鏈接高速設備

南橋即ISA橋:鏈接啓動計算機

在計算機的主板上有一個基本的輸入輸出程序(Basic  Input Output system)

BIOS就至關於一個小的操做系統,它有底層的I/O軟件,包括讀鍵盤,寫屏幕,進行磁盤I/O,該程序存放於一非易失性閃存RAM中。

操做系統的啓動流程

電腦通電,BIOS系統檢測硬件設備是否正常,讀取cmos存儲上的參數(系統盤 
是哪一個),讀取硬盤上的第一個扇區上的主引導記錄mbr,從mbr上讀取grub程序找到內核,再經過BIOS 
檢測硬件是否存在驅動程序,完成操做系統的啓動。

應用程序的啓動流程

操做系統找到硬盤中的應用軟件,而後CPU取指-解碼-執行軟件,軟件自己要 運行一個文件,經過操做系統控制硬盤,提取文件,這個過程當中,CPU從用戶態切換到內核態,CPU執行 要運行的這個文件的過程當中,從內核態切換到用戶態。

相關文章
相關標籤/搜索