[JavaEE]初始操作系统--进程

news2024/11/15 20:49:42

 


专栏简介: JavaEE从入门到进阶

题目来源: leetcode,牛客,剑指offer.

创作目标: 记录学习JavaEE学习历程

希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长.

学历代表过去,能力代表现在,学习能力代表未来! 


目录

1. javaEE概述

2. 计算机发展史

3. 冯诺依曼体系

4. 操作系统

4.1 操作系统的定位

4.2 什么是进程/任务

4.3 进程控制块抽象

4.4 进程控制块的属性

 4.4并行与并发的区别

4.5 进程调度

4.6 内存分配 --- 内存管理

4.7 进程间通信


 前言

由于JavaEE涉及许多计算机操作系统中多线程的知识 , 本文作为javaEE的第一篇文章 , 旨在了解多线程的基础知识 , 为后续JavaEE并发编程的学习打好基础.


1. javaEE概述

javaEE是基于javaSE基础构建的, 用来实现企业级和Web应用级企业的开发, 它不是编程语言而是一系列的技术规范和实现, 技术平台的核心思想是容器加组件.


2. 计算机发展史

计算机的需求在人类的历史中广泛存在, 发展大体经历了从一般计算机工具到机械计算机再到目前的电子计算机的发展历程.

人类对计算机的需求, 驱动我们不断的发明, 改善计算机.目前这个时代是"电子计算机"的时代, 发展的潮流是:更快速, 更稳定, 更微型,.


3. 冯诺依曼体系

现代计算机大多遵循冯诺依曼体系

  • 输入设备 : 用户给计算机发号施令的设备(键盘 , 鼠标 , 摄像头 , 麦克风)
  • 输出设备 : 计算机个用户汇报结果的数据(显示器 , 音响)
  • CPU 中央处理器 : 进行算数运算和逻辑判断
  • 存储器 : 分为内存和外存, 用于存储设备(二进制存储)

影响存储空间:

硬盘 > 内存 >>CPU

影响访问速度:

CPU > 内存 > 硬盘


4. 操作系统

操作系统是一组计算机资源管理的软件的统称 , 目前常见的操作系统有 : Windows系列 , Unix系列 , Linux系列 , Android系列(本质Linux) , iOS系列(与Mac同源) , 鸿蒙等等.

4.1 操作系统的定位

 操作系统有两个基本功能:

  • 防止硬键被时空的应用程序滥用
  • 向应用程序提供API来控制复杂而又通常大相径庭的低级设备.

4.2 什么是进程/任务

一个运行起来的程序 , 就可以称之为"进程" , 如果没运行起来就只能叫程序. 同时 , 在操作系统内部 , 进程又是操作系统进行资源分配的基本单位.


4.3 进程控制块抽象

进程是一个重要的软件资源 , 是由操作系统内核负责管理的.(描述+组织)

  • 描述:

使用结构体(c语言的结构体) 来描述进程属性 , 与java中的类具有相似的功能.

用来描述进程的结构体又被称为PCB(programe control block)进程控制块

  • 组织:

通过双向链表 , 把多个PCB串联到一起.(当然实际情况更加复杂 , 这里以开源的Linux操作系统为例)

创建一个进程 , 本质上就是创建一个PCB这样的结构体对象 , 把它插入到链表中.

销毁一个进程 , 本质上就是把链表上的PCB节点删除掉.

查看任务管理器的进程列表 , 本质上就是遍历这个PCB链表 , 取出相关的资料.


4.4 进程控制块的属性

  • 1.pid 进程的身份标识符.(唯一的数字)

这些pid可以说是进程的身份证号 , 目的是区分进程. 

  • 2.内存指针 

指明了这个进程执行的代码在内存的什么位置 , 以及这个进程中执行的数据都在哪里.

  • 3.文件描述符表 

文件描述符表可以视为是一个数组 , 里面每一个元素又是一个结构体.每一个结构体对应一个文件的相关信息.进程每打开一个文件就会在文件描述符表上多增加一项.

