JavaEE:计算机是如何工作的

JavaEE学什么?

主要学习Java开发网站后端,为后面学习Spring做铺垫

涉及的内容:

1)操作系统基础知识

2)多线程知识

3)文件操作

4)网络编程

5)网络原理

6)JVM


计算机

计算机 = 软件 + 硬件

CPU是计算机最核心的部分

存储器(内存+外存):内存存储空间小,访问速度快,成本更高,断电后数据丢失

                                      外存存储空间大,访问速度快,成本低,断电后数据依旧存在

输入设备:让人给计算机发号施令(键盘,鼠标,麦克风。。。)

输出设备:计算机给人反馈结果(显示器,音箱。。。)

两者兼具(触摸屏,网卡。。。。)


CPU

CPU是很小的一块硅晶片电路,要提升算力就需要提升集成程度

常见CPU厂商:Intel, AMD, 高通,华为,摩尔线程。。。

Intel和AMD都是同一个架构x86

设计CPU有很多种不同的方案就称为架构,不同架构中都会有不同的指令集,会对上层应用程序产生直接的影响

指令集:所谓编程就是采用编程语言描述出一些逻辑,这些逻辑最终被转换成CPU能识别的指令最终执行。这些指令的集合就是机器语言,一些二进制数据

苹果,高通等搞的是另一套架构(ARM),ARM适合低功耗的机器


这个问题得看情况

如果CPU是16位的,得到的结果就是2(2个字节,16个比特位)

如果CPU是32位的,得到的就是4

如果CPU是64位的,得到的就是8

CPU的位数和代码中内存地址用几个字节表示是密切相关的


CPU构成

门电路=>半加器=>全加器=>加法器=>ALU运算器=>CPU

具体内容可以看看我专业课的笔记

计算机体系结构复习:电路-CSDN博客

CPU的基本单位足够小,小到纳米级别,单位越小,集成程度越高,对应的算力就越强

问题:

CPU能无限小吗?因为晶体管间距有限制,无法无限小

那可以把CPU搞大点吗?不能,加工时的良品率会降低

可以搞多一些数量吗?可以,多核CPU

每个核心都相当于一个完整的CPU,把这些CPU核心集成在一起。

本来一个任务一个人干,两个人一起干就更快了

更快的前提需要软件的配合,需要软件把大任务拆分成多个小任务,合理的分配给多个劳动力(软件的并发编程)

能不能让CPU核心当成两个来用?超线程技术。

像我的电脑,写代码的时候可以当成20个人干活来使用

CPU的睿频技术:我们CPU的动态频率发生变化,取决于当前任务多不多

衡量一个CPU的单核性能,既要看基础频率(下限),又要看最大睿频(上限)


CPU如何执行指令的

寄存器是CPU上的存储单元,支持CPU完成一些计算,保存中间结果

访问速度比内存快3-4个数量级

4位RAM地址:极简版本的4位汇编

这段指令是内存中的一段数据

假定从0号地址开始执行程序,CPU就会先从0号地址读取数据到CPU寄存器里,查询指令表对这个指令进行解析

接着把14号地址的数据读取到A寄存器里

接着CPU默认往下顺序执行内存中的指令

接着执行地址2的指令

继续取指令并解析

上面的过程是CPU如何进行3+14的过程

我们可以得出几个结论

1.CPU要执行的指令是在内存中的

冯诺依曼体系结构的基本设定,把执行和存储分开,解耦合,降低硬件设计的成本

2.CPU要想执行指令,就要先取指令,再解析指令,然后才能执行指令

3.取指令需要从内存中读取指令到CPU的寄存器中。取指令的操作很耗时,开销较大,从内存读取数据这件事跟不上越来越快的CPU了,于是设计出缓存

缓存用于存储数据的硬件或软件的组成部分,以使得后续更快访问相应的数据

4.CPU解析指令的时候需要用到指令表,不同架构的CPU支持的指令表不同

5.指令在执行过程中可能带有一些操作数,不同的指令,操作数的个数含义都有所不同

6.CPU重要的参数:主频,表示一秒钟之内CPU能够执行的指令个数


操作系统

操作系统是一个软件,由代码构成程序

操作系统主要职责:管理各种硬件设备;给其他软件提供稳定的允许环境

假设需要写一个程序相应鼠标的各种操作,但是鼠标品种繁多,无法每个鼠标都写一个程序

