博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程的概念、表示、调度状态和进程的控制
阅读量:4183 次
发布时间:2019-05-26

本文共 3399 字,大约阅读时间需要 11 分钟。

进程概念的引入

进程的概念:

  1. 进程是程序的一次执行;
  2. 进程是可以和别的计算器并发执行的计算;
  3. 可定义为一个数据结构及能在其上进行操作的一个程序;
  4. 一个程序及其数据在处理机上顺序执行时所发生的活动;
  5. 是程序在一个数据集合上的运行过程﹐是系统进行资源分配和调度的一个独立单位。
    综合定义为﹕可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的独立单位。

进程的表示和调度状态

进程的表示:通常由三部分组成

1.程序段:描述进程所要完成的功能,是进程执行时不可修改的部分

2.数据段:程序执行时所需要的数据和工作区,为一个进程专用,可修改
3.PCB:包含进程的描述信息和控制信息,是进程的动态特性的集中反应

PCB:进程控制块

PCB是进程存在的唯一标志,通常PCB包含以下几类信息:

1)进程描述信息

进程标识符PID:是进程的内部标识,用来唯一标识一个进程

进程名:进程的外部标识

2)处理器状态信息—现场信息

由处理器寄存器内容组成:

通用寄存器(8-32个)
指令计数器(下一条指令的地址)
状态寄存器(程序状态字PSW,如EFLAGS寄存器)

3)进程调度信息

当前状态:进程当前状态,为进程调度之用

优先级:进程需要处理的缓急程序标识
调度所需的其他信息:如等待时间,执行总时间
事件:阻塞原因

4)进程控制信息

程序和数据的地址:程序和数据 所在的内、外存地址

进程间同步和通信机制:需要的消息队列指针和信号量等
所需的和已分配的资源清单及使用情况:除CPU外的资源:文件、I/O设备
数据结构信息:进程可能需要有指向其他PCB的指针,父子进程关系及其他结构

进程与程序的区别

1.进程是动态的,程序是静态的。程序是有序代码的集合,进程是程序的执行。

2.进程是暂时的,程序是永久的。进程是一个状态变化的过程,程序可永久保存。
3.进程与程序的对应关系。通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
4.进程和程序的组成不同。进程的组成包括程序,数据和PCB。

进程的特征

1.结构性:由……组成

2.动态性:进程是进程实体的执行过程,由创建而产生,由调度而执行,因某时间而暂停,由撤销而消亡
3.并发行:多个进程可同时存在于内存中,并发执行
4.独立性:进程是独立获得资源和独立调度的基本单位
5.异步性:各进程都各自独立的不可预知的速度向前推进

进程的基本状态及其转换:三太模型和五态模型

进程控制块的组织方式

1.PCB表:

系统把所有PCB组织在一起,并把它们放在内存固定区域,就构成了PCB表。PCB表的大小决定了系统中最多可同时存放的进程个数,称为系统的并发度。

2.PCB表的组织方式

老师讲了两种常用的,在百度百科上看到有三种:1)线性表方式,2)索引表方式,3)链接表方式

1)线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况。
2)索引表方式:该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等,同一状态的进程归入一个index表(由index指向PCB)。

3)链接表方式:系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。

进程的控制

1、进程的创建

1)引起进程创建的事件?

a)用户登录:由OS为合法终端创建一个进程

b)作业调度:作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中
c)提供服务:用户提出服务请求,OS创建进程提供服务
d)应用请求:运行时进程因自己需要,由它自己创建子进程

2)进程图

进程图是用于描述一个进程的家族关系的有向树,子进程可以继承父进程的所有资源。

树型结构系统的优点:

a)资源分配严格:祖先拥有进程家族的所有资源,子进程可在祖先进程所拥有的资源中进程分配、使用和归还
b)进程控制灵活:可根据需要给予进程不同的控制权力,而且可根据需要创建多个子进程并行工作,协同完成任务
c)进程层次清晰,关系明确

3)进程如何创建

两种方式:

a)系统生成时就建立起一些系统进程:主要用于创建常驻内存的一些系统进程
b)经创建原语产生进程:主要用于创建非系统进程和用户进程

4)进程的创建过程

一旦发现了要创建进程的事件,OS便调用创建原语,按下面步骤创建进程:

a)分配一个唯一的进程标识符,并从PCB集合中申请一个空白的PCB
b)为新进程的程序、数据以及用户栈分配必要的内存空间。批作业和进程创建子进程时空间大小再提出创建进程请求中提供
c)初始化PCB,包括:1.初始化标识信息,将标识符和父进程的标识符填入新的PCB中; 2.初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;3.初始化处理机控制信息,设置进程的状态和优先级,通常是最低
d)设置相应链接,如将新进程插入就绪队列

