[计算机基础]一、计算机组成原理

 计算机组成原理的考察目标为:

1. 掌握单处理器计算机系统中主要部件的工作原理、组成结构以及相互连接方式。
2. 掌握指令集体系结构的基本知识和基本实现方法,对计算机硬件相关问题进行分析,并能够对相关部件进行设计。
3. 理解计算机系统的整机概念,能够综合运用计算机组成的基本原理和基本方法,对高级编程语言(C语言)程序中的相关问题进行分析,具备软硬件协同分析和设计能力。

计算机组成原理,主要讲的就是计算机系统的“组成”,以及其中各部件的具体实现和连接的原理。

内容:

        计算机系统概述、数据的表示和运算、存储器层次结构、指令系统、中央处理器(CPU)、总线和IO系统。

第一章 计算机系统概述

1.1 本章大纲要求与核心考点

1.1.1 大纲内容

(一) 计算机系统层次结构

  1. 计算机系统的基本组成

  2. 计算机硬件的基本结构

  3. 计算机软件和硬件的关系

  4. 计算机系统的工作原理

    “存储程序"工作方式,高级语言程序与机器语言程序之间的转换,程序和指令的执行过程。

(二) 计算机性能指标

吞吐量、响应时间;
CPU时钟周期、主频、CPI、CPU执行时间;
MIPS、MFLOPS 、GFLOPS、TFLOPS、PFLOPS、EFLOPS、ZFLOPS。

MIPS:百万指令每秒(Million Instructions Per Second),是一个用来衡量计算机性能的单位。它表示一台计算机每秒钟能够执行的百万条机器指令的数量。

MFLOPS:MFLOPS 是 "Million Floating Point Operations Per Second" 的缩写,表示每秒能够执行的百万次浮点运算数。它是衡量计算机系统或处理器性能的指标之一,特别在科学计算、图形处理等需要大量浮点运算的应用中常被用来评估计算能力。高性能计算(HPC)领域经常使用 MFLOPS 来衡量计算机性能,并且在评估处理器、GPU、FPGA 或整个系统的计算能力时,MFLOPS 是一个重要的标准之一。

1.1.2 核心考点

本章是计算机组成原理的概述,一般会考察相关概念,以选择题为主,也可能结合后续章节以综合题的形式来考察性能的分析。掌握本章的概念,是整个组成原理课程的基础。 ​ 计算机性能指标在历年真题中出现的频次较高,需要重点掌握。

1.2 计算机系统简介

1.2.1 计算机系统的概念和分类

计算机系统由“硬件”和“软件”两大部分组成。

  • 所谓“硬件”即指计算机的实体部份,它由看得见摸得着的各种电子元器件、各类光、电、机设备的实物组成,如主机、外设等等。

  • 所谓“软件”,它是看不见摸不着的,由人们事先编制成具有各类特殊功能的信息组成。通常把这些信息, 诸如各类程序寄寓于各类媒体中, 如RAM、ROM、磁带、磁盘、光盘、甚至纸带等。它们通常被作为计算机的主存或辅存的内容。

计算机的软件通常又可以分为两大类:系统软件和应用软件。

  • 系统软件又称为系统程序,主要用来管理整个计算机系统,监视服务,使系统资源得到合理调度,确保高效运行。它包括:标准程序库、语言处理程序(如将汇编语言翻译成机器语言的汇编程序;将高级语言翻译成机器语言的编译程序)、操作系统(如批处理系统、分时系统、实时系统)、服务性程序(如诊断程序、调试程序、连接程序等)、数据库管理系统、网络软件等等。

  • 应用软件又称为应用程序,它是用户根据任务需要所编制的各种程序。如科学计算程序,数据处理程序,过程控制程序,事务管理程序等等。

1.2.2 计算机的发展

(一) 硬件的发展

1943 年,第二次世界大战进入后期,因战争的需要,美国国防部主导建造了第一台计算机ENIAC(Electronic Numerical Integrator And Computer,ENIAC),它的全称是"用电子管组成的电子数字积分机和计算机”。

从此以后,计算机的发展经历了电子管、晶体管、集成电路的世代发展,体积越来越小、性能越来越强,并从军事领域迅速扩展应用到生活生产的各个行业,成为了现代信息社会不可或缺的基础设备。

**摩尔定律**

​        集成电路出现之后,芯片集成度不断提高,从在一个芯片上集成成百上千个晶体管的中、小规模集成电路,逐渐发展到能集成成千上万个晶体管的大规模集成电路(LSI)和能容纳百万个以上晶体管的超大规模集成电路(VLSI)。

​        微芯片集成晶体管的数目增长非常迅速,其规律被总结为“微芯片上集成的晶体管数目每3年翻两番”,这就是所谓的“摩尔定律”。

​        摩尔定律的另一个常见表述是:每平方英寸电路板上的晶体管数量,每18个月翻一倍。

(二) 软件的发展

(1)编程语言的发展

​        软件的编写离不开编程语言。编程语言的发展经历了机器语言、汇编语言和高级语言三个阶段。我们现在使用的编程语言一般都是高级语言。

(2)操作系统的发展

​        随着计算机的发展及应用范围的扩大,逐渐形成了软件系统。而其中最重要的一类软件,是为了提高计算机性能和资源利用率而设计的,这就是“操作系统”。

​        操作系统的发展经历了批处理系统、分时系统、实时系统、PC操作系统、网络操作系统、分布式操作系统等多个阶段。目前我们的个人电脑使用的操作系统主要有:Windows、Mac OS、Linux。

1.3 计算机系统的层次结构

1.3.1 计算机系统的基本组成

(一) 计算机硬件

  1. 冯·诺依曼计算机

冯·诺依曼在研究EDVAC计算机时提出了 “存储程序”的概念,“存储程序”的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机通称为冯•诺依曼计算机,其特点如下:

  • 采用“存储程序”的工作方式。

  • 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5大部件组成。

  • 指令和数据以同等地位存储在存储器中,形式上没有区别,但计算机应能区分它们。

  • 指令和数据均用二进制代码表示。

  • 指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址。

        

  2. 计算机的功能部件

  • 存储器:分为主存和辅存,中央处理器可以直接访问的程序和数据存放在主存中。

  • 运算器:完成对信息或数据的处理和运算,如算术和逻辑运算。

  • 控制器:完成对计算机各部件协同运行的指挥控制,即保证指令按预定的次序执行,保障每一条指令按规定的执行步骤正确执行,还要处理各项紧急事件。

  • 输入设备:用来输入原始数据和程序,如键盘、鼠标。

  • 输岀设备:用来输出计算机的处理结果,如显示器和打印机。

一般将运算器和控制器集成到同一个芯片上,称为中央处理器(CPU)。CPU和主存储器共同构成主机,而除主机外的其他硬件装置(外存、I/O设备等)统称为外部设备,简称外设。

(二) 计算机软件

1.软件的分类

软件按其功能分类,可分为系统软件和应用软件。

2.三个级别的计算机语言

(1) 机器语言

