作業系統多程序多執行緒的相關問題?

時間 2021-05-30 00:14:26

1樓:彩鈴

不是真正大神,隨便水一發.

1.現代的OS基本以執行緒為排程單位,簡單來說也就是執行緒開越多,CPU占用越大.如果以程序為排程單位的OS,也可以實現執行緒,使用者級執行緒,線段排程等由使用者(庫檔案)編寫.

這樣的話多少個執行緒CPU占用一樣.

2.會.執行緒切換和程序切換,在操作還是有較大區別的.切線程比切程序快.

3.執行緒,不是必須.這樣理解,因為上下文資料是在CPU中,乙個CPU獨佔乙份上下文.不過有些核心操作需要互斥

4.不清楚,感覺不會.我覺得是反過來,多個執行緒偏愛某個CPU,這樣這個CPU切換的時候只是執行緒切換,不是程序切換,比較省力.

5.不清楚.

6.不理解題意.

7.對使用者來說是透明,它們都是用鎖和訊息的介面.對OS來說,要使用原語操作而不能僅僅用關中斷來實現互斥.

2樓:北極

1.對於單核CPU,多執行緒程式和多程序程式排程是一樣的嗎?即例如最開始系統中有50個程序,加進來乙個程序,每個程序的排程頻率是1/51,再加進來乙個程序,每個程序排程頻率是1/52,所以對於乙個多程序的程式,如果最開始它開啟了2個程序,那麼它的排程頻率就是2/52。

那麼如果這個程式是乙個程序中開啟的是兩個執行緒,那麼它的排程週期是2/52,還是1/51,即作業系統是以執行緒排程還是程序排程。同時對於乙個程式是不是開的程序或執行緒越多,那麼一般情況下(不考慮程序執行緒建立,和特殊情況),這個程式的效率就越高(同乙個排程週期內,它能夠上CPU的機會更多)

絕大多數作業系統排程單位是執行緒,不是程序。

但跟你想象的不同,絕大多數的情況下CPU是閒著的而不是滿著,你自己看任務管理器就知道了,在有些OS上時間片的長度不一定固定,如果真是計算密集型任務(需要吃CPU),作業系統會讓它多佔一會的。

2.對於問題1,如果是以執行緒為排程單位,那麼作業系統會不會優化讓連續乙個程序的多個執行緒依次排程,這樣就可以節省程序上下文的時間。

對於x86的CPU來說,切程序無非是換頁+刷TLB這些,動作其實很快。你開啟Windows任務管理器,看上去似乎很多程序,但多數程序都是閒著不幹活的。

任務都是有一定優先順序的,作業系統考慮的是根據優先順序來排程,而不是切換上下文的時間,切換上下文的這點時間不算什麼時間。

3.對於多核的CPU(例如4核),是以程序為排程單位,還是以執行緒為排程單位?如果以程序為排程單位,那麼是不是記憶體中要同時保持4個程序的上下文?

如果是以執行緒為單位,那麼是否必須是同乙個程序的4個執行緒,還是可以是4個不同程序的4個不同執行緒?

不管單核多核,排程單位都是執行緒,跟程序沒關係。具體每個核是同乙個程序還是不同程序,作業系統不關係,CPU也不關心,每個CPU都有暫存器能儲存當前任務狀態,其餘的狀態都在記憶體裡。

4. 對於3的情況,如果是以執行緒為排程單位,作業系統是否可以優化,讓乙個程序的多個執行緒首先佔據4個核,然後下乙個排程週期優先讓這個程序的其餘執行緒繼續跑,餘下來的核再給其他程序的執行緒用,這樣可以節省程序上下文的時間。

前面說了,程序切換的代價很低,而且多數情況下乙個執行緒不可能跑滿乙個時間片,如果乙個程序把全部核都佔滿,如果某些執行緒跑完了需要釋放時間片怎麼辦?怎麼解決每個執行緒占用時間片長度不同問題?

現場跑完了不釋放CPU?浪費。

釋放?又不符合你的模型,排程單位又變成執行緒了。

所以程序不作為排程的單位看待。

5. 多核CPU的每個核能否做到非同步時鐘?

可以。6. 多個核,每個核作業系統是統一管理還是分別管理,總感覺對於每個程序在單核CPU中和多核CPU中的管理不同,正所謂4個核 != 乙個核*4(效率方面)?

基於執行緒的排程效率比基於程序的效率高,因為乙個程序的各個執行緒占用時間片是不同的,基於程序的排程會造成極大的CPU時間浪費。

7. 多個核,對於程序通訊與執行緒同步有什麼影響?

多核對於作業系統排程、鎖的寫法方面比較麻煩,對於上層應用,不需要考慮這些問題。按正常多執行緒加保護就夠用了。

你的問題裡,覺得任務切換的開銷很大,實際上任務切換代價再大,也比浪費乙個時間片要小

基於程序的多核排程,就意味著某些情況下,某些核的時間片被浪費掉,這種效能損失比任務切換要大得多。

乙個時間片內做幾百次任務切換都沒問題,與其減少任務切換,不如把浪費的時間片都用上。

任務切換的代價比中斷切換的代價要小,作業系統中各種外設的中斷(時鐘、PCI、DMA等)比任務切換的代價要大的多。

3樓:靈劍

一般都是按執行緒排程,但是其實你說的這些都有個問題,就是只在所有執行緒優先順序相同、而且所有執行緒都100%占用CPU的情況下才成立。實際作業系統當中很少會遇到這種情況。大部分情況下,執行緒都是處在空閒(一般是等待乙個系統呼叫比如訊號量)、或者等待IO的情況下,這時候執行緒會被掛起,等待IO或者系統呼叫完成,不會被排程進CPU。

多核情況下是任意的四個執行緒都可以排程到多核CPU中,沒有任何限制,但是有沒有優先順序不太清楚,Linux下面似乎程序和執行緒區別不大,執行緒是一種輕量級的程序的樣子。

python多執行緒 多程序中如何連續傳輸資料?

曲奇 對於兩個程序使用 queue 傳資料的情況,乙個是 producer,乙個是 consumer,當 producer 程序結束時,往 queue 裡 put None 而 consumer 端對於 get 的資料都要判斷,如果是 None,則結束。from multiprocessing im...

從技術角度看,微軟作業系統windows相對於unix linux mac os怎樣?優勢在哪,為何現如今是MS獨霸天下?

MacC windows相對於其它作業系統來講有其存在的必要價值 龐大的生態鏈 正如陰陽一樣,誰也不會完全替代誰而稱為唯一的主宰。windows的優勢通過在幾十年的開放給硬體廠家的基礎上,有了龐大的軟硬體生態鏈,比mac os更多的硬體廠家支撐 因為這樣的os才能支撐硬體廠家盈利,而mac os只有...

作業系統有沒有讓乙個執行緒永不下崗的功能?

XZiar 其實要分為兩個部分。第乙個部分,執行緒親和性,防止執行緒在不同核心上亂逛。乙個執行緒被分派到不同核心的缺點就是,L1乃至L2是單核性獨享的,執行緒可以被分派,但沒法把快取資料一起搬過去 得不償失,備份 還原快取破壞了抽象並且會增加還是那個下文切換的開銷 於是每次被分派到乙個新的核心上,快...