计算机是如何工作的???

当前计算机内部的结构,整体的规则就是冯诺依曼体系结构.

目录

(1)CPU

CPU的主流架构:

CPU的核心参数:

1)核心数

2)频率

CPU的寄存器:

(2)CPU执行指令过程:​编辑

(3)操作系统

(4)进程:

进程的管理:

PCB属性

1)PID进程的标识符.

2)内存指针(一组)

3)文件描述符表(顺序表/数组)

4)进程状态

5)进程优先级

6)进程的上下文

7)进程的记账信息:


(1)CPU

中央处理单元,一个计算机最核心的部分,算术运算和逻辑判断(CPU做的比较好的公司:英特尔,AMP,高通.......桌面:英特尔:酷睿/酷睿ultra,AMD:锐龙 服务器:英特尔:志强,AMD:霄龙)

CPU的主流架构:

1)x86/x64架构 给桌面端/服务器来使用.性能释放更强,功耗更高

2)ARM架构 给移动端/嵌入式使用.性能更弱,功耗低

3)RISC-V(罗马数字五) 一套开源的CPU指令架构

CPU的核心参数:

1)核心数

有几个方框就有几个核心.

原本的CPU是单核心,这时就需要CPU的集成度更高,包含更多的运算单元(即使每个运算单元的体积更小),之后向多核超线程方向发展,服务器有很多都是"双路服务器",一个主板上插着2个CPU

2)频率

CPU的运算速度,使用频率来描述,可以粗暴的理解成一秒执行多少个指令(这么说不够严谨).1.90GHz表示一秒运算19亿次

当前速度:

CPU的频率会根据任务量发生动态调整,但是随着频率的增加,消耗的电量更高,发热更多.由于计算机都有功耗墙,CPU达到一定的阈值,就会自动降频,如果散热工作做得好,可以让频率达到更高的水准

CPU的寄存器:

CPU在计算的时候,需要先把数据从内存读到CPU里才能进行运算.寄存器就是CPU里储存数据的部分,内存空间比内存更小,速度比内存更快,成本也比内存更高,断电后会丢失.寄存器的空间大小往往就是几kb.因此CPU就需要计算的时候反复从内存加载数据.现代CPU引入了缓存.某个内存的数据,经常使用,但内存器又存不下,就可以放到缓存里面,数据使用频率越高就往L1里面放,没有那么高就往L3里面放,中间就放L2.

L1空间最小,速度最快.L3空间最大,速度最慢(也比内存快很多)

对于java程序员来说,开发程序,往往不会对缓存区分这么细,通常会把寄存器和缓存视为一个整体

(2)CPU执行指令过程:

这是一个简化版的指令表,真实的指令表要复杂的多,假设每个指令只有8bit,真实的指令要长的多.

8bit分为两个部分,前4bit是操作码(opcode)表示指令是干什么的.后4bit是操作数(类似于参数)

RAM表示RAM内存全称随机访问内存器

C语言写好的程序,先编译成可执行文件(exe)进行运行的时候,操作系统就会把exe加载到内存中,CPU中存在一个特殊的寄存器"程序计数器",保存接下来要从哪个内存位置开始执行指令("程序计数器" 在exe加载到内存之后会由系统自动设置好)随着指令的执行,程序计数器的值也会随之发生变化,默认情况下是+1自增过程,但是如果遇到"跳转语句"(if ,while......)就会被设置为其他值

此处我们将程序计数器假设为0,从0开始执行指令

执行程序的三个重要阶段:

1)取指令:CPU从内存中读取到指令到CPU内部(有专门的寄存器存储读取到的指令)

2)解析指令:识别这个指令时做什么的,以及对应的功能和操作数

3)执行指令

修改指令:

例如:做一个服务器开发,这个服务器非常重要且不能重启,但是服务器存在严重的bug,但又不能修复bug重启程序,就可以考虑"打热补丁"(一个比较典型的指令级开发场景,给程序"打热补丁")

写程序的指令是在内存中的,对应有bug的指令也是其中一部分,找到有bug的指令,直接修改,改成没有bug的指令,或者在这个指令前加上跳转指令,让bug逻辑不去执行,而去执行正确的新的指令

(3)操作系统

(给管理不同的硬件设备,给软件提供稳定的运行环境)

1)Windows

2)Linux

3)Mac OS

4)Android

操作系统管理硬件设备,不是系统直接操作硬件,而是硬件厂商会提供对应的"驱动程序",操作系统是通过对应的驱动程序间接操作硬件设备的

(4)进程:

就是正在执行的应用程序

1)没有运行的时候,是一个exe文件,躺在硬盘上

2)运行的时候,exe就会被加载到内存中,并CPU执行里面的指令

执行进程的指令,就需要硬件资源

进程的管理:

1)描述 通过结构体/类,把进程的各种属性表述出来

2)组织 通过结构体,把多个上面的结构体穿起来,并进一步进行各种增删改查

对于Linux操作系统来说,使用称"PCB(进程控制块)"这样的结构体来描述进程信息,简单的认为通过链表的方式将上述多个PCB串联到一起,创建新的进程(双击exe,运行起程序)就相当于创建了一个PCB结构体,并且插入到链表中,销毁进程,就是把PCB从链表上删除掉,并且释放这个PCB结构体,查看进程链表,就是遍历这个链表,依次显示出对应的信息

PCB属性

是一个非常复杂的结构体,里面包含的属性是非常多的

1)PID进程的标识符.

同一时刻,一个机器上的多个进程PID是唯一的不会重复.系统内部的很多操作,都是通过PID找到相应的进程

2)内存指针(一组)

描述进程依赖的指令和数据都在内存的哪个区域.操作系统,运行exe,就会读取exe中的指令和数据,加载到内存中(内存地址)

3)文件描述符表(顺序表/数组)

描述了进程打开了那些文件(对应硬盘上的数据)

------------------------------------------------------------------------------------------------------------------------

CPU负责执行,CPU每个核心负责执行一个进程,一个核心一会运行进程1,一会运行进程2,一会运行进程3,由于CPU的运行速度很快,是上述切换速度也非常快,肉眼察觉不到(分时复用).在宏观上同时执行,称为"并发执行".现在有了多个核心CPU,此时,每个核心和核心之间,微观上也能同时执行不同的进程,称为"并行进程".平时我们也将并行和并发统称为"并发",对应的编程手法,也称之为"并发编程"

以下属性(4-7)相互配合,共同构成了,进程调度的核心逻辑.用来支持并发编程

4)进程状态

可以随时被调度到CPU上执行指令的状态,称为"就绪状态".无法调度到CPU上执行,例如进行IO操作(读写硬盘/读写网卡)这种状态称为"阻塞状态"

5)进程优先级
6)进程的上下文

分时复用,一个进程执行一会之后,又要从进程上调度走,或一段时间,还会调度回CPU,这时要沿着上次执行的结果继续进行执行.

对于进程来说,就是寄存器中的值,CPU有许多寄存器,这些寄存器就共同描述了上述数据,PCB是内存的数据,把寄存器中的值都保存到PCB特定的属性中,下次调度PCB就可以从这里的属性中把数据恢复到对应的寄存器中了

7)进程的记账信息:

优先级加持吃下,对于不同的进程,吃到的资源,差异性越来越大.操作系统,统计每个进程在CPU执行的时间,通过这个来进一步调整调度的策略

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值