windows进程与线程-任务
什么是进程线程
进程线性是在多任务操作系统下对程序(运行中)更专业的名称。实际上,现计算机上运行的程序是由一个进程多个线程组成运行。什么是组成?往后看。
任务
从操作系统的角度来说,每个进程又称为一个任务。在CPU手册中,任务 又指代线程,比如TSS(任务转态段)就是使用"任务"指代线程。是不是感觉实际上就是一段描述型的结构体?
进程资源
都说c语言是计算机基础,拥有更快计算机运算能力,在很多单片机上都是使用c语言做的控制,在更为精密的计算机上也是如此。学过汇编,底层二进制的都知道,在底层只有0101,编程语言中的字符串等基本类型,实际上都只不过是类似于C语言中的结构体。而"进程"就是一个结构体,这个结构体给二进制结构做了界限,用来更方便地组织和分配系统资源。
  以windows系统为例,每个进程都拥有如下资源
  1、进程空间
  2、全局进程id,PID
  3、一个可执行影像(image),也就是该进程的程序文件(可执行文件)在内存中的表示
  4、一个或多个进程
  5、一个位于内核空间中的名为EPROCESS(进程执行块)的数据结构,记录进程的关键信息
  6、一个位于内核空间的`对象句柄表`
  7、一个用于描述内存目录表起始位置的基地址,简称页目录基地址,保证当前进程的虚拟地址被翻译成正确的物理地址
  8、一个位于用户空间中的进程环境块(PEB)
  9、一个访问令牌(access token),用于表示该进程的用户、安全组以及优先级
验证
windbg打开实验文件,随便哪个附加,加载模块和符号.在命令行中执行!process 0 0,列出系统中所有进程。
!process 0 0的第一个参数用来指定要显示的进程ID,0代表所有进程。第二个参数用来指定要显示的进程属性,0代表只显示最基本的进程属性

  SessionId是指该进程所在的Windows会话(session)的ID号。具体作用于不同登录用户的不同会话。
  Cid指ID,又叫Client ID。用来标识进程的一个整数,主要用来寻找用户态函数地址。
  ParentCid是父进程的进程ID,即创建该进程的那个进程的进程ID
  DirBase描述的是该进程顶级页表的位置,即当CPU切换到该进程执行时,寻找真实物理地址的位置。不同分页方式有着不同的分页寻址方式。
  ObjectTable的含义是该进程的内核对象和句柄表格。在Windows系统使用这个表格将句柄翻译为指向内核对象的指针。
  HandleCount为该进程所使用的句柄个数,也就是ObjectTable所包含的表项数。
经过试验,可知,在windows操作系统中,进程实际上就是一块结构体,而运行这块结构的系统也是一大块结构体。
其中最重要的是进程在windbg中的描述,及其代表的含义。
                    
                
                
            
        
浙公网安备 33010602011771号