• 欢迎访问我的个人博客网站,本站专注电商运营,建站SEO推广服务,欢迎大家的访问,有需求可以与我联系!

第一章 计算机概要与技术

文章目录[隐藏]

计算机的应用领域十分广阔,从智能家电到手机,再到最大型的超级计算机。不同的应用有着不同的设计需求,并以不同的方式通过硬件实现。根据不同的应用,计算机主要包括以下三类:

桌面计算机:也许是最为人所知的应用方式,其典型代表为个人计算机,几乎都在大量使用。桌面计算机强调对单用户提供良好的性能,价格低廉,通常运行第三方软件。

服务器:是过去被称为大型机、小型机或超级计算机的现代形式,通常借助网络访问。服务器面向大型用户,可以执行单个复杂应用(科学的或工程的),也可以处理大量的简单作业,如大型 Web 服务器。这些应用通常基于其他来源的软件,并且往往为了特别的需要而加以修改或定制。服务器的制造技术和桌面计算机差不多,但能够提供更强的计算或 I/O 能力。服务器的设计通常强调可靠性,因为它的死机开销要比单用户的桌面计算机大得多。它们主要用于高端科学和工程计算,如天气预报、仃油勘探和蛋白质结构计算等大规模问题。

嵌入式计算机:是数量最多的一类,应用和性能范围十分广泛。包括在汽车、手机、电视中的微处理器以及用来控制飞机和货船的处理器网络。嵌入式计算系统的设计目标是运行单一应用程序或者一组相关的应用程序,并且通常和硬件集成在一起以单一系统的方式一并交用户使用。面向单一应用需求的嵌入式应用通常被严格限制其成本或功耗。

1.2.1 计算机系统层次结构

现代计算机系统是一个硬件与软件组成的综合体,可以把它看成是按功能划分的多级层次结构

多级层次结构

第五级:高级语言级,它是面向用户,为方便用户编写应用程序而设置的。这一级由各种高级语言编译程序支持和执行。

第四级:汇编语言级,它给程序人员提供一种符号形式语言,以减少程序编写的复杂性。这一级由汇编程序支持和执行。

第三级:操作系统级,它由操作系统程序实现。

第二级:一般机器级,也称为传统机器语言级,由微程序解释机器指令系统。这一级也是硬件级。

第一级:微程序设计级,这是一个实在的硬件级,他由机器硬件直接执行微命令。

除第一级外,其他各级都得到它下面级的支持,同时也受到运行在下面各级上的程序的支持。第一级到第三级编写程序采用的语言,基本是二进制编码。第四、五两级编写程序所采用的语言是符号语言,用英文字母和符号来表示程序,因而便于大多数不了解硬件的人们使用计算机。

把计算机系统按功能划分成多级层次结构,有利于正确理解计算机系统的工作过程,明确软件、硬件在计算机系统中的地位和作用。

1.2.2 高级语言与硬件语言

一、从高级语言到硬件语言

一个典型的应用程序,如字处理程序或大型数据库,可以由数百万行代码构成,并依靠软件库来实现异常复杂的功能。众所周知,计算机中的硬件只能执行极为简单的低级指令。从复杂的应用程序到简单的指令需要经过几个软件层次,才能将复杂的高层次操作逐步解释或翻译成简单的计算机指令。

编译程序使得高级语言编写的应用程序编译为汇编语言语句,然后,汇编程序将汇编语言语句翻译为二进制机器语言。

操作系统和编译程序是现代计算机系统最重要的系统软件。操作系统是用户程序和硬件之间的接口,为用户提供各种服务和监控功能。操作系统最为重要的作用是:处理基本的输入和输出操作、分配外存和内存、为多个应用程序提供共享计算机资源的服务。 编译程序是把用高级语言(如 C、C++、Java 或 Visual Basic 等)编写的程序翻译成硬件能执行的指令。机器可以理解的二进制语言,是机器语言。

二、计算机硬件和软件的关系

硬件是计算机系统的物质基础,正是在硬件高度发展的基础上,才有软件赖以生存的空间和活动场所,没有硬件对软件的支持,软件的功能就无从谈起;同样,软件是计算机系统的灵魂,没有软件的硬件“裸机”将不能提供给用户使用,犹如一堆废铁。因此,硬件和软件是相辅相成的,不可分割的整体。

