计算机系统平台---进程管理

进程管理



前言

本文主要介绍了进程和线程的主要内容


一、进程的引入

  • 多道程序技术是什么

多道程序系统是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行 (系统由一个程序转而运行另一个程序时需要使用中断机构中断正在运行的程序)两个或两个以上程序在计算机系统中同处于开始和结束之间的状态,这就称为多道程序系统

其技术运行的特征:多道、宏观上并行、微观上串行。

  • 在多道程序设计系统中,如何理解“内存中的多个程序的执行过程交织在一起,大家都在走走停停”这样一个现象?

在多道程序设计系统中,内存中存放多个程序,它们以交替的方式使用CPU。因此,从宏观上看,这些程序都开始了自己的工作(宏观上并行)。但由于CPU只有一个,在任何时刻CPU只能执行一个进程程序。所以这些进程程序的执行过程是交织在一起的。也就是说,从微观上看,每一个进程一会儿在向前走,一会儿又停步不前,处于一种“走走停停”的状态之中(微观上串行)。

二、进程的概念

1.为什么要引入进程

从理论角度看,是对正在运行的程序过程的抽象; 
从实现角度看,是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。

2.进程是什么

进程的定义:

进程是具有独立功能的、可并发执行的程序在一个数据集合上的运行过程是系统进行资源分配和调度的独立单位
进程和程序的同与不同之处:

进程与程序的联系在于:进程包含程序,程序是进程的子集。

