操作系统考研复试、工作面试常见问题及答案

1、进程与线程的关系以及区别?

(1)定义:
	进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
	线程:是进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。
(2)区别与关系:
	做个简单的比喻:进程=火车,线程=车厢
	<1> 线程在进程下行进(单纯的车厢无法运行)
	<2> 一个进程可以包含多个线程(一辆火车可以有多个车厢)
	<3> 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
	<4> 同一个进程下不同线程间数据很容易共享(A车厢换到B车厢很容易) 
	<5> 进程要比线程消耗更多的计算机资源(采用多列火车比多个车厢更耗资源)
	<6> 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
	<7> 线程最多扩展到多核CPU,而不能扩展到多机(同一个乘客的事物(又要吃的[线程1],又要换被子[线程2],还要跳绳[线程3]),可以由多个乘务员(处理器)并行处理)
	<8> 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”
	<9> 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”
(3)优缺点:
	线程开销小,但不利于资源的管理和保护;进程与之相反。

2、进程的常见状态?以及各种状态之间的转换条件?

就绪:进程已处于准备好运行的状态,即进程已分配到除CPU外的所有必要资源后,只要在获得CPU,便可立即执行。
执行:进程已经获得CPU,程序正在执行状态。
阻塞:正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态。

3、进程的调度算法有哪些?

(1)先来先服务(FCFS):此算法的原则就是按照作业到达后备作业队列(或进程进入就绪队列)的先后次序选择作业(或进程)。
	优点:公平、实现简单
	缺点:对短作业不利
(2)短作业优先(SJF):这种算法主要用于作业调度,它从作业后备序列中挑选所需运行时间最短的作业进入主存运行。
	优点:“最短的”平均等待或周转时间
	缺点:对长作业不利,可能导致饥饿,难以做到真正的短作业优先
(3)时间片轮转调度算法:当某个进程执行的时间片用完时,调度程序便终止该进程的执行,并将它送到就绪队列的末尾,等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证队列中的所有进程,再已给定的时间内,均能获得一时间片处理机执行时间。
	优点:公平、适用于分时系统
	缺点:频繁切换有开销,不区分优先级
(4)高响应比优先(HRRN):按照高响应比(已等待时间+要求运行时间)/ 要求运行时间 优先的原则,再每次选择作业投入运行时,先计算此时后备作业队列中每个作业的响应比RP。选择最大的作业投入运行。
	优点:(1)和(2)两种算法的权衡折中,综合考虑的等待时间和运行时间
(5)优先权调度算法:按照进程的优先权大小来调度。使高优先权进程得到优先处理的调度策略称为优先权调度算法。注意:优先数越多,优先权越小。
	优点:区分优先级,适用于实时系统
	缺点:可能导致饥饿
(6)多级队列调度算法:多队列调度是根据作业的性质和类型的不同,将就绪队列再分为若干个队列,所有的作业(进程)按其性质排入相应的队列中,而不同的就绪队列采用不同的调度算法。
	优点:平衡优秀
	缺点:一般不说它有缺点,不过可能导致饥饿

4、非抢占式调度与抢占式调度?

非抢占式:分派程序一旦把处理机分配给某进程后,便让它一直运行下去,直到进程完成或发生进程调度因某事件而阻塞时,才把处理机分配给另一个进程。
抢占式:操作系统将正在运行的进程强行暂停,由调度程序将CPU分配给其他就绪进程的调度方式。

5、什么是死锁?产生死锁的条件?如何避免死锁?