当前,计算机的硬件和软件正朝着互相渗透、互相融合的方向发展,在计算机系统中没有一条明确的硬件与软件的分界线。原来一些由硬件实现的功能可以改由软件模拟来实现,这种做法称为硬件软化,它可以增强系统的功能和适应性;同样,原来由软件实现的功能也可以改由硬件来实现,称为软件硬化,它可以显著降低软件在时间上的开销。

由此可见,硬件和软件之间的界面是浮动的,对于程序设计人员来说,硬件和软件在逻辑上是等价的。一项功能究竟采用何种方式实现,应从系统的效率、速度、价格和资源状况等诸多方面综合考虑。既然硬件和软件不存在一条固定的、一成不变的界限,那么今天的软件可能就是明天的硬件,今天的硬件也可能就是明天的软件。

除去硬件和软件以外,还有一个概念需要引起大家的注意,这就是固件(Firmware)。固件是指那些存储在能永久保存信息的器件(如 ROM)中的程序,是具有软件功能的硬件。固件的性能指标介于硬件与软件之间,吸收了软、硬件各自的优点,其执行速度快于软件,灵活性优于硬件,是软、硬件结合的产物,计算机功能的固件化将成为计算机发展中的一个趋势。

任何一台计算机的基础硬件都要完成相同的基本功能:输人数据、输出数据、处理数据和存储数据。组成计算机的五个典型部件是输入、输出、存储器、运算器和控制器,其中最后两个部件通常合称为处理器。处理器从存储器中得到指令和数据,输入部件将数据写入存储器,输出部件从内存中读出数据,控制器向运算器、存储器、输入和输出部件发出命令信号

处理器从逻辑上包括两个主要部件:数据通路和控制器,分别相当于处理器的肌肉和大脑。数据通路负责完成算术运算,控制器负责指导数据通路、存储器和 I/O 设备按照程序的指令正确执行。

1.输入设备

输入设备的任务是把人们编好的程序和原始数据送到计算机中去,并且将它们转换成计算机内部所能识别和接受的信息方式按输入信息的形态可分为字符(包括汉字)输入、图形输入、图像输入及语音输入等。目前,常见的输入设备有:键盘、鼠标、扫描仪等。辅助存储器(磁盘、磁带)也可以看作输入设备。另外,自动控制和检测系统中使用的模数(A/D)转换装置也是一种输入设备。

2.输出设备

输出设备的任务是将计算机的处理结果以人或其他设备所能接受的形式送出计算机。目前最常用的输出设备是打印机和显示器。辅助存储器也可以看作输出设备。另外,数模(D/A)转换装置也是一种输出设备。

3.存储器

存储器是用来存放程序和数据的部件,它是一个记忆装置,也是计算机能够实现“存储程序控制”的基础。

4.运算器

运算器是对信息进行处理和运算的部件。经常进行的运算是算术运算和逻辑运算,所以运算器又称为算术逻辑运算部件(Arithmeticand Logical Unit,ALU)。运算器中还有若干个通用寄存器或累加寄存器,用来暂存数据,并存放运算结果。寄存器的存取速度比存储器的存取速度快得多。

5.控制器

控制器是整个计算机的指挥中心,是向计算机各部件发出控制信息的部件。它的主要功能是按照人们预先确定的操作步骤,控制整个计算机的各部件有条不紊地自动工作。控制器从主存中逐条地取出指令进行分析,根据指令的不同来安排操作顺序,向各部件发出相应的操作信号,控制它们执行指令所规定的任务。控制器中包括一些专用的寄存器。

在软件和硬件的描述上有一个共同点:越是深入,展示的信息就越多;反过来,将低层的细节隐藏起来,就可以在高层次描述上采用较简洁的模型。使用“分层”或“抽象”的方法,是设计复杂计算机系统的一种卡要技术。

最重要的抽象之一是硬件和底层软件之间的接口:鉴于其重要性,该抽象被命名为计算机的指令集体系结构,或简称体系结构。计算机体系结构包括了程序员正确编写二进制机器语言程序所需的一切东西,如指令、I/O 设备,等等。一般来说,操作系统需要封装 I/O 操作、存储器分配和其他低级的系统功能细节,以便应用程序员无需在这些细节上分心。

1.3.2 处理器与存储器制造技术

芯片的制造从硅开始。硅是从沙子中发现的一种物质。由于它导电性能不好,所以称为半导体。用特殊的化学方法对硅添加某些材料,可以把其细微的区域转变为可控的导电体或绝缘体。

