热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【系统架构师精讲】(16):操作系统核心概念——寄存器、内存与缓存机制详解

在计算机系统架构中,中央处理器(CPU)内部集成了多种高速存储组件,用于临时存储指令、数据和地址。这些组件包括指令寄存器(IR)、程序计数器(PC)和累加器(ACC)。寄存器作为集成电路中的关键存储单元,由触发器构成,具备极高的读写速度,使得数据传输非常迅速。根据功能不同,寄存器可分为基本寄存器和移位寄存器,各自在数据处理中发挥重要作用。此外,寄存器与内存和缓存机制的协同工作,确保了系统的高效运行。

中央处理器内的组成部分,有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,存器有累加器(ACC)。寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

分类

  • 数据寄存器- 用来储存整数数字(参考以下的浮点寄存器)。在某些简单/旧的CPU,特别的数据寄存

    器是累加器,作为数学计算之用

  • 地址寄存器- 持有存储器地址,用来访问存储器。在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器(可能出现一个或多个)

  • 通用目的寄存器(GPRs) - 可以保存数据或地址两者,也就是说它们是结合数据/地址 寄存器的功用,修改他们的值通常不会对计算机的运行造成很大的影响。

  • 浮点寄存器(FPRs) - 用来储存浮点数字。

  • 常数寄存器- 用来持有只读的数值

  • 向量寄存器- 用来储存由向量处理器运行SIMD(Single Instruction, Multiple Data)指令所得到的数据

  • 特殊目的寄存器- 储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。

  • 指令寄存器(instruction register)- 储存现在正在被运行的指令

  • 索引寄存器(index register)- 是在程序运行时用来更改运算对象地址之用。

原理

【深入浅出-系统架构师】(16):操作系统基础知识——寄存器、主存、缓存

寄存器的基本单元是 D触发器,按照其用途分为基本寄存器和移位寄存器

基本寄存器(见图)是由 D触发器组成,在 CP 脉冲作用下,每个 D触发器能够寄存一位二进制码。在 D=0 时,寄存器储存为 0,在 D=1 时,寄存器储存为 1

CPU的频率就是指数字集成电路的时钟频率

【深入浅出-系统架构师】(16):操作系统基础知识——寄存器、主存、缓存

移位寄存器按照移位方向可以分为单向移位寄存器和双向移位寄存器,单向移位寄存器是由多个 D 触发器串接而成

寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据

主存

主存储器,存放指令和数据,并能由中央处理器(CPU)直接随机存取,一般采用半导体存储器,与辅助存储器相比有容量小、读写速度快、价格高等特点,存放一个机器字的存储单元,通常称为字存储单元,相应的单元地址叫字地址,而存放一个字节的单元,称为字节存储单元,相应的地址称为字节地址,如果计算机中可编址的最小单位是字存储单元,则该计算机称为按字编址的计算机。如果计算机中可编址的最小单位是字节,则该计算机称为按字节编址的计算机。一个机器字可以包含数个字节,所以一个存储单元也可以包含数个能够单独编址的字节地址。

时间

从一次读操作命令发出到该操作完成,将数据读入数据缓冲寄存器为止所经历的时间

周期

连续启动两次独立的存储器操作(如连续两次读操作)所需间隔的最小时间

分类

  • RAM

RAM一般使用动态半导体存储器件(DRAM),因为CPU工作的速度比RAM的读写速度快,所以CPU读写RAM时需要花费时间等待,这样就使CPU的工作速度下降。人们为了提高CPU读写程序和数据的速度,在RAM和CPU之间增加了高速缓存(Cache)部件。Cache的内容是随机存储器(RAM)中部分存储单元内容的副本

  • ROM

只读存储器,出厂时其内容由厂家用掩膜技术写好,只可读出,但无法改写。信息已固化在存储器中,一般用于存放系统程序BIOS和用于微程序控制

  • PROM

    PROM是可编程ROM,只能进行一次写入操作(与ROM相同),但是可以在出厂后,由用户使用特殊电子设备进行写入。

  • EROM

