计算机的底层知识

用电来代表二进制‘0’ 和‘1’(高/低电频)

晶体管(二极管)——逻辑开关(开与闭)——逻辑门:与门 或门 非门 与或 与非 与或

 计算机两大中心  ——cpu

ALU(运算单元)   PC(指令寄存器)  cache(缓存) register(寄存器)   ---- 内存main memory

多核cpu                                                                                                   

程序:计算机在执行任务时,对它所处理的对象以及处理规则的一种描述 例如..(...QQ.exe

进程:程序开始运行后放入内存的内容(资源分配的基本单位)

线程:程序执行的基本单位

程序在cpu与内存之间是如何运行的:运行时cpu 会先从内存中找到一条指令地址,把其读入后发现这条指令还需要数据,再从内存中提取数据到register后,alu开始运算,完成后把结果写回内存 

线程调度的方法:线程调度器,os(操作系统)

线程切换的概念:cpu保存线程,执行新线程,恢复线程,继续执行源线程的过程

超线程:一个ALU对应多个pc(线程:cpu执行的最基本单位)

一个运算单元,两组线程对应的资源单元

单核cpu一次只能执行一个线程(例如:四核八线程//四个ALU,每个核内有两组registers)       

//保存线程:由于一个线程运行后不一定全部完成,下一个线程进入后会冲刷数据,所以需对上一线程指令数据进行保存(保存入cache)

缓存的意义:(局部性原理) 

1.时间局部性(某一数据被访问,下一次可能很快再被访问,缓存提高了访问效率) 2.空间局部性(相邻数据访问的便捷性)

cache line

一个cache line    64个字节

cpu在读取数据时若缓存中没有所需的数据时,则会从mian memory中读取,读取时一次会把这个数据所在的cache line全读入

volatile的意思:1.线程间的可见性  2.禁止cpu的乱序执行   为了使不同核或不同cpu中缓存一致性时,inter cpu可以通过MESI实现或用缓存锁或lock

同样的缓存行在不同核心的缓存一致性问题:

出现的原因:多线程环境下计算机几乎都是多核心的;每个核心都有自己的缓存,就会出现多个cpu同时修改同一数据,导致缓存不一致的情况

解决办法:(MESI)数据状态(缓存行的状态)

modified:数据有效,数据被修改了,和内存中数据不一致,数据只存在于本cache中。

exclusive:(独享)数据有效,数据和内存中数据一致,数据只存在于本cache中。

share:数据有效,数据和内存中的数据一致,数据存在多个cache中

invalid:数据无效,一旦数据被标记为无效,那效果就等于它从来没被加载到缓存中

*只有当缓存段处于E或M时,处理器才能往缓存中写入(处理器处于独占状态)

数据读写的四种操作:

local read (从缓存中读取) local write (写入到缓存中) remote write (写入到其他cpu缓存中)

remote read (读取其他cpu缓存)

16种状态转换

 cpu乱序执行

意义:打乱执行顺序使得cpu效率得以提高

 用户线程和内核的关系

有点如:qpp产生的就和内核线程一一对应如:c语言程序   但也有不同的如(go语言)

*一个JAVA的线程对应一个内核线程1比1的关系   go语言是M比N的关系且(M远大于N)

go语言

go'语言中为协程:起了多个协程后形成队列放入内核线程中//(JAVA内没有天然协程)

 锁的概念:

(逻辑概念)大致为固定一部分内容在固定时间单独运行的虚拟锁,保证数据的一致性(和mesi的作用大致相同)

不持有锁的线程在等待时所持有的锁

1.自旋锁 (轻量级锁)忙等待   2.进队列等待(经过os调度)*根据实际情况用不同的锁实现cpu高校运行

     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值