(1) 为什么程序并发执行会产生间断性特征,并失去封闭性和可再现性?
解:
之所以产生间断性特征是因为多个程序在并发执行时,需要为了完成同一项任务而相互合作,并发执行的程序间的这种相互制约导致了“暂停—执行—暂停”的间断性运行规律。
失去封闭性是因为程序在并发执行时,多个程序需要共享系统中的多种资源。所以,这些资源的状态是由多个程序改变的,从而使程序的运行失去了封闭性。
失去可再现性是因为程序在并发执行时,由于失去了封闭性,从而导致其失去可再现性。
(2) 什么是进程?为什么要在操作系统中引入进程?
解:
进程是可并发执行且具有独立功能的程序在一个数据集合上的运行过程,它是操作系统进行资源分配和调度的基本单位。“进程”概念是人们为了使程序能够并发执行,并且能对并发的程序加以描述和控制而引入的。
(3) 试从并发性、独立性、动态性上比较程序和进程的不同。
解:
?(4) 什么是PCB?它具有什么作用?为什么说PCB是进程存在的唯一标识?
解:
进程控制块(Process Control Block,PCB)是操作系统为了管理进程而设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。
它的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程.
因为系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一一对应的。
(5) 进程有哪些基本状态?这些状态具有什么特征?
解:
进程的三种基本状态分别是:就绪状态、运行状态、阻塞状态。
(6) 为什么要引入挂起状态?该状态有什么特性?
解:
引入挂起状态时为了满足四种需要:调节系统负荷的需要、用户的需要、父进程的需要、系统的需要。
挂起状态的特点:交换到磁盘上的进程,不让其参与进程调度,以达到平衡系统负荷的目的。
(7) 说明进程基本状态的转换关系及引起这些状态间转换的典型原因。
解:
处于就绪状态的进程,在调度程序为之分配了处理器之后,就可以投入运行。同时,进程的状态也由就绪状态转变为运行状态;在采用时间片机制的操作系统中,分配给当前进程的时间片用完之后,它会暂停执行,其状态也由运行状态转换到就绪状态;如果由于某事件发生(比如进程需要访问某I/O设备,而该设备正在被别的进程访问)而使进程运行受阻,不能再继续向下执行时,它的状态会由运行状态转变为阻塞状态;当进程期望的某事件发生时(比如需要访问的I/O设备已可用),进程将从阻塞状态转变为就绪状态
(8) 说明在加入了挂起状态的操作系统中,进程状态间的转换关系及引发转换的典型原因。
解:
在引入挂起状态的操作系统中,又增加了静止就绪和静止阻塞两个新的进程状态。调用挂起原语把处于活动就绪状态的进程挂起后,该进程就会由活动就绪状态转变为静止就绪状态。调用挂起原语把处于活动阻塞的进程挂起后,它的状态就转换为静止阻塞。调用激活原语激活后又可以转换到活动阻塞状态。
(9) 试说明引起进程创建的典型事件。
解:
引起进程创建的典型事件有:用户登录、作业调度、提供服务、应用请求。
(10) 试说明引起进程撤销的典型事件。
解:
引起进程撤销的典型事件有:正常结束、异常结束、外界干预。
(11) 试说明引起进程阻塞和唤醒的典型事件。
解:
引起进程阻塞和唤醒的典型事件有:请求系统服务、启动某种操作、新数据尚未到达、无新工作可做。.
(12) 试说明进程创建的过程。
解:
创建进程的操作必须调用创建原语来实现。创建原语首先为新进程申请获得惟一的数字标示符,并从PCB集合中获取一个空白PCB;为新进程的程序和数据以及用户栈分配必要的内存空间;然后对PCB进程初始化;最后将新进程插入就绪队列中,等待被调度执行。
(13) 试说明进程撤销的过程。
解:
系统调用进程终止原语来终止进程。首先根据被终止进程的标示符,从PCB集合中查找到该进程的PCB,从中读出该进程的状态,终止该进程的执行,如果该进程还有子孙进程,应该将它的所有子孙进程终止,防止它们成为不可控进程;然后回收进程所拥有的资源;最后将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。
(14) 什么是线程?请比较它与进程的异同。
解:
线程是进程中的一个实体,是被系统独立分配和调度的基本单位。线程基本上不拥有资源,只需要一些必不可少的资源(如程序计数器、一组寄存器和栈)。
进程和线程的差异:
进程和线程有着很多相似的地方:都可以并发执行;都有就绪、执行、阻塞这些基本状态,也都可以在这些基本状态之间转换状态;从创建到撤销都有一定的生命周期;都需要同步工具。
(15) 处理器调度的层次有哪些?各层次的主要工作是什么?
解:
处理器调度的层次分为三级调度:高级调度、中级调度和低级调度。
(16) 抢占式调度的原则是什么?请简要说明。
解:系统使用抢占方式进行进程调度时需要遵循一定的原则,主要有以下几个方面:
(17) 在批处理系统、分时系统、实时系统中,应分别采用哪种作业(进程)调度算法??
解:
批处理系统采用先来先服务调度算法;分时系统采用时间片轮转法;实时系统采用高响应比优先调度算法。
(18) 说明时间片轮转调度算法的基本思路。
解:
在采用时间片轮转调度算法的系统中,将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序暂停当前进程的执行,将其送到就绪队列的末尾,并通过CPU现场切换执行当前的队首进程,当然,进程可以未使用完一个时间片,就让出CPU(如阻塞)。这样可以保证就绪队列中的所有进程都有机会获得处理器而运行的机会,可以提高进程并发性和响应时间特性,从而提高资源利用率。
(19) 试说明多级反馈队列调度算法思想。
解:多级反馈队列调度算法则不必事先知道各进程的执行时间,又可以满足各种类型进程的调度需要,它是一种目前公认较好的进程调度算法。它的算法思想如下(设采用抢占式调度):
(20) 什么是静态和动态优先级?如何确定静态优先级?
解:
静态优先级是在系统创建时确定的,一经确定之后在整个进程运行期间不再改变。
动态优先级是在进程运行前先确定一个优先级,进程运行过程中根据进程等待时间的长短、执行时间的多少、输入输出信息量的大小等,通过计算得到新的优先级。
(21) 在一个单道批处理系统中,一组作业的到达时间和运行时间如下表所示。试计算使用先来先服务、短作业优先、高响应比优先算法时的平均周转时间和平均带权周转时间。
作业 | 到达时间 | 运行时间 |
1 | 8.0 | 1.0 |
2 | 8.5 | 0.5 |
3 | 9.0 | 0.2 |
4 | 9.1 | 0.1 |
解:
用T表示周转时间,用W表示带权周转时间
FCFS的作业调度情况如下:
作业 | 提交时间 | 运行时间 | 开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
1 | 8.0 | 1.0 | 8.0 | 9.0 | 1.0 | 1.0 |
2 | 8.5 | 0.5 | 9.0 | 9.5 | 1.0 | 2.0 |
3 | 9.0 | 0.2 | 9.5 | 9.7 | 0.7 | 3.5 |
4 | 9.1 | 0.1 | 9.7 | 9.8 | 0.7 | 7.0 |
FCFS的T =(1.0+1.0+0.7+0.7)/ 4 = 0.85 ?W =(1.0+2.0+3.5+7.0)/ 4 =3.375
SJF的作业调度情况如下:
作业 | 提交时间 | 运行时间 | 开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
1 | 8.0 | 1.0 | 8.0 | 9.0 | 1.0 | 1.0 |
2 | 8.5 | 0.5 | 9.3 | 9.8 | 1.3 | 2.6 |
3 | 9.0 | 0.2 | 9.0 | 9.2 | 0.2 | 1.0 |
4 | 9.1 | 0.1 | 9.2 | 9.3 | 0.2 | 2.0 |
SJF的T=(1.0+1.3+0.2+0.2)/ 4 = 0.675 ??W =(1.0+2.6+1.0+2.0)/ 4 = 1.65
高响应比优先的作业调度情况如下:
作业 | 提交时间 | 运行时间 | 开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
1 | 8.0 | 1.0 | 8.0 | 9.0 | 1.0 | 1.0 |
2 | 8.5 | 0.5 | 9.0 | 9.5 | 1.0 | 2.0 |
3 | 9.0 | 0.2 | 9.6 | 9.8 | 0.8 | 4.0 |
4 | 9.1 | 0.1 | 9.5 | 9.6 | 0.5 | 5.0 |
高响应比算法的T=(1.0+1.0+0.8+0.5)/ 4 = 0.825 ??W =(1.0+2.0+4.0+5.0)/ 4 = 3.0
(22) Linux进程有几个状态,简述各状态的转换条件。
?解:1)运行状态2) 可中断睡眠状态 3)不可中断睡眠状态4)暂停状态 5)跟踪状态 6)僵死状态 7)退出状态
?进程创建时的状态为不可中断睡眠状态,在do_fork()结束前被父进程唤醒后,变为执行状态,适当时候获得CPU。?获得CPU且正在运行的进程若申请不到某个资源时,进入睡眠状态,如果调用sleep_on(),则其状态变为不可中断睡眠状态,如果调用interruptible_sleep_on(),则其状态变为可中断睡眠状态,当进程获取所申请的资源时,睡眠进程进入运行状态。当系统调用do_exit()时,进程进入僵死状态。若进程通过系统调用设置标志PF_SYSTRACE,则在系统调用返回前进入函数syscall_trace(),状态改为暂停。只有通过其他进程发送的信号SIG_KILL或SIG_CONT,才能把暂停状态进程唤醒,重新进入run-queue队列。
(23) Linux中的线程调度算法有几种,简述之?
解:调度策略有三种:
????(1)SCHED_OTHER(普通分时调度策略):它是缺省调度策略,适用于优先级为0的线程,它为链表中的每个线程分配时间片,保证链表中的每个线程有公平的执行时间。
????(2)SCHED_FIFO(先进先出调度策略):适用于优先级高于0的线程,当SCHED_FIFO中有可运行线程时,该线程会抢先任何当前运行的SCHED_OTHER线程称为当前运行线程。当有优先级更高的线程抢先时,该进程保留在对应链表的头部,在高优先级线程结束后立即投入运行。
(3)SCHED_RR(循环调度策略):它是SCHED_FIFO策略的简单增强,增加了时间片限制。如果某个SCHED_RR 运行的线程等于或超过分配给它时间片,结束运行,排到对应链表的尾部。