假设我们的代码中不操作文件 , 只有一个打印"HelloWorld"的语句 , 还是需要文件描述符表~~

一个进程只要启动 , 不管是否有操作文件的代码 , 都会默认打开三个文件 , 标准输入(System.in) , 标准输出(System.out) , 标准错误(System.err).此时对应的文件描述符表 , 会创建三个表项 , 标准输入 , 标准输出 , 标准错误 , 对应下标分别是0 , 1 , 2.这个文件描述符表的下标被称为是文件描述符


 4.4并行与并发的区别

一个系统中进程有上百个 , 这些进程希望能够"同时运行""分时复用" , CPU虽然是多核但数量有限.由此引出并行与并发的概念.

  • 并行:

如果系统有多个CPU , 一个CPU执行一个线程 , 另一个CPU执行另一个线程 , 两个线程之间互不抢占CPU资源 , 我们称之为并行.

~~微观和宏观都是同时执行. 

  • 并发:

当有多个线程执行在运行时 , 如果系统只要一个线程 , 则它不可能同时运行一个以上的线程 , 它只能将CPU的运行状态划分成若干个时间段 , 再将线程分配给各个时间段运行 , 当一个线程运行时其他线程出于挂起状态 , 我们称之为并发.

~~微观串行 , 宏观并行. 

eg: 在一个CPU核心上 , 先运行一下QQ音乐 , 再运行一下TX视频....只要切换速度足够快 , 我的电脑主频是3.2GHz一秒可以执行32亿条指令(细品) , 宏观上人感知不到.

由于并行和并发是内核负责处理的 , 应用程序感知不到.因此往往也把并行和并发 , 统称为并发.

除非显示声明 , 否则谈到并发 , 就是指并行+并发.


4.5 进程调度

为了给这些进程更好的分配CPU资源 , 操作系统里面有一个重要的资源调度器 , 就负责让有限的CPU来调度执行这么多的线程.

进程调度的相关属性.

  • 进程的状态

就绪状态:随叫随到 , 进程随时准备好了去CPU上执行

运行状态:正在CPU上运行的

阻塞状态(睡眠状态):短时间无法到CPU上执行了 .eg:进程正在进行密集的IO操作 , 读写数据.

  • 进程的优先级

当有很多进程需要运行时 , CPU先给谁排 , 后给谁排 ,  给谁排多点 , 给谁排少点.

eg:(本段子纯属虚构)

小美排时间优先给小A排 , 周一周二周三都和小A逛街吃大餐可以获取物质上的实惠 , 周四周五给小B排 , 因为小B长的帅赏心悦目.周六分单双周给小C排 , 防止小C不舔了.

进程也是有优先级的~~

操作系统调度并不是一碗水端平的.

  • 上下文

操作系统在进行进程切换的时候 , 就需要把进程执行的"中间状态"记录下来保存好,下次这个进程再上CPU运行时 , 就可以恢复上次的运行状态 , 继续向下执行.

进程的上下文 , 就是CPU中的各个寄存器的值 (寄存器是CPU内置的存储数据的模块 , 保存的就是程序运行过程中的中间结果)

保存上下文 , 就是将这些寄存器的值保存到内存中去.

恢复上下文 , 就是把内存中这些寄存器的值恢复回去.

eg:

因为小美要同时和3个人谈恋爱 , 因此她必须记住上次和某个人进行都什么程度了 , 是否有啥未完成的任务之类的.

上一月

小A对小美说 , 下个月我带你去三亚玩 , 让小美提起准备准备~~

小B对小美说 , 下个月我爸过生日 , 想让小美帮忙准备准备~~

下一月

小A问小美:你准备好了吗?小美说:我给你爸买了一个剃须刀

小B问小美:你准备好了吗?小美说:我已经买了一套泳衣了.

很明显这时就穿帮了 , 为了解决这个问题 , 就需要记录好 , 上次约会都有哪些进展 , 方便下次执行.

  • 记账信息

操作系统 , 统计每个进程在CPU上占用的时间和执行的指令数目.根据这个来决定下一阶段如何更好的调度.

eg:

