当前位置: 首页 > news >正文

JavaEE——进程调度

Java传送门

JavaSE

JavaEE


目录

  • 进程调度
    • 1.进程/任务的概念
    • 2.操作系统管理进程
      • 描述
      • 组织
    • 3.进程控制块抽象(PCB)
    • 4.进程调度
      • 并行执行与并发执行
      • 进程调度相关属性
    • 5.虚拟地址空间


进程调度

1.进程/任务的概念

进程也叫做"任务",进程是操作系统对一个正在运行的程序的一种抽象。

我们来举一个 例子: 如图,这个WeChat.exe我们将称为,可以执行文件又叫可执行程序,是一个存储在硬盘上的文件.

我们双击这个文件,WeChat开始运行.操作系统就会把这个文件中的核心数据加载到内存中,同时在操作系统中,生成一个 进程

生成的进程,我们可以在任务管理器中看到这个进程

同时我们在此处看到的一切跑起来的程序都叫 进程

# 注意 # 执行了这个可执行程序,才会产生进程,不执行就不会产生任何动作。


2.操作系统管理进程

描述

详细的表示清楚,一个进程有哪些属性、信息。

通过结构体来描述,结构体中包含了一个进程的各种信息。我们给它起了一个特殊的名字PCB(进程控制块)。

组织

通过一定的数据结构,把若干个描述的实体,将他们放在一起,并且进行增删改查。

系统中通常会使用双向链表这样的结构,来把这些PCB给组织到一起。

20200811130123_5074f

总结:

  • 创建一个进程,本质上就是创建PCB,并且加入到链表上
  • 销毁一个进程,本质上就是从链表上删除对应的PCB节点
  • 查看任务管理器的进程列表,本质上就是在遍历这个链表

# 注意 #

  • 一个进程可能是一个PCB,也可能对应多个。
  • 系统这里管理PCB的链表,也不一定是一个。

3.进程控制块抽象(PCB)

PCB中的关键信息

  1. pid—进程的身份标识(一个主机,同一时刻,进程的pid是唯一的)
  2. 内存指针 (创建进程,要给进程分配内存空间。内存空间上就有很多区域:有的用来放指令,有的用来放数据,还有的用来维护运行状态……内存指针则是用来区分哪块是用来干啥的)
  3. 文件描述符表(每个进程,都可以打开一些文件。文件描述符表里面就记录了当前进程都打开了哪些文件)

20200811130123_5074f

总结:

所谓进程,也就是操作系统分配资源的基本单位。


4.进程调度

CPU资源有限,需要合理安排。计算机进程有许多,一百多个。而我们电脑的CPU可能只是一个6核CPU(同时可以跑6个任务),那我们应该如何跑这一百多个进程,这就叫做进程调度

并行执行与并发执行

CPU的运算能力,和集成程度是密切相关的,但想提高集成程度,有一定困难。单核提升能力有限了,就可以搞多个核心。

每个CPU核心上,都可以独立的运行一个进程。所以多个CPU核心,就可以同时独立的运行多个进程。(这种模式叫做:并行执行

并行执行相对应的,有并发执行。即一个CPU核心,先运行线程1,再运行线程2,再运行线程3。只要微观上切换的足够快,宏观上就好像是三个进程同时运行一样。

20200811130123_5074f

总结:

所谓的进程调度,就是通过“并行”和“并发”的方式,让计算机可以"同时"执行多个进程。


进程调度相关属性

  1. 进程状态
  2. 进程优先级
  3. 进程上下文
  4. 进程记账信息

# 注意 # 这一组属性存在的意义,就是为了支撑“进程调度”。
20200811130123_5074f

1.进程状态

  • 阻塞状态(处于阻塞状态的进程需要等待,无法被调度到CPU上执行)
  • 就绪状态(处于就绪状态的进程才能上CPU来执行)

2.进程优先级

进程执行的谁先谁后,是有顺序的,有主次之分。系统调度的时候会根据优先级,来给进程安排时间。(创建进程时,可以通过一些系统调用来干预优先级)

3.进程上下文

进程在CPU上执行了一会后,要切换给别的进程,就需要保存当前运行的中间结果。下次轮到该进程执行时,就恢复之前的中间结果,继续执行。

4.进程记账信息

记账信息,即为每个进程在CPU上执行了多久,也叫统计信息。(起到辅助调度的效果)

执行进程的时候,虽然有优先级,但还是不希望让有的进程完全捞不到CPU。通过时间表,使调度更加均衡。


5.虚拟地址空间

为了防止直接存储在一段连续的地址空间,如果进程1的指针越界操作,影响到进程2。防止进程间互相影响,就需要让每个进程都有各自的内存空间,让其互不干扰。 于是我们给每个进程划分内存空间,都叫做“虚拟地址空间”(不是真实的物理内存地址)

通过专门的设备MMU来完成,虚拟地址物理地址之间的映射。

针对图中进程1和进程2,能够访问的内存空间,就是0x0 - 0xFFFF之间。如果不小心访问了更大的内存空间,在MMU映射时就能发现,从而及时止损,避免影响到其他进程的运行。

20200811130123_5074f

总结:

使用虚拟地址空间,就认为进程之间存在了“隔离性”,一个进程是不能直接访问另一个进程的内存数据的。

防止干扰的操作,提高了系统的稳定性。

# 注意 # 有些需求场景,需要多个进程互相配合,进程隔离了,此时进程之间就很难进行交互了。于是,系统有引入了一个机制,进程间通信(找一个多个进程都能访问到的公共资源,然后基于公共资源来交换数据)。


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!
在这里插入图片描述
加粗样式

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

相关文章:

  • 多线程(基础)
  • 【云原生微服务八】Ribbon负载均衡策略之WeightedResponseTimeRule源码剖析(响应时间加权)
  • 内网渗透之内网信息收集(六)
  • 深入理解高级数据结构之红黑树
  • 流量回放-The Big Picture
  • 【Git总结大全】git操作从入门到实战(总结篇)
  • 【ansible第三次作业】
  • postgres源码解析 缓冲池管理器--1
  • 干货| 算法工程师常见问题(基础算法篇)
  • 机器学习笔记之高斯混合模型(四)EM算法求解高斯混合模型(M步操作)
  • Jupyter 介绍
  • Code For Better 谷歌开发者之声——Google Play
  • 【好书推荐】程序是怎样跑起来的
  • 关于技术分享及内卷
  • 源码解析Java数组如何选择排序的算法
  • canvas 五子棋游戏
  • exports和module.exports
  • HTML-表单
  • JS实现简单的MVC模式开发小游戏
  • Laravel5.4 Queues队列学习
  • node和express搭建代理服务器(源码)
  • PHP面试之三:MySQL数据库
  • React系列之 Redux 架构模式
  • Vue2.x学习三:事件处理生命周期钩子
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 为什么要用IPython/Jupyter?
  • 找一份好的前端工作,起点很重要
  • 阿里云服务器购买完整流程
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #微信小程序:微信小程序常见的配置传值
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)Linux 多线程条件变量同步
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net快速开发框架源码分享
  • 。Net下Windows服务程序开发疑惑
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [C#7] 1.Tuples(元组)
  • [C++]STL之map
  • [CentOs7]图形界面
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [HAOI2016]食物链
  • [iOS开发]事件处理与响应者链
  • [js] 正则表达式
  • [LeetCode]—Implement strStr() 寻找子串匹配第一个位置 (KMP)