计算机组成

编译和解释区别
c语言编译成机器码load到内存,可以直接供cpu执行,而java编译成二进制字节码(java的汇编语言),不能给cpu直接执行,要交给jvm(每个操作系统对应不同的jvm),解释成机器码,再给cpu执行
汇编语言(机器语言)的执行过程
汇编语言的本质:机器语言的助记符 其实它就是机器语言
计算机通电 -> CPU读取内存中程序(电信号输入)
->时钟发生器不断震荡通断电 ->推动CPU内部一步一步执行
(执行多少步取决于指令需要的时钟周期)
->计算完成->写回(电信号)->写给显卡输出(sout,或者图形)

线程上下文切换,把上一个线程寄存器和程序计数器里的数据和地址拿出来,存入缓存,把要执行的线程的数据装入寄存器,进行计算,等时间片到了,再次切换

CPU的基本组成
PC -> Program Counter 程序计数器 (记录当前指令地址)
Registers -> 暂时存储CPU计算需要用到的数据
ALU -> Arithmetic & Logic Unit 运算单元
CU -> Control Unit 控制单元
MMU -> Memory Management Unit 内存管理单元
cache    CPU三级缓存 一个CPU有多个核,每个核有自己的L1,L2,一颗CPU内的多个核共享L3  

禁止乱序
CPU层面:Intel -> 原语(mfence lfence sfence) 或者锁总线

JVM层级:8个hanppens-before原则 4个内存屏障 (LL LS SL SS)

as-if-serial : 不管硬件什么顺序,单线程执行的结果不变,看上去像是serial


读取数据,按块读取,程序局部性原理(在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理),减少IO,提高效率,
不管是从磁盘往内存读,还是内存往缓存读

为什么需要缓存一致性协议
多个线程并发访问一个共享变量时,这些线程的执行处理器上的高速缓存各自都会保留一份共享变量的副本,这带来一个问题,一个处理器对共享变量进行修改,其他处理器如何察觉到该更新并做出适当反应,
以确保后续处理器读取到这个共享变量时可以读取到这个更新.这就是缓存一致性问题,其本质就是防止读脏数据和读取到更新的数据
缓存一致性协议
三级缓存(L1、L2、L3)是什么?
以近代CPU的视角来说,三级缓存(包括L1一级缓存、L2二级缓存、L3三级缓存)都是集成在CPU内的缓存,它们的作用都是作为CPU与主内存之间的高速数据缓冲区,L1最靠近CPU核心;L2其次;L3再次。
运行速度方面:L1最快、L2次快、L3最慢;容量大小方面:L1最小、L2较大、L3最大。CPU会先在最快的L1中寻找需要的数据,找不到再去找次快的L2,还找不到再去找L3,L3都没有那就只能去内存找了。
多核CPU多级缓存一致性协议MESI
多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱。intel的CPU的一致性协议是MESI。CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示)
M: 被修改(Modified) :E: 独享的(Exclusive) S: 共享的(Shared) I: 无效的(Invalid)

缓存行的数据装不下 就得锁住总线
缓存行:

缓存行越大,局部性空间效率越高,但读取时间慢
缓存行越小,局部性空间效率越低,但读取时间快
缓存行对齐:对于有些特别敏感的数字,会存在线程高竞争的访问,为了保证不发生伪共享,可以使用缓存行对齐的编程方式


取一个折中值,目前多用:
64字节
intelCPU缓存行是64字节


NUMA  Non Uniform Memory Access
主板的插槽上,CPU有离自己最近,自己专属的内存,读写效率更高。也可以通过总线访问别的内存。分配内存会优先分配该线程所在CPU的最近内存,UMA不易扩展,CPU数量增多后引起内存访问冲突加剧,CPU很多资源花在争抢内存地址上。

用户态与内核态
操作系统用于管理硬件和应用
kernel用于管理内存,cpu,进程调度等       内核态 用户态   内核空间(只有内核能访问的空间,对于系统的关键访问,需要经过kernel的同意,保证系统健壮性)     用户空间
内核执行的操作 - > 200多个系统调用 sendfile read write pthread fork 

中断
硬件跟操作系统内核打交道的一种机制
软中断(80中断) ==  系统调用
系统调用:int 0x80 或者 sysenter原语
中断是一个信号,是硬件或者软件通知操作系统,产生了某种事件,需要处理 ,和线程上下文切换不是一个概念(由调度器处理) 。系统调用就属于软中断
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值