0x00 课程概述及资料
课程参考
课程实践
实验指导
GitHub/LearningOS
Gitee/learning-os 备份
uCore Tutorial Guide 2022 Spring
rCore Tutorial Guide 2022 Spring
视频介绍
作业与实验
0x01 什么是操作系统
操作系统定义:没有公认的精确定义。
操作系统是管理硬件资源、控制程序运行、改善人机界面和为应用软件提供支持的一种系统软件。[计算机百科全书]
操作系统是一个控制程序
- 一个系统软件
- 执行程序, 给程序提供服务
- 控制程序执行过程, 防止错误
- 方便用户使用计算机系统
操作系统是一个资源管理程序
- 应用与硬件之间的中间层
- 管理各种软硬件资源
- 访问软硬件资源的服务
- 解决访问冲突, 确保公平使用
操作系统软件的分类
- Kernel-操作系统的内部
执行各种资源管理等功能
- GUI-图形用户接口
WIMP(视窗(Window), 图标(Icon), 选单(Menu), 指针(Point))
直接操作,所见即所得
- Shell-命令行接口
通过键盘操纵
方便用户进行命令输入
uCore/rCore教学操作系统
操作系统内核的抽象:
操作系统内核特征
- 并发
指计算机系统中存在多个需要执行的应用程序,需要计算机进行管理和调度
管理每个程序的执行状态
当前正在执行某个程序,如果切换到另一个程序,需要保存当前程序的执行状态
- 共享
宏观上“同时”访问
微观上互斥共享
- 虚拟
利用多道程序设计技术,使每个用户觉得有一个完整的计算机可以访问
- 异步
程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知
只要运行环境相同,OS需要保证程序的运行结果也相同
0x02 操作系统历史演化
1. 操作系统实例
Multics OS
UNIX家族
BSD (Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,在1977至1995年间由加州大学伯克利分校开发和发布的。历史上, BSD曾经被认为是UNIX的一支——“BSD UNIX”, 因为它和AT&T UNIX操作系统共享基础代码和设计。在20世纪80年代,衍生出了许多变形的UNIX授权软件。比较著名的如DEC的Ultrix及Sun公司的SunOS。1990年代,BSD很大程度上被System V4.x版以及OSF/1系统所取代,晚期BSD版本为几个开源软件开发提供了平台并且一直沿用至今。今天,“BSD”并不特指任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称。
Linux家族
Windows家族
MacOS家族
2. 操作系统历史演化
单用户系统(1945-1955)
- 手动连线/纸带传输进行程序输入
- 机器成本远大于人力成本
- 操作系统 = 装载器+程序库
- 问题:昂贵组件的低利用率
批处理系统(1955-1965)
- 磁带/磁盘传输进行程序输入
- 机器成本大于人力成本
- 操作系统 = 装载器+程序控制器+输出处理器
- 问题:相比以前利用率提高
多道程序系统(1955-1980)
- 多个程序驻留内存中
- 多个程序轮流使用 CPU
- 操作系统 = 装载器 + 程序调度 + 内存管理 + 输出管理
- 演变:相比以前利用率提高
:::info 还是顺序执行! :::
分时系统(1970-今天)
- 多个程序驻留内存中
- 多个程序分时使用 CPU
- 操作系统 = 装载器 + 程序调度 + 内存管理 + 中断处理 +…
- 演变:相比以前利用率提高、与外界交互延时缩短
个人电脑(1981 - )
- 单用户
- CPU 利用率已不再是最重要的关注点
- 重点是用户界面和多媒体功能
- 操作系统 = 装载器 + 程序调度 + 内存管理 + 中断处理 +…
- 演变:走向大众,老的服务和功能不存在,越来越多的安全问题
分布式操作系统(1990-)
- 分布式多用户
- 分布式系统利用率是关注点
- 重点是网络/存储/计算的效率
- 操作系统 = 分布式(装载器 + 程序/OS 调度 + 内存管理)
- 演变:走向大众,走向网络,新的挑战 (不可靠/不确定)
0x03 操作系统结构
简单结构
MS-DOS:应用和OS混在一起 (1981–1994)
- 没有拆分为模块
- 主要用汇编编写
- 没有安全保护
单体分层结构
将单体操作系统 (Monolithic OS) 划分为多层 (levels)
- 每层建立在低层之上
- 最底层 (layer 0), 是硬件驱动
- 最高层 (layer N) 是用户界面
- 每一层仅使用更低一层的功能和服务
微内核结构
- 尽可能把内核功能移到用户空间
- 用户模块间的通信使用消息传递
- 好处: 灵活/安全…
- 缺点: 性能
- LPC: 本地过程调用(Local Procedure Call)
- HAL: 硬件抽象层(Hardware Abstraction Layer)
外核结构
- 让内核分配物理资源给多个应用程序, 并让每个程序决定如何处理这些资源
- 程序能链接到操作系统库 (libOS) 实现了操作系统抽象
- 保护与控制分离
- Distributed Shared Memory(DSM)
虚拟机结构
虚拟机管理器将单独的机器接口转换成很多的虚拟机, 每个虚拟机都是一个原始计算机系统的有效副本, 并能完成所有的处理器指令