2023-11-15 计算机是如何工作的
软件开发,需要有什么样的知识和技能
-->软件开发就是个广义的概念,不是说带有图形化界面的叫软件
一个软件的难易程度,也是和图形化界面没关系
内功 + 外功
Spring里面涉及到的 网络/协议/反射/设计模式/多线程......
计算机是怎么构成的
CPU基本情况
x86结构 intel amd 家用pc,服务器
ARM结构 苹果,高通...
不同的cpu,支持的指令集是不同的
指令集 -->机器语言
不同的cpu,架构不同,指令集不同--->机器语言,汇编语言不同
学校学的汇编语言是8086的cpu展开的,8086是intel在上个世纪搞得非常经典的cpu
80286 ->80386 -> 80486 把这个系列称之为x86
学校学的汇编基于8086是16位的cpu,现在都是64位的cpu
16位和64位和寻址相关
看是多少位的机器 16--2 32--4 64--8
之前学的可以切换是因为windows的64位版本可以兼容32位的程序
vs也提供了一个兼容的情况
64位的cpu可以生成32位的程序
cpu的基本工作原理就在数电,模电....
即使不理解具体过程,但是要知道cpu以及其他的重要的设备都是由门电路构成的~~
门电路->晶体管->基本单位足够小 nm级别
越小,集成程度越高,算力也就越高
cpu上的基本单元能无限小嘛?
当东西足够小的时候,就进入量子力学了,原有的一套就行不通了
如果把cpu搞大,加工时候的良品率就降低了
既然不能小,能不能多搞点数量?? ---->多核cpu
cpu核心最重要
让一个cpu上能不能有多个核心呢?
intel搞出来了多核cpu,每个核心都相当于完整的cpu,把这些cpu核心都搞到一起
但是也需要软件的配合
软件上就引入了并发编程(为了能够充分利用多核cpu的资源)
能不能让一个cpu核心当成两个来用???
超线程技术
比如cpu有四个核心,但是在超线程的加持下就一个顶俩,相当于一共有八个
4核 (物理核心) ---->8核(逻辑核心)
同架构下基准频率越高越好
软件一般是跟着硬件走的,扬长避短
Ghz就只 1024*1024*1024hz
1秒进行多少次时钟周期,可以近似看做执行多少条指令
cpu的睿频技术 --- cpu的频率动态发生变化,取决于当前的任务多不多
衡量cpu的单核性能,要看基础频率也要看最大睿频
除此之外还有其他的衡量指标(有大佬已经把cpu的水平排出座次,直接参考)
指令~~
简单模拟一下
RAM就是内存,cpu能直接存的数据比较少,计算器是为了支持cpu完成一些计算,保存中间结果的
虽然可以不用理解cpu具体的构造,但是需要理解cpu是怎么执行具体的代码的
这一段指令就是内存中的一段数据
写好的代码想运行,都得编译后把指令加载到内存中才能让cpu执行的
a寄存器就存了14地址里面的内容
默认cpu指令是顺序执行的,但是也可能出现一些跳转的指令..
当前的计算机在cpu执行指令的时候,要经历内存读取数据这样的操作的
这个设定就是冯诺依曼体系结构的精髓
最初是将执行和存储分开了,解耦合,降低硬件设计的成本
随着时间的发展,内存逐渐跟不上cpu的节奏了
之前的缓存是在南北桥上的,现在缓存已经集成到cpu上了
通过流水线,缓存的机制能缓解cpu和内存之间的速度
现在关键的契机:量子计算机可能打破这种结构
算力大幅度提高
结论:
1.cpu要执行的指令是在内存中的(冯诺依曼体系:执行和存储解耦合)
2.cpu要想执行指令就得先取指令,解析指令,才能执行指令
3.取指令是要从内存中读取指令到cpu的寄存器
取指令其实是非常耗时间的(相对cpu执行计算)
因此cpu会通过缓存,流水线来优化效率
4.cpu要解析指令的时候,需要使用指令表,不同架构的cpu支持的指令表不同
指令表已经写死到cpu中了
5.指令在执行过程中,是带有一些操作数,操作数的含义有所不同
6.cpu重要的参数,主频可以近似理解为cpu再一秒钟执行的指令个数
A寄存器的编号是00
B寄存器的编号是01
操作系统是一个软件~~
由代码构成的一个程序,操作系统的主要职责有两个方面
1.管理硬件设备
2.给其他软件提供一个稳定的运行环境 ------->两个词形容:抽象,封装
电脑有很多硬件,不同厂商或者不同型号的硬件都不一样
这个时候就需要操作系统站出来,统一管理硬件设备,给软件提供统一的api
操作系统也提供了一些操作软件的api