面试题答案
一键面试死锁预防策略设计
-
资源分配策略:
- 资源排序:对所有类型的共享资源进行全局排序,例如按照资源的ID或者某种逻辑顺序。进程请求资源时,必须按照这个顺序来请求。例如,进程若需要资源A和资源B,且A的排序在B之前,那么必须先请求A,再请求B。这样可以避免循环等待的情况,因为所有进程获取资源的顺序是一致的,不会形成环。
- 一次性请求:要求进程一次性请求它在整个运行周期内可能需要的所有资源。若系统能够满足该进程的所有资源请求,则一次性分配给它;若不能满足,则一个资源都不分配,进程进入等待状态。这种方式可以防止进程持有部分资源又等待其他资源的情况,从而避免死锁。
-
资源释放策略:
- 主动释放:当进程使用完所有资源后,主动一次性释放所有已分配的资源。这保证了资源能够及时被其他进程获取,提高资源利用率。
- 故障处理时的释放:当检测到某个节点发生故障时,该节点上所有正在使用的资源都被标记为可释放状态。其他节点可以通过某种机制(如分布式锁)来竞争获取这些资源。
应对资源动态变化的处理方式
- 资源增加:当有新的资源类型或新的资源实例加入系统时,重新对所有资源进行排序,并通知所有节点更新资源排序信息。已经在运行的进程若需要新资源,按照新的排序规则,在合适的时机请求新资源。
- 资源减少:当资源被永久移除(如硬件故障导致资源不可用)时,系统需要重新评估资源分配情况。对于依赖这些资源的进程,将其资源请求标记为无法满足,这些进程进入等待状态或者根据系统策略进行终止。同时,更新资源排序信息。
应对节点故障的处理方式
- 故障检测:通过心跳机制或分布式监控系统来检测节点是否发生故障。每个节点定期向其他节点或监控中心发送心跳消息,若在一定时间内未收到某个节点的心跳,则判定该节点故障。
- 资源回收:如前文所述,故障节点上的所有资源被标记为可释放。同时,通知其他节点更新资源状态信息。
- 进程迁移与重启:对于故障节点上正在运行的进程,若系统支持进程迁移,可以将部分或全部进程迁移到其他可用节点上重新运行,并按照资源分配策略重新请求资源。若不支持进程迁移,则在故障排除后,在原节点重启这些进程,并重新进行资源分配。