[JavaEE]什么是进程?

一、计算机基本原理

1.1 什么是程序

程序是一组计算机能识别和执行的指令或命令的集合,程序能帮助计算机完成我们想要完成的工作。
程序存储在磁盘上,使用程序时,从磁盘到内存再到寄存器,最后被cpu执行。而让程序运行起来,就需要借助于操作系统了。

1.2 什么是操作系统

在当今市面上,常见的操作系统有Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等,虽然操作系统数量看起来很多,但本质却是一种东西。

1.2.1操作系统的定义

操作系统(Operation System, OS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。
操作系统层次图:

1.2.2操作系统的功能

操作系统作为计算机的资源管理者,能为我们提供哪些功能呢?
在这里插入图片描述

操作系统的两个基本功能
1.防止硬件被失控的应用程序滥用。
2. 为其它软件提供服务,分配其运行时所需的任何必要资源。

那么,操作系统是通过怎样的方式为应用程序分配运行时所需的资源的呢?

二. 什么是进程

2.1 进程的定义

操作系统最核心的概念就是进程
为什么要引入进程(PCB Process Control Block)

从理论角度上看,进程就是对正在运行的程序过程的抽象。
从实现角度上看,进程是一种实体,每一个实体都有自己的地址空间,地址空间中保存了要执行程序的文本区域(存储要执行的代码),数据区域(存储变量和进程使用的动态分配的内存),堆栈区域(存储使过程中调用的指令和动态变量)。

计算机内部要管理任何现实事物,都要将其抽象为一组有关联的,互为一体的数据,在Java语言中,我们可以用类或者对象来描述进程这一事物。

//以下为伪代码形式,方便了解
Class PCB{
 //进程的唯一标识 pid
 //数据区域
 //文本区域
 //堆栈区域
 }

每一个这样的对象。都是系统中运行的程序。

2.2 进程的特征

1.并发性:在计算机内存中,同时存在多个进程实体,这些进程在一段时间能够同时运行(同时存在,同时运行)。
如图所示:
在这里插入图片描述

2.动态性:进程的实质是程序在系统中的一次运行,是动态产生,动态消亡的。
一个未运行的.exe(可执行文件)可以近似看做一个静态进程,当我们不去运行它时,在系统内存中不会产生相对应的实体。

在这里插入图片描述
当我们双击运行时,.exe文件便在内存中产生了相对应的实体。
在这里插入图片描述
3.独立性
进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。

2.3 进程调度

2.3.1 进程的状态

1.操作系统创建进程时,进程处于创建态,cpu调度进行时,进程处于运行态,此时其它已创建等待cpu调度的进程属于就绪态,某些进程因为某些原因不能继续运行下去,此时处于阻塞状态
三种状态随着执行和条件的变化发生转换,如图所示:
在这里插入图片描述

2.3.2 进程优先级

进程间的调度不一定是“公平”的,系统按照不同的优先级调度进程的运行,分为0-15 级普通优先级16-31
级实时优先级
,高优先级先运行,只有当高优先级进程不运行时,才调用低优先级进程,进程优先级值越低,优先级越高。实时优先级和普通优先级的最大区别就在于,实时优先级不按照时间片轮转,先控制cpu的实时优先级进程不主动放弃cpu的控制权,同级或者低优先级的进程就无法运行。

2.3.3 进程的上下文

进程上下文:通俗来讲,就是一个进程在执行的时候,cpu的所有寄存器的值、进程的状态以及堆栈上的内容,当切换到另一个进程时,它需要保存当前进程的所有状态,即进程上下文,再次执行该进程时,能够恢复切换时的状态。

(此处仅粗略,深入了解请查询相关资料)。

2.3.4 进程记账信息

进程记账记录了每个进程占用cpu的时间量和少量的二进制数据,进程的记账信息是用来辅助系统对进程运行调度的,如果一个进程运行时间太短(此处的运行时间并不是指实际的时间,而是执行指令的条数)。

2.3.5 虚拟地址空间

我们知道进程是分布在内存中的,每个进程都会直接访问物理内存中的地址,如果不加以保护措施,进程的指针指向可能会导致越界访问,引起不必要的麻烦,所以我们必须对进程的内存地址进行限制。
页表
我们给每个进程划分出专门的空间,成为页表(页表并不是真实存在的,一种逻辑页表),通过页表来实现虚拟地址映射到真实的物理内存上,出现越界问题直接中止该进程以免影响到其它进程。
在这里插入图片描述
这样操作,大大提升了操作系统的稳定性。

2.3.6 进程间通信

虚拟地址满足了隔离问题,但是有很多场景需要不同进程之间进行通信交互,进程间有很多通信方式,在Java中,并不鼓励多进程编程,所以在此我们并不深入探讨通信的具体实现。但无论是哪种通信,它们都具有一个核心原则,即划分一块进程都能访问的公共资源,然后基于公共资源使进程之间进行交换数据。

本次的介绍就到这里了,谢谢观看。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值