admin管理员组

文章数量:1570208

进程

一个程序,运行起来/跑起来,在操作系统中,就会出现一个对应的进程,
进程其实就是一个跑起来的应用程序 让程序跑起来就是可以双击快捷方式或者在开始菜单中 单击该选项 .
在我们的电脑上 可以打开任务管理器 可以看到很多进程:

我们可以把运行起来的可执行文件 称为进程 .
从上面的进程可以看出 有很多 除了自己点击运行的进程 外,还有很多系统自带的进程 这些进程对你的系统的稳定运行有着重要意义.

在我们的电脑中 有很多后缀为.exe可执行文件 ,如果 我们不去双击他 他就乖乖地躺在硬盘里 ,不会对我们的系统有任何影响.


根据上面的图片我们可以看出 ,要想让一个程序运行,就必须得给这个进程分配系统资源 包括 cpu,内存,硬盘,网络宽带,显卡等多个资源.
[重点] 进程是操作系统进行资源分配的基本单位

操作系统如何管理进程

在操作系统上,会包含有很多的进程,一旦 进程多了 ,就得考虑如何去管理?
就比如管钱 ,如果你现在没多少钱 ,也就不需要去管理 一旦钱多了 就得想一下 该如何去管理钱!

对于管理这个事情 ,操作系统一般是通过 先描述 ,再组织的方式进行管理. 先通过一些结构体 /类 把一个进程的核心信息 抽象提取出来并进行表示,再通过一定的数据结构,把多个这样的结构体/类的对象串起来,方便进行进一步的增删查改.

上面提的结构体主流的操作系统都是用C语言实现的,Windows也包含了一部分的C++,但是还是以C为主,Linux基本都是纯C实现 ,没有怎么涉及到C++ . windows和ios 都不是开源的 具体里面怎么实现我们也不太清楚 ,不像Linux那样是开源的. 在上面提到的数据结构一般都是用链表来连接多个结构体/类.

PCB

在操作系统中,通常会使用称为PCB这样的结构体来描述进程的.
PCB也就是进程控制块 但是在不同的操作系统上,不同的操作系统代码实际上写的名字是不一样的, 举个例子: 在Linux上的PCB 的实际名字叫
task_struct 操作系统 通常会使用链表这样的数据结构 把多个PCB串起来 .
`1. 比如我们在任务管理器中查看每个进程 其实就相当于在遍历链表中的每个结点 并且获取对应的信息.
2. 假如我们双击打开某个程序 就是创建一个新的进程 ,在底层就相当于 新的进程创建出一个对应的新的PCB,并且新增在链表中
3. 假如我们要退出一个应用程序 相当于销毁某个进程 ,这时底层就要把链表上对应的PCB那个结点删除掉.

PCB这个结构体包含了 很多信息 我们 来讲几个比较重要的!

pid(进程的id/标识符)

相当于进程的身份证号码 同一个机器 ,同一时刻,进程的id 一定是不同的.

内存指针

进程运行时,需要消耗一定的硬件资源 ,内存就是一个关键资源
一个程序在运行的时候,就会被操作系统从硬盘(***.exe)上加载到内存中,变成进程,内存指针就是会指明这个进程要执行的指令在内存的哪里

内存指针其实是一组指针 而不是一个 相当于指南 给进程提供要运行的指令在哪里 和进程依赖的数据在哪里.

文件描述符表

一个进程运行的时候,会操作一些文件比如说系统会自动打开标准输入 标准输出 标准错误这三个文件 会通过一个"顺序表"这样的数据结构,记录下当前这个进程,都打开了哪些文件.

进程调度是怎么进行的

这里是一个重点 所谓进程调度就是操作系统如何把CPU资源分配给各个进程.
在实际上,进程的数量是远远多于CPU数量的 现在该怎么解决这个问题呢? 这就需要进程调度来负责这个了.
分时复用
一个核心在同一时刻,只能运行一个进程 假如我们计算机有16个核心,同一时刻,则可以同时运行16个进程(完全是同时执行)
但是,一个核心在不同时刻不就可以执行不同的进程吗? 这一刻执行进程A,下一时刻,执行进程B 再下一刻 执行进程C 一次类推 .就像火车调度一样
同一个铁轨,同时也是只能跑一列火车 但同一个铁轨 这一时刻可以跑一个火车 下一会再跑另一个火车.
这就是所谓的并行执行.

下面还有一个并发执行 :
CPU会把总的执行时间 切换成若干个小的片段,每个片段执行一个进程,每个片段称为"时间片" 因为"时间片’比较短 CPU切换的速度极快 我们感知不到 站在人类的视角 就相当于若干个进程同时执行(在本质上不是同时执行).
在操作系统中 操作系统就会按照 并行 + 并发 互相搭配 运行所有的进程.

并行执行在微观上也是同时执行;
并发执行在宏观时间下是同时执行,微观时间上,是串行执行 只不过我们感知不到 .因此 我们往往会把并行和并发统称为"并发".

在实现进程的调度还有一些属性:

状态

这个状态就是为了描述当前该进程接下来应该怎么调度
如果是就绪状态: 随时可以去CPU上执行.
如果是阻塞状态:暂时不能去CPU上执行.

优先级

优先级说白了 就是先给谁分配时间 后给谁 分配时间 以及给谁分多分少的问题 .就比如你周末一天 你是先学习还是先打游戏 还有 给多少时间学习 多少时间打游戏 一个道理

记账信息

操作系统会统计每个进程都分别执行了多久,分别执行了 哪些指令
操作系统也会避免某一个进程一直吃不到CPU资源 就会进行类似的统计,给吃的少的进程,适当多分配一些资源

进程在调度出CPU的时候 会把CPU中所有的寄存器中的数据给保存到内存上 就是这次进程被调出CPU时 下次该进程进入CPU中运行的时候 就可以恢复到之前的状态,继续往下执行.

类似 我们玩游戏中的存档

进程的组成

进程实体一般由三部分组成: 程序段 数据段和进程控制块(PCB).其中,程序段包含了程序的代码,数据段包含了程序运行过程需要的数据,而进程控制块则是操作系统用来跟踪管理进程的信息结构.

进程的状态

进程的状态可以分为 三种状态: 运行状态、就绪状态和阻塞状态.
运行状态是指进程已经获取CPU并且正在执行;就绪状态是指进程已经准备好运行,但是还没获得CPU;阻塞状态是指进程正在等待某个事件的发生.

到这里 本篇文章的所有内容就结束了 谢谢大家的浏览 !!!

本文标签: 进程过程javaEE