操作系统的目标和功能
操作系统的目标
- 方便:操作系统使计算机更易于使用
- 有效:操作系统允许以更有效的方式使用计算机系统资源
- 拓展能力:在构造操作系统时,应允许在不妨碍服务的前提下,有效地开发、测试和引入新的系统功能
作为用户/计算机接口的操作系统
操作系统为程序员屏蔽了硬件细节,并为程序员提供了方便的接口。
提供的服务
- 程序开发:为帮助程序员开发程序,操作系统提供各种各样的工具和服务;这些服务以实用工具程序的形式出现,严格来说并不属于操作系统程序核心的一部分,他们由操作系统提供,称为应用程序开发工具。
- 程序运行:运行一个程序需要很多步骤,如:把指令和数据加载到内存、初始化I/O设备和文件、准备一些其他资源。操作系统为用户处理这些调度问题。
- I/O设备访问:每个I/O设备的操作都需要自身特有的指令集和控制信号,操作系统隐藏这些细节,并提供统一的接口,因此程序员可以使用简单的读/写操作来访问这些设备。
- 文件访问控制:对操作系统而言,关于文件的控制必须详细了解I/O设备的特性,详细了解存储介质中文件数据的结构;对有多个用户的系统,还需提供保护机制控制对文件的访问。
- 错误检测和响应:对每种错误情况,操作系统必须提供响应以清除错误条件,使其对正在运行的应用程序影响最小。响应可以是中止错误的程序、重试操作或简单地给应用程序报告错误。
- 记账:收集对各种资源利用率的统计数据。
重要接口
- 指令系统体系结构(ISA):定义了计算机遵循的机器语言指令系统。该接口是硬件与软件的分界线。
- 应用程序二进制接口(ABI):定义了程序间二进制可移植性的标准。定义了操作系统的系统调用接口,在系统中通过ISA能使用的硬件资源和服务。
- 应用程序编程接口(API):允许应用程序访问系统的硬件资源和服务,这些服务由用户级ISA和高级语言库(HLL)调用来提供。使用API能让应用软件更容易重新编译并移植到具有相同API的其他操作系统中。
作为资源管理器的操作系统
操作系统控制计算机资源的使用
操作系统由处理器执行的指令组成,决定如何分配处理器时间,可以使用哪些计算机资源
操作系统控制机制的不同
- 操作系统与普通计算机软件的作用相同,即它是由处理器执行的一段程序或一组程序。
- 操作系统经常会释放控制,而且必须依赖处理器才能恢复控制。
操作系统的易拓展性
操作系统应能不断发展
- 硬件升级和新型硬件出现
- 新的服务
- 纠正错误
在构造操作系统时应采用模块化结构,清楚地定义模块化接口,并备好说明文档。
操作系统的演化
串行处理
反映了用户必须顺序访问计算机的事实
主要问题
- 调度:大多数装置都采用硬拷贝登记表来预定机器时间。提前完成工作将导致浪费;超时将强制停止。
- 准备时间:称为作业的单个程序,可能会
- 向内存中加载编译器和高级语言程序
- 保存好编译程序
- 加载目标程序和公用函数并进行连接
每个步骤都需要安装或拆卸磁带,或准备卡片组;出现错误只能重新开始:需要花费大量的准备时间
简单批处理系统
中心思想:使用一个称为监控程序的软件,每个程序完成处理后返回到监控程序,同时监控程序自动加载下一个程序
工作过程
- 监控程序角度:控制事件的顺序。
- 大部分监控程序必须总是处于内存中并且可以执行,称为常驻监控程序;其他部分(实用程序和公用函数)作为用户程序的子程序,在需要用到他们的作业开始执行时才被载入。
- 监控程序每次从输入设备中读取一个作业,读入后作业被放置到用户程序区域,并将控制权交给该作业。
- 作业完成后,将控制器返回给监控程序,监控程序立即读入下一个作业;作业结果发送到输出设备。
- 处理器角度
- 处理器执行内存中存储的监控程序中的指令,这些指令读入下一个作业并存储到内存的另一个部分。
- 读入一个作业后,监控程序的分支指令指导处理器在用户程序的开始处继续执行。
- 执行用户程序直到一个结束指令或错误条件,处理器从监控程序中取出下一条指令。
其他硬件功能
监控程序或批处理操作系统只是一个简单的计算机程序:依赖于处理器可从内存的不同部分取指令的能力,交替地获取或释放控制权。
- 内存保护:当用户程序正在执行时,不能改变包含监控程序的内存区域。这样做将导致:
- 处理器硬件发现错误
- 控制器交给监控程序
- 监控程序取消该作业,输出错误信息
- 加载下一个作业
- 定时器:用以防止一个作业独占系统。
- 作业开始,设置定时器
- 超时,停止用户程序,控制器交给监控程序
- 特权指令:某些机器指令被设置为特权指令,只能由监控程序执行。
- 用户程序中遇到这类指令,将发生错误,控制器交给监控程序
- I/O指令属于特权指令
- 监控程序可以控制所有I/O指令
- 避免用户程序意外读取下一个作业的控制指令
- 用户程序希望执行I/O程序时,需请求监控程序执行操作
- 中断:使得操作系统让用户程序放弃控制权或从用户程序获得控制权时,具有更大的灵活性。
运行模式
内存保护和特权指令引出了运行模式的概念
- 用户模式:用户程序的执行,部分内存区域受保护,特权指令不被允许执行
- 内核模式(系统模式):监控程序的执行
缺点
- 内存交付给监控程序
- 监控程序消耗了一部分机器时间
多道批处理系统
简单批处理系统因I/O设备相对于处理器速度太慢,导致处理器仍然经常存在与空闲状态
多道程序设计(多任务处理)
当一个作业需要等待I/O时,处理器可以切换到另一个在内存中不等待I/O的作业。
是现代操作系统的主要方案。
相关硬件
多道程序批处理系统必须依赖于某些计算机硬件。
支持I/O中断和直接内存访问(DMA)的硬件
- 通过中断驱动的I/O或DMA,处理器可为一个作业发出I/O命令,设备控制器执行I/O命令时,处理器执行另一个作业
- I/O操作完成后,处理器被中断,控制权传递给操作系统的中断处理程序,中断处理程序结束后,操作系统把控制器交给另一个作业。
分时系统
提供一种用户与计算机直接交互的模式
多个用户可以通过终端同时访问操作系统,由操作系统控制每个用户程序在很短时间内交替执行。
兼容分时系统(CTSS)
- 时间片技术:在固定时间间隔内,当前用户被抢占,另一个用户载入;保留老用户程序状态,在新用户程序和数据读入前,老用户程序和数据被写出到磁盘;老用户的程序和数据在下一次获得机会时回复到内存。
- 为减小磁盘开销,只有当新来的程序需要重写用户存储空间时,用户存储空间才被写出。
主要成就
进程
进程的概念是操作系统设计的核心。
定义
- 一个正在执行的程序
- 计算机中正在运行的一个程序的实例
- 可分配给处理器,并由处理器执行的一个实体
- 由一个单一顺序线程、一个当前状态和一组相关系统资源所表征的活动单元
计算机系统发展
- 多道批处理系统:为了让处理器和I/O设备同时保持忙的状态,以实现最大效率
- 分时:及时响应单个用户的要求,同时又支持多个用户
- 实时事务处理系统:关注系统的响应时间
进程试图解决的错误
- 不正确的同步:一个例程挂起等待系统中其他地方的某一事件,可能导致相应信号丢失或重复接收。
- 失败的互斥:多个用户或程序试图同时使用一个共享资源。
- 不确定的程序操作:程序共享内存并且控制器控制它们交替执行时,可能因为重写相同的内存区域而发生不可预测的相互干扰。
- 死锁:很可能有两个或多个程序相互挂起等待。
进程的组成
- 一段可执行的程序
- 程序所需要的相关数据
- 程序的执行上下文
执行上下文(进程状态)
操作系统用来管理和控制进程所需的内部数据。该信息与进程分开。
线程
一个分配了资源的进程可分解为多个并发的线程,这些线程相互协作执行,完成进程的工作。
内存管理
存储器管理职责
- 进程隔离:操作系统必须保护独立的进程,防止相互干扰各自的存储空间,包括数据和指令。
- 自动分配和管理:程序应根据需要在存储层次间动态地分配,分配对程序员是透明的。
- 保护和访问控制:不论在存储层次中的哪一级,存储器的共享都会产生一个程序访问另一个程序内存空间的潜在可能性。
- 某个特定应用程序需要共享时,这是可取的
- 其他时候可能会威胁到程序的完整性
- 操作系统必须允许一部分内存可以由各种用户以各种方式进行访问
- 长期存储:许多应用程序需要在计算机关机后长时间地保存信息。
实现方法
操作系统使用虚存和文件系统机制来满足这些要求
- 文件系统实现了长期存储,它在一个有名称的对象中保存信息,称为文件。
- 虚存机制允许程序以逻辑方式访问存储器,而不考虑物理内存上可用的空间数量,满足有多个用户作业同时驻留在内存中的要求。
信息保护和安全
- 可用性:保护系统不被中断
- 保密性:保证用户不能读取未授权访问的数据
- 数据完整性:保护数据不被未授权修改
- 认证:涉及用户身份的正确认证和消息或数据的合法性
调度和资源管理
- 公平性:通常希望给竞争使用某一特点资源的所有进程提供几乎同等和公平的访问机会。
- 有差别的响应性:区分具有不同服务要求的不同作业类别。操作系统将试图做出满足所有要求的分配和调度决策,并动态地做出这个决策。
- 有效性:希望获得最大的吞吐量和最小的响应时间,并在分时情形下容纳尽可能多的用户。
现代操作系统的特征
微内核体系结构
- 单体内核:操作系统应提供的多数功能都由这个大内核提供,包括调度、文件系统、网络、设备驱动器、内存管理等。大内核作为一个进程实现,所有元素共享同一地址空间。
- 微内核:只给内核分配一些最基本的功能,包括地址空间管理、进程间通信和基本的调度。其他操作系统服务则由运行在用户模式且与其他应用程序类似的进程提供,这些进程可根据特定的应用和环境需求进行定制,称为服务器。
- 系统结构设计更简单灵活
- 适合于分布式环境
- 涉及到模式切换、运行慢
多线程
把执行一个应用程序的进程划分为可以同时运行的多个线程
- 线程:可分派的工作单元。
- 包括处理器的上下文环境和栈中自身的数据区域。
- 线程顺序执行且可以中断,处理器可以转到另一个线程。
- 进程:一个或多个线程和相关系统资源的集合。
- 严格对应于一个正在执行的程序的概念
通过把一个应用程序分解成多个线程,程序员可以在很大程度上控制应用程序的模块性及相关事件的时间安排。
- 严格对应于一个正在执行的程序的概念
对称多处理
不仅指计算机硬件体系结构,而且指采用该体系结构的操作系统的行为。
- 性能:若计算机要完成的工作可安排为让部分工作并行完成,则有多个处理器系统与只有一个同类型处理器系统相比,性能更佳。
- 可用性:由于所有处理器都可以执行相同的功能,因而单个处理器的失效并不会导致机器停止。
- 增量成长:用户可通过添加额外的处理器来增强系统的功能。
- 可拓展性:生产商可根据系统配置的处理器数量,提供一系列不同价格和性能特征的产品。
分布式操作系统
多级系统对于用户而言,具有单一的内存空间、外存空间及其他统一的存取措施。
面向对象设计
给小内核增加模块化的拓展。
容错性
基本概念
基本度量单位
- 可靠性(R(t)):从时刻t=0开始系统正确运行,到时刻t该系统正确运行的概率。
- 正确运行意味着一系列程序正常运行,并保护数据不被意外地修改。
- 平均失效时间:MTTF=R(t)从0到正无穷大的积分
- 平均修复时间:修复或替换错误部分所花费的平均时间
- 可用性(A):系统能够有效服务用户请求的时间段。
- A = MTTF/(MTTF+MTTR)
错误
分类
- 永久性错误:错误一旦发生就会一直存在。错误在故障部分替换或修复前将一直存在。
- 例如:磁盘磁头损坏、软件错误、通信部件损坏
- 临时性错误:错误不存在于所有操作条件下。
- 瞬时性错误:这类错误仅发生一次
- 间歇性错误:这类错误发生在多个不可预测的时间
冗余度
系统的容错性一般是通过增加冗余度来实现的。
- 空间(物理)冗余度:使用多个组件同时执行相同的功能,或设置一个可用组件作为备份,以防止另一个组件出现错误的情况。
- 时间冗余度:时间冗余指检测到错误时,重复某一功能或操作。
- 信息冗余度:通过复制或编码数据的方式,检测和修复位数据,进而提高容错性。
操作系统机制
- 进程隔离:进程在内存、文件存取和执行过程中通常是相互隔离的。操作系统为进程管理所提供的这一结构,可为其他进程不受产生错误进程的影响提供帮助。
- 并发控制
- 虚拟机:提供了更高程度的应用隔离和错误隔离,也可以提供冗余,即用一个虚拟机充当另一个虚拟机的备份。
- 检测点和回滚机制
- 检测点:应用程序状态的副本,该副本在可考虑范围内保存于对错误免疫的存储介质中。
- 回滚:从先前存储的检测点重新开始执行。