CPU/寄存器/内存

  因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来。

  CPU,全名Central Processing Unit(中央处理器)。这是一块超大规模的集成电路,包含上亿的晶体管,是一台计算机的运算核心(Core)和控制核心(ControlUnit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
  它的主要构成是:运算器、控制器、寄存器
  运算器:可以执行定点或浮点算术运算操作、移位操作以及逻辑操作,也可执行地址运算和转换。
  控制器:主要是负责对指令译码,并且发出为完成每条指令所要执行的各个操作的控制信号。其结构有两种:一种是以微存储为核心的微程序控制方式;一种是以逻辑硬布线结构为主的控制方式。
  寄存器:寄存器部件,包括寄存器、专用寄存器和控制寄存器。通用寄存器又可分定点数和浮点数两类,它们用来保存指令执行过程中临时存放的寄存器操作数和中间(或最终)的操作结果。 通用寄存器是中央处理器的重要部件之一。

  工作过程:
  第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。由程序计数器(Program Counter)指定存储器的位置。(程序计数器保存供识别程序位置的数值。换言之,程序计数器记录了CPU在程序里的踪迹。)
  第二阶段:解码(控制器)
  第三阶段:执行,算术逻辑单元(ALU,Arithmetic Logic Unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而输出将含有总和的结果。ALU内含电路系统,易于输出端完成简单的普通运算和逻辑运算(比如加法和位元运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里可能会设置运算溢出(Arithmetic Overflow)标志。
  第四阶段:回写,缓冲Cache或者更大更廉价的低俗存储器(内存、硬盘等等)

  寄存器:是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU中的寄存器就是其中一种,作为软硬件的接口,为广泛的通用编程用户所熟知。

  常见类型
  1)数据寄存器- 用来储存整数数字(参考以下的浮点寄存器)。在某些简单/旧的CPU,特别的数据寄存
  2)寄存器
  3)寄存器
  4)器是累加器,作为数学计算之用。
  5)地址寄存器- 持有存储器地址,用来访问存储器。在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。
  6)通用目的寄存器(GPRs) - 可以保存数据或地址两者,也就是说它们是结合数据/地址 寄存器的功用。
  7)浮点寄存器(FPRs) - 用来储存浮点数字。
  8)常数寄存器- 用来持有只读的数值(例如0、1、圆周率等等)。
  9)向量寄存器- 用来储存由向量处理器运行SIMD(Single Instruction, Multiple Data)指令所得到的数据。
  10)特殊目的寄存器- 储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。
  11)指令寄存器(instruction register)- 储存现在正在被运行的指令。
  12)索引寄存器(index register)- 是在程序运行时用来更改运算对象地址之用。

特点
寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。但同存储器相比,寄存器又有自己独有的特点:
①寄存器位于CPU内部,数量很少,仅十四个
②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据,对于386/486处理器中的一些寄存器则能存储32bit数据
③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。

  作用
  1.可将寄存器内的数据执行算术及逻辑运算
  2.存于寄存器内的地址可用来指向内存的某个位置,即寻址
  3.可以用来读写数据到电脑的周边设备。

  简单的说:指令解析 - 数据/操作(寄存器)- 回写(cache/memory/disk)

  计算机的存储层次(memory hierarchy)之中,寄存器最快,内存其次,最慢的是硬盘。同样都是晶体管存储设备,为什么寄存器比内存快呢?Mike Ash写了一篇很好的解释,非常通俗地回答了这个问题,有助于加深对硬件的理解。

  原因一:距离不同
  距离不是主要因素,但是最好懂,所以放在最前面说。内存离CPU比较远,所以要耗费更长的时间读取。