2、进程的终止(撤销)

1)引起进程终止的事件

a)正常结束:进程运行完成遇到halt指令;分时系统用户退出登录

b)异常结束:此进程出错和故障,常见的有:
存储区越界、保护错(进程试图访问允许访问的资源,如写只读文件)、非法指令、特权指令错误(用户进程去执行只允许OS执行的命令)、运行超时、等待超时、算术运算错、I/O故障
c)外界干预:指进程应外界的请求而终止运行,包括操作系统的干预、父进程请求、父进程终止时(此时OS也将它的所有子孙进程终止)

2)进程的终止过程

一旦发现了要终止进程的事件,OS便调用撤销原语,按下面步骤终止此进程:

a)根据被终止进程的标识符,从PCB集合中检索出此进程的PCB,读取此进程的状态
b)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被中止后应重新进行调度
c)若此进程有子孙进程,则将其所有子孙进程终止,以防它们失控
d)将被终止的进程所拥有的全部资源,或者还给其父进程,或者归还OS
e)将被终止的进程的PCB从所在队列或链表中移出,等待其他程序来搜集信息

3、进程状态的转换

1)进程的阻塞

处于运行态的进程,期待某一事件发生,当被等待的事件未发生时,进程调用阻塞原语将自己阻塞,如等待键盘输入。进程的阻塞是进程自身的一种主动行为。

阻塞原语执行的过程是:包括立即停止执行,PCB中的现行状态由“执行”改为“阻塞” 并将PCB插入相应阻塞队列,转调度程序进行重新调度,将处理机分配给另一就绪进程并进行切换,保留被阻塞进程的处理机状态(在PCB中的CPU现场保护区),再按新进程的PCB中的处理机状态设置CPU的环境。

2)进程的唤醒

当被阻塞进程所期待的事件出现时,由中断处理进程或其他产生该事件的进程,将等待该事件的进程唤醒,如I/O完成。

唤醒原语执行的过程是:把被阻塞的进程移出阻塞队列,将PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

!!!应当指出,block原语和wakeup原语是一对作用刚好相反的原语。故在某进程中调用了阻塞原语,则必须在与之相合作的另一进程中或其他相关的进程中安排唤醒原语,以能唤醒阻塞进程;否则,其将长久地处于阻塞状态,从而再无机会继续运行。

3)进程的挂起

当出现了引起进程挂起的事件时,比如用户进程请求将自己挂起,或父进程请求挂起某子进程,调用挂起原语将指定进程挂起。

挂起原语suspend( )的执行过程是:首先检查被挂起进程的状态并进行相应操作(执行态、活动就绪->静止就绪; 活动阻塞->静止阻塞)。为便于用户或父进程考查该进程的运行情况,把该进程的PCB复制到某指定的内存区域。最后,若被挂起的进程正在执行,则转向调度程序重新调度,从而将处理机重新分配。

4)进程的激活

当发生激活进程的事件时,如父进程或用户进程请求激活指定进程。

激活原语active( )激活过程:激活原语将进程从外存调入内存,并检查该进程的现行状态并进行相应操作,若是静止就绪则改为活动就绪;若是静止阻塞则改为活动阻塞。

如果采用的是抢占调度策略,则每当有新进程进入就绪队列时,检查是否要进行重新调度,即比较被激活进程与当前进程的优先级,决定处理机归属。

转载地址:http://rluoi.baihongyu.com/

你可能感兴趣的文章
1-4 beanstalkd生产类
查看>>
1-5 beanstalkd消费类
查看>>
1-6 综合案例-生产者消费者
查看>>
织梦cms模板保护技术
查看>>
laravel 课程学习系列一----------------第一章.composer快速入门
查看>>
laravel 课程学习系列二----------------第二章.PHP框架安装之Laravel
查看>>
laravel 课程学习系列三----------------第三章.Artisan控制台
查看>>
git版本控制管理系列-----第四章 GIT基本概念
查看>>
mysql 库级权限、表级权限授权
查看>>
TensorFlow中的单层神经网络
查看>>
在TensorFlow中编程
查看>>
用c实现一个压力测试工具
查看>>
圆周率计算公式
查看>>
排序算法之-选择排序
查看>>
排序算法之-基数排序
查看>>
查找算法之-二分查找
查看>>
scikit-learn
查看>>
原生java方法操作SQLite数据库
查看>>
sqlite 数据库驱动框架
查看>>
一个完整 cms 的表结构
查看>>