第1章计算机系统概述
1.1 基本构成
计算机主要由4个机构化部件组成:
-
处理器(Processor):控制计算机的操作,执行数据处理功能。当只有一个处理器时,它通常指中央处理单元(CPU).
-
内存(main memory):存储数据和程序。此类存储器在计算机关机时,存储的内容会丢失。计算机关机时,磁盘存储器的内容不会丢失。
-
输入/输出模块(I/Omodule):在计算机和外部环境之间移动数据。外部环境由各种外部设备组成,包括辅助存储设备(如硬盘、U盘)、通信设备和终端
-
系统总线(system bus):为处理器、内存和输入/输出模块间提供设备设施。
处理器的一种功能是和存储器交换数据。为此,处理器通常使用两个内部寄存器:存储器地址寄存器(MAR:Memory Address Register),MAR确定下一次读写的存储器地址;存储器缓存寄存器(Memory Buffer Register MBR),MBR存放要写入存储器的数据或者从存储器中读取的数据。同理,输入/输出地址寄存器(I/O Address Register 简称 I/O AR或 I/O地址寄存器)确定一个特定的输入/输出设备,输入/输出缓存寄存器(I/O Buffer Register 简称 I/O BR或 I/O缓存寄存器)用于在输入/输出模块和处理器间交换数据。
内存模块由一组单元组成,单元由顺序编号的地址定义。每个单元包含一个个指令或数据(二进制格式)。输入/输出模块在外部设备与处理器和存储器之间传输数据。
1.2 处理器寄存器
处理器包含一组寄存器,它们提供一定的存储能力,比内存访问速度快,但内存的容量小。处理器中的寄存器有两个功能:
-
用户可见寄存器:优先使用这些寄存器,可以减少使用机械语言或汇编语言的程序员对内存的访问次数。对高级语言而言,由优化编译器负责决定哪些变量应该分配给寄存器,哪些变量应该分配给内存。
-
控制和状态寄存器:用以控制处理器的操作,且主要被具有特权的操作系统例程使用,以控制程序的执行。
图1-1 计算机部件:顶层视图
1.2.1 用户可见寄存器
用户可见寄存器可以通过由处理器执行的机器语言来引用,它一般对所有的程序都可用,包括应用程序和系统程序。通常可用的寄存器类型包括数据寄存器、地址寄存器、条件码寄存器。
数据寄存器:可以被程序员分配给各种函数。
地址寄存器:存放数据和指令的内存地址,或者存放用于计算完整地址或有效地址的部分地址。这些寄存器是可以通用的,或者可以用来以某一特定方式或模式寻址存储器。
-
变址寄存器(index register):变址寻址是一种最常用的寻址方式,它可以通过给一个基值加一个索引来获得有效地址。
-
段指针(segment pointer):对于分段寻址方式,存储器被划分成段,这些段由长度不等的字块组成,段由若干长度的字组成。一个存储器引用由一个特定段号和段内偏移量组成。采用这种寻址方式,需要用一个寄存器保存段的基地址(起始地址)。
-
栈指针(stack pointer):如果对用户可见的栈进行寻址,则应该有一个专门的寄存器指向栈顶。这样可以使用不包含地址域的指令,如入栈(push)、出栈(pop)。
1.2.2 控制和状态寄存器
指令执行必须的寄存器如下:
-
程序计数器(Program Counter,PC):包含将取指令的地址,
-
指令寄存器(Instruction Register,IR):包含最近取的指令内容。
所有的处理器设计还包括一个或一组寄存器,通常称为程序状态字(Program Status Word,PSW),它包含状态信息。PSW通常包含条件码和其他状态信息,如中断允许/禁止位和内核/用户状态位。
条件码(conditoncode,也称标记)是处理器硬件为操作结果设置的位。条件码位收集到一个或多个寄存器中,通常它们构成了控制寄存器的一部分。机器指令通常允许通过隐式访问来读取这些位,但不能通过显示访问进行修改。
在使用多种类型中断的处理器中,通常有一组中断寄存器,每一个指向一个中断处理例程。如果使用栈实现某些功能,则需要一个系统栈指针。内存管理硬件也需要专门的寄存器,寄存器还可以用于控制I/O操作。
在设计控制和状态寄存器结构时需要考虑很多因素,一个关键问题是对操作系统的支持。
另一个重要的设计决策是在寄存器和存储器间分配控制信息。通常把存储器最初的(最低的)几百个或几千个字用于控制目的,设计者必须决定在昂贵、高速的寄存器中放置多少控制信息,在相对便宜、低速的内存中放置多少控制信息。
1.3 指令的执行
处理器执行的程序是由一组保存在存储器中的指令组成。按最简单的形式,指令处理包括两个步骤:处理器从存储器中一次读(取)一条指令,然后执行每条指令。程序执行是由不断重复的取指令和执行指令的过程组成。
一个单一的指令需要的处理称为一个指令周期。如图1.2所示,可使用简单的两个步骤来描述指令周期。这两个步骤分别称为取指阶段和执行阶段。仅当机器关机、发生某些未发现的错误或者遇到与停机相关的程序指令时,程序执行才会停止。