2017-04-02 76 views
0

问题

是否有上下文运行相同的可执行文件(例如,两个cat单独实例)对运行的不同的可执行处理过程之间切换之间的任何显着的差异?是上下文切换进程之间不太昂贵的具有相同的可执行

背景

我已经知道有相同的可执行文件意味着它可以在同一个地方在内存中,在任何CPU缓存时可能可用的缓存,所以我知道,当你从一个切换进程到另一个进程,如果他们都执行相同的可执行文件,则缓存缺失的可能性会更小(可能为零,如果可执行文件足够小或者它们执行的内容大致相同,则内核不会执行在此期间做任何事情都可能导致相关内存从缓存中被驱逐出去)。这当然适用于“一路下降”,内存仍然在RAM中,而已经被分页到交换/磁盘。

我很好奇,如果有其他的考虑,我失踪了?可能是与虚拟内存映射有关的任何事情,或者是否有任何内核能够以某种方式获得更优化的性能,而不是通过上下文在运行相同可执行二进制文件的两个进程之间切换?

动机

我一直在思考的是把一件事做好小程序Unix哲学,以及如何采取合乎逻辑的结论,它会导致被分叉并多次执行许多小的可执行文件。 (例如,在Void Linux启动时几乎同时启动30个东西的runsv进程 - 请注意,runsv只是启动期间的一个很好的示例,因为他们大多数时间都是在开始子级服务时阻止等待事件,所以除了早期开机时,有没有发生他们之间太多的上下文切换,但我们可以很容易地像许多cat/bin/sh情况下,一次或任何运行。)

回答

0

上下文切换的开销是一样的。这通常是用单个(耗时)的指令完成的。

有一些支持已安装共享程序的更高级的操作系统(即不是太监)。当多个进程访问它们时,它们已经减少了开销。例如,只有一个只读数据副本加载到物理内存中。

相关问题