1雪标、什么是進程
進程的概念:正在運行的應(yīng)用程序?qū)嵗?br> exe和進程讼渊,等價于類和對象。
進程的作用:進程給線程提供2g活動空間恃鞋。
(進程是線程的宿主)
os如何管理進程:內(nèi)核對象
進程如何管理內(nèi)核對象:句柄表
線程的定義:參與cpu調(diào)度 獲得時間片的 :線程是真正干活的人(進程好比工廠)
線程擁有什么? 堆棧
os如何管理線程? 內(nèi)核對象
我們啟動一個應(yīng)用程序亦歉,系統(tǒng)會虛擬4Gb內(nèi)存空間供我們使用恤浪,正常用戶用的是低2G內(nèi)存空間,高2G則是操作系統(tǒng)在使用肴楷。(高2G其實是所有程序共用的水由,如果兩個程序都用了同一個內(nèi)核對象,操作系統(tǒng)不會創(chuàng)建兩份赛蔫,而是讓他們共用同一份)
2砂客、進程地址空間的內(nèi)存分配
分區(qū) | x86 32位windows |
---|---|
空指針復(fù)制區(qū) | 0x00000000~0x0000FFFF |
用戶模式 | 0x00010000~0x7FFEFFFF |
64kb進入?yún)^(qū) | 0x7FFF0000~0x7FFFFFFF |
內(nèi)核 | 0x80000000~0xFFFFFFFF |
1泥张、任何進程都是別的進程創(chuàng)建的
2、進程的創(chuàng)建過程
1鞠值、映射exe文件
2媚创、創(chuàng)建內(nèi)核對象eprocess
3、系統(tǒng)映射dll(nt.dll)
4彤恶、創(chuàng)建線程內(nèi)核對象ethread
5筝野、系統(tǒng)啟動線程
映射dll(ntdll.LdrInitializeThunk)
線程開始執(zhí)行
CreateProcess測試代碼:
#include "stdafx.h"
#include <windows.h>
int main(int argc, char* argv[])
{
STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi;
memset(&pi,0,sizeof(pi));
CreateProcess(TEXT("c:\\迷你pdf閱讀器.exe"),NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);
DWORD errCode = GetLastError();
if(errCode == ERROR_SUCCESS)
{
Sleep(1000*5);
TerminateProcess(pi.hProcess,0);
}
else
{
printf("can not open program.");
Sleep(1000*5);
}
return 0;
}