windows进程和线程

本文章是作者在学习《windows内核原理与实现》一书时的读书笔记

第四篇:windows进程和线程

进程:各种资源的容器,定义了一个地址空间作为基本的执行环境

线程:一个指令执行序列。可以直接访问所属进程的资源

多进程模型:

①伪并行:计算机只有一个cpu将处理器的时间细分,轮流执行多个任务,用户感觉任务在被同时执行多个程序

②真并行:多个cpu,多个任务在多个cpu上并行执行。

为了实现上述功能操作系统需要维护一个全局的进程表,记录正在执行的进程;将时间分片,即设置时钟中断;实施进程切换,保留上一个进程的环境信息,恢复下一个进程的执行环境。

进程在建立时需要一个初始的二进制可执行模块,进而得到下图的内存基本结构,当进程在运行过程中需要更多的内存时,可以从动态内存区域获取,不用时再释放。若该进程还需要额外的二进制模块,则这些模块的代码和静态数据区也会适时被引入到进程中来,并占据一定内存空间。一个进程在运行时可能会需要创建其他进程,需要向操作系统发出请求。进程的终止也需要向操作系统发请求。


线程基本概念:

用户级线程和内核级线程两种线程模型,用户级线程模型是应用程序在操作系统提供的单个控制流的基础上,在部分控制节点上分离出一些虚拟的控制流,进而模拟多个控制流的行为;内核级线程是指操作系统提供的线程语义,内核级线程可能应用各种算法来分配处理器时间。二者各有优缺点。

当线程数量较多时,可以采用线程池技术作为一种优化措施。

三种典型的线程调度算法:①先到先服务,非抢占式系统中,使用一个先进先出队列实现线程调度,线程获得执行权后一直执行直到线程放弃执行权,简单但容易造成不公平②时间片轮转调度算法,一个队列,一个线程获得执行权之后,一直执行直到时间片用完或自己放弃执行权,存在固有线程切换开销。③优先级调度算法,当一个线程用完时间片或放弃执行权,系统选择优先级最高的线程作为下一个执行,同等优先级的线程使用①或②的策略,高优先级的线程可能霸占处理器资源。

进程和线程的数据结构

内核层的进程和线程对象:KPROCESS的数据结构主要包括两类信息,一类跟进程的内存环境相关,另一类是与其线程相关的属性;KTHREAD的数据结构主要包括参与现场调度的必要信息已其维护控制流的状态;偏重于基本的功能和机制

执行体层的进程和线程对象:EPROCESS包含了内核层的KPROCESS对象和ETHREAD包含了内核层的KTHREAD对象;侧重于管理和策略。

进程和线程管理

windows进程的句柄表:当一个进程利用名称创建或者打开一个对象时,会获得一个句柄,指向该对象,进程可以通过句柄访问该对象。句柄是进程范围内的对象引用,能够显著提高引用对象的效率。                                                                                    在windows server 2003中句柄表(HANDLE_TABLE)是一个多层结构,每个句柄项的结构是HANDLE_TABLE_ENTRY,大小为8B,分配句柄表内存时按照页面(4KB大小)来申请内存。执行体在创建进程时,首先为新进程分配一个单层句柄表,随着进程句柄数量的增加,单层被扩展成二层句柄表,进一步被扩展成三层句柄表。其中最底层句柄表每个页面都包括1024个指针,最底层句柄表每个页面包括512个句柄。


句柄到内核对象的解析:一个有效的句柄有四种可能,-1代表当前进程,-2代表当前线程,负值,其绝对值为内核句柄表中索引,仅限于内核模式的函数可用,不超过2^26的正值,当前进程的句柄表中的索引。对于前两种情况,解析时无需查找句柄表,简单的检查访问权限后即可返回进程对象或线程对象,对于后两种情况,首先调用执行体函数,查找句柄表,检查访问权限,并进行审计,最后返回对象体。                                                                                                                                                    句柄表除了作为对象引用的容器以外,还是分配进程和线程的唯一ID的有效手段,通过调用函数在全局句柄表中创建句柄索引值,此句柄表也叫CID句柄表,它的每个句柄表项都包含了进程或线程对象的地址。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值