计算机系统概述
基本构成
从顶层看,一台计算机由处理器、存储器和输入输出部件组成,每类部件有一个或多个模块。这些部件以某种方式互连,以实现计算机执行程序的主要功能。
1:处理器
2:内存
3:输入、输出模块
4:系统总线
处理器的一种功能是和存储器交换数据。为此,它通常使用两个内部寄存器:存储地址寄存器(MAR),存储器地址寄存器用于确定下一次读、写的存储器地址;存储器缓冲寄存器(MBR),存储器缓冲寄存器用于存放要写入存储器的数据或者从存储器中读取的数据。同理,输入、输出地址地址寄存器用于确定一个特定的输入、输出设备,输入、输出缓冲寄存器用于在输入、输出的模块和处理器间交换数据。
内存模块由一组单元组成,这些单元由顺序编号的地址定义。每个单元包含一个二进制数,可以解释为一个指令或数据。输入、输出模块在外部设备与处理器和存储器之间传送数据。输入、输出模块包含内存缓冲区,用于临时保存数据,直到它们被发送出去。
1.3 指令的执行
处理器执行的程序是由一组保存在存储器中的指令组成的。按最简单的形式,指令处理包括两步:处理器从存储器中一次读一条指令,然后执行每条指令。程序执行是由不断重复的取指令和执行指令的过程组成的。指令执行可能涉及很多操作,具体取决决于指令自身。
1.4 中断
事实上所有计算机都提供了允许其他模块(IO,存储器)中断处理器正常处理过程的机制。
中断最初是用于提高处理器效率的一种手段,例如大多数IO设备比处理器慢得多,假设处理器给一台打印机传送数据,在每一次写操作后,处理器必须暂停并保持空闲,直到打印机完成工作。暂停的时间长度可能相当于成百上千个不涉及存储器的指令周期。显然,这对于处理器的使用来说是非常浪费的。
1.4.1中断和指令周期
利用中断,处理器可以在IO操作执行过程中执行其他指令。在这期间,外部设备处于从计算机存储器接收数据并打印。这种IO操作和用户程序中指令的执行是并发的。
当外部设备做好服务的准备时,也就是说,当它准备好从处理器接收更多的数据时,该外部设备的IO模块经处理器发送一个中断请求信号。这时处理器会做出响应,暂停当前程序的处理,转去处理服务于特定IO设备的程序,这种程序称为中断处理程序。在对该设备的服务响应完成后,处理器恢复原先执行。注意,中断可在主程序中的任何位置发生,而不是在一条指定的指令处。
从用户的角度看,中断打断了正常执行的序列。当中断处理完成后,再恢复执行,因此,用户并不需要为中断添加任何特殊的代码,处理器和操作系统负责挂起用户程序,然后在同一个地方恢复执行。
为适应中断产生的情况,在指令周期中要增加一个中断阶段。在中断阶段,处理器检查是否有中断发生,即检查是否出现中断信号 。如果没有中断,处理器继续运行,并在取指周期取当前程序的下一条指令;如果有中断,处理器挂起当前程序的执行,并执行一个中断处理程序。这个中断处理程序通常是操作系统的一部分,它确定中断的性质,并执行所需要的操作。例如,处理程序决定哪一个IO模块产生中断,并转到往该IO模块中写更多数据的程序。当中断处理程序后,处理器在中断点恢复对用户程序的执行。
显然,在这个处理中有一定的开销,在中断处理程序中必须执行额外的指令以确定中断的性质,并决定采用适当的操作。然而,如果简单地等待IO操作的完成将花费更多的时间,因此使用中断能够有效地使用处理器。
1.4.2 中断处理
中断激活了很多事件,包括处理器硬件中的事件及软件中的事件。
1:设备给处理器发出一个中断信号。
2:处理器在响应中断前结束当前指令的执行。
3:处理器对中断进行测定,确定存在未响应的中断,并给提交中断的设备发送确认信号,确认信号允许该设备取消它的中断信号。
4:处理器需要为把控制权转移到中断程序中去做准备。首先,需要保存从中断点恢复当前程序所需要的信息,要求的最少信息包括程序状态字(PSW)和保存在程序计数器(PC)中的下一条要执行的指令地址,它们被压入系统控制栈中。
5:处理器把响应此中断的中断处理程序入口地址装入程序计数器中。可以针对每类中断有一个中断处理程序,也可以针对每个设备和每类中断各有一个中断处理程序,具体取决于计算机系统结构和操作系统的设计。如果有多个中断处理程序,处理器就必须决定调用哪一个,这个信息可能已经包含在最初的中断信号中,否则处理器必须给发中断的设备发送请求,以获取含有所需信息的响应。
一旦完成对程序计数器的装入,处理器则继续到下一个指令周期,该指令周期也是从取指开始。由于取指是由程序计数器的内容决定的,因此控制被转移到中断处理程序。
6:在这一点,与被中断程序相关的程序计数器和PSW被保存到系统栈中,此外,还有一些其他信息被当做正在执行程序的状态的一部分。特别需要保存处理器寄存器的内容,因为中断处理程序可能会用到这些寄存器,因此所有这些值和任何其他的状态信息都需要保存。在典型情况下,中断处理程序一开始就在栈中保存所有的寄存器内容。
7:中断处理程序现在可以开始处理中断,其中包括检查与IO操作相关的状态信息或其他引起中断的事件,还可能包括给IO设备发送附加命令或应答。
8:当中断处理结束后,被保存的寄存器值从线中释放并恢复到寄存中
9:最后的操作是从栈中恢复PSW和程序计数器的值,其结果是下一条要执行的指令来自前面被中断的程序。
保存被中断程序的所有状态信息并在以后恢复这些信息,这是十分重要的。因为中断并不是程序调用的一个例程,它可以在任何时候发生,因而可以在用户程序执行过程中的任何一点上发生,它的发生是不可预测的。
1.5 存储器的层次结构
计算机存储器的设计目标可以归纳成三个问题:多大的容量?多快的速度?多贵的价格?
“多大的容量”问题从某种意义上来说是无止境的,存储器有多大的容量,就可能开发出应用程序使用它。“多快的速度”问题相对易于回答,为达到最佳的性能,存储器的速度必须能够跟得上处理器的速度。换言之,当处理器正在执行指令时,我们不希望它会因为等待指令或操作数而暂停。最后一个问题也必须考虑。对一个实际的计算机系统,存储器的价格与计算机其他部件的价格相比应该是合理的。
应该认识到,存储器的这三个重要特性即价格、容量、和访问时间之间存在着一定的折中。在任何时候,实现存储器系统会用到各种各样的技术,但各种技术之间往往存在以下关系:
1:存储时间越快,每“位”的价格越高。
2:容量越大,每“位”的价格越低。
3:容量越大,存取速度越慢。
解决这一问题的方法是,不依赖于单一的存储组件或技术,而是使用存储器的层次结构。
1.6 高速缓存
尽管调整缓存对操作系统是不可见的,但它与其他存储管理硬件相互影响。此外,很多用于虚拟存储的原理也可以用于调整缓存。
1.6.1 动机
在全部指令周期中,处理器在取指令时至少访问一次存储器,而且通常还要多次访问存储器用于取操作或保存结构。处理器执行搜集的速度显然受存储周期(从存储器中读一个字或写一个字到存储器中所花的时间)所限制。长期以来,由于处理器和内存的速度不匹配,这个限制已经成为很严重的问题。近年来,处理器速度的提高一直快于存储器访问速度的提高,这需要在速度、价格和大小之间进行折中。理想情况下,内存的构造技术可以采用与处理器中的寄存器相同的构造技术,这样内存的存储周期才跟得上处理器周期。但这样做成本太高。解决方法是利用局部性原理,即在处理器和内存之间提供一个容量小而速度快的存储器,称为高速缓存。
1.6.2 高速缓存原理
高速缓存试图使访问速度接近现在最快的存储器,同时保持价格便宜的大存储容量(以较为便宜的半导体存储器技术实现)。有一个相对容量大而速度比较慢的内存和一个容量较小且速度较快的调整缓存。高速缓存包含一部分内存数据的副本。当处理器试图读取存储器中的一个字节或字时,要进行一次检查以确定这个是否在高速缓存中,如果在,则该字节从调整缓存传递给处理器;如果不在,则先将由固定数目的字节组成的一块内存数据读入高速缓存,然后该字节从高速缓存传递处理器。由于访问局部性现象的存在,当一块数据被取入调整缓存以满足一次存储器访问时,很可能紧接着的多次访问的数据是该块中的其他字节。
1.7 直接内存存取
针对IO操作有三种可能的技术:可编程IO、中断驱动IO和直接内存存取(DMA)。
可编程IO操作
当处理器正在执行程序并遇到一个与IO相关的指令时,它通过给相应的IO模块发命令来执行这个指令。使用可编程IO操作时,IO模块执行请求的动作并设置IO状态寄存器中相应的位,它并不进一步通知处理器,它并不中断处理器。因此处理器在执行IO指令后,还要定期检查IO模块的状态,以确定IO操作是否已经完成。
中断驱动IO
由处理器给IO模块发送IO命令,然后处理器继续做其他一些有用的工作。当IO模块准备好与处理器交换数据时,它将打断处理器执行并请求服务。处理器和前面一样执行数据传送,然后恢复处理器以前的执行过程。
尽管中断驱动IO比简单的可编程IO更有效,但处理器仍然需要主动干预在存储器和IO模块之间的数据传送,并且任何数据传送都必须完全通过处理器。因此这种两种IO形式都有两方面固有的缺陷:
1:IO传送速度受限于处理器测试设备和提供服务的速度。
2:处理器忙于管理IO传送的工作,必须执行很多指令以完成IO传送。
直接内存存取(DMA)
DMA功能由系统总线中一个独立的模块完成,也可以并入到一个IO模块中。不论采用哪种形式,该技术的工作方式如下所示:当处理器要读或写一块数据时,它给DMA模块产生一条命令,发送以下信息:
1:是否请求一次读或写;
2:涉及的IO设备的地址;
3:开始读或写的存储器单元。
4:需要读或写的字数。
之后处理器继续其他工作。处理器把这个操作委托给DMA模块,由该模块负责处理。DMA模块直接与存储器交互,传送整个数据块,每次传送一个字。这个过程不需要处理器参与。当传送完成后,DMA模块发一个中断信号给自带顺。因此只有在开始传送和传送结束时才会参与。
DMA模块需要控制总线以便与存储器进行数据传送。由于在总线使用中存在竞争,当处理器需要使用总线是要等待DMA模块。注意,这并不是一个中断,处理器没有保存上下文环境去做其他事情,而是仅仅暂停一个总线周期(在总线上传输一个字的时间)。其总的影响是在DMA传送过程 中,当处理器需要访问总线时,处理器执行速度会变慢。尽管如此,对多字IO传送来说,DMA比中断驱动和程序控制IO更有效。
1.8 多处理器和多核计算机组织结构
传统上,计算机被视为顺序机,大多数计算机编程语言要求程序把算法定义成指令序列。处理器按顺序一条一条地执行机器指令来执行程序。每条指令是以操作序列(取指、取操作数、执行操作、存储结构)的方式执行的。
对计算机的这种看法并不是完全真实的。在微操作级别,同一时会有多个控制信号产生:长久以来,指令流水线技术至少可以把取指令操作和执行操作重叠起来;这些都是并行执行的例子。
随着计算机技术 的发展和计算机硬件价格的下降,计算机的设计者们找到了越来越多并行处理的机会。这些并行处理的方法通常用于提高性能,在某些情况下也可以用于提高可靠性。以下是三种最流行的通过复制处理器提供并行性的手段:对称多处理器(SMP)、多核计算机和集群。