当进程需要进行交换时,Linux 内核会向进程发送信号吗
Would Linux kernel send signal to the process when the process need to do swapping
最近在研究操作系统。我有一些关于交换过程的问题。
由于有限的物理内存限制,我知道当我们要将一个新程序加载到物理内存中时,内核不会将整个程序加载到物理内存中。
这是我的问题:
当一个进程遇到page fault,需要换入时,内核会不会发信号通知那个进程?如果是,进程会收到什么信号?
和第一个问题类似,有时候我们想加载新的程序到物理内存中。但是,由于物理内存的限制,我们需要从物理内存中换出一些进程。内核会向那些将被换出的进程发送信号吗?如果是,那些被处理的信号会收到什么信号?
任何详细的解释将不胜感激。
如果有什么有用的,我也将不胜感激link。
感谢大家提前回复。 :))
既然你正在学习这些概念,我认为你应该得到更详细的答案。 OS 今天向用户space 应用程序展示了“虚拟内存”(VM) 的抽象概念。本质上,它是一个 n 位虚拟地址 space,其中每个页面都可以取消映射,或者使用 rwx 权限进行映射。在内部,OS 可以更改实际页面权限(参见 copy-on-write/deduplicated 页面)甚至不映射它们(请求分页)。条件是用户space 看不到这些,只要它以正确的权限访问映射页面,它(最终)就会看到正确的数据。
交换是 OS 操作之一,用于弥合抽象(47 位虚拟内存)和现实(小得多的 DRAM)之间的差距。正如您正确指出的那样,当 DRAM 运行ning 不足时,OS 可以暂时将一些页面移动到磁盘,并在需要时将它们移回。请注意,VM 抽象忽略了这一点,任何 OS 交换操作应该对用户 space 不可见。因此,OS 换出页面(将它们移动到磁盘)和换入页面(磁盘到 ram)而不通过信号告诉用户space。
直接回答您的问题:
None。用户 space 仍期望换出页面合法映射。 OS 将隐藏页面错误,交换页面并恢复用户 space 进程。
OS 会默默地换出页面以回收内存,除非内存不足严重到需要终止进程。顺便说一句,内核会在换出用户内存之前尝试其他方法来回收内存,例如减小内核缓冲区的大小。在没有进程被杀死的普通页面中,没有信号发出。
抽象的原因如下:(i) 它简化了应用程序开发,(ii) 应用程序 运行 在不同的硬件平台上相同,(iii) OS 添加的新功能确实不会使应用程序过时。
以上是一个简化:内核确实提供了一个API让程序管理自己的内存(see this)。由于特定于应用程序的访问模式和性能要求,这 API 对于想要实现自己的交换策略的数据库和浏览器等程序很有用。
最近在研究操作系统。我有一些关于交换过程的问题。
由于有限的物理内存限制,我知道当我们要将一个新程序加载到物理内存中时,内核不会将整个程序加载到物理内存中。
这是我的问题:
当一个进程遇到page fault,需要换入时,内核会不会发信号通知那个进程?如果是,进程会收到什么信号?
和第一个问题类似,有时候我们想加载新的程序到物理内存中。但是,由于物理内存的限制,我们需要从物理内存中换出一些进程。内核会向那些将被换出的进程发送信号吗?如果是,那些被处理的信号会收到什么信号?
任何详细的解释将不胜感激。 如果有什么有用的,我也将不胜感激link。
感谢大家提前回复。 :))
既然你正在学习这些概念,我认为你应该得到更详细的答案。 OS 今天向用户space 应用程序展示了“虚拟内存”(VM) 的抽象概念。本质上,它是一个 n 位虚拟地址 space,其中每个页面都可以取消映射,或者使用 rwx 权限进行映射。在内部,OS 可以更改实际页面权限(参见 copy-on-write/deduplicated 页面)甚至不映射它们(请求分页)。条件是用户space 看不到这些,只要它以正确的权限访问映射页面,它(最终)就会看到正确的数据。
交换是 OS 操作之一,用于弥合抽象(47 位虚拟内存)和现实(小得多的 DRAM)之间的差距。正如您正确指出的那样,当 DRAM 运行ning 不足时,OS 可以暂时将一些页面移动到磁盘,并在需要时将它们移回。请注意,VM 抽象忽略了这一点,任何 OS 交换操作应该对用户 space 不可见。因此,OS 换出页面(将它们移动到磁盘)和换入页面(磁盘到 ram)而不通过信号告诉用户space。
直接回答您的问题:
None。用户 space 仍期望换出页面合法映射。 OS 将隐藏页面错误,交换页面并恢复用户 space 进程。
OS 会默默地换出页面以回收内存,除非内存不足严重到需要终止进程。顺便说一句,内核会在换出用户内存之前尝试其他方法来回收内存,例如减小内核缓冲区的大小。在没有进程被杀死的普通页面中,没有信号发出。
抽象的原因如下:(i) 它简化了应用程序开发,(ii) 应用程序 运行 在不同的硬件平台上相同,(iii) OS 添加的新功能确实不会使应用程序过时。
以上是一个简化:内核确实提供了一个API让程序管理自己的内存(see this)。由于特定于应用程序的访问模式和性能要求,这 API 对于想要实现自己的交换策略的数据库和浏览器等程序很有用。