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

時間 2021-06-01 16:41:58

1樓:XZiar

其實要分為兩個部分。

第乙個部分,執行緒親和性,防止執行緒在不同核心上亂逛。

乙個執行緒被分派到不同核心的缺點就是,L1乃至L2是單核性獨享的,執行緒可以被分派,但沒法把快取資料一起搬過去(得不償失,備份/還原快取破壞了抽象並且會增加還是那個下文切換的開銷)。於是每次被分派到乙個新的核心上,快取都要重新預熱一遍。

另外,乙個執行緒在不同核心上亂跑,會在每個核心的快取上都留下自己的痕跡,這相當於汙染了快取,降低了快取的利用率。當然根據LLC的型別不同(比如inclusive或者victim),影響也會不同。

對於這一點,解決辦法就是繫結執行緒親和性。事實上PC上完全可以這麼做,win32/posix的API早一直都在。但是因為環境多變(不同電腦配置不同核心數不同負載也不同),所以可能不一定能找到好的繫結策略。

第二個部分,禁止執行緒的切換。

其實禁止執行緒被切換走,就意味著綁死在乙個核心上。而且和前者不同的是,核心也被綁死在這個執行緒上。

這樣做其實也是為了降低快取汙染。因為哪怕設定了執行緒親和性,自己不去汙染其他核心,也不能阻止別的執行緒來汙染你的快取。但以惡搞執行緒阻塞/等待,作業系統會把其他需要執行的執行緒排程過來,這樣一來快取就被別人汙染了。

如果想要禁止被換出,可能作業系統會不同意。畢竟PC剛發展起來的時候就是這種單任務設計,沒有搶占式的執行緒設計,結果就是萬一程式自己的bug卡住了,電腦也就卡住了。現在PC一般是多核心,分乙個核心出去的確也不是不可以,但作業系統可能沒做好這種準備——需要執行緒排程器的支援。

windows恐怕是不行,但linux的話……可以自己動手豐衣足食。

另外乙個執行緒難免會需要做一些IO操作、同步操作,如果不允許執行緒被換出,那這個核心就只能幹等著,也是一種浪費。

總的來說,可行,但是非定製的系統、非定製的硬體太過靈活了,所以很可能不會這麼做。

2樓:錢成

作業系統提供了執行緒繫結cpu的功能,簡單而言就是這個核心固定給這個執行緒用,不會被搶占,應該滿足你說的需求。不過遊戲在家用電腦上不知道會不會這麼高。

3樓:章奇

你的這個問題,可以找找木馬,病毒相關的論壇和貼子。

作業系統確實有個永不下崗的程序,就是根程序,其餘程序都是它的子程序。不過這個程序使用者是實現不了的。

一般地,你只能實現守護程序。

為何微軟不去做乙個Linux作業系統?

因為微軟如果做了Linux,就很難利用它已有的Windows生態系統搞出像3E之類的策略。畢竟如果搞的話,至少核心 不開源是不行的。 xzpeter 真正可以在產品裡使用的作業系統怕不是那麼好寫的。不說作業系統,就算隨便乙個新的檔案系統,不跑上10年都不敢說自己穩定。你去看btrfs就知道了,到現在...

編寫乙個新的作業系統,相容windows 仿寫 合法嗎

神出鬼沒的七叔 你就在你自己的電腦上寫,會有什麼問題?還不是隨便你怎麼搞。問題只會出現在完成之後,傳播或商用的過程。然而上面的問題都不是問題,問題是前提,能寫出來麼? 叛逆者 情況在於,即便光寫個核心都是工作量巨大的事情。即便高水平的團隊,要復現都很難,更不用說跟上其發展了。幾年前MSR的幾個大牛做...

如何從零開始寫乙個簡單的作業系統?

後廠村村民甲 絕對的從零寫估計太難了,因為涉及的東西太多,光是bootloader細節就超級多,比如有些BootLoader的樣例中要用BIOS提供的指令去讀簡易的檔案系統,一般來說掌握這些的人,大概率比較熟悉os kernal了,除非閒得蛋疼,否則寫那玩意兒幹啥。所以,簡單的方法就是先借用乙個現成...