0
点赞
收藏
分享

微信扫一扫

《深入理解程序设计》之计算机体系结构

善解人意的娇娇 2022-02-15 阅读 152
c语言

在学习编程时,你首先要了解计算机如何解释程序。当然,你无需拥有电子工程学位,但需要理解一些基本概念。
现代计算机的体系结构都是在冯诺依曼体系结构(因其创始人而得名)的基础上发展起来的。冯诺依曼体系结构蒋计算机划分成两个主要组成部分:CPU(中央处理单元)和内存。这种架构被用在包括个人计算机,超级计算机,大型机在内所有现代计算机,甚至手机中。

2.1 内存结构

为理解计算机内存的结构,可以蒋计算机内存与你家附近的邮局做个比较。邮局通常有一个摆满邮政信箱的房间,计算机内存就像邮局房间里的信箱一样,每个固定大小的存储单元都依次编号。例如,大小为256M的内存大致包含2.56亿个固定大小的存储单元;如果与邮局类比,就是2.56亿个信箱。计算机内存的每个存储单元都有一个编号,所有存储单元都具有相同的固定大小。邮政信箱与计算机内存的不同之处在于:信箱中能存放各种东西,但是内存的存储单元中只能存一个数字。
你也许想知道为什么计算机如此设计。答案是:这样比较容易实现。设想一下,如果组成计算机内存的存储单元的大小各不相同,或者能在不同的存储单元存储不同类型的数据,要么实现起来不仅困难,而且成本太高。
计算机内存有多种用途。计算机的所有计算结果都存储在内存中。事实上,所有要“存储”的内容都会先存储在内存中。以你家里的计算机为例,想想当它运行时,在它的内存里存放了哪些东西。通常有(但不限于)这些:

  • 你的光标在屏幕上所在的位置;
  • 屏幕上每个窗口的大小;
  • 所使用的字体中每个字母的形状;
  • 每个窗口上所有控件的布局;
  • 工具栏上所有图标的图形;
  • 所有的错误信息和对话框的文本。
    除上述内容外 ,在采用冯诺依曼体系结构的计算机中,不仅计算机数据应存放在内存中。而且在控制计算机操作的程序也应存放在内存中。事实上,对计算机来说,程序和数据的区别仅仅在于计算机使用两者的方式不同,两者的存储和访问方式是一样的。

2.2 CPU构造

那么,计算机是怎么运行的呢?显然,仅仅能够存储数据是不行的,还必须能访问,操作以及移动数据。这时候,就用到CPU了。
CPU一次从内存中读取一条指令并执行,CPU执行指令的上述步骤就是所谓的读取-执行周期(又称为指令周期或机器周期)。为完成此功能,CPU需包含以下元件:

  • 程序计数器
  • 指令解码器
  • 数据总线
  • 通用寄存器
  • 算数逻辑单元
    程序计数器用来告诉计算机从哪里提取下一条指令。我们之间曾提到,数据和程序的存储方式并无区别,只有CPU对两者的解释方式不同。程序计数器保存即将执行的下一条指令的内存地址。CPU先查看程序计数器,然后提取存放在制定内存地址的数字,接着传递给指令解码器,由它来解析指令。指令解码器给出的解释包括:需要进行何种处理(加法,减法,乘法,移动数据等),以及处理过程中将会涉及哪些内存单元。计算机指令通常由实际指令和执行指令要用到的内存单元列表构成。
    接着,计算机使用数据总线取得存储在内存单元中的用于计算的数据。数据总线是CPU和内存间的物理连线,是两者的纽带。计算你主板上的那些从内存延伸出来的排线,就是数据总线。
    除了位于CPU外面的内存,CPU内部还包含一些被称为寄存器的特殊高速存储单元。CPU中有两种寄存器:通用寄存器和专用寄存器。通用寄存器是进行主要运算的地方,一般用来处理加法,减法,乘法,比较及其他运算。但是计算机CPU的通用寄存器很少,计算时用到的绝大多数信息都存储在主内存中,只有在CPU处理时才提取到通用寄存器,处理完成后再放回内存。专用寄存器是用于特定用途的寄存器,稍后我们再介绍。
    CPU在取回需要的数据后,蒋数据和经过解码的指令传递给算数逻辑单元进一步处理。算数逻辑单元是实际执行指令的地方。它得出计算结果后,蒋结果经数据总线传到指令指定的相应内存单元或寄存器。
    以上是对CPU处理指令的过程的一个相当简化的描述。最近几年,CPU已经有了很大的发展,变得越来越复杂。尽管基本操作任然相同,但新的cpu使用了多层高速缓存结构,超标量处理器,流水线,分支预测,乱序执行,微代码转换,协处理器以及其他复杂的优化技术。不知道这些词的意思也没关系,要是你想深入了解CPU,可以在互联网上搜索一下这些词。

2.3 几个术语

计算机内存是经过编号的一系列国定大小的存储单元。每个存储单元编号称为该存储单元的地址。一个存储单元的大小称为一个字节。在X86处理器上,一个字节对应一个0到255之间的数字。
你可能想知道为什么计算机只能存储0到255之间的数,却能显示和处理文本,图形,和更大的数?首先,显卡等专用硬件对每个数字都有专门的解释。当在屏幕上显示数字时,计算机根据ascii码表蒋你发送给它的没一个 0到255之间的数字转换为显示在屏幕上的字符,每个数字对应一个字母或10以内的数字。例如,大写字母A用数字65表示,而数字1则用49表示。因此,要在屏幕上打印出“HELLO”,你实际上要把数字序列49,48,48发给计算机。
对于程序员来说,

举报

相关推荐

0 条评论