此时就需要操作系统来统一管理不同的硬件设备,给软件提供统一的api

此时程序员写代码就不必关注硬件的细节差别了,只需要面向操作系统就行,调用操作系统的api控制不同的硬件,这也叫做封装

常见的操作系统:Windows, Linux, Mac, IOS, Android


进程

操作系统提供的一种软件资源

现在我们用的系统都属于多任务操作系统,同一个时刻可以运行多个任务

这里每一个程序就是一个任务,也叫进程

每个任务/进程在执行过程中都需要消耗一定的硬件资源,进程是系统分配资源的基本单位

单任务系统,比如switch,早期的诺基亚等;没有后台运行,要想执行另一个程序就需要先退出前一个程序


进程在系统中是如何管理的?

1.先描述,使用类/结构体这样的方式,把实体属性给列出来

表示进程信息的结构体,叫做PCB(进程控制块,Process Control Block)

Windows表示进程的结构可以称为PCB,Linux也可以称为PCB

在Linux上,PCB是叫做task_struct的结构体

2.再组织,使用一定的数据结构,把这些结构体/对象串到一起

在Linux中,使用链表这样的数据结构来把若干个task_struct给串起来;如果运行一个新的程序,系统会多一个进程,多的这个进程就要构造出一个新的PCB,并添加到链表上

PCB的一些核心属性

(1)PID:进程的身份标识,通过一个简单不重复的整数来进行区分

系统汇报真同一个机器上,同一时刻每个进程PID都是唯一的

选中某个进程,点击结束任务就是任务管理器获取你选中的进程的PID,然后调用系统api,把PID作为参数穿插进去,从而完成杀死进程的操作

(2)内存指针

进程运行过程中,整个系统的内存都是可以随意使用的吗?

当然不是。要先从系统申请,系统分配一块才能使用

内存指针就是用来描述这个进程使用内存的详细情况

比如在电脑双击一个exe文件,系统会把文件里的指令和数据先加载到内存中,然后再创建进程,让进程开始执行,这样就开始运行进程

(3)文件描述符表

我们的进程经常要访问硬盘,而操作系统把硬盘这样的硬件设备封装成了文件

一个进程要想操作文件,需要先打开文件,就是让进程再文件描述符表中分配一个表项(构造一个结构体)来表示这个文件的相关信息


一个单核CPU怎么支持一个多任务操作系统运行?

分时复用(并发)

先执行进程1的代码,执行一会后让进程1下来,让进程2上;进程2执行一段时间后上进程3

切换的速度极快,人是无法感知切换的过程,所以人眼认为是多个进程同时进行的

多核CPU的进程运行不是靠快速切换,而是并行+并发执行的。

此处CPU的百分数就是进程在CPU消耗的时间的百分比,如果一个进程把CPU吃到100%,意味着其他进程没有执行时间了,这个进程就把CPU霸占了,可能造成CPU卡顿


PCB如何支持进程的调度?

(1)状态

描述某个进程是否能够去CPU上执行

就绪状态:随时准备好去CPU上执行

阻塞状态:这个进程当前不方便去CPU上执行,不应该调度它(比如进程在等待IO)

直观理解就是代码不能继续往下走了

(2)优先级

字面理解就是先调度谁,后调度谁的问题

(3)记账信息

针对每个进程占据了多少CPU的时间进行一个统计,并根据这个统计结果进行进一步的调整调度的策略

(4)上下文

这个是支撑进程调度的重要属性,相当于游戏中的存档和读档

操作系统调度进程的过程可以认为是随机的,任何一个进程,代码执行到任何一个指令的时候都可能被调度出CPU,在进程下次调度回CPU的时候,继续之前的进程执行

所以就需要在进程调度出CPU之前把当前寄存器中的信息保存到内存中,这个就是存档

该进程下次再去CPU上执行的时候再把这些寄存器的信息恢复过来(加载到CPU对应寄存器中),这个过程就是读档


内存分配

每个进程的内存是彼此独立,互不干扰的

