程序 執行緒 死鎖的相關知識

2021-08-09 22:11:39 字數 2280 閱讀 5198

面試中經常會被問到,程序及執行緒的相關知識,這裡做乙個總結。

很容易區分倆概念:

干擾的記憶體空間,此空間,被分成幾個段(segment),分別是text, data, bss, heap, stack。。

執行緒:容易想到多執行緒,就是併發的執行多個任務。

總結,程序是資源分配的基本單元,執行緒是cpu排程的最小單元。

**解釋:

概念:在不同程序之間傳播或交換資訊

目的:

1)資料傳輸:乙個程序需要將它的資料傳送給另乙個程序,傳送的資料量在乙個位元組到幾兆位元組之間。

2)共享資料:多個程序想要操作共享資料,乙個程序對共享資料的修改,別的程序應該立刻看到。

3)通知事件:乙個程序需要向另乙個或一組程序傳送訊息,通知它(它們)發生了某種事件(如程序終止時要通知父程序)。

4)資源共享:多個程序之間共享同樣的資源。為了作到這一點,需要核心提供鎖和同步機制。

5)程序控制:有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截另乙個程序的所有陷入和異常,並能夠及時知道它的狀態改變。

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

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

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

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

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

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

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

什麼是死鎖:

在計算機系統中有很多一次只能由乙個程序使用的資源,如印表機,磁帶機,乙個檔案的i節點等。在多道程式設計環境中,

若干程序往往要共享這類資源,而且乙個程序所需要的資源不止乙個。這樣,就會出現若干程序競爭有限資源,又推進順序

不當,從而構成無限期迴圈等待的局面。這種狀態就是死鎖。

死鎖的簡單理解:

生活中的例子:在一條河上有一座橋,橋面較窄,只能容納一輛汽車通過,無法讓兩輛汽車並行。如果有兩輛汽車a和b分別由橋

的兩端駛上該橋,則對於a車來說,它走過橋面左面的一段路(即占有了橋的一部分資源),要想過橋還須等待b車讓出右邊的橋

面,此時a車不能前進;對於b車來說,它走過橋面右邊的一段路(即占有了橋的一部分資源),要想過橋還須等待a車讓出左邊

的橋面,此時b車也不能前進。兩邊的車都不倒車,結果造成互相等待對方讓出橋面,但是誰也不讓路,就會無休止地等下去。這

種現象就是死鎖。如果把汽車比做程序,橋面作為資源,那麼上述問題就描述為:程序a占有資源r1,等待程序b占有的資源rr;

程序b占有資源rr,等待程序a占有的資源r1。而且資源r1和rr只允許乙個程序占用,即:不允許兩個程序同時占用。結果,兩個

程序都不能繼續執行,若不採取其它措施,這種迴圈等待狀況會無限期持續下去,就發生了程序死鎖。

在計算機系統中,涉及軟體,硬體資源都可能發生死鎖。例如:系統中只有一台cd-rom驅動器和一台印表機,某乙個程序

占有了cd-rom驅動器,又申請印表機;另一程序占有了印表機,還申請cd-rom。結果,兩個程序都被阻塞,永遠也不能

自行解除.

所謂死鎖,是指多個程序迴圈等待它方占有的資源而無限期地僵持下去的局面。

死鎖產生的必要條件:

1.互斥條件(mutual exclusion):資源不能被共享,只能由乙個程序使用。

2.請求與保持條件(hold and wait):已經得到資源的程序可以再次申請新的資源。

3.非剝奪條件(no pre-emption):已經分配的資源不能從相應的程序中被強制地剝奪。

4.迴圈等待條件(circular wait):系統中若干程序組成環路,該環路中每個程序都在等待相鄰程序正占用的資源。

程序 執行緒 執行緒池的相關知識

什麼是程序,什麼是執行緒 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 乙個應用程式的執行就可以被看做是乙個程序,而執行緒是執行中的實際的任務執行者。可以說,程序中包含了多個可以同時執行的執行緒。我們在建立執行緒池的時候一般使用它的子類threadpoolexecutor.public t...

程序和執行緒相關小知識

幾個基本概念 pcb process control block,程序控制塊的 程序映像 由資料段,程式段和pcb三部分組成。程序和執行緒的區別 a.排程 程序作為擁有資源的基本單位,執行緒作為排程和分派的基本單位。b.併發性 程序和執行緒皆可併發執行,乙個程序中的多個執行緒也可併發執行,提高了系統...

OS 程序 執行緒 死鎖

程序執行緒 含義 乙個在記憶體中執行的應用程式 程序的乙個執行任務 包含關係 乙個程序有若干個執行緒,至少包含乙個執行緒 程序的一部分,相當於只有乙個任務的程序 也稱輕權程序 輕量級程序 根本區別 作業系統資源分配的基本單位 處理器任務排程和執行的基本單位 資源開銷 每個程序都有獨立的 和資料空間 ...