以3GHz的CPU为例,电流每秒钟可以振荡30亿次,每次耗时大约为0.33纳秒。光在1纳秒的时间内,可以前进30厘米。也就是说,在CPU的一个时钟周期内,光可以前进10厘米。因此,如果内存距离CPU超过5厘米,就不可能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在CPU内部,当然读起来会快一点。距离对于桌面电脑影响很大,对于手机影响就要小得多。手机CPU的时钟频率比较慢(iPhone 5s为1.3GHz),而且手机的内存紧挨着CPU。

  原因二:硬件设计不同(1 Byte表示一个字节, 1B=8bit)
  最新的iPhone 5s,CPU是A7,寄存器有6000多位(31个64位寄存器,加上32个128位寄存器)。而iPhone 6s的内存是1GB,约为80亿位(bit)。这意味着,高性能、高成本、高耗电的设计可以用在寄存器上,反正只有6000多位,而不能用在内存上。因为每个位的成本和能耗只要增加一点点,就会被放大80亿倍。事实上确实如此,内存的设计相对简单,每个位就是一个电容和一个晶体管,而寄存器的设计则完全不同,多出好几个电子元件。并且通电以后,寄存器的晶体管一直有电,而内存的晶体管只有用到的才有电,没用到的就没电,这样有利于省电。这些设计上的因素,决定了寄存器比内存读取速度更快。

  原因三:工作方式不同
  寄存器的工作方式很简单,只有两步:(1)找到相关的位,(2)读取这些位。
  内存的工作方式就要复杂得多:
  (1)找到数据的指针。(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了。)
  (2)将指针送往内存管理单元(MMU),由MMU将虚拟的内存地址翻译成实际的物理地址。
  (3)将物理地址送往内存控制器(memory controller),由内存控制器找出该地址在哪一根内存插槽(bank)上。
  (4)确定数据在哪一个内存块(chunk)上,从该块读取数据。
  (5)数据先送回内存控制器,再送回CPU,然后开始使用。
  内存的工作流程比寄存器多出许多步。每一步都会产生延迟,累积起来就使得内存比寄存器慢得多。为了缓解寄存器与内存之间的巨大速度差异,硬件设计师做出了许多努力,包括在CPU内部设置缓存Cache、优化CPU工作方式,尽量一次性从内存读取指令所要用到的全部数据等等。

  上面说到”缓存“,大部分程序员都知道什么是软件架构中缓存的概念。这里所说的缓存是指硬件“高速缓冲存储器”,是存在于主存与CPU之间的一级存储器(常见于计算机cpu性能指标中:一级缓存、二级缓存,高配置的服务器会有三级缓存), 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。高速缓冲存储器最重要的技术指标是它的命中率(一级缓存(a=n*80%) - 二级缓存(b=a*80%) - 三级缓存(c=b*80%))。所谓的命中就是在缓存上读取到指定的数据。
    既然是缓存,那么大小肯定是有局限,也就是说不是所有cpu需要的数据都能在缓存中命中,因为它有着自己的更新策略。如下
   1. 根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。综合命中率、实现的难易及速度的快慢各种因素,替换策略可有随机法、先进先出法、最近最少使用法等。
  (1).随机法(RAND法)
随机法是随机地确定替换的存储块。设置一个随机数产生器,依据所产生的随机数,确定替换块。这种方法简单、易于实现,但命中率比较低。
  (2).先进先出法(FIFO法)
先进先出法是选择那个最先调入的那个块进行替换。当最先调入并被多次命中的块,很可能被优先替换,因而不符合局部性规律。这种方法的命中率比随机法好些,但还不满足要求。先进先出方法易于实现,
  (3).最近最少使用法(LRU法)
LRU法是依据各块使用的情况, 总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律。 实现LRU策略的方法有多种。
  2 在多体并行存储系统中,由于 I/O 设备向主存请求的级别高于 CPU 访存,这就出现了 CPU 等待 I/O 设备访存的现象,致使 CPU 空等一段时间,甚至可能等待几个主存周期,从而降低了 CPU 的工作效率。为了避免 CPU 与 I/O 设备争抢访存,可在 CPU 与主存之间加一级缓存,这样,主存可将 CPU 要取的信息提前送至缓存,一旦主存在与 I/O 设备交换时, CPU 可直接从缓存中读取所需信息,不必空等而影响效率。
  3 目前提出的算法可以分为以下三类(第一类是重点要掌握的):
  (1)传统替换算法及其直接演化,其代表算法有 :①LRU( Least Recently Used)算法:将最近最少使用的内容替换出Cache ;②LFU( Lease Frequently Used)算法:将访问次数最少的内容替换出Cache;③如果Cache中所有内容都是同一天被缓存的,则将最大的文档替换出Cache,否则按LRU算法进行替换 。④FIFO( First In First Out):遵循先入先出原则,若当前Cache被填满,则替换最早进入Cache的那个。
  (2)基于缓存内容关键特征的替换算法,其代表算法有:①Size替换算法:将最大的内容替换出Cache②LRU— MIN替换算法:该算法力图使被替换的文档个数最少。设待缓存文档的大小为S,对Cache中缓存的大小至少是S的文档,根据LRU算法进行替换;如果没有大小至少为S的对象,则从大小至少为S/2的文档中按照LRU算法进行替换;③LRU—Threshold替换算法:和LRU算法一致,只是大小超过一定阈值的文档不能被缓存;④Lowest Lacency First替换算法:将访问延迟最小的文档替换出Cache。
  (3)基于代价的替换算法,该类算法使用一个代价函数对Cache中的对象进行评估,最后根据代价值的大小决定替换对象。其代表算法有:①Hybrid算法:算法对Cache中的每一个对象赋予一个效用函数,将效用最小的对象替换出Cache;②Lowest Relative Value算法:将效用值最低的对象替换出Cache;③Least Normalized Cost Replacement(LCNR)算法:该算法使用一个关于文档访问频次、传输时间和大小的推理函数来确定替换文档;④Bolot等人 提出了一种基于文档传输时间代价、大小、和上次访问时间的权重推理函数来确定文档替换;⑤Size—Adjust LRU(SLRU)算法:对缓存的对象按代价与大小的比率进行排序,并选取比率最小的对象进行替换。