(原因:为了系统稳定性,如果某个进程代码出bug,出错影响范围只是影响到自己这个进程,不会影响其他进程,这个叫做进程独立性

进程间通信

虽然有进程独立性,但是有时候也需要多个进程相互配合完成某个工作

系统提供一些公共的空间(多个进程都能访问到),让两个进程借助这种公共空间来交互数据

操作系统提供的进程间通信的方式

文件和网络是Java程序员主要使用的进程间通信方式

网络:可以支持同一个主机或不同主机的不同进程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用到了C语言的函数指针功能。

请选择一个功能&#xff1a; 1. 加法 2. 减法 3. 乘法 4. 除法 5. 取模 6. 阶乘 7. 判断素数 8. 球体体积 9. 斐波那契数列 10. 幂运算 11. 最大公约数 12. 最小公倍数 13. 交换数字 14. 排序 15. 退出 请选择一个选项&#xff1a; #include <stdio.h> #include <stdl…

強強联手!M88明陞宣布与G2 电子竞技俱乐部成为官方合作伙伴!

M88明陞作为亚洲领先的在线游戏平台&#xff0c;正式宣布与G2电子竞技俱乐部建立具有突破性意义的官方合作伙伴关系&#xff0c;G2电子竞技俱乐部是全球领先的电子竞技品牌之一。作为官方合作伙伴关系&#xff0c;双方将合作开展一系列活动。 M88明陞将在G2 电子竞技俱乐部追求…

工单质检上线提升企业IT服务质量管理,智能服务能力再添新翼!甄知燕千云全新版本V1.26.0发布!

燕千云数智化业务服务平台在11月24日发布了V1.26.0版本&#xff0c;本次主要新增了工单质检、SLA绩效管理和上下游管理能力升级、以及自动预测工单流转趋势的功能&#xff0c;以支持更多的IT服务场景。同时&#xff0c;呼叫中心新增了智能分配客服、工单关联会话记录、客服消息…

RT-Thread学习笔记(六):RT_Thread系统死机日志定位

RT_Thread系统死机日志定位 一、RT_Thread系统死机日志定位二、Cortex-M3 / M4架构知识2.1 Cortex-M3 / M4架构概述2.2 寄存器用途 三、排查步骤 一、RT_Thread系统死机日志定位 RT-Thread 系统发生hardfault死机时&#xff0c;系统默认会打印出一系列寄存器状态帮助用户定位死…

NOIP2016提高组第二轮day2 - T3:愤怒的小鸟

题目链接 [NOIP2016 提高组] 愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔。简单来说&#xff0c;这款游戏是在一个平面上进行的。 有一架弹弓位于 ( 0 , 0 ) (0,0) (0,0) 处&#xff0c;每次 Kiana 可以用它向第一象限发射一只红色的小鸟&#xff0c;小鸟…

【T3】安装畅捷通T3软件,错误代码0x800A0146,描述:未找到标识符为‘138’的资源。

【问题描述】 安装畅捷通T3软件过程中&#xff0c;提示&#xff1a; 错误代码0x800A0146 描述&#xff1a;未找到标识符为‘138’的资源&#xff0c; 安装程序将立即终止。 【解决方法】 该错误是因为安装过程中检测到数据库版本过高。 首先T3普及版/标准版11.2版本支持数据库…

48.0/图片和多媒体文件的使用(详细版)

目录 48.1 网页中插入图片 48.1.1 基本语法 48.1.2 常见属性 48.2 图片超链接 48.3 设置图片热区链接 48.4 将图片作为网页背景 48.5 滚动字幕 48.6 插入多媒体文件 48.1 网页中插入图片 48.1.1 基本语法 <img src=“图片地址”> img 标记用于将图像插入到 HTML…

深度解析HarmonyOS开发-活动召集令元服务【鸿蒙北向应用开发实战】

目录 一&#xff0e;元服务和ArkTS语言简介1.1 学习元服务1.2 元服务带来的变革1.3 元服务全场景流量入口1.4 ArkTS学习1.5 ArkTS特点 二&#xff0e;DevEco Studio开发工具2.1 DevEco Studio学习2.2 DevEco Studio的主要特性2.3 端云一体化开发2.3.1端云一体化开发特点 2.4 低…

Zidebactam sodium salt β-内酰胺酶抑制剂 1706777-46-9科研

Zidebactam sodium salt β-内酰胺酶抑制剂 1706777-46-9 &#xff08;源自星戈瑞&#xff09; ATH686 FLT3 抑制剂 853299-52-2 Pelitrexol 抑制剂 446022-33-9 TBT1 转运蛋白抑制剂 52535-76-9 HFY-4A HDAC 抑制剂 2094810-82-7 SDR-04 BET 抑制剂 879593-54-1 Phthala…

年会抽奖【编程题】

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 ☁️题目解析 ☁️解题思路…

JAVA 阻塞队列原理

JAVA 阻塞队列原理 阻塞队列&#xff0c;关键字是阻塞&#xff0c;先理解阻塞的含义&#xff0c;在阻塞队列中&#xff0c;线程阻塞有这样的两种情况&#xff1a; 当队列中没有数据的情况下&#xff0c;消费者端的所有线程都会被自动阻塞&#xff08;挂起&#xff09;&#x…

浅析不同NAND架构的差异与影响

SSD的存储介质是什么&#xff0c;它就是NAND闪存。那你知道NAND闪存是怎么工作的吗&#xff1f;其实&#xff0c;它就是由很多个晶体管组成的。这些晶体管里面存储着电荷&#xff0c;代表着我们的二进制数据&#xff0c;要么是“0”&#xff0c;要么是“1”。NAND闪存原理上是一…

新瓶装旧酒之底座概念

一、前言 互联网技术总是喜欢创造一下新的词汇以显示技术先进或者高大上&#xff0c;比如&#xff1a;云计算&#xff0c;中台&#xff0c;引擎&#xff0c;敏捷&#xff0c;领域模型等等。刚出来的时候总是让人看的云里雾里&#xff0c;但是了解后发现也就那么回事。比如今年…

【运维】将Linux的硬盘当内存用,Linux内存不够用的时候如何用硬盘提升内存

文章目录 内存不够用&#xff0c;可以用硬盘当内存吗如何取消这种交换空间交换空间是优先使用的还是说原始内存是会被优先使用的 内存不够用&#xff0c;可以用硬盘当内存吗 是的&#xff0c;可以使用硬盘作为虚拟内存来扩展容器中的内存。这个过程被称为“交换”或“交换空间…

管理空闲存储空间

位示图是操作系统中一种管理空闲存储空间的方法。管理空闲除使用位示图法还可用&#xff1a;空闲区表法&#xff0c;空闲链表法&#xff0c;成组链接法 1.空闲区表法 空闲表法属于连续分配方法。它与内存管理中的动态分区分配方法雷同。 将外存空间上一个连续未分配区域称为“…

【兔子王赠书第11期】成为一名优秀的程序员,从读一本好书开始

文章目录 写在前面《代码大全2》前 言哪些人适合阅读本书还可以从哪些地方找到更多相关信息本书的关键收益为什么要写这本书 推荐理由粉丝福利写在后面 写在前面 如果你曾经想要学习软件开发&#xff0c;却因为零基础而感到困惑&#xff0c;那么《代码大全2纪念版》是你的完美…

第三十二课 电商系统增删改查统一接口的编写

商品增删改查 统一接口 接口方法&#xff0c;只有五个 Add增 Delete 删 Update 更新 findAll查询所有 findOne查询某一个 add增加一个数据 不管增加哪一个表的数据 表名&#xff08;小写&#xff09;与类名一致表中的字段在类中私有化封装 采用&#xff1a;java技术…

ArcGIS无法绘制一个或多个图层

背景&#xff1a;在导入一份数据时候&#xff0c;arcmap出现无法绘制一个或多个图层的错误&#xff0c;...点数少于要素所要求的的数量&#xff0c;查阅了半天资料发现是制作数据时候拓扑关系错误造成&#xff0c;现将处理方法详细记录如下&#xff1a; 1.原数据&#xff1a; …

logstash之grok插件自定义规则学习

文章目录 1、前言2、Grok提供的常用Patterns说明及举例2.1 常用的表达式说明 3、使用grok插件进行日志字段处理4、案例1&#xff1a;处理nginx的日志4.1、查看nginx日志格式4.2、对nginx的日志进行过滤处理 5、案例2&#xff1a;处理tomcat的日志5.1、[安装logstash-filter-mul…

JAVA安全之Spring参数绑定漏洞CVE-2022-22965

前言 在介绍这个漏洞前&#xff0c;介绍下在spring下的参数绑定 在Spring框架中&#xff0c;参数绑定是一种常见的操作&#xff0c;用于将HTTP请求的参数值绑定到Controller方法的参数上。下面是一些示例&#xff0c;展示了如何在Spring中进行参数绑定&#xff1a; 示例1&am…