操作系统 第三章 进程

第三章

3.1初识进程

进程(Process)

1.操作系统最核心的概念之一
2.操作系统要面对的最核心的管理对象
3.占用cpu资源和其他资源的实体

什么是进程?

1.一个正在计算机上执行中的程序
2.一个能分配给处理器执行的实体
3.一个具有一下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集
所以,进程是一个程序的一次动态执行过程。

进程重要性

1.用户的所有程序均通过进程的形式进行
2.操作系统给用户提供的各种服务也是以进程的形式进行
3.进程管理模块是操作系统最核心的一个模块

讨论:如果不引入进程,使用程序作为管理对象,可以么?

答:可以,但是使用程序作为管理对象会出现很多问题无法解决。如音乐播放器无法同时播放两首歌,无法实现并发。(答案并不唯一)

通过上述的讨论,可以明白操作系统需要引进进程,那么,为什么操作系统需要引入进程呢?

1.使用进程描述每一个程序的每一次动态执行。
2.通过进程实体来管理控制每一个程序的每一次执行过程。
3.引入子进程,让一个大的程序段可以并发,加快程序推进且提高CPU利用率。

引入子进程

程序为单位
进程为单位

并发运行的基本特征

1.异步特征
2.资源共享特征
3.相互制约特征
4.不可重现性特征

进程和程序的区别

程序: 完成一件事情的代码序列
进程: 一个程序的一次动态执行过程
> 程序是静态的,进程是动态的
> 程序只包含代码,进程包括要运行的代码、代码要处理的数据、运行过程中的状态参数等

进程和程序的关联

1.进程是操作系统为了管理控制程序的运行而加设的一个概念和尸体
2.程序不运行,就没有进程,一个进程是一个程序的一次执行过程。
3.一个程序可能对应多个进程。

作业、程序、进程

作业	
	用户提交给系统的一个计算任务
	批作业=程序+数据+作业控制说明书
	交互作业=程序+数据+交互命令
	作业是用于人机之间交互的一个概念
程序
	程序是作业的组成部分
进程
	进程对应程序的一次动态执行过程

3.2 进程与进程管理模块

进程的特征

1.动态特征:生命周期
2.并发特征:在一个时间段内都处于宏观的运行状态
3.独立特征:独立占有资源、独立参与cpu调度
4.异步特征:运行推进速度不可预知
5.结构特征:PCB+进程体

进程的组成

进程的组成

进程控制块PCB

