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