首页 > 其他分享 >操作系统学习笔记(一)——硬件

操作系统学习笔记(一)——硬件

时间:2023-08-27 17:11:19浏览次数:51  
标签:cache 操作系统 Cache 笔记 硬件 指令 内存 数据 CPU

一、冯诺依曼模型

定义计算机基本结构为5个部分:存储器、运算器、控制器、输入设备、输出设备。

运算器和控制器在中央处理器(CPU)里,存储器就是常见的内存,输入输出设备就是计算机外接的设备,比如键盘是输入设备,显示器是输出设备。

1、内存

 程序和数据存储在内存里,存储数据的基本单位是字节,1字节等于8位,每个字节对应一个内存地址。

2、中央处理器(CPU)

32位和64位表示位宽,表示CPU一次可以计算的数据量

  • 32位CPU一次计算4个字节
  • 64位CPU一次计算8个字节

2.1 寄存器

  • 通用寄存器:用来存放需要进行运算的数据
  • 程序计数器:存储CPU下一条指令的内存地址
  • 指令寄存器:存放当前正在执行的指令

2.2 控制单元

负责控制CPU工作

2.3 逻辑运算单元

负责计算

2.4 CPU cache

在CPU里,分为L1、L2、L3 这样的三层高速缓存

 

3、总线

用于CPU和内存以及其它设备之间的通信

  • 地址总线:用于指定CPU将要操作的内存地址
  • 数据总线:用于读写内存的数据
  • 控制总线:用于发送和接收信号,比如中断、设备复位等信号

 

4、输入、输出设备

输入设备向计算机输入数据,计算机经过计算后,把数据输出给输出设备。

 

二、CPU执行程序的过程

第一步:CPU读取程序计数器的值,然后CPU的控制单元操作地址总线指定需要访问的内存地址,接着通知内存设备准备数据,数据准备好后通过数据总线将指令数据传给CPU,CPU收到后将指令数据保存到指令寄存器。

第二步:程序计数器的值自增,表示下一条指令。

第三步:CPU分析指令寄存器中的指令,确定指令的类型和参数,如果是计算类型的指令就把指令交给逻辑运算单元运算,如果是存储类型的指令,则交由控制单元执行。

 

三、存储器的层次结构

 1、寄存器

在CPU里,存储正在运算的数据

2、CPU cacle

在CPU里,分为L1、L2、L3 这样的三层高速缓存,L1离CPU最近访问速度最快,L3最慢。是SRAM静态随机存储器芯片,只要有电数据就可以保持存在,断电就失去数据。

3、内存

是DRAM动态随机存储器,比SRAM容量大,造价便宜。需要定时刷新电容才能保证数据不会丢失。

4、SSD/HDD硬盘

SSD就是固体硬盘,断电后数据还是存在的。HDD是机械硬盘。

 

四、CPU缓存一致性

如果数据写入 Cache 之后,内存与 Cache 相对应的数据将会不同,这种情况下 Cache 和内存数据都不一致了,于是我们肯定是要把 Cache 中的数据同步到内存里的。将cache写回内存的两种策略:
1、写直达

把数据同时写回内存和cache:

  • 如果数据已经在 Cache 里面,先将数据更新到 Cache 里面,再写入到内存里面;
  • 如果数据没有在 Cache 里面,就直接把数据更新到内存里面。

写直达的问题是无论数据是否在cache里,每次写操作都会写回到内存,这样会花费大量时间。

2、写回

当发生写操作时,新的数据只写到cacle里,只有当修改过的cache被替换的时候才写回内存。这样减少了数据写回内存的频率。

 

CPU是多核的,每个CPU都有独立的cache,如何保证多核CPU的缓存一致性?

要解决这一问题,就需要一种机制,来同步两个不同核心里面的缓存数据。要实现的这个机制的话,要保证做到下面这 2 点:

  • 第一点,某个 CPU 核心里的 Cache 数据更新时,必须要传播到其他核心的 Cache,这个称为写传播Write Propagation);
  • 第二点,某个 CPU 核心里对数据的操作顺序,必须在其他核心看起来顺序是一样的,这个称为事务的串行化Transaction Serialization)。

写传播的实现方法:

基于总线嗅探机制的协议:MESI协议

