一,一般將程序定義成乙個正在執行的程式的乙個例項,有以下兩部分構成:
(1)乙個核心物件,作業系統用它來管理程序。
(2)乙個位址空間,其中包含所有可執行檔案或dll模組的**和資料,還包含動態記憶體分配,(比如執行緒堆疊和堆的分配)
二,程序是有惰性的。程序要做任何事情,都必須讓乙個執行緒在它的上下文中執行。該執行緒負責執行程序位址空間中包含的**。乙個程序可以有多個執行緒,所有執行緒都在程序的位址空間中「同時」執行**。為此,每個執行緒都有它自己的一組cpu暫存器和它自己的堆疊。對於所有要執行的執行緒,作業系統會輪流為每個執行緒排程一些cpu時間,它會採取迴圈方式,為每個執行緒都分配時間片,營造出所有執行緒都在併發執行的假象。
三,windows應用程式必須有乙個入口點函式,應用程式開始執行時,這個函式會被呼叫。有以下連個入口點函式:
int winapi _twinmain()
int _tmain()
四,程序例項控制代碼
載入到程序位址空間的每乙個可執行檔案或者dll檔案都被賦予了乙個獨一無二的例項控制代碼,可執行檔案的例項被當作winmain函式的第乙個引數hinstance傳入。winmain的hinstance引數的實際值是乙個記憶體基位址,系統將可執行檔案的映像載入到程序位址空間中的這個位置。
五,程序的命令列
系統在建立乙個新程序時,會傳乙個命令列給它。用於建立新程序的可執行檔案的名稱是命令列上的第乙個標記。
六,程序的環境變數
varname1=varvalue1\0
獲取環境變數的方式:
呼叫getenvironmentstring函式獲取完整地環境塊。子程序會繼承一組環境變數,這些環境變數和父程序的環境變數相同,子程序和父程序並不共享同乙個環境塊。
七,程序當前所在的驅動器和目錄
不提供完整地路徑名,各種windows函式會在當前驅動器的當前目錄查詢檔案和目錄,系統在內部跟蹤記錄著乙個程序的當前驅動器和目錄,由於這種資訊是以程序為單位來維護的,所以若程序中的乙個執行緒更改了當前驅動器或目錄,則對於該程序中的所有執行緒來說,此資訊被更改了。
八,createprocess函式
乙個執行緒呼叫createprocess時,系統將建立乙個程序核心物件,其初始使用計數為1.程序核心物件不是程序本身,而是作業系統用來管理這個程序的乙個小型資料結構—可以把程序核心物件想象成由程序統計資訊構成的乙個小型資料結構。然後,系統為新程序建立乙個虛擬位址空間,並將可執行檔案的**及資料載入到程序的位址空間。
然後,系統為新程序的主線程建立乙個執行緒核心物件,執行緒核心物件也是乙個小型資料結構,用它來管理這個執行緒。
id為0的程序是「 系統空閒程序」
九,終止程序的方式:
(1)主線程的入口點函式返回
(2)程序中的乙個執行緒呼叫exitprocess
(3)另乙個程序中的執行緒呼叫terminateprocess
(4)程序中的所有執行緒都「自然死亡」
程序在終止後不會洩露任何東西
windows核心程式設計 程序
程序定義成乙個正在執行的程式的例項,包含兩個部分 1 乙個核心物件,作業系統用它來管理程序。核心物件也是系統儲存程序統計資訊的地方。2 乙個位址空間,其中包含所有可執行 exe檔案 或dll模組的 和資料。此外,還包括動態記憶體分配,比如執行緒堆疊和堆的分配。windows支援兩種型別的應用程式 g...
windows核心程式設計 程序初步
程序 什麼是程序,系統如何建立乙個核心物件來管理程序。如何通過程序核心物件來操作乙個程序。程序的屬性,以及查詢和修改程序屬性的函式。程序的結束。乙個程序,就是乙個正在執行的程式!乙個程式,可以產生多個程序。程序是死的,程序必須有乙個執行緒!primary thread 如果程序內所有執行緒退出,那麼...
windows 核心程式設計 筆記之 程序
內容 windows程序 process 如上圖所示,windows任務管理器中的程序tab列中列出了系統管理的所有程序,我們經常利用任務管理器來結束某個沒有得到響應的應用程式,但是,作為乙個windows程式設計師,我們應該有這樣的疑問 程序是什麼東西?系統為什麼會存在程序?程序有哪些屬性?程序是...