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萬次讀寫操作。所以它非常適合網際網路專案,為網際網路相關系統提公升效能。下面,我們就來學...