首先,要知道:操作系統(tǒng)與用戶間的接口有兩種,一種是命令接口,另一種是程序接口。 什么是命令接口:為了便于用戶直接或者間接地控制自己的作業(yè),操作系統(tǒng)向用戶提供了命令接口,用戶可以通過該接口向作業(yè)發(fā)出命令以控制作業(yè)的運(yùn)行。該接口又進(jìn)一步分為聯(lián)機(jī)用戶接口和脫機(jī)用戶接口。(參考資料:《計(jì)算機(jī)操作系統(tǒng)》 第三版 湯小丹編著 西安電子科技大學(xué)出版社 23頁(yè)) 什么是程序接口:程序接口是提供給程序員在編程時(shí)使用的接口,是用戶的程序取得操作系統(tǒng)服務(wù)的唯一途徑??梢哉f,程序接口是為用戶程序在執(zhí)行中訪問系統(tǒng)資源而設(shè)置的。程序接口由一組系統(tǒng)調(diào)用命令(簡(jiǎn)稱系統(tǒng)調(diào)用)組成。用戶通過在程序中使用這些系統(tǒng)調(diào)用命令來請(qǐng)求操作系統(tǒng)提供服務(wù)。系統(tǒng)調(diào)用詳解: 系統(tǒng)調(diào)用就是用戶在程序中調(diào)用操作系統(tǒng)所提供的一些子功能,每一個(gè)系統(tǒng)調(diào)用都是一個(gè)能完成特定功能的子程序。具體講,系統(tǒng)調(diào)用就是通過系統(tǒng)調(diào)用命令中斷現(xiàn)行的用戶程序,而轉(zhuǎn)去執(zhí)行相應(yīng)的子程序,以完成特定的系統(tǒng)功能;系統(tǒng)調(diào)用完成后,控制又返回到系統(tǒng)調(diào)用命令的下條指令,被中斷的程序?qū)⒗^續(xù)執(zhí)行下去。 需要注意的是:系統(tǒng)調(diào)用的執(zhí)行是在管態(tài)下運(yùn)行的。Windows系統(tǒng)調(diào)用: Windows操作系統(tǒng)提供了豐富的系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用又被進(jìn)一步編寫成不同的庫(kù)函數(shù)后放入動(dòng)態(tài)鏈接庫(kù)DLL(DLL是動(dòng)態(tài)鏈接庫(kù)的英文縮寫,全稱是是Dynamic Link Library)中,這些庫(kù)函數(shù)構(gòu)成了Windows操作系統(tǒng)提供給程序員的編程界面,這個(gè)編程界面被稱為應(yīng)用編程接口API。庫(kù)函數(shù):百科上的解釋是:庫(kù)函數(shù)顧名思義是把函數(shù)放到庫(kù)里..是別人把一些常用到的函數(shù)編完放到一個(gè)文件里,供別人用。別人用的時(shí)候把它所在的文件名用#include加到里面就可以了。 庫(kù)分動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)。這些庫(kù)是通過編譯連接生成的(在編譯軟件里,可以設(shè)置文件生成庫(kù)文件還是普通的EXE文件)。 其實(shí)庫(kù)函數(shù)就好比是在word文件里寫了幾篇作文,然后保存成一個(gè)word文檔,那么這個(gè)word文檔就相當(dāng)于一個(gè)庫(kù),里面的每一篇作文都是一個(gè)庫(kù)函數(shù)。 動(dòng)態(tài)鏈接庫(kù)的英文縮寫是DLL,Windows中,動(dòng)態(tài)鏈接庫(kù)一般被存放在C:\Windows\System目錄下,DLL多數(shù)情況下是帶有DLL擴(kuò)展名的文件,但也可能是EXE或其他擴(kuò)展名。所以說:API函數(shù)可以看做是一些函數(shù),在windows操作系統(tǒng)下,這些函數(shù)通常存放在動(dòng)態(tài)鏈接庫(kù)中,其頭文件通常包含在windows.h中(windows.h是VC 或者VS中帶的)。這些存放在動(dòng)態(tài)鏈接庫(kù)里的API函數(shù)是操作系統(tǒng)與用戶程序之間的唯一接口,用戶程序只能通過這些庫(kù)函數(shù)(API函數(shù))請(qǐng)求操作系統(tǒng)服務(wù),即用戶程序只能通過這些存放在動(dòng)態(tài)鏈接庫(kù)里的API函數(shù)來實(shí)現(xiàn)系統(tǒng)調(diào)用。當(dāng)用戶程序中使用了這些API函數(shù)時(shí),通常會(huì)發(fā)生系統(tǒng)調(diào)用,操作系統(tǒng)進(jìn)入管態(tài)下運(yùn)行,系統(tǒng)調(diào)用結(jié)束后,再返回到用戶程序繼續(xù)往下執(zhí)行。 其實(shí),C語(yǔ)言中最常用的printf和scanf函數(shù),最后都是通過系統(tǒng)調(diào)用來完成的不止這兩個(gè)函數(shù),其實(shí)C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),很多都是通過系統(tǒng)調(diào)用實(shí)現(xiàn)的。而要使用系統(tǒng)調(diào)用,windows下必然要使用存放在動(dòng)態(tài)鏈接庫(kù)里的API函數(shù)。當(dāng)然,我們?cè)诔绦蛑幸部梢圆徊捎孟到y(tǒng)調(diào)用,因?yàn)闆]人規(guī)定你必須使用系統(tǒng)調(diào)用(當(dāng)然,有時(shí)候采用系統(tǒng)調(diào)用會(huì)簡(jiǎn)單的多)。比如完成一個(gè)簡(jiǎn)單的加法運(yùn)算程序,又比如單片機(jī)C語(yǔ)言編程,都沒有系統(tǒng)調(diào)用。許多應(yīng)用軟件,安裝后,在其目錄文件夾里通常會(huì)有一些DLL文件,這些DLL就是給該軟件來調(diào)用的。網(wǎng)上對(duì)API的解釋如下:API是系統(tǒng)的基石,是Windows的一磚一瓦。明確一個(gè)概念,軟件是運(yùn)行在系統(tǒng)平臺(tái)的支持上的,軟件的功能其實(shí)就是向系統(tǒng)伸請(qǐng),并由系統(tǒng)完成這些功能的過程。那么軟件要做的事情如何傳遞給系統(tǒng)呢,也就是這些API的作用了,系統(tǒng)定義了這些API函數(shù),做為支持軟件執(zhí)行系統(tǒng)功能的接口。不同的操作系統(tǒng)自然API會(huì)是不同的. mfc就是對(duì)api的封裝啊.就是很好的例子,候杰的深入淺出mfc正是講這些原理的.
嶧城網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
所謂系統(tǒng)調(diào)用,就是內(nèi)核提供的、功能十分強(qiáng)大的一系列的函數(shù)。這些系統(tǒng)調(diào)用是在內(nèi)核中實(shí)現(xiàn)的,再通過一定的方式把系統(tǒng)調(diào)用給用戶,一般都通過門(gate)陷入(trap)實(shí)現(xiàn)。系統(tǒng)調(diào)用是用戶程序和內(nèi)核交互的接口。
整個(gè)系統(tǒng)調(diào)用的過程可以總結(jié)如下:
1. 執(zhí)行用戶程序(如:fork)
2. 根據(jù)glibc中的函數(shù)實(shí)現(xiàn),取得系統(tǒng)調(diào)用號(hào)并執(zhí)行int $0x80產(chǎn)生中斷。
3. 進(jìn)行地址空間的轉(zhuǎn)換和堆棧的切換,執(zhí)行SAVE_ALL。(進(jìn)行內(nèi)核模式)
4. 進(jìn)行中斷處理,根據(jù)系統(tǒng)調(diào)用表調(diào)用內(nèi)核函數(shù)。
5. 執(zhí)行內(nèi)核函數(shù)。
6. 執(zhí)行RESTORE_ALL并返回用戶模式
下庫(kù)函數(shù)和系統(tǒng)調(diào)用的區(qū)別:
人們?cè)陂L(zhǎng)期編程中發(fā)現(xiàn)使用系統(tǒng)調(diào)用有個(gè)重大的缺點(diǎn),那就程序的移植性,比如說:linux系統(tǒng)提供的系統(tǒng)調(diào)用的函數(shù)和windows就不一樣,2者不單單是實(shí)現(xiàn)的方式不同,提供給用戶的函數(shù)名,參數(shù)都不同,這個(gè)可以理解。因此一個(gè)實(shí)現(xiàn)好的程序,利用了linux的系統(tǒng)調(diào)用譬如說wait4函數(shù),那么他在windows上編譯是通不過的。于是人們想了個(gè)辦法,就是封裝了windows和linux系統(tǒng)調(diào)用,給大家一個(gè)統(tǒng)一的函數(shù)(我習(xí)慣叫它接口),那么這樣程序的移植性問題就解決了。
所以可以這么認(rèn)為庫(kù)函數(shù)是對(duì)系統(tǒng)調(diào)用的封裝(不是所有的庫(kù)函數(shù)都是),為的是解決一些公共的問題和提供統(tǒng)一的系統(tǒng)調(diào)用的接口,他和系統(tǒng)調(diào)用的優(yōu)缺點(diǎn)就是:系統(tǒng)調(diào)用速度是明顯要快于庫(kù)函數(shù)(并不一定全部是,但絕大部分是),但系統(tǒng)調(diào)用缺乏移植性。庫(kù)函數(shù)速度要慢,但解決了移植問題。這些在開發(fā)過程中要根據(jù)自己的實(shí)際情況來決定使用那一個(gè)
系統(tǒng)調(diào)用樓上說的比較詳細(xì)了,那我說下庫(kù)函數(shù)和系統(tǒng)調(diào)用的區(qū)別:
人們?cè)陂L(zhǎng)期編程中發(fā)現(xiàn)使用系統(tǒng)調(diào)用有個(gè)重大的缺點(diǎn),那就程序的移植性,比如說:linux系統(tǒng)提供的系統(tǒng)調(diào)用的函數(shù)和windows就不一樣,2者不單單是實(shí)現(xiàn)的方式不同,提供給用戶的函數(shù)名,參數(shù)都不同,這個(gè)可以理解。因此一個(gè)實(shí)現(xiàn)好的程序,利用了linux的系統(tǒng)調(diào)用譬如說wait4函數(shù),那么他在windows上編譯是通不過的。于是人們想了個(gè)辦法,就是封裝了windows和linux系統(tǒng)調(diào)用,給大家一個(gè)統(tǒng)一的函數(shù)(我習(xí)慣叫它接口),那么這樣程序的移植性問題就解決了。
所以可以這么認(rèn)為庫(kù)函數(shù)是對(duì)系統(tǒng)調(diào)用的封裝(不是所有的庫(kù)函數(shù)都是),為的是解決一些公共的問題和提供統(tǒng)一的系統(tǒng)調(diào)用的接口,他和系統(tǒng)調(diào)用的優(yōu)缺點(diǎn)就是:系統(tǒng)調(diào)用速度是明顯要快于庫(kù)函數(shù)(并不一定全部是,但絕大部分是),但系統(tǒng)調(diào)用缺乏移植性。庫(kù)函數(shù)速度要慢,但解決了移植問題。這些在開發(fā)過程中要根據(jù)自己的實(shí)際情況來決定使用那一個(gè)。
1)如果是寬帶本身的問題,首先直接聯(lián)接寬帶網(wǎng)線測(cè)試,如果是寬帶的問題,聯(lián)系寬帶客服解決。
2)如果是路由器的問題,如果原來可以用,暫時(shí)不能用了,我自己的實(shí)踐是一個(gè)是斷掉路由器的電源在插上,等會(huì)看看。在有就是恢復(fù)出廠設(shè)置,從新設(shè)置就可以用了(這是在物理連接正確的前提下,有時(shí)是路由器尋IP地址慢或失敗引起的,并不是說路由器壞了)。
如果總是不能解決,建議給路由器的客服打電話,他們有電話在線指導(dǎo),我遇到自己不能解決的問題,咨詢他們給的建議是很有用的,他們會(huì)針對(duì)你的設(shè)置或操作給出正確建議的。
3)如果關(guān)閉了無(wú)線開關(guān)開啟就是了,如果是用軟件連接的無(wú)線,軟件不好用又經(jīng)常出問題是很正常的,沒有更好的方法,用路由器吧。另外就是網(wǎng)卡驅(qū)動(dòng)沒有或不合適引起的,網(wǎng)線接口或網(wǎng)線是不是有問題等。
4)如果是系統(tǒng)問題引起的,建議還原系統(tǒng)或重裝。
使用系統(tǒng)自帶的系統(tǒng)還原的方法:
系統(tǒng)自帶的系統(tǒng)還原:“開始”/“程序”/“附件”/“系統(tǒng)工具”/“系統(tǒng)還原”,點(diǎn)選“恢復(fù)我的計(jì)算機(jī)到一個(gè)較早的時(shí)間”,按下一步,你會(huì)看到日期頁(yè)面有深色的日期,那就是還原點(diǎn),你選擇后,點(diǎn)擊下一步還原(Win7810還原系統(tǒng),右擊計(jì)算機(jī)選屬性,在右側(cè)選系統(tǒng)保護(hù),系統(tǒng)還原,按步驟做就是了,如果有還原軟件,也可以用軟件還原系統(tǒng))。
5)有問題請(qǐng)您追問我。
兼容內(nèi)核有兩套系統(tǒng)調(diào)用(syscalls)及其相應(yīng)的系統(tǒng)調(diào)用表(syscall table):一套為Windows系統(tǒng)調(diào)用,另一套為L(zhǎng)inux系統(tǒng)調(diào)用。Windows應(yīng)用程序通過軟中斷“int 0x2e”訪問系統(tǒng)調(diào)用表進(jìn)行Windows系統(tǒng)調(diào)用。
ntdll當(dāng)中導(dǎo)出的大多是Native API,實(shí)際上也不需要做的這么底層,大多是一個(gè)全局HOOK,如果帶驅(qū)動(dòng)應(yīng)該就是內(nèi)核HOOK,不過內(nèi)核一般不穩(wěn)定,估計(jì)這種可能性不大!