死锁:各进程相互等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。
饥饿:由于长时间得不到想要的资源,某进程无法向前推进的现象。
死锁产生的原因:系统资源不足,进程推进顺序非法。
产生死锁的必要条件:
	(1)互斥条件:一个资源每次只能被一个进程使用
	(2)不可剥夺条件:进程已获得资源,在未使用完之前,不能被其他进程强行剥夺,只能主动释放。
	(3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
	(4)循环等待条件:即进程集合{A,B,C};A正在等待B占用的资源,B正在等待C占用的资源,C正在等待A占用的资源。
	只要上述一个条件不成立,就不会发生死锁。
死锁的解除和预防:理解死锁的原因,以及产生死锁的四个必要条件,就可以最大可能地避免和预防和解锁死锁。所以在系统设计、进程调度等等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。对资源的分配要给予合理的规划。
死锁的处理策略:鸵鸟策略、预防策略、避免策略、检测与解除死锁。

6、进程间通信(IPC)有哪些方式?他们的区别?

(1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在有血缘关系的进程间使用,进程的血缘关系通常是指父子进程关系。
(2)命名管道:也是半双工的通信方式,但是它允许无血缘关系进程间通信。
(3)信号:是一种比较复杂的通信方式,用于通知接收进程某一事件已经发生。
(4)信号量:信号量是一个计数器,可用来控制多个进程对共享资源的访问。它通常作为一种死锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
(5)消息队列:消息队列是由消息组成的链表,存放在内核中,并由消息队列标识符标识。消息队列克服了信号传递消息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(6)共享内存:就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC方式,它是针对其他进程间的通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量等配合使用,来实现进程间的同步和通信。
(7)套接字(socket):套接字也是一种进程间的通信机制,与其他通信机制不同的是,它可用于不同主机间的进程通信。
几种方式的比较:
	管道:速度慢、容量有限
	消息队列:容量受到系统的限制,并且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
	信号量:不能传递复杂信息,只能用来同步。
	共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相对于线程中的线程安全。

7、线程间的通信机制?

(1)锁机制:互斥锁、条件变量、读写锁
	互斥锁:提供了以排他方式防止数据结构被并发修改的非法
	读写所:允许多个线程同时读共享数据,而对写操作是互斥的。
	条件变量:可以以原子的方式进行阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
(2)信号量机制:包括无名信号量和命名线程信号量
(3)信号机制:类似于进程间的信号处理
tips:线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

8、线程间的通信方式?

(1)临界区:通过多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
(2)互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
(3)信号量:为控制具有有限数量的用户资源而设计的,它允许多个线程在同一时刻区访问同一个资源,但一般需要限制同一时刻访问此资源的最大线程数目。
(4)事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

9、分段和分页的区别?

页:是信息的物理单位,分页是为了实现离散分配方式,以减少内存的外零头,提高内存的利用率。分页仅仅是由于系统管理的需要,而不是用户的需要。
	页的大小固定,且由系统确定,把逻辑地址分为页号和页内地址两个部分,由机器硬件实现的。因此一个系统只能有一种大小的页面。
	分页的作业地址空间是一维的,即单一的线性空间。
段:是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好的满足用户的需要。
	段的长度却不固定,决定于用户编写的程序,通常由编写程序在源代码进行编辑时,根据信息的性质划分。
	分段的作业地址空间是二维的,程序员在标识一个地址时,即需要给出段名,有需要给出段内地址。

10、Windows下的内存是如何管理的?

(1)虚拟内存:最适合用来管理大型对象或者结构数组
(2)内存映射文件:最适合用来管理大型数据流(通常来自文件)以及在单个计算机上允许多个进程之间共享数据。
(3)内存堆栈:最适合用来管理大量的小对象

11、同步与异步?

同步:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
	特点:
		<1>同步是阻塞模式
		<2>同步是按顺序执行,执行完一个再执行下一个,需要等待,协调运行
异步:是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
	特点:
		<1>异步是非阻塞模式,无需等待
		<2>异步是彼此独立,再等待某事件的过程中,继续做好自己的事,不需要等待这一事件完成后再工作。线程是异步实现的一个方式。

12、同步与异步的优缺点?

同步可以避免出现死锁,一般共享某一资源的时候,如果每个人都有修改权限,同时修改一个文件,有可能使一个读取另一个已经删除了内容,就会出错,同步就不会出错。但是,同步需要等待资源访问结束,浪费时间,效率低。异步可以提高效率,但是安全性较低。

13、常见的磁盘调度算法有哪些?

(1)先来先服务算法(FIFO):它根据进程请求访问磁盘的先后次序进行调度。
(2)最短寻道时间算法(SSTF):该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。
(3)扫描算法(电梯调度算法(SCAN)):扫描算法不仅考虑到想要访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。
(4)循环扫描算法(CSCAN):循环扫描算法是对扫描算法的改进。循环扫描算法规定磁头单向移动。

14、进程同步与互斥的区别?

互斥:指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排他性。但是互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:指再互斥的基础上(大多数情况),通过其他机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
简单地说:同步体现的是一种协作性,互斥体现的是一种排他性。
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Puzzle harvester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值