操作系统之进程管理1

进程描述

进程的定义:程序的一次执行过程

  1. 程序与进程的区别
    (1) 程序是指令的集合,静态概念;进程是程序在处理机上的一次执
    行过程,动态概念。
    (2) 程序是长期存在的,进程有生命周期,有创建、活动、消亡。
    (3) 程序仅是指令的有序集合;而进程则由程序、数据和进程控制块
    组成。
    (4) 进程与程序之间不是一一对应的,即同一程序同时运行于若干不
    同的数据集合上,它将属于若干个不同的进程;而一个进程可以执行
    多个程序。

  2. 进程的特征
    (1)结构特征:进程由程序段,数据段以及进程控制块三部分组成,总成“进程映像”
    (2)动态性:由创建产生,由调度执行,由得不到资源而阻塞,由撤销而死亡,程序是静态的
    (3)并发性:只有建立了进程,才能执行并发
    (4)独立性:独立运行,独立获取资源
    (5)异步性:间断性

  3. 进程的状态:
    (1)三种基本状态:就绪状态,执行状态,阻塞状态

    在这里插入图片描述

  4. 进程控制块
    (1)操作系统中用于控制管理的数据结构
    (2)作用:进程存在的唯一标志;PCB( process control block)常驻内存
    (3)进程控制块中的信息:标志,处理机状态,进程调度信息,进程控制信息

进程控制

对系统中所有进程从创建、存在到消亡的全过程实施有效的管理和控制。具有创建新进程、对运行进程进行控制、撤销进程的能力。进程控制由OS系统的内核完成, 内核通过原语操作来实现。

  1. 处理机的两种状态:
  • 核心态——又称管态或系统态,使OS管理程序执行时机器所处的状态。具有较高特权,能执行一切指令,访问所有寄 存器和存储区。
  • 用户态——又称目态,是用户程序执行 时机器所处的状态。具有较低特权的执 行状态,只能执行规定的指令,访问指 定的寄存器和存储区。
  • 内核:基于硬件的第一次软件扩充,并常 驻内存。
  • 原语:由若干指令构成,用于完成一定功 能的一段程序。原语在执行期间不可分割, 所以原语操作具有原子性。(关中断下完成)
  • 常用的进程控制原语 : 创建、撤销 ;阻塞:执行→阻塞 ;唤醒:阻塞→就绪 ;挂起:活动→静止; 激活:静止→活动
  1. 进程创建:
    (1)子进程可继承父进程的资源,撤销时会归还,父撤销会撤销所有子进程
    (2)引起进程创建的事件:用户登录,作业调度,提供服务,应用请求
    (3)进程的创建过程(create原语):申请空白PCB(一个系统1的pcb是有限的) --> 为新进程分配资源 --> 初始化PCB --> 将新进程插入就绪队列

  2. 进程的撤销:
    (1)引起进程终止的事件:正常结束(Halt,lolgff),异常结束(Protect,error,overtime),外界干预(kill,父进程结束,请求)
    (2)进程终止的过程:检查进程状态 --> 执行态->终止且置调度标志为真 --> 有无子孙进程需终止 --> 归还资源给父进程或系统 --> 从PCB队列中移除PCB

  3. 阻塞和唤醒
    (1)引发事件:1. 请求系统服务而无法得到满足; 2.启动某种操作而需要同步时; 3.新数据尚未到达;4.无新工作可做
    (2)阻塞过程:是进程的自身一种主动行为。a.调用block原语 b. 停止执行,修改PCB入阻塞队列,并转调度。
    (3)唤醒过程:其他相关进程完成。a. wakeup原语 b.修改PCB,入就绪队列
    (4)挂起:由进程调用suspend原语完成,将该进程PCB移到指定区域,注意状态的改变有可能重新调度
    (5)激活:active原语(如在外存,调入内存,改变状态,根据情况看是否调度,如抢先和非抢先)

进程同步

