1、簡述linux程序記憶體空間分為哪幾個段?作用分別是什麼?
linux中的程序包含3個段,分別為「資料段」、「**段」和「堆疊段」。
「資料段」存放的是全域性變數、常數以及動態資料分配的資料空間;
「**段」存放的是程式**的資料。
「堆疊段」存放的是子程式的返回位址、子程式的引數以及程式的區域性變數等。
2、如何檢視程序的資訊(執行緒數):
ps -elf 想知道具體的程序可以採用 ps -elf | grep xx xx為所需要查詢的程序
3、程序間通訊方式有哪些?以及在什麼情況下用什麼通訊方式?優缺點:
程序間通訊方式有管道、訊號量、訊號、訊息佇列、共享記憶體、套接字六種。
(1)管道分為有名管道和無名管道,其中無名管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用,一般用於兩個不同程序之間的通訊。有名管道也是一種半雙工的通訊方式,但它允許無親緣關係程序間的通訊。
(2)訊號量是乙個計數器,可以用來控制多個執行緒對共享資源的訪問,它不是用於交換大批資料,而用於多執行緒之間的同步。他常作為一種鎖機制。因此,主要作為程序間以及同乙個程序內不同執行緒之間的同步手段。
(3)訊號是一種比較複雜的通訊方式,用於通知接收程序某個時間已經發生。
(4)訊息佇列是訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識,訊息佇列克服了訊號傳遞資訊少,管道只能承載無格式位元組流以及緩衝區大小受限等特點。
(5)共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。他往往與其他通訊機制,如訊號量配合使用,來實現程序間的同步和通訊。
(6)套接字可用於不同程序間的程序通訊。
4、程序同步的幾種方法?
臨界區、互斥區、事件、訊號量四種方式。
5、程序死鎖產生的原因及四個必要條件?
產生死鎖的原因主要是:
(1) 因為系統資源不足。
(2) 程序執行推進的順序不合適。
(3) 資源分配不當等。
如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。
產生死鎖的四個必要條件:
(1) 互斥條件:乙個資源每次只能被乙個程序使用。
(2) 請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。
6、什麼是守護程序,什麼是殭屍程序?
殭屍程序:
乙個程序結束了,但是他的父程序沒有等待(呼叫wait / waitpid)他, 那麼他將變成乙個殭屍程序。
守護程序:
子程序未結束,父程序結束,子程序由init 程序接管,子程序可作為守護程序。
7、解釋一下程序同步和程序互斥的區別?
相互合作的兩個程序之間需要在某個(些)確定點協調它們的工作,乙個程序到達了該點後,除非另一程序已經完成了某些操作,否則就不得不停下來,等待這些操作的完成。這就是程序間的同步。
兩個程序由於不能同時使用同一臨界資源,只能在乙個程序使用完了,另一程序才能使用,這種現象稱為程序間的互斥。①同步的主要特徵是:乙個程序在某一點上等待另一程序提供資訊,兩程序之間存在直接制約關係,其表現形式為程序—程序。②互斥的主要特徵是爭用資源,兩程序間存在間接制約關係,其表現形式是程序—資源—程序。
8、程序與執行緒之間有何區別?
乙個程式就是乙個程序,而乙個程式中的多個任務則被稱為執行緒。程序是表示資源分配的基本單位,又是排程執行的基本單位。執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。 程序和執行緒的關係
(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。執行緒是作業系統可識別的最小執行和排程單位。
(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。同一程序中的多個執行緒共享**段(**和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段,棧段又叫執行時段,用來存放所有區域性變數和臨時變數。
(3)處理機分給執行緒,即真正在處理機上執行的是執行緒。
(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。
9、執行緒同步有哪些方法?
一、互斥鎖(mutex)
初始化鎖;
靜態分配;
動態分配;
加鎖,對共享資源的訪問,要對互斥量進行加鎖,如果互斥量已經上了鎖,呼叫執行緒會阻塞,直到互斥量被解鎖;
解鎖;銷毀鎖。
二、條件變數(cond)
初始化條件變數;
靜態態初始化;
動態初始化;
等待條件成立,釋放鎖,同時阻塞等待條件變數為真才行;
啟用條件變數;
清除條件變數。
三、訊號量(sem)
訊號量初始化;
等待訊號量;
釋放訊號量;
銷毀訊號量。
10、當父程序在子程序之前終止會發生什麼?
如果父程序退出而它的乙個或多個子程序還在執行,那麼這些子程序就會變成稱為孤兒程序。孤兒程序最終將被init程序(1號程序)所收養,並由init程序完成對它們的狀態收集工作。
作業系統基礎訓練十個問題及解答
作業系統基礎訓練十個問題及解答 1 簡述linux程序記憶體空間分為哪幾個段?作用分別是什麼?linux中的程序包含3個段,分別為 資料段 段 和 堆疊段 資料段 存放的是全域性變數 常數以及動態資料分配的資料空間 段 存放的是程式 的資料。堆疊段 存放的是子程式的返回位址 子程式的引數以及程式的區...
作業系統基礎訓練十問十答
q 簡述linux程序記憶體空間分為哪幾個段?作用分別是什麼?a linux中的 程序記憶體空間 分為 資料段 段 和 堆疊段 三段。資料段 存放的是全域性變數 常數以及動態資料分配的資料空間 段 存放的是程式 的資料 堆疊段 存放的是子程式的返回位址 子程式的引數以及程式的區域性變數等。q 如何檢...
Linux作業系統菜鳥變成高手的十個建議
隨著linux應用的擴充套件許多朋友開始接觸linux,根據學習windwos的經驗往往有一些茫然的感覺 不知從何處開始學起。這裡介紹學習linux的一些建議。一 從基礎開始 常常有些朋友在linux論壇問一些問題,不過,其中大多數的問題都是很基礎的。例如 為什麼我使用乙個命令的時候,系統告訴我找不...