MESI 协议,是已修改、独占、共享、已失效这四个状态的英文缩写的组合。整个 MSI 状态的变更,则是根据来自本地 CPU 核心的请求,或者来自其他 CPU 核心通过总线传输过来的请求,从而构成一个流动的状态机。另外,对于在「已修改」或者「独占」状态的 Cache Line,修改更新其数据不需要发送广播给其他 CPU 核心。

 

标签:cache,操作系统,Cache,笔记,硬件,指令,内存,数据,CPU
From: https://www.cnblogs.com/coooookie/p/17660502.html

相关文章

  • openGauss学习笔记-52 openGauss 高级特性-LLVM
    openGauss学习笔记-52openGauss高级特性-LLVMopenGauss借助LLVM(LowLevelVirtualMachine)提供的库函数,依据查询执行计划树,将原本在执行器阶段才会确定查询实际执行路径的过程提前到执行初始化阶段,从而规避原本查询执行时候伴随的函数调用、逻辑条件分支判断以及大量的数据读取......
  • go 进阶训练营 微服务可用性(下)笔记
    降级:减少工作量,丢弃不重要的请求。确定具体采用哪个指标作为流量评估和优雅降级的决定性指标:如CPU、延迟、队列长度、线程数量、错误等当服务进入降级时,需要执行什么动作?流量抛弃或者优雅降级应该在服务的哪一层实现?是否需要在整个服务的每一层都实现,还是可以选择某个高层面......
  • Pytest+Jenkins 学习笔记
    Pytest+Jenkins学习笔记在软件测试工作中,单元测试通常是由开发人员执行的、针对最小单元粒度的组件测试,在完成了单元粒度的测试任务之后,通常就需要交由专职的测试人员将这些单元级的组件放到粒度更大的功能组件或子系统中来进行整合性的测试了。在专业术语中,粒度介于单元测试与......
  • mormot2 笔记(四) Services的使用
    constructorTMyRestServer.Create(Port:Word);begininheritedCreate;FRestServerDB:=TRestServerDB.Create(TOrmModelFactory.ModelInstance,SQLITE_MEMORY_DATABASE_NAME);FRestServerDB.DB.Synchronous:=smOff;FRestServerDB.DB.LockingMode:=lmExc......
  • 学习笔记413—python实现BP神经网络进行预测和误差分析(附源代码)
    python实现BP神经网络进行预测和误差分析(附源代码)反向传播算法也称为BP神经网络,是一种带有反馈的神经网络反向学习方法,它可以对神经网络的各层上的各个神经元的各个神经元之间的连接权重进行不断迭代修改,使神经网络将输入数据转换成期望的输出数据 BP神经网络的学习过程由正向......
  • Mongodb 笔记
    MongoDb:非关系型数据库,基于分布式文件存储的开源数据库系统,在高负载的情况下,添加更多的节点,可以保证服务器的性能MongoDB操作 文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式。BSON是一种类似JSON的二进制形式的存储格式,是BinaryJSON的......
  • opencv笔记
    opencv图像RGBopencv读取的格式是BGR基本用法读取图片importcv2img=cv2.imread(r'C:\Users\Administrator\Pictures\951c76ee-469e-4084-96db-3d66e5250299.jpg')print(img)print(img.size)print(img.shape)print('---'*30)img1=cv2.imread(r&......
  • [算法学习笔记][刷题笔记] 2023/8/26&8/27 解题报告状压 dp
    题单状压dp状压dp是一种非常暴力的算法,它直接记录不同的状态,通过状态进行转移。状压dp可以解决NP类问题。它的原理是暴力枚举每一种可能的状态。所以它的复杂度是指数级的。只能求解小范围的问题。关于记录状态:状压dp通过一个二进制串来记录状态。显然二进制串可以转......
  • MFC视频教学第一课,做一个简单的界面,理解应用程序和操作系统之间的消息传递机制
     #include<windows.h>#include<stdio.h>LRESULTCALLBACKWinSunProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam);//WinMain是操作系统调用的,是系统的入口函数intWINAPIWinMain(HINSTANCEhInstance,//当前应运程序......
  • 设计模式学习笔记——接口隔离原则
    定义:1、客户端不应该依赖于它不需要的接口2、类间的依赖关系应该建立在最小的接口上通俗的讲,应该建立单一的接口,不要建立臃肿庞大的接口,即接口应该尽量细化,同时接口中的方法尽量少。举例:要成为一名美女必须具备三个条件:面貌、身材、气质,星探找美女的过程如下类图所示:IPrettyGirl接......