操作系统中进程的概念和调度的基本过程

操作系统中进程的概念和调度的基本过程

一、操作系统的前置知识

​ 操作系统应该是大家即熟悉又陌生的东西了,我们每天无时无刻都在使用着它们,例如手机上发送QQ和微信消息、逛淘宝、打电话;电脑上打游戏、刷哔哩哔哩、上网课等等,用的这些软件都不能脱离操作系统的支持和服务,都是在使用操作系统,例如电脑上的Windows、Linux、Mac,手机上的安卓、IOS、鸿蒙,这些系统为我们要使用的第三方软件提供运行环境。操作系统作为用户和计算机之间的接口,其对下要管理硬件设备,对上要给软件提供良好、稳定的运行环境,同时提供良好的用户界面,方便我们使用。但是通常我们对它的感知要小于对应用软件的。

在这里插入图片描述

计算机硬件:例如CPU、内存、硬盘、输入设备、输出设备。

驱动程序:指设备驱动程序,硬件设备提供的接口,操作系统通过此接口来控制硬件。

二、进程的概念

​ 什么是进程?通俗点来讲,一个正在运行的程序就是一个进程(进程也称为任务),我们可以在自己电脑上通过任务管理器很直观的看到正在运行的很多进程。

在这里插入图片描述在这里插入图片描述

以 .exe 后缀结尾的文件都是可执行程序,是能被操作系统直接运行的程序。

操作系统以进程的概念刻画了程序的状态和特征,并负责管理和调度进程。进程作为操作系统资源分配的基本单位,每个进程在执行都需要系统资源,例如CPU运行时间、内存空间和其他软件资源。

三、进程管理

那么操作系统是如何对进程管理的呢?其主要分为两个部分:描述 + 组织

1. 描述

主要是解释清楚进程具备哪些属性和特征,从实现角度看,操作系统使用结构体来描述进程属性(就是C语言中的结构体,操作系统基本上都是C/C++来写的),并为此结构体起了个特殊的名字,叫做PCB(进程控制块)

//C语言伪代码,描述PCB结构体
struct PCB {
    //PID进程的唯一标识
    //进程关联的程序信息,例如哪个程序,指向的内存空间区域
    //该进程使用的各个资源,例如文件资源
    //...
    //进程状态信息
};

PCB结构体里包含了一些进程的属性特征:

  1. PID 进程的身份标识符. (唯一的数字)。

在这里插入图片描述

  1. 内存指针,指向该进程所使用的内存区域,使用虚拟地址空间。

  2. 文件描述符表,硬盘上的文件和其他资源。

  3. 进程调度相关的核心属性:

    • 进程的基本状态:就绪、运行、阻塞。

      • 就绪态:当一个进程具备被运行的所有条件,就处于就绪态,等待操作系统分配CPU资源。

      • 运行态:正在CPU上运行的进程。

      • 阻塞态:当进程需要使用其他硬件资源,例如IO设备,就会陷入阻塞状态。

    • 进程的优先级:在操作系统内核中会根据某种调度算法来决定哪个进程先分配到CPU。

    • 进程的上下文:操作系统在进行进程切换时,需要先把当前进程执行的中间状态记录下来保存好,以便这个进程下次再被调度执行时可以恢复到上次执行的状态。换言之,就是存档和读档,上下文本质就是你存档的内容。具体实现就是将CPU中各个寄存器的值保存下来,等待再调度时恢复之前寄存器存储的值。

    • 记账信息:操作系统 统计每个进程使用CPU的时间和执行的指令数目,根据结果来调整下一阶段的调度策略。

​ 实际上进程的属性还有很多。

2. 组织

只有PCB还不够,还需要将其组织起来,例如使用双向链表结构(不是单纯的双向链表,节点之间还会存在其他关系)

image-20230127161902243
  • 创建一个进程,本质上就是创建一个PCB这样的结构体对象,把它插入到链表中

  • 销毁一个进程,本质上就是把链表上的PCB节点删除掉

任务管理器查看到进程列表,就是遍历这个PCB链表。

不同的操作系统,对PCB组织的结构会有所不同。

四、进程使用虚拟内存空间

前面说到PCB中包含内存指针,指向其占用的内存空间。实际上,这里的内存指针并不是直接指向物理内存地址而是虚拟内存地址

物理内存地址

什么是物理内存地址呢?首先得看看物理内存条是什么样子,如下图就是一个内存条,图中的黑色方块称为内存颗粒,其内部构造是一系列门电路,构成许多的存储单元,每个存储单元大小1byte,并从0开始编号依次累加,这些内存的编号就是物理空间地址。

在这里插入图片描述

内存条提供了一种随机访问机制,当访问任意内存地址的存储单元时所需要的时间都一样且速度极快,基于这一特点,让使用数组下标访问元素时,时间复杂度为O(1)。

假如直接将内存的物理空间按区域划分给不同的进程,当某个进程内部产生错误,越界访问了其他进程的内存空间,将会导致误修改了其他程序的代码。

在这里插入图片描述

虚拟内存地址

所以为了解决上述问题,我们可以把进程所使用的地址隔离开来,即让操作系统为每个进程分配独立的一套虚拟地址,人人都有,大家自己玩自己的地址就行,互不干涉。但是有个前提每个进程都不能访问物理地址,至于虚拟地址最终怎么落到物理内存里,对进程来说是透明的,操作系统已经把这些都安排的明明白白了。

在这里插入图片描述

操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。

如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲突了。

于是,这里就引出了两种地址的概念:

  • 我们程序所使用的内存地址叫做虚拟内存地址(Virtual Memory Address),
  • 实际存在硬件里面的空间地址叫物理内存地址(Physical Memory Address)。

操作系统引入了虚拟内存,进程持有的虚拟地址会通过CPU芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存,如下图所示:

在这里插入图片描述

对于操作系统具体如何管理虚拟地址与物理地址之间的关系,主要有两种方式,分别是内存分段和内存分页。这就属于操作系统内存管理的知识,所以只简单提一下。

五、进程间相互通信

上面解决了进程之间相互影响的问题,但是有时候,不同进程间需要相互通信,交换信息。操作系统为此在隔离性的基础上建立了进程通信机制。

目前,主流操作系统提供的进程通信机制有如下:

  1. 管道
  2. 共享内存
  3. 文件
  4. 网络
  5. 信号量
  6. 信号

针对进程间相互通信的知识,我们后面的章节会讲到。

不同进程间需要相互通信,交换信息。操作系统为此在隔离性的基础上建立了进程通信机制。

目前,主流操作系统提供的进程通信机制有如下:

  1. 管道
  2. 共享内存
  3. 文件
  4. 网络
  5. 信号量
  6. 信号

针对进程间相互通信的知识,我们后面的章节会讲到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值