免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

windows系統調用表的簡單介紹

windows系統上創建一個進程用了什么系統調用

進程(Process)是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。程序只是一組指令的有序集合,它本身沒有任何運行的含義,只是一個靜態實體。而進程則不同,它是程序在某個數據集上的執行,是一個動態實體。它因創建而產生,因調度而運行,因等待資源或事件而被處于等待狀態,因完成任務而被撤消,反映了一個程序在一定的數據集上運行的全部動態過程。線程(Thread)是進程的一個實體,是CPU調度和分派的基本單位。線程不能夠獨立執行,必須依存在進程中,由進程提供多個線程執行控制。從內核角度講線程是活動體對象,而進程只是一組靜態的對象集,進程必須至少擁有一個活動線程才能維持運轉。當某個應用程序調用一個創建進程的函數比如CreateProcess或者用戶執行某一個程序(其實windows下用戶執行一般普通程序是由explorer.exe調用CreateProcess來完成),操作系統把這個過程分成以下步驟來完成:1.打開將要在該進程中執行的映像文件。2.創建Windows執行體進程對象。3.創建初始線程(棧、堆執行環境初始化及執行線程體對象)。4.通知Windows子系統新進程創建了(子系統是操作系統的一部分它是一個協助操作系統內核管理用戶態/客戶方的一個子系統具體的進程為Csrss.exe)。5.開始執行初始線程(如果創建時候指定了線程的CREATE_SUSPENDED狀態則線程暫時掛起不執行)。6.在新進程和線程環境中完成地址空間的初始化(比如加載必須的DLL和庫),然后開始到進程入口執行。到這里操作系統完成一個新進程的創建過程。下面來看下具體每一步操作系統所做的工作:1.打開將要在該進程中執行的映像文件。首先操作系統找到執行的Windows映像然后創建一個內存區對象,以便后面將它映射到新的進程地址空間中。2.創建Windows執行體進程對象。接下來操作系統調用內部的系統函數NtCreateProcess來創建一個Windwos執行體進程對象。具體步驟是:(1)建立EPROCESS*分配并初始化EPROCESS結構塊*從父進程處繼承得到進程的親和性掩碼*分配進程的最大最小工作集尺(由兩個參數決定PsMinimumWorkingSet PsMaximumWorkingSet)*降新進程的配額塊設置為父進程配額塊地址,并遞增父進程配額塊的引用計數*繼承Windows的設備名字空間*將父進程進程ID保存在新進程對象的InheritedFormUniqueProcessId中*創建該進程的主訪問令牌*初始化進程句柄表*將新進程的退出狀態設置為STATUS_PENDING(2)創建初始的進程地址空間*在適當的頁表中創建頁表項,以映射初始頁面*從MmresidentAvailablePage算出進程工作集大小*系統空間的非換頁部分和系統緩存的頁表被映射到進程(3)初始化內核進程塊KPROCESS(4)結束進程地址空間的創建過程(5)建立PEB(6)完成執行體進程對象的創建過程3.創建初始線程(棧、堆執行環境初始化及執行線程體對象)。這時候Windows執行體進程對象已經完全建立完成,但它還沒有線程所以無法執行,接下來系統調用NtCreateThread來創建一個掛起的新線程它就是進程的主線程體。4.通知Windows子系統新進程創建了(子系統是操作系統的一部分它是一個協助操作系統內核管理用戶態/客戶方的一個子系統具體的進程為Csrss.exe)。接下來操作系統通過客戶態(Kernel32.dll)給Windows子系統(Csrss)發送一個新進程線程創建的數據消息,讓子系統建立自己的進程線程管理塊。當Csrss接收到該消息時候執行下面的處理:*復制一份該進程和線程句柄*設置進程優先級*分配Csrss進程塊*把新進程的異常處理端口綁定到Csrss中,這樣當該進程發生異常時,Csrss將會接收到異常消息*分配和初始化Csrss線程塊*把線程插入到進程的線程列表中*把進程插入到Csrss的線程列表中*顯示進程啟動光標5.開始執行初始線程(如果創建時候指定了線程的CREATE_SUSPENDED狀態則線程暫時掛起不執行)。到這里進程環境已經建立完畢進程中開始創建的主線程到這里獲得執行權開始執行線程。6.在新進程和線程環境中完成地址空間的初始化(比如加載必須的DLL和庫),然后開始到進程入口執行。到這步實質是調用ldrInitializeThunk來初始化加載器,堆管理器NLS表TLS數組以及臨界區結構,并且加載任何必須要的DLL并且用DLL_PROCESS_ATTACH功能代碼來調用各DLL入口點,最后當加載器初始化例程返回到用戶模式APC分發器時進程映像開始在用戶模式下執行,然后它調用線程啟動函數開始執行。到這里操作系統完成了所有的創建工作,我們寫的程序就這樣被操作系統調用運行起來了。

成都創新互聯公司自2013年創立以來,先為博白等服務建站,博白等地企業,進行企業商務咨詢服務。為博白企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

什么是系統調用,與程序調用有何不同

所謂系統調用,就是內核提供的、功能十分強大的一系列的函數。這些系統調用是在內核中實現的,再通過一定的方式把系統調用給用戶,一般都通過門(gate)陷入(trap)實現。系統調用是用戶程序和內核交互的接口。

整個系統調用的過程可以總結如下:

1. 執行用戶程序(如:fork)

2. 根據glibc中的函數實現,取得系統調用號并執行int $0x80產生中斷。

3. 進行地址空間的轉換和堆棧的切換,執行SAVE_ALL。(進行內核模式)

4. 進行中斷處理,根據系統調用表調用內核函數。

5. 執行內核函數。

6. 執行RESTORE_ALL并返回用戶模式

下庫函數和系統調用的區別:

人們在長期編程中發現使用系統調用有個重大的缺點,那就程序的移植性,比如說:linux系統提供的系統調用的函數和windows就不一樣,2者不單單是實現的方式不同,提供給用戶的函數名,參數都不同,這個可以理解。因此一個實現好的程序,利用了linux的系統調用譬如說wait4函數,那么他在windows上編譯是通不過的。于是人們想了個辦法,就是封裝了windows和linux系統調用,給大家一個統一的函數(我習慣叫它接口),那么這樣程序的移植性問題就解決了。

所以可以這么認為庫函數是對系統調用的封裝(不是所有的庫函數都是),為的是解決一些公共的問題和提供統一的系統調用的接口,他和系統調用的優缺點就是:系統調用速度是明顯要快于庫函數(并不一定全部是,但絕大部分是),但系統調用缺乏移植性。庫函數速度要慢,但解決了移植問題。這些在開發過程中要根據自己的實際情況來決定使用那一個

windows系統調用表怎么用

兼容內核

有兩套

系統調用

(syscalls)及其相應的系統調用表(syscall

table):一套為Windows系統調用,另一套為Linux系統調用。Windows應用程序通過軟中斷“int

0x2e”訪問系統調用表進行Windows系統調用。

新聞名稱:windows系統調用表的簡單介紹
網站URL:http://m.newbst.com/article36/dsighpg.html

成都網站建設公司_創新互聯,為您提供建站公司網站設計品牌網站設計企業網站制作靜態網站響應式網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管