《深入解析Windows操作系统》第五章:进程,线程,作业

内容总结:

在这里插入图片描述

重难点笔记

进程的内部机理
数据结构
每个 Windows进程都是由一个执行体进程(EPROCESS)结构来表示的。 EPROCESS结构中除了包含许多与进程有关的属性以外还包含和指向了许多其他的相关数据结构。例如,每个进程都有一个或者多个线程,这些线程由执行体线程(ETHREAD)结构来表示, EPROCESS和相关的数据结构位系统空间中,不过,进程环境块(PEB)是个例外,它位于进程地址空间中(因为它包含一些需要由用户模式代码来修改的信息)。

受保护的进程
受保护进程可以由任何应用程序创建;然而,操作系统仅在以下条件下允许一个进程被保护:它的映像已被一个特殊的 Windows Media证书数字签名过。 Windows中的受保护的媒体路径(PMP)使用受保护进程来提供对高价值媒体的保护,同时DVD播放器之类应用程序的开发人员可以使用媒体基础AP(Media Foundation API)来使用受保护进程的功能。

创建进程的流程:
1.验证参数,转换 windows子系统标志和选项为对应的原生形式:解析、验证和转换属性列表为其原生形式。
2.打开将要在该进程中执行的映像文件(exe)
3.创建 Windows执行体进程对象
4.创建初始线程(栈、执行环境,以及 Windows执行体线程对象
5.进行创建之后的、 Windows子系统特有的进程初始化。
6.开始执行初始线程(除非指定了 CREATESUSPENDED标志)
7.在新进程和线程的环境中,完成地址空间的初始化(比如加载必要的DLL),并开始执行程序
在这里插入图片描述
线程的内部机理
数据结构
在操作系统层次上, Windows线程是由一个执行体线程对象来表示的。执行体线程对象封装了一个 ETHREAD结构,而后者又含有一个 KTHREAD结构作为它的第一个成员。 ETHREAD结构和它所指向的结构都位于系统地址空间中,唯一的例外是线程环境块(TEB),它位于进程地址空间中(同样地是因为用户模式组件需要访问它)。而且,Windows子系统进程(srss为Windows进程中创建的每个线程维护了一个平行的结构称为 CSRTHREAD另外,对于那些已经调用了任一个 Windows子系统USER或GD函数的线程, Windows子系统的内核模式部分(Win3k.sys)为每个这样的线程维护了一个数据结构,称为
W3 2THREAD2结构,线程的 KTHREAD结构指向此结构。

线程状态
1. 就绪( Ready):处于就绪状态中的线程正在等待执行(或在一次等待后准备好被换入)。
2. 备用(Standby:)处于备用状态中的线程已经被选中,接下来将在某个特定的处理器上运行。
3. 运行(Running):一旦分发器将环境切换到一个线程,于是,该线程即进入运行状态,并开始执行。
4. 等待(Waiting):一个线程可以通过几种方法进入到等待状态中:它可以自愿等待一个对象以便同步其执行过程、操作系统可以代替该线程进入等待(比如为了解决一个换页/0),或者环境子系统可以指示该线程自行挂起。
5. 转换( Transition):如果一个线程已经准备好执行,而它的内核栈被换出了内存,那么该线程进入转换状态一旦它的内核栈被换回到内存中,该线程将进入就绪状态。
6. 终止(Terminated):当一个线程完成执行时,它进入终止状态。
7. 初始( Initialized):当一个线程被创建时,内部使用此状态。

优先级提升
windows调度器会通过一个内部的优先级提升机制,周期性地调整线程的当前优先级。在很多情况下,它这样做是为了减少各种延迟(就是说,让线程更快地响应它们等待着的事件)以及提高响应能力。以下是本节中将讨论的一些优先级提升的情形:
1. 由于调度器/分发器事件而提升(减少延迟)
2. 由于操作完成而提升(减少延迟)
3. 由于输入而提升(减少延迟/提高响应)
4. 由于线程等待某个执行体资源的时间太长而提升(避免饥饿)
5. 一个准备运行的线程在相当一段时间内没有被运行过而提升(避免饥饿和优先级反转)

环境切换
一个线程的环境和用于环境切换的过程随着处理器体系结构的不同而不尽相同。一个典型的环境切换需要保存和加载以下的数据:
1. 指令指针。
2. 内核栈的指针
3. 指向该线程运行所在的地址空间(该进程的页表目录)的指针

空闲(de)线程
当一个CPU上不存在可运行的线程时, Windows把执行权分发给该CPU的空闲线程。每个CPU都被分配了一个空闲线程,因为在一个多处理器系统上,当一个CPU正在执行某个线程的时候,另一个CPU可能没有线程要执行。所有的空闲线程都属于空闲进程。空闲进程和空闲线程在很多情况下都是进程和线程的特例。

作业对象
作业对象是一个可命名的、可保护的、可共享的内核对象,它可以将一个或者多个进程作为一个组来控制和管理。作业对象的基本功能是,允许一组进程被当作一个单元来加以管理和控制。一个进程只能是一个作业对象的成员。作业对象也为所有与它关联的进程记录了基本的审计信息,也为曾经与它关联过的,但后来已终止的进程记录审计信息。
利用 windowsGetQueuedCompletionStatus的函数,作业也可以被关联到一个i/0完成端口对象上,而其他的线程可能正在等待此/0完成端口对象。

作业的限制
1. 活动进程的最大数量,限制了作业对象中可同时存在的进程数量。
2. 作业范围内的用户模式CPU时间限制,限制了该作业中的进程(包括已经在运行的和已经退出的进程)可以消耗的用户模式CPU时间的最大数量。
3. 针对每个进程的用户模式CPU时间限制,允许该作业中的每个进程可以累积用户模式CPU时间到一个固定的最大值。
4. 作业的处理器亲和性,为作业中的每个进程设置处理器亲和性掩码。
5. 作业的处理器组亲和性,设置一个处理器组的列表,作业中的进程可以被分配到这些组上。
6. 作业的进程优先级类别,为作业中的每个进程设置优先级类别。
7. 默认的工作集最小值和最大值,为作业中每个进程定义工作集最小值和最大值。
8. 进程和作业中已提交的虚拟内存的限制,定义了单个进程或者整个作业可提交的虚拟地址空间的最大数量。

《深入解析Windows操作系统》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值