小美和各个男友每相处一段时间 , 就做一个总结 , 统计一下每个人身上大概花费了多少精力.始终保持好一个合适的尺度 , 不能太远 也不能太近.让每一个人都感受到温暖.

PCB中包含的属性非常多 , 上述是主要属性~~


4.6 内存分配 --- 内存管理

内存指针所指向的并非是真实的物理地址 , 而是经过了一层抽象 , 虚拟出来的地址空间.类型与C语言学过的指针 , 这里的内存地址就是虚拟内存地址.

内存物理上是个内存条可以存储很多的数据 , 内存条可以想象成一个很长的走廊 , 走廊有很多的房间.走廊有很多的房间 , 每个房间的大小1Byte.每个房间还有个编号 , 从0开始依次累加.这个内存编号就是内存的"物理地址".

内存有个了不起的特性~随机访问.访问内存上的任意地址的数据 , 速度都极快且时间也差不多.因此造就了数组下标操作是O(1).

如果进程操作内存的物理地址就会出现如下图所示 , 如果进程1的代码出现bug就可能导致访问的内存越界 , 进程1的越界访问到进程2的内存.

eg:

当你写一个程序一运行 , 不一会QQ崩溃了 , chrome也崩溃了.....那么这锅谁背~~

 内存使用虚拟地址就可以有效解决该问题 , 操作系统的MMU一但发现进程1的访问超出了访问范围  , 此时会直接向进程反馈一个错误.(具体来说就是SIGN SEGEMENT FAULT 信号 , 引起进程的崩溃) , 这样就可以保证谁出bug谁奔溃 , 其他无关线程不受影响.增强进程间的隔离性.

主要目的就是解决进程间相互影响的问题.


4.7 进程间通信

虽然进程隔离了 , 但又引入了新的问题.有时候 , 确实进程之间 , 需要数据的交互.(相互配合)

在隔离性的基础上 , 开个口子 , 进程间通信实现方式很多 , 但核心思路是一致的.需要搞一个多个进程都能访问到"公共空间" , 基于这个公共空间来进行数据交互即可.

eg:

在当前疫情时代的背景下 , 点外卖提倡无接触配送 , 外卖小哥可以将外卖放到指点的地点就可以实现.

这里的通信方式/公共空间 , 有很多具体的体现.

JavaEE主要涉及两种方式 , 基于文件 , 基于网络.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro如何移动器件操作指导

Allegro如何移动器件操作指导 Allegro上可以任意移动器件,具体操作如下 选择Edit-move Find选择Symbols Point根据需要选择 Sym Origin是抓取器件的原点 Body center是抓取器件的中心 User Pick可以自定义抓取的原点,在移动整个模块的并且旋转的时候常用的命令 Sym Pin#设…

投稿时要求注册ORCID,这张学术界身份证到底有哪些用处?

您是否经常遇到向国际期刊投稿时需要提供ORCID账号进行登录呢? 又是否在我们看到喜欢的文献时,不免被其作者圈粉,忍不住要去了解这位学者的其他作品和动向时却又很难搜到准确信息? 对中国学者来说,由于投到国际期刊时…

【Matplotlib绘制图像大全】(七):Matplotlib使用xlim()和ylim()修改轴线刻度

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

Docker-compose部署XWiki

XWiki是一个知识管理平台,用于知识库管理和知识管理。最有名的是Confluence系统,我们现在搭建的是XWiki,这是一个开源系统。 我们可以到官网上查找安装的方法: 这里,我们采用PostgresSQL on Tomcat的方法:…

15.位操作

文章目录位操作15.1二进制数、位和字节15.1.1二进制整数15.1.2有符号整数(?)15.1.3二进制浮点数1.二进制小数2.浮点数表示法15.2其他进制数15.2.1八进制15.2.2十六进制15.3C按位运算符1.二进制反码或按位取反:~2.按位与:&3.按位或:|4.按…

HTML+CSS网页设计期末课程大作业 【茶叶文化网站设计题材】web前端开发技术 web课程设计 网页规划与设计

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