EPROM是可擦除的PROM,可以读出,也可以写入。但是在一次写操作之前必须用紫外线照射,以擦除所有信息,然后再用EPROM编程器写入,可以写多次

  • EEROM

EEPROM是电可擦除PROM,与EPROM相似,可以读出也可写入,而且在写操作之前,不需要把以前内容先擦去,能够直接对寻址的字节或块进行修改

  • 闪速存储器

介于EPROM与EEPROM之间。闪速存储器也可使用电信号进行快速删除操作,速度远快于EEPROM。但不能进行字节级别的删除操作,其集成度高于EEPROM

连接方式

主存与CPU之间的硬连接:主存与CPU的硬连接有三组连线:地址总线(AB)、数据总线(DB)和控制总线(CB), 存储器地址寄存器(MAR)和存储器数据寄存器(MDR) 是主存和CPU之间的接口,MAR可以接收由程序计数器(PC)的指令地址或来自运算器的操作数的地址,以确定要访问的单元。MDR是向主存写入数据或从主存读出数据的缓冲部件。MAR和MDR从功能上看属于主存,但通常放在CPU内

CPU读主存

CPU-(需要读取数据的地址)->MAR->AB-(读命令)->DB-(交换信息)->MDR-(读数据)->CPU

CPU写主存

CPU-(需要写数据的地址)->MAR->AB-(写命令)->MDR->DB

无论是读还是写数据 DB起到了数据交换作用

CPU与主存同步

  • CPU和主存间没有统一的时钟,由主存工作完成信号(MFC)通知CPU“主存工作已完成”。
  • CPU和主存采用统一时钟,同步工作,因为主存速度较慢,所以CPU与之配合必须放慢速度,在这种存储器中,不需要主存工作完成信号。

寄存器和主存速度

【深入浅出-系统架构师】(16):操作系统基础知识——寄存器、主存、缓存

缓存

【深入浅出-系统架构师】(16):操作系统基础知识——寄存器、主存、缓存

位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速率却比内存要快得多。缓存的出现主要是为了解决CPU运算速率与内存读写速率不匹配的矛盾,缓存往往使用的是RAM,L1Cache(一级缓存)是CPU第一层高速缓存,一般L1缓存的容量通常在32—256KB,L1分为数据Cache,指令Cache,L2Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片,内部的芯片二级缓存运行速率与主频相同,而外部的二级缓存则只有主频的一半,缓存只是内存中少部分数据的复制品。二级缓存是比一级缓存速率更慢,容量更大的内存,主要就是做一级缓存和内存之间数据临时交换的地方用。为了适应速率更快的处理器。

缓存基本上都是采用SRAM存储器,SRAM是英文Static RAM的缩写,它是一种具有静态存取功能的存储器,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,这也是不能将缓存容量做得太大的重要原因。它的特点归纳如下:优点是节能、速率快、不必配合内存刷新电路、可提高整体的工作效率,缺点是集成度低、相同的容量体积较大、而且价格较高,只能少量用于关键性系统以提高效率。

工作原理

缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高,一般把静态RAM缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存。

作用

  • 预读取

【深入浅出-系统架构师】(16):操作系统基础知识——寄存器、主存、缓存

当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中,当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速率远远高于磁头读写的速率,所以能够达到明显改善性能的目的。

  • 写入

当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上,掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地。

从技术角度上说,高容量缓存的算法是直接影响到硬盘性能发挥的重要因素。更大容量缓存是未来硬盘发展的必然趋势

缓存算法

  • 最近最少使用算法,最近一段时间内最少被访问过的行淘汰出局,因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法

命中率

CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%。也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取。由于不能准确预测将要执行的数据,读取L2的命中率也在80%左右(从L2读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。在一些高端领域的CPU(像Intel的Itanium)中,我们常听到L3 Cache,它是为读取L2 Cache后未命中的数据设计的—种Cache,在拥有L3 Cache的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
author-avatar
En199010221
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有