索引
学习 rCore 的笔记记录。该篇记录rCore 第一课:系统概述。
后续大纲
- 操作系统结构
- 中断以及系统调用
- 内存管理
- 进程管理
- 处理机调度
- 同步互斥
- 文件系统
- I/O子系统
操作系统定义
作为控制程序
- 系统软件
- 执行软件
- 控制程序执行过程, 防止错误
- 方便用户使用软件
作为资源管理程序。
- 应用与硬件之间的中间层
- 管理各种软硬件资源
- 访问软硬件资源的服务
- 解决访问冲突, 保证公平使用
操作系统的软件分类
- Shell 命令行接口
- GUI 图形用户接口
- Kernel 操作系统内部
操作系统需要完成 CPU与进程、文件到磁盘、地址空间与内存之间的串联。
操作系统的特征
并发:同时存在多个应用程序 共享:“同时”访问互斥的各种资源 虚拟:每个程序“独占”的访问一整个计算机 异步:服务完成的时间不确定, 也可能失败
操作系统的演变
- 单用户系统(1945-1955), 操作系统 = 装载器 + 程序库
- 批处理系统(1955-1965), 操作系统 = 装载器 + 程序控制器 + 输出处理器
- 多道程序系统(1955-1980), 操作系统 = 装载器 + 程序调度 + 内存管理 + 输出管理
- 分时系统(1970-至今), 操作系统 = 装载器 + 程序调度 + 内存管理 + 中断处理...
- 分布式系统(1990-至今), 操作系统 = 分布式(装载器 + 程序/OS调度 + 内存管理)
- AIoT系统(2000-至今), 操作系统 = 分布式(程序/OS调度 + 内存管理 + 安全/更新)
操作系统的结构
- 简单操作系统(1981-1994)
- 没有拆分模块
- 主要用汇编编写
- 没有安全保护
- 单体分层结构
- 每层建立在底层之上
- 最底层是硬件驱动
- 最高层是用户界面
- 每一层仅使用低一层的功能和服务
- 微内核架构
- 灵活, 安全
- 性能较低
- LPC 本地过程调用(Local Procedure Call)
- HAL 硬件抽象层(Hardware Abstraction Layer)
- 外核架构
- 保护与控制分离
- 虚拟外设, 让应用程序使用虚拟外设
- 程序能链接到操作系统库
- 虚拟机结构
- 将单独的机器接口转换成很多的虚拟机
- 每个虚拟机都是一个原始计算机系统的有效副本
实验要求
- 满足应用
- LibOS
- 函数调用
- 编译器与操作系统的配合
- 硬件启动和软件启动
- 编写、调试裸机程序
- 批处理
- 特权操作
- 系统调用、异常
- 加载、执行、切换应用程序
- 特权级切换
- 多道程序
- 协作式调度
- 内存空间划分与管理
- 分时多任务
- 抢占式调度
- 中断处理
- 上下文切换
- LibOS
- 复杂化
- 地址空间抽象
- 地址空间抽象
- 静态内存分配
- 动态内存分配
- 页式内存管理
- 局部性原理
- 缺页异常
- 虚拟页式存储
- 置换算法
- 进程抽象
- 多处理器
- 多核架构
- 实际 OS 调度
- 文件抽象
- 文件抽象
- 文件组织管理
- 文件系统实现
- 地址空间抽象
- 多样性功能支持
- 进程间通信
- 信号、管道
- 消息队列、共享内存
- I/O重定向
- 并发操作
- 线程:用户、内核线程
- 协程机制
- 协程、线程、进程的关系
- 同步互斥的机制
- 同步互斥解决并发问题
- 死锁等问题
- 管理I/O设备的
- 设备抽象
- 设备执行模型
- 同步/异步 I/O
- I/Os 设备管理
- 进程间通信
执行环境
- Assembler 汇编 -> 机器码
- Linker 多个机器码目标文件 -> 单个机器码执行文件
- OS 加载、执行、管理机器码执行文件
- Bootloader 加载 OS 执行
- 编译器三元组-CPU架构/厂商/操作系统
- ELF文件
初始化过程
- 硬件启动 Bootloader
- Bootloader 启动 OS
- OS 位于指定位置