系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > 關(guān)于進(jìn)程和Windows應(yīng)用程序的介紹

關(guān)于進(jìn)程和Windows應(yīng)用程序的介紹

時(shí)間:2013-04-22 10:24:00 作者:木木 來(lái)源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請(qǐng)使用手機(jī)瀏覽器訪問(wèn): https://m.xitongzhijia.net/xtjc/20121120/18577.html 手機(jī)查看 評(píng)論

  簡(jiǎn)單地說(shuō),當(dāng)計(jì)算機(jī)運(yùn)行一個(gè)軟件,會(huì)被拆分成若干部分來(lái)執(zhí)行,進(jìn)程就是計(jì)算機(jī)正在運(yùn)行的程序,它具體指程序執(zhí)行時(shí)所需的虛擬地址空間和控制信息。而每一個(gè)應(yīng)用程序運(yùn)行于獨(dú)立的進(jìn)程、他們擁有自己獨(dú)立的地址空間。不同應(yīng)用程序的分界線稱為進(jìn)程邊界。今天就為大家介紹windows的那些進(jìn)程與應(yīng)用程序,希望了解這些能更好的為系統(tǒng)服務(wù).

  進(jìn)程

  一般進(jìn)程可以定為一個(gè)正在運(yùn)行的程序的一個(gè)實(shí)例,

  一個(gè)內(nèi)核對(duì)象,操作系統(tǒng)可以用它來(lái)管理進(jìn)程。也是系統(tǒng)保存進(jìn)程統(tǒng)計(jì)信息的地方。

  一個(gè)地址空間,其中包含了可執(zhí)行文件和DLL模塊的代碼數(shù)據(jù),同時(shí)包括動(dòng)態(tài)內(nèi)存分配,和線程堆棧和堆得分配。

  CPU的工作方式,是 一個(gè)進(jìn)程可以有多個(gè)線程..然后CPU會(huì)輪流調(diào)度資源分配給各個(gè)線程,就像一個(gè)時(shí)鐘一樣。

  關(guān)于Windows應(yīng)用程序的組成

  要點(diǎn)描述:

  1. GUI 和 CUI 分別表示 圖形和控制臺(tái)的界面,

  2./SUBSYSTEM:CONSOLE 和 /SUB-SYSTEM:WINDOWS 分別是控制臺(tái)和窗口的鏈接器開(kāi)關(guān)

  3._tWinMain 圖形界面的入口點(diǎn)函數(shù) 和 _tmain 控制臺(tái)界面的入口點(diǎn)函數(shù)。

  一、Windows一般可以建立兩種應(yīng)用程序。

  1.GUI程序 - 圖形用戶界面 - 它使用的連接器開(kāi)關(guān)是/SUBSYSTEM:CONSOLE

  2.CUI程序 - 控制臺(tái)界面 - 它使用的連接器開(kāi)關(guān)是/SUB-SYSTEM:WINDOWS

  操作系統(tǒng)會(huì)加載并檢查可執(zhí)行文件映像的文件頭,并獲取這個(gè)子系統(tǒng)值。

  根據(jù)子系統(tǒng)值來(lái)創(chuàng)建 一個(gè)符合要求的程序界面。

  二、 Windows 應(yīng)用程序

  都會(huì)有個(gè)入口點(diǎn)函數(shù),在程序運(yùn)行時(shí),函數(shù)會(huì)被調(diào)用。

  int WINAPI _tWinMain(

  HINSTANCE hInstanceExe,

  HINSTANCE,

  PTSTR pszCmdLine,

  int nCmdShow);

  int _tmain(

  int argc,

  TCHAR *argv[],

  TCHAR *envp[]);

  操作系統(tǒng)實(shí)際并不調(diào)用我們所寫的入口點(diǎn)函數(shù)。相反,它會(huì)調(diào)用由C/C++運(yùn)行庫(kù)實(shí)現(xiàn)并鏈接時(shí)使用-entry:命令選項(xiàng)來(lái)設(shè)置

  的一個(gè)C/C++運(yùn)行時(shí)啟動(dòng)函數(shù)。該函數(shù)將初始化C/C++運(yùn)行庫(kù),使我們能調(diào)用malloc和free之類函數(shù)。

  應(yīng)用程序類型和相應(yīng)的入口點(diǎn)函數(shù)表

