1、进程管理

一、进程的创建与终止:

    1、进程的创建:

在多道程序环境下,只有进程才能在系统中运行因此,为使程序能够运行,必须为他创建进程。导致进程创建的时间有用户登录,作业调度,为用户提供服务等。

    一旦系统发现要求创建进程的事件后,便立刻调用创建原语 Create(),通过下述步骤创建一个进程:

(1)申请空白PCB。为新进程申请获得唯一的进程标识符,并从PCB集合索取一个空白PCB。

(2)为新进程分配资源。包括新创建进程的程序,数据,及用户栈所需的内存空间。此时,系统必须知道新进程所需内存的大小。对于批处理作业,其大小可在用户提出创建进程要求时提供。如果为应用进程创建紫禁城,也应该在进程提出创建进程的请求中给出所需内存的大小。对于交互性作业,用户可以不给出内存要求而由系统分配一定的空间。

(3)初始化进程模块,PCB的初始化包括初始化标识信息,如进程标识符,父进程标识符,处理状态机信息,是程序计数器指向程序的入口地址,使栈指针指向栈顶,处理机控制信息,将新建进程的状态设置为就绪状态(活动就绪或静止就绪状态);进程的优先级等。

(4)将新建进程插入就绪态队列。

    2、进程的终止过程:

如果系统中发生了要求进程终止的事件后,操作系统便调用进程终止原语,终止该进程。

(1)根据被终止进程的标识符,从PCB队列中检索出该进程的pcb,从中读出该进程的状态。

(2)若被终止进程正处于执行状态,应立即终止该进程的执行,该进程被终止后应重新进程调度。

(3)检查该进程有无子孙进程,若有,应将其所有子孙进程终止。

(4)释放终止的进程所占有的资源,将其归还他的父进程或系统。

(5)将被终止的进程从他的PCB队列中移出。

3、进程的阻塞与进程的唤醒

    通过进程原语可以创建一个进程,撤销原语完成的任务是在进程运行完成或被强行撤销后将进程消亡,但这还不能完成进程各种状态的转换,如:运行->阻塞,阻塞->就绪,这需要通过进程之间的同步或通信机构来实现,也可以直接使用阻塞原语和唤醒原语来实现。

(1)进程阻塞:当一个进程所等待的某一事件尚未发生时,该进程调用阻塞原语block(),将自己阻塞,并转换为等待状态。阻塞原语的功能是将调用阻塞原语的进程的cpu现场送到该进程的现场保护区,置该进程的状态为等待,并将该进程插入到相应的等待队列中,然后转进程调度程序,选择一个就绪状态的进程使之执行。

(2)进程的唤醒:进程有运行状态转变为等待状态,是由于进程必须等待某一时间的发生,所以出于等待状态的进程不可能将自己唤醒,只有当该进程所等待的外部事件发生时,才由发生该事件的进程调用唤醒原语wakeup()将他唤醒。

    唤醒原语的执行过程是,首先把被阻塞进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞状态改为就绪状态,然后,将它的PCB插入到就绪态队列。

二、几个相关的linux系统调用

在linux系统中,系统向用户提供了一些对进程进行控制的系统调用。

1、fork()系统调用;

linux利用fork()系统调用创建一个新的进程。(子进程)

int fork();通常情况下,设返回值为int pid,调用格式为:pid = fork();

其中返回值的意义如下:

pid = 0;创建紫禁城成功,表示从子进程返回。

pid > 0;创建子进程成功,表示从父进程返回,pid 的值为新创建的子进程的标识号。

pid = -1;创建失败。

fork()函数是通过复制来创建子进程的,子进程在进程父进程的上下文,是父进程的一个副本,与父进程使用同一段代码。在该系统调用之后,两个代码相同的进程并发执行。

2、多道批处理系统:

单道批处理系统中任何时刻只有一道作业在内存中,在一道作业的运行过程中输入输出和计算操作是串行的,因此导致I/O设备和cpu串行工作,从而有总空闲资源,I/O设备工作时CPU空闲,cpu工作时I/O    设备空闲。即使在脱机批处理系统中,内存和输入输出磁带间的数据传输和cpu的计算工作也是串行的。

