牛客網 C 面試寶典 作業系統(2)

2021-10-05 15:06:39 字數 1906 閱讀 6039

1、互斥鎖和讀寫鎖區別:

互斥鎖:mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒。

讀寫鎖:rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直到寫鎖釋放時被喚醒。 注意:寫鎖會阻塞其它讀寫鎖。當有乙個執行緒獲得寫鎖在寫時,讀鎖也不能被其它執行緒獲取;寫者優先於讀者(一旦有寫者,則後續讀者必須等待,喚醒時優先考慮寫者)。適用於讀取資料的頻率遠遠大於寫資料的頻率的場合。

互斥鎖和讀寫鎖的區別:

1)讀寫鎖區分讀者和寫者,而互斥鎖不區分

2)互斥鎖同一時間只允許乙個執行緒訪問該物件,無論讀寫;讀寫鎖同一時間內只允許乙個寫者,但是允許多個讀者同時讀物件。

自旋鎖的原理比較簡單,如果持有鎖的執行緒能在短時間內釋放鎖資源,那麼那些等待競爭鎖的執行緒就不需要做核心態和使用者態之間的切換進入阻塞狀態,它們只需要等一等(自旋),等到持有鎖的執行緒釋放鎖之後即可獲取,這樣就避免了使用者程序和核心切換的消耗。

這樣節省了執行緒從睡眠狀態到被喚醒期間的消耗,在加鎖時間短暫的環境下會極大的提高效率。但如果加鎖時間過長,則會非常浪費cpu資源。

1)a *a:a是乙個區域性變數,型別為指標,故而作業系統在程式棧區開闢4/8位元組的空間(0x000m),分配給指標a。

2)new a:通過new動態的在堆區申請類a大小的空間

4)a->i:先找到指標a的位址0x000m,通過a的值0x000n和i在類a中偏移offset,得到a->i的位址0x000n + offset,進行*(0x000n + offset) = 10的賦值操作,即記憶體0x000n + offset的值是10。

1.非static修飾的成員變數:在類內按照宣告的順序儲存

2.static修飾的成員變數:靜態儲存區

用static修飾的變數在靜態儲存區生成的,

3.成員函式:**區

4.虛函式:在類的最前面儲存的是虛表指標,指向虛函式表(儲存的函式指標)

虛函式表也是在資料段

5.如果是普通繼承,

先先儲存父類中的成員,繼承虛函式表(重寫的話會替換)

6.如果是virtual繼承的話,會有兩個虛表指標

先羅列自己的,再是父類的

硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節點號(inode index)。在linux中,多個檔名指向同一索引節點是存在的。一般這種連線就是硬連線。硬連線的作用是允許乙個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止「誤刪」的功能。因為對應該目錄的索引節點有乙個以上的連線。只刪除乙個連線並不影響索引節點本身和其它的連線,只有當最後乙個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。

另外一種連線稱之為符號連線(symbolic link),也叫軟連線。軟鏈結檔案有類似於windows的快捷方式。它實際上是乙個特殊的檔案。在符號連線中,檔案實際上是乙個文字檔案,其中包含的有另一檔案的位置資訊。

大端是指低位元組儲存在高位址;小端儲存是指低位元組儲存在低位址。

聯合體union

利用union的共享記憶體特性

#includeusing namespace std;

union m ;

int main()

靜態變數儲存在虛擬位址空間的資料段和bss段,c語言中其在**執行之前初始化,屬於編譯期初始化。

而c++中由於引入物件,物件生成必須呼叫建構函式,因此c++規定全域性或區域性靜態物件當且僅當物件首次用到時進行構造

因此何時執行全域性或靜態物件(c++)的構造和析構呢?這需要執行相關**,無法在編譯期完成

作業系統牛客網刷題

頁面置換演算法 1.最佳置換演算法 選擇永不使用的淘汰,無法實現。假定系統為某程序分配了三個物理塊,並考慮有以下的頁面號引用串 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 程序執行時,先將7,0,1 三個頁面裝入記憶體。以後,當程序要訪問頁面2 時,將會 產生缺頁...

牛客網 C 面試寶典 基礎知識(3)

如果同時定義了兩個函式,乙個帶const,乙個不帶,會有問題嗎?不會,這相當於函式的過載。請你來說一說隱式型別轉換參考 對於內建型別,低精度的變數給高精度變數賦值會發生隱式型別轉換 可以用單個形參來呼叫 的建構函式定義了從 形參型別 到 該類型別 的乙個隱式轉換。說說你了解的型別轉換 const c...

牛客網 C 面試寶典 基礎知識(4)容器和演算法

感覺牛客網的整理有丟丟凌亂 請你來說一下map和set有什麼區別,分別又是怎麼實現的?map和set都是c 的關聯容器,其底層實現都是紅黑樹 rb tree map和set區別在於 2 set的迭代器是const的,不允許修改元素的值 map允許修改value,但不允許修改key。其原因是因為map...