当前位置: 首页 > news >正文

2.1.1 操作系统之进程的定义、特征、组成、组织

1进程的定义

**程序的概念

在这里插入图片描述

  • 早期的计算机是单道处理系统,所以没有引入了进程的概念,计算机内存中也只能同时运行一个程序,当前运行的这个程序也会占有计算机所有的资源
  • 内存中存储的数据也就是这个程序的数据,不需要特别的去分辨是不是其他程序的数据
  • 所谓程序就是指令序列,是静态的

进程的概念

在这里插入图片描述

  • 因为引入了多道批技术,所以我们的内存中就不止一个程序的数据,而且也不是一个程序占有了所有的资源,这里就会涉及到资源的分配问题和找到相应程序的数据问题,所以引入了进程
  • 进程的引入,就是为了能让程序能够并发的执行

进程和程序的区别

  1. 程序的静态的,进程是动态的
  2. 进程有独立性,能并发的执行,程序不能并发的执行
  3. 二者无一一对应的关系,但是程序和进程有密切的关系,进程不能脱离具体程序而虚设,程序规定了相应的进程的要完成的动作
  4. 进程异步运行,会相互制约,程序不具备
  5. 组成不同,进程包含PCB和程序段和数据段 程序只包含数据段和程序段
  6. 程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源。进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源。
  7. 一个程序可以启动多个进程来共同完成。

进程的定义

在这里插入图片描述

  • 进程是程序的一次执行过程——动态性
  • 进程实体:程序段,数据段,PCB三个部分组成了进程实体。进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
  • PCB是进程存在的唯一标志,进程的创建实质就是创建PCB,撤销进程实质就是撤销进程的PCB

2进程的特征

在这里插入图片描述

  • 动态性的进程最基本的特征

3进程的组成

在这里插入图片描述

  • 程序段存储的就是程序运行的代码
  • 数据段存储的是程序在运行时候需要使用的,产生的运算数据,如全局变量,局部变量。宏定义的常量等
  • 其中最重要的部分就是PCB(程序控制块)
    • PCB中记录了操作系统所需的,用来描述进程的当前情况以及控制进程运行的全部信息
    • PCB的作用是使一个在多道程序环境下不能独立运行的程序,成为一个能够独立运行的基本单位,一个能与其他进程并发执行的进程
    • 也就是说OS是通过PCB来对并发执行的进程进行控制和管理的
    • 例如,当OS要调度某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;
      进程在执行过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB;
      当进程由于某种原因而暂停执行时,又须将器断点的处理机环境保存在PCB中
      可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,即系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。
      所以说,PCB是进程存在的唯一标志。

PCB的组成

在这里插入图片描述

  • 每个进程都有一个唯一的标识号,类似身份号码——PID
  • 进程归属哪一个用户——UID 主要是为了共享和保护服务的
  • 描述当前进程的状态——进程当前状态 作为CPU分配调度的依据
  • 进程的优先级——描述进程抢占处理机的优先级 优先级较高的可以优先获得处理机
  • 处理机的相关信息——当我们的进程状态的切换的时候,处理机的状态信息都必须保存在相应的PCB中,以便后期进程重新执行能够从断点继续执行

进程的组织

在这里插入图片描述

  • 因为系统中可能有很多个进程,所以需要对其进行有效的管理

线性方式

  • 将系统中的所有的PCB都组织在一张线性表中,将该表的首地址存放在内存的一个专用地址区域中,但是查找PCB的时候需要扫描整个表

链接方式

在这里插入图片描述

  • 将具有相同状态的进程的PCB分别通过PCB的链接字链接组成一个队列
  • 单CPU的计算机中,同一个时刻只会有一个进程处于运行态
  • 对于阻塞队列可以根据阻塞的事件不同分为不同的阻塞队列

索引方式

在这里插入图片描述

  • 根据进程的状态不同,建立几张索引表,把各个索引表的首地址记录在内存的专用单元,在每个索引表中,记录相应状态的某个PCB在PCB表中的位置

相关文章:

  • 一文了解数据结构
  • [LeetCode刷题笔记]4 - 寻找两个正序数组的中位数(归并 / 递归 / 二分查找)
  • 字符串的读入(char与string)
  • C++运算符重载函数
  • 图解操作系统-cpu cache
  • 软件测试怎么去介绍一个项目的测试流程?
  • Redis实战篇一 (短信登录)
  • SpringBoot使用在控制层切面注解配置的方式将日志存储在mysql
  • 二叉树小记
  • 使用SpringBoot整合国产数据库连接池Druid
  • Servlet的一些操作
  • 设计模式 1 - 单例模式:附全套 Git 简洁代码
  • 模板·初阶
  • 【MATLAB教程案例30】基于MATLAB的图像阴影检测和消除算法的实现
  • 字符串拼接