關於linux的幾道面試題

2021-06-25 08:11:45 字數 2024 閱讀 6187

1、linux中主要有哪幾種核心鎖?

linux的核心鎖主要是自旋鎖和訊號量。

自旋鎖最多只能被乙個可執行執行緒持有,如果乙個執行執行緒試圖請求乙個已被爭用(已經被持有)的自旋鎖,那麼這個執行緒就會一直進行忙迴圈——旋轉——等待鎖重新可用。要是鎖未被爭用,請求它的執行執行緒便能立刻得到它並且繼續進行。自旋鎖可以在任何時刻防止多於乙個的執行執行緒同時進入臨界區。

linux中的訊號量是一種睡眠鎖。如果有乙個任務試圖獲得乙個已被持有的訊號量時,訊號量會將其推入等待佇列,然後讓其睡眠。這時處理器獲得自由去執行其它**。當持有訊號量的程序將訊號量釋放後,在等待佇列中的乙個任務將被喚醒,從而便可以獲得這個訊號量。

訊號量的睡眠特性,使得訊號量適用於鎖會被長時間持有的情況;只能在程序上下文中使用,因為中斷上下文中是不能被排程的;另外當**持有訊號量時,不可以再持有自旋鎖。

2、linux中的使用者模式和核心模式是什麼含意?

在linux機器上,cpu要麼處於受信任的核心模式,要麼處於受限制的使用者模式。除了核心本身處於核心模式以外,所有的使用者程序都執行在使用者模式之中。

核心模式的**可以無限制地訪問所有處理器指令集以及全部記憶體和i/o空間。如果使用者模式的程序要享有此特權,它必須通過系統呼叫向裝置驅動程式或其他核心模式的**發出請求。另外,使用者模式的**允許發生缺頁,而核心模式的**則不允許。

3、使用者程序間通訊主要哪幾種方式?

# 管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。

# 有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

# 訊號量( semophore ) : 訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。

# 訊息佇列( message queue ) : 訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

# 訊號 ( sinal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

# 共享記憶體( shared memory ) :共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。

# 套接字( socket ) : 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。

4、有哪幾種記憶體分配函式?

分配原理

最大記憶體

其他__get_free_pages

直接對頁框進行操作

4mb適用於分配較大量的連續物理記憶體

kmem_cache_alloc

基於slab機制實現

128kb

適合需要頻繁申請釋放相同大小記憶體塊時使用

kmalloc

基於kmem_cache_alloc實現

128kb

最常見的分配方式,需要小於頁框大小的記憶體時可以使用

vmalloc

建立非連續物理記憶體到虛擬位址的對映

物理不連續,適合需要大記憶體,但是對位址連續性沒有要求的場合

dma_alloc_coherent

基於__alloc_pages實現

4mb適用於dma操 作

ioremap

實現已知實體地址到虛擬位址的對映

適用於實體地址已知的場合,如裝置驅動

alloc_bootmem

在啟動kernel時,預留一段記憶體,核心看不見

小於物理記憶體大小,記憶體管理要求較高

幾道面試題

系統呼叫與函式的區別 從程式完成的功能來看,函式庫提供的函式通常是不需要作業系統的服務,函式是在使用者空間內執行的,除非函式涉及到i o操作等,一般是不會切到核心態的。系統呼叫是要求作業系統為使用者提供程序,提供某種服務,通常是涉及系統的硬體資源和一些敏感的軟體資源等。函式庫的函式,尤其與輸入輸出相...

幾道面試題

1 下列程式片段執行時間排序 1 for uint i 0 i 1024 i char url char malloc 4096 memset url,0x0,4096 free url 2 for uint i 0 i 1024 i 3 char url char malloc 4096 for ...

幾道面試題

q 您在什麼情況下會用到虛方法?它與介面有什麼不同?q override與過載有什麼區別?q 值型別與引用型別有什麼區別?q 怎樣理解靜態變數?q 向伺服器傳送請求有幾種方式?q datareader與dataset有什麼區別?q 用.net做b s結構的系統,您是用幾層結構來開發,每一層之間的關係...