python硬件驱动_Python学习:计算机基础之计算机硬件
本節(jié)重點(diǎn):
1.編程語(yǔ)言的作用及與操作系統(tǒng)和硬件的關(guān)系:
Python是編程語(yǔ)言,簡(jiǎn)之,Python即語(yǔ)言。
語(yǔ)言有漢語(yǔ),外語(yǔ),是人與人之間溝通交流的介質(zhì),編程語(yǔ)言即人與計(jì)算機(jī)之間的語(yǔ)言,目的是為了讓計(jì)算機(jī)了解程序員想要表達(dá)的內(nèi)容;
用戶程序操作最終體現(xiàn)在硬件上,但是假如每個(gè)用戶程序的基礎(chǔ)都是先寫(xiě)操作硬件的編程,然后再寫(xiě)程序功能,寫(xiě)一個(gè),兩個(gè)可以,以后每次寫(xiě)程序都是先寫(xiě)操作硬件的代碼,然后再寫(xiě)程序的代碼豈不是一直在做重復(fù)的工作,所以這時(shí)候就需要有操作系統(tǒng)了,操作系統(tǒng)操作硬件,對(duì)硬件擁有所有權(quán)限,用戶程序再控制操作系統(tǒng),這樣就省去了重復(fù)的工作。
2.cup-->內(nèi)存-->硬盤
cup相當(dāng)于人體的大腦,作運(yùn)算的工作;
內(nèi)存相當(dāng)于人的臨時(shí)記憶,負(fù)責(zé)臨時(shí)存儲(chǔ)的作用;
硬盤相當(dāng)于筆記本,作永久存儲(chǔ)的作用;
整個(gè)運(yùn)行的過(guò)程是,把程序從硬盤中取出,放在內(nèi)存中運(yùn)行,然后把關(guān)鍵數(shù)據(jù)輸入到cpu中運(yùn)算。
3.cpu與寄存器,內(nèi)核態(tài)與用戶態(tài)及如何切換
cpu:它從內(nèi)存中取指令->解碼->執(zhí)行,然后再取指->解碼->執(zhí)行下一條指令,周而復(fù)始,直至整個(gè)程序被執(zhí)行完成。
每個(gè)cpu都有一套可執(zhí)行的專門指令集,任何軟件的執(zhí)行最終都要轉(zhuǎn)化成cpu的指令去執(zhí)行。所以Pentium(英特爾第五代x86架構(gòu)的微處理器)不能執(zhí)行SPARC(另外一種處理器)的程序。這就好比不同的人腦,對(duì)于大多數(shù)人類來(lái)說(shuō),人腦的結(jié)構(gòu)一樣,所以別人會(huì)的東西你也都可以會(huì),但對(duì)于愛(ài)因斯坦的腦子來(lái)說(shuō),它會(huì)的你肯定不會(huì)。
因訪問(wèn)內(nèi)存以得到指令或數(shù)據(jù)的時(shí)間比cpu執(zhí)行指令花費(fèi)的時(shí)間要長(zhǎng)得多,所以,所有CPU內(nèi)部都有一些用來(lái)保存關(guān)鍵變量和臨時(shí)數(shù)據(jù)的寄存器,這樣通常在cpu的指令集中專門提供一些指令,用來(lái)將一個(gè)字(可以理解為數(shù)據(jù))從內(nèi)存調(diào)入寄存器,以及將一個(gè)字從寄存器存入內(nèi)存。cpu其他的指令集可以把來(lái)自寄存器、內(nèi)存的操作數(shù)據(jù)組合,或者用兩者產(chǎn)生一個(gè)結(jié)果,比如將兩個(gè)字相加并把結(jié)果存在寄存器或內(nèi)存中。
寄存器分為4種:通用寄存器,程序計(jì)數(shù)器,堆棧指針,程序狀態(tài)字寄存器(Program StatusWord,PSW)。
本節(jié)主要講解了PSW,這個(gè)寄存器包含了條碼位(由比較指令設(shè)置)、CPU優(yōu)先級(jí)、模式(用戶態(tài)或內(nèi)核態(tài)),以及各種其他控制位。用戶通常讀入整個(gè)PSW,但是只對(duì)其中少量的字段寫(xiě)入。在系統(tǒng)調(diào)用和I/O中,PSW非常非常非常非常非常非常重要。
用戶態(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):當(dāng)cpu在內(nèi)核態(tài)運(yùn)行時(shí),cpu可以執(zhí)行指令集中所有的指令,很明顯,所有的指令中包含了使用硬件的所有功能,(操作系統(tǒng)在內(nèi)核態(tài)下運(yùn)行,從而可以訪問(wèn)整個(gè)硬件)。
當(dāng)軟件在操作系統(tǒng)中打開(kāi),此時(shí)處于用戶態(tài),無(wú)法操作系統(tǒng),假如軟件需要從硬盤中需要讀取某段數(shù)據(jù),需要操作硬件,此時(shí)軟件控制操作系統(tǒng)此時(shí)處于用戶態(tài),當(dāng)操作系統(tǒng)收到軟件指令,操作硬盤,此時(shí)切換為內(nèi)核態(tài),然后把文件讀入內(nèi)存中,供軟件使用,此時(shí)cpu恢復(fù)為用戶態(tài),cpu是不斷處于內(nèi)核態(tài)與用戶態(tài)切換的過(guò)程的。
4.存儲(chǔ)器系列,L1緩存,L2緩存,內(nèi)存(RAM),EEPROM和閃存,CMOS與BIOS電池
存儲(chǔ)器系列:存儲(chǔ)器按照典型訪問(wèn)時(shí)間,存儲(chǔ)容量分為5個(gè)梯度,從高到低排列,寄存器,高速緩存,內(nèi)存,硬盤,磁帶。
寄存器,1ns,<1K
高速緩存,2ns,4M
內(nèi)存,10ns,512-2048MB
硬盤,10ms,200-1000GB
磁帶,100s,400-800GB
L1緩存即為寄存器,L2緩存即為高速緩存,最常用的高速緩存行放置在cpu內(nèi)部或者非常接近c(diǎn)pu的高速緩存中。
內(nèi)存,通常稱為隨機(jī)訪問(wèn)存儲(chǔ)RAM,容量一直在不斷攀升,所有不能在高速緩存中找到的,都會(huì)到主存中找,主存是易失性存儲(chǔ),斷電后數(shù)據(jù)全部消失。
除了主存RAM之外,許多計(jì)算機(jī)已經(jīng)在使用少量的非易失性隨機(jī)訪問(wèn)存儲(chǔ)如ROM(Read Only Memory,ROM),在電源切斷之后,非易失性存儲(chǔ)的內(nèi)容并不會(huì)丟失,ROM只讀存儲(chǔ)器在工廠中就被編程完畢,然后再也不能修改。ROM速度快且便宜,在有些計(jì)算機(jī)中,用于啟動(dòng)計(jì)算機(jī)的引導(dǎo)加載模塊就存放在ROM中,另外一些I/O卡也采用ROM處理底層設(shè)備的控制。
EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,但是與ROM相反,他們可以擦除和重寫(xiě)。不過(guò)重寫(xiě)時(shí)花費(fèi)的時(shí)間比寫(xiě)入RAM要多。在便攜式電子設(shè)備中中,閃存通常作為存儲(chǔ)媒介。閃存是數(shù)碼相機(jī)中的膠卷,是便攜式音譯播放器的磁盤,還應(yīng)用于固態(tài)硬盤。閃存在速度上介于RAM和磁盤之間,但與磁盤不同的是,閃存擦除的次數(shù)過(guò)多,就被磨損了。
還有一類存儲(chǔ)器就是CMOS,它是易失性的,許多計(jì)算機(jī)利用CMOS存儲(chǔ)器來(lái)保持當(dāng)前時(shí)間和日期。CMOS存儲(chǔ)器和遞增時(shí)間的電路由一小塊電池驅(qū)動(dòng),所以,即使計(jì)算機(jī)沒(méi)有加電,時(shí)間也仍然可以正確地更新,除此之外CMOS還可以保存配置的參數(shù),比如,哪一個(gè)是啟動(dòng)磁盤等,之所以采用CMOS是因?yàn)樗碾姺浅I?#xff0c;一塊工廠原裝電池(BIOS電池)往往能使用若干年,但是當(dāng)電池失效時(shí),相關(guān)的配置和時(shí)間等都將丟失。
5.磁盤結(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)。從邊緣開(kāi)始有一個(gè)機(jī)械臂懸在盤面上,這類似于老式黑膠唱片機(jī)上的拾音臂。信息卸載磁盤上的一些列的同心圓上,是一連串的2進(jìn)制位(稱為bit位),為了統(tǒng)計(jì)方法,8個(gè)bit稱為一個(gè)字節(jié)bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我們平時(shí)所說(shuō)的磁盤容量最終指的就是磁盤能寫(xiě)多少個(gè)2進(jìn)制位。
每個(gè)磁頭可以讀取一段換新區(qū)域,稱為磁道
把一個(gè)戈丁手臂位置上所以的磁道合起來(lái),組成一個(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)存與MMU
虛擬內(nèi)存使電腦能運(yùn)行大于真實(shí)內(nèi)存的程序,虛擬內(nèi)存一般設(shè)置為真實(shí)內(nèi)存的1-1.5倍,其工作原理是在真實(shí)內(nèi)存上運(yùn)行重要的數(shù)據(jù),暫時(shí)不需要的先放在硬盤的某處,這里即稱為虛擬內(nèi)存,在linux中成為swap,這種機(jī)制的核心在于快速地映射內(nèi)存地址,由cpu中的一個(gè)部件負(fù)責(zé),成為存儲(chǔ)器管理單元(Memory Management Unit MMU)。
6.磁帶
磁帶價(jià)格便宜,容量大,多作為備份用,并且易于搬運(yùn)。
7.設(shè)備驅(qū)動(dòng)與控制器
設(shè)備驅(qū)動(dòng):舉例內(nèi)存插入主板,下面有一塊芯片,控制內(nèi)存,但是光有芯片不行,系統(tǒng)需要操控內(nèi)存,但是光寫(xiě)讓自己得硬件可以理解的程序不行,操作系統(tǒng)不能理解這段程序的話,操作系統(tǒng)不能操作內(nèi)存,所以需要設(shè)備廠商寫(xiě)設(shè)備驅(qū)動(dòng),已操作硬件。
控制器:是查找主板上的一塊芯片或一組芯片(硬盤,網(wǎng)卡,聲卡等都需要插到一個(gè)口上,這個(gè)口連的便是控制器),控制器負(fù)責(zé)控制連接的設(shè)備,它從操作系統(tǒng)接收命令,比如讀硬盤數(shù)據(jù),然后就對(duì)硬盤設(shè)備發(fā)起讀請(qǐng)求來(lái)讀出內(nèi)容。
8.總線與南橋和北橋
CPU、內(nèi)存以及I/O設(shè)備都由一條系統(tǒng)總線(bus)連接起來(lái)并通過(guò)總線與其他設(shè)備通信
北橋即PCI橋:連接高速設(shè)備
南橋即ISA橋:連接慢速設(shè)備
9.操作系統(tǒng)的啟動(dòng)流程
1.計(jì)算機(jī)加電
2.BIOS開(kāi)始運(yùn)行,檢測(cè)硬件
3.BIOS讀取CMOS中參數(shù),選擇啟動(dòng)設(shè)備
4.從啟動(dòng)盤第一個(gè)扇區(qū)(MBR主引導(dǎo)記錄),扇區(qū)為512字節(jié),前446位引導(dǎo)信息,后64為分區(qū)信息,后2位為標(biāo)志位。
5.根據(jù)分區(qū)信息讀入bootloader啟動(dòng)裝載模塊,啟動(dòng)操作系統(tǒng)。
6.然后操作系統(tǒng)詢問(wèn)BIOS,以獲得配置信息。對(duì)于每種設(shè)備,系統(tǒng)會(huì)檢查其設(shè)備驅(qū)動(dòng)程序是否存在,如果沒(méi)有,系統(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。
10.應(yīng)用程序的啟動(dòng)流程
應(yīng)用軟件在操作系統(tǒng)啟動(dòng)后啟動(dòng),雙擊應(yīng)用圖標(biāo),發(fā)送給操作系統(tǒng)指令,然后軟件文件會(huì)從硬盤中調(diào)用到內(nèi)存中,cpu調(diào)用運(yùn)行。
總結(jié)
以上是生活随笔為你收集整理的python硬件驱动_Python学习:计算机基础之计算机硬件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python语言 行业_如何入门编程开发
- 下一篇: eclipse安装maven插件_牛X!