两道操作系统面试题 4.14
死锁及其产生的原因是什么?
死锁是这样的一种情况:多个进程/线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于进程/线程被无限期地阻塞,因此程序不可能正常终止。
死锁的产生有四个必要条件:
- 互斥:资源是非共享的,一个资源一次只能给一个进程/线程使用,如果一个资源正在被使用,另一个进程/线程想要使用这个资源,就必须等待,直到该资源被释放
- 占有并等待:一个进程/线程至少应该占有一个资源,并等待另一资源,而该资源被其他进程/线程所占有
- 非抢占:资源不能被抢占,只能由持有该资源的进程/线程主动释放
- 循环等待:一组等待资源的进程/线程,各自等待的资源是其他进程/线程所持有的
只要破坏了以上任意一个条件,死锁就不会发生。
对I/O模型的了解
- 阻塞I/O模型:应用程序发起I/O操作后会被阻塞,直到操作完成才返回结果。适用于对实时性要求不高的场景。
- 非阻塞I/O模型:应用程序发起I/O操作后立即返回,不会被阻塞,但需要不断轮询或者使用系统调用来检查I/O操作是否完成。适合于需要进行多路复用的场景,例如需要同时处理多个socket连接的服务器程序。
- I/O复用模型:通过系统调用,应用程序同时等待多个I/O操作,当其中任何一个I/O操作准备就绪时,应用程序会被通知。适合于需要同时处理多个I/O操作的场景,比如高并发的服务端程序。
- 信号驱动I/O模型:应用程序发起I/O操作后,可以继续做其他事情,当I/O操作完成时,操作系统会向应用程序发送信号来通知其完成。适合于需要异步I/O通知的场景,可以提高系统的并发能力。
- 异步I/O模型:应用程序发起I/O操作后可以立即做其他事情,当I/O操作完成时,应用程序会得到通知。异步I/O模型由操作系统内核完成I/O操作,应用程序只需等待通知即可。适合于需要大量并发连接和高性能的场景,能够减少系统调用次数,提高系统效率。
两道操作系统面试题 4.14
https://jlqusername.github.io/2025/04/14/两道操作系统面试题 4.14/