運(yùn)行環(huán)境=操作系統(tǒng)(OS)+硬件(hardware)
操作系統(tǒng)和硬件決定了程序的運(yùn)行環(huán)境露氮。
操作系統(tǒng):Windows昭齐、Unix、Linux等诀豁,程序一般不能跨OS運(yùn)行窄刘。
硬件:CPU、內(nèi)存且叁、硬盤(pán)都哭、存儲(chǔ)設(shè)備和輸入輸出設(shè)備等。本地代碼
在程序的運(yùn)行環(huán)境中逞带,CPU是非常重要的參數(shù)。CPU只能解釋自身固有的機(jī)器語(yǔ)言纱新,不同的CPU能解釋的機(jī)器語(yǔ)言是不同的展氓。
源代碼(source code):用編程語(yǔ)言編寫(xiě)的程序,只是文本文件:
本地代碼(native code):是機(jī)器語(yǔ)言的程序脸爱,對(duì)源代碼進(jìn)行編譯得到遇汞。
windows中,應(yīng)用程序的本地代碼,通常是DLL格式和EXE文件等空入。市面上出售的windows應(yīng)用程序的CD-ROM中络它,收錄的也是本地代碼。
Windows克服了CPU以外的硬件差異
Windows出現(xiàn)之前歪赢,計(jì)算機(jī)機(jī)型很多化戳,他們即使擁有同樣的X86處理器,他們的內(nèi)存機(jī)制和I/0地址構(gòu)成都是不同的埋凯,因此点楼,各個(gè)機(jī)型都需要專(zhuān)門(mén)的MS-DOS應(yīng)用軟件來(lái)幫助控制硬件。
Windows出現(xiàn)之后白对,windows上各應(yīng)用的實(shí)現(xiàn)掠廓,不再是去控制硬件,而是windows操作系統(tǒng)發(fā)送指令甩恼,然后由windows操作系統(tǒng)控制硬件蟀瞧。這樣,因?yàn)橛蓋indows來(lái)控制硬件条摸,而不是程序員來(lái)控制硬件黄橘,因此程序員就不必再去在意內(nèi)存和I/0地址的不同了。
API(Application Programming Interface)
API:應(yīng)用程序向操作系統(tǒng)傳遞指令的途徑屈溉,提供了適用于本操作系統(tǒng)中任何程序的函數(shù)(接口)的集合塞关。
同類(lèi)型操作系統(tǒng)的API,不會(huì)因?yàn)橛布牟煌煌咏恚虼嗽谌魏斡布隙伎梢赃\(yùn)行帆赢。
不同操作系統(tǒng)的API會(huì)有差異,因此在移植同樣的應(yīng)用程序是线梗,需要重寫(xiě)部分API函數(shù)椰于。
FreeBSD Port
“既然CPU的不同會(huì)導(dǎo)致同樣的本地代碼無(wú)法重復(fù)使用,為什么不直接把源代碼發(fā)給程序呢仪搔?”
Unix操作系統(tǒng)FreeBSD中瘾婿,存在一種Port機(jī)制。
Port烤咧,即porting移植偏陪,表示根據(jù)不同的運(yùn)行環(huán)境而重新調(diào)整程序。
Port機(jī)制:結(jié)合當(dāng)前的運(yùn)行環(huán)境編譯源代碼煮嫌,得到適合CPU要求的笛谦、可以運(yùn)行的本地代碼程序。如果本地磁盤(pán)上沒(méi)有儲(chǔ)存目標(biāo)源代碼昌阿,則自動(dòng)使用FTP協(xié)議去相關(guān)站點(diǎn)下載源代碼饥脑。
Port機(jī)制恳邀,在某種程度上,克服了CPU在內(nèi)的所有硬件差異灶轰。
運(yùn)用虛擬機(jī)在本機(jī)上獲得其他操作系統(tǒng)環(huán)境
“如果運(yùn)行其他OS上的應(yīng)用谣沸,又不想使用移植呢?”
虛擬機(jī)軟件
Mac OS系統(tǒng):“Virtual PC for Mac”
Windows系統(tǒng):Virtual Box笋颤、VMWare乳附。
Java虛擬機(jī)
“除了使用虛擬機(jī),還有一種方法可以在本機(jī)上使用其他操作系統(tǒng)的應(yīng)用椰弊,就是java许溅。”
java有兩層意思秉版,一層是指編程語(yǔ)言java贤重,另一種是程序運(yùn)行環(huán)境java。
java虛擬機(jī):編譯運(yùn)行java語(yǔ)法寫(xiě)的源代碼清焕,生成的并不是本地代碼并蝗,而是字節(jié)代碼程序。字節(jié)代碼程序的運(yùn)行環(huán)境就是java虛擬機(jī)(Java VM)秸妥。java虛擬機(jī)一邊把字節(jié)代碼逐一轉(zhuǎn)換為本地代碼一邊運(yùn)行滚停。
通過(guò)字節(jié)代碼的使用,就實(shí)現(xiàn)了在任何環(huán)境在使用同一應(yīng)用了粥惧。
小結(jié):
BIOS(Basic Input/Output System键畴,標(biāo)準(zhǔn)輸入輸出)系統(tǒng)
BIOS引導(dǎo)程序:引導(dǎo)操作系統(tǒng)的啟動(dòng)。