windows - Windows 中事件进程列表的用途?

标签 windows process kernel

我注意到所有 _EPROCESS 对象都通过 ActiveProcessList 链接相互链接。
这个列表的目的是什么。
操作系统使用这个事件进程列表做什么?

最佳答案

在Windows NT中,可调度的单位是线程。进程充当线程的容器,也充当定义哪些虚拟内存映射处于事件状态(以及其他一些东西)的抽象。

所有操作系统都需要保持此信息可用。在不同的时间,操作系统的不同组件可能需要搜索与特定特征匹配的进程,或者需要评估所有事件进程。

那么,我们如何存储这些信息呢?为什么不是内存中的巨大数组?那么,这个阵列有多大?我们是否愿意将事件进程的数量限制为该数组的大小?如果我们不能增长数组会怎样?我们是否准备好预先保留所有内存以跟踪进程?在低进程用例中,那不是浪费了很多内存吗?

所以我们可以将它们保存在链表中。

在 NT 中,有些情况下我们关心进程上下文而不是线程上下文。其中之一是 I/O 完成。当操作系统异步处理 I/O 操作时,该 I/O 的最终完成可能在与请求进程上下文不同的进程上下文中。所以,我们需要一些关于原始进程的记录和信息,以便我们可以“附加”到这个进程。 “附加”到进程将我们交换到具有可用的适当用户模式内存的适当上下文中。我们不关心线程上下文,我们关心进程上下文,所以这是可行的。

关于windows - Windows 中事件进程列表的用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5396882/

相关文章:

带有 EOF 的 java 运行 shell 命令

c++ - 获取进程用户名c++

c# - 绑定(bind) Ninject Kernel ToConstant 并使用 InTransientScope 有什么意义?

c - parent 不创造 child ?

c - Linux内核取消文件链接的正确方法

使用 Linux C 程序检查是否存在并读取/处理文件

windows - 在 Windows 上的 Django 上使用多个 CPU

c# - .NET TreeNode 能否知道它的父级已更改?

windows - Mac 与 Windows 浏览器字体高度渲染问题

c++ - Windows 启动时的第二次自动运行