2017-04-02 26 views
0

問題

是否有上下文運行相同的可執行文件(例如,兩個cat單獨實例)對運行的不同的可執行處理過程之間切換之間的任何顯着的差異?是上下文切換進程之間不太昂貴的具有相同的可執行

背景

我已經知道有相同的可執行文件意味着它可以在同一個地方在內存中,在任何CPU緩存時可能可用的緩存,所以我知道,當你從一個切換進程到另一個進程,如果他們都執行相同的可執行文件,則緩存缺失的可能性會更小(可能爲零,如果可執行文件足夠小或者它們執行的內容大致相同,則內核不會執行在此期間做任何事情都可能導致相關內存從緩存中被驅逐出去)。這當然適用於「一路下降」,內存仍然在RAM中,而已經被分頁到交換/磁盤。

我很好奇,如果有其他的考慮,我失蹤了?可能是與虛擬內存映射有關的任何事情,或者是否有任何內核能夠以某種方式獲得更優化的性能,而不是通過上下文在運行相同可執行二進制文件的兩個進程之間切換?

動機

我一直在思考的是把一件事做好小程序Unix哲學,以及如何採取合乎邏輯的結論,它會導致被分叉並多次執行許多小的可執行文件。 (例如,在Void Linux啓動時幾乎同時啓動30個東西的runsv進程 - 請注意,runsv只是啓動期間的一個很好的示例,因爲他們大多數時間都是在開始子級服務時阻止等待事件,所以除了早期開機時,有沒有發生他們之間太多的上下文切換,但我們可以很容易地像許多cat/bin/sh情況下,一次或任何運行。)

回答

0

上下文切換的開銷是一樣的。這通常是用單個(耗時)的指令完成的。

有一些支持已安裝共享程序的更高級的操作系統(即不是太監)。當多個進程訪問它們時,它們已經減少了開銷。例如,只有一個只讀數據副本加載到物理內存中。

相關問題