第一章 、介绍
课程概述
预备知识
- 计算机结构原理(Intel 80386+)
- C与汇编程序设计
- 数据结构
参考教材
操作系统概念(第七版);Silberschatz、 Galvin和Gagne著操作系统——精髓与设计原理(第七版); William Stallings著
课程内容
■ 操作系统结构
■ 中断及系统调用
■ 内存管理
■ 进程及线程
■ 处理机调度
■ 同步互斥
■ 文件系统
■ I/O子系统
操作系统实验
■ 实验0: 实验环境准备
■ 实验1: 系统启动及中断
■ 实验2: 物理内存管理
■ 实验3: 虚拟内存管理
■ 实验4: 内核线程管理
■ 实验5: 用户进程管理
■ 实验6: CPU调度
■ 实验6: CPU调度
■ 实验7: 同步与互斥
■ 实验8: 文件系统
课程设计
■ ucore+模块化改进
- 多种平台上的内核可加载模块完善
- 多种平台上的动态链接库完善
- 内核功能的模块化改进
- 文件系统、处理机调度算法、内存置换算法、设备驱动
■ 在真实系统上运行ucore+
- 树莓派(Raspberry PI)
- Intel Edison
什么是操作系统?
操作系统定义
■ 没有公认的精确定义
■ 操作系统是一个控制程序
- 一个系统软件
- 控制程序执行过程,防止错误和计算机的不当使用
- 方便用户程序,给用户程序提供各种服务
- 方便用户使用计算机系统
- 解决资源访问冲突,确保资源公平使用
■ 操作系统是一个资源管理器 - 管理各种计算机软硬件资源
- 提供访问计算机软硬件资源的高效手段
- 应用程序与硬件之间的中间层
操作系统地位
操作系统软件的分类
操作系统软件的组成
■ Shell -- 命令行接口
- 通过键盘操纵
- 方便用户进行命令输入
■ GUI -- 图形用户接口 - WIMP
(视窗(Window)、图标(icon)、选单(Menu)) - 直接操作和所见即所得
■ Kernel -- 操作系统内部 -
执行各种资源管理等功能
ucore教学操作系统内部
操作系统内核特征
■ 并发
- 计算机系统中同时存在多个运行的程序,需要OS管理和调度
■ 共享 - “同时”访问
- 互斥共享
■ 虚拟 - 利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
■ 异步 - 程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知
- 只要运行环境相同,OS需要保证程序运行结果也要相同
为什么要学习操作系统
操作系统是多门课程的综合
■ 综合课程-结合许多不同的课程
- 程序设计语言
- 数据结构
- 算法
- 计算机体系结构
■ 材料 - 操作系统概念和原理、源代码
■ 技能 - 操作系统的设计和实现
学习操作系统的目的
■ 已有操作系统很好,我将来的工作不会写操作系统
-
Windows,Linux
■ 已有操作系统是否解决了所有的事?
■ 为什么我要学习它
操作系统软件的地位
■ 操作系统:计算机科学研究的基石z之一
- 计算机系统的基本组成部分
- 由硬件的发展和应用需求所驱动
- 学术和工业的持续推进
哪里在做操作系统研究?
■ 顶尖大学的计算机科学部门
■ 计算机产业
- 旧时:Xerox(PARC),IBM,DEC(SRC),Bell
Labs - 现代:Microsoft,Google,Yahoo,IBM,HP,Sun,Intel,VMware,Amazon,...
- 国内:阿里巴巴、百度、华为
■ 研究协会 - ACM SIGOPS
- USENIX
操作系统研究的顶级会议
■ ACM操作系统原理研讨会(SOSP)
- ACM SIGOPS
- 每两年(奇数:1967 - )
- ~20篇
■ USENIX操作系统设计和实现研讨会(OSDI) - USENIX
- 每两年(偶数:1994 - )
- ~20篇论文
最具影响力的操作系统论文
■ SIGOPS Hall-of-Fame Awards
- 论文必须发表在同行评议的文献中至少十年
- 到目前为止有说三十多篇论文获奖
■ 假如你想做操作系统研究 - 需要阅读和理解这些论文
http://www.sigops.org/award-hof.html
操作系统具有挑战性
■ 操作系统很大
- Windows XP有4500万行
■ 操作系统管理并发 - 并发导致有趣的编程挑战
■ 操作系统代码管理原始硬件 - 时间依赖行为,非法行为,硬件故障
■ 操作系统代码必须是高效的,低耗CPU、内存、 磁盘的
■ 操作系统有错,就意味着机器出错 - 错做系统必须比用户程序拥有更高的稳定性
■ 操作系统是系统安全的基础
■ 操作系统并不仅仅关于并发性和琐碎的调度算法
■ 并发性是一小部分 - 内核里不存在管程和哲学家问题
- 内核中的锁问题需要太多的知识背景
■ 磁盘调度大多是不相干的(SCSI已经做了这些)
■ 进程调度室个比较小的话题
■ 操作系统是关于
■ 权衡
- 时间与空间
- 性能和可预见性
- 公平与性能
■ 硬件 - 如何让中断、异常、上下文切换真正的有效?
- TLB是如何工作的?这对页表又意味着什么?
- 如果你不展示任何汇编代码,那么你就是不是教操作系统的。
如何学习操作系统
■ "不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之;学至于行之而止矣。"
--荀子《儒效篇》
■ “天才是1%的灵感加上99%的汗水"
-- Thomas Edison
操作系统实例
KenThompson、Dennis Ritchie
Linux家族
Windows家族
操作系统的演变
操作系统为什么改变
■ 只要功能:硬件抽象和协调管理
■ 原则:设计随着各种相关技术的改变而做出一定的改变
■ 在过去二十年底层技术有极大的改变
-
在1981年到2012计算机系统的对比
操作系统的演变
■ 单用户系统
■ 批处理系统
■ 多道程序系统
■ 分时
■ 个人计算机:每个用户一个系统
■ 分布式计算:每个用户多个系统
单用户系统(‘45 - ’55)
■ 操作系统 = 装载器 + 通用子程序库
■ 问题:昂贵的组件的低利用率
批处理(‘55 - ’65)
■ 顺序执行与批处理
多道程序(‘65 - ’80)
■ 保证多个工作在内存中并且在个工作间复用CPU
分时(‘70 - )
■ 定时中断用于工作对CPU的复用
个人端脑操作系统
■ 个人电脑系统
- 单用户
- 利用率已不再是关注点
- 重点是用户界面和福媒体功能不存在
- 很多老的服务和功能不存在
■ 演变 - 最初:操作系统作为一个简单的服务提供者(简单库)
- 现在:支持协调和沟通的多应用系统
越来越多的安全问题(如,电子商务、医疗记录)
分布式操作系统
■ 网络支持成为一个重要的功能
■ 通常支持分布式服务
- 跨多系统的数据共享和协调
■ 可能使用多个处理器 -
松、紧耦合系统
■ 高可用性与可靠的要求
操作系统演变中的计算机系统
操作系统结构
简单结构
■ MS-DOS - 在最小空间,设计用于提供大部分功能(1981 ~ 1994)
- 没有拆分为模块
-
虽然MS-DOS在接口和功能水平没有很好地分离,主要用汇编编写
分层结构
■ 将操作系统分为多层(levels)
- 每层建立在低层之上
- 最底层(layer 0)是硬件
- 最高层(layer N)是用户界面
■ 每一层仅使用更低一层的功能(操作)和服务
UNIX操作系统与C语言
■ 1972由Kenneth Thompson和Dennis Ritchie在贝尔实验室设计。
■ 设计用于UNIX操作系统的编程例程
■ “高级”系统编程语言创建可移植操作系统概念
K. Thompson and D. Ritchie
uCore操作系统结构
微内核接口(Microkernel)
■ 尽可能把内核功能移到用户空间
■ 用户模块间的通信使用消息传递
■ 好处:灵活、安全
■ 缺点:性能
外核结构(Exokernel)
■ 让内核分配机器的物理资源给多个应用程序,并让每个程序决定如何处理这些资源
■ 程序能链接到操作系统库(libOS)实现操作系统抽象
■ 保护与控制分离
VMM(虚拟机管理器)
■ 虚拟机管理器将单独的机器接口转换成很多的虚拟机,每个虚拟机都是一个原始计算机系统的有效副本,并能完成所有的处理器指令。
小结
■ 操作系统很有趣,可以管理和控制整个计算机!
但...
■ 它是不完备的
- bug、性能异常、功能缺失,有很多的挑战和机遇
■ 它是庞大的 - 有很多概念、原理和代码需要了解。
■ 我们能做到! - ...至少靠你自己的恒心和投入,完全可以在一个学期理解OS原理和uCore OS的实现