JavaEE初级--------第一章 认识进程

系列文章目录

JavaEE初级--------第一章 认识进程

JavaEE初级

第一章 认识进程


前言


  • 计算的操作系统对于计算机可以说是十分重要的,操作系统是人与计算机之间的接口,也是计算机的灵魂。操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Linux系列、Android系列、ios系列、鸿蒙等。
  • 本质上是用来搞管理的软件:
    1、对下管理所有的硬件设备
    2、对上要给软件提供稳定的运行环境(进程的隔离性)

在这里插入图片描述

一、什么是进程?


  • 每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。
  • 进程(Process)/ 任务(Task)
    通俗来说,进程也可以理解成任务,其实就是一个已经跑起来的程序
    进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程。同时,在操作系统内部,进程是系统进行资源分配的基本单位

接下来,我们打开电脑上的任务管理器,可以发现进程的选项中显示了当前电脑上正在运行的进程,Windows系统开机就会有百八十个进程运行。

在这里插入图片描述
那么,我们不难就有疑惑了,这么多的进程计算机是怎么管理过来的呀。

二、进程怎么去管理?


每个进程要想执行,就都需要消耗一定的系统资源(硬件资源),那么,应该如何管理进程呢?
我们可以从两个角度去看待管理:

  1. 描述,使用类/结构体,把被管理的一个对象,各个属性都表示出来
  2. 组织,使用数据结构,把这些表示出来的对象,串起来(主要就是进行增删查改)
  • 系统中专门有一个结构体描述进程的属性:
    这个专门的结构体就是“进程控制块PCB一个进程可以使用一个或多个PCB来表示

  • 系统中会使用类似于双向链表这样的数据结构来组织多个PCB
    创建新的进程,就是创建PCB并且把PCB插入到链表中
    销毁进程,就是把PCB从链表上删除并释放
    展示进程列表,就相当于遍历链表的每个节点

  • 那么接下来,我们再讨论一下PCB中有哪些属性(PCB是一个非常庞大的结构体,包含很多属性),因为每一个PCB对象就代表着一个个实实在在运行着的程序,也就是线程。

    1. pid:进程的身份标识
      每个进程都会有一个pid,同一时刻,不同进程之间的pid是不同的
      在这里插入图片描述

    2. 内存指针(一组属性)
      每个进程在运行的时候,都会分配一定的内存空间。这个进程中的内存空间,具体是在哪里,以及分配的内存空间中有哪些部分,每个部分都是干啥的,有这么一组指针来进行区分。
      描述了进程持有的“内存资源”是啥样的

    3. 文件描述符表
      (类似于顺序表这样的数据结构,有很多元素)
      一个进程也需要涉及到硬盘操作,就需要按照文件的方式来操作,当前进程关联了哪些文件,都能操作哪些文件,就是通过文件描述符表。
      描述了进程持有的“硬盘资源”是啥样的

三、进程怎么去进行调度?

  • 进程持有的CPU资源如何体现?这就是进程的调度
    早期的操作系统,是一个“单任务操作系统”------同一时刻只有一个进程能运行,运行下一个进程,就会退出上一个。一个进程要执行,就需要CPU来执行指令,单核CPU,一个CPU核心,同一时刻,只能执行一个进程的指令。
    那么,计算机是如何同时执行很多应用的呢?
    其实,我们可以把一个CPU看做是一个网红打卡点,当进程排着队想上去执行时,就像游客排队上去拍照一样,试想一下,如果游客轮转速度足够快,拍下来会不会是大家的合照。
    在这里插入图片描述
    在这里插入图片描述
    看上面的CPU速度,一秒32亿条指令!!!足够很多进程轮转很多圈了,这里的调度实在太快了,人是感知不到这里的调度时间差的。
    实际上现代的CPU都是多核心的,有很多个“网红打卡点”。
    如果两个进程同时在两个CPU核心上,微观上也就是“同时执行”,这个情况称为“并行”。一个CPU核心上,通过快速轮转调度的方式,执行多个进程,宏观上是“同时执行”,微观上有先有后,这个情况称为“并发”。(这也就是分时复用)

  • PCB中引入了一些属性,用来支持操作系统实现进程调度的效果
    1、进程的状态
    就绪状态:进程正在CPU上执行或者虽然进程没在CPU上执行,但是时刻准备着去CPU执行。
    阻塞状态:某个进程,某种执行条件不具备,就导致这个进程暂时无法参与CPU的调度执行。

2、进程的优先级
操作系统在调度多个进程的时候并非是一视同仁,有些进程会给更高的优先级,来进行优先调度。

3、进程的上下文
进程从CPU离开之前,需要保护现场,把当前CPU中各种寄存器的状态,都记录到内存中,等到下次进程回到CPU上执行的时候,此时就可以把保存的这些寄存器的值,恢复回去,进程就会沿着上次执行到的位置,继续往后执行。
概括来说,就是存档读档

4、进程的记账信息
通过优先级机制,对不同的进程分配了不同权重的资源。记账信息会记录当前进程持有CPU的情况(在CPU上执行多久了),就可以作为操作系统调度进程的参考依据。

四、进程的虚拟地址空间

操作系统引入“虚拟地址空间”概念,不是直接分配物理内存,而是分配虚拟的内存空间。操作系统对于内存又进行了一层抽象
在这里插入图片描述
A和B看到的内存都是抽象之后的虚拟内存了。A操作某个内存中的数据就需要把操作的虚拟地址告诉系统,系统再把虚拟地址翻译成物理地址。这样,操作系统就可以进行检查/校验了,就需要看看当前这个虚拟地址是否能顺利完成翻译,如果给定的虚拟地址是非法的,是一个越界的访问,系统就能及时发现,并且对当前进程进行处理,就不会波及到其他进程。

五、进程间通信

1.通过文件
2、通过网络(socket)


总结

这一章我们了解了进程的一些基本概念,进程如何去进行管理的,以及进程调度的过程,还有进程的虚拟地址空间和进程间通信。这些前置知识的了解,对后续的线程的学习会起到至关重要的作用。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值