为了进一步提高系统吞吐量,引入了多道程序并发执行技术,从而形成了多道批处理系统。多道程序并发执行的基本思想是,内存中同时存放多道程序,在操作系统的控制下,交替执行。在躲到批处理系统中,用户提交作业先存放在外存中,并排成一个队列,成为后备队列,然后由作业调度程序按一定的策略从后备队列中选择若干作业调入内存,使他们并发执行,从而共享系统中的各种资源,提高资源利用率,最终提高系统吞吐量。

3、操作系统的特性:

    本课程中以多任务操作系统linux为例讲解操作系统原理,所以在此阐述是多任务操作系统的特征。各种多任务操作系统分别具有各自的特征,但他们具有如下4个共同的基本特征。

(1)并发:

    并发性是指宏观上有多道程序同时运行,但在微观上是交替运行的。多道程序并发执行能提高资源利用效率和系统吞吐量。

    多个进程的并发执行由操作系统统一控制,为保证并发进程的顺利运行,操作系统提供了一系列的管理机制。

(2)共享:

    指计算机系统中的资源被多个任务共同使用,共享的理由是:(1)各用户或任务独占系统资源将导致资源浪费。(2)多个任务共享一个程序的同一个副本,而不是分别向每个用户提供一个副本,可以避免重复开发。

    并发和共享是紧密相关的。一方面,资源共享是以进程的并发执行为条件的,若不允许进程的并发执行,就不会有资源的共享,另一方面,进程的并发以资源共享为条件1,若系统不允许资源共享,程序就无法执行。

(3)异步:

    在多道程序系统中,多进程并发执行,但在微观上,进程是交替执行的,因此进程以“走走停停”的不连续方式运行。由于并发运行环境的复杂性,每个进程在什么时候开始执行何时暂停,以怎样的方式运行,何时中断都是不可预知的,我们称此种特征为异步性。

4、虚拟:

    在操作系统中,虚拟指的是通过某种技术把一个物理实体映射为多个逻辑实体。用户程序使用逻辑实体、逻辑实体是用户感觉上有而实际不存在的的事务,例如分时系统中,虽然只有一个cpu,但在分时系统的管理下,每个终端用户都认为自己独占一台主机。此时,分时操作系统利用分时轮转策略把一台物理上的CPU虚拟为多台逻辑上的cpu,也可以把一台物理I/O设备虚拟为多台逻辑上的I.O设备,方法是用内存中的输入输出缓冲区来 虚拟物理设备,用户程序进行输入输出时,其实是在和缓冲区进行输入输出。

5、操作系统的体系结构:

    操作系统是一个大型的软件系统,有许多具有独立功能的程序模块构成,这些程序模块之间必然存在某种关系,即必然按照一定结构组成一个完整的操作系统。一般而言,操作系统有两种结构,层次结构和微内核结构。

(1)层次结构:

按照操作系统各模块和相互依存的关系,把系统中的模块分为若干个层次,任一层都建立在他下面一层的基础上,每一层仅使用其下层提供的服务。

    一个操作系统应划分多少层,各层出于什么位置都是层次结构系统设计的关键问题,没有固定的模式。一般原则是,接近用户应用的模块在上层,贴近硬件的驱动模块在下层。

    处于下层的程序模块往往成为操作系统的内核,这部分程序模块包括中断处理程序,各种设备驱动程序,运行频率较高的模块。为提高操作系统的执行效率,操作系统内核一般常驻内存。

(2)微内核结构:

    基本思想是把操作系统中的基本功能模块组织成为微内核,其他功能模块尽量放到核外,通过调用微内核来实现。微内核结构是对传统内核单的提炼,它具有如下优点:

简化内核代码维护工作

 机构灵活

 安全性高

 方便移植

原文地址:https://www.cnblogs.com/yjds/p/8597447.html