计算机基础——硬件
硬件
作為一名即將統(tǒng)治世界的程序員,我們可以用我們指間的力量改變世界,但總而言之也要懂一些底層的東西嘛。
程序員編程的本質(zhì)就是讓計算機去工作,而編程語言就是程序員與計算機溝通的介質(zhì)
?
程序員要想讓計算機工作,必須知道計算機能干什么,怎么干的,這也就是我們必須學(xué)習(xí)計算機基礎(chǔ)的原因。
一套完整的計算機系統(tǒng)分為:計算機硬件,操作系統(tǒng),軟件(程序員開發(fā)的就是軟件),如下圖。因而我們的python編程之路分為計算機硬件基礎(chǔ),操作系統(tǒng)基礎(chǔ),和python編程三部分,就讓我們先從計算機硬件學(xué)起吧! 好了不說廢話了,一起來學(xué)習(xí)吧!
一編程語言的作用及與操作系統(tǒng)和硬件的關(guān)系
? 編程語言就是程序員與計算機溝通的介質(zhì) 應(yīng)用程序通過操作系統(tǒng)來控制硬件
一臺簡單的計算機可以抽象成CPU、內(nèi)存以及I/O設(shè)備都由一條系統(tǒng)總線(bus)連接起來并通過總線與其他設(shè)備通信
?
?
?
理解各部分功能的一個簡單的方法是,把計算機各部分組件往人的身上套,比如
cpu是人的大腦,負(fù)責(zé)運算
內(nèi)存是人的記憶,負(fù)責(zé)臨時存儲
硬盤是人的筆記本,負(fù)責(zé)永久存儲
輸入設(shè)備是耳朵或眼睛,負(fù)責(zé)接收外部的信息傳給cpu
輸出設(shè)備是你的表情,負(fù)責(zé)經(jīng)過處理后輸出的結(jié)果
以上所有的設(shè)備都通過總線連接,總線相當(dāng)于人的神經(jīng)
計算機硬件有處理器、存儲器、磁盤、磁帶、總線、
處理器
?
二、cpu與寄存器,內(nèi)核態(tài)與用戶態(tài)及如何切換
計算機的大腦cpu,他從內(nèi)存中取指令->解碼->執(zhí)行,然后再取指->解碼->執(zhí)行下一條指令,周而復(fù)始,直至整個程序被執(zhí)行完成。
因為內(nèi)存訪問數(shù)據(jù)的時間遠(yuǎn)遠(yuǎn)大于cpu等待指令的時間,所以所有CPU內(nèi)部都有一些用來保存關(guān)鍵變量和臨時數(shù)據(jù)的寄存器 對于開發(fā)人員來說最后一中寄存器最為重要,這個寄存器包含了條碼位(由比較指令設(shè)置)、CPU優(yōu)先級、模式(用戶態(tài)或內(nèi)核態(tài)),以及各種其他控制位。用戶通常讀入整個PSW,但是只對其中少量的字段寫入。在系統(tǒng)調(diào)用和I/O中,PSW非常非常非常非常非常非常重要.
處理器的設(shè)計和改變
1.最開始取值、解碼、執(zhí)行這三個過程是同時進(jìn)行的,這意味著任何一個過程完成都需要等待其余兩個過程執(zhí)行完畢,時間浪費
2.后來被設(shè)計成了流水線式的設(shè)計,即執(zhí)行指令n時,可以對指令n+1解碼,并且可以讀取指令n+2,完全是一套流水線。
??
3.超變量cpu,比流水線更加先進(jìn),有多個執(zhí)行單元,可以同時負(fù)責(zé)不同的事情,比如看片的同時,聽歌,打游戲。
兩個或更多的指令被同時取出、解碼并裝入一個保持緩沖區(qū)中,直至它們都執(zhí)行完畢。只有有一個執(zhí)行單元空閑,就檢查保持緩沖區(qū)是否還有可處理的指令。
??
這種設(shè)計存在一種缺陷,即程序的指令經(jīng)常不按照順序執(zhí)行,在多數(shù)情況下,硬件負(fù)責(zé)保證這種運算結(jié)果與順序執(zhí)行的指令時的結(jié)果相同。
CPU的兩種工作狀態(tài)
內(nèi)核態(tài)與用戶態(tài)
內(nèi)核態(tài)
當(dāng)cpu在內(nèi)核態(tài)運行時,cpu可以執(zhí)行指令集中所有的指令,很明顯,所有的指令中包含了使用硬件的所有功能,(操作系統(tǒng)在內(nèi)核態(tài)下運行,從而可以訪問整個硬件)
用戶態(tài)
用戶程序在用戶態(tài)下運行,僅僅只能執(zhí)行cpu整個指令集的一個子集,該子集中不包含操作硬件功能的部分,因此,一般情況下,在用戶態(tài)中有關(guān)I/O和內(nèi)存保護(hù)(操作系統(tǒng)占用的內(nèi)存是受保護(hù)的,不能被別的程序占用),當(dāng)然,在用戶態(tài)下,將PSW中的模式設(shè)置成內(nèi)核態(tài)也是禁止的。
用戶態(tài)與內(nèi)核態(tài)切換
用戶態(tài)不能夠直接調(diào)用硬件來進(jìn)行操作,但是生活中總會遇到,比如你點開一個播放器他是如何播放的呢?——用戶程序當(dāng)需要調(diào)用硬件來使用時,通過特定的指令——系統(tǒng)調(diào)用來實現(xiàn),通過用戶態(tài)轉(zhuǎn)變成內(nèi)核態(tài)來調(diào)用硬件來使用的。
存儲器
多線程和多核芯片
三、存儲器系列,L1緩存,L2緩存,內(nèi)存(RAM),EEPROM和閃存,CMOS與BIOS電池
?L1
I.第一步增強:在cpu芯片中加入更大的緩存,一級緩存L1,用和cpu相同的材質(zhì)制成,cpu訪問它沒有時延
II.第二步增強:一個cpu中的處理邏輯增多,intel公司首次提出,稱為多線程(multithreading)或超線程(hyperthreading),對用戶來說一個有兩個線程的cpu就相當(dāng)于兩個cpu,我們后面要學(xué)習(xí)的進(jìn)程和線程的知識就起源于這里,進(jìn)程是資源單位而線程才是cpu的執(zhí)行單位。
多線程運行cpu保持兩個不同的線程狀態(tài),可以在納秒級的時間內(nèi)來回切換,速度快到你看到的結(jié)果是并發(fā)的,偽并行的,然而多線程不提供真正的并行處理,一個cpu同一時刻只能處理一個進(jìn)程(一個進(jìn)程中至少一個線程)
III.第三步增強:除了多線程,還出現(xiàn)了傲寒2個或者4個完整處理器的cpu芯片,如下圖。要使用這類多核芯片肯定需要有多處理操作系統(tǒng)
????????????????????????????????
以上是兩家主流cpu
計算機中第二重要的就是存儲了,所有人都意淫著存儲:速度快(這樣cpu的等待存儲器的延遲就降低了)+容量大+價錢便宜。然后同時兼?zhèn)淙呤遣豢赡艿?#xff0c;所以有了如下的不同的處理方式
存儲器系統(tǒng)采用如上圖的分層結(jié)構(gòu),頂層的存儲器速度較高,容量較小,與底層的存儲器相比每位的成本較高,其差別往往是十億數(shù)量級的
?
寄存器即L1緩存:
用與cpu相同材質(zhì)制造,與cpu一樣快,但價格高昂,不適合大規(guī)模使用
高速緩存即L2緩存:
高速緩存L2是一種介于寄存器和內(nèi)存之間的產(chǎn)物,他的速度快于內(nèi)存慢于寄存器,造價適中。
緩存是一個好方法,在現(xiàn)代cpu中設(shè)計了兩個緩存,再看4.1中的兩種cpu設(shè)計圖。第一級緩存稱為L1總是在CPU中,通常用來將已經(jīng)解碼的指令調(diào)入cpu的執(zhí)行引擎,對那些頻繁使用的數(shù)據(jù)自,多少芯片還會按照第二L1緩存 。。。另外往往設(shè)計有二級緩存L2,用來存放近來經(jīng)常使用的內(nèi)存字。L1與L2的差別在于對cpu對L1的訪問無時間延遲,而對L2的訪問則有1-2個時鐘周期(即1-2ns)的延遲。
內(nèi)存:
內(nèi)存是計算機必不可少的存儲設(shè)備,他可以運行大于他的軟件,在服務(wù)器中通常還有交換分區(qū)swap,主存的易失性存儲,斷電后保存的數(shù)據(jù)會消失。市面上還有一種內(nèi)存ROM,是一種只讀不易失的,還有EEPROM 電可察rom還有閃存可多次rw的存儲設(shè)備,還有cmos,紐扣電磁,他是存儲主板時間的,一塊可用5-6年。
四、磁盤結(jié)構(gòu),平均尋道時間,平均延遲時間,虛擬內(nèi)存與MMU
????????????????????????????????????
?
?
磁盤低速的原因是因為它一種機械裝置,在磁盤中有一個或多個金屬盤片,它們以5400,7200或10800rpm(RPM?=revolutions per minute 每分鐘多少轉(zhuǎn)?)的速度旋轉(zhuǎn)。從邊緣開始有一個機械臂懸在盤面上,這類似于老式黑膠唱片機上的拾音臂。信息卸載磁盤上的一些列的同心圓上,是一連串的2進(jìn)制位(稱為bit位),為了統(tǒng)計方法,8個bit稱為一個字節(jié)bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我們平時所說的磁盤容量最終指的就是磁盤能寫多少個2進(jìn)制位。
?
每個磁頭可以讀取一段換新區(qū)域,稱為磁道
?
把一個戈丁手臂位置上所以的磁道合起來,組成一個柱面
?
每個磁道劃成若干扇區(qū),扇區(qū)典型的值是512字節(jié)
?
數(shù)據(jù)都存放于一段一段的扇區(qū),即磁道這個圓圈的一小段圓圈,從磁盤讀取一段數(shù)據(jù)需要經(jīng)歷尋道時間和延遲時間
?
平均尋道時間
?
機械手臂從一個柱面隨機移動到相鄰的柱面的時間成為尋到時間,找到了磁道就以為著招到了數(shù)據(jù)所在的那個圈圈,但是還不知道數(shù)據(jù)具體這個圓圈的具體位置
?
平均延遲時間?
機械臂到達(dá)正確的磁道之后還必須等待旋轉(zhuǎn)到數(shù)據(jù)所在的扇區(qū)下,這段時間成為延遲時間?
??
??
虛擬內(nèi)存:?
許多計算機支持虛擬內(nèi)存機制,該機制使計算機可以運行大于物理內(nèi)存的程序,方法是將正在使用的程序放入內(nèi)存取執(zhí)行,而暫時不需要執(zhí)行的程序放到磁盤的某塊地方,這塊地方成為虛擬內(nèi)存,在linux中成為swap,這種機制的核心在于快速地映射內(nèi)存地址,由cpu中的一個部件負(fù)責(zé),成為存儲器管理單元(Memory Management Unit MMU)?
??
PS:從一個程序切換到另外一個程序,成為上下文切換(context switch),緩存和MMU的出現(xiàn)提升了系統(tǒng)的性能,尤其是上下文切換 ?五、磁帶
磁帶是一種大容量存儲設(shè)備,他價格低廉,存儲量大,是一些企業(yè)容災(zāi)備份的首選,缺點是I/O速度慢。
六、總線
四小節(jié)中的結(jié)構(gòu)在小型計算機中沿用了多年,并也用在早期的IBM PC中。但是隨著處理器和存儲器速度越來越快,單總線很難處理總線的交通流量了,于是出現(xiàn)了下圖的多總線模式,他們處理I/O設(shè)備及cpu到存儲器的速度都更快。
北橋即PCI橋:連接高速設(shè)備
南橋即ISA橋:連接慢速設(shè)備
????????????????????????????????????????????????????????????????
六、操作系統(tǒng)啟動流程
下三層設(shè)備啟動流程
?
加載bios 讀硬盤第一個扇區(qū)mbr主引導(dǎo)記錄 讀硬盤上的bootloader(最常見的是grub查詢具體位置加載哪段代碼) 啟動kernel? bios--mbr--bootloader(grub常用的)--kernel
?
七、應(yīng)用程序啟動流程
上三層設(shè)備啟動流層
應(yīng)用層序調(diào)用操作系統(tǒng),操做系統(tǒng)找到層序所在硬盤,加載到內(nèi)存,內(nèi)存加載到cpu上,應(yīng)用程序 cpu用戶態(tài),系統(tǒng)調(diào)用到內(nèi)核態(tài) 調(diào)用硬件,完成啟動。
?
轉(zhuǎn)載于:https://www.cnblogs.com/DE_LIU/p/7150533.html
總結(jié)
- 上一篇: iis+nginx实现负载均衡
- 下一篇: Bottle源码阅读(3) Header