时间: 2024-10-13 17:12:49

CPU/寄存器/内存的相关文章

CPU、内存通俗概念

在计算机的组成结构中,有一个很重要的部分,就是存储器.存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作.存储器的种类很多,按其用途可分为主存储器和辅助存储器,主存储器又称内存储器(简称内存,港台称之为记忆体).内存内存又称主存,是CPU能直接寻址的存储空间,由半导体器件制成.内存的特点是存取速率快.内存是电脑中的主要部件,它是相对于外存而言的.我们平常使用的程序,如Windows操作系统.打字软件.游戏软件等,一般都是安装在硬盘等外存上的,但仅此是不能

【转】CPU与内存的那些事

下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下.一来自己复习,二来与大家分享.] 本文以一个现代的.实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据

汇编学习笔记--查看CPU和内存

1.进入Debug 2.基本命令详解 -r 查看.改变CPU寄存器的内容 -d 查看内存中的内容 -e 改写内存中的内容 命令格式:"e 起始地址 数据 数据 数据 ..." -u 查看指定地址段的汇编代码 -t 执行指定地址的汇编代码(首先修改 CS:IP 到所要执行的汇编代码的首地址) -a 以汇编指令的形式在内存中写入机器指令 上图有一处错误,我们在用 -u 命令显示指定地址段的汇编代码时一定要把当前所在的地址置为汇编代码的首地址,不然机器会强制分段 实验(1):输入下图所示汇编

CPU 寄存器

CPU 寄存器 寄存器是中央处理器内的组成部分,是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC). 寄存器是集成电路中非常重要的一种存储单元,通常由D触发器组成.在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类.内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求.而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU中的寄存器就是其中一

CPU、内存、硬盘、指令之间的关系

1.计算机的组成原理 现代计算机的原型其实最早是由冯·诺伊曼提出的,计算机由五大部分组成:运算器 . 控制器 . 存储器.输入设备.输出设备.其中控制器和运算器又可以统称为CPU   (1)运算器:又称算术逻辑单元,主要是由算术逻辑部件和寄存器组成.用来进行算术或者逻辑运算等操作.主要由指令寄存器.程序计数器.操作数控制器组成. (2)控制器:是整个计算机的控制中心,负责控制和协调整个计算机的动作.能产生各种控制信号,使得各个部件能够一起工作. (3)存储器:存储器是存放计算机信息的一个部件,用

计算机原理学习(7)-- x86-32 CPU和内存管理之分段管理

前言 前一篇我们介绍了内存管理中的分页试内存管理,分页的主要作用就是使得每个进程有一个独立的,完整的内存空间,通过虚拟内存技术,使得程序可以在较小的内存上运行,而进程之间内存空间相互独立,提高了安全性.这一篇将主要介绍内存管理中分段管理,以及两种的结合,也是目前计算机普遍采用的段页式内存管理.这也直接决定了的后面程序的编译,加载以及允许时的内存布局. 1. 内存分段 1.1 为什么分段? 在x86-16体系中,为了解决16位寄存器对20位地址线的寻址问题,引入了分段式内存管理.而CPU则使用CS

汇编试验一:查看CPU和内存,用机器码指令和汇编指令编程

预备知识: r命令查看,改变CPU寄存器的内容 2.D命令查看内存 3.E命令改写内存 两种方式: 1: 2: 内存中写入机器码 用T命令执行机器码(先将CS:IP指向要执行的内存处) 用a命令写汇编指令 试验任务: 计算2^8 结果:

汇编学习笔记03(寄存器内存访问)

1. 字在内存中存储时, 要有两个地址连续的内存单元来存放. 字的低位字节存放在低地址单元中, 高位字节存放在高地址单元中. 2. DS: 存放段地址的寄存器, 这个段是存放数据的. [address]: 偏移地址 mov指令在访问内存单元时, 只给出偏移地址, 段地址默认在DS段寄存器中 3. mov ax, 1000 mov ds, ax 8086CPU不支持将数据直接送入段寄存器, 所以只能通过通用寄存器来进行中转. 4. 字的传送 80806CPU是16位结构, 有16根数据线, 所以一

cpu,内存,硬盘,指令与他们之间的关系

CPU 内存 硬盘 指令之间的关系 1.CPU: 又称CPU芯片,中央处理器.是计算机上最重要的集成电路,位于计算机的主板上面,其中主要任务是从主存上面提取指令和对指令进行执行. CPU 包括: (1)运算逻辑部件 (2)  寄存器部件    (3) 运算器和控制部件 CPU有大量的引脚,计算机系统通过这些引脚完成通信,这些通信把CPU和本身也是高级电路的存储器与I/O设备链接在一起. 2.内存:又称主存储器,内存储器,其中包含了存储器,MAR,MDR.存储器又包含了存储单元,存储单元又包含存储