计算机相关工作原理

一,JavaEE

javaEE 特指Java开发网站后端 相关技术体系

二,冯诺依曼体系

2.1 计算机的组成

1)CPU中央处理器

工作的时候很烫,需要散热

2)主板(大插座)

其他的组件都需要插到插座上才能供电,才能工作

3)内存(存储数据)

数据量少,速度快,成本高,断电后数据丢失

4)硬盘(存储数据)

数据量多,速度慢,成本低,断电后数据仍然存在(持久化存储)

5)散热器

6)电源

7)机箱

8)显卡

2.1.1针对存储空间

硬盘 >> 内存>>CPU

2.1.2针对数据访问速度

CPU >> 内存 >> 硬盘

三,CPU的工作过程

3.1 相关的概念

1)指令:一组二进制构成的数据,这些数据都是有特定的含义的,在CPU出场的时候就设定好了能够接收哪些指令

编程语言分为三个大类,机器语言,汇编语言和高级语言

机器语言是一条一条的指令,每个指令都是二进制的

而汇编语言是把每个指令都转换成了一个英语单词(助记符)

汇编语言的每个语句和机器语言的每个指令一一对应

RAM:为内存(Random Access Memory:访问内存任意地址的数据,开销都差不多)

寄存器(CPU内部的存储设备)CPU也能存储数据,存储空间更小,速度更快,成本更高

CPU的寄存器整体存储空间一般不到1KB(存临时数据,辅助进行计算)

CPU进行计算需要把数据从内存读取到寄存器中

3.2 CPU的基本工作流程

一,CPU可以按照上述指令表进行工作

CPU看到的程序就是这些二进制指令,假设CPU从0号地址开始执行,顺序的往下进行执行

真实的情况是CPU会从内存的指定地址开始执行(不一定是0)有一个硬件设定好的起始地址

CPU上还有一个专门的寄存器"程序计数器"存储下一条要执行的指令的地址是什么

二,CPU执行一条指令,通常要经过三个步骤

内存上的指令是从哪来的?

操作系统,运行程序的时候把这个硬盘的可执行文件加载到内存中

1)读取指令:把指令从内存中读取出来,放到CPU上专门的寄存器中

2)解析指令:把指令解析一下,和指令表对照,理解要做啥

3)执行指令:真正按照指令说的来工作

当遇到0时程序结束

四,补充

4.1 cache缓存

寄存器的运行速度比内存的快,而内存的运行速度又比硬盘上的快

所以

寄存器和内存之间有一个cache(CPU上的)

内存和硬盘之间有一个cache(固态硬盘上,会有专门的cache模块)

从内存中直接取数据太慢了,就可以把数据放到缓存里

局部性原理:某次用到一条数据,紧接着很大的概率使用和这个数据相邻的数据

从内存中读一个数据,不是只读这一个地址,而是把这个地址和周围的数据都一起读取到cache中

4.2显卡

GPU分为两种独立显卡和集成显卡/核心显卡

集成显卡/核心显卡------CPU内部集成了独立显卡功能(能力比较弱)

独立显卡-----能力比较强

五,操作系统

1)类型

windows 家用电脑上的系统

Linux 服务器上的系统/嵌入式设备

MacOS 苹果电脑专属

Android 智能手机(从Linux发展过来)

IOS 苹果手机专属

还有其他专用领域的系统

2)功能

1,对下,管理好各种硬件设备

2,对上,要给软件提供稳定的运行环境

总之,操作系统是一个"搞管理的软件"

计算机上支持的硬件设备有很多,每种硬件都有不同的厂商,操作系统针对上述的各种硬件设备都提供了一定的"抽象封装",各种硬件厂商,就需要按照操作系统的要求,对接上去

应用软件

|

操作系统API

|

操作系统

|

驱动程序

|

硬件设备

操作系统会使每个应用程序之间隔离开,避免出现一个软件崩溃把其他软件带走的情况,相对稳定

六,进程

1)进程process是操作系统当中非常核心的概念

一个跑起来的应用程序就称为"进程"

操作系统提供了功能 任务管理器 中可以看到所有进程

进程和可执行文件是应用程序的不同状态

2)要想让进程运行,就得分配一些"系统资源"

进程是系统进行资源分配的基本单位

6.1 进程管理

1)描述

操作系统引入了PCB(进程控制块)结构体,表示一个进程的各种属性

进程的描述不能使用数据库的表,数据库本身是一个"应用软件",依赖操作系统的