同步:并发进程在执行次序上的协调,以达到有效的资源共享和互相合作,使程序执行有可再现性。

  1. 两种制约关系
    (1)资源共享关系(进程间接制约):需要互斥的访问临界资源
    (2)互相合作关系(进程直接制约)
  2. 临界资源
    一次只允许一个进程访问的资源,引起不可再现是因为临界资源没有互斥访问。
  3. 临界区:进程访问临界资源的那段代码

在这里插入图片描述

  1. 同步机制应遵循的准则
    (1)空闲让进,忙则等待
    (2)有限等待:应保证有限等待,不会产生死等
    (3)让权等待:不能进入临界区的执行进程应放弃CPU执行权

  2. 信号量机制
    (1)整形信号量:是一个整型量,通过2个原子操作wait(s)和signal(s)来访问。
    Wait(s) {while( s <= 0 ); s–;}
    Signal(s){s++; }
    信号量类型是特殊类型,只能做wait,signal操作,wait表示申请一个单位资源,signal表示释放一个单位资源(P,V 操作)
    PV操作有共享变量信号量存在,所以其程序是一个临界区。PV操作是 原子操作,执行时不可中断。信号量只能通过PV操作改变其值。
    1.互斥的模式——PV总是成对出现在同一进程中;
    2.同步的模式——PV总是成对出现在不同进程中;
    3.前驱关系——有多少前驱关系设置多少个信号量,初值为0;有多少 前驱做多少P操作,有多少后继结点做多少V操作,无前驱不做P操作
    (2)记录型信号量

在整型信号量机制中的wait操作,只要是信号量 S≤0, 就会不断地测试。因此,该机制并未遵循 “让权等待”的准则,而是使进程处于“忙等”的状 态。

解决方案:

typedef strut{ 
 		int value; 
 		strut process_control_block *list; 
 }semaphore;
list:为进程链表,用于链接所有等待该类资源进程。	
wait(semaphore *S) {  
		S->value--;
 		if (S->value <0) 
 			block (S->list) 
 }
signal(semaphore *S) { 
		S->value++
 		if (S->value<=0)
  			wakeup(S->list) 
  }

说明:
1.S->value>0时,表示系统中可用资源的数目。
2.当S->value<0时,S->value的绝对值表示阻塞进程的数目。
3.如果S->value的初值为1,表示只允许一个进程访问临界资源, 此时的信号量转化为互斥信号量

(3)AND型信号量

  • 特点:要么全分配,要么一个也不分配。
  • 当不用它时,有可能发生系统死锁。
  • 死锁:在无外力作用下的一种僵持状态。
Swait(s1,s2,…,sn) { 
	while(1) {
		 if (s1>=1& …&sn >=1) {
			 for(i=1;i<=n;i++) si--; break;
		} else {
		place the process in the waiting queue with the first si found  with si<1, 
		and set the program count of this process to the beginning of swait operation
		}
	 }
 }

 Ssignal(s1,s2,…,sn) {
 	 while(1) { 
 	 	for (i=1;i<=n;i++){ 
 	 		si++; 
 	 		remove all the process waiting in the queue associated with si into the ready queue
 	 	}
 	 } 
 }

(4)信号量集

  • 为提高效率而对AND信号的扩充。
  • 允许一次申请多种资源多个
Swait(S1, t1, d1, …, Sn, tn, dn){
	 while(1) {
	 	if(Si>=t1 & … &Sn>=tn ) 
	 		 for (i=1;i<=n;i++)  Si=Si-di;
	 	else{ 
	 		Place the executing process in the waiting queue of the first Si with Si <ti and set its program counter to the beginning of the Swait Operation. 
	 	} 
	 }
 } 
 
 Ssignal(S1, d1, …, Sn, dn){
 	 while(1) {
 	 	 for (i=1;i<=n;i++)  {
 	 	 	 Si =Si+di;
 	 	 	 Remove all the process waiting in the queue associated with Si into the ready queue
 	 	  }
 	  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值