【JavaSE】进程是什么?

✍进程的概念

每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。

进程是操作系统对⼀个正在运行的程序的⼀种抽象,换言之,可以把进程看做程序的⼀次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

举例子来说,打开的csdn网站就是一个进程
打开任务管理器,可以看到计算机中的进程。
包括后台进程(计算机自动打开的,不需要你手动打开)
在这里插入图片描述
想要运行一个程序,就需要为程序分配资源。
所以说在操作系统内部,进程又是操作系统进行资源分配的基本单位。

在这里插入图片描述

✍进程存在的意义

进程主要是用来解决程序不能并发执行从而导致 CPU 利用率低下这个问题。

随着科技的发展,人们对计算机的需求也越来越大,同时对计算机性能的要求也越来越高。但事务的发展总是有所限制的。对于计算的CPU来说,现在的科技水平只能达到4nm的精度,这对于庞大的需求来说,确实是有些吃力,所以人们开始思考,当CPU的制造水平有了一定限制时,一个CPU解决不了的事情,我们可以交付给多个CPU来处理,也就是我们现在所谓的多核计算机。

使用多个核心来处理问题,当然要对这些核心进行管理规划,使这些核心可以并发执行程序。

这里的并发涵括:并发和并行
在后续会讲解到的。

✍进程在计算机中的存在形式

在操作系统中,通常用PCB(程序控制块 Program Control Block)这样的结构体来描述进程。
不同的操作系统的称呼不相同。

PCB中存储的很多的信息

在操作系统中,通常使用‘链表’这样的数据结构来使PCB串接起来。
有很多这样的链表存在于操作系统中。

  1. 任务管理器查看进程列表
    遍历链表的每个结点,并获取每个结点的信息。
  2. 创建新的进程(双击执行程序)
    进程创建出新的PCB结构体,形成新的结点并插入到链表中
  3. 删除进程(关闭程序)
    在链表中删除对应的PCB结点

PCB结构体中包含的内容

  1. pid – 进程唯一标识
    跟身份证一样,可以唯一的确定进程。
    同一个机器,同一时刻,进程id一定是不同的

如下,我打开了五个Typora程序,也就执行了五个Typorad的进程,可以看到他们五个的PID是各不相同的。
在这里插入图片描述

  1. 内存指针
    进程运行时,需要消耗一定的硬件资源,其中内存就是一个非常关键的资源!

一个程序在运行的时候,就会被从硬盘(xxx.exe)加载到内存中
加载这个程序的指令/依赖的数据

注意:这里的内存指针是一组指针
这一组指针告诉操作系统,要运行的指令都在内存的什么位置
也告诉系统,进程需要依赖的数据又存于什么位置
…等等
总之,内存指针是给操作系统知名下一步需要做什么

在这里插入图片描述

  1. 文件描述符表
    一个进程运行的时候,会操作一些文件。
    就通过一个类似于“顺序表”这样的数据结构,来记录这个进程打开了哪些文件

  2. 进程调度
    打开任务管理器可以看到,有100+的进程在执行
    而执行就需要消耗资源,而我们的计算机并没有那么多的核心(CPU)以供得每个进程分配到一个CPU,这时就需要并行+并发来解决资源的分配问题

在这里插入图片描述
一个核心,同一时刻,只能执行一个进程
(以我的计算机为例,我的计算机中拥有16个核心)
也就是说,同一时刻我的计算机最多可以同时执行16的进程
这叫做并行执行这是完全的同时执行

一个核心,不同时刻,可以执行不同进程
CPU把总的时间切割成小的片段,每个片段执行一个进程,每个片段成为“时间片”
由于时间片比较短,CPU切换进程的速度非常快,人感知不到
所以站在使用者的角度来看,这些进程就是“同时执行”的,本质上并不是同时的
这叫做并发执行

操作系统会按照并行和并发互相搭配,来执行一个进程。

总结:
并行,微观时间上,也是同时执行
并发,宏观时间上,是“同时执行”,微观时间上,是串联执行。但由于速度之快,人感知不到。

因此就将,并行和并发统称为“并发”

✍进程调度

PCB提供了几个属性,来支持进程调度

  1. 状态
    分为“就绪状态”和“阻塞状态”
    区别在于CPU调用时,是否可以立即执行

  2. 优先级
    我们知道调用进程时,需要为其分配资源
    但在分配资源时,并非是均等的分配
    例如在打游戏时,此时你打开的网页就不需要分得那么多的资源

  3. 上下文
    在上文中,我们提到“并发执行”,在执行过程中,会产生很多的“中间结果”,在进程切出于CPU之前,需要把这些“中间结果”(CPU的寄存器中的各种值),保存到PCB的上下文中。
    这个过程是将寄存器的数据存放到内存中,也就是我们平时所见的【存档】

当下一次CPU再次调度这个进程时,就要把之前的数据读取出来,放入寄存器中,也就是所谓的【读档】。
具体操作过程:有一个PC程序计数器,他会记录上一次执行到哪一个位置,在下一次执行时,就从这个位置继续执行。

  1. 记账信息
    基于优先级,我们可以知道每个进程分配的资源并不相同
    引入记账信息,我们可以记录每个进程所分配的资源
    进而后续对资源的分配做出调整。

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞

  • 63
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃南瓜的北瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值