sleep ,wait ,軟鏈結和硬鏈結

2021-08-18 14:35:36 字數 2505 閱讀 6912

1、wait()和sleep()

sleep() 是thread類中的方法,而wait()則是object類中的方法。

sleep()方法導致了程式暫停,但是它的監控狀態仍然保持著,當指定的時間到了又會自動恢復執行狀態。在呼叫sleep()方法的過程中,執行緒不會釋放物件鎖。

wait()方法會導致執行緒放棄(釋放)物件鎖,進入等待此物件的等待鎖定池,只有針對此物件呼叫notify()方法後本執行緒才進入物件鎖定池準備獲取物件鎖進入執行狀態。注意是準備獲取物件鎖進入執行狀態,而不是立即獲得。

2、程序間通訊:共享儲存器系統,訊息傳遞系統,管道通訊系統

1)管道:管道有命名管道和無名管道之分,無名管道只能用於父子程序間通訊,命名管道可用於非父子程序,命名管道就是fifo,先進先出。只允許資料的單向流動,每個fifo都有乙個名字,允許不相關的程序訪問同乙個fifo,因此成為命名管道。

管道和socket都屬於管道通訊系統。管道是指用於連線乙個讀程序和乙個寫程序以實現程序之間通訊的一種共享檔案。向管道提供輸入的是傳送程序,也稱為寫程序,負責向管道輸入資料,資料的格式是字元流。接收管道資料的接收程序為讀程序。

2)訊息佇列:用於兩個程序之間的通訊,用建立檔案的方式建立的,如果乙個程序向某個訊息佇列中寫入了資料之後,另乙個程序並沒有取出資料,即使向訊息佇列中寫資料的程序已經結束,儲存在訊息佇列中的資料並沒有消失,也就是說下次再從這個訊息佇列讀資料的時候,就是上次的資料。信箱通訊和訊息佇列屬於訊息傳遞系統。

3)共享記憶體:屬於共享儲存器系統。

顧名思義,共享記憶體就是允許兩個不相關的程序訪問同乙個邏輯記憶體。共享記憶體是在兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之間共享的記憶體通常安排為同一段物理記憶體。程序可以將同一段共享記憶體連線到它們自己的位址空間中,所有程序都可以訪問共享記憶體中的位址。就好象它們是由用c語言函式malloc分配的記憶體一樣。而如果某個程序向共享記憶體寫入資料,所做的改動將立即影響到可以訪問同一段共享記憶體的任何其他程序。

注意:共享記憶體並未提供同步機制,也就是說,在第乙個程序結束對共享記憶體的寫操作之前,並無自動機制可以阻止第二個程序開始對它進行讀取。所以我們通常需要用其他的機制來同步對共享記憶體的訪問,如訊號量

3、中斷處理和子程式呼叫要儲存的內容

無論中斷處理還是子程式呼叫都不需要儲存通用資料暫存器和通用位址暫存器的內容。

在中斷處理的過程中程式計數器(pc)和程式狀態字(psw)暫存器的內容都要壓棧儲存。在子程式呼叫時,由於系統硬體限制只儲存程式計數器的內容,不儲存psw的內容,如果需要儲存psw的內容,可以由軟體來實現。

4、軟鏈結和硬鏈結

在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節點號inode。即每個檔案都有唯一的索引節點inode與之對應,而對於乙個索引節點號inode,可以有多個檔名與之對應。

軟連線,其實就是新建立乙個檔案,這個檔案就是專門用來指向別的檔案的(類似於windows的快捷方式)。可以認為這個新檔案的內容就是記要原檔案的路徑資訊。軟鏈結產生的是乙個新的檔案,但這個檔案的作用就是專門指向某個檔案的,刪了這個軟鏈結檔案,原來的實體原檔案還存在。但若刪除原來的檔案,則相應的軟鏈結不可用(cat那個軟鏈結檔案,則提示「沒有該檔案或目錄」)

硬鏈結是不會建立inode的,它只是在檔案原來的inode link count域再增加1而已,也因此硬鏈結是不可以跨越檔案系統的。

硬鏈結刪除的時候,系統呼叫會檢查inode link count的數值,如果它大於等於1,那麼inode不會被**。因此檔案的內容不會被刪除。硬鏈結實際上是為檔案建乙個別名,鏈結檔案和原檔案實際上是同乙個檔案。改動硬鏈結中的任意乙個,其他的檔案內容也會發生同樣的改動。可以通過ls –i來檢視一下。這兩個檔案的inode號相同,說明他們是同乙個檔案。

而軟連線建立的是乙個指向,即鏈結檔案的內容是指向原檔案的指標,他們是兩個檔案。軟鏈結可以跨檔案系統,硬鏈結不可以;軟鏈結可以對乙個不存在的檔名(filename)進行鏈結。此時如果你vi這個軟鏈結檔案,linux會自動新建乙個檔名為filename的檔案。硬鏈結不可以(其檔案必須存在,inode必須存在)對不存在的檔名進行鏈結。

軟鏈結可以對目錄進行鏈結,硬鏈結不可以,用命令ln來建立硬鏈結,ln –s可以建立軟鏈結。

軟鏈結和硬鏈結

又叫符號鏈結,這個檔案包含了另乙個檔案的路徑名。可以是任意檔案或目錄,可以鏈結不同檔案系統的檔案。鏈結檔案甚至可以鏈結不存在的檔案,這就產生一般稱之為 斷鏈 的問題 或曰 現象 鏈結檔案甚至可以迴圈鏈結自己。類似於程式語言中的遞迴。軟連線的格式是 ln s 目標檔名 鏈結名 在對符號檔案進行讀或寫操...

硬鏈結和軟鏈結

1.linux 鏈結概念 linux 鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為 符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在 linux 的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,...

硬鏈結和軟鏈結

在linux中除了程序之外都是檔案,目錄是特殊的檔案,目錄記錄了其他檔案的檔名。linux檔案被分為兩部分 元資料 檔案的屬性資料 和使用者資料 實際的資料 在linux中通過檔名開啟檔案。檢視檔案的inode號可以使用stat或者ls i命令。軟連線和硬鏈結 硬鏈結是兩個檔名指向同乙個inode,...