2011-07-17 87 views
3

我們假設我們有一個進程分配一個監聽特定端口的套接字,然後用它做一些事情然後終止異常。現在又開始了第二個進程,並希望分配一個偵聽與之前由crahsed進程保持相同端口的套​​接字。這個套接字是否可用於重新分配?(POSIX)操作系統在進程崩潰後恢復資源嗎?

  • 操作系統如何恢復未正確釋放的資源?操作系統是否跟蹤每個已分配資源的進程ID?

  • 這個清理是我可以期待的每一個符合POSIX標準的系統要做的事情嗎?

+0

@Jeff:「這個清理是我可以期待每個符合POSIX標準的系統要做的嗎?」爲什麼是這樣的問題?程序員要知道我們需要在多大程度上確保資源的正確釋放,這一點非常重要。目前我面臨一個困難的IPC問題,所以這個問題並不是出於一般好奇心。 (我會相應地編輯)。 –

+0

好的,編輯後重新打開 –

+0

我不相信清理與POSIX有什麼關係。您可以預期這種自動清理將在每個值得任何實際使用的操作系統上發生。如果操作系統沒有這樣做,每次應用程序的異常終止都會從系統中刪除資源,並且由於永久資源(直到下一次重新啓動)消失,資源將無法使用。 – mah

回答

2

這取決於操作系統,但通常操作系統維護一個進程控制結構,以管理其資源。當進程從系統分配資源(如打開文件或分配內存)時,分配的詳細信息將放置在該結構中。當進程終止時,剩下的任何東西都會被清理乾淨 - 但最好在清理時進行清理。

1

具體的細節將取決於操作系統,但一般來說,用戶代碼是在虛擬地址空間/沙箱中運行的,因爲它無法直接訪問硬件資源。任何用戶進程想要訪問/分配的內容都必須通過調用操作系統並請求獲取所需資源來提供。

因此,操作系統有一個簡單的方法來知道誰被分配了哪些資源,只要它跟蹤這些信息,在發生崩潰的過程中清理資源就像獲取資源列表一樣簡單分配給該過程,並將其標記爲可再次使用。