0x00 课程概述及资料

课程参考

课程实践

实验指导
GitHub/LearningOS
Gitee/learning-os 备份

uCore Tutorial Guide 2022 Spring

rCore Tutorial Guide 2022 Spring

视频介绍

  • uCore框架 rCore框架

    OS原理与设计思想

  • 操作系统结构

  • 中断及系统调用
  • 内存管理
  • 进程及线程
  • 处理机调度
  • 同步互斥
  • 文件系统
  • I/O子系统

作业与实验

  • 课后练习
  • 基础实验:面向RISC-V CPU用RUST/C涉及实现操作系统的功能
  • 课程设计:大实验

    为什么要学习这门课程

  • 可以了解计算机机壳后面的软硬件运行原理

  • 可以学习软硬件基础架构
  • 可以发现和修复难对付的bug

0x01 什么是操作系统

操作系统定义:没有公认的精确定义。
操作系统是管理硬件资源、控制程序运行、改善人机界面和为应用软件提供支持的一种系统软件。[计算机百科全书]

操作系统是一个控制程序

  • 一个系统软件
  • 执行程序, 给程序提供服务
  • 控制程序执行过程, 防止错误
  • 方便用户使用计算机系统

操作系统是一个资源管理程序

  • 应用与硬件之间的中间层
  • 管理各种软硬件资源
  • 访问软硬件资源的服务
  • 解决访问冲突, 确保公平使用

os-position.png

操作系统软件的分类

  • Kernel-操作系统的内部

执行各种资源管理等功能

  • GUI-图形用户接口

WIMP(视窗(Window), 图标(Icon), 选单(Menu), 指针(Point))
直接操作,所见即所得

  • Shell-命令行接口

通过键盘操纵
方便用户进行命令输入
sort-of-os.png

uCore/rCore教学操作系统
ucorearch.png

操作系统内核的抽象:
os-abstract.png

操作系统内核特征

  • 并发

指计算机系统中存在多个需要执行的应用程序,需要计算机进行管理和调度
管理每个程序的执行状态
当前正在执行某个程序,如果切换到另一个程序,需要保存当前程序的执行状态

  • 共享

宏观上“同时”访问
微观上互斥共享

  • 虚拟

利用多道程序设计技术,使每个用户觉得有一个完整的计算机可以访问

  • 异步

程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知
只要运行环境相同,OS需要保证程序的运行结果也相同

0x02 操作系统历史演化

1. 操作系统实例

Multics OS

history-multics.png
multics-intro.png

UNIX家族

unix-family.png
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家族

linux-family.png

Windows家族

windows-family.png

MacOS家族

macos-family-history.png

2. 操作系统历史演化

单用户系统(1945-1955)

  • 手动连线/纸带传输进行程序输入
  • 机器成本远大于人力成本
  • 操作系统 = 装载器+程序库
  • 问题:昂贵组件的低利用率

history-single-user-system.png

批处理系统(1955-1965)

  • 磁带/磁盘传输进行程序输入
  • 机器成本大于人力成本
  • 操作系统 = 装载器+程序控制器+输出处理器
  • 问题:相比以前利用率提高

history-batch-processing.pnghistory-batch-process-graph.png

多道程序系统(1955-1980)

  • 多个程序驻留内存中
  • 多个程序轮流使用 CPU
  • 操作系统 = 装载器 + 程序调度 + 内存管理 + 输出管理
  • 演变:相比以前利用率提高

history-multiprogramming.png :::info 还是顺序执行! :::

分时系统(1970-今天)

  • 多个程序驻留内存中
  • 多个程序分时使用 CPU
  • 操作系统 = 装载器 + 程序调度 + 内存管理 + 中断处理 +…
  • 演变:相比以前利用率提高、与外界交互延时缩短

history-timesharing.png

个人电脑(1981 - )

  • 单用户
  • CPU 利用率已不再是最重要的关注点
  • 重点是用户界面和多媒体功能
  • 操作系统 = 装载器 + 程序调度 + 内存管理 + 中断处理 +…
  • 演变:走向大众,老的服务和功能不存在,越来越多的安全问题

history-pc.png

分布式操作系统(1990-)

  • 分布式多用户
  • 分布式系统利用率是关注点
  • 重点是网络/存储/计算的效率
  • 操作系统 = 分布式(装载器 + 程序/OS 调度 + 内存管理)
  • 演变:走向大众,走向网络,新的挑战 (不可靠/不确定)

history-ds.png
history-aiot.png

0x03 操作系统结构

简单结构

MS-DOS:应用和OS混在一起 (1981–1994)

  • 没有拆分为模块
  • 主要用汇编编写
  • 没有安全保护

msdos.png

单体分层结构

将单体操作系统 (Monolithic OS) 划分为多层 (levels)

  • 每层建立在低层之上
  • 最底层 (layer 0), 是硬件驱动
  • 最高层 (layer N) 是用户界面
  • 每一层仅使用更低一层的功能和服务

multi-level-os-arch.png

微内核结构

  • 尽可能把内核功能移到用户空间
  • 用户模块间的通信使用消息传递
  • 好处: 灵活/安全…
  • 缺点: 性能
  • LPC: 本地过程调用(Local Procedure Call)
  • HAL: 硬件抽象层(Hardware Abstraction Layer)

microkernel-arch.png

外核结构

  • 让内核分配物理资源给多个应用程序, 并让每个程序决定如何处理这些资源
  • 程序能链接到操作系统库 (libOS) 实现了操作系统抽象
  • 保护与控制分离
  • Distributed Shared Memory(DSM)

exokernel-arch.png

虚拟机结构

虚拟机管理器将单独的机器接口转换成很多的虚拟机, 每个虚拟机都是一个原始计算机系统的有效副本, 并能完成所有的处理器指令

vmm-arch.png

vmm-arch-view2.png