應(yīng)用程序類型和相應(yīng)的入口點(diǎn)函數(shù)表

  當(dāng)鏈接器正確選擇了C/C++運(yùn)行庫(kù)啟動(dòng)函數(shù)后,鏈接器會(huì)根據(jù)指定的鏈接器開(kāi)關(guān),尋找相應(yīng)的入口點(diǎn)函數(shù),否則會(huì)返回

  "unresolved external symbol"(無(wú)法解析的外部符號(hào))錯(cuò)誤。 不然一般會(huì)根據(jù)情況分別選擇 嵌入可執(zhí)行文件的啟動(dòng)函數(shù)。

  當(dāng)然我們也可以從自己的項(xiàng)目中移除/SUBSYSTEM鏈接器開(kāi)關(guān),讓程序自動(dòng)判斷應(yīng)該使用哪個(gè)子系統(tǒng)。

  去啟動(dòng)入口點(diǎn)函數(shù) (WinMain, wWinMain, main, or wmain) 。

  VisualC++有自帶C運(yùn)行庫(kù)的源碼?梢栽趀rtex.c文件中找到 這4個(gè)啟動(dòng)入口點(diǎn)函數(shù)源代碼。這些啟動(dòng)函數(shù)的用途下面簡(jiǎn)單說(shuō)下:

  1.獲取指向心進(jìn)程的完整命令行的一個(gè)指針。

  2.獲取指向新進(jìn)程的壞境變量的一個(gè)指針。

  3.初始化C/C++運(yùn)行庫(kù)的全局變量。如果包含了StdLib.h,我們的代碼就可以訪問(wèn)這些變量。

  4.初始化C運(yùn)行庫(kù)內(nèi)存分配函數(shù)malloc和calloc和其他底層I/O歷程使用的堆。

  5.調(diào)用所有全局和靜態(tài)C++類對(duì)象的構(gòu)造函數(shù)。

  C/C++啟動(dòng)函數(shù)會(huì)調(diào)用應(yīng)用程序的入口點(diǎn)函數(shù)。比如我們寫了一個(gè)_tWinMain函數(shù),且定義了_UNICODE

  其調(diào)用過(guò)程如下:

  GetStartupInfo(&StartupInfo);

  int nMainRetVal = wWinMain((HINSTANCE)&__ImageBase, NULL, pszCommandLineUnicode,

  (StartupInfo.dwFlags & STARTF_USESHOWWINDOW)

  ? StartupInfo.wShowWindow : SW_SHOWDEFAULT);

  如果沒(méi)有定義_UNICODE,其調(diào)用過(guò)程將如下所示:

  GetStartupInfo(&StartupInfo);

  int nMainRetVal = WinMain((HINSTANCE)&__ImageBase, NULL, pszCommandLineAnsi,

  (StartupInfo.dwFlags & STARTF_USESHOWWINDOW)

  ? StartupInfo.wShowWindow : SW_SHOWDEFAULT);

  注意_ImageBase是一個(gè)鏈接器定義的偽變量,可執(zhí)行文件都被映射到應(yīng)用程序內(nèi)存中的什么位置以后討論。

  現(xiàn)在 我們?nèi)绻麑懥艘粋(gè)_main函數(shù),可以定義?_UNICODE其調(diào)用過(guò)程如下:

  int nMainRetVal = wmain(argc, argv, envp);

  沒(méi)定義_UNICODE,調(diào)用過(guò)程如下:

  int nMainRetVal = main(argc, argv, envp);

  另外注意用Visual Studio 生成的應(yīng)用程序CUI是沒(méi)有入口點(diǎn)的第3個(gè)參數(shù)

  int _tmain(int argc, TCHAR* argv[]);

  要自己添加成

  int _tmain(int argc, TCHAR* argv[], TCHAR* env[])

  env參數(shù)指向一個(gè)參數(shù),所有環(huán)境變量和值 都用等號(hào)(=)分隔。

  為安全起見(jiàn) Microsoft 并不贊成使用所有這些變量,因?yàn)槭褂昧诉@些變量代碼可能會(huì)在C運(yùn)行庫(kù)初始化這些變量之前開(kāi)始執(zhí)行,因此我們應(yīng)該直接調(diào)用對(duì)于的WindowsAPI函數(shù)。

  進(jìn)程是操作系統(tǒng)中最基本、重要的概念。是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動(dòng)態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動(dòng)規(guī)律引進(jìn)的一個(gè)概念,所有多道程序設(shè)計(jì)操作系統(tǒng)都建立在進(jìn)程的基礎(chǔ)上。而應(yīng)用程序是指為了完成某項(xiàng)或某幾項(xiàng)特定任務(wù)而被開(kāi)發(fā)運(yùn)行于操作系統(tǒng)之上的計(jì)算機(jī)程序。

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

0

沒(méi)有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見(jiàn)解

立即評(píng)論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場(chǎng)

其他版本軟件

人氣教程排行

XP系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