成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Win知識(shí) - 程序是怎樣跑起來(lái)的(合集)

joywek / 1666人閱讀

摘要:系統(tǒng)調(diào)用和高級(jí)編程語(yǔ)言的移植性操作系統(tǒng)的硬件控制功能,通常是通過(guò)一些小的函數(shù)集合體的形式來(lái)提供的。這是因?yàn)橛布目刂剖怯扇珯?quán)負(fù)責(zé)的。語(yǔ)言提供的函數(shù),是用來(lái)在命令提示符中顯示字符串的函數(shù)。

系統(tǒng)調(diào)用和高級(jí)編程語(yǔ)言的移植性

操作系統(tǒng)的硬件控制功能,通常是通過(guò)一些小的函數(shù)集合體的形式來(lái)提供的。這些函數(shù)及調(diào)用函數(shù)的行為統(tǒng)稱為系統(tǒng)調(diào)用(system call),也就是應(yīng)用對(duì)操作系統(tǒng)(system)的功能進(jìn)行調(diào)用(call)的意思。在前面的程序中用到了time()及printf()等函數(shù),這些函數(shù)內(nèi)部也都使用了系統(tǒng)調(diào)用。這里之所以用“內(nèi)部”這個(gè)詞,是因?yàn)樵赪indows操作系統(tǒng)中,提供返回當(dāng)前日期和時(shí)刻,以及在顯示器中顯示字符串等功能的系統(tǒng)調(diào)用的函數(shù)名,并不是time()和printf()。系統(tǒng)調(diào)用是在time()和printf()函數(shù)的內(nèi)部執(zhí)行的。大家可能會(huì)認(rèn)為這個(gè)方法有些繞,不過(guò)這是有原因的。

C語(yǔ)言等高級(jí)編程語(yǔ)言并不依存于特定的操作系統(tǒng)。這是因?yàn)槿藗兿M还苁荳indows還是Linux,都能使用幾乎相同的源代碼。因此,高級(jí)編程語(yǔ)言的機(jī)制就是,使用獨(dú)自的函數(shù)名,然后再在編譯時(shí)將其轉(zhuǎn)換成相應(yīng)操作系統(tǒng)的系統(tǒng)調(diào)用(也有可能是多個(gè)系統(tǒng)調(diào)用的組合)。也就是說(shuō),用高級(jí)編程語(yǔ)言編寫的應(yīng)用在編譯后,就轉(zhuǎn)換成了利用系統(tǒng)調(diào)用的本地代碼(圖9-6)。

圖9-6 高級(jí)編程語(yǔ)言的函數(shù)調(diào)用在編譯后變成了系統(tǒng)調(diào)用

在高級(jí)編程語(yǔ)言中,也存在可以直接調(diào)用系統(tǒng)調(diào)用的編程語(yǔ)言。不過(guò),利用這種方式做成的應(yīng)用,移植性并不友好(也俗稱為有惡意行為的應(yīng)用)。例如,直接調(diào)用Windows系統(tǒng)調(diào)用的應(yīng)用,在Linux上顯然是無(wú)法運(yùn)行的。

Ps:①移植性指的是同樣的程序在不同操作系統(tǒng)下運(yùn)行時(shí)需要花費(fèi)的時(shí)間等,費(fèi)時(shí)越少說(shuō)明移植性越好。

?

Win編譯和鏈接機(jī)制

?

應(yīng)用和硬件無(wú)關(guān)?

在用C語(yǔ)言等高級(jí)編程語(yǔ)言開(kāi)發(fā)的Windows應(yīng)用中,大家很少能接觸到直接控制硬件的指令。這是因?yàn)橛布目刂剖怯蒞indows全權(quán)負(fù)責(zé)的。

不過(guò),Windows提供了通過(guò)應(yīng)用來(lái)間接控制硬件的方法。利用操作系統(tǒng)提供的系統(tǒng)調(diào)用功能就可以實(shí)現(xiàn)對(duì)硬件的控制。在Windows中,系統(tǒng)調(diào)用稱為API(圖11-1)。各API就是應(yīng)用調(diào)用的函數(shù)。這些函數(shù)的實(shí)體被存儲(chǔ)在DLL文件中。

圖11-1 應(yīng)用通過(guò)操作系統(tǒng)間接控制硬件

下面讓我們來(lái)看一個(gè)利用系統(tǒng)調(diào)用來(lái)間接控制硬件的示例。例如,假設(shè)要在窗口中顯示字符串,就可以使用Windows API中的TextOut函數(shù)?①。TextOut的語(yǔ)法如代碼清單11-1所示。在這段代碼中,確實(shí)沒(méi)有能讓大家意識(shí)到硬件的參數(shù)。帶有“設(shè)備描述表的句柄”這一注釋的參數(shù)hdc,是用來(lái)指定字符串及圖形等繪制對(duì)象的識(shí)別值,表示的也不是直接硬件設(shè)備。

代碼清單11-1 TextOut函數(shù)的語(yǔ)法(C語(yǔ)言)

BOOL TextOut(?	HDC hdc, ? ? ? ? ? ? ?//設(shè)備描述表的句柄?	int nXStart, ? ? ? ? ?//顯示字符串的x坐標(biāo)?	int nYStart, ? ? ? ? ?//顯示字符串的y坐標(biāo)?	LPCTSTR lpString, ? ? //指向字符串的指針?	int cbString ? ? ? ? ?//字符串的文字?jǐn)?shù)?);

那么,在處理TextOut函數(shù)的內(nèi)容時(shí),Windows做了什么呢?從結(jié)果來(lái)看,Windows直接控制了作為硬件的顯示器。但Windows本身也是軟件,由此可見(jiàn),Windows應(yīng)該向CPU傳遞了某些指令,從而通過(guò)軟件控制了硬件。

Ps:注腳

①?在向窗口和打印機(jī)輸出字符串時(shí),可以使用Windows提供的TextOut函數(shù)作為API。C語(yǔ)言提供的printf函數(shù),是用來(lái)在命令提示符中顯示字符串的函數(shù)。使用printf函數(shù),是無(wú)法向窗口和打印機(jī)輸出字符串的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/118878.html

相關(guān)文章

  • 前端學(xué)習(xí)資源

    摘要:掘金日?qǐng)?bào)第四期使用怎么能不知道這些插件合集掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分前端后端產(chǎn)品設(shè)計(jì)工具資源和一些有趣的東西。目前已經(jīng)涵蓋了的相關(guān)資源鏈接,供大家參考與學(xué)習(xí)。 【掘金日?qǐng)?bào)】第四期 使用Sublime?怎么能不知道這些 Sublime 插件合集! 掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分:前端、后端、Android、iOS、產(chǎn)品設(shè)計(jì)、工具資源和一些有趣的東西。 前端...

    xzavier 評(píng)論0 收藏0
  • 前端學(xué)習(xí)資源

    摘要:掘金日?qǐng)?bào)第四期使用怎么能不知道這些插件合集掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分前端后端產(chǎn)品設(shè)計(jì)工具資源和一些有趣的東西。目前已經(jīng)涵蓋了的相關(guān)資源鏈接,供大家參考與學(xué)習(xí)。 【掘金日?qǐng)?bào)】第四期 使用Sublime?怎么能不知道這些 Sublime 插件合集! 掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分:前端、后端、Android、iOS、產(chǎn)品設(shè)計(jì)、工具資源和一些有趣的東西。 前端...

    weij 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<