进程的调度

在今天浅学习完进程的一些些知识后,想先稍总结一下。

进程是什么

在了解进程前,我们先要知道可执行文件进程的区别。

进程相当于一个个应用,而我们点开的图标或者.exe文件什么的,都只是可执行文件而已,不算真正的程序。

  • 可执行文件:可执行文件是存储在硬盘中的,我们可以当成其是静态的,当点击后,会在内存中加载,从而形成进程
  • 进程:也就是程序/应用本体,可以当其是动态的。

当我们点开可执行文件时就会把关键信息加载到内训中,并开始运行里面的代码,从而形成进程。

为什么要进程调度

进程相当于是一个个应用程序,而运行这些进程需要我们用到内存,我们的内存往往不是太大,所以就需要电脑来进行“排队”,让每个进程合理地运行。为了调度进程,我们需要对进程进行管理。


管理进程

为了管理这些一个个的进程,我们需要做到以下两点:

  1. 将每个进程统一形式化
  2. 将每个进程给串联起来

我们先需要将这一个个进程给统一形式描述起来,提到统一形式,我们就可以想到c语言中的结构体,Java语言中的类。结构体中可以存储多个特征,而串联起来我们可以用到数据结构。

进程管理是操作系统内核中的一个功能。

PCB(进程控制块)

PCB其本质就是一个结构体,就是用于存储进程的特征信息的,而一个个PCB在操作系统中被双向链表链接了起来。

进程持有的系统资源

进程持有的系统资源有两个:内存指针、文件描述表。

  • 内存指针:进程在内存中需要运行一些代码和全局变量,而标记这些位置的,就是内存指针。
    内存指针描述了哪些是指令,哪些是数据。
  • 文件描述表:文件描述表的本质其实就是顺序表,在进程中每表述一个文件,就会在文件描述表中加入该元素,对应的数组下标就是“文件描述符”。

内存指针和文件描述表共同描述了进程拥有哪些系统资源,所以我们也可以认为进程是操作系统中“资源分配”的基本单位


进程的调度

并发式执行:并发式调度指的就是在一个CPU的核心上若同时有多个进程在,需要我们进行运行,那么就会像工厂一样,先读取一些进程的部分指令,如何在要解析这部分指令的同时,又开始读取另一些进程的指令,然后就这么一直反复,知道进程运行完了或结束了。这中间就和“时钟周期”相关知识有关系了.由于我们的CPU一般都有几亿Hz的主频,也就是相当于有几亿个时钟周期,所以我们的轮转速度是非常快的,也就是在遍历读取每个进程的部分指令然后进入到下一轮的时间我们人类几乎是感受不出来的。并发式执行的核心是“时间片轮转”

并行式执行:相当于将CPU上有多个核心,然后我们将一个进程分为了几部分,分别在多个核心上完成。

进程的属性

进程的属性我们浅分为下面几种:进程的优先级、进程的状态、进程的记账信息、进程的上下文。其中一些属性听名字我们就可以知道其作用,下面抽几个个别的来解释:

进程的状态

进程的状态其实有很多种,其中最典型的就是就绪状态和阻塞状态。

就绪状态:就绪状态就是进程准备就绪,随时都可以在CPU上面执行。

阻塞状态:阻塞状态即为必须某个进程等某个任务完成后,该进程才能上CPU,不然没法继续进行。

进程的记账信息

当我们安排进程的时候,并不是所有进程的执行时间每一轮过后都是一样的,我们需要通过这个记账信息来分辨,如果某个进程在CPU中发现执行时间过少,那么就会适当的调整政策。

进程的上下文

我们时常会有进程进行到一半的时候就换成下一个进程执行了,而过一些时间之后这个进程还要回来继续完成,那么我们就需要到该进程上一次执行的位置继续往下执行。

对于进程来说,上下文指的就是CPU中一堆寄存器的值,每当我们要切出该进程时,CPU就会将寄存器中的状态输入到PCB中,等到下一次该进程到达CPU的时候,CPU就会继续把PCB中的上下文读取出来,回复到CPU的寄存器中。


内存的虚拟地址空间

我们都知道计算机处理信息都是在CPU上处理的,进程也是在CPU上执行的,而我们要执行进程,就需要用到内存资源,我们要找到每个进程运行时用的那块内存空间,就需要用到内存指针(因为操作系统是由c语言来完成的),而找到内存空间就需要对指针解引用。

我们都知道,指针解引用其实是一个相对于较危险的操作,万一我们在解一个指针前该指针就被变成野指针了,那么就很有可能对不该操作的内存位置继续操作,导致系统崩溃。

为了防止上述事件的发生,我们就需要使用到内存的虚拟地址空间。

每个进程都会有对应的虚拟地址空间,当我们要通过该虚拟地址空间来找到其真正在内存空间中的位置的时候,就需要经过一个MMU硬件设备,该设备是集成在CPU中的。

当我们的MMU检测到要访问的不是正确的,我们该访问的地址后,会直接发出信号给CPU,使该进程中止,防止对电脑做出伤害。

有了虚拟地址后,我们就拥有了“隔离性”这一特性,以便某进程崩溃后不会影响到其他进程。


进程间通信

由于进程间由“隔离性”这一特性,导致我们有一些进程之间想要相互操作,就变的麻烦了,于是在这里我们就用上了“进程间通信”。

操作系统提供的进程间通信方式有很多种,但其本质相同,弄一个多个进程之间都能访问到的公共资源,借助公共资源来进行通信。

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

  1. 管道
  2. 共享内存
  3. 文件
  4. 网络
  5. 信号量
  6. 信号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值