热门标签 | 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的效率。


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


推荐阅读
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 在Java编程中,`AbstractClassTest.java` 文件详细解析了抽象类的使用方法。该文件通过导入 `java.util.*` 包中的 `Date` 和 `GregorianCalendar` 类,展示了如何在主方法 `main` 中实例化和操作抽象类。此外,还介绍了抽象类的基本概念及其在实际开发中的应用场景,帮助开发者更好地理解和运用抽象类的特性。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 具备括号和分数功能的高级四则运算计算器
    本研究基于C语言开发了一款支持括号和分数运算的高级四则运算计算器。该计算器通过模拟手算过程,对每个运算符进行优先级标记,并按优先级从高到低依次执行计算。其中,加减运算的优先级最低,为0。此外,该计算器还支持复杂的分数运算,能够处理包含括号的表达式,提高了计算的准确性和灵活性。 ... [详细]
  • 在嵌入式Linux系统中,性能低下通常由CPU、内存和I/O三个关键因素引起。为了有效提升系统性能,首先需要识别并定位性能瓶颈。通过综合分析这些瓶颈,可以采取针对性的优化措施,如调整内核参数、优化算法和改进数据结构等,从而显著提高系统的整体性能。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 蓝桥杯算法实战:节点选取策略优化分析
    本文针对蓝桥杯算法竞赛中的节点选取策略进行了深入分析与优化。通过对比不同节点选择方法的效果,提出了基于贪心算法和动态规划的综合优化方案,旨在提高算法效率和准确性。实验结果表明,该优化策略在处理大规模数据集时表现出色,显著提升了算法性能。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 哈希表(Hash Table)是一种高效的查找算法,与传统的链表和树结构相比,其在查找过程中无需进行逐个元素的比较。本文将深入探讨哈希表的基本原理、应用场景以及优化策略,帮助读者全面理解其在实际开发中的优势和局限性。通过实例分析和代码示例,我们将展示如何有效利用哈希表提高数据处理效率,并解决常见的冲突问题。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
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社区 版权所有