[TOC]
>计算机组成原理与系统结构》课
《微机原理及接口技术》课
![](https://box.kancloud.cn/5dbfe3ededf2bfe7616e5bf6fa167676_563x418.png)
# CPU
CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。
它的功能主要是解释计算机指令以及处理计算机软件中的数据。
差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。 CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。所谓的计算机的可编程性主要是指对CPU的编程。
中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和 **高速缓冲存储器(Cache)** 及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与 **内部存储器(Memory)** 和输入/输出(I/O)设备合称为电子计算机三大核心部件。
# 寄存器
计算机的[存储层次](https://zh.wikipedia.org/wiki/%E8%A8%98%E6%86%B6%E9%AB%94%E9%9A%8E%E5%B1%A4)(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。
寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
## 参考
阮一峰:http://www.ruanyifeng.com/blog/2013/10/register.html
知乎:https://www.zhihu.com/question/24565362/answer/54451597
# RAM
RAM主要指计算机内存,用来存放计算机正在运行的程序的指令以及数据,包括操作系统和应用程序的指令和数据。ROM是只读存储器,其内容掉电不会丢失,一般来讲计算机的BIOS会写在里面,待计算机通电后,这里面的程序会自动被加载到内存中供CPU执行,去读磁盘信息引导DOS或者其他操作系统装入内存。
# 缓存
缓存CACHE缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。
电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。CACHE是在CPU中速度非常块,而容量却很小的一种存储器,它是计算机存储器中最强悍的存储器。由于技术限制,容量很难提升。
缓存有两种概念。一种是指硬件高速缓冲存储器cache,用于协调寄存器与内存之间读写速度不匹配而设置的一种存储器。另一种是指人为规定的一个区域(通常是在RAM上划一块区域,这是由操作系统来做的),用来暂时存放一些输入输出数据。
# 缓冲区
缓冲器相当于一个寄存器,暂时保存数据。缓冲区是内存中存放数据的地方。
在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,然后植入到缓冲区,而再向一个有限空间的缓冲区中植入超长的字符串可能会出现两个结果,一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另有一个结果就 是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。大多造成缓冲区溢出的原因是程序中没有仔细检查用户输入参数而造成的。
缓冲区指由多个以不同速度或优先级运行的硬件或程序进程共享的内存中的数据存储区,在其中暂时保存给定类型的数据,可能会随着动态分配变量会出现问题。
大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。这样想下去的话,如果说要给程序在动态分配缓冲区放入超长的数据,它就会溢出了。
一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方,这就不是什么好现象了。仅仅就单个的缓冲区溢出惹眼,它并不是最大的问题根本所在。但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。
## 为什么要引入缓冲区呢?
缓冲区使进程之间的相互等待变少了。先结束的进程可以把结果放入缓冲区内,进行下面的工作,而后做完的进程可以从缓冲区内取出原来的数据继续工作。
缓冲区的作用是:在高速和低速设备之间起一个速度平滑作用;暂时存储数据;经常访问的数据可以放进缓冲区,减少对慢速设备的访问以提高系统的效率。
比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。
又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。
现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
## 区别
## 缓存是什么与内存,硬盘各有什么区别
CPU要运算的数据都是从内存取来的 但是内存速度比CPU慢很多,划不来,先到硬盘缓存找找,很快就可以取到, 实在找不到再让硬盘读盘。 这样明显可以大幅提高系统的效率CPU的缓存是提高了CPU对内存反复的数据的处理速度,内存里面的数据大部分是从硬盘取来的,CPU总是在干等,在90%以上的情况下, 内存速度比硬盘要快几十倍。 于是在硬盘里面设计了跟内存速度差不多的缓存 事先把内存可能用到的数据从硬盘读到缓存,内存等硬盘读盘也等得很烦, CPU需要的数据就在缓存里面。而硬盘的缓存是提高CPU与硬盘之间的速度.同样。 然后内存要数据的话, 于是在CPU里设计了高速缓存(容量相对内存很小) 事先把CPU可能会用到的数据从内存取到缓存, 由于预测机制的作用
## 请问内存缓冲区和硬盘缓冲区有什么区别?一般编程时所说的写入缓冲区是指哪一个?
通常的程序无法控制它,达到一定数量后再写到硬盘里。而硬盘缓冲区有两种,即先将数据下载到内存中缓存起来,因此很多程序还会从内存中再设置一块缓存供自己使用,也是为了增加读写效率和保护硬盘,只是它是专门为读取或写入硬盘而设置的。这个的例子是很多下载软件如迅雷中都有的磁盘缓存设置,达到保护硬盘的目的,这是程序所设置的一块内存区域:一是上面说的内存缓冲区,并且除了驱动程序外。它的作用和前一种类似,大小通常为数MB到几十MB,这个是固化在硬盘内部的,用来暂存从其他设备读入的数据或即将写入其他设备的数据,只是它是系统中所有程序所共用的,因此可以简称为硬盘缓冲区,从而减少了读写硬盘的次数。另一种是硬盘本身携带的一块随机存储器一般编程所说的缓冲区指的是内存缓冲区
## 磁盘缓存和内存缓存的区别
CPU的工作将难以开展,软件磁盘缓存,而若要用来处理图形图像,是一个硬件设备,你可以 从中明白它的工作原理,内存的大小都以MB(读作“兆字节”,没有内存。当运行计算机程序时,然后在特定的内存中开始执行,或者说取决于运行的软件。在这篇“神奇的硬件”文章里面, 并且它以各种各样的形式存在不同的硬件里面,用来预读取信息(比如硬盘的缓存),并且知道为什么它在电脑系统中的地位是这么的重要。你可能在购买电脑的时候也听到过要好的朋友这样建议?这需要根据所要完成的工作来定的,“内存”好比是一个大仓库,这个仓库的容量不得小于所要贮藏的“货物”量,计算机也无法启动;缓存是一个比较大的一个概念,或者是暂时存储一些不长久的信息。所以,小了,当内存达到某一数目后,以及要处理的数据量,内存的增加对系统运行速度的提高是有一个限度的;太大了。使用缓存的主要目的是使价位低廉的电脑也可以保持高速运行,还有页面缓存等更多,“不要购买赛扬(Celeron)系列处理器。一个简单的例子超高速缓存(Caching)是计算机里面基于内存子系统的技术。在计算机中。“内存”犹如人体大脑的记忆系统,程序将首先被读入内存中!“货物”搬运不方便,用于存放计算机的运行程序和处理的数据,特别是在多任务环境下128MB可能都还少“缓存”(cache),无论是否打开电源启动计算机,比如用于文字处理工作。初学者可以这样来理解这个问题,或者玩三维游戏,64MB都可能远远不够,硬盘和软盘缓存,内存的大小应该视需要而定,因为它的cache比较少”,内存中总会有各种各样的数据信息存在,描述数据量的单位是“字节(Byte,可以说它永远也不会空闲着内存是内部存储器,常用B表示)”。一台计算机要配置多大的内存才合适呢,现代的电脑同时具有L1和L2 cache ,也就是程序运行的基本需要,并且处理的结果也将保存在该内存中,简称“兆”)来表示;超高速缓存允许你的电脑在运行日常任务的时候能够更加 流畅,再加大内存,白白浪费了资源,又会造成大部分仓库空着。在电脑系统里、快速,缓存在很多方面都起着举足轻重的作用。其中有内存缓存;虚拟内存也是另外一种不同表达形式的缓存,运行的速度就几乎不会再提高了,也就是说内存总会和CPU之间频繁地交换数据。当运行的软件一定时,会影响CPU的运算速度,甚至不能让程序运行,那16 MB就差不多了,我们将会探究缓存
## 内存缓冲区和硬盘缓冲区有什么区别吗
就是在硬盘内部的内存芯片,一回事,英文就叫cache。硬盘的高速缓存,专门用来做缓存的内存 高速缓存,就是cache
## 内存与缓冲区有什么关系啊?请详细解说下啊
在一般理解缓存都是指CPU的缓存,但是距离CPU还是有一定的距离。通常现在CPU在计算中会优先从CPU一级缓存中调用数据。说通俗一点,如果找不到就去二级缓存找,就是CPU即将用到和经常用到的数据都会寄存在CPU缓存区域中,三级缓存,寄存到内存中,当然传输速度相比CPU的缓存差距 还是很大的,需要从内存中再调用数据,找不到再去内存,二级缓存,这样CPU的计算速度更快,因为数据从硬盘调出来。 缓存相当于CPU拥有的自己的独立仓库,所以通常高端处理器才有三级缓存。缓存越大,处理器查找数据所用的时间越快,一级缓存,寄存的即将和经常需要用到的数据越多,那么如果有三级缓存的处理器就去三级缓存中找,如果没有三级缓存的CPU。应用的程序主体,内存虽然速度比硬盘快很多,那么二级缓存找不到的数据就直接去内存中查找了,是先调到内存当中,所以三级缓存的CPU运算速度通常比没有三级缓存CPU的速度更快,并且数据传送速度还会受到总线等其他因素的限制,这是提高CPU性能和运算速度的一种途径。,CPU要处理这些数据,但仅仅是您所运行的程序整体的数据不是CPU即将用到的数据,可以提前将 即将需要用到的数据调入到CPU缓存中,不需外界干扰,如果还找不到。。假设即将和经常用到的数据寄存到CPU自己的数据库中,CPU可以随时调用。也是为什么高端处理器缓存大并且具备三级缓存的意义,CPU不可能在内存中直接进行数据运算那么CPU就需要有缓存
## 缓冲区在内存里面还是硬盘上
CPU里面也有缓存。内存本身就是CPU直接访问的存储空间,分别是一级,那么就是在硬盘内。实际上、二级和三级缓存,现在一般是32M或者64M,但速度依次变慢。每个硬盘里又会有一定容量的缓存。缓存是为了提高数据交换效率而产生的,容量依次变大,所以不存在缓冲区的说法如果你所谓的缓冲区是指的缓存
## 程序的RAM操作
我们都知道编译好的程序最终运行是在RAM中运行的,可是我很长一段时间都把RAM和CPU,寄存器搞混淆了。cpu里包含有各种寄存器,ram并不是在cpu里的,可以这么理解:ram保存着代码中的变量,常量,指令;cpu负责从ram中取出指令来运行,运行后的结果(比如加减乘除的结果)最初是保存在各种寄存器里的,然后再由寄存器通过指令把寄存器里的值保存到ram即内存中(比如arm的STR指令)。**其实程序的运行就是不断地从ram(内存)中取出指令或者数据经过寄存器给CPU中的各种运算器运算后再通过寄存器传出到ram中(ram中的数据就会不断地变化,反应到程序中就是变量的变化,比如数字的自加)**,而具体是把运算后的结果放到ram的哪里(地址)则由程序员在程序中定义的变量的地址决定的。
# 硬件之间的联系的总结
cpu主要就是处理各种指令,运算、跳转、存取内存之内的。这些指令所需的数据以及指令本身一般都是存储在ram中的。cpu必须将ram中的指令和数据取到cpu中的各种寄存器中,指令才能执行。指令的地址存储在一个叫做PC的寄存器中,注意这边的PC不是个人电脑的意思,而是pointer of code的意思,即指令指针,而数据可以放在各种通用寄存器中。cpu中还有很多其他寄存器,控制着cpu各种功能。如果你学过汇编,便会知道汇编语言即是操作这些寄存器,完成各种运算任务。 现代高性能cpu内部一般都会有缓存,一般分为指令缓存和数据缓存。缓存的访问速度比外部ram要快很多,所以如果把一部分数据和指令存储在缓存中,cpu再从缓存中获取指令和数据能够提高cpu的速度。 可以被称作rom的东西很多,如pc主板上的rom芯片,pc关机后,rom的数据不会丢失,开机时先运行其中的bios程序,完成硬件配置和检测,之后会将磁盘第一个扇区中操作系统的引导程序装入内存,然后会跳到引导程序。引导程序会进一步将操作系统存储在磁盘上的内核装入内存,最后执行内核程序。内核加载文件系统,并执行gui程序,便可以看到pc的桌面了。我只是简要的说明了你问题中的这些概念,省略了很多细节。如果想对计算机从硬件到操作系统再到应用层有些认识的话,强烈建议你看《深入理解计算机系统》,即入门又足够深入。
## 参考
知乎:https://www.zhihu.com/question/24565362/answer/74078750