你好面試官 006 作業系統之併發機制詳解

2021-10-03 02:11:51 字數 1619 閱讀 3961

這裡沒有碎片化的知識,只有完整的知識體系。二蛋幾天沒有收到面試通知,以為自己已經涼涼,沒想到此時再次接到了面試邀請,於是在乙個風和日麗的下午,二蛋如約坐在了面試官對面,開始了今天的面試。

面試官:小夥子,咱也不用繼續介紹了,你也來了幾次了,這次咱就開門見山吧。

unix程序間通訊有哪些機制?

通訊方式有:管道訊息共享記憶體訊號量訊號

這裡主要介紹前三種:

介紹下linux的原子操作

linux提供了一組操作來保證對變數的原子操作。這些操作可用來避免簡單的競爭條件。原子操作執行時不會被打斷或千擾。在單處理器上,執行緒一旦啟動原子操作,則從操作開始到結束的這段時間內,不能中斷執行緒。此外,在多處理器系統中,原子操作所針對的變數被鎖住,以免被其他程序訪問,直到原子操作執行完畢。

介紹一下自旋鎖

在linux中保護臨界區的常用技術是自旋鎖(spinlock)。 在同一時刻,只有乙個執行緒能獲得自旋鎖。其他任何試圖獲得自旋鎖的執行緒將一直進行嘗試(即自旋),直到獲得了該鎖。本質上,自旋鎖建立在記憶體區中的乙個整數上,任何執行緒進入臨界區前都必須檢查該整數。若該值為0,則執行緒將該值設定為1,然後進入臨界區。若該值非0,則該執行緒繼續檢查該值,直到它為0。自旋鎖很容易實現,但有乙個缺點,即鎖外面的執行緒會以忙等待的方式繼續執行。因此,自旋鎖在獲得鎖所需的等待時間較短時,即等待時間少於兩次上下文切換時間時,會很高效。

自旋鎖在單處理器系統和多處理器系統中的實現是不同的。對於單處理器系統,必須考慮如下因素:是否關閉核心搶占(kernel preemption)功能。若關閉核心搶占功能,此時執行緒在核心模式下的執行不會被打斷,則鎖會因為沒有必要使用而在編譯時刪除。若啟用核心搶占,即允許打斷核心模式執行緒,則自旋鎖仍會在編譯時刪除(即不用測試自旋鎖記憶體區是否發生變化),並簡單地實現為啟用中斷/禁用中斷。在多處理器的情況下,自旋鎖的實現(測試自旋鎖的記憶體區的變化)會編譯到核心**中。在程式中使用自旋鎖機制時,可不考慮是在單處理器上執行還是在多處理器上執行。

說一下什麼是記憶體屏障?

在有些體系結構中,編譯器或處理器硬體為了優化效能,可能會對源**中的記憶體訪問重新排序。重新排序的目的是優化對處理器指令流水線的使用。重新排序的演算法包含相應的檢查,以便保證不違反資料依賴性(data dependence)。例如,**

1

a=1;

2b=1;

可被重新排序,以便記憶體位址b在記憶體位址a更新之前更新。

下面情況:

1

a=1;

2b=a;

不能重新排序。即使如此,在某些情況下,讀操作和寫操作以指定的順序執行也相當重要,因為這些資訊會被其他執行緒或硬體裝置使用。

記憶體屏障就是在某一段**前後插入特殊的機器指令,保證**的執行順序不變,避免因為優化改變順序導致最終結果不符合預期。

這裡沒有碎片化的知識,只有完整的知識體系。關注、分享、讚賞

面試官系統之設計模式(單例模式)

單例模式 顧名思義就是只能有乙個,不能在出現第二個。就如同地球上沒有兩片完全一模一樣的樹葉一樣。程式猿的角度理解 乙個類有且只能有乙個例項,不能出現第二個,並且整個專案系統中都能訪問該例項。面試官 為啥不能出現第二個?程式猿 這個面試官是笨蛋,出現第二個那就不叫單例模式了,那至少得叫雙例模式,是吧?...

貝殼找房面試之作業系統

作業系統 1.作業系統如何實現互斥鎖 2.對轉語言有什麼看法?3.指著我的簡歷,讓我講講我簡歷裡最擅長的。對稱加密與非對稱加密區別。圖的的資料結構是什麼?如何表示。session 與 cookie。鎖有哪些 說說 epoll 模型。面試官上來乙個問題,你的優點是什麼 程序和執行緒,程序通訊方式,執行...

作業系統之併發性 互斥和同步1

併發是所有問題的基礎,也是操系統設計的基礎。併發包括很多設計問題,如程序間通訊 資源共享與競爭 多個程序活動的同步以及分配給程序的處理器時間等 p140 多處理器環境,分布式處理器環境,1.單處理器的多道程式設計 程序交替執行,表現出一種併發的外部特徵。即使不能真正並行處理,並且在程序間切換也需要一...