不同之处在于:

  1. 进程是一个动态概念,而程序是一个静态概念。(进程存在于程序的执行过程之中,而程序是指令的有序集合
  2. 进程具有并发执行特性,而程序没有。(进程是一个可以独立调度并能与其他进程并发执行的单位,而程序仅代表一组语句的集合
  3. 进程和程序之间存在多对多的联系(程序:进程的1:n联系「一个程序中可以多次使用创建进程的系统调用函数在程序执行后创建多个进程。一个程序的多次运行分别对应不同的进程。」进程:程序的1:n联系「一个进程可以通过执行某个指定程序来与不同程序进行关联
  4. 程序「静止(被动)实体在外存」                       进程「活动实体在内存
  5. 进程是具有结构的(每个进程建立一个进程控制块(PCB),进程是由程序、数据、进程控制块三部分构成)

进程是执行中的程序

3.进程控制块(PCB)

PCB:系统用它记录进程外部特征,描述进程的运动变化过程

PCB是进程管理和控制的最重要的数据结构,在创建进程时,建立PCB,伴随进程一生,直到进程撤销而撤销。

PCB是系统感知进程的唯一标志,进程与PCB是一一对应的

PCB常被系统访问,如:调度程序、资源分配程序、中断处理程序等,所以PCB应常驻内存

一个进程只能有唯一的进程控制块(PCB),不可与其他进程共用一个进程控制块  

操作系统根据进程控制块(PCB)控制管理进程,它是进程存在的标志。

PCB中的信息:

  • 进程标识符信息 

内部标识符:目的在于方便系统使用。

外部标识符:用户访问进程使用。

  • 处理机状态信息---由处理机各种寄存器中内容所组成。 

通用寄存器:用于暂存信息

指令计数器PC:存放要访问的下一条指令地址

程序状态字PSW:含有状态信息,如条件码、执行方式

用户栈指针:每个进程都有一个或多个与之相关的系统栈,用于存放过程和系统调用参数以及调用地址。 

  • 进程调度信息---与进程调度和进程对换相关的信息

进程状态

进程优先级

进程调度所需的其他信息

事件:指进程由执行状态转化为堵塞状态所等待发生的事件,即堵塞原因。

  • 进程控制信息 

程序和数据的地址

进程同步和通信机制

资源清单

链接指针 :给出本进程所在队列的下一个进程的PCB首地址

进程的上下文切换:进程的并发执行需要PCB保存和恢复现场

PCB的组织方式:

  • 线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况,不适合频繁的进程调度。
  • 索引表方式(索引方式):该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等。其中进程阻塞可能由于I/O请求、申请缓冲区失败、等待解锁、获取数据失败等原因造成,将其组成一张表忽略了进程的优先级,不利于进程的唤醒。
  • 链接表方式(链接方式):系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。

 ps:PCB中没有记录兄弟进程信息,一个进程被创建好之后放入就绪队列末尾,而不是等待队列。

4.进程的创建

进程在执行过程中可能创建多个新的进程。创建进程称为父进程,而新的进程称为子进程。每个新进程可以再创建其他进程,从而形成进程树。

大多数的操作系统(包括 UNIX、Linux 和 Windows)对进程的识别采用的是唯一的进程标识符(pid),pid 通常是一个整数值。系统内的每个进程都有一个唯一 pid,它可以用作索引,以便访问内核中的进程的各种属性。 


一般来说,当一个进程创建子进程时,该子进程需要一定的资源(CPU 时间、内存、文件、I/O 设备等)来完成任务。子进程可以从操作系统那里直接获得资源,也可以只从父进程那里获得资源子集。父进程可能要在子进程之间分配资源或共享资源(如内存或文件)。限制子进程只能使用父进程的资源,可以防止创建过多进程,导致系统超载。

除了提供各种物理和逻辑资源外,父进程也可能向子进程传递初始化数据(或输入)。例如,假设有一个进程,其功能是在终端屏幕上显示文件如 image.jpg 的状态。当该进程被创建时,它会从父进程处得到输入,即文件名称 image.jpg。通过这个名称,它会打开文件,进而写出内容。它也可以得到输出设备名称。另外,有的操作系统会向子进程传递资源。对于这种系统,新进程可得到两个打开文件,即 image.jpg 和终端设备,并且可以在这两者之间进行数据传输。

当进程创建新进程时,可有两种执行可能:

  1. 父进程与子进程并发执行。
  2. 父进程等待,直到某个或全部子进程执行完。


新进程的地址空间也有两种可能:

  1. 子进程是父进程的复制品(它具有与父进程同样的程序和数据)。
  2. 子进程加载另一个新程序。

 

5.进程的三大状态

  • 就绪状态:进程已获得除处理器cpu外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。 
  • 运行状态:进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以 执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。 
  • 阻塞状态:由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生 前即使把处理机分配给该进程,也无法运行。

进程调度:为提高cpu利用率,操作系统将处于就绪状态的进程排成一队,当cpu空闲出来时,操作系统就在就绪队列中取出一个进程使其运行。

进程堵塞:处于堵塞状态的进程被拍成一队。当一个正执行的进程需要等待I/O操作时,操作系统就把cpu分给就绪队列的某个进程,让刚才执行的进程到堵塞队列中去排队。

程序唤醒:当某个I/O操作完成后,操作系统就从堵塞队列中查找等待这个设备的进程,将其从堵塞队列取出,让他到就绪队列排队等待cpu的运行。 

 ps:某进程在运行过程里,需要等待从磁盘读入数据,此时该进程的状态将从运行变为堵塞。

从磁盘读入数据需要停止运行,放弃CPU,所以是从运行变为堵塞。

6.进程的分时机制

为每个进程分配一段连续可占用的CPU的时间,称之为时间片

时间片用完,尽管事没做完,也不能再继续运行了,而是到就绪队列去排队,并把CPU分给就绪队列的第一个进程,让他接着从上次停下来的地方继续执行。 

 7.进程的终止/退出

  • 正常结束
  1. 执行完最后一条语句,自动结束
  2. 用户从系统注销
  3. 用户退出应用程序 
  • 异常结束 
  1. 越界错误
  2. 非法指令
  3. 运行超时
  4. 等待超时
  5. I/O故障
  6. 算数运算错误
  • 外界干预 
  1. 操作员/操作系统干预
  2. 父进程请求
  3. 父进程终止 

父进程终止子进程的原因有很多,如:

  1. 子进程使用了超过它所分配的资源。(为判定是否发生这种情况,父进程应有一个机制,以检查子进程的状态)。
  2. 分配给子进程的任务,不再需要。
  3. 父进程正在退出,而且操作系统不允许无父进程的子进程继续执行。                                  

有些系统不允许子进程在父进程已终止的情况下存在。对于这类系统,如果一个进程终止(正常或不正常),那么它的所有子进程也应终止。这种现象,称为级联终止,通常由操作系统来启动。 

ps:在一个单核系统,某一时刻处于运行态的进程只有一个,因为只有一个CPU

 8.进程挂起状态

挂起状态引入的原因:

  1. 用户的请求:可能是在程序运行期间发现了可疑的问题,需要暂停进程。
  2. 父进程的请求:考察,协调,或修改子进程。
  3. 操作系统的需要:对运行中资源的使用情况进行检查和记账。
  4. 负载调节的需要:有一些实时的任务非常重要,需要得到充足的内存空间,这个时候我们需要把非实时的任务进行挂起,优先使得实时任务执行。
  5. 定时任务:一个进程可能会周期性的执行某个任务,那么在一次执行完毕后挂起而不是阻塞,这样可以节省内存。
  6. 安全:系统有时可能会出现故障或者某些功能受到破坏,这是就需要将系统中正在进行的进程进行挂起,当系统故障消除以后,对进程的状态进行恢复。

进程状态的转化:

 引入了两种挂起状态的类型,即就绪挂起状态阻塞挂起状态。它们的区别就是就绪挂起状态其实还是在内存中的,而后者是在外存中的。接下来我们说一说新加入的几个状态转化的步骤:

  1. 运行状态->就绪挂起状态:这里发生在客户在程序正在运行是直接挂起程序。注意这里的箭头是单向的,所以在就绪挂起状态结束以后实际上是执行激活步骤,进入就绪状态,等待处理机调度。
  2. 阻塞状态->阻塞挂起状态:当内存空间比较紧缺的时候,如果有存在在内存中的,而且是处于阻塞状态的进程,那么就让他更需要内存的程序占用内存,自己进入阻塞挂起状态,PCB等数据存入外存。因为现在这个进程也不能进入就绪状态,这个程序在内存中是没有什么作用的。
  3. 阻塞挂起状态->就绪挂起状态:当阻塞状态等待的I/O事件或其他事件到来的时候状态发生改变。
  4. 就绪挂起状态->就绪状态:如果内存中没有就绪态进程,操作系统需要调入一个进程继续执行。此外,当处于就绪/挂起状态的进程比处于就绪态的任何进程的优先级都要高时,也可以进行这种转换。这种情况的产生是由于操作系统设计者规定,调入高优先级的进程比减少交换量更重要。
  5. 就绪状态->就绪挂起状态:通常,操作系统更倾向于挂起阻塞态进程而不是就绪态进程,因为就绪态进程可以立即执行,而阻塞态进程占用了内存空间但不能执行。但如果释放内存以得到足够空间的唯一方法是挂起一个就绪态进程,那么这种转换也是必需的。并且,如果操作系统确信高优先级的阻塞态进程很快就会就绪,那么它可能选择挂起一个低优先级的就绪态进程,而不是一个高优先级的阻塞态进程。

9.进程调度

进程调度的功能:按照某种算法将处理机动态的分配给某一就绪程序 (处理机调度)

处理机调度:从就绪队列中按照一定的算法选择一个进程将处理机分配给它运行,以实现进程的并发执行。

  1. 选择占有处理机的进程
  2. 进行进程上下文切换(保存在PCB中)

 进程调度队列:

  1. 作业队列:在系统中所有进程的集合
  2. 就绪队列:在主内存里就绪并等待执行的所有进程的集合
  3. 设备队列:等待某一I/O设备的进程队列

调度:在各种队列之间进程的迁移 

长程调度:(作业调度)---选择可以进入就绪队列的进程

短程调度:(CPU调度)---选择可被下一个执行并分配CPU的进程

中程调度:为缓和内存紧张的问题,将内存中处于堵塞状态的进程换至外存上(挂起),降低多道程序的度。当这些程序重新具备运行条件的时候,再从外存调入内存。

调度准则

  1. 最大的CPU利用率:使CPU尽可能的忙碌
  2. 最大的吞吐量:单位时间内运行完的进程数
  3. 最短的周转时间:进程从提交到运行结束的全部时间
  4. 最短的等待时间:进程在就绪队列中等待调度的时间片总和
  5. 最短的响应时间:从进程提出请求到首次被响应的时间段

最短处理机采用SJF算法原因在于:

  1. 采用SJF有利于系统减少平均周转时间, 提高系统吞吐量
  2. 一般情况下SJF比FIFO调度算法更高效,但实现会稍微困难
  3. 如果作业的到来顺序及运行时间不合理,会出现饥饿现象

调度方式:

  1. 非抢占方式(一旦分配处理机便一直运行下去,直到堵塞;有可能导致系统性能恶化「不能立即执行紧急任务、后到的短进程周转时间增加」)
  2.  剥夺方式:(1.优先权 2.短进程优先 3.时间片)

进程切换:

  1. 保存上下文:程序计数器(PC)、状态寄存器
  2. 恢复上下文:对要执行的进程,恢复上次被切换下来的环境
  3.  上下文切换:保护和恢复现场的过程、会产生时间和空间上的开销

ps:“可抢占”和“不可抢占”相比,“可抢占”的优先级调度算法开销大,因为可抢占需要保证处理机上运行的事优先级最高的进程,这样,当处理机正在运行某个进程时,很可能会被其他优先级更高的进程抢占,和不可抢占相比,前者调度次数会更加频繁,而每一次调度都会引起保护现场、恢复现场的工作,所以“可抢占”的优先级调度算法开销更大。

时间片轮转算法(RR): 定时发出中断,按照先入先出的原则轮流调度(分时系统)

一般来说RR平均周转时间比SJF要长,但响应时间要短一些

10.并行与并发

并行是并发的真子集

并发的关键是:需要有处理多个任务的能力,但不一定要同时

并行的关键是:要有同时处理多个任务的能力

ps:并行性是指两个或多个事件在同一时刻发生。

11.优先级调度算法

静态优先级:静态优先级是在创建进程时确定的,在进程的整个运行期间保持不变。优先级是利用某一范围内的一个整数来表示的,例如0~255中的某一整数,把该整数称为优先数。

动态优先级:动态优先级是指在创建进程之初,先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变,以便获得更好的调度性能。 

改变优先级的因素:

  1. 进程的等待时间
  2. 资源使用情况
  3. 已使用处理机的时间

 12.线程

1.线程的引入

进程是可拥有资源的独立单位,又是一个可以独立调度和分派的基本单位。为使得程序能够并发执行,系统还必须执行以下操作:

  1. 创建进程。分配各种资源,建立PCB
  2. 撤销进程。对资源回收,撤销PCB
  3. 进程切换。保留处理机环境,设置新处理机环境

系统需要交付较大时空开销,限制了并发程度(进程数目不可过多,切换频率不可过高)

----------------------可否将进程的两个属性分开进行处理?----------------------------- 

                               引入线程以小的开销来提高进程内的并发程度。

2. 线程

线程是进程的一个实体,是被系统独立调度和分派的基本单位

  1. 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如:程序计数器、寄存器和栈),但它可与同属一个进程的其他线程共享进程所拥有的全部资源。
  2. 一个线程可以创建和撤销另外一个线程。
  3. 同一进程的多个线程之间可以并发执行。

引入线程的好处: 

  1. 创建一个新线程花费时间少
  2. 两个线程切换花费时间少
  3. 线程之间相互通信无需调用内核,信息传送更快
  4. 线程可以独立执行,充分发挥处理机和外围设备并行工作的能力

3.线程和进程的比较

  1. 1.调度:同一进程里,线程的切换不会引起进程切换

  2. 2.并发性:一个进程的多个线程可以并发执行

  3. 3.拥有资源:线程可以访问其隶属进程的资源

  4. 4.系统开销:线程切换只保存少量寄存器的内容,不涉及存储器管理

  5. ps:线程之间没有独立的主存空间,不涉及寄存器管理 

总结

祝大家520快乐!

开开心心学进程!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值