A. 什么是死锁?死锁产生的条件?(⭐⭐⭐)

死锁是指两个或多个进程在互相等待对方完成某些操作时被“僵持”住的一种状态,使得它们都无法向前推进。举个例子就是:在交通拥堵时,两个车道都想要进入同一个窄路口,但都每个车都占着一般,导致所有车辆都无法继续通行。

死锁产生的条件通常是:互斥条件、请求与保持条件、不剥夺条件和循环等待条件

  1. 互斥条件:指进程对于所需的资源具有排他性,即一次只有一个进程能使用。
  2. 请求与保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源被其他进程占用,此时等待这个资源的进程不释放自己所占用的资源。
  3. 不剥夺条件:指进程已获得的资源在未使用完之前,不能被其他进程抢占或强行收回,只能由进程自己释放。
  4. 循环等待条件:指存在一个进程资源申请等待环路。即若干进程之间形成一种头尾相接的循环等待资源的关系,形成了一个进程循环等待环路。

A. 操作系统线程有哪几种状态?(⭐⭐⭐)

  1. 新建:创建新的进程
  2. 就绪:进程已经获得除CPU时间片以外的任何资源,一旦获得cpu时间片就能立马执行。
  3. 执行:处于就绪队列中的进程获得了时间片运行进程。
  4. 阻塞:进程时间片用完进入阻塞队列中等待唤醒。
  5. 终止:进程执行完毕。

Untitled

<aside> 💡 在Java中有6种状态:

</aside>

A. 有哪些进程调度算法?(⭐⭐⭐)

  1. 先来先服务 (FCFS) 算法:进程按照先后顺序排队,先到先服务,不考虑进程的优先级。因为简单易懂,所以适用于一些简单场景。
  2. 最短作业优先 (SJF) 算法:根据进程需要的CPU时间长短对进程进行排序,执行时间短的进程优先处理。SJF算法可以保证平均等待时间最短,但容易导致长作业饥饿问题。
  3. 优先级调度算法:每个进程分配一个优先级,优先级高的进程先执行。根据不同的应用可以选择静态优先级或动态优先级。需要注意的是,该算法会出现优先级反转问题,即低优先级进程长时间占用资源,高优先级进程被迫等待。
  4. 时间片轮转 (RR) 算法:将CPU执行权交替分配给各个进程,并将操作系统运行时间分割成若干片(时间片),每个进程每次只能使用一个时间片。相对于其他算法,RR能够更好地均衡处理器的负载,但对于I/O密集型进程较慢。

A. 什么是缓冲区溢出?(⭐)

缓冲区溢出是指在程序执行过程中,向预先分配的缓冲区写入超出该缓冲区可容纳的数据量,导致溢出部分覆盖了缓冲区后面的内存空间,从而对程序的稳定性和安全性造成了威胁