进程
2017-04-11 本文已影响17人
Fa1se003
1、什么是进程
进程的概念:正在运行的应用程序实例。
exe和进程,等价于类和对象。
进程的作用:进程给线程提供2g活动空间。
(进程是线程的宿主)
os如何管理进程:内核对象
进程如何管理内核对象:句柄表
线程的定义:参与cpu调度 获得时间片的 :线程是真正干活的人(进程好比工厂)
线程拥有什么? 堆栈
os如何管理线程? 内核对象
我们启动一个应用程序,系统会虚拟4Gb内存空间供我们使用,正常用户用的是低2G内存空间,高2G则是操作系统在使用。(高2G其实是所有程序共用的,如果两个程序都用了同一个内核对象,操作系统不会创建两份,而是让他们共用同一份)
2、进程地址空间的内存分配
分区 | x86 32位windows |
---|---|
空指针复制区 | 0x00000000~0x0000FFFF |
用户模式 | 0x00010000~0x7FFEFFFF |
64kb进入区 | 0x7FFF0000~0x7FFFFFFF |
内核 | 0x80000000~0xFFFFFFFF |
1、任何进程都是别的进程创建的
2、进程的创建过程
1、映射exe文件
2、创建内核对象eprocess
3、系统映射dll(nt.dll)
4、创建线程内核对象ethread
5、系统启动线程
映射dll(ntdll.LdrInitializeThunk)
线程开始执行
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;
}