2024面试题总结——操作系统篇1、进程和线程的区别。
进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位。进程是通过进程控制块PCB来控制的,主要包括:进程描述(PID、用户标识、进程组关系)、进程控制(状态、优先级、入口地址、队列指针)、资源和使用状况(存储空间、文件)、CPU现场(进程不执行时保存寄存器值、指向页表的指针)
线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程可以有多个线程,多个线程也可以并发执行。2、进程同步的几种方式。
主要分为:管道、系统IPC(包括消息队列、信号量、共享存储)、SOCKET管道主要分为:普通管道PIPE、流管道(s_pipe)、命名管道(name_pipe)
??????管道是一种半双工的通信方式,数据只能单项流动,并且只能在具有亲缘关系的进程间流动,进程的亲缘关系通常是父子进程。
命名管道也是半双工的通信方式,它允许无亲缘关系的进程间进行通信。信号量是一个计数器,用来控制多个进程对资源的访问,它通常作为一种锁机制。
消息队列是消息的链表,存放在内核中并由消息队列标识符标识。信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。共享内存就是映射一段能被其它进程访问的内存,这段共享内存由一个进程创建,但是多个进程可以访问。
3、线程间同步的方式。
?**互斥量Synchronized/Lock:**采用互斥对象机制,只要拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
**信号量Semaphare:**它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
**事件(信号),Wait/Notify:**通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
??4、什么是缓冲区溢出。有什么危害,其原因是什么。
缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
危害有以下两点:
??程序崩溃,导致拒绝的服务。跳转并且执行一段恶意代码。
造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。5、进程中有哪几种状态。
就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源。运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数目。阻塞状态:进程等待某种条件,在条件满足之前无法执行。状态图如下图所示。
6、分页和分段有什么区别。
段式存储管理是一种符合用户视角地内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),比如代码段、数据段、堆栈段。这样每个进程都有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如5k的段换4k的段,会产生1k的外碎片)。页式存储管理方案是一种用户视角内存与物理内存相分离的内存分离管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而屋里内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中的任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。
两者的不同如下:
?**目的不同:**段是信息的逻辑单位,它是根据用户的需求划分的,因此段是对用户可见的;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。
**大小不同:**段的大小不固定,有它所完成的功能决定;页的大小是固定的,由系统决定。
**地址空间不同:**段向用户提供二维地址空间;页向用户提供的是一维地址空间。
**信息共享:**段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享收到限制。
**内存碎片:**页式存储管理的优点是没有外碎片,但是会产生内碎片。而段式管理的优点是没有内碎片,但会产生外碎片。
????在分页系统中,允许将进程的每一页离散地存储在内存的任一物理块中,为了能在内存中找到每个页面对应的物理块,系统为每个进程建立了一张页面映射表,简称页表。页表的作用就是实现从页号到物理块号的地址映射。7、操作系统中进程调度策略有哪几种。
操作系统中进程调度策略主要包括FCFS(先来先服务)、优先级、时间片轮流、多级反馈等。具体分为以下几种,不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。
首先讨论批处理系统。批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。
**先来先服务first-comefirst-serverd(FCFS):**非抢占式,FCFS是一种最简单的调度算法,该算法即可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建线程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
**短作业优先shortestjobfirst(SJF):**非抢占式,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。它们可以分别用于作业调度和进程调度。短作业优先的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一致执行到完成,或发生事件而被阻塞放弃处理机时再重新调度。**最短剩余时间优先shortestremainingtimenext(SRTN):**最短作业优先的抢占式版本,按剩余运行时间的顺序进行调度。当一个新的作业到达时,其
整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待。
然后讨论交互式系统,交互式系统有大量的用户交互操作,在该系统中调度算法的目标就是快速地进行响应。
**时间片轮转算法:**将所有就绪进程按照FCFS地原则排成一个队列,每次调度时,把CPU时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序边停止该进程的执行,并将它送往就绪队列的末尾,同时继续把CPU时间分配给队首的进程。时间片轮转算法的效率和时间片的大小有很大的关系。时间片过小,会导致进程切换太频繁。如果时间片过长,那么实时性就不能得到保证。
**优先级调度:**为每个进程分配一个优先级,按优先级进行调度。为了防止低优先级的进程永远得不到调度,可以随着时间的推移增加等待线程的优先级。**多级反馈队列:**一个进程需要执行100个时间片,如果采用时间片轮转调度算法,那么需要交换100次。多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如1,2,4,8....。进程在第一个队列没执行完,就会转移到下一个队列。这种方式下,之前的进行就只需要交换7次。每个丢列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排休,才能调度当前队列上的进程。8、死锁的必要条件和处理方法。
死锁的概念,在两个或者多个并发进程中,如果每个进程持有某个资源而又都等待别的进程释放它或他们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,死锁就是两个或多个进程被无限期地阻塞、相互等待的一种状态。死锁的必要条件有四个。
????**互斥:**每个资源要么已经分配给一个进程,要么就是可用的。**占有和等待:**已经得到了某个资源的进程可以再请求新的资源。**不可抢占:**已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显示地释放。
**环路等待:**有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。
主要有以下四种处理方法:
??**鸵鸟策略:**不才与任何措施,假装没有发生。
**死锁检测与死锁恢复:**不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。每种类型一个资源的死锁检测算法是通过有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点