我注意到所有_EPROCESS对象都通过ActiveProcessList
链接相互链接。
这份清单的目的是什么?
操作系统使用此活动进程列表是什么?
答案 0 :(得分:2)
在Windows NT中,可调度单元是线程。进程充当线程的容器,也作为抽象来定义虚拟内存映射是活动的(以及其他一些东西)。
所有操作系统都需要保留此信息。在不同的时间,操作系统的不同组件可能需要搜索与特定特征匹配的过程,或者需要评估所有活动过程。
那么,我们如何存储这些信息?为什么内存中没有巨大的阵列?嗯,这个数组有多大?我们是否可以将活动进程的数量限制为此阵列的大小?如果我们不能增长阵列会发生什么?我们是否准备好预先保留所有内存以跟踪进程?在低流程用例中,是不是浪费了很多内存?
因此我们可以将它们保存在链表中。
在NT有些情况下我们关心进程上下文但不关心线程上下文。其中之一是I / O完成。当操作系统异步处理I / O操作时,该I / O的最终完成可能位于与请求进程上下文不同的进程上下文中。因此,我们需要一些有关原始流程的记录和信息,以便我们可以“附加”到此流程。 “附加”到进程将我们转换到适当的用户模式内存可用的上下文。我们不关心线程上下文,我们关心进程上下文,所以这是有效的。