主要内容

  • 进程标识
    1. 外部标识(也叫做进程的外部名)
      • 是进程的创建者提供的进程名字,通常为字符串组成
    2. 内部标识(也称作进程的内部名,简记Pid
      • 是系统为进程命名的一个代码,通常是一个整型数据
  • 调度信息
    1. 进程优先数,描述进程紧迫性的信息
    2. 进程状态信息,描述进程当前处于何种状态
    3. 其他调度信息(如进程在系统中等待的时间、已经在cpu上运行的时间、剩余的运行时间等)
  • 处理机信息(进程上下文)进程被中断时,该进程的CPU现场信息可以保存在他自己的PCB内,以便该进程重新获得CPU时可以从此处恢复现场信息,继续运行。
    1. 通用寄存器的内容:包括数据寄存器、段寄存器等
    2. 程序状态字PSW(Program Status Word)
    3. 程序计数器PC(Program Count)
    4. 进程的堆栈指针
  • 进程控制信息
    1. 程序代码和数据集所在的内存地址
    2. 资源清单,记载进程请求资源和已经占有资源的情况
    3. 同步和通信信息
    4. 外存地址
    5. 家族信息
    6. 链接指针

进程管理模块

  1. 进程控制
    • 创建新进程,撤销结束进程
    • 阻塞或者唤醒进程
    • 挂起或激活进程
    • 进程同步和进程互斥
    • 进程通信
  2. 进程调度
    • 根据进程当前状态决定哪个进程获得CPU,以及占用多长时间
    • 将cpu分给进程

3.3 进程状态转换

两状态进程模型

两状态
两状态轮转

进程的三种基本状态

1.运行状态(Running) -> 进程获得CPU并投入运行的一种状态
	单CPU系统中,每个瞬间最多只有一个进程
2.就绪状态(Ready) -> 进程尚未获得CPU使用权的一种状态
	进程已经拥有除CPU外其他全部所需资源,"万事俱备、只欠东风"
3.阻塞状态  ->  进程因某种要求得不到满足,只好等待,我们称之为运行"受阻"
	处于阻塞状态的进程是无权获得CPU的

三状态进程模型

两种挂起状态

将内存中的当前某个尚不能运行的进程调到外存上去,腾出来的空间接纳更多的进程。这一处理称作进程"挂起"(Suspend)
目的:
	挂起某某些暂时不能运行的进程,目的是腾出内存装入更多的进程,让CPU忙碌起来。
两种挂起状态:
	挂起就绪(S-Blocked)、挂起阻塞(S-Ready)

加入两个挂起的状态转换图
PCB队列结构

3.5 父进程和子进程

问题:进程什么时候被创建?

1.批作业调度
2.交互作业提交
3.系统提供服务
4.用户程序创建子进程

进程创建图

fork函数详解

  1. 函数原型 pid_t fork(void)
  2. 该函数包含于头文件unistd.h中
  3. 函数功能:
    1. 创建一个新的子进程,子进程会复制父进程的数据和堆栈空间,并继承父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录和资源限制等
  4. 函数返回值:
    1. 如果fork()调用成功,则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0
    2. 如果fork()调用失败则直接返回-1,失败原因有三种:
      1. 系统内存不足
      2. 进程表满(容量一般为200~400)
      3. 用户的子进程太多(一般不超过25个)

5.UNIX中,父进程通过系统调用fork()创建子进程,子进程继承父进程资源,父子进程各自独立。
父子进程各自拥有自己的PCB、内存用户区、临时资源等,各自独立参与CPU调度
fork运行

3.6 进程状态转换控制原语

原语类型

原语类型

何时调用阻塞原语?

  1. 当正在运行的进程需要等待某一时间而发生运行受阻时,它通过中断请求系统服务
  2. 系统按照进程的需求进行适当处理后,启动进程阻塞原语将该进程阻塞起来
  3. 引起进程阻塞的原因:
    1. 等待I/O
    2. 请求资源得不到满足
    3. 进程同步约束
    4. 服务进程无事可做

阻塞原语Block

何时调用唤醒原语?

  1. 当系统发生某一个事件时,正在等待该事件的进程需要立即被唤醒,由阻塞状态转为就绪状态
  2. 进程被唤醒的原因:
    1. 所等的I/O操作已完成
    2. 请求的资源得到了满足
    3. 进程同步约束已经撤销
    4. 服务进程收到新的任务

唤醒原语Wake_up

何时调用挂起原语?

  1. 当前内存空间紧缺,部分进程优先运行
  2. 应用户要求,将用户进程挂起
  3. 应父进程要求,将其子进程挂起
    挂起原语Suspend

何时调用激活原语?

  1. 有进程运行完毕,当前内存空间不紧张
  2. 应用户要求,将其进程激活
  3. 应父进程要求,将其子进程激活
  4. 或者进程自身设定的挂起周期已完成

激活原语Active

3.7 抢占式调度和非抢占式调度

按照调度方式划分抢占式调度和非抢占式调度

非抢占式调度

当前进程主动放弃处理机控制权,可能情况:
	1. 进程运行完毕退出
	2. 运行受阻
	3. 运行出错,非正常中止
	4. 遇到不可挽回的故障

抢占式调度

也称作剥夺式调度,一般用于有实时需求的系统

  1. 主要指在系统正常运转期间,如果由某种时间出现,系统将迫使正在运行的进程停下来,将CPU控制权交给其他进程
  2. 其思想源自对高紧迫性作业的响应

无优先级和有优先级

抢占式调度结果

有优先级抢占式调度

3.8 进程调度算法

进程调度

进程调度功能:
	从处于就绪状态的进程中,按照某种调度策略,选择一个进程切换个CPU,使其状态从就绪转为运行
调度方式:
	调度策略

进程调度算法

  1. FCFS
  2. SPF
  3. HPF
  4. HRF
  5. 最短剩余时间优先算法 SRT
  6. RR算法,轮转调度
    1. 应用于分时系统,目标是提高响应及时性
    2. 按照时间片轮转调度
      • 进程轮流使用CPU,各用一个时间片,时间片用完管理程序停止它的运行,并将它转入就绪队列尾部,调度下一个进程
    3. 进程失去CPU不是资源的,而是被系统剥夺的
      4.轮转算法的启动时机:
      1. 一个时间片运行结束
      2. 当前进程运行结束
      3. 正在运行的进程因运行受阻主动放弃了CPU控制权
        RR算法
      4. 时间片的选取(时间片的确定通常是以下几个原则):
        1. 进程道术较多时,q就选的小一点。反之,可以选的大一点
        2. 系统要求的响应时间比较苛刻的时候,q就选的小一些。反之,可以选的大一点
  7. 多队列调度算法
    1. 设置多个就绪队
    2. 就绪队优先级不同,优先级别高的队列优先调度
    3. 优先级高的队列为空时,再调度低优先级别队列
      多就绪队列
  8. 多级队列反馈调度算法(终端型用户满意、短的批处理作业用户满意、长的批处理作业用户满意)
    1. 设置n个队列Q1,Q2,Q3,...,Qn
    2. 记Qi的优先级别为Pi,有P1>P2>P3>...>Pn
    3. 记Qi的时间片为qi,有q1<q2<q3<...<qn
    4. 新建进程进入Q1队
    5. 只有Q1为空时,才调度Qi+1中的进程
    6. 进程p在Qi中被调度执行,若时间片qi已到但尚未结束,则进程p转为就绪状态进入Qi+1队,进程p在Qn中被调度执行,若时间片已到但尚未结束,则进程转为就绪状态仍进入Qn队

3.10 线程的引入

问题:线程是什么?

  1. 线程是现代操作系统引入的一种执行实体
  2. 线程称"轻型进程",进程的组成部分
  3. 进程是资源占有单位,线程只是CPU调度单位(也就是线程只是调度,没有单独占有的资源,共享进程的资源)

线程构造

问题:操作系统为什么要引入线程?

举个例子,刷锅、洗菜、切菜的过程,如果建立子进程,那么当进程切换的时候,是背着包袱切换的,每个进程的资源不一样,需要切换资源,读入读出。

进程

线程

posted @ 2020-04-20 08:52  FoolShao  阅读(449)  评论(0)    收藏  举报