1. 程式人生 > >計算機基礎——硬件

計算機基礎——硬件

簡單 取值 minute 線程 ons 等待 mar 模式 python編程

        硬件

作為一名即將統治世界的程序員,我們可以用我們指間的力量改變世界,但總而言之也要懂一些底層的東西嘛。

  

程序員編程的本質就是讓計算機去工作,而編程語言就是程序員與計算機溝通的介質

程序員要想讓計算機工作,必須知道計算機能幹什麽,怎麽幹的,這也就是我們必須學習計算機基礎的原因。

  一套完整的計算機系統分為:計算機硬件,操作系統,軟件(程序員開發的就是軟件),如下圖。因而我們的python編程之路分為計算機硬件基礎,操作系統基礎,和python編程三部分,就讓我們先從計算機硬件學起吧!

  好了不說廢話了,一起來學習吧!

編程語言就是程序員與計算機溝通的介質 應用程序通過操作系統來控制硬件

一臺簡單的計算機可以抽象成CPU、內存以及I/O設備都由一條系統總線(bus)連接起來並通過總線與其他設備通信

技術分享

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

cpu是人的大腦,負責運算

內存是人的記憶,負責臨時存儲

硬盤是人的筆記本,負責永久存儲

輸入設備是耳朵或眼睛,負責接收外部的信息傳給cpu

輸出設備是你的表情,負責經過處理後輸出的結果

以上所有的設備都通過總線連接,總線相當於人的神經

計算機硬件有處理器、存儲器、磁盤、磁帶、總線、

處理器

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

因為內存訪問數據的時間遠遠大於cpu等待指令的時間,所以所有CPU內部都有一些用來保存關鍵變量和臨時數據的寄存器 對於開發人員來說最後一中寄存器最為重要,這個寄存器包含了條碼位(由比較指令設置)、CPU優先級、模式(用戶態或內核態),以及各種其他控制位。用戶通常讀入整個PSW,但是只對其中少量的字段寫入。在系統調用和I/O中,PSW非常非常非常非常非常非常重要.

處理器的設計和改變

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

2.後來被設計成了流水線式的設計,即執行指令n時,可以對指令n+1解碼,並且可以讀取指令n+2,完全是一套流水線。

技術分享

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

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

技術分享

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

  CPU的兩種工作狀態

內核態與用戶態

內核態

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

用戶態

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

用戶態與內核態切換

  用戶態不能夠直接調用硬件來進行操作,但是生活中總會遇到,比如你點開一個播放器他是如何播放的呢?——用戶程序當需要調用硬件來使用時,通過特定的指令——系統調用來實現,通過用戶態轉變成內核態來調用硬件來使用的。

存儲器

  多線程和多核芯片

L1

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

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

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

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

技術分享 技術分享

                            

                    以上是兩家主流cpu

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

技術分享

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

  寄存器即L1緩存:

用與cpu相同材質制造,與cpu一樣快,但價格高昂,不適合大規模使用

  高速緩存即L2緩存:

高速緩存L2是一種介於寄存器和內存之間的產物,他的速度快於內存慢於寄存器,造價適中。

  緩存是一個好方法,在現代cpu中設計了兩個緩存,再看4.1中的兩種cpu設計圖。第一級緩存稱為L1總是在CPU中,通常用來將已經解碼的指令調入cpu的執行引擎,對那些頻繁使用的數據自,多少芯片還會按照第二L1緩存 。。。另外往往設計有二級緩存L2,用來存放近來經常使用的內存字。L1與L2的差別在於對cpu對L1的訪問無時間延遲,而對L2的訪問則有1-2個時鐘周期(即1-2ns)的延遲。

內存:

內存是計算機必不可少的存儲設備,他可以運行大於他的軟件,在服務器中通常還有交換分區swap,主存的易失性存儲,斷電後保存的數據會消失。市面上還有一種內存ROM,是一種只讀不易失的,還有EEPROM 電可察rom還有閃存可多次rw的存儲設備,還有cmos,紐扣電磁,他是存儲主板時間的,一塊可用5-6年。

磁盤

技術分享

磁盤低速的原因是因為它一種機械裝置,在磁盤中有一個或多個金屬盤片,它們以5400,7200或10800rpm(RPM =revolutions per minute 每分鐘多少轉 )的速度旋轉。從邊緣開始有一個機械臂懸在盤面上,這類似於老式黑膠唱片機上的拾音臂。信息卸載磁盤上的一些列的同心圓上,是一連串的2進制位(稱為bit位),為了統計方法,8個bit稱為一個字節bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我們平時所說的磁盤容量最終指的就是磁盤能寫多少個2進制位。

每個磁頭可以讀取一段換新區域,稱為磁道

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

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

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

平均尋道時間

機械手臂從一個柱面隨機移動到相鄰的柱面的時間成為尋到時間,找到了磁道就以為著招到了數據所在的那個圈圈,但是還不知道數據具體這個圓圈的具體位置

平均延遲時間

機械臂到達正確的磁道之後還必須等待旋轉到數據所在的扇區下,這段時間成為延遲時間

  虛擬內存:

許多計算機支持虛擬內存機制,該機制使計算機可以運行大於物理內存的程序,方法是將正在使用的程序放入內存取執行,而暫時不需要執行的程序放到磁盤的某塊地方,這塊地方成為虛擬內存,在linux中成為swap,這種機制的核心在於快速地映射內存地址,由cpu中的一個部件負責,成為存儲器管理單元(Memory Management Unit MMU)

PS:從一個程序切換到另外一個程序,成為上下文切換(context switch),緩存和MMU的出現提升了系統的性能,尤其是上下文切換

磁帶

磁帶是一種大容量存儲設備,他價格低廉,存儲量大,是一些企業容災備份的首選,缺點是I/O速度慢。

總線

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

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

南橋即ISA橋:連接慢速設備

技術分享

操作系統啟動流程

下三層設備啟動流程

接通電源。bios運行---硬件加電自檢--讀取cmos,選擇啟動項。讀入bootloader啟動裝載模塊,啟動操作系統。bios--mbr--bootloader--grub--kernel

應用程序啟動流程

上三層設備啟動流層

  應用層序調用操作系統,操做系統找到層序所在硬盤,加載到內存, cpu用戶態,內核態相互轉化 調用硬件。

計算機基礎——硬件