A. 什么是死锁?死锁产生的条件?(⭐⭐⭐)
死锁是指两个或多个进程在互相等待对方完成某些操作时被“僵持”住的一种状态,使得它们都无法向前推进。举个例子就是:在交通拥堵时,两个车道都想要进入同一个窄路口,但都每个车都占着一般,导致所有车辆都无法继续通行。
死锁产生的条件通常是:互斥条件、请求与保持条件、不剥夺条件和循环等待条件。
- 互斥条件:指进程对于所需的资源具有排他性,即一次只有一个进程能使用。
- 请求与保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源被其他进程占用,此时等待这个资源的进程不释放自己所占用的资源。
- 不剥夺条件:指进程已获得的资源在未使用完之前,不能被其他进程抢占或强行收回,只能由进程自己释放。
- 循环等待条件:指存在一个进程资源申请等待环路。即若干进程之间形成一种头尾相接的循环等待资源的关系,形成了一个进程循环等待环路。
A. 操作系统线程有哪几种状态?(⭐⭐⭐)
- 新建:创建新的进程
- 就绪:进程已经获得除CPU时间片以外的任何资源,一旦获得cpu时间片就能立马执行。
- 执行:处于就绪队列中的进程获得了时间片运行进程。
- 阻塞:进程时间片用完进入阻塞队列中等待唤醒。
- 终止:进程执行完毕。
<aside>
💡
在Java中有6种状态:
- 新建态 New 创建新的进程
- 运行态 Runable 合并了就绪态和运行态
- 阻塞态 Blocked 由于没有拿到锁,等待锁
- 等待态 Waiting 调用了wait方法,等待别人唤醒
- 等待时间态 Timed_Waiting 调用了Sleep方法,等待时间到
- 终止态 TERMINATED 线程执行完毕
</aside>
A. 有哪些进程调度算法?(⭐⭐⭐)
- 先来先服务 (FCFS) 算法:进程按照先后顺序排队,先到先服务,不考虑进程的优先级。因为简单易懂,所以适用于一些简单场景。
- 最短作业优先 (SJF) 算法:根据进程需要的CPU时间长短对进程进行排序,执行时间短的进程优先处理。SJF算法可以保证平均等待时间最短,但容易导致长作业饥饿问题。
- 优先级调度算法:每个进程分配一个优先级,优先级高的进程先执行。根据不同的应用可以选择静态优先级或动态优先级。需要注意的是,该算法会出现优先级反转问题,即低优先级进程长时间占用资源,高优先级进程被迫等待。
- 时间片轮转 (RR) 算法:将CPU执行权交替分配给各个进程,并将操作系统运行时间分割成若干片(时间片),每个进程每次只能使用一个时间片。相对于其他算法,RR能够更好地均衡处理器的负载,但对于I/O密集型进程较慢。
A. 什么是缓冲区溢出?(⭐)
缓冲区溢出是指在程序执行过程中,向预先分配的缓冲区写入超出该缓冲区可容纳的数据量,导致溢出部分覆盖了缓冲区后面的内存空间,从而对程序的稳定性和安全性造成了威胁