精华内容
下载资源
问答
  • 计算机算法设计与分析... 点击进入计算机算法设计与分析第4版(王晓东著)课后答案下载地址 本书是普通高等教育十一五*规划教材和国家精品课程教材全书以算法设计策略为知识单元系统介绍计算机算法的设计方法与分析技巧
  • Android 文件下载--普通多线程下载

    千次阅读 2017-04-06 21:32:33
    答:因为抢占的服务器资源多,假设服务器最多服务100个用户,服务器中的一个线程 对应一个用户100条线程在计算机中并发执行,由CPU划分时间片轮流执行,加入a有99条线程 下载文件,那么相当于占用了99个用户资源,自然就...

    我们都知道使用多线程下载文件可以更快地完成文件的下载,但是为什么呢?

    答:因为抢占的服务器资源多,假设服务器最多服务100个用户,服务器中的一个线程 对应一个用户100条线程在计算机中并发执行,由CPU划分时间片轮流执行,加入a有99条线程 下载文件,那么相当于占用了99个用户资源,自然就有用较快的下载速度

    PS:当然不是线程越多就越好,开启过多线程的话,app需要维护和同步每条线程的开销, 这些开销反而会导致下载速度的降低,另外还和你的网速有关!

    多线程下载的流程:

    1. 获取网络连接
    2. 本地磁盘创建相同大小的空文件
    3. 计算每条线程需从文件哪个部分开始下载,结束
    4. 依次创建,启动多条线程来下载网络资源的指定部分

    这里写图片描述

    PS:这里直接创建一个Java项目,然后在JUnit里运行指定方法即可

    核心代码如下:

    public class Downloader {
        // 添加@Test标记是表示该方法是Junit测试的方法,就可以直接运行该方法了
        @Test
        public void download() throws Exception {
            // 设置URL的地址和下载后的文件名
            String filename = "meitu.exe";
            String path = "http://10.13.20.32:8080/Test/XiuXiu_Green.exe";
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("GET");
            // 获得需要下载的文件的长度(大小)
            int filelength = conn.getContentLength();
            System.out.println("要下载的文件长度" + filelength);
            // 生成一个大小相同的本地文件
            RandomAccessFile file = new RandomAccessFile(filename, "rwd");
            file.setLength(filelength);
            file.close();
            conn.disconnect();
            // 设置有多少条线程下载
            int threadsize = 3;
            // 计算每个线程下载的量
            int threadlength = filelength % 3 == 0 ? filelength / 3 : filelength + 1;
            for (int i = 0; i < threadsize; i++) {
                // 设置每条线程从哪个位置开始下载
                int startposition = i * threadlength;
                // 从文件的什么位置开始写入数据
                RandomAccessFile threadfile = new RandomAccessFile(filename, "rwd");
                threadfile.seek(startposition);
                // 启动三条线程分别从startposition位置开始下载文件
                new DownLoadThread(i, startposition, threadfile, threadlength, path).start();
            }
            int quit = System.in.read();
            while ('q' != quit) {
                Thread.sleep(2000);
            }
        }
    
        private class DownLoadThread extends Thread {
            private int threadid;
            private int startposition;
            private RandomAccessFile threadfile;
            private int threadlength;
            private String path;
    
            public DownLoadThread(int threadid, int startposition, RandomAccessFile threadfile, int threadlength, String path) {
                this.threadid = threadid;
                this.startposition = startposition;
                this.threadfile = threadfile;
                this.threadlength = threadlength;
                this.path = path;
            }
    
            public DownLoadThread() {
            }
    
            @Override
            public void run() {
                try {
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setConnectTimeout(5000);
                    conn.setRequestMethod("GET");
                    // 指定从什么位置开始下载
                    conn.setRequestProperty("Range", "bytes=" + startposition + "-");
                    // System.out.println(conn.getResponseCode());
                    if (conn.getResponseCode() == 206) {
                        InputStream is = conn.getInputStream();
                        byte[] buffer = new byte[1024];
                        int len = -1;
                        int length = 0;
                        while (length < threadlength && (len = is.read(buffer)) != -1) {
                            threadfile.write(buffer, 0, len);
                            // 计算累计下载的长度
                            length += len;
                        }
                        threadfile.close();
                        is.close();
                        System.out.println("线程" + (threadid + 1) + "已下载完成");
                    }
                } catch (Exception ex) {
                    System.out.println("线程" + (threadid + 1) + "下载出错" + ex);
                }
            }
    
        }
    }

    注意事项:

    • int filelength = conn.getContentLength(); //获得下载文件的长度(大小)
    • RandomAccessFile file = new RandomAccessFile(filename, “rwd”);//该类运行对文件进行读写,是多线程下载的核心
    • nt threadlength = filelength % 3 == 0 ? filelength/3:filelength+1;//计算每个线程要下载的量
    • conn.setRequestProperty(“Range”, “bytes=”+startposition+”-“);//指定从哪个位置开始读写,这个是URLConnection提供的方法
    • //System.out.println(conn.getResponseCode());
      //这个注释了的代码是用来查看conn的返回码的,我们前面用的都是200,而针对多线程的话,通常是206,必要时我们可以通过调用该方法查看返回码!
    • int quit = System.in.read();while(‘q’ != quit){Thread.sleep(2000);}
      //这段代码是做延时操作的,因为我们用的是本地下载,可能该方法运行完了,而我们的线程还没有开启,这样会引发异常,这里的话,让用户输入一个字符,如果是’q’的话就退出
    展开全文
  • 网上难得一见的好东东 学习串口通信和串口监控的经典范例 包含以下内容的源代码 ...重点:熟悉计算机监控的主要模型,为实际的工程项目开发提供理论指导,构建安全的主机系统,保障基于网络的计算机监控系统的安全。
  • 21世纪普通高等教育应用型规划教材·计算机系列:JSP网络程序设计 作者:关东升 当当下载地址:http://product.dangdang.com/product.aspx?product_id=22490450 京东下载地址:...JSP是JavaEE知识系统的核心内容之一,...

    21世纪普通高等教育应用型规划教材·计算机系列:JSP网络程序设计

    作者:关东升
    当当下载地址:http://product.dangdang.com/product.aspx?product_id=22490450
    京东下载地址:http://book.360buy.com/10829851.html
    2011-08-01/北京邮电大学出版社
    JSP是JavaEE知识系统的核心内容之一,多年来JavaEE一直是企业级开发的主要技术,经过10多年的发展JavaEE已经很成熟了,JavaEE也是相当的普及。为了能够在高校培养出更加适合企业需要的Java程序员,我们编写了这门《JSP网络程序设计》。
      作为多年的培训讲师,我们了解企业的需求,也了解高校学生情况,为了能够培训出适合企业需要的学生,在以往授课过程中发现采用“项目驱动的、 案例式教学模式”,学生接受起来很容易。因此,本书也采用了案例驱动模式展开讲解知识点,然后再展开介绍。案例驱动模式优势能够使学生学习了某一个知识点 能够知道这个知识点在开发一个项目中所处的地位和作用等,当然,在具体的知识点讲解我又安排了很多的补充案例,充分的体现以“项目驱动的、案例式教学模 式”,实践证明这是非常有效的教学模式。
      在课程的编写过程中我们走访多家企业,我们所编制的知识点都是力求满足企业开发的需要,而非面面俱到面面不到方式。
      《JSP网络程序设计》适合于高校老师和学生学习使用JSP和JavaEE,也适合于对于java和JavaEE感兴趣的程序员、软件开发和系统设计人员。
    目录:
    第1章 开篇综述
    1.1 JavaEE的优势
    1.1.1 保留现存的IT资产
    1.1.2 高效的开发
    1.1.3 可伸缩性
    1.1.4 稳定的可用性
    1.2 JavaEE的组件
    1.2.1 Servlet与JSP
    1.2.2 JDBC
    1.2.3 JNDI
    1.2.4 RMI
    1.2.5 JMS
    1.2.6 EJB
    1.3 J avaEE应用系统架构设计
    1.3.1 表示层
    1.3.2 服务层
    1.3.3 数据持久层
    1.3.4 企业信息系统层
    1.4 开发环境的搭建
    1.4.1 Tomcat下载与安装
    1.4.2 MyEclipse下载与安装

    第2章 图书管理系统分析与设计
    2.1 系统需求
    2.2 需求分析
    2.2.1 图书管理系统的静态页面
    2.2.2 系统用例
    2.2.3 分析类
    2.3 系统设计
    2.3.1 系统类图
    2.3.2 数据库物理模型

    第3章 XML应用技术
    3.1 XML概述
    3.1.1 XML的用途
    3.1.2 XML与HTML的区别
    3.1.3 良好的格式
    3.1.4 XML文件需要验证(Validity)
    3.2 XML文件
    3.2.1 XML文件的结构
    3.2.2 XML文件的组成
    3.2.3 XML文件的声明
    3.2.4 XML文件的语法
    3.3 在Java程序中访问XMI.文件
    3.3.1 JAXP API基础
    3.3.2 DOM对象模型
    3.4 图书管理系统中的XML应用

    第4章 数据持久层技术
    4.1 数据持久层技术概述
    4.1.1 Java对象的序列化
    4.1.2 Java对象保存到数据库中
    4.2 JDBC技术
    4.3 数据库驱动器程序
    4.3.1 驱动程序分类
    4.3.2 装载方法
    4.3.3 DriverManager
    4.4 JDBC中的接口
    4.4.1 Connection接口
    4.4.2 Statement接口
    4.4.3 RestlltSet接口
    4.5 案例分析
    4.5.1 JDBC-ODBC桥方式连接数据库
    4.5.2 MySQL数据库访问
    4.6 图书管理系统中的数据持久层技术
    4.6.1 图书管理系统中DAO设计模式
    4.6.2 图书管理系统中儿)BC硬编码问题

    第5章 JavaBean组件技术
    5.1 JavaBean组件
    5.1.1 什么是JavaBean
    5.1.2 JavaBean编写规范
    5.1.3 JavaBean的属性
    5.1.4 JavaBean的方法访问
    5.2 图书管理系统中的JavaBean
    5.2.1 JavaBean分类
    5.2.2 回顾设计类图

    第6章 Web技术基础
    6.1 表示层技术概述
    6.2 HTTP协议
    6.2.1 HTTP协议的主要特点
    6.2.2 HTTP协议中几个概念
    6.2.3 HTTP协议的基本原理
    6.3 HTML超文本标识语言
    6.3.1 HTML
    6.3.2 HTML中最基本的标签
    6.3.3 属性
    6.3.4 标签
    6.3.5 标签
    6.3.6 标签
    6.3.7 ……

    转载于:https://www.cnblogs.com/516inc/articles/2228664.html

    展开全文
  • 21世纪普通高等教育应用型规划教材·计算机系列:JSP网络程序设计 [img]http://dl.iteye.com/upload/attachment/578858/b5b11f73-b939-30d6-a928-0916f10e3c47.jpg[/img] 作者:关东升 当当下载地址:[url]...
    21世纪普通高等教育应用型规划教材·计算机系列:JSP网络程序设计 
    [img]http://dl.iteye.com/upload/attachment/578858/b5b11f73-b939-30d6-a928-0916f10e3c47.jpg[/img]
    作者:关东升
    当当下载地址:[url]http://product.dangdang.com/product.aspx?product_id=22490450[/url]
    京东下载地址:[url]http://book.360buy.com/10829851.html[/url]
    2011-08-01/北京邮电大学出版社
    JSP是JavaEE知识系统的核心内容之一,多年来JavaEE一直是企业级开发的主要技术,经过10多年的发展JavaEE已经很成熟了,JavaEE也是相当的普及。为了能够在高校培养出更加适合企业需要的Java程序员,我们编写了这门《JSP网络程序设计》。
      作为多年的培训讲师,我们了解企业的需求,也了解高校学生情况,为了能够培训出适合企业需要的学生,在以往授课过程中发现采用“项目驱动的、案例式教学模式”,学生接受起来很容易。因此,本书也采用了案例驱动模式展开讲解知识点,然后再展开介绍。案例驱动模式优势能够使学生学习了某一个知识点能够知道这个知识点在开发一个项目中所处的地位和作用等,当然,在具体的知识点讲解我又安排了很多的补充案例,充分的体现以“项目驱动的、案例式教学模式”,实践证明这是非常有效的教学模式。
      在课程的编写过程中我们走访多家企业,我们所编制的知识点都是力求满足企业开发的需要,而非面面俱到面面不到方式。
      《JSP网络程序设计》适合于高校老师和学生学习使用JSP和JavaEE,也适合于对于java和JavaEE感兴趣的程序员、软件开发和系统设计人员。
    目录:
    第1章 开篇综述
    1.1 JavaEE的优势
    1.1.1 保留现存的IT资产
    1.1.2 高效的开发
    1.1.3 可伸缩性
    1.1.4 稳定的可用性
    1.2 JavaEE的组件
    1.2.1 Servlet与JSP
    1.2.2 JDBC
    1.2.3 JNDI
    1.2.4 RMI
    1.2.5 JMS
    1.2.6 EJB
    1.3 J avaEE应用系统架构设计
    1.3.1 表示层
    1.3.2 服务层
    1.3.3 数据持久层
    1.3.4 企业信息系统层
    1.4 开发环境的搭建
    1.4.1 Tomcat下载与安装
    1.4.2 MyEclipse下载与安装

    第2章 图书管理系统分析与设计
    2.1 系统需求
    2.2 需求分析
    2.2.1 图书管理系统的静态页面
    2.2.2 系统用例
    2.2.3 分析类
    2.3 系统设计
    2.3.1 系统类图
    2.3.2 数据库物理模型

    第3章 XML应用技术
    3.1 XML概述
    3.1.1 XML的用途
    3.1.2 XML与HTML的区别
    3.1.3 良好的格式
    3.1.4 XML文件需要验证(Validity)
    3.2 XML文件
    3.2.1 XML文件的结构
    3.2.2 XML文件的组成
    3.2.3 XML文件的声明
    3.2.4 XML文件的语法
    3.3 在Java程序中访问XMI.文件
    3.3.1 JAXP API基础
    3.3.2 DOM对象模型
    3.4 图书管理系统中的XML应用

    第4章 数据持久层技术
    4.1 数据持久层技术概述
    4.1.1 Java对象的序列化
    4.1.2 Java对象保存到数据库中
    4.2 JDBC技术
    4.3 数据库驱动器程序
    4.3.1 驱动程序分类
    4.3.2 装载方法
    4.3.3 DriverManager
    4.4 JDBC中的接口
    4.4.1 Connection接口
    4.4.2 Statement接口
    4.4.3 RestlltSet接口
    4.5 案例分析
    4.5.1 JDBC-ODBC桥方式连接数据库
    4.5.2 MySQL数据库访问
    4.6 图书管理系统中的数据持久层技术
    4.6.1 图书管理系统中DAO设计模式
    4.6.2 图书管理系统中儿)BC硬编码问题

    第5章 JavaBean组件技术
    5.1 JavaBean组件
    5.1.1 什么是JavaBean
    5.1.2 JavaBean编写规范
    5.1.3 JavaBean的属性
    5.1.4 JavaBean的方法访问
    5.2 图书管理系统中的JavaBean
    5.2.1 JavaBean分类
    5.2.2 回顾设计类图

    第6章 Web技术基础
    6.1 表示层技术概述
    6.2 HTTP协议
    6.2.1 HTTP协议的主要特点
    6.2.2 HTTP协议中几个概念
    6.2.3 HTTP协议的基本原理
    6.3 HTML超文本标识语言
    6.3.1 HTML
    6.3.2 HTML中最基本的标签
    6.3.3 属性
    6.3.4 标签
    6.3.5 标签
    6.3.6 标签
    6.3.7 ……
    展开全文
  • 计算机基础

    千次阅读 2007-07-26 14:01:00
    下载第11章计算机基础计算机是人们最熟悉的数字网络的范例之一。计算机体系结构的研究涉及组成计算机的基本的数字部分如何互连以形成系统特性。本章,我们将分析用来构造计算机的组件,以及它们如何联合运作来提供...
    下载
    第11章计算机基础
    计算机是人们最熟悉的数字网络的范例之一。计算机体系结构的研究涉及组成计算机的
    基本的数字部分如何互连以形成系统特性。本章,我们将分析用来构造计算机的组件,以及
    它们如何联合运作来提供基本的功能。
    11.1 计算机操作概述
    为了理解组成计算机的基本单元,我们考虑一台典型的台式个人计算机工作时所使用的
    操作。
    给计算机加电,启动一个称为操作系统的程序;普通的样例是U n i x 和M i c r o s o f t
    Wi n d o w s R的变体。操作系统提供命令,即从用户的视角所需的系统功能。它包含许多例程,
    用来连续不断地扫描键盘和鼠标以检测输入,在磁盘驱动器上检索和存储数据,为了在监视
    器上显示而发送数据到视频存储器,以及启动应用程序如字处理器和逻辑C A D工具集等等。
    应用程序的启动,首先需要从磁盘驱动器(或其他来源)把应用程序载入主系统存储器,
    然后指定第一条指令的存储器地址。操作系统找到第一条命令,检索并执行它,然后依次到
    第二条命令,等等。一旦该操作完毕,程序接管序列,应用就运行起来。程序自身由一组有
    序的命令组成,它们告诉计算机把数据传送到系统里的各处(如在一个数据库程序之中),或
    者执行一些操作如加法。
    这个简单的概述足以说明构造计算机的主要的逻辑部件。首先,我们必须有某种存储设
    备来保存程序和数据。我们将看到,计算机通常以两种形式提供存储设备,即大容量的系统
    存储器和少数的一组快速寄存器。第二,我们必须有一个能够执行基本的二进制操作的逻辑
    部件,如算术和逻辑功能所需的那些部件。最后,我们必须有一个逻辑网络,它能够接收一
    条命令并把它翻译到控制系统操作的二进制信号集中。
    11.1.1 计算机的主要组件
    典型的计算机能够划分为五个主要的部分,每一部分执行一组具体的任务。图11 - 1中的
    框图从一般的视角说明了计算机的主要部分。对于外界的用户,在我们的世界和二进制环境
    之间的接口是通过一组电路,它允许我们输入信息与检索结果。这些行为由两种主要的电路
    来管理。
    1. 输入网络这些电路允许设备如键盘、鼠标、磁盘驱动器、CD ROM或者扫描仪给计算
    机提供输入数据。
    2. 输出网络因为信息以二进制处理,要在平常的世界里应用,它必须被编码。输出设
    备的例子是监视器和写模式磁盘驱动器。
    一些设备同时具有输入和输出功能。例如,调制解调器允许用户发送和接收数据。
    尽管输入/输出( I / O)电路是计算机的集成部分,对于初学者,内部电路更令人感兴趣,
    因为正是在这儿,进行着机器的内部工作。内部电路包括三个主要的部分。
    下载
    图11-1 计算机的主要组件
    3. 存储器存储器为程序、数据和其他必需的项目如操作系统提供存储功能。
    4. 数据通道如其名称暗示,数据通道表示事件处理期间数据流动的通道。我们将看到,
    数据通道的结构决定了计算机能够执行的操作。这包括事项,如代数运算(加法、乘法等)
    和数据到存储器之间的来回传送。
    5. 控制数据通道被设计来提供许多不同的操作。关于数据怎样被处理,每一个操作有
    它自身的需求。例如,加法使用一个加法器来实现,从而输入字必须被指引到该加法器电路。
    控制器负责确保把数据发送到正确的电路。
    数据通道和控制器通常组合在一起,形成中央处理器(C P U)。图11 - 1中,我们已经在中
    央处理器中包括了一个标注为局部存储器的方框。局部存储器,称为高速缓冲存储器(c a c h e),
    允许中央处理器执行功能,而不必要总是从主存储器中检索数据。
    11.1.2 计算机能做什么
    尽管计算机能够解决非常复杂的任务,但其内部操作模式非常有限。一般地,计算机仅
    仅提供两种基本类型的操作:
    • 数据传送

    • 执行二进制操作。
    数据传送恰如其听起来一样:在系统里把数据从一点传送到另一点。这除了包括在C P U
    内的数据通道中传送数据到各处之外,还包括在存储单元中存储和检索信息。
    计算机内置的二进制操作集通常组合为主要的两组。第一组是逻辑功能,如N O T和
    X N O R等,允许我们对经过数据通道的二进制字执行布尔操作。当使用正确时,这就赋予机
    器判决能力。第二组操作是算术功能。这些包括加法和减法,在较高级的设计还包括乘法和
    除法。
    计算机能够执行的每一个操作称为一条指令。指令的聚合称为指令系统。指令的数量和
    类型由数据通道的电路结构决定。例如,除非数据通道之中有加法器,否则计算机不能执行
    加法。每一计算机根据指令系统的具体细节区别于其他所有计算机。
    298 数字系统设计基础教程
    系统存储器
    局部存储器控制
    数据通道输出电路
    中央处理器
    用户
    输入电路
    11.1.3 冯·诺依曼模型
    直到最近,大多数的计算机都是基于约翰·冯·诺依曼开发的模型,该模型描述了一个
    程序中的每一条指令线的有序执行。图11 - 2为理解冯·诺依曼机器的主要特征提供了一个简
    单的可视化辅助。
    图11-2 可编程计算机的冯·诺依曼模型
    该框图描绘了两个主要的部分。存储单元用于存储程序和数据。一般地,这两类信息保
    存在存储单元的不同部分,如图中所隐含。程序由一系列指令组成,它们标注为
    指令0,指令1,指令2,. . .
    等等。程序是有序的,因为指令号表明了执行的一般次序。确定下一条指令是控制器的责
    任。术语“数据”用来指示正被处理的信息。例如,“数据”可能包括如名称和地址等条
    目。
    中央处理器( C P U)是冯·诺依曼模型的另一个主要部分。它由数据通道和控制器组
    成。数据通道方框代表实现每一条指令所必需的逻辑电路,如加法或者逻辑操作。因为数
    据通道网络有能力提供几种不同的操作,所以我们必须发送信号,指定要使用哪些电路。
    这是控制器的责任;它发送信号到数据通道单元,激活正确的电路。在控制器中,有一个
    单独的存储区域,用来容纳当前的指令字;它在图中显示为一个小的矩形,称为指令寄存
    器(I R)。
    计算机的冯·诺依曼模型基于一个重复的四周期过程来执行程序。这些周期被命名和描
    述如下。
    1. 取指令(Instruction Fetch) 在第一个周期期间,中央处理器发送一个信号到存储单
    元,告诉它需要哪一条指令。存储器响应,发送该指令到C P U,保存在控制器中。
    2. 指令译码(Instruction Decode) 译码就是翻译二进制指令并确定为了实现这个操作在
    C P U中必须做些什么的过程。这个信息从控制器发送到数据通道。
    3. 指令执行(Instruction Execute) 在数据通道从控制器接收到信息之后,指令可以被
    执行。数据通道接收必需的输入数据,不是从存储器,就是从自身之中的局部存储器,并输
    出结果。
    第11章计算机基础299
    下载
    控制器
    指令
    取指令
    存储器
    程序
    指令0
    指令1
    指令2
    指令3
    指令4
    指令5
    指令
    发送数据
    接收数据
    数据
    数据0
    数据1
    数据2
    数据通道
    中央处理器
    输入输出
    4. 存储(S t o r a g e) 周期的最后一步是把结果回存到存储器中。
    程序中的每一条指令使用相同顺序的过程来处置。
    关于计算机的描述,观察到的重要一点是,只要程序在运行,系统就重复相同的四个周
    期。指令之间主要的差别通过改变数据通道网络执行的功能来操纵。以后我们将看到,数据
    通道电路使用多路选择器和其他开关元件,“导引”数据经过大量的逻辑的级联组合,提供不
    同的操作。
    分析这种模型的计算机的速度也是有用的。如果计算机的功能以硬件实现,那么完成一
    条指令将需要的总的时间是
    tI n s t=tI F+tI D+tE X+tS ( 11 - 1 )
    在这个方程中,
    tI F= 执行取指操作所需要的时间,
    tI D= 执行指令译码所需要的时间,
    tE X= 在数据通道中的执行时间,和
    ts= 存储结果所需要的时间。
    显然, tI n s t值小意味着计算机较快,因为在一秒钟之内能够完成更多的指令。在冯·诺依曼模
    型里,计算机的速度通过减少执行每一条指令所需要的时间来提高。因为定时通常由一个外
    部应用的时钟信号ø(t)控制,那么时钟频率f 越高,计算机运行得就越快。
    理解计算机固有的计算能力的关键在于把上面的序列和指令系统的概念结合起来。每一
    条指令不是从一点到另一点传送数据,就是接收一个二进制输入,执行一个逻辑或算术操作,
    并返回一个结果。单个操作并不能独立完成多少事情。然而,如果指令时间tI n s t很小,那么计
    算机在一个很短的时间内能够执行许多条指令。举个例子,即使一个“慢” C P U,指令时间
    tI n s t小于0 . 1ms ,意味着该计算机每秒钟能够执行大约一千万条指令(众所周知的1 0 M I P S)。
    从而,尽管单个操作有限,正是计算机执行成千上万条指令的能力赋予计算机强大的计算能
    力。
    11.1.4 编程
    我们都熟悉计算机使用一门高级语言如P a s c a l或者C编程的概念。一个程序是一个有序的
    命令列表,告诉操作序列完成具体的任务。程序中的每一行(或行组)使用启动某些行为的
    特殊的字符构造。命令构造的具体方式称为语法;这包括具体命令字符的次序和用法,以及
    必须附带的其他方面,如分隔符(句号、逗号、分号等)的使用。每一门高级语言都以这种
    方式定义。
    因为数字系统是基于二进制数值系统的,计算机仅能处理由0和1组成的二进制字。这称
    为机器语言级,人要使用是非常麻烦的。计算机的二进制逻辑电路被设计来接受指定的二进
    制格式的命令,促使需求的动作发生。计算机的字长n是指用于数据段的位的个数。在许多系
    统里,各指令使用相同的字长。尽管n可以是2的任意次幂,大多数的现代系统使用1 6位的偶
    数倍字长。例如,目前的台式计算机采用3 2或者6 4位字长。
    300 数字系统设计基础教程
    下载
    一微秒由1ms=10-6s定义。
    现在,我们转向这样一个概念,我们怎样对一个由逻辑网络构建的数字计算机编程。
    以高级语言编写的程序必须使用一个称为编译器的特殊程序翻译到机器语言。这个过程示
    意性地在图11 - 3中说明。编译器接受以高级语言编写的程序,产生计算机能够理解的机器
    语言指令序列。读和解释机器语言是十分困难的,所以我们还引入了另一类语言,称为汇
    编语言,帮助我们理解计算机内部的操作。汇编程序命令与每一个二进制机器语言命令是
    一一对应的,但是它们使用助记符,如“ a d d”和“ s u b”,使它们更易于解释。我们将趋于
    使用汇编语言来说明计算机指令。尽管起初它可能看起来有点奇怪,但它易于学习,因为
    助记符会是一个易于记忆的好选择。更重要的是,汇编语言允许我们了解计算机如何操作
    的细节。
    图11-3 编程语言的层次
    11.1.5 计算机寄存器
    寄存器就是组合在一起存储整个字的一组独立的存储单元。在计算机中,寄存器以几种
    不同的方式使用,但所有的寄存器有着相同的基本功能:它们能够用来存储一个二进制字。
    尽管我们在第9章中已经分析了寄存器,在这里,我们将移到一个更加精确的视角,帮助我们
    理解它。
    当讨论计算机中的数据流时,我们将使用简化的符号表示寄存器。它们如图11 - 4所示。
    图11 - 4 a表示能够存储一位的单个存储单元;注意它的内部电路的细节被忽略了,因为在层次
    的这一级,只有存储特性是重要的。为了建立一个3 2位寄存器,我们简单地组合3 2个独立的
    单元,如图11 - 4 b所示,标记各位为d3 1到d0。尽管它提供了所有必需的信息,由于有3 2根输入
    线和3 2根输出线,画起来是麻烦的。这导致我们使用比较简单的草图11 - 4 c,对于我们的讨论,
    它是优选的符号。输入和输出线已经被表示3 2根独立位线的单根数据总线所取代。总线的宽
    度由贯穿总线的“斜线”(/)和总线携带的位数( 3 2)表示。这个简化符号对于我们的草图
    是足够的,只要我们记住它表示一个存储3 2 b i t字的数字元件。有时,显式地表示寄存器的内
    容(内部存储的字)将是有用的,如图11 - 4 d所示。
    第11章计算机基础301
    下载
    f=x+y
    g=w-z
    if(f==g)then
    result=2*x
    else
    result=6*w
    add R3, R2, R5
    sub R7, R18, R7
    beq R3, R7,
    0x60a5
    ...
    汇编语言
    编译器
    高级
    语言
    程序
    计算
    机的
    机器
    语言
    图11-4 用于表示寄存器的原理图符号
    11.2 中央处理器:初识
    计算机的心脏是中央处理器。这组电路决定了计算机能够提供的操作,通常指示出整个
    系统的性能。可以预见,详细地研究C P U是相当复杂的;如果整个C P U作为单个器件来分析,
    尤其如此。然而,可以使用层次设计的概念把C P U分解为几个截然不同的部分,每一部分能
    够相对于其他部分独立地研究。
    我们将分析一个“典型”的现代计算机系统的基本操作。尽管这个讨论十分平常,我们
    的研究将使用相当具体的引用,包含某些细节。这些被选取,是为了给那些打算在将来更加
    详细地研究计算机的人提供一个可靠的背景。
    11.2.1 取指令网络
    为了执行存储在存储器中的程序,我们必须把指令送入处理器。这个使用取指令网络完
    成,取指令网络是控制器内部的一个子系统。
    程序是二进制字的有序列表,每一个字提供逻辑网络执行一个具体操作所必需的信息。
    当程序存储在存储器中时,每一个二进制字对应它在程序中的位置,被分配给一个独一无二
    的地址。图11 - 5中提供的例子说明了这一点。指令序列由数字给定, Inst 0是第一个, Inst 1是
    下一个,等等。每一条指令由一个二进制字代表。我们在草图中已经使用了3 2位字,但实际
    的大小依赖于计算机。
    通常以一种方式划分存储器,允许我们指定每一个8位字节的地址。一个3 2位字由四个字
    节组成,所以相邻两条指令的地址相差4。我们来分析,数据是如何通过引用图中的数值而被
    存储的。Inst 0位于十进制地址0 4 0 0,有二进制数值
    0 11 0 1100 11111010 11110000 1111 0 0 0 0
    下一条指令是Inst 1,它位于十进制地址0 4 0 4,有二进制数值
    11000101 10110101 00001111 1111 0 0 0 0
    等等。
    302 数字系统设计基础教程
    下载
    a) 单个位单元
    输入
    输出
    b) 32 位寄存器
    c) 简化符号
    d) 显示的内容
    这里选择的体系结构,如以后所解释的,是称为R I S C设计的一个例子。
    图11-5 存储器中存储的程序序列
    一个基本的取指令逻辑网络由图11 - 6中的框图描述。取指令网络的主要部分包括两个寄
    存器。指令寄存器(I R)包含程序指定的当前操作例如一个加法的二进制指令字。程序计数
    器(P C)用于指令执行时,通过计数指令来维持程序流。它包含计算机将要检索和执行的下
    一条指令的存储器地址。
    图11-6 取指令(IF)网络的操作
    取指令网络的操作由程序序列存储在存储单元之中的事实规定。程序计数器是一个寄存器,
    存储从存储器取回的当前指令的地址。它供应给存储器,相关的数据字就被传送到指令寄存器。
    例如,如果我们希望从存储器中获得Inst 0,那么我们以0 4 0 0的二进制等效值预置P C;这导致
    了所需的至I R的传送。为了获得下一条指令( Inst 1),提供一个加法器单元,按照
    P C=P C+X
    递增P C的内容,这里X= 4是得到下一条指令所需的间隔。在当前的例子中,这意味着
    P C= 0 4 0 0 + 4
    致使Inst 1传送到I R。一旦处于I R中,指令就被计算机中其他的电路译码,使指令得以执行。
    当该过程结束,指令作用完毕,下一条指令从存储器中取出,传送到I R。这个过程允许我们
    有序地执行程序行。
    11.2.2 数据通道的概念
    既然我们已经了解指令怎样从存储器中取出并保存在指令寄存器里,让我们扩大对图11 - 7
    所示的中央处理器的视角。这个框图描绘了C P U的主要组成部分,但是在各部分之间仅仅包
    第11章计算机基础303
    下载
    地址次序
    指令0
    指令1
    指令2
    指令3
    指令4
    指令5
    指令6
    指令7
    指令8
    二进制指令
    程序计数器(PC)
    指令寄存器(IR)
    增量
    地址
    存储器
    数据输出
    含了少量的实际接线。细节的缺乏是故意的,因为在我们分析赋予计算机编程特性的体系结
    构的特征之后,互连方案最好理解。
    图11-7 中央处理器由数据通道和控制器组成
    指令寄存器显示在控制器的中心。一旦一条指令被置入I R中,该指令字的各位作为输入
    进入图中所示的控制逻辑网络。控制逻辑网络由逻辑门组成,它们提供已知的输出,共同作
    为控制信号,通过控制线供应给数据通道。控制信号用来告诉逻辑电路正确地设置数字元件,
    如多路选择器。在某些情况下,控制逻辑单元的输出将包含来自于指令自身的数据位。
    现在考虑标注为数据通道的部分。数据通道电路给可由计算机执行的每一条指令提供必
    需的逻辑。数据流由包含于数据通道块内部的大箭头表示,指示数据字可以采用的通道。多
    路选择器和多路分配器由简单的交叉点表示;它们的含义在图11 - 8中阐明。数据流的选择规
    定了一大类基本的计算机指令,包括系统内一般的数据转移。通常,数据通道网络能被分解
    为主要的三组电路:寄存器文件(register file)、算术逻辑单元(A L U)和局部存储器(l o c a l
    m e m o r y)块。
    a) MUX等效b) DeMUX等效
    图11-8 简化的MUX和DeMUX符号
    寄存器文件是一组通用存储的寄存器,用来存储当前计算链中要使用的数据字。开关网
    络允许我们为数据存储选择输入寄存器,也允许我们选择读操作时使用的输出寄存器。框图
    中描绘的寄存器文件允许从两个不同的寄存器同时输出,然后供应给下一逻辑块的输入A和B。
    304 数字系统设计基础教程
    下载
    控制器
    指令寄存器
    控制逻辑
    控制线
    选择ALU
    功能
    局部存储器
    寄存器文件
    数据通道
    算术逻辑单元( A L U)是提供所有算术操作(如加法和减法)和逻辑功能(如N O T和O R)
    的一组电路。A L U独特的方面在于,它是依赖应用于它的控制信号而能够提供几种不同的操
    作的单个电路。在图中,这些信号来源于控制逻辑部分,标注了“选择A L U功能”。
    图中所示的余下部分标注为局部存储器。这是一小部分存储器,称为高速缓冲存储器
    (c a c h e)。它包含于C P U之中,提供快速的读写操作,那将不会减慢计算机的操作。尽管显示
    它与C P U相隔离,事实上,它既与C P U组件通讯,又与主系统存储器通讯。
    11.2.3 数据通道操作
    现在,我们来分析数据通道,以了解数据如何能够实际地在单元之间移动。如图所示,
    基本的C P U允许执行三种主要的操作。它们根据数据原始的和最终的目的组合一起。
    寄存器到寄存器操作
    这类操作从寄存器文件中接受数据字,把它们用作ALU 的输入。然后,把结果存回到寄
    存器文件中。
    寄存器到寄存器操作的等效数据通道表示在图11 - 9中。在这个例子里,数据字x和y从寄存
    器文件复制,分别作为A L U的输入A和B。A L U然后产生一个结果R(A,B)=z,它被导回到寄
    存器文件并存储在那里。因为这类操作允许数据流过A L U,所以它被用来执行C P U中所有的
    算术和逻辑操作。例如,指令
    ( 11 - 2 )
    图11-9 寄存器到寄存器操作的数据通道,这里数据来源于寄存器,结果被存回到寄存器
    都能够使用这类数据通道操作来实现。然而注意,在一条指令能被执行之前,数据必须首先
    在寄存器之中。这使得强制地提供操作,允许数据在寄存器和存储器之间传送。
    置入(L o a d)
    当一个程序启动时,数据通常只置入计算机的存储器中。为了在我们的系统中实现寄存
    器到寄存器操作,数据必须在A L U能够访问它之前从存储器转移到寄存器文件中。这种操作
    称为置入,置入字(load word)指令助记符号为l w。图11 - 1 0表示数据通道网络实现置入操作
    的部分。因为我们希望从存储器中接受一个字,所以我们必须指定该字所处的地址。这由从
    第11章计算机基础305
    下载
    寄存器文件
    局部
    寄存器
    指令寄存器和控制器中接收的A L U输入A实现;A的实际值是程序的一部分。只要该地址送给
    存储单元,数据d就从指定位置传送到一个寄存器。
    图11-10 置入字指令允许我们从存储器转移数据字到特定的寄存器
    存储(S t o r e)
    存储操作给出存储字(s w)指令,是置入的对立面。它允许我们从一个寄存器转移一个
    数据字,写到存储阵列。图11 - 11中的数据流通道表明了这种操作的重要方面。地址A经过
    A L U,指明该字要存放的位置。然后从寄存器文件中接收数据x,并置于存储器中。
    图11-11 存储字指令允许我们从寄存器转移数据并把它存储在存储器中
    尽管此刻,我们对计算机的考察高度地被简化,这三类操作说明了用来构造现代计算机指令
    系统的最重要的数据流通道。
    11.3 数据通道组件
    既然我们已经了解了计算机中基本的数据流通道的特性,我们来更加详细地研究数据通
    道组件。每个主要单元在这一节中分析;我们的目标是获得每一组件的系统级操作的更全面
    的描述。在我们已经完成了详细研究之后,我们将讨论逻辑单元的连接如何构造计算机的指
    令系统。
    11.3.1 寄存器文件
    计算机的中央处理器提供一种存储数据字的途径,它能够容易地把数据字用作A L U的输
    306 数字系统设计基础教程
    下载
    寄存器文件
    局部
    存储器
    数据
    d = 数据
    地址
    地址
    寄存器文件
    局部
    存储器
    A=地址
    地址
    x = 数据
    入。这些存储位置由几个寄存器组成,它们以一种便利的方式接入数据通道。总体上,这组
    寄存器被称为寄存器文件。它可以看作是一个归档的小柜子的电子模拟,在那里,每个寄存
    器就象一个抽屉,能够容纳独立于所有其他抽屉里所包含的条目。
    寄存器文件的一个样例表示在图11 - 1 2中。它由标注为R 0到R 3 1的3 2个寄存器组成;每个
    寄存器为3 2位宽。寄存器文件有单根3 2 b i t输入总线,允许用户每次把一个字存入文档中的一
    个寄存器。输入字被写入由5 b i t目的选择字
    d4d3d2d1d0
    指定的寄存器中。来自寄存器文件的、由A和B表示的两个3 2 b i t输出显示在右边。传送到这些
    线的数据字依赖于源选择字
    s4s3s2s1s0
    (对于选择A)和对象选择字
    t4t3t2t1t0
    (对于选择B)。只要选择字被指定,所选择的寄存器的内容就被传送到正确的输出。这是一个
    非破坏性的操作,因为在读操作之后,寄存器的内容仍然完整无缺。
    图11-12 寄存器文件的结构
    框图提供了寄存器文件的系统级描述,但是它没有说明该单元是如何由较小的积木所构
    造的。尽管对于理解该单元在计算机中如何作用,内部工作的知识是不必要的,研究寄存器
    文件如何应用比较简单的组件来创建还是值得的。在层次结构中,我们降低一级,使用图11 -
    1 3中的图示描述输入和输出选择操作。在这一级,寄存器仍然视作带3 2 b i t输入和输出线的单
    个的3 2 b i t结构。寄存器输出A和B的选择,使用两个独立的带3 2 b i t输入的3 2∶1多路选择器来
    实现。两个M U X单元有着相同的输入。这意味着,例如,寄存器R 0的输出连接到两个M U X
    单元中的0输入,寄存器R 1的输出连接到两个M U X的1输入等等。输出寄存器由5位M U X控制
    字s4s3s2s1s0和t4t3t2t1t0选择。例如,如果

    那么A为寄存器R2的内容,而B等于寄存器R2 8的内容。再一次注意,图中A和B都是3 2位字。
    输入(目的)寄存器由字d4d3d2d1d0决定,它控制寄存器文件输入一侧的1∶3 2多路分配器
    单元。对于输出一侧, d4d3d2d1d0的值决定数据发送到哪一个寄存器。例如,值
    d4d3d2d1d0= 0 0 0 0 1
    第11章计算机基础307
    下载
    目的源对象
    (源)
    (对象)
    32位输出
    32位输入
    32位输出
    存储输入字在寄存器R 1中,
    d4d3d2d1d0= 0 0 0 1 0
    发送输入字到R2等等,允许我们规定所需的目的。
    图11-13 寄存器文件结构的单元级视图
    因为逻辑电路创建于单个位级,在系统层次结构中进一步降低一级,达到图11 - 1 4中简化
    308 数字系统设计基础教程
    下载
    1∶3 2
    多路分
    配器
    来自ALU
    1∶3 2
    多路分
    配器
    来自ALU
    图11-14 寄存器文件的位级逻辑图解
    的电路,是有用的。该图说明了上图中相同的系统,但是只描绘每个寄存器的第0位b0。对于
    其他的每一位b1到b3 1,行为是相同的,所以显示单个位是足够的。注意,时钟信号ø已经显式
    地包含在这里,但在较高层次的视图中被隐含。
    这个视图说明了层次结构中基本的元件级视图。为了真实地建立完整的寄存器文件,我
    们将采取3 2个相同的电路,形成系统级结构。相反,如果我们想要以硬件实现它,我们必须
    降低层次结构。下一步将是使用逻辑门构造元件,然后,我们将转到晶体管级。最后一步是
    硅芯片的物理设计。
    11.3.2 算术逻辑单元
    算术逻辑单元( A L U)是计算机的一部分,它提供所需的算术功能,如A D D和S U B,和
    全部逻辑操作,如N O T、N A N D和X O R。尽
    管具体功能随处理器而变化,大多数现有的
    计算机拥有大量的公共操作。
    一个A L U的符号表示在图11 - 1 5中。这个
    单元有两个数据输入A和B,以及一个作为操
    作结果的输出R。尽管这个讨论十分普通,我
    们将假设A、B和R都是3 2 b i t宽,使体系结构
    更加逼真。
    在系统级,A L U的操作由功能选择字F控
    制;F中的位数fi取决于单元内置的操作的数
    量。A L U被设计来提供依赖于F值的不同的结
    果。这能够用方程形式表示,记作
    ( 11 - 3 )
    这里,A和B为输入,而F作为一个控制选择字。这解释如下。F能够假设为不同的值F0、F1、
    F2等等;每一个F值指定一种不同的操作,从而指定一种不同的结果Ra。这能够陈述为
    ( 11 - 4 )
    它说明了重要的一点, A L U能够提供不同的功能Ra、Rb、Rc等等。
    A L U的基本构造由将要内置于处理器的操作决定。为了理解该单元的构造,让我们假设F
    是一个3位字
    ( 11 - 5 )
    它有八个可能的值。在这种情况下,最多有八个不同的结果Ra到Rh(这里下标包括字母表的前
    8个字母)。因为每次只能选择一个结果,我们可以记R为
    ( 11 - 6 )
    第11章计算机基础309
    下载
    输入
    (功能选择)
    结果(输出)
    输入
    图11-15 算术逻辑单元(ALU)的符号
    它依赖于f2 f1 f0的值来选择输入。思索片刻将证实,这就是8∶1M U X的方程,带有输入Ra到Rh,
    带有由f2 f1 f0的值实现的选择。相应于该方程的多路
    选择器表示在图11 - 1 6中。为了构造这个A L U,我们
    必须提供用作M U X输入的多样的结果Ra、⋯Rh、。
    在作进一步处理之前,我们来分析这个A L U
    的并行结构。每一根数据线A、B和R都是3 2位宽。
    单独的位表示为
    ( 11 - 7 )
    允许我们可视化整个A L U,如图11 - 1 7 a所示。因
    为逻辑电路仅能处理单个位,所以A L U由3 2个相
    同网络的并行组合构造。如果我们分析第n位,这里n是在范围0到3 1内的任意一位,那么我们
    得到图11 - 1 7 b所示的位片。这是一个典型的电路,是通过把3 2位结构“切分”为单独位,然
    后选择一片进行研究来获得的。这个概念的作用很容易理解。只要我们已经展现了第n位电路
    的特性,仅仅通过并行3 2个该电路,我们就能够构造3 2位A L U。介绍并行网络全部的复杂性
    是不必要的。
    a) 32位ALU b) 位片
    图11-17 ALU位片的概念
    现在,我们转回到构造A L U的问题。图11 - 1 8表示了位片电路,它隐含了我们已经讨论过
    的特性。在这一级,输入由an和bn表示。它们用来通过一个功能网络产生不同的结果ra、rb⋯,
    这些结果被供应给一个多路选择器。功能选择字f2 f1 f0决定哪一个输入供应给输出rn。这个图解
    使这点很清楚,A L U仅能执行功能网络提供的操作。从而,选择最有效的操作是重要的。
    图11 - 1 9 a提供了A L U位片的一个例子。我们已经包括了加法和减法的代数操作,以及逻
    辑功能A N D、O R、X N O R(等价)、N O T和“通过”。首先分析应用到每一个M U X输入的结
    果,然后应用M U X自身的开关特性,就得到图11 - 1 9 b中的操作表。注意到这点十分重要,
    A L U有电路提供全部八个功能,但只有一个指向输出。
    作为A L U如何操作的一个例子,假设我们想要把两位an和bn相加。输入位an和bn通过由
    310 数字系统设计基础教程
    下载
    每个Ra
    宽32位
    图11-16 用来选择几个结果之一的多路选择器
    ALU
    第n位
    注意,这个例子仅为了说明用途,不与真实世界的任何处理器相符。
    “+ / -”表示的加/减单元,产生和数sn。选择A L U控制位为
    f2f1f0= 0 0 0
    图11-18 位片的单元级结构
    a) 逻辑网络b) 功能总结
    图11-19 ALU位片设计的例子
    就选定M U X输入0传送到输出rn。当然,这相应于求和,得到一个输出
    rn = an+bn
    若取而代之,我们使用
    那么M U X输入1将被选择,产生一个不同的输出
    第11章计算机基础311
    下载
    8∶1多路选
    择器
    第几位输出

    rn = an-bn
    我们已经假设,加/减选择位S能够由图中没有示出的附加电路来提供适当的值。
    那么现在,既然我们懂得了怎样设计A L U的一个位片,一个n位宽的电路就能够由
    • 复制这个位片(n-1 )次,然后
    • 并行地连接这n个电路。
    获得。
    需要记住的一个重要方面是,编号为j的加/减单元的进位输出位必须用作编号为( j+1)
    的加/减单元的进位输入位,以确保字的加法和减法是正确的。
    11.3.3 局部存储器
    在我们的例子里,局部存储单元在数据通道中提供。在设备场境中,如果它和C P U电路
    在同一集成电路上,它将类属于L 1(第一
    级)存储器。在实际的计算机里, L 1存储
    器提供快速的读/写存储,但它与主存储器
    相比较非常小。这类存储器用来提供快速
    的置入和存储操作,通常被称为高速缓冲
    存储器(c a c h e)。高速缓冲存储器连接数
    据流通道和主存储单元,如图11 - 2 0所示。
    在目前的讨论中, L1 cache只是作为一个通用的
    存储单元,提供读写操作的存储。c a c h e存储器
    的细节在第1 2章中作更深入的分析。
    c a c h e的操作将假定在操作上与一般的读/写
    存储阵列相同,能够使用图11 - 2 1所示的简化方
    框在系统级建立模型。它在阵列中的位置由地址
    输入指定。读/写控制信号R / W的值指定读/写操
    作发生,或者存储器不活动而刷新。
    11.4 指令和数据通道
    数据通道包括三个主要部分:寄存器文件、A L U和存储单元。我们能够这样总结我们关
    于C P U组件的研究,如下:
    • ALU功能决定能被执行的算术和逻辑操作的类型。
    • 寄存器文件提供一组快速的局部存储场所。
    • cache存储器允许我们访问大型的系统存储器。
    因为互连方案建立了允许的数据流通道,所以我们能够声明
    • 能够在一给定计算机上实现的指令由每一单元的属性以及它们如何连接而形成系统所决
    定。
    这称为计算机的体系结构,因为它告诉我们系统是怎样建立的。上句话仅仅认可这样一个事
    实,为了包含一条特定的指令,我们必须( a)在A L U中包含任何必需的逻辑,且( b)提供
    一个数据流通道,以便能够完成该操作。例如,如果我们想要在指令系统里包括A D D,那么
    312 数字系统设计基础教程
    下载
    数据流通道L1 cache
    (小而快)
    主存储器
    (大而慢)
    图11-20 局部存储器的概念
    图11-21 局部存储器的操作模型
    地址
    数据输入
    局部存储器
    数据输出
    我们必须在A L U中使用加法器,也确保我们能够选择所需的数据字来引入A L U。
    为了更加详细地说明这一点,我们将以基本单元开始,然后展示如何构造数据通道。在
    这一级,我们的目标是设计单个单元,它有多个数据通道,每一个都支持一类具体的数据流
    通道。该通道由指令字和相关的控制逻辑选择,在这个层次看作一组控制信号。
    首先,我们创建一个数据通道,它允许我们执行如下步骤:
    • 从一个寄存器R X中检索一个数据字。
    • 从一个寄存器RY中检索一个数据字。
    • 对这两个字执行一个逻辑或算术操作。
    • 然后存储结果到寄存器R Z。
    这可以由图11 - 2 2所示的数据流通道实现。寄
    存器文件输出直接与A L U的输入A和B接口。
    结果R出现在A L U输出处,被反馈到寄存器文
    件,并存储在那里。本章早先提及,这称为寄
    存器到寄存器指令,因为它使用来自寄存器文
    件的数据,并在那里存储结果。
    只要数据通道已经被确定,以A和B为输入能够导致的实际操作依赖于A L U内置的特性功
    能。在这个层次,独立的指令很容易使用汇编语言描述。早先提及,汇编语言使用助记符描
    述操作;一个助记符就是一个完整的单词的缩写版本,易于记忆。汇编语言的指令格式定义
    了每一符号的次序和意义。在我们的处理中,两数相加的寄存器到寄存器指令将记为
    add RZ,R X,RY #把R X的内容与RY的内容相加,结果放入R Z中
    这里,“#”号右边全部是注释语句,对操作不起作用。类似地,减法将记为
    sub R12,R 7,R8 #R7-R8→R 1 2
    这里,注释语句的意思是“从寄存器R 7的内容中减去寄存器R 8的内容,结果放入寄存器R 1 2
    中”。
    计算机中常见的其他寄存器到寄存器操作是逻辑功能,如
    and RC,R 1,R2 #AND(R 1 , R 2)→R C

    or R4,R 2 2,R1 #OR(R 2 2 , R 1)→R 4 C
    尽管这些操作基于3 2 b i t字,逻辑操作被定义只作用于对齐位上。例如,如果我们有
    X= 1111 0000 1111 0000 1111 0000 1111 0000
    Y= 1010 1010 1010 1010 1010 1010 1010 1010
    那么,
    A N D(X,Y) = 1010 0000 1010 0000 1010 0000 1010 0000

    O R(X,Y) = 1111 1010 1111 1010 1111 1010 1111 1010
    它们能够直接从我们并行同一位片电路来创建3 2位A L U的方式得到证明。从我们的讨论中可
    以看到,操作的类型只受A L U能力的限制。
    我们要分析的下一个数据通道将允许我们以下面的步骤执行存储操作:
    • 从指令中获得存储器地址。
    第11章计算机基础313
    下载
    图11-22 寄存器到寄存器操作的数据通道
    寄存器文件
    • 从寄存器R X发送数据到存储器。
    • 然后在正确的位置存储该字。
    这类操作的数据流通道表示在图11 - 2 3中。地址直接送到A L U输入A,同时R X的内容发送到存
    储单元。这是一个存储字指令,以汇编语言写为
    sw RX,ADDRESS #存储R X的内容在A D D R E S S处
    图11-23 存储字操作的数据通道
    例如,假设R 4包含十六进制字0 x 2 A F 5 2 9 B 1,我们希望把它存储在存储器位置0 x 4 3 8 5。该命
    令将是
    sw R4,0 x 4 3 8 5
    那将导致0 x 2 A F 5 2 9 B 1被存储在正确的位置。
    我们将分析的最后一个数据通道是置入字指令,它允许我们从存储器复制一个字,并把
    它置于一个寄存器R X中。这个指令记为
    lw RX,ADDRESS #复制A D D R E S S处存储器的内容到寄存器R X
    图11 - 2 4说明了这类指令的数据通道。再次,地址通过A L U到达存储器,它指定了要读的
    位置。然后数据字从存储器传送到寄存器文件,存储在指定的寄存器R X中。
    既然我们了解了独立的数据流通道的特性,我们转到设计单个单元的问题,该单元能够
    通过改变一组控制信号c0和c1,指定使用哪个通道,实现所有的三种可能。多路选择器
    图11-24 置入字操作的数据通道
    314 数字系统设计基础教程
    下载
    寄存器文件
    局部存储器
    地址
    地址
    输入
    寄存器文件
    局部存储器
    地址
    地址
    输出
    以一种直接的方式提供这种功能,引导我们构造图11 - 2 5中所示的数据通道。单元之间的互连
    是固定的,但是为数据流所选择的实际通道取决于应用到多路选择器的控制信号的设置。还
    要注意, A L U操作由控制位f2 f1 f0以11 . 3 . 2节中讨论过的方式选择。从而,一个完整的数据通道
    由两个M U X控制位c0和c1以及A L U选择字f2 f1 f0指定。
    让我们通过分析如何使用控制位改变数据通道,阐明数据通道的一般性描述。A L U的A输
    入由c0的值决定,这样
    若c0= 0,则A是一个地址(s w或者l w操作)。
    若c0= 1,则A是一个寄存器的内容。
    另一个控制位c1决定A L U的输出是发送到存储单元的地址输入,还是发送回寄存器文件。如
    下可见
    如果c1= 0,那么A L U输出导向存储器地址端口,

    如果c1= 1,那么A L U输出导向寄存器文件。
    第一种情况相应于一个s w或l w操作,而第二种情况表示一个寄存器到寄存器操作。
    注意这点是重要的,从寄存器文件读或者写到寄存器文件的任何指令也必须提供信息,
    允许特定的寄存器被选择。因为我们已经假设3 2个寄存器R 0到R 3 1,这意味着它采用5 b i t选择
    一个寄存器。一个寄存器到寄存器操作如
    xor R2,R 4,R19 #XOR(R 4 , R 1 9)→R 2
    需要指定3×5 = 1 5个寄存器选择位,而存储器访问操作
    lw R3 ,0 x 5 A 2 8
    图11-25 允许寄存器到寄存器、置入字和存储字操作的数据通道
    需要有5位来选择目的寄存器R 3。在我们讨论的寄存器文件中,它们是称为s4s3s2s1s0(源)、
    t4t3t2t1t0(对象)和d4d3d2d1d0(目的)的位组。
    指令系统中的变体
    上面的例子说明了一个重要的事实,计算机的指令系统由系统的体系结构决定。计算机
    只能够实现数据通道允许的那些指令。
    作为物理结构和指令系统之间关系的一个例子,注意到置入字( l w)和存储字( s w)被
    第11章计算机基础315
    下载
    寄存器文件
    局部存储器
    地址
    地址
    输入输出
    多路选择器
    限定到指令自身指定的地址。换句话说,如果我们想要把R 5的内容存入地址为0 x 6 A 4 5的存储
    器,我们记作
    sw R5,0x6A45 #复制R 5的内容进入地址为0 x 6 A 4 5的存储器
    所以只允许地址的立即数值。这是一种寻址方式(addressing mode),但是其他的几种寻址方
    式增强了编程能力。
    我们考虑这种情况,寄存器R 3 0包含十进制数值4 5 0 0;我们把它表示为
    [R30] = 4500。
    假设我们宁愿使用4 5 0 0作为我们的程序中的一个引用,把字存储到存储器地址4 5 0 0、4 5 0 4、
    4 5 0 8、4 5 1 2等。目前的体系结构不允许这种指令。然而,图11 - 2 6中所示修改的数据通
    图11-26 允许实现更多指令的修改的数据通道
    道提供了必需的数据流通道。这两种网络的快速比较表明,我们已经改变地址输入到多路选
    择B,作为一个A L U输入。新的控制信号由c2表示,这样
    若c2= 0,则A L U输入B为一个地址,而
    若c2= 1,则A L U输入B来自一个寄存器。
    为了理解它如何改变指令系统,注意,除已经讨论的指令之外,我们现在能够执行操作
    sw R2 ,4(R 3 0) #复制R 2的内容进入存储器地址( [ R 3 0 ] + 4)= M [ R 3 0 + 4 ]
    这里,速记符号M [ R 3 0 + 4 ]的意思是存储器的位置在R 3 0的内容加4计算出的地址处。这被许可,
    是由
    • 选择寄存器R 3 0作为A L U的A输入,
    • 置c2= 0使数值4作为A L U的B输入,
    • 指示A L U相加,产生地址([ R 3 0 ] + 4)= 4 5 0 4,且
    • 发送寄存器R 2的内容到存储器输入(在该多路选择器的旁边)
    这个指令由图11 - 2 7中高亮的数据通道显式地表明。
    为了把寄存器R 3、R 4和R 5依次存入下一个较高地址,我们使用指令
    316 数字系统设计基础教程
    下载
    记住,我们使用8 b i t字节的寻址约定,所以采用4 B y t e存储一个3 2 b i t字。这意味着字地址增加4。
    寄存器文件
    局部存储器
    地址
    地址
    输入输出
    图11-27 指令sw R2,4(R30)的数据通道
    它们各自把数据置于存储器地址4 5 0 8、4 5 1 2和4 5 1 6。这个数据通道允许我们实现类似的置入
    字指令,形式为
    lw RX,A(RY) # M [ RY + A ]→R X
    它意味着在存储器地址(RY + A)中的字被复制到寄存器R X。
    从这个例子,显然,计算机的指令系统取决于
    • 每一单元的特性,和
    • 它们互连的方式
    这已经在前面声明。指令系统对逻辑和硬件的依赖说明了在层次结构中的多个级别观察系统
    的重要性。
    作为另一个例子,假设我们在A L U的输出增加一个并行置入移位寄存器,如图11 - 2 8所示。
    移位操作由S H R(右移)和S H L(左移)控制字指定,带有所需的由移位寄存器自身能力决
    定的控制位数。增加这部分到数据通道,允许我们执行如下指令
    shl R14,R 8,3 #R8的内容左移3位,把结果置于寄存器R 1 4中
    或者,以一般形式
    shl RD,RT,SHIFT #左移(RT) S H I T F位→R D
    图11-28 增加一个移位单元来增强指令系统
    第11章计算机基础317
    下载
    寄存器文件
    局部存储器
    地址
    输入输出
    寄存器文件
    局部存储器
    地址
    输入
    移位
    地址
    输出
    对于右移操作,有相同的格式
    shr RD,RT,SHIFT #右移(RT) S H I F T位→R D
    它扩展了指令系统,包含一组移位(和循环)操作,常见于大量类型的计算法则中。在大多
    数设计中,移位寄存器作为A L U自身的一部分而包含。
    11.5 控制器
    现在我们已经了解了数据通道是如何建立的,我们来分析二进制指令如何实际地控制数
    据通道。只要来自存储器的指令到达,就被置于指令寄存器( I R)中,如图11 - 2 9 a所示。图
    11 - 2 9 b是其简化的方框符号。在这一级,指令含义模糊,因为它看上去只是一行3 2个1和0。
    机器码有那样的特性,使它很难理解。
    图11-29 IR中的机器语言指令
    把机器语言指令翻译为某种更有意义的东西的关键是,引入指令格式(instruction format)
    的概念。指令格式把3 2位划分成称为字段的较小的位组。每一字段在字中的位置定义好,并
    赋予特定的意义。例如,我们可以分配一部分位成为二进制字,指明一特定的寄存器。尽管
    真实的计算机有好几种指令格式,对于这里描述的简单的机器,我们只需要两种。一种用于
    寄存器到寄存器操作,称为R型指令格式。另一种用于s w和l w操作,称为I型指令格式,因为
    它使用立即数,也就是,指令自身提供的、不必从其他来源获得的数据。
    R型指令格式在图11 - 3 0 a中表示。3 2位字已经划分为六个不同的字段,给出了指定的位数。
    理解该格式的关键是,每一字段有一个独立的意义和用法。它由图11 - 3 0 b所示的等效观点阐
    明,那里,字段已由名称指定。
    图11-30 R型指令格式
    318 数字系统设计基础教程
    下载
    a) 独立单元
    b) 显示内容的方框符号
    a) 字段的定义
    操作码
    b) 字段名称
    值得提及,尽管对于M I P S处理器,R和I型指令格式是具体的,大多数R I S C设计有着类似的(或相同的)指
    令类型。
    考虑一个寄存器到寄存器指令,形式为
    and RD,R S,RT #AND(R S,RT)→R D
    在R型指令格式中,每一寄存器由合适的字段确定。假设在寄存器文件中有3 2个寄存器R 0到
    R 3 1。我们必须为每一个分配5位。它们图中表示为字段R S、RT和R D。在这个例子中,逻辑
    A N D操作由两个字段确定: 6位O P C O D E(操作码的缩写)字段和6位F U N C T(功能的缩写)
    字段。在大型计算机中,它们用来为A L U功能生成功能选择字f2 f1 f0,所有的多路选择器设置
    (像前面的数据通道例子中的c0、c1和c2),以及系统中任何其他必需的控制信号。R型指令格
    式中表示的另外一个字段是5位S H I F T字段,它能够用来指定移位和循环操作。
    接下来,考虑置入字和存储字操作。因为两者都在寄存器文件和存储器之间传送数据,
    所以它们能够由相同的指令格式描述。这些指令基于立即数(在指令自身中提供),由图11 -
    3 1中的I型格式表示。注意左边两个字节(位1 6 - 3 1)与R型所定义的字段相同。在这种情况下,
    寄存器由如下指令定义
    sw RT,4 8(R S) # [ RT ]→M [ R S + 4 8 ]

    lw RT,1 0 0(R S) # M [ R S + 1 0 0 ]→RT
    这里,源寄存器R S包含基地址,而对象寄存器RT表示要传送的数据段的起源或目的。I型指
    令的右边1 6位(位1 5 - 0)标注了I M M E D I AT E,用于数据或指定地址。在上面的两个指令例子
    中,立即数的值分别是4 8和1 0 0。
    图11-31 I型指令格式的字段
    图11-32 R型和I型格式的比较
    第11章计算机基础319
    下载
    一般指
    令选择
    一般指
    令选择
    选择源
    寄存器
    选择源
    寄存器
    选择对
    象寄存

    选择对
    象寄存

    选择目
    的寄存

    移位数R型选

    立即数
    a) R型
    b) I型
    现在,我们转到控制数据通道的全局问题。每一条二进制指令必须包括执行操作所需的
    全部信息。这包括寄存器的指定,操作中使用的A L U功能,以及经由控制信号的数据通道选
    择。把指令置于I R中,然后使用不同的字段提供必需的信息,就完成了数据通道的控制。要
    理解连接,考虑R型和I型指令格式,因为它们与发送到数据通道的控制信号有关系。在图11 -
    3 2 a中,指令寄存器中的每一位已与一根输出线相连接。6位O P C O D E标注了i5到i0,用来指定
    指令组合。寄存器字段R S、RT和R D的每一个有5位,能够直接用来选择如图11 - 1 2中的寄存
    器;类似地,S H I F T字段能够应用到移位寄存器。F U N C T字段有6位,与O P C O D E字段相结合
    一起生成A L U控制位f2 f1 f0。I型格式表示在图11 - 3 2 b中。容易看出,左边1 6位以与R型格式相
    同的方式定义。另一方面,右边位1 5到0用于立即数或地址。左边字段的重叠允许我们构造单
    个连线图解,如图11 - 3 3所示。为了同时适应R型和I型格式,右边1 6位走线来提供能够用于每
    一种指令类型的并行控制信号。
    图11-33 来自指令寄存器的一般连线
    确定指令格式和相关连线,我们就能获得图11 - 3 4中所示的中央处理器的完整视图。它说
    明了I R如何与数据通道交互来控制操作。寄存器选择字段R S、R D和RT能够直接连接到寄存
    器文件。多路选择器和A L U功能选择所需的其余控制信号使用一个逻辑网络得到,该逻辑网
    络包含于标注为控制逻辑的部分之中。它接受来自O P C O D E、S H I F T和F U N C T字段的输入,
    生成必需的输出。理解这个过程的关键是,注意到这些字段被编码以符合具体的指令。每一
    组输入位生成一组具体的控制信号,为数据通道组件提供正确的设置。注意,控制位c3决定将
    用哪一个寄存器字段指定目的。这是需要的,因为R型指令使用R D,而I型指令没有R D,而
    是采用对象字段RT取代它的目的。
    控制信号取决于处理器的O P C O D E映射。它是用于指令字段OPCODE 的编码;R型指令
    还使用F U N C T字段。在设计计算机时,每一条指令由合适的字段中唯一的一组二进制值定义。
    这称为“映射”,因为它定义了一条指令和唯一的二进制字之间的关系。控制逻辑网络围绕这
    个映射设计。O P C O D E和F U N C T作为基本的输入,并决定硬件执行特定指令所需的所有控制
    位的值。作为O P C O D E映射的一个例子,在M I P S处理器设计中使用的三个入口是
    OPCODE = 000000 =>寄存器到寄存器操作
    OPCODE = 100011 =>置入字(l w)
    OPCODE = 101011 =>存储字(s w)
    只要R型(寄存器到寄存器)指令在O P C O D E中指定, F U N C T字段就用来决定要执行哪一个
    320 数字系统设计基础教程
    下载
    一般指
    令选择
    选择源
    寄存器
    选择对
    象寄存

    选择目
    的寄存

    移位数R型选

    Immediate/address
    操作。例如,M I P S系统给出
    OPCODE = 000000 和FUNCT = 100000 =>ADD
    OPCODE = 000000 和FUNCT = 100010 =>SUB
    等等。它提供了由3 2 b i t二进制字组成的机器语言指令与处理器要执行的实际操作之间的关键
    连接。
    图11-34 表示数据通道和控制信号的连线图解
    11.6 CISC和R I S C体系结构
    现在,我们来分析一类基于系统内建指令的数量和类型的计算机。我们已经了解,每一
    指令类型必须被数据通道的结构认可。指令的变化越大,内建于处理器的数据流变体就越多,
    系统就越复杂。
    如果我们跟踪计算机设计早期的历史演变,我们发现后继的每一代通常比前一代更加复
    杂。改进的技术允许更多数量的指令类型和寻址方式,以及包含更多可能的数据流。它们发
    展到现在,称为复杂指令系统计算机(C I S C机器)。编译器利用扩展的指令系统写出,在使
    用汇编代码时,由于有大量可利用的指令,编程更容易。这种原则支配了计算机行业数十年。
    然而,2 0世纪7 0年代的研究改变了设计和构造计算机的方法的基础。
    该方法集中于设计一种只有少量指令(相比C I S C机器)的精简指令系统计算机(R I S C)。
    在硬件级,该设计强调尽可能块地运行所提供的指令。R I S C体系结构的计算机的目标是,使
    用相对简单的数据通道完成快速的计算。为了鉴赏R I S C原则,我们来更加详细地分析C I S C体
    系结构,把它作为比较的基准。
    第11章计算机基础321
    下载
    指令寄存器
    控制逻辑
    移位
    寄存器文件
    局部存储器
    地址
    输入输出
    11.6.1 CISC和微编程
    C I S C计算机通过使用一种嵌入控制器内部的时序逻辑网络的称为微编程的技术获得它们
    的大型指令系统。事实上,它类似于有一个在主计算机内部操作的小计算机。微程序方法把
    每一个基本的操作分解为微指令。它除了应该恰当地称为微代码指令,且比汇编语言更深
    (更原始)一级之外,还包括我们可以松散地描述的命令,如
    get [RX] #从R X读数据
    input [RX] ALU #传送[ R X ]到A L U输入
    事实上,汇编级的计算机指令,如置入字( l w),通过使用如图11 - 3 5所示的一系列微操作创
    建。每一条指令以此种方式定义,但是它将采取不同数量的微指令来创建每一条汇编指令。
    微编程允许设计者通过在微代码级组合必需的操作创建一条指令。它允许建立大型指令
    系统,因为微指令提供了系统里所有的基本运动。每一微代码序列存储在微代码R O M阵列中。
    当给予计算机一条指令如置入字( l w)时,微代码序列被访问。整个结果是一个控制器,它
    以图11 - 3 6所示的方式操作。I R中的一条指令发送到序列发生器,决定与具体操作相应的微代
    码的位置。序列发生器读出并执行第一条指令,然后第二条,等等,直到指令序列被完成。
    每一条指令都经历了这一过程。
    指令微代码操作
    lw RY,I m m e d i a t e(R X) = > 开始
    从寄存器R X得到数据
    发送[ R X ]到A L U
    从I R得到立即数
    发送立即数到A L U
    计算地址=(R X +立即数)
    发送地址到存储器
    从存储器得到数据
    发送数据到RY
    结束
    图11-35 一条计算机指令包含几条微指令
    图11-36 控制器中微代码的用法
    对于增加计算机的指令系统,这是一个强有力而灵活的方法。增加一条新指令只需要附
    322 数字系统设计基础教程
    下载
    微代码ROM
    指令寄存器
    控制器
    控制逻辑
    控制信号
    输入数据通道输出
    序列发生器
    lw 指令的
    代码序列
    寻找
    增量
    加的代码写出并存储在R O M中,所以指令系统的修改不需要过多的硬件改变。它主要的障碍

    • 内部序列发生器电路必须增加到单元。
    • 每一条微指令的完成需要一段时间tm i c ro,所以计算机级指令如a d d和l w可能有不同的执行
    时间。
    一旦定义了机器,进行微编码就是简单的。或许,在C I S C方法中,最难以考虑的是这样的事
    实,硬件随着微代码指令系统的丰富而变得越来越复杂。从历史的角度看,硬件复杂性的增
    加已经被技术的改进相抵消。随着更新换代,这就产生了更强大更快捷的机器。
    11.6.2 RISC机器
    现在,我们来看看R I S C计算机的概念。对运行在C I S C计算机上程序的一个有趣的研究,
    得到了一个规则,现在称为8 0 / 2 0规则。要了解这个规则,设想一台C I S C机器有大量的指令
    可资利用。那么,根据8 0 / 2 0规则,
    “8 0 %的程序只使用2 0 %的可利用的指令”
    例如,如果一台计算机可能有5 0 0条指令,那么8 0 %的典型程序将只使用其中大约1 0 0条指令。
    当然,这不是精确的数量。但它说明了重要的一点:大多数的程序只使用少量的指令就能够
    运行。这就提出了精简指令系统计算机(R I S C)的概念。
    R I S C计算机的原则可以总结为下面的语句
    • 在数据通道中只包含最有用的指令,而且
    • 确保数据通道快速地执行每一条指令。
    这导致比较简单的硬件和结构特征,但是必须编写出编译器以产生有效的机器码。虽然这些
    语句传达了重要的思想, C I S C和R I S C体系结构之间
    的差别比可以想象的要大得多;这两种方法能够产
    生根本不同的机器。分析它们在操作级的差别是值
    得的,因为那将使得鉴赏现代计算机更加容易。
    图11 - 3 7表示R I S C机器中控制器的基本结构;
    细心的读者将会发现,它与我们在一般讨论中所研
    究的控制器有着相同的特征。指令寄存器直接连到
    控制逻辑块,控制逻辑块依次传送控制信号到数据
    通道。然而,注意我们已经指出R I S C方法只认可单
    通数据通道结构。这意味着数据通道中的每一个单
    元(A L U、存储器和寄存器文件)在一条指令期间
    只能被访问一次。限制数据通道单通,主要有三种结果:
    • 数据通道能够被优化为最快的吞吐量
    • 每一条指令花费一样多的时间。
    • 只允许那些在数据通道单通中能够完成的指令
    这些概念的真正实现导致许多对体系结构的约束。例如,要增加一条新指令,数据通道自身
    必须被改变以允许所需的连接。而且,考虑到比较容易地在C P U与存储单元之间传送,指令
    字和数据字选择为相同大小。
    第11章计算机基础323
    下载
    控制器
    指令寄存器
    控制逻辑
    控制信号
    输入单通数据通道输出
    图11-37 RISC设计使用简单的控制
    和单通数据通道
    在C I S C机器中使用的微程序方法和单通数据通道R I S C设计之间的差别,能够使用图11 - 3 8
    中的框图来理解。回顾一下,每一条指令开始以
    • 取指令(I F),指令从存储器进入I R中
    接着
    • 指令译码( I D),控制信号产生并发送到数据通道。
    这些是两种设计所共有的。不同之处在于计算所执行的方式。图11 - 3 8 a表示C I S C情形,在那
    里,微代码控制在A L U、存储单元和寄存器文件之间的数据流。只要指令在I D阶段被译码,
    控制信号就相继提供必须的操作。例如,它允许我们执行命令
    add M[AD],M [ A 1 ],M[A2] #M[A1]+M[A2]→M [ A D ]
    获得两个存储位置A 1和A 2的内容,把它们相加,并把结果存储在存储器地址A D中。类似地,
    稍微改变微代码产生指令
    add RD,M [ A 1 ],M[A2] #M[A1]+M[A2]→R D
    它把内容放置在寄存器文件中的寄存器R D之中。
    图11-38 CISC与RISC体系结构中数据流比较
    现在考虑图11 - 3 8 b中说明的基本R I S C单通数据通道。在该设计中, A L U从寄存器文件接
    受输入,并能够把结果存储在寄存器文件或者存储器之中。因为数据通道受限于每条指令只
    能够单向通过每一单元,所以它不允许上面对于C I S C设计所讨论的两者中任一操作。这是由
    于两者对于A L U输入都使用存储器访问,但是R I S C数据通道只允许来自寄存器文件的输入。
    这个简单的例子说明, R I S C设计在可以包含的指令类型方面有着多得多的限制。如果考虑到
    更多的变体而扩展该数据通道,那么增加的复杂性可能使系统慢下来。
    11.6.3 现代计算机
    现代处理器设计在方式上有所进展,它通常包含尽可能多的来自R I S C原则的思想。对于
    324 数字系统设计基础教程
    下载
    开始退出
    开始退出
    微操作通道
    a) CISC数据流通道
    b) RISC单通数据通道
    以硅制造的V L S I微处理器尤其如此。某些处理器,如M I P S和Power PC®芯片,是真正的
    R I S C机器,而另外一些,如P e n t i u m和AMD K6处理器,有一个R I S C核心网络嵌入较大的控
    制结构之中,提供C I S C类型的操作。当微处理器系列新的一代需要与早期C I S C产品向后兼容
    时,这种设计特别重要。
    11.7 浮点操作
    算术操作如加法和乘法经常需要我们使用小数值,它们可能包括一个很宽的数值范围。
    众所周知,它们在数学中称为实数。一些普通的例子是常数
    ( 11 - 8 )
    和数值,如
    ( 11 - 9 )
    这些数与我们迄今已研究过的整数有着不同的特性。尽管我们能够使用在1 . 5节中讨论过的小
    数换算,实际上使用的是一种称为浮点表示的更有效的方法。
    浮点数以二进制表示的基本表达式为
    ( 11 - 1 0 )
    这里,s i g n i f i c a n d提供该数的有效位,e x p o n e n t指明2的阶数,b i a s用来控制该数的范围。而且,
    S是符号位,对于正数,定义S =0,对于负数,定义S =1。浮点表示的真正实现依赖于分配多
    少位表示该数,因此依赖于它的精确性。我们将研究IEEE 754浮点标准(F P S),它使用3 2位
    字提供单精度表示。该标准也规定了称为双精度的更精确的6 4位表示。
    在进一步论述F P S的细节以前,我们来分析十进制数到二进制浮点表示的转换。假设我们
    希望以二进制格式表示基于1 0的数X = 4 . 6 2 5。由41 0= 1 0 02和0 . 6 2 51 0= 0 . 1 0 12
    我们能够写出
    X= 1 0 0 . 1 0 12 ( 11 - 11 )
    它能够通过左移小数点两位并乘以22,以科学计数法表示如下:
    100.101 = 1.00 101×22 ( 11 - 1 2 )
    这表明二进制浮点表示与标准的基于1 0的思想相同。
    在F P S中,单精度浮点数基于3 2位字,该字划分为三个不同的字段,如图11 - 3 9所示。阶
    数由8位字段表示,而有效数分配整整2 3位;符号位占S据最高位。单精度格式定义偏移值为
    1 2 7。既然公认看起来有点模糊,我们使用一个例子来分析它如何工作。
    图11-39 单精度浮点格式
    第11章计算机基础325
    下载
    万一你错过了第2章中的首字母缩写词, I E E E代表电子电气工程师协会,一个专业组织。
    阶数有效数
    例11 - 1
    考虑基于1 0的数a = 12.151 0。使用标准转换技术,它的二进制表示为
    ( 11 - 1 3 )
    其中,我们已经注释0 . 1 51 0的二进制表示包含循环值1 0 0 1
    0 . 1 51 0= 00 1001 1001 1001 ...
    我们在方程中把它表示为
    —1 0 0 1。通过直接比较,从而2 3位有效数为
    S=1 1000 1001 1001 1001 1001 10 ( 11 - 1 4 )
    为了决定阶数,我们记偏移为1 2 7,因此阶数的值为
    ( 11 - 1 5 )
    因为a为正数,它的F P S表示为
    0|1000 0010|11000 1001 1001 1001 1001 10
    它能够由逆向过程来验证。
    双精度浮点表示基于6 4位字,如图11 - 4 0所示。阶数增加到11位,偏移为2 5 6,有效数长
    5 2位。尽管双精度F P S的大小是单精度表示的两倍,概念仍然是一样的。
    图11-40 浮点数的双精度格式
    11.7.1 算术操作
    二进制浮点算术非常类似于基于1 0的科学计数法表示的数的使用过程。考虑两个十进制

    要得到(X+Y)的和,我们首先移动一个(或两个)数的小数点,找到1 0的相同幂次。这称
    为阶数的对齐:
    然后相加得到
    326 数字系统设计基础教程
    下载
    字1 阶数
    字2
    32b
    有效数(高部)
    有效数(低部)
    要得到乘积
    我们只要把阶数相加,得到
    所以不需要对齐。
    二进制浮点操作以同样的方式处理。为了把两个浮点数相加,我们首先对齐阶数。这意
    味着我们在因子2m中找到共同值m。在完成这个之后,我们相加有效数,得到和值。乘法由相
    乘有效数以及相加阶数来实现。概念上,这些操作简单明了。然而,实际上它们的细节是十
    分棘手的,产生了一个复杂的逻辑网络。对于浮点加法器,许多的复杂性归因于必须执行两
    个任意浮点数对齐的算法。乘法器电路由于有效数的大小和执行快速计算的需要而变得复杂。
    由于这些,我们在这里将放弃细节,保持我们的讨论在较高的系统级。
    11.7.2 计算机应用
    通用计算机被设计用来处理整数和浮点数。因为逻辑网络截然不同,一般要提供整数和
    浮点A L U。一种方法是,使用浮点单元作为协
    处理器,如图11 - 4 1所示。协处理器必须与主
    (整数)处理器一起使用。在描绘的基本系统
    中,指令存储在通用I R中。指令译码决定了它
    要发送到整数单元还是浮点处理器( F P U)。
    通过对整数和浮点操作使用不同的指令码实现
    它。数据总线控制器确保输入和输出发送到正
    确的单元。在微处理器的早期,协处理器作为
    分开的“附加”芯片出售。然而, V L S I的进步
    使它已经成为处理器核心电路的集成部分。
    11.8 计算机设计的V L S I
    现代计算机使用高密度集成的硅技术来设计。它应用于大型系统直到在单芯片上包含整
    个C P U加上L1 cache的微处理器。尽管设计复杂V L S I芯片的细节超出了本书的范围,这些概
    念还是简单的,基于第7章中论述的内容。
    完成如此复杂的V L S I设计的两个关键是
    • 一组强大而有凝聚力的工程师,以及
    • 一个好的C A D工具集和单元库。
    两者都非常重要,因为现代微处理器设计不断地推进技术限制,达到它们的雄心勃勃的
    目标。设计流程的起点是指明系统特性。这包括指令系统的细节、硬件与时钟考虑、以及一
    些单元规范。系统的体系结构直接与指令系统相关,以至体系结构的特征需要与所有必需的
    逻辑一起来设计。在V L S I中,电路设计和版图是影响系统性能的关键方面,所以设计工程师
    必须完全地理解技术并表现它的特性。
    我们从版图的角度来分析一个简单微处理器的建立。通过使用库,我们可以选择存储单
    第11章计算机基础327
    下载
    图11-41 作为协处理器的浮点单元的使用
    指令寄存器
    控制器
    整数ALU FPU
    元,并使用它创建一个寄存器。那么,该寄存器可以作为实例来产生寄存器文件,如图11 - 4 2
    所示。V L S I设计极大地依赖于设计一个单元,然后在芯片版图中多次使用它的能力,这样就
    节省了许多时间和精力。
    接下来,考虑A L U。它可以使用本章中早些时候讨论过的位片的方法来设计。单个位片
    可以构造得如图11 - 4 3所示,那里,库中的单元已经实例为加法/减法和基本逻辑操作。对于一
    给定的位片,输入an和bn与每一单元相连,并产生一个特定的输出结果。使用一个M U X作为
    垂直堆栈的最终单元,允许我们选择所需的功能结果rn。然后,把位片作为基本单元,并按需
    多次实例化,得到完全的A L U。这就产生了图11 - 4 4中说明的大型单元。
    单元库和实例用来创建微处理器芯片所有其他的部分。在芯片规范的布图规划期间,每一单
    元由预估的高度和宽度特性化。只要单元被完成,它们拼在一起并连线,就得到图11 - 4 5中所描绘
    的最终的版图。它表明了“输入/输出焊盘”的用途,那是矩形的金属区域,能够与封装管脚相连。
    图11-44 由位片单元实例形成的ALU
    328 数字系统设计基础教程
    下载
    库存储单元
    实例化32次
    实例化32次
    寄存器文件
    图11-42 使用单元库创建寄存器文件
    32b寄存器
    图11-43 ALU位片的创建
    输入
    结果
    库中独立
    逻辑单元
    输入
    结果
    这个概述提供了V L S I微处理器设计领域像个什么样子的一瞥。在真实世界里,然而,具
    有艺术级特征的芯片工程能够花费一组有2 0 0多位工程师的队伍2年或者3年(或者更多!)的
    时间完成加工阶段。如此挑战是使该领域在工程学生之中十分有趣味和流行的方面之一。
    图11-45 微处理器芯片例子的最终版图
    11.9 问题
    1. 在个人计算机上除监视器和磁盘驱动器之外,你能够举例说出两个普通的输出设备
    吗?
    2. 讨论只使用数据传送和二进制操作的两个基本的计算机操作,如何能够生成一个基本
    的字处理程序。
    3. 下面列出了几种大小的寄存器文件。对于每一种情形,确定用来选择一个具体寄存器
    的各选择字的字长。
    (a) 16个1 6位寄存器
    (b) 16个3 2 b i t寄存器
    (c) 8个3 2 b i t寄存器
    4. 考虑一个由8个8 b i t寄存器组成的寄存器文件。使用图11 - 1 3所示相同的细节,画出该寄
    存器文件的框图。确信在你的图中指明了各选择字、M U X大小等等。
    5. 考虑图11 - 1 9所示简单的A L U。假设对于一个特定的位片,输入S确定、an=1和bn= 1。为
    下列每一个功能选择字找出输出结果rn。
    (a) f2 f1 f0= 010
    (b) f2 f1 f0= 101
    (c) f2 f1 f0= 11 0
    第11章计算机基础329
    下载
    I/O焊盘
    算术逻辑单元
    局部存储器
    寄存器文件
    控制
    (d) f2 f1 f0= 011
    6. 考虑图11 - 1 9所示简单的A L U。假设对于一个特定的位片,输入S确定、an= 1和bn= 1。为
    下列每一个功能选择字找出输出结果rn。
    (a) f2 f1 f0= 111
    (b) f2 f1 f0= 0 0 0
    (c) f2 f1 f0= 1 0 0
    (d) f2 f1 f0= 0 0 1
    7. 假设我们想要构造一个基本的2输入A L U网络,它仅仅提供四种操作: A D D、N O T、
    A N D、O R。操作规范使用2位字f1 f0实现。
    (a) 把图11 - 1 9中的画法作为参考,设计该A L U的位片的逻辑。
    (b) 在完成该设计之后,你决定想要在A L U中提供S U B操作; S U B将由另一个控制位fs
    来选择。对于这个修改,使用( a)部分的电路,并提供附加的电路。
    8. 使用一个8寄存器的寄存器文件,为4位宽、允许寄存器到寄存器操作的数据通道构造
    一个框图。确信指定了该寄存器各选择字的大小。
    9. 使用一个1 6寄存器的寄存器文件,为1 6位宽、允许寄存器到寄存器操作的数据通道构
    造一个框图。确信指定了该寄存器各选择字的大小。
    10. 设X = 1001和Y = 1011。计算下列操作的结果。
    ( a )
    (b)
    (c)
    (d)
    11. 我们定义两个8位字,它们基1 0的值为A= 1 5 61 0和B =7 31 0。在执行下面的二进制操作之
    后,得到它们基1 0的结果
    (a)
    (b)
    (c)
    (d) A B
    (e)
    12. 考虑图P 11 - 1中的基本数据通道。寄存器的初始内容以基1 0的等价值表示。假设把它
    们作为下面每一部分的起点。
    (a) 在如下操作之后计算R 2的内容
    add R2,R 4,R 5
    (b) 在完成下列指令序列之后,得到R 6的内容
    add R5,R 6,R 1
    add R6,R 2,R 7
    (c) 在如下操作之后,得到R 4的内容。以二进制和基1 0的形式给出你的答案
    add R4,R 2,R 6
    13. 考虑图P 11 - 1中的基本数据通道。寄存器中显示的值表示下列指令序列运行时的初始
    内容。在完成该序列之后,列出寄存器文件的内容。以基1 0的数值给出你的结果。
    330 数字系统设计基础教程
    下载
    sub R1,R 3,R 6
    add R2,R 6,R 7
    or R3,R 5,R 6
    add R4,R 3,R 1
    图P11-1
    14. 考虑图P 11 - 1中的基本数据通道。在已经执行下列指令序列之后, R 4、R 5的内容是什
    么?以二进制和十进制数值给出你的答案。
    add R3,R 4,R 6
    shl R4,R 3,3
    shr R5,R 3,3
    15. 考虑图P 11 - 1中具有A L U的数据通道,该A L U由图11 - 1 9中描绘的位片指定。对于下面
    的每一条指令,列出A L U功能选择字f2 f1 f0,以及寄存器选择字d2d1d0、s2s1s0、t2t1t0的二进制数
    值。
    (a) and R3,R 5,R 7
    (b) sub R6,R 1,R 4
    (c) xnor R4,R 2,R 0
    16. 考虑下列指令。在图11 - 2 6所示的R I S C数据通道中,哪一条不能够实现?对于每一种
    情形,提供实现相同结果的R I S C指令序列
    add R3,R 2 8,R 3 2
    sw R2,4(R 2 7)
    add R4,M [ R 6 ],0 x 3 4
    lw R17,M [ R 2 1 ]
    17. 列出两个你认为最重要的C I S C体系结构的特性。然后对R I S C体系结构亦如此。最终,讨
    论组合所有四个特征进入单个计算机设计的可能性。你认为它将产生一个更好的体系结构吗?
    18. 把十进制数2 3 . 6 2 5转换为二进制浮点数。
    19. 把1 6 . 8 7 5转换为二进制浮点数。
    20. 一个二进制数的浮点表示为
    1 . 0 0 1 0 11×2 3
    求出它的基1 0(十进制)的等效值。
    21. 使用IEEE FPS求出单精度浮点数
    0 | 1000 0011 | 10000 1001 1001 1001 10
    第11章计算机基础331
    下载
    寄存器文件
    的十进制等效值。
    22. 假设我们有一个3 2位整数C P U,它与一个双精度F P U接口。为什么对两部分使用分离
    的寄存器文件是有意义的?
    23. 由于计算机体系结构越来越强大,需要附加的电路适应新的特征。在集成电路和V L S I
    方面,那可能导致非常大的芯片。讨论该收益问题(第7章)以及如何通过改进硅工艺克服
    它。
    24. 假设我们有这样的工艺, 1位CMOS VLSI存储器单元所占的硅面积为
    1 . 8mm×1 . 2mm
    (a) 估计3 2位寄存器的大小。
    (b) 估计由3 2×3 2 b i t寄存器组成的寄存器文件的面积。
    (c) 假设每个电路尺寸由因子a= 1 . 9扩展,如第7章所定义。求出产生的3 2×3 b i t寄存器文
    件的大小。
    25. 使用World Wide We b从不同的公司查阅可获得的有关具体计算机芯片的信息。对于
    U R L,不是运行一个查找,就是试试h t t p : / / w w w. c o m p a n y _ n a m e . c o m,这里c o m p a n y _ n a m e表
    示制造厂家的名字(例如, company_name = intel将使你进入I n t e l公司的主页)。
    332 数字系统设计基础教程
    下载 
    展开全文
  • 先来看一张计算机专业的大学课程表:数据结构与算法、计算机组成原理、汇编语言程序设计、Java语言程序设计、C/C++程序设计、操作系统、计算机系统结构、数据库系统原理、网络编程与计算技术、软件工程、计算机网络...
  • 计算机网络第五版课后习题答案(1~6章) 谢希仁,点我下载,进入下载页面点击普通下载 点我在线预览 计算机网络 第五版 习题答案.pdf 英文,点我下载,进入下载页面点击普通下载 点我在线预览 欢迎转载学习,注明...
  • 导读: 中文名称:ARM视频 嵌入式linux培训班视频资源类型:DVDRip发行时间:2007年地区:大陆语言:普通话少有的精品学习资料!(这是一个培训班的授课内容,参加这个培训班费用要4千多元!)看这个视频差不多相当...
  • 计算机网络 P2P应用

    2020-12-16 12:33:06
    在 P2P 工作方式下,所有的音频/视频文件都是在普通的互联网用户之间传输。 这种工作方式解决了集中式媒体服务器可能出现的瓶颈问题。 在互联网流量中,P2P 工作方式下的文件分发已占据了最大的份额,比万维网应用所...
  • 全书课件(PowerPoint文件)放在电子工业出版社悦学多媒体课程资源平台上,供读者下载参考。 本书的特点是概念准确、论述严谨、内容新颖、图文并茂,突出基本原理和基本概念的阐述,同时力图反映计算机网络的一些...
  • 《阿波罗导航计算机:架构与操作》,英文格式,推荐下载阅读! 在阿波罗计划中辅助人类登上月球的技术奇迹正是其飞船的机载电脑。在1960年代,大部分的计算机都要占据一整间的房间,但飞船的机载电脑却要求其体积小...
  • 本书从程序设计角度出发,以...机及其相关领域的工程技术人员查阅之用,对于普通计算机爱好者,本书也不失为帮助他们理解计算机底层机制的 一本深入浅出的计算机读物。欢迎大家下载,希望能帮助大家成为程序代码高手!
  • 下载链接:计算机组成与设计(原书第5版)PDF电子书高清带标签 (说明:下载页面点击普通下载即可开始下载, 不用安装网盘软件.) (需要什么资源欢迎在下方评论留言, 找到后会第一时间回复) ...
  • 10000套PPT,5000套简历,公文模板,名片模板,EDIUS模板,ps软件,计算机二级题库+视频,教师资格证资料,普通话资料,flash软件,录屏软件,office2010,编程软件,网络营销,数据分析工具等AI,PR,c4d软件,...
  • C#控制计算机的并口LPT

    千次阅读 2012-09-26 15:28:06
    【网通】点击此处下载全部源程序 【电信、网通】点击此处下载源程序 ...2、点普通下载--等待30秒--点“下载”按钮--保存 介绍 使用C#来做一个数据寄存器控制的程序时很简单的。当我对控制外部电子设备
  • 10000套PPT,5000套简历,公文模板,名片模板,EDIUS模板,ps软件,计算机二级题库+视频,教师资格证资料,普通话资料,flash软件,录屏软件,office2010,编程软件,网络营销,数据分析工具等AI,PR,c4d软件,e...
  • 问题3-4:通过普通的电话用户线拨号上网时(使用调制解调器),试问一对用户线可容许多少个用户同时上网? 问题3-5:除了差错检测外,面向字符的数据链路层协议还必须解决哪些特殊的问题? 问题3-6:为什么计算机...
  • C/S架构:Client/Server,客户端/服务器,即下载安装的软件。 2、服务器:配置比普通电脑高很多的电脑。 3、计算机所存储的数据都是以二进制形式存储的。 4、查看IP的两种方法: 在DOS窗口输入 ipconfig 查看; ...
  • 广东省普通高等学校毕业生就业推荐表: 因为写错了或者其它原因的09届毕业生可下载到本地计算机,然后打印。
  • 问题3-4:通过普通的电话用户线拨号上网时(使用调制解调器),试问一对用户线可容许多少个用户同时上网? 问题3-5:除了差错检测外,面向字符的数据链路层协议还必须解决哪些特殊的问题? 问题3-6:为什么计算机...
  • SECURITY OPTION(检测密码方式)如设定为SETUP,则每次打开机器时屏幕均会提示输入口令(普通用户口令或超级用户口令,普通用户无权修改BIOS设置),不知道口令则无法使用机器;如设定为SYSTEM则只有在用户想进入BIOS设置...
  • 哈佛大学公开课cs50 ... 这里面3,4,5有2种版本,5,7,8只有普通的,而1,2的问题集是没源码的。 所有都可以从这下载的:http://cs50.tv/2010/fall/#l=psets&r=about&v=lectures/0/week0w
  • 相关阅读:300本计算机编程的经典书籍下载眼下,人工智能已经成为越来越火的一个方向。「普通程序员,如何转向人工智能方向」是知乎上的一个问题。本文是我对此问题的一个回答的归...
  • Centos下载

    2019-09-21 13:05:01
    DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上,包含大量的常用软件,一般选择这种镜像类型即可。 Everything ISO:包含了完整安装版的内容,并对其进行补充,集成了所 有软件。 Minimal ISO:这个...
  • 个人认为《计算机网络:自顶向下方法》这本书非常赞,从应用层开始讲,然后是传输层、网络层,这三层对于普通程序员更需要。学校里则通常是,一上来就讲物理层、数据链路层,妈的,好好的想当黑客的兴趣就这么被摧残...
  • centos下载

    2018-10-25 14:27:00
    DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上,包含大量的常用软件,一般选择这种镜像类型即可。 Everything ISO:包含了完整安装版的内容,并对其进行补充,集成了所 有软件。 Minimal ISO:这个...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 365
精华内容 146
关键字:

下载普通计算机