編程語言的作用:程序員編程的本質(zhì)就是讓計(jì)算機(jī)去工作,而編程語言就是程序員與計(jì)算機(jī)溝通的介質(zhì)
操作系統(tǒng)和硬件之間的關(guān)系:操作系統(tǒng)的出現(xiàn)就是運(yùn)行于硬件之上岖寞,來控制硬件的恋拍,我們開發(fā)時(shí)嘀粱,只需要調(diào)用操作系統(tǒng)為我們提供的簡單而優(yōu)雅的接口就可以了
cpu是人的大腦,負(fù)責(zé)運(yùn)算豆同,CPU有向下兼容性
64位處理器可以跑為32位處理器編寫的程序,反之則不行
內(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ì)數(shù)器潜必,堆棧指針靴姿,程序狀態(tài)字寄存。比內(nèi)存運(yùn)行速度高磁滚,和CPU處理速度差不多
通用寄存器:除了用來保存變量和結(jié)果的通用寄存器除外
程序計(jì)數(shù)器:保存了將要取出的下一條指令的內(nèi)存地址佛吓。在指令取出后,程序計(jì)算器就被更新以便執(zhí)行后期的指令
堆棧指針:它指向內(nèi)存中當(dāng)前堆棧的頂端
程序狀態(tài)字寄存(PSW):包含了條碼位垂攘,CPU優(yōu)先級(jí)维雇,模式(用戶態(tài)或內(nèi)核態(tài)),以及各種其他控制位(可以通過應(yīng)用軟件驅(qū)動(dòng)硬件)
內(nèi)核態(tài)與用戶態(tài):除了在嵌入式系統(tǒng)中的非常簡答的CPU之外晒他,多數(shù)CPU都有兩種模式吱型,即內(nèi)核態(tài)與用戶態(tài)。
通常陨仅,PSW中有一個(gè)二進(jìn)制位控制這兩種模式津滞。
內(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)也是禁止的惶室。
內(nèi)核態(tài)與用戶態(tài)切換
用戶態(tài)下工作的軟件不能操作硬件温自,但是我們的軟件比如暴風(fēng)影音,一定會(huì)有操作硬件的需求皇钞,比如從磁盤上讀一個(gè)電影文件悼泌,那就必須經(jīng)歷從用戶態(tài)切換到內(nèi)核態(tài)的過程,為此夹界,用戶程序必須使用系統(tǒng)調(diào)用(system call)馆里,系統(tǒng)調(diào)用陷入內(nèi)核并調(diào)用操作系統(tǒng),TRAP指令把用戶態(tài)切換成內(nèi)核態(tài)可柿,并啟用操作系統(tǒng)從而獲得服務(wù)鸠踪。
存儲(chǔ)器系列:
先上一張圖:
寄存器:L1緩存,用與cpu相同材質(zhì)制造,與cpu一樣快复斥,因而cpu訪問它無時(shí)延营密,典型容量是:在32位cpu中為32*32,在64位cpu中為64*64目锭,在兩種情況下容量均<1KB评汰。
高速緩存:L2緩存,主要由硬件控制高速緩存的存取,內(nèi)存中有高速緩存行按照0~64字節(jié)為行0痢虹,64~127為行1被去。。奖唯。最常用的高速緩存行放置在cpu內(nèi)部或者非常接近c(diǎn)pu的高速緩存中惨缆。
,比如丰捷,多數(shù)操作系統(tǒng)在內(nèi)存中保留頻繁使用的文件(的一部分)坯墨,以避免從磁盤中重復(fù)地調(diào)用這些文件,類似的/root/a/b/c/d/e/f/a.txt的長路徑名轉(zhuǎn)換成該文件所在的磁盤地址的結(jié)果然后放入緩存瓢阴,可以避免重復(fù)尋找地址畅蹂,還有一個(gè)web頁面的url地址轉(zhuǎn)換為網(wǎng)絡(luò)地址(IP)地址后,這個(gè)轉(zhuǎn)換結(jié)果也可以緩存起來供將來使用荣恐。
再往下一層是主存,此乃存儲(chǔ)器系統(tǒng)的主力,主存通常稱為隨機(jī)訪問存儲(chǔ)RAM叠穆,就是我們通常所說的內(nèi)存少漆,容量一直在不斷攀升,所有不能再高速緩存中找到的硼被,都會(huì)到主存中找示损,主存是易失性存儲(chǔ),斷電后數(shù)據(jù)全部消失
還有一類存儲(chǔ)器就是CMOS嚷硫,它是易失性的检访,許多計(jì)算機(jī)利用CMOS存儲(chǔ)器來保持當(dāng)前時(shí)間和日期。CMOS存儲(chǔ)器和遞增時(shí)間的電路由一小塊電池驅(qū)動(dòng)仔掸,所以脆贵,即使計(jì)算機(jī)沒有加電,時(shí)間也仍然可以正確地更新起暮,除此之外CMOS還可以保存配置的參數(shù)卖氨,比如,哪一個(gè)是啟動(dòng)磁盤等负懦,之所以采用CMOS是因?yàn)樗碾姺浅I偻厕啵粔K工廠原裝電池往往能使用若干年,但是當(dāng)電池失效時(shí)纸厉,相關(guān)的配置和時(shí)間等都將丟失
磁盤(硬盤):磁盤低速的原因是因?yàn)樗环N機(jī)械裝置系吭,在磁盤中有一個(gè)或多個(gè)金屬盤片,它們以5400颗品,7200或更高速度旋轉(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)制位寨昙。
數(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ǔ)器管理單元
磁帶:因其大容量题暖,在地震水災(zāi)火災(zāi)時(shí)可移動(dòng)性強(qiáng)等特性,常被用來做備份
設(shè)備驅(qū)動(dòng):每個(gè)硬件廠商都會(huì)為自己的硬件添加支持各種操作系統(tǒng)的接口捉超,方便該操作系統(tǒng)的CPU調(diào)用驅(qū)動(dòng)
控制器:通常情況下對(duì)設(shè)備的控制是非常復(fù)雜和具體的胧卤,控制器的任務(wù)就是為操作系統(tǒng)屏蔽這些復(fù)雜而具體的工作,提供給操作系統(tǒng)一個(gè)簡單而清晰的接口
總線:處理I/O設(shè)備及cpu到存儲(chǔ)器
北橋即PCI橋:連接高速設(shè)備
南橋即ISA橋:連接慢速設(shè)備
操作系統(tǒng)的啟動(dòng)流程:在計(jì)算機(jī)的主板上有一個(gè)基本的輸入輸出程序(Basic? Input Output system)
BIOS就相當(dāng)于一個(gè)小的操作系統(tǒng)拼岳,它有底層的I/O軟件枝誊,包括讀鍵盤,寫屏幕裂问,進(jìn)行磁盤I/O,該程序存放于一非易失性閃存RAM中
1.計(jì)算機(jī)加電
2.BIOS開始運(yùn)行侧啼,檢測硬件:cpu、內(nèi)存堪簿、硬盤等
3.BIOS讀取CMOS存儲(chǔ)器中的參數(shù)痊乾,選擇啟動(dòng)設(shè)備
4.從啟動(dòng)設(shè)備上讀取第一個(gè)扇區(qū)的內(nèi)容(MBR主引導(dǎo)記錄512字節(jié),前446為引導(dǎo)信息椭更,后64為分區(qū)信息哪审,最后兩個(gè)為標(biāo)志位)
5.根據(jù)分區(qū)信息讀入bootloader啟動(dòng)裝載模塊,啟動(dòng)操作系統(tǒng)
6.然后操作系統(tǒng)詢問BIOS虑瀑,以獲得配置信息湿滓。對(duì)于每種設(shè)備,系統(tǒng)會(huì)檢查其設(shè)備驅(qū)動(dòng)程序是否存在舌狗,如果沒有叽奥,系統(tǒng)則會(huì)要求用戶按照設(shè)備驅(qū)動(dòng)程序。一旦有了全部的設(shè)備驅(qū)動(dòng)程序痛侍,操作系統(tǒng)就將它們調(diào)入內(nèi)核朝氓。然后初始有關(guān)的表格(如進(jìn)程表),穿件需要的進(jìn)程主届,并在每個(gè)終端上啟動(dòng)登錄程序或GUI
應(yīng)用程序的啟動(dòng)流程: