概述
进程描述与控制
主要的知识点
- 进程概念
- 进程状态
- 操作系统表示每个进程状态所需要数据结构、
- 操作系统如何使用这些数据结构控制进程的执行
首先一个关键的问题:为什么要引入进程?
—— 在现代的多道程序并发执行的操作系统种,多道程序并发的访问共享资源,所以这些程序共同决定了共享资源的访问状态,所以就会出现程序断断续续的执行的情况,这些都是程序执行的动态过程中发生的,所以用程序这个静态的概念来描述不能反映出并发执行过程中的这些特征,所以引入了进程这一概念来描述这个动态的过程。
—— 现在我们知道了进程是一个动态的过程,那么这里就给出进程的一般定义:进程就是进程实体运行的过程
进程的组成
—— 上面说了进程就是进程实体执行的过程,进程的主要部分也就是进程实体,进程实体包括三部分: PCB(进程控制块),程序段,数据段
——程序段就是进程执行所需要的指令集合,数据段就是指令执行时所需要的数据。前面两个概念比较好理解,这里重点介绍一下进程控制块。
—— 首先就是为什么需要进程控制跨?
这里可以从进程和程序的区别出发,因为程序是静态的,进程是动态的,所以程序不需要控制块来控制程序的执行,而进程是动态的,在执行过程中的变化是需要动态控制的,所以需要使用进程控制块来描述进程的行为。
—— 进程控制快的组成?
- 标识符
- 状态(5状态,7状态模型)
- 优先级
- 程序计数器
- 内存指针
- 上下文信息
- I/O状态信息
- 记账信息 —— 处理时间总和,使用总的时钟数,时间限制,记帐号等
进程的状态
四状态模型
- 创建
- 终止
- 运行
- 非运行
—— 在以前的最开时使用的就是四状态的进程模型,此时操作系统控制进程时仅使用一个队列,处理器需要执行新的任务时,操作系统就将队列首部的进程,由分派器分配给处理器执行,执行完成后,进程退出,然后重复上述过程。过程如下:
五状态模型
- 运行态
- 就绪态
- 阻塞态
- 新建
- 退出
—— 观察可以知道五状态模型是在四状态模型的基础上,将非运行态进一步划分为就绪态和阻塞态
—— 原因是: 根据对进程的进一步分析,可以知道,一部分非运行的进程,是处于非运行就绪等待执行,而另一部分是由于特殊原因导致的进程阻塞非运行,所以这里在处理器选取进程来执行时,如果只使用的单个队列的化,分派器不能够只队列中等待最久的进程(头部),相反,它应该扫描整个表,查找那些未被阻塞且在队列中等待时间最久的进程。
新建态和就绪态的理解
—— 为什么会有新建态?而不是创建了进程直接执行?
————原因:操作系统处于内存的考虑,限制了内存中进程的数量,将一个新的进程的执行分为了两个步骤,当操作系统处于新建状态时,操作系统将进程的部分信息(PCB)保存在内存的进程表中,但是进程执行的程序代码还未进入内存中,保存在磁盘中。当内存中进程数量不减少时,就将这个进程加载进入内存中,此时进程才处于就绪态。
两阶段退出
—— 当一个进程执行到了终点,或者是执行过程中发生了错误,那么进程就会进入退出态,处理器停止该进程的运行。其他需要该进程的信息的进程,就会开始提取该进程上的信息,当提取完成后,操作系统才会真正的将该进程完全的从系统中删除。
五层模型后的进程链表结构
七状态进程模型
- 新建
- 退出
- 运行
- 就绪
- 阻塞
- 阻塞/挂起
- 就绪/挂起
—— 七状态进程模型的引入,最直接的原因就是因为内存有限,为了更好的利用内存。因为进程只有被加载到了内存中才可以被执行,但是如果将所有就绪态和阻塞态的进程都放在内存中的化,就会占用很多的资源,当内存中没有处于就绪态的进程时,就将阻塞态的进程换出到磁盘的换出区中,将新的进程加载进入内存(新建进程,就绪/挂起进程)。
操作系统管理资源的控制结构
操作系统本质上就是一个资源管理的实体,对不同类型的资源提供了不同表,一般操作系统维护者4种不同类型的表:
- 内存
- I/O
- 文件
- 进程
进程表
—— 这里介绍的是进程,所以主要介绍进程表
——在控制进程之前,一个最基本的问题就是进程的物理表示是什么,前面说了进程的组成包括:PCB,程序段,数据段,但是你仔细想想有了这些东西就可以定位一个进程了嘛?显然不是的,还需要栈空间,每个进程都保存了一个先进先出的系统栈,用于保存过程调用的地址,系统调用的地址,。 —— PCB,程序段,数据段,栈 —— 进程映像(进程的物理表示)。
因为进程种的数据部分保存在内存中,部分保存在磁盘中,所以在进程表中维护了不同数据的指针,通过 数据的交叉组合成一个进程(为了提高内存利用率)。
进程控制块
—— 进程控制快中包含了控制进程的所有信息,主要包含三部分
- 进程标识信息
- 进程控制信息
- 处理器状态信息
—— 进程标识信息主要就是标识进程相关的一些信息: Process ID 进程id, 父进程标识符,用户标识符
—— 进程控制信息包括: 进程调度信息,状态信息,进程间通信信息等等
—— 处理器状态信息: 就是进程执行过程中的各类寄存器中的信息,主要是用于上下文保存和恢复
—— 上面介绍完了和进程相关的信息,这里用一张图表示一下,便于记忆
内存中的进程
进程控制
进程创建
—— 导致进程创建的原因:
* 新批处理作业的提交
* 用户登陆
* 现有进程创建
* 操作系统因为一项服务而创建
进程创建的步骤:
- 给新进程分配唯一的进程标识符
- 给进程分配空间
- 初始化进程控制块
- 设置正确的连接 —— 就是将进程连接到内存中的进程链表中
- 创建或者扩充其他数据结构
进程切换
定义:
—— 进程切换就是在某一时刻,正在运行的进程被中断,操作系统指定另一个进程为运行态,并把控制权交给该进程。
- 三种中介机制
- 中断
- 陷阱 —— 就是程序执行出现错误或者异常
- 系统调用 —— 操作系统为应用程序提供的一组服务函数。简单就是调用内核中的功能 在调用的时候,会把用户进程设置为阻塞态。
完整切换过程:
- 保存处理器的上下文信息
- 更行处于运行态的进程控制块,包括将进程的状态从一个状态修改为另一个状态
- 将进程控制块移动到相应的队列(就绪,阻塞,阻塞挂起,就绪挂起)
- 选择另一个进程执行
- 更新所选择进程的进程控制块的状态信心为运行态
- 更新内存管理的数据结构
- 恢复该进程最近一次换出时的上下文信息。
模式切换
—— 这里的模式指的是处理器的执行模式,一般操作系统会把处理器的执行模式分为两种: 用户态模式,系统态模式。不同的模式拥有执行指令的权力是不同的。
—— 使用两种模式的原因: 就是为了保护操作系统和重要的操作系统表不受用户程序的干扰
—— 在内核态下,软件具有对处理器以及所有的指令,寄存器和内存的控制能力。在操作系统中有一个专门的程序状态字(寄存器),来标识程序当前的执行模式
—— 系统调用 : 当用户出发系统调用时,就需要进行模式的转换,从用户态转换为内核态。执行过程: 应用程序把系统调用的标识符和参数放在一个预定义区域,然后通过一个特殊的指令中断用户程序的执行,并把控制权交给内核。
—— 操作系统内核的典型功能
-
进程管理
- 进程的创建和终止
- 进程切换
- 进程同步以及对进程间通信的支持
- 进程控制块的管理
-
内存管理
- 给进程分配地址空间
- 进程交换
- 段和页的管理
-
I/O管理
-
缓冲区管理
-
给进程分配I/O通道和设备
-
支持功能
-
中断处理
-
记账
-
监视
操作系统执行的三种方式
无进程的内核
—— 当操作系统产生一个系统调用时,该进程被中断。然后保存上下文信息,控制权交给内核,内核执行相关的调用。 这里操作系统自己有一个独立的内存区域和系统栈,用于监控过程调用和返回。
这里操作系统的代码被作为一个在独立模式下,独立的实体被执行
在用户程序中执行
—— 操作系统内核的代码被放在了进程的共享区域中,命名为内核栈,当产生一个系统调用时,进程不会被阻塞,只是进程切换执行模式为内核态,调用相关的API,然后返回继续执行。
基于进程的操作系统
—— 操作系统被当作一个进程,当产生系统调用时,用户进程需要进行进程切换到操作系统进程,然后由操作系统进程执行系统调用(这里不需要进行模式切换),这种模式广泛应用于现代的多CPU系统,给操作系统绑定一个独立的CPU,那么当用户程序执行的时候就不需要进行进程的切换,直接执行,提高效率。
知识点回顾
- 通常有那些事件会导致创建一个进程
- 什么是交换?目的是什么?
- 进程控制块的三类信息?
- 为什么需要两种模式
- 系统创建一个新进程执行的步骤?
- 中断和陷阱的区别?
- 模式切换和进程切换有什么区别?
最后
以上就是霸气自行车为你收集整理的操作系统——进程描述与控制进程描述与控制的全部内容,希望文章能够帮你解决操作系统——进程描述与控制进程描述与控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复