机器语言由二进制编码组成,它是计算机唯一可以直接识别和执行的语言。

(2) 汇编语言

汇编语言是用英文单词或其缩写代替二进制的指令代码,更容易为人们记忆和理解。汇编语言程序必须经过汇编操作,转换为机器语言后,才能在计算机硬件上执行。

(3) 高级语言

高级语言(如C、C++、Java等)程序需要先经过编译程序编译成汇编语言程序,再经过汇编操作 成为机器语言程序。高级语言程序也可直接通过解释的方式“翻译”成机器语言程序。

由于计算机无法直接理解和执行高级语言程序,因此需要将高级语言程序转换为机器语言程序,通常把进行这种转换的软件系统称为翻译程序。翻译程序有以下三类:

  • 汇编程序(汇编器):将汇编语言程序翻译成机器语言程序。

  • 解释程序(解释器):将高级语言源程序中的语句按执行顺序逐条翻译成机器指令并立即执行。

  • 编译程序(编译器):将高级语言源程序翻译成汇编语言程序或机器语言程序。

1.3.2 计算机硬件的基本结构

典型的冯·诺依曼计算机是以运算器为中心的,如下图所示。其中,输入、输出设备与存储器之间的数据传送都需通过运算器。图中实线为数据线,虚线为控制线和反馈线。

现代的计算机已转化为以存储器为中心,如下图所示。图中实线为控制线,虚线为反馈线,双线为数据线。

图中各部件的功能是:

* 运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内;
* 存储器用来存放数据和程序;
* 控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果;
* 输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式,常见的有键盘、鼠标等。
* 输出设备可将机器运算结果转换为人们熟悉的信息形式,如打印机输出、显示器输出等。

​        由于运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大规模集成电路制作工艺出现后,这两大部件往往制作在同一芯片上,因此,通常将它们合起来统称为中央处理器(Central Processing Unit) , 简称CPU。把输入设备与输出设备简称为I/O设备(Input/Output equipment) 。

​        这样, 现代计算机可认为由三大部分组成:CPU、IO设备及主存储器(Main Memory,MM) 。CPU与主存储器合起来又可称为主机, I/O设备叫作外部设备。

  • 主存储器是存储器子系统中的一类,用来存放程序和数据, 它可以直接与CPU交换信息。另一类叫辅助存储器, 简称辅存, 又叫外存。

  • ALU(Arithmetic Logic Unit) 算术逻辑运算单元,用来完成算术逻辑运算。

  • CU(Control Unit) 控制单元, 用来解释存储器中的指令, 并发出各种操作命令来执行指令。

ALU和CU是CPU的核心部件。I/O设备也受CU控制,用来完成相应的输入、输出操作。可见,计算机有条不紊地自动工作,都是在控制器统一指挥下完成的。

1.3.3 计算机软件和硬件的关系

硬件实现的往往是最基本的算术和逻辑运算功能,而其他功能大多通过软件的扩充得以实现。对某 一功能来说,既可以由硬件实现,也可以由软件实现。从用户的角度来看,它们在功能上是等价的。这 一等价性被称为软、硬件逻辑功能的等价性。

由于“软件”的发展,它不仅可以充分发挥计算机的“硬件”功能,提高计算机的工作效率,而且已经发展到能局部模拟人类的思维活动,因此在整个计算机系统内,“软件”的地位和作用已经成为评价计算机系统性能好坏的重要标志。当然,“软件”性能的发挥,也必须依托“硬件”的支撑。因此,概括而言,计算机性能的好坏,取决于 “软”、 “硬”件功能的总和。

1.3.4 计算机系统的多级层次结构

从用户的角度看,人们在操作系统提供的运行环境下,首先用高级语言编写程序(称为源程序),然后将源程序翻译成汇编语言程序,再将其翻译成机器能识别的机器语言程序(称为目标程序),最后用微程序解释每条机器指令。这样,就构成一个常见的计算机系统的5级层次结构,如下图所示:

        从计算机系统的5级层次结构来看,可以将硬件研究的对象归结为微程序机器 M0 与传统机器 M1,也就是实际机器。而软件研究的对象主要是操作系统及其以上的各级虚拟机器。通常将除硬件系统外的其余层级称为虚拟机器,包括操作系统机器 M2、汇编语言机器 M3 和高级语言机器 M4。简单来说,虚拟机器就是由软件实现的机器。

        相邻层级之间的关系,下层是上层的基础,上层是下层的扩展。随着超大规模集成电路技术的不断发展,部分软件功能可以由硬件来实现,所以软/硬件交界面的划分也不是绝对的。

1.3.5 计算机系统的工作原理

1. 从源程序得到可执行程序

用高级语言编写好一段程序之后,需要经过一系列“翻译“过程,才能得到计算机能够执行的机器代码。比如,我们用C语言写了一个简单的 hello world 程序,源程序文件命名为 hello.c,用GCC编译器可以将它翻译成一个可执行目标程序 hello。具体的过程可以分为4个阶段,如下图所示:

(1)预处理阶段:预处理器(cpp)对源程序中以 ”#“ 开头的命令进行处理,输出结果是一个以 ”.i“ 为扩展名的文件 hello.i。例如 ”#include“ 就会将后面的头文件内容插入程序文件中。

