计算机体系结构ComputerArchitecture
计算机硬件
简介
计算机硬件是一套拥有计算机功能的物理设备,这些物理组件典型的被分为三种:输入,输出,存储。这些组件都能够连接到微处理器,即CPU上。CPU通过总线实现数据传输并以此来控制计算机操作。
在另一方面讲,软件程序是一套用于数据操作的指令集,比如字处理软件和电子游戏软件,这些都通过硬件存储并传输给CPU处理。计算机软件也管理着硬件的使用,比如从存储器中获取信息。基本输入/输出系统(BIOS)控制着计算机输入硬件设备和输出硬件设备间的交互。CPU在技术上也被称为是硬件,一部分功能与软件相关联,由于处理器同时有软件和硬件的功能,因此也被称为固件(Firmware)。
输入硬件
计算机的外部输入硬件提供信息和指令到计算机。光笔是一种光触输入笔,用于直接在屏幕上拖画或按压。鼠标是一种指针设备,用手握着使用。鼠标有一个在底部的检测设备,通常是一个滚轮,通过在平滑的地方移动鼠标就可以控制屏幕上的指针或光标。在平面上移动鼠标可以控制屏幕上的光标,点击鼠标中的按钮,可以选择屏幕上的数据项或命令。鼠标上的控制杆可以使屏幕上的光标或者其他图形对象在多个方向上移动。键盘是一种打字机,允许用户输入文本或者命令到计算机,有些键盘有些特殊功能键或综合定位设备,比如跟踪球或者让用户可以手指触控的触摸板。
光扫描仪采用光感设备来把图像或者文本转换成计算机可以处理的电子信号,比如图片可以扫描到计算机并添加到一个文本文档中。最普遍的两种扫描仪是与复印机类似的平板扫描仪和手动处理图像的手持式扫描仪。麦克风可以转换声音信号,并通过计算机存储、处理和回放。语音识别模块可以把语音转换成计算机可以识别和处理的信号。
调制解调器(Modem)可以连接计算机和电话线,并能与另一台计算机传输数据,每一台计算机都通过modem来发送或接收信息。Modem把信息转换为信号,并通过电话线传送到另一台计算机,然后由接收的Modem再把该信号转换为计算机可以处理的信息。
输出硬件
外部输出设备负责CPU中的信息传输给用户。视频显示器能够把计算机输出的信息转换为可视化信息。视频显示一般有两种形式:阴极射线管(CRT)和液晶显示。基于CRT的显示器就像电视机一样,通过使用扫描磷光电子束来显示图像,而基于LCD的显示器通过在平滑而小型的显示器来可可视化的显示图像。LCD显示器常用于笔记本电脑中。
打印机可以在纸上打印文本和图像。点阵打印机采用细小的线来撞击墨带来显示字符,激光打印机用光束在磁鼓上画出图像,然后由墨粉渲染成像。喷墨式打印机使用喷墨的方式来形成字符和图像。
存储硬件
存储硬件为计算机提供信息存储器和让计算机检索信息的程序,有两者主要的存储设备:磁盘驱动器和内存。磁盘驱动器有硬盘、软盘、磁光盘以及普通光盘。硬盘通过嵌入在磁盘中的磁性粒子来存储信息,硬盘能够快速的存取大量的信息。软盘也是通过磁性粒子来存取信息,不过是通过嵌入可移动软驱或硬驱来实现的。软盘存储的信息要比硬盘少很多,而且速度还慢很多。磁光盘也是通过可移动的磁盘来存取信息,这种磁盘对激光或磁性都很敏感,他们也和硬盘一样,可以储存很多信息,但是你读取的速度要慢一些。由反射材料制成的光盘(存储器),其表面烧蚀出凹陷区,光驱(CD-ROM)就是将信息存储于此。光驱中的信息不能够被擦除和重写,他们也能像硬盘一样存很多信息,但是读取速度则大大降低了。
内存指的是CPU快速读取信息的计算机芯片,随机(存取)存储器是用于存储程序的信息和指令。通常,程序都是从硬盘中读取信息到内存中。当计算机断电后,信息会丢失,所以RAM也叫做易失性存储器。只读存储器(ROM)包含了计算机永久可用的关键信息和程序,比如操作系统。当计算机断电后,计算机芯片不会丢失数据,所以ROM也叫非易失性存储器。
某些设备有多个用途。如软盘还可以用于输入设备,除此之外,当用户想用软盘来存储信息时,又可以用于输出设备。
硬件间的连接
为了使这些硬件设备正常运作和相互交互,还需要一些物理连接接口。总线为计算机内部组件提供了共同的互连系统。计算机总线包含了两个通道:一个用于CPU寻址的地址总线,另一个是数据传送的数据总线。总线有两个特性:同时处理数据,快速传送数据。
串行连接采用单个线或单个线集,用于从外部设备传输数据到计算机,比如鼠标,键盘,modem(调制解调器),扫描仪,部分打印机设备。这种类型的接口只能一次传输一段数据,因此比较慢。但优点是长距离传输很有效。
并行连接采用多个数据线集来传输数据块。大多数扫描仪和打印机都采用这种连接方式。并行连接笔串行连接快很多,但是却有距离限制。它最多可在3米内进行CPU与外设间传输数据。
操作系统的组成
解释器(Shell)
为了执行计算机用户的操作,操作系统负责与用户的交互相互通信。操作系统用来处理这些通信的部分被称为命令解释器(shell),现代化的Shell都通过图形用户界面的方式来执行任务,该图形界面可以操作很多类型的对象,比如文件和程序都通过图标来呈现了。在程序图标上点击鼠标,就可以发送命令给操作系统执行,而早期一点的Shell还是执行键盘输入的文本命令并通过显示器来提示执行结果。
即使操作系统中的Shell在计算机的功能中很重要,但Shell也仅仅是用户和操作系统间的桥梁。Shell和操作系统内核间的区别是一些操作系统还允许用户选择不同的Shell以实现特殊终端间的兼容性。比如Unix操作系统就可以选择Bourne shell, C shell 和Korn shell。
今天很重要的一个图形化Shell就是微软windows管理器,它能够分配空间和管理每一个windows应用程序。当一个应用程序要在屏幕上显示某物时,程序就通知windows管理器,然后管理器就在该窗体中显示信息了。反之,当用户点击鼠标时,windows管理器负责调度相应的程序来响应具体的操作。
操作系统内核
与Shell相比,操作系统内部部分叫做内核,操作系统内核包含了很多执行基础功能的软件组件。
文件管理器
文件管理器的功能是协调管理计算机物理存储器的使用,准确的说,文件管理器管理物理机上的所有的文件记录,包含了文件定位,文件读取,创建新文件或扩充已有的文件。这些文件记录存储在独立的媒介中,当文件存放在网络上时,文件管理器也能够检索到相应的文件。
为了便于用于操作,很多文件可以放入被称为目录或文件夹的包中,这种方式允许用户根据自己的意图快速组织文件。除此之外,还允许创建子目录,用以层级组织文件。比如用户可以创建名为MyRecords的目录, 然后在该目录里创建名为FinancialRecords、MedialRecords、HouseHold Records的子目录。
目录中的一系列目录叫做目录路径,路径常常用斜杠来表示,比如一个路径形如animals/prehistoric/dinosaurs表示从animal目录开始,依次到子目录dinosaurs才结束(Windows系统用animals|prehistoric\dinosaurs来表示)。
其他的软件单元访问每一个文件需要由文件管理器来决定,当打开一个文件时,程序需要从文件管理器那里获取访问权限,如果文件管理器允许访问的话,则该程序便可操作该文件。存在主内存中的信息叫文件描述符,它是通过引用文件中的信息,可独立的操作该文件。
设备驱动器
内核的另一个组成部分是设备管理器,它是一个软件单元,用于控制附加到计算机中的外部设备,每一个设备驱动器都为相应的设备而独立设计,同时把通用的请求指令翻译成驱动器识别的技术步骤,和所有的信号交换一样,打印机驱动就包含了读取指令并需要解码成特殊的打印机状态字,因此其他的程序不用处理这些技术细节就可以打印文件了。其他的程序仅仅是依赖这些驱动器程序来打印文件,打印机驱动程序来复杂打印的细节。这种设计方式使得每一个软件单元和设备驱动器间相互独立,于是,操作系统可定制的接入很多外部设备,只需要安装合适的驱动程序就够了。
内存管理器
内核还包含了内存管理器,用于管理计算机内存的使用。其中一个最低职责是让计算机一次性只能执行一个任务。在这种情况下,当前将执行的程序进入主内存中,然后被执行,接着被下一个任务替换。然而,在多任务环境中,计算机需要同时处理很多请求,内存管理器的职责便需要宽泛些,在此种情况下,许多程序和数据块同时常驻内存中,因此内存管理器需要查找空闲的内存然后分配给相应的应用程序,此外随着程序活动的启动和退出,内存管理器还需记录并回收不再使用的内存空间。
当需要的总内存超过实际可用的内存时,内存管理器的任务还要更复杂点。此时,内存管理器通过在主内存和磁盘间转换程序和回送数据的方式来创建一种有很多的可用内存空间的假象,技术上称为分页调度。举个例子,应用程序需要1024MB的内存,但是计算机的总内存才512MB,为了创建一个稍大的内存空间假象,内存管理器需要准备1024MB的磁盘空间,如果主内存有1024MB的空间,那么数据就会存储在主内存中。数据将被分为统一大小的称为页的单元,每页只有几KB的大小。在主内存只有512MB的空间中,内存管理器在主存和磁盘间来回处理这些数据页,随时的调用这些数据页来供程序使用。于是计算机就可有1024MB大小的主存来满足很多程序的功能了。利用分页的方式来创建的虚拟内存被称为虚拟存储器。
任务调度与分发程序
现代操作系统的一个很基本的概念是程序和程序活动的区别了,前者是一个静态的指令集,而后者是随时间变化的动态活动。这种活动被称为进程,在一个典型的分时计算机中,许多进程都在竞争使用计算机的资源。进程中执行的任务由操作系统内核中的任务调度程序来处理与控制。
任务调度程序维持着一份计算机中当前的进程池记录,把新来的进程放进进程池,把执行完成的进程移除该进程池。当用户执行一个应用程序时,调度程序就把该应用程序的进程放进去而等待执行。为了记录所有的进程,调度程序还在内存中维护着一个进程表,每次执行一个新进程时,调度器在该进程表中创建一个新的实例,此进程实例包含了该进程运行的内存信息,优先级以及是否是准备就绪还是等待中。如果进程A接下来可以被执行那么它就是准备就绪的状态,如果是由于其他外部事件造成的延迟执行,那么它就是处于等待中的状态,类似的外部事件如完成磁盘访问,按下了键盘上的某个键或者从另一个进程那里获取消息。
任务分发程序内核用于确认执行进程的程序。在分时系统中,由分时共享程序来完成该任务,也就是说,把执行时间分成多个很短的时间片,然后在进程间切换CPU的执行目标。从一个进程改变到另一个进程称为上下文切换,当分发程序赋予时间片给某进程时,就启动了一个计时器程序,直到执行时间结束时就产生一个中断信号,当CPU接收到中断信号后,它就完成当前的执行周期并保存当前进程执行现场,然后执行一个中断处理程序,用于在内存中存储预定的位置。中断处理程序是分发程序的一部分,用以描述分发器怎么样响应中断信息,因此中断信号可以抢占进程控制权,此时分发器运行让调度程序来更新进程表,然后分发器从进程表中选取优先级最高的进程进入可执行队列,然后重新启动计时器程序,并让CPU开始执行该进程。
系统组织
简介
系统组织体现了构造一个系统的基本策略,在系统的体系结构设计过程中就决定了系统的组织模型。系统的组织结构情况直接反应后期的子系统结构,然而子系统模型还包含了很多细节设计,从子系统到组织结构并非总是一种简单的映射。
本文讨论三种常用的系统组织方式,有共享数据的中心库式,共享服务的服务器式还有子系统以层级形式呈现的分层式,这些方式可以独立或组合使用,比如一个系统可以用中心库来共享数据并同时用层级式来显示抽象的数据视图。
库模型
系统中的子系统间必须可以相互交换信息,他们才可以协同有效的工作,有两种方式可以完成这种设计。
1. 所有的共享数据都存储在子系统可以访问的中心数据库,基于共享数据库的系统模型有时被称为库模型。
2. 每个子系统都有自己的数据库,数据通过子系统间的消息传递来实现数据互换。
大多数系统都把数据组织到共享数据库或数据中心库里,这种模型适用于数据由子系统生成并由其他子系统使用的应用程序,这类的系统样例包括了命令与控制系统,信息管理学,计算机辅助设计系统(CAD),计算机辅助软件工程(CASE)系统。
第一个CASE系统可能最早出现在20世纪70年代早期,由一家名为ICL(国际计算机有限公司)的公司开发的,该系统主要用于支持他们操作系统的开发。该系统流行的原因源于英国计算机科学家巴克斯顿提出让该系统支持用Ada语言来开发其他系统。至此后,许多基于共享库的CASE系统都出现了。
基于共享库这种模式的优点和缺点如下:
1. 共享大量的数据非常有效,在子系统间不需精确的传输数据。
2. 子系统必须遵循这种模型,诚然,这是每个工具在特殊需求间的折衷。在这种让步下,性能可能会有所影响,如果新的子系统不满足这种模式的话,集成起来就很困难或者几乎不可能集成。
3. 一个子系统产生的数据不用关心其他子系统怎样使用。
4. 根据这种数据模型的约定,当生成了大量的信息后,系统的演化变得很困难,转换成一个新模型无意将花费很大的代价,而且很困难甚至不可能。
5. 系统遭遇异常后进行的常规处理如备份、安全处理、访问控制和系统恢复等都是集中处理的。系统中心的主要责任是管理中心库的日常活动,而子系统主要关注系统的功能而不是处理这些问题。
6. 不同的子系统可能有不同的安全要求、系统的恢复和备份策略,但是这种模型强制的在子系统间统一相同的策略。
7. 共享的模型通过库模式都是可见的,很容易集成兼容这种模型的其他子系统。
8. 很难移植到其他平台上,即使逻辑上可以移植中心存储库,但是在数据冗余和不一致上也会造成很多问题。
以上说明这种库模型是很被动的,它的主要职责是用于控制子系统。对于AI(人工智能)系统,有一种衍生的系统叫黑板法模型,当一些特殊的数据可用时,就触发子系统来及时处理。当存储库中的数据不好组织时,这是一种很合适的方式,采用分析数据的方式,可选的来启动子系统。
客户机/服务器模型
客户机/服务器这种结构模型提供了一系列服务以及很多服务器和客户机,客户机可以访问并使用服务器提供的服务,这种模型主要部分有:
1. 一系列提供给其他子系统的服务器。比如打印服务器提供打印服务,文件服务器提供文件管理,编译服务器提供编程语言的编译服务。
2. 一系列能够访问服务器的客户机。这些(客户机)通常本身就是子系统,他们可以是当前执行的客户机中的很多个程序实例。
3. 运行客户机访问服务器的网络。当服务器和客户端都运行在单机上这个不是必须的因素。事实上,大多数客户机/服务器都是以分布式系统来实现的。
客户机首先要知道服务器的名称以及相关的服务才能够访问,而服务器就不需要知道客户机的身份以及数量,客户机通过基于请求响应式协议的远程过程调用来访问服务器,就像在WWW(万维网)中的http协议(超文本传送)。实际上,一台客户机发起一个请求后,需要一直等待,知道收到来自服务器的握手信息才开始执行下一步。
客户机/服务器模型的最重要的优点是一种分布式架构系统,可以有效的应用在基于分布式处理器的联网系统中,而且很容易新增一台服务器并集成到该系统中或者很方便的升级服务器,还不用影响到系统中其他的部分。
还可以改变现有的服务器和客户机来集成一个新的服务器,在服务器和其他子系统间可能有其他方式来组织数据但是没有共享数据模型这种方式,这意味着可以在每台服务器上建立特殊的数据模型来优化执行的性能。当然,如果采用了基于XML(可扩展标记语言)的方式来表示数据,那么从一种模式转换到另一种模式则相对简单点,然而用XML来表示数据效率要很差,因此如果使用了这种方式会造成一定的性能问题。
层级模型
层级模型(有时候被称为抽象机器模型)把系统组织成很多层,每一层都能单独提供一系列服务。层级模型中每一层都可看成是由当前提供的服务所定义的机器语言而实现的一个抽象机器,而该层“语言”也用于实现下一层机器的抽象。比如说,一个很常用的方式是实现一种语言并用来定义一种理想的语言机器,并为该机器编译可执行的代码,然后进一步的把代码转换成机器码。
一个基于层级的模型的例子就是网络协议中的OSI(开放系统互连)参考模型,另一个影响深远的就是由Buxton提议的用于支持Ada编程的三层模型APSE系统。
层级的方式支持系统的递增式开发,一层开发完成后,该层提供的服务就可以为用户所用了,这种架构也是易变和便捷的,只要其接口不变,就可以用其他层替换某一层,此外,当某一层的接口变化了或者新增了新功能到该层,只有相邻的层才会受影响。由于层级式系统把机器间的依赖都局部化在内部层级间,所以很容易提供多平台的应用实现,只有内部依赖机器的那一层才会更换不同的操作系统和数据库来重新实现。
而层级式的缺点是构建每一层要困难点。内部层需要提供很基础的功能,比如所有层可用的文件管理。用户有时除了需要最上层的服务外,还会使用该邻近该层的下层的服务,当外层不依赖它的邻近的上一层时,这种模型的结构就会遭到破坏。
由于多层间的命令需要解释,也会造成性能问题,如果层次很多的话,从最上层发起的请求到不同的层次间需要被解释很多次才会被处理,为了避免这种问题,很多应用程序都是直接在内部层间实现通信而不是使用相邻层提供的服务。