计算机要解决的问题
如何表示0和1。
在经历过晶体管等历程后,使用通过CPU进行通电断电过程表示及进行运算;
而内存,是提供给CPU用来计算的运算过程和数据;
由于计算机仅能识别0和1的的形式,所以产生了汇编语言;
汇编语言的本质:机器语言助记符,本质仍是机器语言
CPU的基础组成
PC:Program Counter 程序计数器,记录当前指令地址
Registers:寄存器,暂时存储CPU需要用到的数据
ALU:运算逻辑单元
CU:控制单元
MMU:内存管理单元
CPU乱序执行
在进行读等待的同时执行指令,提高效率
乱序可能引发读取到半初始化的问题
禁止重排序,在cpu层面通过lfence,sfence,mfence,内存屏障来保证屏障前后的操作不可乱序执行。
JVM实现:LL,SS,LS,SL屏障实现
Java中volatile,读操作:只有读完才可以进行写操作,写操作:只有写完才可以进行写操作
Happens-Before
Jvm规定重排序必遵守的问题
1、volatile变量规则:对一个volatile变量进行写操作先行发生于后面的变量的读操作
2、线程启动:start方法优先发生于这个线程每一个操作
3、线程关闭:线程的所有操作都优先于线程关闭检测
。。。
As-If-Serial
当成按照顺序执行。
不管如何排序,单线程执行的结果都不会改变
操作系统
即管理硬件,又管理软件。通过内核进行调度。