3

如果我有一个进程,它已在 RAM 中分配了一些空间。如果进程创建了一个线程(事实上它也有),那么线程也需要一些空间来执行它。不会吗?那么它会增加分配给该进程的空间大小,还是会在其他地方创建线程空间?如果是,在 RAM 上的哪个位置需要它与进程所拥有的空间连续?

4

2 回答 2

2

调度程序(在内核中)的某个地方会有一些开销,因为它需要维护有关线程的信息。

在特定于进程的区域也会有一些开销,因为每个线程都需要一个堆栈,并且当用户代码需要访问时,你不想将东西放入内核特定的空间。

于 2013-05-27T05:47:36.790 回答
1

所有现代操作系统以及相当长的一段时间内,都将进程所需的内存与物理分配在 RAM 上的内存分开。

操作系统为每个进程创建了一个大的虚拟地址空间。该地址空间与每个进程内创建的线程数无关。

例如,在 Windows 中,出于优化原因,该地址空间的一部分保留给操作系统和内核库,并在所有进程之间共享以提高效率。

另一部分专用于应用程序用户代码和库。

一旦创建了流程后勤和资源,流程现在就可以开始了,这将通过启动流程中的第一个线程来实现,该线程将开始执行流程主入口点。

对于一个线程开始执行,它需要一个堆栈以及其他要求。在 Windows 中,该堆栈的默认大小约为 1 MB。这意味着,如果不更改,每个线程将需要大约 1 MB 的内存用于自己的内务管理。(堆栈、TLS 等....)

当进程需要分配内存时,操作系统决定如何在 RAM 上物理分配该内存。进程/应用程序看不到物理 RAM 地址。它只能看到分配给每个进程的虚拟空间中的虚拟地址。

除了 RAM 之外,操作系统还使用位于磁盘上的页面文件来协助处理内存请求。更少的 RAM 意味着页面文件的压力更大。当操作系统试图找到一块不在 RAM 中的内存时,它会尝试在页面文件中查找,在这种情况下,他们称之为页面未命中。

这个主题非常广泛,但我尽可能地给出一个概述。

于 2013-05-27T05:57:28.077 回答