假设我们有一个进程,它分配了一个监听特定端口的套接字,对它做了一些事情,然后异常终止。现在,第二个进程启动,并希望分配一个套接字,监听先前由崩溃进程占用的相同端口。这个套接字可以重新分配吗?
-
操作系统如何恢复未正常释放的资源?操作系统是否跟踪进程id以及每个分配的资源?
-
这个清理是我可以期望每个POSIX兼容的系统做的吗?
这取决于操作系统,但通常操作系统维护一个进程控制结构,除其他外,管理其资源。当进程从系统中分配资源时(例如打开文件或分配内存),分配的详细信息将放在该结构中。当进程终止时,将清除其中遗留的任何内容—但最好在运行时显式地清除。
具体细节将取决于操作系统,但一般来说,用户代码在虚拟地址空间/沙箱中运行,在那里它没有任何直接访问硬件资源的权限。用户进程想要访问/分配的任何东西都必须通过调用操作系统并向它请求所需的资源来提供。
因此,操作系统有一种简单的方法来知道谁已经分配了哪些资源,只要它跟踪这些信息,在进程崩溃的情况下清理资源就像获取分配给该进程的资源列表一样简单,并将它们全部标记为可用