集成电路的制造是从硅锭开始的,它像一根巨大的香肠。目前使用的硅锭直径约 8~12 英寸,长度约 12~24 英寸。硅锭经切片机切成片厚度不超过 0.1 英寸的晶圆。这些晶圆经过大约 20~40 步化学加工最终产生之前所讨论的晶体管、导体和绝缘体。如今的集成电路包含一层晶体管,但是可能具有多个绝缘层间隔的 2~8 层金属导体。

从硅锭切下来之后,空白的晶圆经过大约 20 步到 40 步的加工产生晶阏。之后这些晶圆被切成芯片,通过切分,淘汰那些有瑕疵的芯片,合格芯片还要连接到 I/O 引脚上,这一过程称为“封装”。在封装之后,必须进行最后一次测试,最后芯片将被交付用户。

处理器和存储器正在以难以置信的速度在进步,因为计算机设计者一直采用最新的电子技术进行设计,以期在竞争中取得优势。多年以来,每隔 3 年 DRAM 的容量就增长到 4 倍,累积增长已超过 16000 倍。这就是集成电路领域中著名的摩尔定律:芯片中的晶体管容量每隔 18 ~24 个月将翻一倍。

1.4.1 计算机性能评价

一、性能的定义

不同的应用关注计算机系统的不同方面。许多应用,特别是那些运行在服务器上的应用,主要关注 I/O 性能,所以此类应用既依赖硬件又依赖软件,对墙上时钟时间最感兴趣。而在其他一些应用中,用户可能对吞吐率、响应时间或两者的复杂组合更为关注。

作为个人计算机的用户,对降低响应时间感兴趣。而数据中心感兴趣的常常是吞吐率。因此,在很多情形下,和关注吞吐率的服务器相比,我们需要对嵌入式以及台式计算机采用不同的应用程序作为测试基准和不同的性能度量标准。

吞吐率和响应时间是非常重要的两个指标。在实际的计算机系统中,响应时间和吞吐率往往相互影响。

二、性能的测量

如果计算机的性能用时间来度量,那么完成同样的计算任务,需要时间最少的计算机是最快的。对时间最直接的定义是墙上时钟时间,也叫响应时间、消逝时间等。这些术语均表示完成任务所需的总时间,包括了硬盘访问、内存访问、I/O 操作和操作系统开销等一切时间。

我们往往要把运行我们自己的任务的时间与一般的响应时间区别开来。我们可以使用 CPU 执行时间,简称 CPU 时间,它只表示在 CPU 上花费的时间,而不包括等待 I/O 或运行其他程序的时间(需要注意的是,用户所感受到的是程序的响应时间,而不是 CPU 时间)CPU 时间还可进一步分为用于用户程序的时间和操作系统为用户服务花去的 CPU 时间。前者称为用户 CPU 时间,后者称为系统 CPU 时间。要精确区分这两种 CPU 时间是困难的,因为通常难以分清哪些操作系统的活动是属于哪个用户程序的,而且不同操作系统的功能也千差万别。

对计算机设计者来说,需要考虑如何度量计算机硬件完成基本功能的速度。几乎所有计算机都用时钟来驱动硬件中发生的各种事件。时钟间隔的时间称为时钟周期。也可用它的倒数来描述,称为时钟频率。

三、CPU 性能及其因素

一个程序的 CPU 运行时间 = 一个程序的 CPU 时钟周期数×时钟周期时间 = 一个程序的 CPU 时钟周期数/时钟频率

由于计算机是通过执行指令来运行程序的,因此执行时间一定依赖于程序中的指令数。所以,一个程序需要的时钟周期数可写为:

CPU 时钟周期数 = 程序的指令数×每条指令的平均时钟周期数

术语 CPI 表示执行每条指令所需的时钟周期数的平均值。不同的指令需要的时间可能不同。CPI 是一个程序全部指令所用时钟周期数的平均值。CPI 提供了比较相同指令集的不同实现方式的方法,因为一个程序执行的指令数是一样的。

四、经典的 CPU 性能公式

我们用指令数、CPI 和时钟周期时间来写出基本的性能公式:

CPU 时间=指令数×CPI×时钟周期时间

CPU 时间=指令数×CPI/时钟频率

程序的执行时间(单位为秒):

执行时间 = (指令数/程序)×(时钟周期数/指令)×(秒/时钟周期)

这公式特别有用,因为它们把性能分解为三个关键因素。我们可用这些公式来比较不同的实现方案或评估某个设计的替代方案。

