文章目录
2.3进程控制
1.操作系统的内核
现在的操作系统一般将OS划分为若干层次,将OS的不同功能分别设置在不同的层次。
为了防止OS本身遭受到破坏,处理机执行的状态被分为系统态和用户态两种:
1.系统态:又称管态,也成为内核。它具有较高的权利,能执行一切命令,访问所有的寄存器和储存区。
2.用户态:又称目态。具有较低的权限,仅能执行特定的指令,访问指定的寄存器和储蓄区。
一般情况下,应用程序只能在用户态运行
1.支撑功能
该功能是提供给OS其他众多模块所需的一下基本功能,以便支撑这些模块的工作。基本三大支撑功能是:
- 中断处理:是整个操作系统赖以活动的基础。
- 时钟管理:是对时间的一种分配和管里基础。如时间片轮转调度、截止时间的控制等
- 原语操作:是由若干条命令组成,用于完成一定功能的一个过程。
2.资源管理功能
- 进程管理:是对进程的创建、撤销、调度、分配等信息的管理。通常将他们放在内核中。
- 储存器的管理:实现将用户空间的逻辑地址转变为内存空间的物理地址的地址转换机构、内存分配与回收的功能模块以及实现内存保护和对换功能的模块。通常将他们放在内核中。
- 设备管理: 实现设备分配和独立性功能的模块。
2.进程的创建
1.进程的层次结构
- 子进程与父进程:一个进程创建另一个进程,通常把创建者称为父进程,被创建者称为子进程。
- 孙进程:是由子进程创建的进程称为孙进程。
- 进程的继承与撤销:子进程可以继承父进程所有的资源,当子进程被撤销时,它从父进程继承的资源应该全部归还给父进程。
- 父进程的撤销与子进程的关系:当父进程被撤销时,也必须撤销所有的子进程。
- windows 系统中的进程的概念:
(1) 进程不存在任何的层次关系,所有的进程都是相同的地位。
(2) 进程创建另一个进程会获得一个句柄,作用相当于对于创建进程的控制。
(3)句柄是可以传递的,得有句柄的进程就会对其被创建进程的控制。
2.进程图
为了形象的描述一个进程家族的关系而引入了进程图,它是描述进程的关系的有向树。
这里A就是祖先进程,B可以是A的进程也可以是D、E的父进程,而D、E、F、G只能是子进程。
3.引起创建进程的事件
为了进程之间能够并发,应先为它们分别创建进程。导致一个进程创建另一个进程的典型事例有四类:
- 用户登录:登录成功后系统会为用户创建一个进程。
- 作业调度:作业调度程序安照某种算法调度作业时,便把它们装进内存,为它们创建进程。
- 提供服务:用户程序提出某种请求后,系统将专门创建一个进程为用户程序服务。
- 应用请求:用户进程为自己创建进程而在是系统为用户创建进程,这样可以使新进程和创建者进程并发运行的方式完成特定任务。
4.进程的创建(creation of process)
系统每当出现创建新的进程请求后,OS便调用进程创建原语Creat按照下面的步骤创建进程。
- 申请空白PCB:为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB.
- 为新进程分配其运行所需要的资源:包括物理和逻辑资源,而这些资源是从操作系统或者父进程中获取,并需要将所需详情告诉他们。
(1)对于批处理作业,其大小可在用户提出创建进程要求时提供
(2)若是应用程序创建进程,其大小也应该在提出创建进程要求时提供
(3)对于交互型作业,用户可以不给出内存要求而由系统分配一定的空间。 - 初始化进程控制块(PCB) ,PCB的初始化包括:
(1)初始化标识信息:将系统分配的标识符和父进程标识符填入PCB中。
(2)初始化处理机状态的信息:使程序计数器指向程序的入口地址,使栈指针指向栈顶。
(3)初始化处理机控制信息:将进程的状态设置为就绪状态或者静止状态,对于优先级,通常设置为最低级,除非用户自己设置。
(4)如果进程就绪队列能接纳新进程,便将新进程插入就绪队列。
3.进程的终止
1.引起进程终止(termination of Process)的事件
- 正常结束:进程任务已经完成,准备退出运行。
(1)在批到处理系统中,通常会在程序的最后安排语句Halt,运行到Halt时,就会产生中断。
(2)在分时系统中,用户利用Logs off去表示进程运行完毕。 - 异常结束:进程在运行时发生了某种异常事件,使程序无法继续进行运行。通常有:
(1) 越界错:程序访问的储存区,已经越出了该进程的储存区。
(2)保护错:进程师徒访问一个不允许访问的资源或者文件,或者以不适当的方式进行访问。
(3)非法指令:程序试图执行一条不存在的命令。
(4)特权指令错 用户进程试图去执行 只允许OS执行的指令。
(5)运行超时:进程执行时间超过最大值。
(6)等待超时:进程等待某件事件事件超过了最大值。
(7)算术运算错:进程试图执行一个被禁止的运算。
(8)I/O故障:I/O过程中发生了错误等。 - 外界干预:进程应外界的请求而终止运行。,这些干预有
(1)操作员或者操作系统的干预
(2)父进程的请求
(3)因父进程终止:父进程终止时,所有的子进程也都要终止。
2.进程的终止过程
系统中发生要求终止进程的某个事件,OS便调用进程终止原语,终止指定的进程的过程。
- 根据被终止进程的标识符,从PCB(进程控制块)集合中检索出进程的PCB,从中读出该进程的状态。
- 若被终止的进程正在处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进入调度。
- 若该进程还有子孙进程,还应将其子孙进程也都终止了,以防他们成为不可控的进程。
- 将被终止的子进程应归还全部资源给其父进程。
- 将被终止进程(PCB)从所在队列或链表中移除,等待其他程序来搜集信息。
4.进程的堵塞与唤醒
1.引起进程阻塞和唤醒的事件
- 向系统请求共享资源失败:由于系统没有过多的资源分配导致的失败。
- 等待某种操作的完成:当进程启动某种操作后,如果该进程必须在操作完成后才能执行,则应先将该进程堵塞起来。
- 新数据尚未到达:对于相互配合的进程,一个进程需要另一个进程提供数据才能够对数据进行处理,其所需的数据尚未达到,进程就需要阻塞。
- 等待新任务的到达:每当进程完成自己的任务后就会啊自己阻塞起来,等待新任务的到来,再次被唤醒。
2.进程阻塞的过程
- 进程是通过调用阻塞原语block将自己阻塞。
- 阻塞是进程自身的主动行为
- 进入block过程后,由于该进程处于执行状态就,所以应先立即停止执行,把进程控制块PCB现行的状态由执行改为阻塞,并将PCB插入阻塞队列。
- 最后,转调度程序进行重新调度,将处理机分配给另一就绪的进程,并进行切换。即,保留被阻塞进程的处理状态,按新进程的pCB中的处理机状态设置CUP。
3.进程的唤醒过程
- 当被阻塞进程所期待的事件发生时,则有关进程调用唤醒原语(wakeup),将等待该事件的进程唤醒。
- 唤醒执行的过程是:
(1)把被阻塞的进程从等待事件的阻塞队伍中移除;
(2)将其PCB中的现行状态由阻塞改为就绪;
(3)然后再将该PCB插入到就绪队列中。 - 应该说明,block原语和wakeup原语是一对作用刚好的相反语句。在使用他们时,必须成对使用。
5.进程的挂起与激活
1.进程的挂起
系统中出现了引起进程挂起的事件时,OS 将利用挂起原语suspend将指定进程或处于阻塞的进程挂起suspend的执行过程是:
- 首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;
- 对于活动阻塞状态的进程,则改为静止阻塞;
- 为了用户和父进程的方便,而把该进程的PCB复制到指定的内存区域;
- 最后,若被挂起的进程正在执行,则转向调度程序重新调度。
2.进程的激活过程
当进程发生激活事件时,OS将利用激活原语action,将指定进程激活,其过程是:
- action先将进程从外调入内存,检查该进程的状态,若为静止就绪,便改为活动就绪;若为静止阻塞,便将其改为活动阻塞。
- 在抢占调度策略中,则每当由静止就绪进程被激活而插入就绪队列是,便检查是否要进行重新调度,即由调度程序将被激活进程与当前进程两者的优先级做比较,如果被激活进程的优先级低,就不必重新调度,否则,立即剥夺当前进程的运行,把处理机分配给刚刚激活的进程。