web 1.系统

冯诺依曼体系:指令只是一种特殊一些的数据

处理器CPU = 运算器+控制器

存储器Memory = 内存   

storage二级存储

外部数据(物理数据)进入到存储器via 输入设备(Input Device)

存储器内的数据出来到外部世界via 输出设备(Output Device)

运算器+控制器+存储器+输入设备+输出设备

CPU+内存+I/O  内部数据交换通过 总线BUS


程序 = 指令+数据

广义数据的存储问题:数|非数的数据(字符串、声音、图片)

要在计算机上进行非数数据的存储:把非数数据转换成数类型的数据via 编码表

字符串 ->字符 Unicode编码(子集ASCII编码)

图片-> RGB编码    红绿蓝0-255/0-255/0-255

声音 -> 波形 

数类型的数据在内存中表示方法

整数、小数...

有限范围内的整数表示:正码、反码、补码(为了表示有范围的数) ->整数

有限范围内的小数表示:IE标准                                                        ->浮点数


接下来我们局限在整形中,但表示的数据可能是数据、指令、字符、图片、声音等

CPU的基本工作原理:

CPU:逻辑算数运算器 处理 与或非、加减乘除、取余

           控制器

          临时存储数据的存储单元(每个都只能保存一个整形数,但是不止一个)——寄存器register

          现代的高级CPU为了提升性能,一般都带有缓存(CPU内缓存)level1、level2、level3

组件:与门(and gate)、或门(or gate)、非门(not gate)、异或门(xor gate)

ALU算术逻辑运算单元

        算数:加法、减法、乘法、除法、取余

        逻辑:与或非

利用与或非门+异或门构建8位(bit)加法器:

 7*全加器(数字a+数字b+进位c) +1*半加器(数字a+数字b,例如个位数字相加,进位到十位才有)

通过两个半加器就可以得到8位(bit)全加器

 三个输入:a:参与运算的第一个数

                   b:参与运算的第二个数

                   c:本次ALU的运算是什么 pocode

输出:正常输出

CPU是计算机的核心,ALU是CPU的核心

所有程序的执行,本质上都是计算+读取(memory->register)+存入(register->memory)

程序:opcode1 + a1+b1

opcode2 + a2+b2

opcode3 + a3+b3

....

a、b都需要放到寄存器临时保存

计算的结果也需要寄存器来保存

本次要计算的Opcode是谁告诉ALU的?

这些都是由控制单元CU(control Unit)完成的

PC:下一条要执行的指令在内存中的地址

IR:下一条要执行的指令

指令作为一种特殊的数据,完全也是以整形保存在内存中

1.取码阶段:CU根据PC寄存器的值,去内存的响应位置,把数据(指令)读取到IR寄存器中,正常情况下,PC寄存器中的值会自动+1

2.解码阶段:CU按照预先设定的指令集解读指令数据(opcode +操作数)

例如:0010 1110

          人为规定过:0010是opcode

          查询指令表,直到0010代表的意思是,从后面地址指定的内存处,将数据读取到A寄存器

          地址:1110  代表十进制的14

3.执行阶段:

LOAD指令应该由CU执行,所以按照规定执行的指令:

从内存的14地址处,将数据读取到A寄存器中

正常模式下的CPU流程周期:ALU+CU

 1.由于硬件中PC自动加一,所以我们的代码变成指令才能顺序的往下去执行

2.代码中的一条语句,很可能是需要多条指令才能完成

语句是一组指令的封装抽象,变量是一段内存空间的封装抽象

3.PC寄存器中的值在这个指令周期中很关键,可以控制执行哪里的指令


CPU的运算快慢,实际上就是看CPU执行指令周期的频率(假定每个指令周期的频率是恒定的)

CPU的主频可以粗略的看做:CPU每秒钟能执行多少个指令周期

分支语句怎么来的:if else while for break continue

CPU中往往会提供一些指令,这些指令可以修改PC的值

通过CPU中预先规定的指令,可以修改PC中的值(带条件修改),进而影响执行流executio flow

只要有个起始位置填充到PC里,执行流就可以正常的运作起来了

我们平时的Main方法:

我们的程序启动:有“人”把我们程序翻译出来的一条指令的第一条地址放到PC中,我们的程序就正常跑起来了。

为什么我们程序中有函数(方法)等概念,并不是计算机硬件要用到这些概念,这些概念是为了方便人(程序员)而诞生的。


java中的方法是保存在jvm内存区的哪块区域? 方法区

Jvm中的内存区:栈、堆、方法区

指令主要放在方法区

CPU的正常工作流程:取码->编码->执行周期

只要你的电脑在开机状态下,CPU就不停的在循环着这个周期

在硬件CPU的视角中,只有指令的概念,没有指令属于谁的概念


CPU的中断模式Interrupt Mode

正常模式下,CPU可以顺序执行,可以分支执行,但总归只能按照既定顺序去执行

但现实很多时候,需要暂时中断CPU的当前执行流,先让CPU去做点其他的工作,再回过头来继续原来的执行流。

这是咋做到的?

硬件中提供了一种机制(中断)让CPU停下

1.保存当前的PC的值到内存某个位置

2.修改PC的值,让它执行其他执行流

3.其他执行流执行结束之后,通过将刚才保存的PC的值恢复到PC寄存器

4.继续原来的执行流

中断有编号,内存中提前保存好了中断向量表

例如:

中断编号     地址

001            0x3F5C

002            0x4444

003            0x9492

中断经常用作:

1.I/O设备的处理 ,当有外部数据到达Input设备时,触发某个中断,让当前正在执行的执行流暂停,切换到Input驱动对应的执行流,把Input设备中读取到的数据,放到内存的某个位置,恢复之前的执行流

2.操作系统中用作进程调度(线程调度)

CPU的主要工作模式结束~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值