进程

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;
    }

上一篇 下一篇

猜你喜欢

热点阅读