第二章、进程的描述与控制(1)

 第二章、进程的描述与控制(1

传统的操作系统中,为了提高资源利用率和系统吞吐量,通常采用多道程序技术,将多个程序同时装入内存,并使之并发运行,作为资源分配和独立运行的基本单位都是进程。

 

一 、

 1.1 程序顺序执行的特征

  1.顺序性:每个操作都在下一个操作开始前完成

  2.封闭性:程序在封闭的环境下运行,即程序运行时独占全机资源,资源点额状态(处初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响;

  3.可再现性:程序执行时的环境和初始条件相同,当程序重复执行时,结果不变。

 

 1.2程序并发执行的特征

   进程之间的共享系统资源,使得这些并发执行的程序之间形成相互制约关系。

   1间断性:程序在并发执行时,由于在共享系统资源,以及为完成同一项任务而相互合作,致使并发执行程序之间形成了相互制约的关系。

   2.失去封闭性:系统资源被各个进程使用。 

   3.不可再现性:由于失去封闭性,导致结果不一致。

 

二、进程的定义和特征

      2.1进程的定义

        1.进程控制块(Process Control Block  :操作系统为进程分配的专门的数据结构

       作用:系统用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制和管理进程,所以PCB 是系统感知进程存在的唯一标志,进程与PCB是一一对应的。

      PCB记录的信息

  在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息是多少也不同,通常PCB应该包含下列信息:
    1.进程标示符  name: 每个进程都必须有唯一的标示符,可以是字符串,也可以是一个数字。

    2.进程的当前状态 status: 说明进程当前所处的状态,为了管理方便,系统设计时会将相同的状态的进程组成一个队列,比如就绪队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列,等待磁盘I/O完成队列等等。

3.进程相应的程序和数据地址,以便把PCB与其程序和数据联系起来,

4.进程资源清单。列出所拥有的处CPU外的资源记录,如拥有的I/O设备,打开的文件列表等。

5.进程优先级-priority:进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。

6.CPU现场保护区  cpustatus:当进程由于某种原因不同继续占用CPU时(如等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行。

7.进程同步与通信机制  用于实现进程间的互斥,同步和通信所需的信号量等。

8.进程所在队列PCB的链接字  根据进程所处的现行状态,进程相应的PCB参加到不同的队列中,PCB链接字指出该进程所在队列中下一个进程PCB的首地址。

9.与进程有关的其他信息,如进程记账信息,进程占用CPU的时间等。

 

       进程的概念:由程序段,相关数据段,和PCB三部分构成进程实体(称为进程映像)。

一般称为进程实体为进程。

        所谓创建进程就是创建进程实体中的PCB:而撤销进程,实质上是撤销进程的PCB.

从其他角度定义进程:

   1.进程是程序的一次执行。

   2.进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

   3.进程是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立的程序。

   在狭义的定义中:进程就是程序的执行过程。


      2.2进程的特征

      1.动态性:进程的实质是进程实体的执行过程

 

      2.并发性:多个进程实体同在内存中运行,并且在同一段时间内运行。

      3.独立性:指进程实体是一个能独立运行,独立获取资源,和独立接受调度的基本单位,当然进程实体必须有PCB

      4.异步性:进程实体按照各自的速度,独立的推进。

      5.结构特征:进程由程序,数据,进程控制块(PCB)三部分组成。

 

   2.2进程的三种基本状态

     进程在并发执行时,共享系统资源,在运行过程中可能处在不同的状态

      1.就绪(Ready)状态:处在该状态的进程放在就绪队列中,它们的特点就是已经获得了除CPU以外的系统资源,并且获得CPU后便可执行。

      2.执行(Running)状态:指进程获得了CPU,并且在内存中执行,在单处理机中,只有一个进程处在该状态,多处理机中可以有多个进程在执行。

      3.阻塞(Blocking)状态: 这是指正在执行的进程由于发生某事件(如I/O请求,申请缓存),锁阻塞,wait(等待资源),sleep,暂时无法继续执行的状态。也就是说进程的执行受到阻塞。然后出现进程的调度,OS把处理机分配给另一个就绪进程,让受阻进程处于暂停状态,这种暂停状态称为阻塞状态,有时也称为等待状态和封锁状态。通常系统将处于阻塞状态的进程排成一个队列,称该队列为阻塞队列。在系统中会有多个阻塞队列,减少系统开销。


2.3三种基本状态的转换图


 2.4进程的其他常见状态:  创建状态和终止状态

         进程的创建过程:

   1.进程申请一个空白PCB,向PCB填写用于控制和管理进程的信息。

   2.然后为该进程分配运行所需的资源。

   3.把该进程转入就绪状态,并插入就绪队列。

   当进程处在1,2的时候,称为进程的状态为创建状态。

引起创建进程的事件

 1.用户登陆

 2.作业调度(多道批处理)

 3.提供服务(用户提出请求)

 4.应用请求

 

作用:引入创建状态为了保证进程的调度必须在创建工作完成后进行,以确保对进程控制块操作的完整性,并增加管理的灵活性。

     终止状态(也叫死亡):

终止操作:
 1.等待操作系统进行善后处理。

 2将其PCB清零,并将PCB空间返还系统。

进程终止时,其子进程也将被终止

终止原因:

 1.自然结束

 2.出现无法克服的错误。

 3.被操作系统所终结

 4.被其他拥有终止权的进程所终结。


进程的五种基本状态和转换


 2.5进程中的挂起操作和进程状态转换

     挂起用于系统和用户方便分析进程。

 当挂起操作作用于某进程后,该进程将处于静止状态。与挂起操作对应的是激活操作。

 

   进程的挂起情况:

 1.当进程正在执行时,挂起操作使该进行暂停执行。

 2.当进程处于就绪状态时,该进程不接受系统调度。

 

2.6引入挂起操作后的三个进程状态的转换

说明: 挂起原语(suspend),激活原语(active

  1.活动就绪            静止就绪    : 使用suspend

  2.活动阻塞            静止阻塞    : 使用suspend

  3.静止就绪            活动就绪    : 使用active

  4.静止阻塞            活动阻塞    : 使用active

活动阻塞:进程处在没有被挂起的阻塞状态。

静止阻塞:进程处在被挂起的阻塞状态

活动就绪:进程处在没有被挂起的就绪状态

静止就绪:进程处在被挂起的就绪状态


2.7引入挂起操作后的5个进程状态的转换



2.7引入创建操作,挂起和终止状态的进程状态图

2.9进程控制

  包括

  进程的创建,进程的终止,进程的挂起与激活,进程的阻塞与唤醒

  进程控制一般是由OS的内核中的原语来实现的。

2.10进程的阻塞与唤醒:

阻塞原语:block ,唤醒原语:wakeup.

2.11引起进程阻塞和唤醒的事件

 1.向系统请求共享资源失败,

     2.等待某种操作的完成。(资源服务到位)

     3.新数据尚未到达。(进程通信)

     4.等待新任务的到达。(等待服务)

 

这里从网上搜集了两个问题加以巩固复习的内容:

 

  1.进程的阻塞和挂起的区别

1.挂起是一种主动行为,恢复也是主动的,阻塞是一种被动的行为,恢复不确定。挂起队列可以看成一个队列,而阻塞队列可以根据阻塞原因的不同分成多个阻塞队列。

2.阻塞就是任务释放CPU(相当于失去执行权),而挂起不会失去执行权。挂起用于程序测试中的条件中断,进行单步调试。否则挂起的线程将一直拥有系统资源,其他线程不能利用。

3.阻塞是由任务实现引起的,而挂起则是由其他原因对任务进行处理产生的。

4.任务调度是由系统实现的。任务调度时直接忽略挂起状态的任务。

 

 2.windows下某个用户进程陷入死循环,但是系统还可以执行其他任务,为什么?

   在某个进程进入死循环后,windows如何调度?

原理说明:

   CPU一次只能执行一条指令,但是windows是多进程的系统,也就是单个CPU能够运行多个进程,其中的原理就是使用一个多进程的CPU调度算法,原理介绍:某个时刻执行一个进程的一条指令,下一个时刻执行另一个进程的指令,因为CPU的执行速度很快,我们感觉不到而已。

   问题1

   Windows系统中有很多歌进程在执行,其中一个进程虽然进入死循环,但是它每次执行完一条指令后就要将CPU的控制权转交给其他进程,一个死循环并不会影响其他任务的执行,只是影响本进程的执行。

   问题2

   当进程进入死循环后,与windowsCPU调度算法有关,当一个进程死循环后,除非用户将该进程杀死,否则这个进程将会一直死循环。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CPP程序 #include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int super; int ntime; int rtime; struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB; sort() /* 建立对进程进行优先级排列函数*/ { PCB *first, *second; int insert=0; if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/ { p->link=ready; ready=p; } else /* 进程比较优先级,插入适当的位置中*/ { first=ready; second=first->link; while(second!=NULL) { if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/ { /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; } else /* 插入进程优先数最低,则插入到队尾*/ { first=first->link; second=second->link; } } if(insert==0) first->link=p; } } input() /* 建立进程控制块函数*/ { int i,num; //clrscr(); /*清屏*/ printf("\n 请输入进程数?"); scanf("%d",&num); for(i=0;iname); printf("\n 输入进程优先数:"); scanf("%d",&p->super); printf("\n 输入进程运行时间:"); scanf("%d",&p->ntime); printf("\n"); p->rtime=0;p->state='w'; p->link=NULL; sort(); /* 调用sort函数*/ } } int space() { int l=0; PCB* pr=ready; while(pr!=NULL) { l++; pr=pr->link; } return(l); } disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ { printf("\n qname \t state \t super \t ndtime \t runtime \n"); printf("|%s\t",pr->name); printf("|%c\t",pr->state); printf("|%d\t",pr->super); printf("|%d\t",pr->ntime); printf("|%d\t",pr->rtime); printf("\n"); } check() /* 建立进程查看函数 */ { PCB* pr; printf("\n **** 当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/ disp(p); pr=ready; printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/ while(pr!=NULL) { disp(pr); pr=pr->link; } } destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ { printf("\n 进程 [%s] 已完成.\n",p->name); free(p); } running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ { (p->rtime)++; if(p->rtime==p->ntime) destroy(); /* 调用destroy函数*/ else { (p->super)--; p->state='w'; sort(); /*调用sort函数*/ } } main() /*主函数*/ { int len,h=0; char ch; input(); len=space(); while((len!=0)&&(ready!=NULL)) { ch=getchar(); h++; printf("\n The execute number:%d \n",h); p=ready; ready=p->link; p->link=NULL; p->state='R'; check(); running(); printf("\n 按任一键继续......"); ch=getchar(); } printf("\n\n 进程已经完成.\n"); ch=getchar(); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值