2)组织

操作系统使用双向链表结构,组织这些PCB结构体

1,任务管理器上看到进程的信息,就是在遍历链表

2,创建新的进程 => 创建PCB,添加到链表上

3,销毁旧的进程 => 把PCB从链表上删除

之所以操作系统需要管理进程,本质上是操作系统同一时刻可以运行的进程有多个

6.2 PCB

PID

进程的身份标识

每个进程需要有一个唯一的id进行表示

pid具体的数字不重要,这是系统随机分配的

内存指针

操作系统运行进程需要分配资源,内存就是重要的资源

对于一个进程的内存,需要保存两部分核心的信息

1)进程要执行的指令 (高级语言 => 机器语言的指令)

2)进程执行时依赖的数据 (代码中涉及的各种变量即为数据)

操作系统需要知道哪个区域里都放的什么

文件描述符表

文件在操作系统是一个广义的概念,其中最典型的就是硬盘上的文件

进程工作中,很可能要和硬盘交互

一个进程可以同时操作多个文件,每次操作一个文件,都需要"打开文件"就会往文件描述符表上放一个结构体(这个文件描述符表就相当于一个顺序表)

6.3进程调度

cpu的核心数有限,进程数目很多

1)并行:两个CPU核心,同时的运行各自的进程

2)并发:一个cpu核心,通过"分时复用"的方式,运行多个进程

本质上就是轮着来

由于cpu的执行速度很快,上述分时复用轮转速度很快,人肉眼感知不到

宏观上看是"多个线程同时进行"

微观上看是"多个线程一个一个串行执行的"

每个进程在cpu核心上运行的时间单位,称为"时间片"

在开发中,从程序员/普通用户的角度是无法区分当前多个进程是并行的还是并发的

因此对于我们来说,就会把"并行和并发"统称为并发

6.4 进程的状态

一个进程的状态有很多

1)就绪状态:进程随时可以到cpu上执行/正在cpu上运行

2)堵塞状态:进程暂时不方便取cpu上执行

6.5 优先级

虽然都可以调度,但是有先后顺序

进程和进程之间的优先级不一样

6.6 上下文

进程在cpu上执行一段时间之后,切换走,过了一定的时间,再次切换回来了

进程切换回来就需要按照上次执行到的位置,继续往后执行

一个进程在切换走之前,保存进度

下次切换回来的时候,恢复进度

上下文就是进程执行到的++当前状态++

进程的上下文:进程执行的过程当中,CPU的各种寄存器的值

6.7 记账信息

是一个对抗优先级机制的兜底机制

有些进程优先级高,优先被执行

有些进程优先级低,后被执行

所有可能会出现某个时间里低优先级的进程一直吃不到cpu的资源

记账信息,统计每个进程在cpu上执行的时间,避免把某个进程冷落太久

6.8 内存分配

操作系统对内存资源的分配,采用的是空间模式-----不同的进程使用内存中的不同区域,互相之间不会干扰

6.9 进程间通信

进程和进程之间,内存空间是隔离的

进程之间要想交互,无法通过内存直接完成

操作系统提供了很多种进程间通信机制来解决这个问题

两种重要的通信机制 1)文件

2)网络

相关推荐
随风一样自由1 小时前
【前端+React+缓存竞态】导航切换缓存刷新机制
前端·react.js·缓存
Mortalbreeze1 小时前
深入 Linux 线程机制(三):线程互斥——竞争条件与互斥锁的本质
linux·运维·服务器·c++·算法
恋猫de小郭1 小时前
Flutter 开发怎么做 Agent ?从工程实战详细给你解读下
android·前端·flutter
IT_陈寒1 小时前
React状态更新延迟搞晕我,原来是闭包在捣鬼
前端·人工智能·后端
晓得迷路了1 小时前
栗子前端技术周刊第 136 期 - pnpr、Flow 重构移植 Rust、Astryx...
前端·javascript·css
Tian_Hang1 小时前
Eclipse Mosquitto 安装及介绍
java·运维·服务器·ide·sql·mysql·eclipse
倔强的石头_1 小时前
【Kingbase应用接入与连接池治理】JDBC驱动与连接串实战
数据库
薄荷椰果抹茶1 小时前
计算机导论_第4章_笔记
服务器·网络·笔记
柳杉1 小时前
别再手写大屏了!用这套「3D 地图 + 拖拽脚手架」示例源码,交付效率提升 80%
前端·three.js·数据可视化