1.进程调度追求的目标是什么?
达到极小化平均响应时间、极大化系统吞吐率、保存系统各个功能部件处于繁忙状态和提供某种貌似公平的机制。但是,对于不同的操作系统来说达到的目的也会不同。对于批处理系统,不注重用户等待时间。交互式系统要对于响应时间要适当;
2.程序使用CPU的模式有哪几种?它们的特点;
- 在CPU上执行较长时间;
这种称为CPU导向或计算密集型程序,通常用于科学计算方面的程序; - CPU执行时间短,大部分用于I/O操作;
称为I/O导向或者输入输出密集型程序;人机交互式到属于这类程序,如游戏程序以及PPT程序; - 介于二者之间,有较长的CPU执行时间,较长时间的I/O操作;
称为平衡型程序;如网络浏览器,网络视屏;
3.保障调度和时间片轮转的异同点,根本区别是什么?
时间片轮转:目的是改善短程序的响应时间,周期性的进行进程切换;其实就是对FCFS算法的改进,一个程序运行一个时间段就切换给别的进程,让个程序都有机会运行;但是频繁的进程切换需要消耗系统时间(切换时间需要把控);
保障调度:就是保障每个进程都能拿到1/n的CPU时间;但是可以不需要轮转就能实现;
根本区别就是保障调度可以不需要轮转,每次给的时间片不一定要一样;
4.什么是优先级倒挂?他有什么危害?
一个低优先级任务持有一个被高优先级认为所需要的共享资源;这样高优先级任务资源缺乏而受阻,一直到低优先级任务释放资源为止;
某些时候并不会造成危害,等到低优先级任务结束后,资源自然会给到高优先级任务;
如果阻碍任务较为重要,就可能会导致系统报错;
5.怎么解决优先级倒挂?
优先级倒挂的俩种形式:
- 不持有资源的低优先级进程阻碍需要资源的高优先级进程的执行;
- 持有资源的低优先级进程阻碍需要资源的高优先级进程的执行;
第一种形式的解决办法:使用中断禁止;
通过禁止中断来保护临界区,这种方式会出现俩个优先级:可抢占优先级和中断禁止优先级。前者为一般进程运行时的优先级,后者为运行于临界区进程的优先级。由于系统的锁不能发生乱序,不会发生死锁。又由于进入临界区的进程总是能够不被打断而一直运行到结束,因此也不会发生悬挂;这样,技术高优先级进程采用繁忙等待也不会发生死锁;但是,所用种啊段都必须禁止,如果禁止的只是一个硬件设备中断,能硬件的中断优先处理机制将再次引入优先级倒挂;
在多CPU环境下,不能使用中断禁止,就有另外一种方式,单一共享标志锁,
第二种形式的解决办法:优先级上限(priority ceiling)
中断禁止可以防止第一种优先级倒挂,但是无法避免第二种。想要避免就不能让低优先级进程持有高优先级进程所需要的资源。思路就是让共享的临界区有自己的优先级,并让访问临界区的进程获得临界区的优先级,只要临界区的优先级设置的够高,就可以避免;但是试图访问mutex的程序具有高于mutex的优先级还是可能发生倒挂;
要完全杜绝倒挂,就需要在任何时候都确保等待资源的进程具有的优先级必须低于持有资源的进程的优先级。如何实现呢?就是优先级继承(priority inheritance):
当一个高优先级进程等待一个低优先进程所持有的资源时,这个低优先级进程抢占低优先级进程而延长资源占用时间,同时也防止了因高优先进程自身进行繁忙等待可能导致的死锁。在释放共享资源后,低优先级进程回到其原来的优先级别;
6.如果最后一个进程在CPU任务结束后由很长一段时间的I/O操作,在计算CPU响应时间时是否应该计入该I/O操作耗时?
不算;
具体原因…