作業系統基礎訓練十問十答

2021-08-13 03:28:53 字數 2584 閱讀 2709

q:

簡述linux程序記憶體空間分為哪幾個段?作用分別是什麼?

a:linux中的

程序記憶體空間

分為「資料段」、「**段」和「堆疊段」三段。

「資料段」存放的是全域性變數、常數以及動態資料分配的資料空間

;「**段」存放的是程式**的資料

;「堆疊段」存放的是子程式的返回位址、子程式的引數以及程式的區域性變數等。

q:如何檢視程序的資訊(執行緒數):

a:ps

-elf

,想知道具體的程序可以採用 ps -elf | grep

id為所需要查詢的程序

q:程序間通訊方式有哪些?以及在什麼情況下用什麼通訊方式?優缺點:

a:程序間通訊方式有管道、訊號量、訊號、訊息佇列、共享記憶體、套接字六種。

(1)管道分為有名管道和無名管道,其中無名管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用,一般用於兩個不同程序之間的通訊。有名管道也是一種半雙工的通訊方式,但它允許無親緣關係程序間的通訊。

(2)訊號量是乙個計數器,可以用來控制多個執行緒對共享資源的訪問,它不是用於交換大批資料,而用於多執行緒之間的同步。他常作為一種鎖機制。因此,主要作為程序間以及同乙個程序內不同執行緒之間的同步手段。

(3)訊號是一種比較複雜的通訊方式,用於通知接收程序某個時間已經發生。

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

(5)共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。他往往與其他通訊機制,如訊號量配合使用,來實現程序間的同步和通訊。

(6)套接字可用於不同程序間的程序通訊。

q:程序同步的幾種方法?

a:臨界區、互斥區、訊號量

三種方式。

q:程序死鎖產生的原因及四個必要條件?

a:產生死鎖的原因主要是:(1) 因為系統資源不足

;(2) 程序執行推進的順序不合適

;(3) 資源分配不當等。

如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。

產生死鎖的四個必要條件:(1) 互斥條件:乙個資源每次只能被乙個程序使用

;(2) 請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放

;(3) 不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪

;(4) 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。

q:什麼是守護程序,什麼是殭屍程序?

a:殭屍程序:乙個程序結束了,但是他的父程序沒有**,

那麼他將變成乙個殭屍程序

;守護程序:子程序未結束,父程序結束,子程序由init 程序接管,子程序可作為守護程序。

q:解釋一下程序同步和程序互斥的區別?

a:相互合作的兩個程序之間需要在某個(些)確定點協調它們的工作,乙個程序到達了該點後,除非另一程序已經完成了某些操作,否則就不得不停下來,等待這些操作的完成。這就是程序間的同步。

兩個程序由於不能同時使用同一臨界資源,只能在乙個程序使用完了,另一程序才能使用,這種現象稱為程序間的互斥。①同步的主要特徵是:乙個程序在某一點上等待另一程序提供資訊,兩程序之間存在直接制約關係,其表現形式為程序—程序。②互斥的主要特徵是爭用資源,兩程序間存在間接制約關係,其表現形式是程序—資源—程序。

q:程序與執行緒之間有何區別?

a:乙個程式就是乙個程序,而乙個程式中的多個任務則被稱為執行緒。程序是表示資源分配的基本單位,又是排程執行的基本單位。執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。 程序和執行緒的關係

:(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。執行緒是作業系統可識別的最小執行和排程單位

;(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。同一程序中的多個執行緒共享**段(**和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段,棧段又叫執行時段,用來存放所有區域性變數和臨時變數

;(3)處理機分給執行緒,即真正在處理機上執行的是執行緒

;(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。

q:執行緒同步有哪些方法?

a:1.互斥鎖(mutex)

初始化鎖;靜態分配;動態分配

。加鎖,對共享資源的訪問,要對互斥量進行加鎖,如果互斥量已經上了鎖,呼叫執行緒會阻塞,直到互斥量被解鎖

,呼叫完畢之後需要

銷毀鎖。

2.條件變數(cond)

初始化條件變數

,靜態態初始化

,動態初始化

。等待條件成立,釋放鎖,同時阻塞等待條件變數為真才行

,啟用條件變數;清除條件變數。

3.訊號量(sem)

訊號量初始化

,等待訊號量

,釋放訊號量

,銷毀訊號量。

q:當父程序在子程序之前終止會發生什麼?

a:如果父程序退出而它的乙個或多個子程序還在執行,那麼這些子程序就會變成稱為孤兒程序。孤兒程序最終將被init程序(1號程序)所收養,並由init程序完成對它們的狀態收集工作。

作業系統基礎訓練十個問題及解答

作業系統基礎訓練十個問題及解答 1 簡述linux程序記憶體空間分為哪幾個段?作用分別是什麼?linux中的程序包含3個段,分別為 資料段 段 和 堆疊段 資料段 存放的是全域性變數 常數以及動態資料分配的資料空間 段 存放的是程式 的資料。堆疊段 存放的是子程式的返回位址 子程式的引數以及程式的區...

作業系統基礎訓練十個問題及解答

1 簡述linux程序記憶體空間分為哪幾個段?作用分別是什麼?linux中的程序包含3個段,分別為 資料段 段 和 堆疊段 資料段 存放的是全域性變數 常數以及動態資料分配的資料空間 段 存放的是程式 的資料。堆疊段 存放的是子程式的返回位址 子程式的引數以及程式的區域性變數等。2 如何檢視程序的資...

Redis基礎知識十問十答

redis 是當前比較流行的非關係型資料庫 nosql 非關係型資料庫是資料結構化儲存的集合,它具有格式靈活 速度快 高擴充套件性的優點,而且redis是基於記憶體的非關係型資料庫,效能出色,每秒可以處理超過10萬次讀寫操作。所以它非常適合網際網路專案,為網際網路相關系統提公升效能。下面,我們就來學...