1.3 操作系统的硬件环境
操作系统与运行操作系统的计算机硬件联系紧密,操作系统扩展了计算机的指令集并管理计算机资源。因此,为了能够运行工作,操作系统必须了解所使用的硬件。本节将主要介绍操作系统实现其管理功能时要用到的中央处理器(CPU)、内存储器(简称内存)和外部设备(简称外设)三大部件。
1.3.1 处理器
在这里处理器主要指中央处理器(CPU),它是计算机的“大脑”,负责从内存中取出指令并执行之。处理器都具有自己的指令系统,即一套可执行的专门指令集。用正确指令编写成的程序或者被正确转换成指令形式的程序,能够被处理器接受并处理。无论是操作系统控制下的程序,还是操作系统程序,最终都是通过在处理器上的执行来实现其功能的。
1.处理器和指令
一般的处理器由运算器、控制器、一组寄存器和高速缓存构成。运算器实现指令中的算术和逻辑运算,控制器负责控制程序运行的流程,寄存器用于在处理指令的过程中暂存数据、地址和指令信息,高速缓存被用来在执行指令过程中减少存储器访问时间。
在最简单的情况下,处理指令的过程包括两个步骤:处理器从存储器读取一条指令,然后执行这条指令。执行指令又可细分为取操作数、执行操作和存储结果。取指令和执行指令这两个步骤构成一个指令周期,一系列指令周期组成程序的执行(如图1-5所示)。
图1-5 基本的指令周期
指令大致可以分成五类:访问存储器指令,用于处理器和存储器之间的数据传送;I/O指令,用于处理器和 I/O 模块之间的数据传送和命令发送;算术逻辑指令(有时又称为数据处理指令),用于对有关数据的算术和逻辑操作;控制转移指令,用来指定一个新的指令执行起点;处理器控制指令,用于修改处理器状态,改变处理器工作方式。
在应用多道程序设计的操作系统中,指令必须区分成特权指令和非特权指令两个部分。特权指令是只能由操作系统使用的指令,用户程序只能使用非特权指令。虽然不同体系结构计算机规定的特权指令不相同,但一般这些特权指令都只涉及到与硬件有关的操作,如启动设备、设置时钟、控制中断屏蔽、清内存和建立存储保护等。假如允许用户随便使用这些指令,就有可能使整个系统陷入混乱。
2.单处理器系统和多处理器系统
处理器的任务是按照程序计数器的指向从主存读取指令,对指令进行译码,取出操作数,然后执行指令。如果计算机系统只包含一个处理器,则称为单处理器系统;如果计算机系统包含多个处理器,则称为多处理器系统。
早期的计算机是基于单处理器的顺序处理机器指令,程序员编写串行代码,让指令在处理器上执行。为了提高计算机的处理速度,采用流水线技术,把指令分解成简单的、可独立执行的操作步骤,并将多条指令或多个操作步骤按照流水线方式部分重叠执行,依次加快指令的执行速度。后来,流水线技术发展到更高阶段形成发射体系结构,其基本思路是:在一个机器周期内可以发射多条指令,同时取指令、译码并转储到保持缓冲区中,多个执行部件同时执行,只要存在空闲的执行部件,就会从非空保持缓冲区中读取并执行之,以提高指令执行的并行性。
随着硬件技术的不断进步,并行处理技术得到迅猛发展,多个处理器可以同时工作以提高计算机系统的性能和可靠性。现具有多处理器的并行计算机系统主要分为两大类:共享存储多处理器系统和分布存储多处理器系统。
共享存储多处理器系统根据处理器分配策略,又可分为主从式系统和对称式系统。主从式系统的基本思路是:在特定处理器上运行操作系统内核,在其他处理器上运行应用程序,内核负责调度和分配处理器,并向其他程序提供各种服务。这种方式实现起来简单易行,但如果主处理器发生问题则将导致系统崩溃,且极有可能形成性能瓶颈。对称式系统中,操作系统内核可运行在任意处理器上,操作系统内核被设计成多进程或多线程以实现并行执行,系统中的任何处理器都可以访问任何存储单元及设备。很多计算机制造商(如IBM、HP、SUN)都设计和生产对称式系统计算机,用于联机分析处理、数据仓库等应用。
分布存储多处理器系统中,每个处理器都有独立的主存和通道,各个处理单元之间通过预设的线路或网络进行通信,构成互联的计算机系统。分布存储多处理器系统的典型例子就是集群系统,是迄今为止所开发出来的最为成功的并行计算机系统。集群操作系统是分布式操作系统,运行时构成统一的计算资源。
3.处理器状态
1)核心态和用户态
处理器是如何得知当前其上运行的是操作系统,还是应用程序的呢?这主要取决于处理器状态标志,在执行不同的程序时,根据执行程序对资源和机器指令的使用权限将处理器设置成不同的标志。因此,处理器状态(又称为处理器模式)分为核心态和用户态。
当处理器处于核心态时,CPU运行可信软件,硬件允许执行全部机器指令,可以访问所有主存单元和系统资源,并具有改变处理器状态的能力;当处理器处于用户态时,CPU运行非可信软件,程序就无法执行特权指令,只能访问当前CPU上进程的地址空间,这样就能防止操作系统内核受到应用程序的侵害。处理器状态标志扩展了操作系统的保护权限,意味着在核心态执行的程序比用户态的拥有更多的权限,即访问主存和执行特权指令,那么状态标志位可被用来区分可信软件和非可信软件。
2)处理器状态转换
处理器的两种状态之间可以相互转换。处理器从用户态向核心态转换,往往是由两种情况导致的:一是程序请求操作系统服务,执行系统调用;二是在程序运行时,产生中断或异常事件,运行程序被中断,转向中断处理程序或异常处理程序工作。一般情况下,没有从用户态转向核心态的指令,否则任何进程都可以进入特权核心态,系统的保护机制将失效。系统实现核心态转向用户态的方法,通常是由计算机提供一条称作加载程序状态字的特权指令,用来实现从系统核心态到用户态,将控制权转交给应用程序。
1.3.2 存储器
目前,计算机系统均采用层次结构的存储子系统,以便在容量大小、速度快慢、价格高低等诸多因素中取得平衡点,获得较好的性能价格比。计算机系统的存储器层次结构,按照存储介质的访问速度从下而上由慢到快,如图1-6所示分为磁带、磁盘、主存储器、高速缓存和寄存器。其中,寄存器、高速缓存和主存储器均属于操作系统存储管理范畴,断电后其上存储的信息不复存在;磁盘、磁带属于操作系统设备管理对象,所存信息可长久保存。
图1-6 计算机系统的存储器层次结构
可执行程序必须被保存在主存储器中,与设备相交换的信息也依托于主存地址空间。由于处理器在执行指令时主存访问时间远大于其处理时间,因此寄存器和高速缓存的引入可更好地解决 CPU 指令执行与主存访问之间的瓶颈问题。
寄存器是访问速度最快、价格最昂贵的存储器,其容量较小,一般以字(Word)为单位,一个计算机系统可能包括几十个寄存器,用于加速存储访问速度。高速缓存的容量较寄存器稍大,其访问速度快于主存。利用高速缓存来存放主存中经常访问的一些信息,以提高程序执行速度。
由于程序在执行和处理数据时往往存在顺序性和局部性,执行时并不需要将其全部调入主存,仅调入当前使用的一部分,其他部分待需要时再逐步调入。这样,计算机系统为了容纳更多的作业,或为了处理更大批量的数据,可在磁盘上建立磁盘高速缓存,以扩充主存储器的存储空间。那么,计算机程序和所处理的数据可装入磁盘高速缓存,操作系统自动实现主存储器与磁盘高速缓存之间程序和数据的调进调出,从而向用户提供比实际主存容量大得多的存储容量。
1.3.3 外部设备
计算机系统中除了CPU和主存储器之外,其他大部分硬件设备均称为外部设备(简称外设),主要是指输入/输出(I/O)设备。I/O 设备一般包括两部分:设备控制器和设备本身。控制器是插在计算机主电路板上的一块芯片或一组芯片,芯片电路板物理地控制设备工作,负责从操作系统接受命令,如从设备读数据。
在许多情形下,对这些外部设备的控制是非常复杂和具体的,因此设备控制器的任务是为操作系统提供一个简单接口。通过对接口的标准化,操作系统就可以通过这些隐藏在设备控制器中的接口,管理具有复杂物理电气特征的外部设备。例如:在计算磁盘操作中,当磁盘控制器接受一个读数据的命令从磁盘的某个位置开始,那么控制器将把该逻辑参数转化为物理磁盘的磁头、柱面和扇区等物理信号。磁盘控制器必须确定磁头臂应该位于哪个柱面,并对磁头臂发出一串脉冲信号,使其前后移动到所要求的柱面号上,接着等待对应的扇区转动到磁头下面并开始读数据,随着数据从驱动器读出并计算校验和。最后,把读入的二进制数据位组成字并存放到主存储器中。由于磁盘的外柱面比内柱面有较多的扇区,有时磁盘设备会有一些坏扇区,并将这些坏扇区映射到磁盘的其他地方,所以这种转化是比较复杂的。
每类设备的控制器都是不同的,如显示器控制器(简称显卡)、网络设备控制器(简称网卡),需要不同的软件进行控制。这些专门与控制器交互信息,发出命令并接收响应的软件,称为设备驱动程序。每个设备控制器生产厂家,要为其所支持的操作系统提供相应的设备驱动程序。例如:某个品牌的扫描仪设备在出售时,随机配备有支持 Windows XP、Vista及Linux的设备驱动程序。为了能够使用设备驱动程序,必须把设备驱动程序转入到操作系统中。将设备驱动程序转入操作系统,可有三种方式实现:一是将操作系统内核与设备驱动程序重新链接,然后重新启动操作系统使其生效,许多UNIX系统以这种方式工作。二是在操作系统中设置一个文件入口,并通知给文件需要一个设备驱动程序,然后重新启动操作系统。在系统启动时,操作系统将找寻所需的设备驱动程序并装载之,Windows操作系统是以这种方式工作的。三是操作系统能够在运行时接受新的设备驱动程序并且立即将其安装好,无须重新启动系统。这种方式目前较少,但是越来越多地被系统所采用。例如,热插拔设备USB等都可以实现动态装载设备驱动程序。