(2)编译阶段:编译器(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序 hello.s。汇编语言源程序中的每条语句,都用文本格式描述了一条机器语言指令。

(3)汇编阶段:汇编器(as)将 hello.s 翻译成机器语言指令,把这些指令打包成一个”可重定位目标程序“ hello.o,它是一个二进制文件,用文本编辑器打开会显示乱码。

(4)链接阶段:链接器(ld)将多个可重定位目标程序和标准库函数合并成一个可执行目标程序。上面的例子中,链接器将 hello.o 和标准库函数 printf 所在的可重定位目标模块 printf.o 合并,生成可执行程序 hello。最终生成的可执行程序被保存在磁盘上。

2. 存储程序的基本思想

“存储程序”的基本思想,就是将程序和数据一样,存放在主存中;运行时通过地址访问到程序的内容,解析出对应的指令进行执行。

- 程序执行前,先将第一条指令的地址存放在程序计数器(PC)中;
- 将PC的内容作为地址访问主存,取出指令;
- 在每条指令执行过程中,都需要计算下一条将执行指令的地址,并送至PC。如果当前指令是顺序执行的,则下一条指令地址是PC的内容加上当前指令的长度;如果是跳转指令,则下一条指令的地址是指定的目标地址;
- 当前指令执行完毕后,再根据PC的值作为地址访问主存,取出的是下一条将要执行的指令。

​        这样,计算机就可以周而复始地自动执行程序中的每一条指令了。

3. 计算机硬件组成的细化说明

​        为了更清楚地了解计算机的工作过程,我们需要将计算机的组成部件进一步细化,如下图所示。

​        除了之前已经列出的核心部件 ALU、CU 以及主存的存储器M,CPU和主存储器中还必须配置一些寄存器(Register),用来存放特定的信息。下面我们分别进行简单介绍。

​    (1)主存储器

​        主存储器(简称主存或内存)包括了存储体M、各种逻辑部件以及控制电路等。存储体由许多存储单元组成,每个存储单元又包含若干个存储元件;每个存储元件能存放一位二进制代码(0或者1)。这样,每个存储单元可以存储一串二进制代码,这就被称为一个”存储字“;存储字的二进制位数称为”**存储字长**“。

​        主存中的每个存储单元有一个唯一的编号,叫做存储单元的”**地址**“(Address)。主存的工作方式就是按照存储单元的地址,来实现对存储字各位的存(写入)取(读出)。这种存取方式叫做”按地址访问存储器“。

​        为了实现按地址访问的方式,主存中还必须配置两个寄存器:MAR 和 MDR。

- **MAR**(Memory Address Register,存储器地址寄存器):用来存放想要访问的存储单元的地址,它的位数决定了能访问的存储单元的最大个数。
- **MDR**(Memory Data Register,存储器数据寄存器):用来存放从存储体单元中取出,或者准备向存储体单元存入的数据,它的位数和存储字相等。

​        当然,如果想要完整地实现一个存取数据的操作,还需要 CPU 给主存加上各种控制信号,比如读命令、写命令以及地址译码驱动信号等。随着硬件技术的发展,主存现在都是统一制作的大规模集成电路芯片,所以一般都将MAR 和 MDR 集成在 CPU 芯片中。

​    (2)运算器

​        运算器包括了一个算术逻辑单元(ALU)和最少三个寄存器。

- **ACC**: Accumulator,累加器;
- **MQ**: Multiplier-Quotient Register,乘商寄存器;
- **X**: 操作数寄存器

​        这三个寄存器在完成不同的算术运算时,所存放的操作数也各不相同。具体的情况如下表所示:

不同机器的运算器结构也有所不同,有的机器用 MDR 取代 X 寄存器。

​    (3)控制器

​        控制器由控制单元(CU)和程序计数器(PC)、指令寄存器(IR)组成。

PC: Program Counter,程序计数器,用来存放当前将要执行指令的地址。它与主存的 MAR 之间之间有一条直接通路,且具有自动加1的功能,也就是可以自动形成下一条指令的地址。

IR: Instruction Register,指令寄存器,用来存放当前的指令。IR 的内容来自主存的 MDR,包含了操作码和地址码。IR 中的操作码 OP(IR)会送至 CU,可以记作 OP(IR) → CU,用来分析指令;而地址码 Ad(IR)作为操作数的地址送至存储器的 MAR,可以记作 Ad(IR) → MAR。

​        CU 是控制器的核心组件,用来分析当前指令所需完成的操作,并发出各种微操作命令序列,从而控制所有被控对象。控制器是计算机的神经中枢,由它指挥各部件自动协调地工作;完成一条指令操作,需要取指、分析和执行3个阶段。

​    (4)I/O

​        I/O 系统包括各种 I/O 设备及其相应的接口。每一种 I/O 设备都由 I/O 接口与主机联系,它接收 CU 发出的各种控制命令,并完成相应的操作。

 4. 计算机硬件的工作过程

​        总结一下,当计算机接收到机器语言程序后,硬件的工作过程分为以下几步:

- 把程序和数据装入主存储器;
- 从程序的起始地址运行程序;
- 按照程序的首地址从存储器中取出第一条指令,经过译码等步骤控制计算机各功能部件协同运行,完成这条指令的功能,并计算下一条指令的地址;
- 用新得到的指令地址继续读出第二条指令并执行,直到程序结束为止。每条指令都是在取指、译码和执行的循环过程中完成的。

​        我们现在以从主存中取数据的指令为例,详细分析一下它的执行过程:

​    (1)取指令: PC → MAR → M → MDR → IR

​        根据 PC 取指令到 IR。将 PC 的内容送至 MAR,将 MAR 的内容送至地址线,同时控制器将读信号送至读/写信号线,从主存指定存储单元读出指令,并通过数据线送至 MDR,再传送至 IR。

​    (2)分析指令: OP(IR) → CU

​        指令译码并送出控制信号。控制器根据 IR 中指令的操作码,生成相应的控制信号,送到不同的执行部件。这里 IR 中是取数指令,所以读控制信号被送到总线的控制线上。

​    (3)执行指令:Ad(IR) → MAR → M → MDR → ACC

​        取数操作。将 IR 中指令的地址码送至 MAR,将 MAR 的内容送至地址线,同时控制器将读信号送至读/写信号线,从主存指定存储单元读出操作数,并通过数据线送至 MDR,再传送到 ACC 中。

​    (4)每取完一条指令,还必须计算下一条指令的地址,为取下一条指令做准备:(PC)+ 1 → PC

1.4 计算机性能指标

​        衡量一台计算机的性能是由多项技术指标综合确定的,既包含硬件的各类性能,又包括软件的各种功能,这里主要讨论硬件的技术指标。

 1.4.1 主要性能指标

1. **机器字长**

​        机器字长,是指 CPU 一次能处理数据的位数,也就是 CPU 内部用于整数运算的数据通路的宽度。字长通常就等于 CPU 的通用寄存器宽度,也就是 CPU 内用于整数运算的运算器位数,它反映了计算机处理信息的能力。我们平常所说”一台16位或32位的机器“,这里的16、32就是指字长。

​        字长越长,数的表示范围也越大,精度也越高。机器的字长也会影响机器的运算速度。倘若CPU字长较短, 又要运算位数较多的数据, 那么需要经过两次或多次的运算才能完成,这样势必影响整机的运行速度。当然,机器字长对硬件的造价也有较大的影响。它将直接影响加法器(或ALU) 、数据总线以及存储字长的位数。

- 指令字长:一条指令中包含的二进制代码的位数。
- 存储字长:一个存储单元中存储的二进制代码的长度。

​        指令字长和存储字长,都必须是字节(Byte)的整数倍。指令字长一般取存储字长的整数倍:如果指令字长等于存储字长的2倍,那么取一条指令就需要2个机器周期;如果指令字长等于存储字长,那么取指周期就等于机器周期。

2. **数据通路带宽**

​        数据通路带宽,是指数据总线一次所能并行传送信息的位数,它关系到数据的传送能力。这里所说的数据通路带宽是指外部数据总线的宽度,它与 CPU 内部的数据总线宽度(机器字长)可能不同。

3. **存储容量**

​        存储器的容量,包括主存容量和辅存容量。我们一般主要关心主存容量。

​        主存容量是指主存中所能存储信息(二进制代码)的最大容量,通常以字节数来衡量。

​                                                存储容量 = 存储单元个数 × 存储字长

​        在主存储器中,MAR 的位数反映了存储单元的个数, MDR 的位数则反映了存储字的长度。例如, MAR 为16位, 表示 2<sup>16</sup> = 65536, 也就是说对应的存储体内有65536个存储单元(一般称为64K内存, 1K=1024);而如果 MDR 为32位, 那么主存的存储容量为 2<sup>16</sup> × 32 = 2<sup>21</sup> = 2M 位(1M=2<sup>20</sup>)。

​        现代计算机中常以字节的个数来描述容量的大小,一个**字节**(Byte)被定义位8位二进制代码。所以上述存储容量是 2M 位(bit),也可用 2<sup>18 </sup>字节(Byte,简写为 B)表示,记作 2<sup>18 </sup>B 或 256KB。

​        同理,辅存容量也可用字节数来表示,例如,某机辅存(如硬盘)容量为 128 GB(1G = 1KM = 2<sup>30 </sup>)。

4. **运算速度**

​        计算机的运算速度与许多因素有关,如机器的主频、CPU 的结构、执行什么样的操作、主存本身的速度(主存速度快,取指、取数就快)等等都有关。

1.4.2 专业术语解释

​    **吞吐量**:系统在单位时间内处理请求的数量,主要取决于主存的存取周期。

​    **响应时间**:从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结果的时间。通常包括 CPU 时间(计算机执行程序的时间)和等待时间(用于磁盘访问、存储器访问、I/O操作等的时间)。

​    **主频(CPU 时钟频率)**:机器内部主时钟的频率,它是衡量机器速度的重要参数。对统一型号的计算机,主频越高,完成指令的一个步骤所用的时间越短,执行指令的速度越快。通常以赫兹(Hz)为单位。

​    **CPU 时钟周期**:节拍脉冲的宽度或周期,也就是主频的倒数,它是 CPU 中最小的时间单位。

​                                                            **CPU 时钟周期 = 1 / 主频**

​    **CPI**:Clock cycle Per Instruction,执行一条指令所需的时钟周期数。对一个程序或一台机器来说,CPI 指的是该程序或该机器指令集中所有指令执行所需要的平均时钟周期数。

​    **CPU 执行时间**:运行一个程序所花费的时间。

​                                                **CPU 执行时间 = (指令数 × CPI)/ 主频**

​        对于同一个程序,CPU 的执行时间就代表了 CPU 的性能,它主要取决于三个要素:主频、CPI 和 指令数。这三者是相互制约的。不同的机器可以有不同的指令集,更改指令集可以让程序的指令数更少,但 CPI 可能就会增大;同时可能引起 CPU 结构的调整,从而造成主频的降低。

​        现在机器的运算速度,普遍采用单位时间内执行指令的平均条数来衡量,并用 MIPS(Million Instruction Per Second)作为计量单位, 即每秒执行百万条指令。比如,某机每秒能执行200万条指令, 则记作2 MIPS。

​        **MIPS**:Million Instructions Per Second,每秒执行百万条指令的数目。

​                                                            **MIPS = 主频 /(CPI × 10<sup>6</sup>)**

​        **FLOPS**:FLoating-point Operations Per Second,每秒执行浮点运算的次数。

​        **MFLOPS**:百万次浮点运算每秒。 MFLOPS = 浮点操作次数 /(执行时间 * 10<sup>6</sup>)

​        **GFLOPS**:十亿次浮点运算每秒。 GFLOPS = 浮点操作次数 /(执行时间 * 10<sup>9</sup>)

​        **TFLOPS**:万亿次浮点运算每秒。 TFLOPS = 浮点操作次数 /(执行时间 * 10<sup>12</sup>)

​        **PFLOPS**:千万亿次浮点运算每秒。 PFLOPS = 浮点操作次数 /(执行时间 * 10<sup>15</sup>)

​        **EFLOPS**:百京次浮点运算每秒。 EFLOPS = 浮点操作次数 /(执行时间 * 10<sup>18</sup>)

​        **ZFLOPS**:十万京次浮点运算每秒。 ZFLOPS = 浮点操作次数 /(执行时间 * 10<sup>21</sup>)

​        *需要注意,在计算机中,描述存储容量、文件大小时,K、M、G、T 等数量单位通常用2的幂次表示,比如 1 KB =  2<sup>10</sup> B;而在描述速率、频率等概念时,通常用10的幂次表示,比如 1 kb/s = 10<sup>3</sup> b/s。*


1.5 章节练习

 一、单项选择题

1. 【2009真题】冯 · 诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU 区分它们的依据是 (  )。

​        A. 指令操作码的译码结果                B. 指令和数据的寻址方式

​        C. 指令周期的不同阶段                    D. 指令和数据所在的数据单元

​    答案: C

2. 【2015真题】计算机硬件能够直接执行的是 (  )。

​        I. 机器语言程序    II. 汇编语言程序    III. 硬件描述语言程序

​        A. 仅 I             B. 仅 I、II            C. 仅 I、III            D. I、II、III

​    答案: A

3. 【2016真题】将高级语言源程序转换为机器级目标代码文件的程序是 (  )。

​        A. 汇编程序            B. 链接程序            C. 编译程序            D. 解释程序

​    答案: C

4. 【2019真题】下列关于冯 · 诺依曼结构计算机基本思想的叙述中,错误的是 (  )。

​        A. 程序的功能都通过中央处理器执行指令实现            B. 指令和数据都用二进制表示,形式上无差别

​        C. 指令按地址访问,数据都在指令中直接给出            D. 程序执行前,指令和数据需预先存放在存储器中

​    答案: C

5. 【2020真题】下列给出的部件中,其位数(宽度)一定与机器字长相同的是 (  )。

​        I. ALU        II. 指令寄存器        III. 通用寄存器        IV. 浮点寄存器

​        A. 仅 I、II            B. 仅 I、III            C. 仅 II、III            D. 仅 II、III、IV

​    答案: B

6. 【2010真题】下列选项中,能缩短程序执行时间的是(  )。

​        I. 提高 CPU 时钟频率    II. 优化数据通路结构    III. 对程序进行编译优化

​        A. 仅 I 和 II            B. 仅 I 和 III            C. 仅 II 和 III            D. I、II、III

​    答案: D

7. 【2011真题】下列选项中,描述浮点数操作速度的是(  )。

​        A. MIPS                    B. CPI                    C. IPC                    D. MFLOPS

​    答案: D

8. 【2012真题】假定基准程序 A 在某计算机上的运行时间为 100s,其中 90s 为 CPU 时间,其余为 I/O 时间。若 CPU 速度提高 50%,I/O 速度不变,则运行基准程序 A 所耗费的时间是 (  )。

​        A. 55s                B. 60s                C. 65s                D. 70s

​    答案: D

9. 【2013真题】某计算机的主频为 1.2 GHz,其指令分为4类,它们在基准程序中所占比例及CPI如下表所示。

​    该机的 MIPS 是 (  )。

​        A. 100                B. 200                C. 400                D. 600

​    答案: C

10. 【2014真题】程序 P 在机器 M 上的执行时间是 20s,编译优化后,P 执行的指令数减少到原来的70%,而 CPI 增加到原来的1.2倍,则 P 在 M 上的执行时间是 (  )。

​        A. 8.4s                B. 11.7s                C. 14s                D. 16.8s

​    答案: D

11. 【2017真题】假定计算机 M1 和 M2 具有相同的指令集体系结构(ISA),主频分别为 1.5GHz 和 1.2 GHz。在 M1 和 M2 上运行某基准程序 P,平均 CPI 分别为 2 和 1,则程序 P 在 M1 和 M2 上运行时间的比值是     (  )。

​        A. 0.4                B. 0.625                C. 1.6                D. 2.5

​    答案: C

二、综合应用题

1. 说明机器字长、指令字长、存储字长的区别和联系。

​    答案:

​        机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度。

​        指令字长:一个指令字中包含二进制代码的位数。

​        存储字长:一个存储单元存储二进制代码的长度。

​        它们都必须是字节的整数倍。指令字长一般取存储字长的整数倍,如果指令字长等 于存储字长的2倍,就需要2次访存来取出一条指令,因此,取指周期为机器周期的2倍;如果指令字长等于存储字长,则取指周期等于机器周期。早期的计算机存储字长一般和机器的指令字长与数据字长相等,故访问一次主存便可以取出一条指令或一个数据。随着计算机的发展,指令字长可变,数据字长也可变,但它们都必须是字节的整数倍。

2. 用一台 40MHz 的处理器执行基准程序,它所包含的混合指令数和响应所需的时钟周期见下表。求有效的 CPI、MIPS 和程序的执行时间(程序的指令条数为 *I*)。

第二章 数据的表示和运算

2.1 本章大纲要求与核心考点

2.1.1 大纲内容

(一)数制与编码

1. 进位计数制及其数据之间的相互转换
2. 定点数的表示和运算

(二)运算方法和运算电路

1. 基本运算部件:加法器、算数逻辑部件(ALU)
2. 加/减运算:补码加/减运算器,标志位的生成
3. 乘/除运算:乘/除运算的基本原理,乘法电路和除法电路的基本结构

(三)整数的表示和运算

1. 无符号整数的表示和运算
2. 有符号整数的表示和运算

(四)浮点数的表示和运算

1. 浮点数的表示:IEEE 754标准
2. 浮点数的加/减运算

2.1.2 核心考点

本章内容是考研考察的一个重点和难点,往往会有综合应用题出现。

需要重点掌握的内容包括:

  • 真值、机器数,定点数的表示及原理

  • C 语言中的整型数据,有符号数与无符号数、不同字长整数之间的类型转换

  • ALU 的基本组成,标志位的产生,定点数的运算及相关电路,溢出概念与判断方法

  • IEEE 754标准浮点数的表示和特点,浮点数的加/减运算方法

  • C 语言中的浮点型数据,浮点型与整型、浮点型之间的类型转换,隐式类型转换

  • 数据按边界对齐方式的存储,数据按大端和小端方式存储

2.1.3 真题分布

2.2 数制与编码

计算机的应用领域极其广泛,但不论其应用在什么地方,信息在机器内部的形式都是一致的,采用的是二进制的表达,即均为0和1组成的各种编码。

2.2.1 进位计数制及其相互转换

(一)进位计数制

进位计数制简称“进制”,是人为定义的一种带进位的计数方法,可以用有限的数字符号表示所有的数。定义好的数字符号的个数,称为基数;当计数超出基数个数时,就需要向前进位。基数为n的进位计数制,就被称为“n进制”,特点是“逢n进一”。

我们日常生活中最常见的是十进制,使用0~9十个阿拉伯数字,逢十进一;而计算机系统底层的信息,使用的是二进制,也就是只有0和1两个数字,逢二进一。在计算机系统中,也经常使用八进制和十六进制来表示数据。下表是十进制数、二进制数、十六进制数对照表。

书写时,可在十六进制数后面加上“H”,如17DBH 或(17DB)16;八进制数后面加上“O”,如372O或(372)8;若在数的后面加上“B”,如10101100B,即表示此数为二进制数,或写成(10101100)2。

计算机系统为什么要采用二进制?

  • 使用有两个稳定状态的物理器件就可以表示二进制数的每一位,制造成本比较低。

  • 二进制的1和0正好与逻辑值“真”和“假”对应,为计算机实现逻辑运算提供了便利。

  • 二进制的编码和运算规则都很简单,通过逻辑门电路能方便地实现算术运算。

(二)不同进制数的相互转换

任意一个数 N,可以用 r 进制表示成下面的形式:

(1)二进制和八进制、十六进制间的转换

二进制数数位较多,书写不方便,在计算机系统中一般需要进行“缩写”。由于 23=8, 24=16,从而3位二进制数就对应着一个8进制数、4位二进制数对应着一个16进制数;对于一个小数而言,以小数点为界,整数部分从小数点左侧第一位起向左数,小数部分从小数点右侧第一位起向右数,不够就补0。这样二进制数和八进制数、十六进制数就可以非常方便地互相转换了。

例如,将二进制数1110011101.0010111转换为八进制数为:

(2)任意进制数转换为十进制数

任意进制数的各位数码与它的权值相乘,再把乘积相加,即得到相应的十进制数。这种转换方式称为 按权展开法

例如,将二进制数 11011.101 转换为十进制数为:

(3)十进制数转换为二进制数

将十进制数转换为二进制数,一般采用 基数乘除法。整数部分和小数部分分别处理,最后将整数部 分与小数部分的转换结果拼接起来。

- 整数部分的转换规则:除2取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位,商为0时结束。 (即除2取余,先余为低,后余为高)

- 小数部分的转换规则:乘2取整,最先取得的整数为数的最高位,最后取得的整数为数的最低位,乘积为0或精度满足要求时结束。(即乘2取整,先整为高,后整为低)
​        例如,将十进制数 123.6875 转换为二进制数。

2.2.2 真值和机器数

2.2.3 定点数及其编码表示

2.2.4 C 语言中的整型数据类型

2.3 运算方法和运算电路

2.3.1 基本运算部件

1. 运算器的基本组成

运算器由算术逻辑单元(ALU)、累加器(AC)、状态寄存器(PSW)、通用寄存器组等组成。

  • 算术逻辑单元:完成加、减、乘、除四则运算,与、或、非、异或等逻辑运算。

  • 累加器:暂存参加运算的操作数和结果的部件,为 ALU 执行运算提供一个工作区。

  • 状态寄存器:也称作标志寄存器,用来记录运算结果的状态信息。

  • 通用寄存器组:保存参加运算的操作数和运算结果。

2. 逻辑门电路和逻辑运算(复习)

用半导体元器件可以构建出基本的逻辑门电路(与、或、非),能够表示基本的逻辑运算。

2.3.2 定点数的移位运算

移位运算根据操作对象的不同,可以分为算术移位和逻辑移位。算术移位针对的是有符号数,逻辑移位针对的是机器码,可以看作无符号数。

2.3.3 定点数的加减运算

2.2.4 定点数的乘法运算

2.2.5 定点数的除法运算

2.4 浮点数的表示和运算

2.4.1 浮点数的表示

2.4.2 浮点数的加/减运算

2.5 数据的存储和排列

2.5.1 数据按“边界对齐”方式存储

2.5.2 数据的“大端方式”和“小端方式”存储

2.6 章节练习

第三章 存储器

3.1 本章大纲要求与核心考点

3.1.1 大纲内容

(一)存储器的分类

(二)层次化存储器的基本结构

(三)半导体随机存储器

1. SRAM 存储器
2. DRAM 存储器
3. Flash 存储器

(四)主存储器

1. DRAM 芯片和内存条
2. 多模块存储器
3. 主存和CPU之间的连接

(五)外部存储器

1. 磁盘存储器
2. 固态硬盘(SSD)

(六)高速缓冲存储器(Cache)

1. Cache 的基本工作原理
2. Cache 和主存之间的映射方式
3. Cache 中主存块的替换算法
4. Cache 写策略

(七)虚拟存储器

1. 虚拟存储器的基本概念

2. 页式虚拟存储器

   基本原理,页表,地址转换,TLB(快表)

3. 段式虚拟存储器

4. 段页式虚拟存储器

3.1.2 核心考点

3.1.3 真题分布

3.2 存储器概述

3.2.1 存储器的分类

3.2.2 存储器的性能指标

存储器有 3 个主要性能指标:速度、容量和每位价格(简称位价)。

3.2.3 层次化存储器的基本结构

最理想的存储器应该同时满足大容量、高速度、低位价,可惜这是很难达到的。

3.3 半导体存储器

3.3.1 SRAM

SRAM 使用触发器工作原理存储信息,因此在读出信息后,它仍会保持原来的状态,不需要刷新。不过如果电源掉电,存储的信息就会丢失,所以它属于易失性半导体存储器。

SRAM 的存取速度快,但集成度低,功耗较大,价格昂贵,一般用于 Cache。

3.3.2 DRAM

3.3.3 ROM

3.4 主存储器

3.4.1 主存储器的基本组成

3.4.2 主存和 CPU 之间的连接

3.4.3 多模块存储器

  • 结构特点:存储器中只有一个存储体,每个存储单元存储 m 个字,总线宽度也为 m 个字。

  • 访问方式:一次并行读出 m 个字,地址必须顺序排列并处于同一存储单元。

  • 优点:宽度为单体单字存储器的近 m 倍(访问的内容在同一行时)。

  • 缺点:如果出现访问冲突(需要的内容不在同一行)或遇到转移指令,效率会显著降低。

2. 多体并行系统

另一种思路是采用多模块组成存储器,各个模块可以并行读写,这就是多体并行系统。每个模块有相同的容量和存取速度,各模块都有自己独立的地址寄存器(MAR)、数据寄存器(MDR)、地址译码、驱动电路和读/写电路,它们能并行工作,也能交叉工作。

所谓的 “并行工作”,就是 CPU 可以同时访问 N 个模块,同时启动,同时读出;当然,由于总线是公共的,同时读出的 N 个字需要在总线上分时传送。

根据对这 N 个模块中存储单元的不同编址方式,多体并行系统又可以分为 多体高位交叉存储器多体低位交叉存储器

(1)多体高位交叉存储器

多体高位交叉存储器中,各模块采用 高位交叉方式编址

高位交叉方式编址时,地址分为两部分,高位地址表示体号,低位地址为体内地址。这种编址方式下,一个模块(也就是 “体”)内的地址是连续的,程序存储时会按照体内地址的顺序存放,也就是先存一个模块,存满之后再存下一个;所以这种方式也叫 “顺序存储”。

​        只要调动合理,使不同的请求源同时去访问不同的模块,就可以实现并行工作。比如,CPU 在访问一个模块的同时,外部设备可以以直接存储器访问(DMA)的方式访问另一个模块,这样两个体就是并行工作的。

**(2)多体低位交叉存储器**

​        多体低位交叉存储器中,各模块采用 **低位交叉方式编址**。

​        低位交叉编址是指用主存地址的低位来指明存储器模块,高位指明模块内的字地址。这种编址方式下,连续的地址分布在相邻的模块中,同一模块内的地址是不连续的,因此也叫做 “**交叉存储**”。有 M 个模块的低位交叉编址,又叫 **模 M 编址**。

上面是一个模 4 交叉编址的存储器,存储体模块个数为 4,所以第一个模块中所有存储单元的地址号,对 4 取模都为 0;同样道理,第二、三、四个模块的地址号,对 4 取模结果分别为 1、2、3。具体的编址地址号如下所示:

3.5 外部存储器

外部存储器是主存的后援设备,也叫做辅助存储器,简称 **外存** 或 **辅存**,与主存一起构成了存储器系统的主存-辅存层次。与主存相比,外存容量大、速度慢、价格低,可以脱机保存信息,属于 **非易失性存储器**。

​        用于计算机系统的外存主要有磁盘、磁带、光盘;磁盘和磁带都属于 **磁表面存储器**。而目前广泛应用的 **固态硬盘(SSD)**主体由闪存芯片构成,属于半导体存储器。

3.5.1 磁盘存储器

3.5.2 固态硬盘(SSD)

3.6 高速缓冲存储器(Cache)

​        为了解决 CPU 和主存之间速度不匹配的问题,计算机系统中引入了高速缓存(Cache)的概念。基本想法就是使用速度更快但容量更小、价格更高的 SRAM 制作一个缓冲存储器,用来存放经常用到的信息;这样一来,CPU 就可以直接与 Cache 交换数据,而不用访问主存了。

​        这种方案之所以有效,是因为通过对大量典型程序分析发现,在一定时间内,CPU 要从主存取指令或者数据,只会访问主存局部的地址区域。这是由于指令和数据在内存中都是连续存放的,而且有些指令和数据会被多次调用(比如常用函数、循环代码段、数组和一些常数);也就是说,指令和数据在主存中地址分布不是随机的,而是相对的簇聚。这使得 CPU 执行程序时,访存具有相对的局部性;这称为程序访问的 **局部性原理**。

- 时间局部性:如果一个数据现在被访问了,那么以后很有可能也会被访问
- 空间局部性:如果一个数据现在被访问了,那么它周围的数据在以后可能也会被访问

​        局部性原理是 Cache 高效工作的理论基础。

3.6.1 Cache 的基本工作原理

为了便于 Cache 与主存交换信息,Cache 和主存都被划分为相等的块。Cache 块又称 Cache 行,每块由若干字节组成,块的长度称为块长。由于 Cache 的容量远小于主存的容量,所以 Cache 中的块数要远少于主存中的块数,Cache 中仅保存主存中最活跃的若干块的副本。

1. Cache 工作原理

3.6.2 Cache 和主存之间的映射方式

直接映射实现简单,但不够灵活,即使 Cache 的其他许多地址空着也不能占用,这使得直接映射的块冲突概率高,空间利用率低。

2. 全相联映射

直接映射的问题在于,我们找到的是从主存块到缓存行的一种 “多对一” 的关系,每一个主存块只能对应唯一的缓存行,从而导致冲突概率高。如果让一个主存块,可以映射到多个缓存块上,变成 “多对多” 的关系,明显就可以减少冲突了。

最简单的情况,就是不加任何条件限制,让主存的每一个块都可以映射到 Cache 的任意位置;简单来说就是 “有空就填”,放在哪里都可以。这就是 全相联映射 方式。

3.6.3 Cache 中主存块的替换算法

3.6.4 Cache 写策略

3.7 虚拟存储器

3.7.1 虚拟存储器的基本概念

3.7.2 页式虚拟存储器

3.7.3 段式虚拟存储器

3.7.4 段页式虚拟存储器

3.7.5 虚拟存储器与 Cache 的比较

3.8 章节练习

第四章 指令系统

4.1 本章大纲要求与核心考点

4.1.1 大纲内容

(一)指令系统的基本概念

(二)指令格式

(三)寻址方式

(四)数据的对齐和大/小端存放方式

(五)CISC 和 RISC 的基本概念

(六)高级语言程序与机器级代码之间的对应

  1. 编译器、汇编器和链接器的基本概念

  2. 选择结构语句的机器级表示

  3. 循环结构语句的机器级表示

  4. 过程(函数)调用对应的机器级表示

4.1.2 核心考点

本章内容是也是考研考察的一个重点,一般会与第二章、第三章和第五章进行结合,往往以综合应用题的形式出现。而常见的寻址方式很容易以单项选择题的形式进行考察。

需要重点掌握的内容包括:

  • 指令的格式及相关概念,定长与扩展操作码格式。

  • 常见的寻址方式、特点及有效地址的计算。

  • 常用的汇编指令,过程调用、选择语句和循环语句的机器级表示,标志位及其使用。

  • CISC 和 RISC 的基本概念,CISC 和 RISC 的比较。

4.1.3 真题分布

4.2 指令和指令格式

4.2.1 指令的基本格式

4.2.2 指令字长

4.2.3 地址码

4.2.4 操作码

4.2.5 指令的操作数类型和操作类型

4.3 寻址方式

寻址方式是寻找指令或操作数有效地址的方式,也就是指确定本条指令的数据地址,以及下一条将要执行的指令地址的方法。

寻址方式分为指令寻址和数据寻址两大类。

4.3.1 指令寻址

4.3.2 数据寻址

4.4 CISC 和 RISC 的基本概念

4.4.1 CISC

4.4.2 RISC

4.4.3 CISC 和 RISC 的比较

4.5 高级语言程序与机器级代码

4.5.1 x86 汇编指令基础

4.5.2 从 C 语言程序到汇编程序

4.5.3 选择结构语句的机器级表示

4.5.4 循环结构语句的机器级表示

4.5.5 过程(函数)调用对应的机器级表示

4.6 章节练习

第五章 中央处理器(CPU)

5.1 本章大纲要求与核心考点

5.1.1 大纲内容

(一)CPU 的功能和基本结构

(二)指令执行过程

(三)数据通路的功能和基本结构

(四)控制器的功能和工作原理

(五)异常和中断机制

  1. 异常和中断的基本概念

  2. 异常和中断的分类

  3. 异常和中断的检测与响应

(六)指令流水线

  1. 指令流水线的基本概念

  2. 指令流水线的基本实现

  3. 结构冒险、数据冒险和控制冒险的处理

  4. 超标量和动态流水线的基本概念

(七)多处理器基本概念

  1. SISD、SIMD、MIMD、向量处理器的基本概念

  2. 硬件多线程的基本概念

  3. 多核处理器(multi-core)的基本概念

  4. 共享内存多处理器(SMP)的基本概

5.1.2 核心考点

​          本章知识点较多,综合性比较强。其中,指令流水线是历年考查的一个重点,数据通路、控制器原理出现的频率也很高,单项选择和综合应用题都有可能出现。本章单独出题一般以概念和原理为主,计算较少;往往会与第四章结合进行综合考查,有时也会结合第二章、第三章的内容。

​        需要掌握的内容包括:

- CPU 的基本结构,运算器和控制器的组成,各种寄存器的功能和特性。
- 指令周期的概念,指令执行的过程和方案。
- 数据通路的结构,数据通路中的数据传送流程和控制信号。
- 硬布线控制器的概念和原理;微程序控制器的概念和原理,微指令的编码方式及特点;两种控制器的比较。
- 异常和中断的概念和分类;异常和中断的响应过程。
- 指令流水线的概念、分类和原理;流水线冒险与处理方法;流水线的性能指标;超标量流水线。
- 多处理器的基本概念和分类。

5.1.3 真题分布

5.2 CPU 的功能和基本结构

5.2.1 CPU 的功能

5.2.2 CPU 的基本结构

根据 CPU 的功能可以看出,数据的运算需要由运算器来完成,剩下的功能则由控制器完成。

5.3 指令周期

5.3.1 指令周期的概念

5.3.2 时钟周期和机器周期

5.3.3 处理器的设计方式

5.4 指令流水线

5.4.1 指令流水线的基本概念和原理

5.4.2 流水线冒险

5.4.3 流水线的性能指标

5.4.4 流水线的多发技术

5.5 数据通路和控制信号

5.5.1 数据通路的概念和功能

5.5.2 指令周期中的数据流

5.5.3 指令周期的微操作

5.5.3 数据通路的基本结构和控制信号

5.6 控制器的原理和设计

​        控制单元 CU 控制一条指令执行的过程,实质上就是发出控制信号、依次执行一个微操作序列的过程。很明显,不同的指令中包含的微操作数量不等,每个微操作的复杂程度也不同,所以每条指令的执行时间都是不同的。

​        在 CPU 内,可以通过时钟信号产生节拍,来控制每个微操作的执行。一个指令周期可以包含多个机器周期,每个机器周期又可以包含多个节拍,这样就构成了 **多级时序系统**。

​        控制不同的微操作序列,需要产生不同的时序控制信号。至于如何形成这些控制信号,可以采用不同的时序控制方式,这就被称为 CU 的 **控制方式**。

5.6.1 CU 的控制方式

5.6.1 组合逻辑控制器

5.6.2 微程序控制器

5.7 中断和异常

5.7.1 基本概念和分类

5.7.2 中断的检测

5.7.3 中断的响应

5.7.4 中断服务程序

如果在 CPU 执行中断服务程序时,又来了一个新的中断请求,这时有两种处理方式:一种是直接不予响应,即 CPU 在响应中断的过程中保持 “关中断” 状态,直到中断服务程序执行结束、返回之前才开中断;另一种则是 CPU 立即响应新的中断请求,这需要在中断服务程序的开始阶段 “开中断”。

5.7.5 中断屏蔽技术

5.8 多处理器基本概念

5.8.1 SISD、SIMD、MIMD 和向量处理器

5.8.2 硬件多线程

5.8.3 多核处理器和 SMP

5.9 章节练习

9.【2018真题】若某计算机最复杂指令的执行需要完成 5 个子功能,分别由功能部件 A~E 实现,各功能部件所需时间分别为 80ps、50ps、50ps、70ps 和 50ps,采用流水线方式执行指令,流水段寄存器延时为 20ps,则CPU 时钟周期至少为 ( )

A.60 ps B.70 ps C.80 ps D.100 ps

答案:D

要点:流水线上每个流水段的时间相同,应该取最大的功能部件运行时间,并且加上寄存器的延时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVCC数据库并发控制技术

一、引言 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种广泛使用的数据库并发控制技术&#xff0c;它允许数据库读操作和写操作并发执行&#xff0c;而无需加锁整个表或行&#xff0c;从而大大提高了数据库的并发性能和吞吐量。MVCC主要被应用于支持事…

SAP Fiori 实战课程(二):新建页面

课程回顾 上一课中,利用Visual studio Code 新建、并运行了一个Demo工程。可以实现对项目的启动,启动后进入一个List清单。 那么本次课程的目前就是在上一节Demo的基础上,从零开始新建一个完整的页面。实现从首页清单,选择行后,鼠标点击,进入下一个页面。 准备工作 在开…

【BUG】已解决:ModuleNotFoundError: No module named ‘tensorflow‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘tensorflow‘ 目录 已解决&#xff1a;ModuleNotFoundError: No module named ‘tensorflow‘ 【常见模块错误】 【解决办法】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff…

Java | Leetcode Java题解之第274题H指数

题目&#xff1a; 题解&#xff1a; class Solution {public int hIndex(int[] citations) {int left0,rightcitations.length;int mid0,cnt0;while(left<right){// 1 防止死循环mid(leftright1)>>1;cnt0;for(int i0;i<citations.length;i){if(citations[i]>mi…

新版GPT-4omini上线!快!真TM快!

大半夜&#xff0c;OpenAI突然推出了GPT-4o mini版本。 当我看到这条消息时&#xff0c;正准备去睡觉。mini版本质上是GPT-4o模型的精简版本&#xff0c;没有什么革命性的创新&#xff0c;因此我并没有太在意。 结果今天早上一觉醒来发现伴随GPT-4o mini上线&#xff0c;官网和…

Linux 12:多线程2

1. 生产者消费者模型 生产者消费者模型有三种关系&#xff0c;两个角色&#xff0c;一个交易场所。 三种关系&#xff1a; 生产者之间是什么关系?竞争 - 互斥 消费者和消费者之间?竞争 - 互斥 消费者和消费者之间?互斥和同步 两个角色&#xff1a; 生产者和消费者 一个交…

【07】LLaMA-Factory微调大模型——微调模型导出与微调参数分析

上文介绍了如何对微调后的模型进行使用与简单评估。本文将介绍对微调后的模型进行导出的过程。 一、llama-3微调后的模型导出 首先进入虚拟环境&#xff0c;打开LLaMA-Factory的webui页面 conda activate GLM cd LLaMA-Factory llamafactory-cli webui 之后&#xff0c;选择…

C#开发:PowerDesigner建表和Navicat导入数据

一、打开Powerdesigner&#xff0c;新建一个模型&#xff0c;点击ok 二、用工具面板拖拽出一个数据表 &#xff08;如果没有工具面板&#xff0c;请在如下操作中开启&#xff09; 三、双击刚刚的拖拽出来的表&#xff0c;设计表的字段&#xff0c;可以添加注释说明 【备注】…

《Windwos API每日一练》12.1 剪贴板的简单用法

本节我们讲述剪贴板的简单实现方法。 本节必须掌握的知识点&#xff1a; 剪贴板数据的标准格式 内存分配 把文本传到剪贴板 从剪贴板中取得文本 打开和关闭剪贴板 第76练&#xff1a;剪贴板的简单用法 12.1.1 剪贴板数据的标准格式 Windows支持各种预定义的剪贴板格式&#…

Google Chrome 浏览器在链接上点右键的快捷键

如今&#xff0c;越来越多的软件都懒得设个快捷键&#xff0c;就算设置了连个下划线也懒得加了。 谷歌浏览器右键 > 链接另存为... 和 复制链接地址 的快捷键 (如图)

爬虫自己做的

1.urllib 1.1基本使用 1.2 下载&#xff08;图片&#xff0c;页面&#xff0c;视频&#xff09; 1.3 get 1.3.1 quote 中文变成对应uncode编码 当url 的wd中文时 quote是将中文变成对应uncode编码 然后拼接成完整的url 1.3.2urlencode方法 wd有多个参数 1.3.3ajas get实例 …

Connecting weaviate with langflow across docker containers

题意&#xff1a;在Docker容器之间连接Weaviate与Langflow 问题背景&#xff1a; I am trying to build a local RAG application using Langflow. For my vectore store, I want to use a local Weaviate instance, hosted in a separate docker container on the same netwo…

KAFKA搭建教程

KAFKA搭建教程 期待您的关注 KAFKA学习笔记 帮助更多人 目录 KAFKA搭建教程 1.下载Kafka并解压 2.添加环境变量 3.修改 server.properties 文件 4.将kafka复制到其它节点 5.修改node1、node2节点的broker.id 6.将master的环境变量同步到node1、 node2 7.启动zookeeper…

昇思25天学习打卡营第21天|RNN实现情感分类

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;RNN模型 Mindspore框架循环神经网络RNN模型实现情感分类|&…

PostgreSQL 中如何解决因大量并发删除和插入操作导致的索引抖动?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何解决因大量并发删除和插入操作导致的索引抖动一、理解索引抖动二、索引抖动的影响三…

nginx通过nginx_upstream_check_module实现后端健康检查

1、简介说明 nginx是常用的反向代理和负载均衡服务&#xff0c;具有强大并发能力、稳定性、丰富的功能集、低资源的消耗。 nginx自身是没有针对后端节点健康检查的&#xff0c;但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完…

【Langchain大语言模型开发教程】基于文档问答

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI Embedding&#xff1a; https://huggingface.co/BAAI/bge-large-en-v1.5/tree/main 学习目标 1、Embedding and Vector Store 2、RetrievalQA 引包、加载环境变量 import osfrom dotenv import…

【BUG】已解决:OSError: [Errno 22] Invalid argument

已解决&#xff1a;OSError: [Errno 22] Invalid argument 目录 已解决&#xff1a;OSError: [Errno 22] Invalid argument 【常见模块错误】 错误原因&#xff1a; 解决方法如下&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

快速认识EA(Enterprise Architecture)

前言 企业架构&#xff0c;英文是&#xff1a;Enterprise Architecture&#xff0c;简称&#xff1a;EA&#xff0c;是承接企业战略规划与IT建设之间的桥梁&#xff0c;是企业信息化的核心&#xff0c;主要包括业务架构和IT架构。 架构的本质是管理和解决系统的复杂性&#x…

06. 截断文本 选择任何链接 :root 和 html 有什么区别

截断文本 对超过一行的文本进行截断,在末尾添加省略号(…)。 使用 overflow: hidden 防止文本超出其尺寸。使用 white-space: nowrap 防止文本超过一行高度。使用 text-overflow: ellipsis 使得如果文本超出其尺寸,将以省略号结尾。为元素指定固定的 width,以确定何时显示省略…