计算机操作系统面试题总结(2)

计算机操作系统面试题总结(2)

临界资源:一个时间段内只允许一个进程使用的资源,各进程需要互斥的访问临界资源。

临界区:访问临界资源的那段代码

内核程序临界区:一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的pcb组成)

进程在操作系统内核程序临界区不能进行调度与切换。

进程调度方式:

非剥夺调度方式(非抢占式)&剥夺调度方式(抢占式)

非抢占式:无法及时处理紧急任务,适合早期批处理
抢占式:可以优先处理更紧急的任务,也可实现让各个进程按时间片轮流执行的功能(通过时钟中断),适合分时操作系统、实时操作系统

进程切换任务:

  • 对原来运行的进程进行各种数据保持
  • 对新的进程各种数据的恢复

进程的切换是有代价的,因此,如果过于频繁的进行进程的调度、切换,必然会使得整个系统的效率降低,是大部分时间花在了进程切换上。(注重后续的时间片轮转的算法)

调度算法的评价标准:
  • cpu利用率,忙碌时间/总时间

  • 系统吞吐量:单位时间内完成了多少道作业,总共完成多少作业/总共花多少时间

  • 周转时间:作业被提交给系统开始,到作业完成为止的这段时间间隔,作业完成时间 - 作业提交时间

  • 平均周转时间:各作业周转之和/作业数

  • 带权周转时间:作业周转时间/作业实际运行实际 (>=1)

  • 平均带权周转时间:各作业带权周转时间/作业数

  • 等待时间:进程/作业 处于等待处理机状态时间之和,被建立后,等待被服务之和。
    (由此可见,调度算法只能影响作业/进程的等待时间)

  • 响应时间,提出请求到首次产生响应所用的时间

调度算法

  1. 先来先服务FCFS,等待时间越久的越优先得到服务:对短进程作业非常不友好,导致饥饿;
  2. 短作业优先SJF:默认为非抢占式,选择当前已经到达的且运行时间最短; 短进程优先SPF(process),每当新来了一个进程,比较之后,更短则优先;
    在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少;也会导致饥饿,甚至饿死;
    3**. 高响应比优先HRRN**:响应比最高的作业先服务,不会导致饥饿;

以上三种不强调交互性,用于早期批处理;

  1. 时间片轮转调度算法(RR),根据分时操作系统而生,应用与进程调度的,属于抢占式,由时钟中断来通知cpu时间已经到了——按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片。
    (注意,默认新到达的 进程,先进入就绪队列)

时间片不适合选择太大,否则出现返祖,变成先来先服务;

优点:公平,响应快,适用于分时操作系统
缺点:由于高频率的进程切换,因此有一定的开销,并且不区分任务的紧急程度;
不会导致饥饿;

  1. 优先级调度算法:静态/动态优先级,
    如何设置优先级?

通常:系统进程优先级高于用于进程;前台进程高于后台进程;操作系统偏好I/O进程(或I/O繁忙进程)
采用动态优先级时,追求公平提升资源利用率来考虑。 适用于实时操作系统,缺点:可能导致饥饿。

  1. 多级反馈队列算法:用于进程调度,抢占式算法;
    优先级从高到低,时间片从小到大,新进程优先到达第一级,按照FCFS原则排队,若第一级时间片用完,进入下一级队尾;只有当第k级队列为空时,才会为第k+1级队头进行分配时间片;
    优点:综合了上面的算法;缺点:会饥饿
进程同步&进程互斥

进程的异步性:各并发执行的进程以各自的独立的、不可预知的速度向前推进;

进程同步 定义:完成某种任务而建立的两个或者多个进程,这些进程因为需要在某个位置上协调他们的工作次序,而产生的制约关系,进程间的直接制约关系就是源于他们之间的相互工作。

比如管道通信中,里面的写操作必须在读操作之前完成,这个次序不允许改变

进程互斥 定义:对于一个时间段只允许一个进程进行使用的叫做临界资源,必须是互斥的进行,亦称间接制约关系,进程互斥就是当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待,当前访问临界资源的程序访问结束后,释放完该资源,另一个进程才能去访问临界资源。

注意:
进入区和退出区是 正在访问临界资源的那段代码
临界区 是实际访问临界资源的那段代码

互斥原则:

  1. 空闲等待
  2. 忙则等待
  3. 有限等待
  4. 让权等待

进程互斥的四种软件实现方式

  1. 单标志法
  2. 双标志先检查法
  3. 双标志后检查法:进入检查区无法实现检查和上锁的一气呵成,待解决的问题
  4. peterson算法

进程互斥的三种硬件表示法

  1. 中断屏蔽法
  2. TS/TSL指令
  3. Swap/XCHG指令

以上所有方式都没办法实现让权等待

信号量

信号量机制:其实是一个变量,也可以是一个整数或者更复杂的记录型变量,可以用一个信号量来表示系统中某种资源的数量;

原语是一种特殊的程序段,执行只能一气呵成,不可被中断,原语是由关中断/开中断指实现;
可以使用系统提供的一对原语来控制:wait(s)与signal(s),其中信号量s就是函数调用时传入的一个参数; 就是P\V操作

整形信号量:初始化、p操作、v操作;用一个整型的变量作为信号量,用来表示系统中某种资源的数量。

存在问题:不满足让权等待,出现忙等状态(忙等:进程一直占用处理,出现循环)

记录型信号量:整型信号量缺陷存在忙等问题,所以记录型,就是用记录型数据结构表示的信号量;

记录型:
wait()如果剩余资源不够,使用block()原语使进程从运行态进入阻塞态,并把挂到信号量s的等待队列(阻塞队列);
signal()释放资源后,若还有别的进程在等待这种资源,则使用wakeup()原语唤醒等待队列中的第一个进程,从阻塞态转为就绪态

对信号量的一次p操作,意味着,请求一个单位的该类资源,因此需要执行value–;若小于0了,则需要用block原语进行自我阻塞;遵循了让权等待原则,不会出现忙等;
对信号量的一次v操作,意味着,释放一个单位的该类资源。用wakeup()原语唤醒;

用信号量机制实现进程互斥:

  1. 划定临界区
  2. 设置互斥信号量 semaphoe mutex 初值为 1
  3. 临界区之前 p(mutex)
  4. 临界区之后v(mutex)

进程同步:要让各并发进程按要求有序地推进;

  1. 分析什么地方需要实现“同步关系“,必须保证”一前一后“执行的两个操作
  2. 设置同步信号量s,初始值0
  3. 在前操作之后,执行v(s) 放, 通俗来书,前面放出来了,后面p就一定可以,所以前操作之后要放出来!
  4. 在后操作之前,执行p(s) 取

进程的前驱关系:无非多设置了几个同步量,在每一对前驱关系各设置一个同步变量,前v后p

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值