2.1 操作系统的目标和功能
操作系统是控制应用程序执行的程序, 并充当应用程序和计算机硬件之间的接口。
它有三个主要目标:
- 方便
- 有效
- 硬件升级和新型硬件出现
- 新的服务
- 纠正错误
- 内存保护机制
- 定时器
- 特权指令
- 中断
- 作业的相互干扰
- 文件系统的保护
- 处理资源的竞争
- 操作系统对内存中驻留的不同程序进行处理器切换
- 能及时响应单个用户的要求,但由于成本原因,又要可以同时支持多 个用户
- 很多用户都在对数据库进行查询或修改
- 一个程序启动了一个I/O读操 作,在继续进行前必须等到缓冲区中有数据
- 这时需要来自其他例程的一个信 ,而设计得不正确的信 机制可能导致信 丢失或接收到重复信
- 常常会出现多个用户或程序试图同时使用一个共享资源的情况
- 必须有某种互斥机制保证一次只允许一个例程对一部分数据执行事务处理
- 很难证明这类互斥机制的实现对所有可能的事件序列都是正确的
- 当程序共享内存且处理器控 制它们交替执行时,它们可能会因为重写相同的内存区域而发生不可预测的相互干扰
- 程序调度顺序可能会影响某 个特定程序的输出结果
- 很可能有两个或多个程序相互挂起等待
- 可能依赖于资源分配和释放的时机安排
- 一段可执行的程序
- 程序所需要的相关数据(变量、工作空间、缓冲区等)
- 程序的执行上下文(或进程状态)
- 操作系统用来管理和控制进程所需的内部数据
- 包括各种处理器寄存器的内容,如程序计数器和数据寄存器
- 还包括操作系统使用的信息,如进程优先级、进程是否在等待特定I/O事件的完成
- 公平性: 通常希望给竞争使用某一特定资源的所有进程提供几乎同等和公平的访问机会。对同一类作业,即有类似请求的作业,更需要如此
- 有差别的响应性: 另一方面,操作系统可能需要区分具有不同服务要求的不同作业类别。操作系统将试图做出满足所有要求的分配和调度决策,并动态地做出决策。例如,若某个进程正在等待使用一个I/O设备,操作系统会尽可能迅速地调度这个进程,进而释放该设备以方便其他进程使用
- 每层建立在低层之上
- 最底层(layer 0), 是硬件
- 最高层(layer N) 是用户
- 单一的内存空间
- 单一的外存空间
- 统一的存取措施
- R(t)
- 从时刻t=0开始系统正确运行,到时刻t时该系统正确运行的概率
- 系统能够有效服务用户请求的时间段
- 系统不可用的时间称为宕机时间(downtime)
- 系统可用的时间称为正常运行时间(uptime)
- 进程隔离
- 并发控制
- 虚拟机
- 检测点和回滚机制
- 自由软件(开源软件)
- 内核质量高
- 高度模块化
- 易于配置
2.1.3 操作系统的易拓展性
重要的操作系统应能不断发展,原因如下:
2.2 操作系统的发展史
操作系统为什么改变
主要功能: 硬件抽象和协调管理
原则: 设计随着各种相关技术的改变而做出一定的改变,在过去二十年底层技术有极大的改变 !!
发展阶段
2.2.2 简单批处理系统
产生原因
早期计算机非常昂贵,同时由于调度和准备而浪费的是件令人难以接受,因此最大限度利用处理器是非常重要的。
中心思想
使用一个称为监控程序的软件。通过使用这类操作系统,用户不再直接访问机器,相反用户把卡片或磁带中的作业提交给计算机操作员,由操作员把这些作业按顺序组织成批,并将整个批作业放到输入设备上,供监控程序使用。每个程序完成处理后返回到监控程序,同时监控程序自动加载下一个程序。
第一个操作系统(第一个批处理操作系统):20世纪50年代中期,General Motors开发,用于IBM 701
顺序执行与批处理
处理器视角
处理器执行内存中存储监控程序区域部分的指令,这些指令读入下一个作业并存储到内存中的另一部分。处理器继而执行用户程序中的指令,直到遇到一个结束指令或错误条件。
“控制权交给作业” 意味着处理器当前取的和执行的都是用户程序中的指令
“控制权返回给监控程序” 意味着处理器当前从监控程序取指令并执行指令
作业控制语言JCL
作业控制语言JCL是一种特殊类型的程序设计语言, 用于为监控程序提供指令。
其他必要的硬件支撑
当用户程序正在运行时,不能改变包含监控程序的内存区域
防止一个作业独占系统
某些机器指令被设计成特权指令,只能由监控程序执行
为操作系统在让用户程序放弃控制权或让用户程序获得控制权时,具有更大的灵活性
运行模式
用户模式
用户程序在用户模式下执行,用户程序所占据的内存区域是受保护的,特权指令也不允许执行
内核模式
监控程序在内核模式下执行,可以执行特权指令,可以访问受保护的内存区域
简单批处理系统开销
处理器时间用于交替执行用户程序和监控程序, 牺牲了一部分内存交付给监控程序使用,同时监控程序消耗了一部分处理器时间。尽管存在系统开销,简单批处理系统还是提高了计算机
的利用率
2.2.3 多道批处理系统
即便简单批处理系统提供自动作业序列,处理器仍经常处于空闲状态。但问题在于I/O设备相对于处理器而言速度太慢,下图列出了一个代表性的计算过程
多道程序设计
当一个作业需要等待I/O时,处理器可以切换到另一个可能并不在等待I/O的作业,这种处理模式称为多道程序设计或多任务处理。
这种处理方式需要有足够的内存空间加载操作系统(常驻监控程序)和不少于1个用户程序。
进一步还可以扩展内存确保可加载3个、4个程序 或更多的程序,且在它们之间进行切换
多道程序设计实例
分时和多道程序设计引发的新问题:
在分时系统中,操作系统会定时中断用于工作对CPU的复用。
兼容分时系统CTSS
第一个分时操作系统,由MIT Project MAC项目组最初于1961年为IBM 709开发。
该系统运行在一台内存为32,000个36位字的计算机上,常驻监控程序占用了5000个字,用户程序通常在第5000个字位置开始载入,这简化了监控程序和内存管理。
进程概念的发展
计算机系统的发展有三条主线,它们在时间安排和同步中所产生的问题推动了进程概念的发展:
多道程序批处理操作
分时
实时事务系统
设计出能够协调各种不同活动的系统软件非常困难
产生错误原因
不正确的同步
失败的互斥
不确定的程序操作
死锁
一个进程由三部分构成
执行上下文是根本,执行上下文又称进程状态。
进程管理
任何时候整个进程状态都包含在其上下文环境中。
在操作系统中可能会设计和并入一些新的特征(如优先级),这可通过扩展上下文环境以包括支持这些特征的新信息。
2.3.4 调度和资源管理
操作系统的一个关键任务是抽象化管理各种可用资源(内存空间、I/O设备、处理器),并调度各种活动进程来共享使用这些资源
资源分配策略必须考虑:
分层结构
分层结构将操作系统分为多层 (levels)
每一层仅使用更低一层的功能(操作)和服务
THE系统是第一个分层结构的操作系统
缺点: 清晰定义层次间接口非常困难
外核结构
设计理念
尽可能减少软件的抽象化,使 得开发者可以专注于硬件的抽象化;同时简化传统微内核的消息传递机制,以及整块核心的软件抽象层,让内核分配机器的物理资源给多个应用程序 , 并让每个程序决定如何处理这些资源。程序能链接到操作系统库(libOS) 实现了操作系统抽象,保护与控制分离
操作系统设计
分布式操作系统
分布式操作系统会使用户产生错觉,多机系统好像具有:
分布式操作系统的技术发展水平仍落后于单处理器操作系统和对称多处理操作系统
面向对象设计
用于给小内核增加模块化的扩展,基于对象的结构可使程序员定制操作系统,而不会破坏系统的完整性。
面向对象技术还使得分布式工具和分布式操作系统的开发变得更容易。2.5 容错性
容错性指系统或部件在发生软/硬件错误时,能够继续正常运行的能力。通常会涉及一定程度的冗余,它旨在提高系统的可靠性,通常需要在经济层面或性能层面付出一定的代价。 在多大程度上采取容错措施必须要由所消耗资源的重要程度来决定
基本概念(基本度量指标)
可靠性
平均失效时间(MTTF)
平均修复时间(MTTR)指修复或替换错误部分所花费的平均时间
可用性A
操作系统机制
操作系统软件中采用了许多技术来提高容错性:
2.6 多处理器和多核操作系统设计考虑因素
多处理器操作系统不仅要提供多道系统的所有功能,而且必须提供适应多处理器需要的额外功能
关键设计问题:
2.10 Linux操作系统
Linux是由芬兰藉科学家Linus Torvalds于1991年编写完成的操作系统内核。 许多人对Linux进行改进、扩充、完善,做出了关键性贡 献。Linux由最初一个人写的原型变成在Internet上由无数志同道合的程序高手们参与的一场运动。
Linux操作系统的技术特点
操作系统演变中的计算机系统