操作系统概念–导论(上)

Aki 发布于 2023-02-20 254 次阅读


概述、

操作系统( operating system)是管理计算机硬件的程序。它还为应用程序提供基础,并且充当计算机用户和计算机硬件的中介。操作系统令人惊奇的特点是,完成这些任务的方多种多样。大型机的操作系统主要用于优化硬件使用率。个人计算机( Personal ComputerPC)的操作系统支持复杂游戏、商业应用和这两者之间的其他应用。移动计算机的操作系统为用户提供一个环境,以便与计算机进行交互及执行程序。因此,有的操作系统设计关注便捷,有的关注高效,而还有的则要兼顾两者。

操作系统的功能、

计算机系统可以大概分为四个组件:硬件,终于处理器,主存,IO设备。

硬件( hardware),如中央处理单元 (Central Processing Unit,CPU)、内存( memory输入/输出设备(Input/Output device,I/O device),为系统提供基本的计算资源。应用程序( application program),如字处理程序、电子制表软件、编译器、网络浏览器,规定了用户为解决计算问题而使用这些资源的方式。操作系统控制硬件,并协调各个用户应用程序的硬件使用。

用户视角、

计算机的用户视角因使用界面不同而不同。大多数计算机用户坐在PC前,PC有显示器、键盘、鼠标和主机。这类系统让单个用户单独使用资源,其目的是优化用户进行的工作(或游戏)。对于这种情况,操作系统设计的主要目的是用户使用方便( ease of use),次要的是性能,不在乎的是资源利用(resource utilization)(如何共享硬件和软件资源)。当然,性能对用户来说也重要,不过这种系统优化的重点是单个用户的体验而不是多个用户的需求。

系统视角、

从计算机的角度来看,操作系统是与硬件紧密相连的程序。因此,可将操作系统看作资源分配器(resource allocator)。为了解决问题,计算机系统可能具有许多资源:CPU时间、内存空间、文件存储空间、I/O设备等。操作系统管理这些资源。面对许多甚至冲突的资源请求,操作系统应考虑如何为各个程序和用户分配资源,以便计算机系统能有效且公平地运行。正如前面所说,对于多个用户访问主机或微型计算机,资源分配是特别重要的。

操作系统的另一个稍有不同的视角是,强调控制各种I/O设备和用户程序的需求。操作系统是个控制程序。控制程序(control program)管理用户程序的执行,以防止计算机资源的错误或不当使用。它特别注重IO设备的运行和控制。

操作系统的定义、

没有一个广泛接受的究竟什么属于操作系统的定义。一种简单观点是,操作系统包括当你预订一个“操作系统”时销售商发送的所有一切。当然,包括的功能随系统不同而不同。有的系统只有不到1MB的空间且没有全屏编辑器,而有的系统需要数GB( Gigabyte)空间而且完全采用图形窗口系统。一个比较公认的定义是(也是本书所采用的),操作系统是一直运行在计算机上的程序(通常称为内核(kernel))。(除了内核外,还有其他两类程序:系统程序(system program)和应用程序。前者是与系统运行有关的程序,但不是内核的一部分;后者是与系统运行无关的所有其他程序。)

然而,现在我们看看移动设备的操作系统,就会发现这些操作系统的特征不但量多而且强大。移动操作系统通常不只有内核也有中间件( middleware)(为应用程序开发人员提供其他功能的软件框架)。例如,最常见的两个移动操作系统,Apple的 iOS和Google的Android,除了内核外,都有中间件以便支持数据、多媒体和图形等。

计算机系统的运行、

现代通用计算机系统包括一个或多个CPU和若干设备控制器,通过公用总线相连而成该总线提供了共享内存的访问。每个设备控制器负责一类特定的设备(如磁盘驱器、音频设备或视频显示器)。CPU与设备控制器可以并发执行,并且竞争访问内存。为确保有序访问共享内存,需要内存控制器来协调访问内存。

当计算机电源打开或重启以便开始运行时,它需要运行一个初始程序。该初始程序或引导程序( bootstrap program)通常很简单,一般位于计算机的固件( firmware),如只读内存(Read-Only Memory,ROM)或电可擦可编程只读内存(Electrically Erasable ProgrammableRead-Only Memory,EEPROM)。它初始化系统的各个组件,从CPU寄存器、设备控制器到内存内容。引导程序必须知道如何加载操作系统并且开始执行系统。为了完成这一目标,引导程序必须定位操作系统内核并且加载到内存。

一旦内核加载到内存并执行,它就开始为系统与用户提供服务。除了内核外,系统程序也提供一些服务,它们在启动时加到内存而成为系统进程( system process)或系统后台程序( system daemon),其生命周期与内核一样。对于UNIX,首个系统进程为“init”,它启动许多其他系统的后台程序。一旦这个阶段完成,系统就完全启动了,并且等待事件发生。

事件发生通常通过硬件或软件的中断(interrupt)来通知。硬件可以随时通过系统总线发送信号到CPU,以触发中断。软件也可通过执行特别操作即系统调用(system call)(也称为监督程序调用(monitor call)),以触发中断。

中断是计算机体系结构的重要部分。虽然每个计算机设计都有自己的中断机制,但是有些功能是共同的。中断应将控制转移到合适的中断服务程序。处理这一转移的直接方法是,调用一个通用程序以检查中断信息。接着,该程序会调用特定的中断处理程序。不过,中断处理应当快捷。由于只有少量预先定义的中断,所以可以通过中断处理程序的指针表来提高速度。这样通过指针表可以间接调用中断处理程序,而无需通过其他中介程序。通常,指针表位于低地址内存(前100左右的位置)。这些位置包含各种设备的中断处理程序的地址。这种地址的数组或中断向量(interrupt vector),对于任一给定的中断请求,可通过唯一的设备号来索引,进而提供设备的中断处理程序的地址。许多不同的操作系统,如Windows或UNIX,都采用这种方式来处理中断。

中断体系结构也应保存中断指令的地址。许多以前的设计只是简单地将中断地址保存在某个固定位置或可用设备号来索引的位置。而现代体系结构将返回地址保存在系统堆栈上。如果中断程序需要修改处理器状态,如修改寄存器的值,则应明确保存当前状态,并在返回之前恢复该状态。在处理完中断之后,保存的返回地址会加载到程序计数器,被中断的计算可以重新开始,就好像中断没有发生过一样。

计算机存储结构、

CPU只能从内存中加载指令,因此执行程序必须位于内存。通用计算机运行的大多数程序通常位于可读写内存,称为内存(main memory),也称为随机访问内存(RandomAccess Memory,RAM)。内存通常为动态随机访问内存(Dynamic Random Access Memory,DRAM),它采用半导体技术来实现。CPU的一二三级缓存是SDRAM,速度更快!!!

计算机也使用其他形式的内存,如我们已经提到的只读内存(ROM)和电可擦可编程只读内存(EEPROM)。一般存在于只读内存内的程序我们称为固件!!由于ROM一般情况下不可修改,因此只能将静态程序(如引导程序)存在其中ROM的不可变性对游戏盒来说还是有用的。EEPROM可以修改,但是不能经常修改,因此可以保存大多数的静态程序,例如,智能手机采用EEPROM来存储工厂安装的程序。

所有形式的内存都提供字节数组,每个字节都有地址。交互通过针对特定内存地址,执行一系列load或store指令来实现。指令load将内存字节或字保存到CPU寄存器,而指令store将寄存器内容保存到内存。除了明确使用load和store外,CPU还会自动加载内存指令以便执行。

在冯·诺依曼体系结构(von Neumann architecture)上执行时,一个典型的指令执行周期是,首先从内存中获取指令,并存到指令寄存器(instruction register)。接着,该指令被解码,也可能会从内存中获取操作数据并且存到内部寄存器。在指令完成对操作数据的执行后,结果也可存到内存。注意:内存单元只能看到内存地址的流,而并不知道它们如何产生(通过指令计数器、索引、间接、常量地址或其他方式)或它们是什么样(指令或数据)的地址。相应地,我们可以忽略程序如何产生内存地址,而只关注由程序运行所生成的地址序列。

在理想情况下,程序和数据都应永久驻留在内存中。由于以下两个原因,这是不可能的:

  • ·内存通常太少,不能永久保存所有需要的程序和数据。
  • ·内存是易失性的(volatile)存储设备,掉电时就会失去所有内容。

因此,大多数的计算机系统都提供外存( secondary storage)来扩充内存。外存的主要需求是,能够永久存储大量数据。

最为常用的外存设备为磁盘或硬盘(magnetic disk)和固态硬盘(SSD),它能存储程序和数据。大多数程序(系统与应用)都保存在磁盘上,当要执行时才加载到内存。许多程序都使用磁盘作为它们处理的起点和终点。因此,磁盘存储的管理是否适当,对计算机系统来说十分重要。

从更广意义上来说,以上所述的存储结构(由寄存器、内存和磁盘组成的),仅仅只是多种存储系统的一种。除此之外,还有高速缓存、CD-ROM、磁带等。每个存储系统都可存储与保存数据,以便以后提取。各种存储系统的主要差异是速度、价格、大小和易失性。

IO结构、

存储器只是众多计算机I/O设备中的一种。操作系统的大部分代码专门用于I/O管理这是由于它对系统的可靠性和性能至关重要,也是由于不同设备具有不同特性。因此,我首先概述一下I/O。

每个通用计算机系统由一个CPU和多个设备控制器组成,它们通过共同总线连在一起。每个设备控制器管理某一特定类型的设备。根据设备控制器的特性,可以允许多个设备与其相连。每个设备控制器维护一定量的本地缓冲存储和一组特定用途的寄存器设备控制器负责在所控制的外围设备与本地缓冲存储之间进行数据传递。通常,操作系统为每个设备控制器提供一个设备驱动程序( device driver)。该设备驱动程序负责设备控制器并且为操作系统的其他部分提供统一的设备访问接口。

设备驱动程序是一类软件程序,它们用于控制计算机系统中的硬件设备,使操作系统和应用程序能够与硬件设备进行通信和交互。设备驱动程序是一种软件程序,它负责与设备控制器进行通信,并为操作系统和应用程序提供统一的设备访问接口。驱动程序提供了对硬件设备的抽象接口,使得应用程序不必关心硬件的具体实现细节,只需要通过这些接口来访问硬件设备即可。

在传统的I/O方式中,CPU需要参与数据传输的过程,因为数据传输的过程需要使用CPU的指令来完成,包括从外设读取数据、写入数据到内存或者从内存读取数据、写入数据到外设。这种方式被称为“程序控制的I/O”。

在程序控制的I/O方式中,每个数据传输操作都需要CPU介入,使用CPU指令来实现数据传输。由于CPU的速度相对较快,而I/O设备的速度相对较慢,因此CPU介入的频率会成为系统性能的瓶颈,限制数据传输的速度。

而DMA技术的出现,可以避免CPU在数据传输过程中的繁琐操作,减轻CPU的负担,提高系统的整体性能。DMA控制器负责协调外设和内存之间的数据传输,而CPU则可以继续处理其他任务,而不必等待数据传输完成。这样可以避免CPU在数据传输过程中的繁琐操作,减轻CPU的负担,提高系统的整体性能。

DMA (Direct Memory Access,直接内存访问) 是一种计算机数据传输技术,用于在计算机系统中高速地传输数据。DMA技术允许外部设备 (如网卡、硬盘等) 直接访问系统内存,而不需要CPU的干预。这种方式可以显著提高数据传输的速度和效率,减轻CPU的负担,从而提高系统的整体性能。

需要注意的是,在使用DMA技术时需要特别小心,因为DMA控制器直接访问内存,如果外设或者DMA控制器出现问题,可能会导致内存数据损坏或者系统崩溃。因此,在使用DMA技术时需要严格遵守相关规范和安全措施,确保系统的稳定性和安全性。