OS何时实际将进程的地址空间划分为页面?
假设我编写了一个程序并保存它。 OS是否会将程序的地址空间划分为页面,即使它没有在硬盘中执行和空闲?
我读到我们有一部分称为交换空间或页面文件驻留在硬盘中,其大小可以配置,它包含未使用的页面或已从物理内存交换到硬盘的页面。
那么在执行程序之前,整个程序是复制到交换空间还是可以从硬盘的任何部分执行?
OS何时实际将进程的地址空间划分为页面?
通常,LINKER将应用程序划分为页面以建立程序/进程的初始状态,并将执行此操作的指令写入可执行文件。程序加载器按可执行文件的指示分配页面。
假设我编写了一个程序并保存它。 OS是否会将程序的地址空间划分为页面,即使它没有在硬盘中执行和空闲?
往上看。链接器将您写入的内容划分为页面。
那么在执行程序之前,整个程序是复制到交换空间还是可以从硬盘的任何部分执行?
在任何虚拟内存系统(其功能)上,分配给进程的每个页面都将在页面文件中具有相应的位置。在某些系统上,可能有多个页面文件。例如,可执行文件可以成为静态数据和代码的页面文件。
交换空间是匿名页面的后备存储,或“私有”映射中的脏页(例如,可执行文件的数据段:它是从可执行文件中读取的,但更改不会更新文件)。
进程的虚拟地址空间中的未修改页面仍由磁盘(或任何库)上的可执行文件支持。
大多数现代操作系统实际上并没有进行严格的计算,以确保它们允许进程分配的所有虚拟内存页面都有足够的交换(这称为overcommit),但传统的模型是操作系统在分配虚拟内存时保留交换。
OS是否会将程序的地址空间划分为页面,即使它没有在硬盘中执行和空闲?
我几乎不知道从哪里开始回答这一部分。去找一个操作系统教科书(或维基百科)并查找:
如果程序没有执行,则没有进程也没有地址空间。如果它正在执行,则每个进程都有自己的虚拟地址空间。 (并且只读页面都由磁盘上的同一文件支持。)