如果确定了时钟频率和 CPU 执行时间,我们只需要知道指令数或者 CPI 两者之一,就可以依据性能公式计算出另一个。

用仿真器等软件工具可以测量出指令数,也可以用现代处理器中的硬件计数器来测量执行的指令数、平均 CPI 和性能损失源等。由于指令数量取决于计算机体系结构,并不依赖于计算机的具体实现,因而我们可以在不知道计算机全部实现细节的情况下对指令数进行测量。但是,CPI 与计算机的各种设计细节密切相关,包括存储系统和处理器结构,以及应用程序中不同类型的指令所占的比例。因此,CPI 对于不同应用程序是不同的,对于相同指令集的不同实现方式也是不同的。

当比较两台计算机时,必须考虑全部三个因素,它们组合起来才能确定执行时间。只用一种因素(如指令数)去评价性能是危险的。

1.4.2 SPEC 基准测试程序

SPEC(Syscem Perfonnance Evaluation Cooperative)是由许多计算机销售商共同出资赞助并支持的合作组织,目的是为现代计算系统建立基准测试程序集。1989 年,SPEC 建立了重点面向处理器性能的基准程序集(现在称为 SPEC89)。历经 5 代发展,目前最新的是 SPEC CPU2006。它包括 12 个整数基准程序集(CINT2006)和 17 个浮点基准程序集(CFP2006)。CINT2006 包括 C 编译程序、量子计算机仿真、下象棋程序等,CFP2006 包括有限元模型结构化网格法、分子动力学质点法、流体动力学稀疏线性代数法等。

为了简化测试结果,SPEC 使用单一的数字来归纳所有 12 种整数基准程序。具体方法是将被测计算机的执行时间标准化,即将被测计算机的执行时间除以一个参考处理器的执行时间,结果称为 SPECratio。SPECratio 值越大,表示性能越快(因为 SPECratio 是执行时间的倒数)。

CINT2006 或 CFP2006 的综合测试结果是取 SPECratio 的几何平均均值。

日前,SPEC 提供了十几种不同的基准测试程序,使用真实的应用程序、严格制定的执行规则以及报告需求,达到测试不同的计算环境的目的。其中最新的是 SPECpower,它可以报告服务器在不同负载水平下(以 10%的比例递增)的功耗。

SPECpower 最早来自于面向 Java 商业应用的 SPEC 基准程序(SPECJBB2005),它主要测试处理器、caches、主存以及 Java 虚拟机、编译器、无用单元收集器、操作系统片段。性能采用吞吐率来测量,单位是每秒完成的操作次数

1.5 阿姆达尔定律

阿姆达尔定律是计算机系统设计的重要定量原理之一,于 1967 年由 IBM360 系列机的主要设计者阿姆达尔首先提出。该定律是指:系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例。阿姆达尔定律实际上定义了采取增强(加速)某部分功能处理的措施后可获得的性能改进或执行时间的加速比。简单来说是通过更快的处理器来获得加速是由慢的系统组件所限制。Amdahl 定律既可以用来确定系统中对性能限制最大的部件,也可以用来计算通过改进某些部件所获得的系统性能的提高。

其中:

S 是系统加速比。

Fe 是任务在可改进部件上的执行时间在总执行时间中的百分比 (可改进比例),它总是小于等于 1 的。

Se 是可改进部分,改进后部件性能提高的倍数(部件加速比),可改进部分改进以后的性能提高,一般情况下它是大于 1 的。

硬件和软件设计者都是用分层的方法构建计算机系统,每个下层都对其上层隐藏本层的细节。这个抽象原理是理解当今计算机系统的基础,但这并不意味着设计者只要懂得抽象原理就足够了。也许最重要的抽象层次是硬件和底层软件之间的接口,称为指令集体系结构。将指令集体系结构作为一个常量可以使其不同的实现方法(价格和性能可能不同)能够运行同一软件。

一个可靠的测定性能的方法,即用实际程序的执行时间作为尺度。该执行时间与我们能够通过下面公式测量到的其他重要指标相关:

秒数/程序=(指令数/程序)×(时钟周期数/指令数) ×(秒数/时钟周期数)

我们将多次使用这一公式及其组成因子。必须明确的是,任何一个独立的因子都不能确定性能,只有三个因子的乘积(即执行时间)才是可靠的性能度量标准。

执行时间是唯一有效且不可推翻的性能度量方法。


张从飞个人博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:第一章 计算机概要与技术
喜欢 (0)
[xklkey@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址