[附源码]计算机毕业设计springboot校园代取快递系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

dreamweaver作业静态HTML网页设计——我的家乡海南旅游网站

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

LIO-SAM源码解析(五):mapOptmization.cpp

1. 代码流程 1.1. extractSurroundingKeyFrames() 1.2. scan2MapOptimization() 这个函数主要就是进行帧到地图的匹配,通过点到面、点到线的距离距离最小作为优化目标。LOAM中雅阁比矩阵推导其实还是过于复杂了,可以使用进行误差扰动来计算雅阁比矩阵&a…

Unity事件函数的执行顺序

事件函数的执行顺序 脚本生命周期流程图 场景加载时 这些函数在场景开始时被调用(场景中的每个对象一次)Awake:此函数总是在任何 Start 函数之前以及在预制件被实例化之后调用(如果 GameObject 在启动期间处于非活动状态&#xf…

好家伙!阿里并发核心编程宝典(2022版)一夜登顶Github热榜第三

不知道大家今年的金九银十是否有出去面试过?有出去面试的朋友肯定深有感受,像我们刚入行那会面试的加分项现在卷得已经成为了面试的基础题(手动狗头)。其中最典型的就属这个Java并发编程了。之前一般只有大厂才会有高并发编程相关…

[附源码]Python计算机毕业设计Django基于vuejs的爱宠用品销售app

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

three.js之模型

文章目录简介网格模型旋转平移缩放方法平移旋转属性缩放位置平移旋转复制与克隆复制方法克隆方法注意专栏目录请点击 简介 我们常见的模型有点模型,线模型、网格模型他们的分类如下 点模型 Points对应的材质为点材质PointsMaterial 线模型 Line 线渲染模式Line…

AIGC独角兽官宣联手,支持千亿大模型的云实例发布,“云计算春晚”比世界杯还热闹...

梦晨 发自 凹非寺量子位 | 公众号 QbitAI现在AI最火的方向是什么?那必须是AIGC(AI Generated Content,利用人工智能技术来生成内容)。AIGC最火的公司是谁?莫过于开源AI作画模型Stable Diffusion背后的StabilityAI。对于…

【数学】焦点弦定理(?)

因为和焦点弦相关的定理太多,我不会把哪一个公式叫成这样的名字,但百度搜出来就是这个名字 如图,椭圆中焦点弦 AB,∣FB∣k∣FA∣(k>0)AB, |FB|k|FA|(k>0)AB,∣FB∣k∣FA∣(k>0) ,求 ABABAB 倾斜角的余弦值 cos⁡θ\cos\t…

Anntec ZKUXFT XT2 FGPA卡DPDK使用方法

1. 建议环境 CPU Architecture x86_64、aarch64 CPU MHz: 2000以上 Memory 每个node空闲内存超过2G 硬盘 剩余空间大于100M OS Ubuntu,centos,银河麒麟,UOS等Linux …

亚马逊 CTO Werner Vogels:2023 年及未来五大技术趋势预测

近年来,几次全球性危机占据了我们的日常生活,因此看看我们是否可以利用技术来解决这些棘手的人类问题。如今,我们可以从很多互联设备获取数据,例如:可穿戴设备、医疗设备、环境传感器、视频捕捉设备等,数据…

DiffKit -- 世上最牛且开源的表数据对比工具

DiffKit -- 世上最牛且开源的表数据对比工具1. DiffKit Introduction1.1 Introduction1.2 Compatibility1.3 Download2. Quick Start3. User Guide4. Code5. Waken1. DiffKit Introduction 1.1 Introduction DiffKit Website: http://www.diffkit.org/index.html. 1.2 Compati…

excel数据分析

目录1. 对比分析2. 结构分析3. 分布分析3.1 VLooKup模糊匹配功能进行分组3.2 数据透视表进行数值型数据分组1. 对比分析 2. 结构分析 3. 分布分析 定义:根据分析目的,将数值型数据进行等距或不等距的分组 消费分布分析收入分布分析年龄分布分析 定量…

[附源码]Python计算机毕业设计Django交通事故档案管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…