操作系统知识点
每个知识领域应有本领域的范围说明,包括领域知识的组成(知识单元)以及预期的能力培养目标,能力点的检测方法(实验设计的依据)
操作系统知识领域包含以下内容:
- 操作系统概述:操作系统定义、抽象性与特征、操作系统历史、操作系统的系统结构、计算机硬件与操作系统的关系
- 中断:中断、异常、系统调用
- 内存管理 :连续物理内存分配、非连续物理内存分配
- 虚拟存储:局部性原理、虚拟存储基本概念、缺页异常、局部页面置换算法、全局页面置换算法
- 进程与线程:概念、运行状态、执行过程、控制管理、*协程
- 调度:单处理器调度,多处理器调度
- 同步互斥:基于软件的同步互斥方法、基于硬件的同步互斥方法、信号量、管程、经典同步问题
- 死锁:死锁概念、死锁处理方法、并发错误检测
- 进程间通信:信号、管道、消息队列、共享内存、*RPC、*APC、*异步机制
- 文件系统:文件系统基本概念、文件组织、文件系统实例
- 输入输出管理:输入输出特征、输入输出调度、输入输出子系统实例
- *操作系统进展:OS内部安全、操作系统与编程语言、操作系统与系统结构(系统虚拟化)、异步编程
1. 操作系统概述
核心学习成效
- 掌握操作系统的定义:能从软件角度、资源管理角度定义操作系统及其所属范围
- 掌握操作系统的抽象:理解进程、文件、地址空间的抽象对象以及与硬件关系
- 掌握操作系统的特征:理解并发/并行、共享、虚拟化、异步的含义
- 掌握操作系统的历史:理解单用户系统、批处理系统、多道程序系统、分时系统、个人计算机、SMP系统、VMM系统、分布式系统中的操作系统特征
- 掌握操作系统的架构:理解简单单体/分层单体/复杂单体/微/外/VMM kernel的特点
- 掌握 计算机硬件与操作系统的关系:理解硬件与操作系统之间的interface和各自的主要工作
能力检测方法
- 能分析硬件的哪些功能能够给操作系统提供哪些支持
- 能对一个计算机系统中的软硬件的特征、区别、关系、运行状态进行清晰判断
- 对操作系统有一个完整的总体分析
2. 中断
核心学习成效
- 中断/异常/系统调用:从硬件产生方式和处理的角度和软件处理的角度理解中断/异常/系统调用的产生缘由,产生方式与处理过程
- 三者关系、区别与作用:理解 中断、异常和系统调用的关系,区别和作用
- 对于RISC-V或x86等硬件,理解中断、异常和系统调用的设置,处理的细节
能力检测方法
- 理解硬件的中断、异常和系统调用的设置过程,且能完成针对具体硬件的操作系统的相关实验
- 以时钟中断、除零异常、基本系统调用为例,理解RISC-V或x86等硬件的中断、异常和系统调用的处理过程,且能完成针对具体硬件的操作系统相关实验
- 理解特权级:用户态和内核态的区别,以及硬件和操作系统在转换特权级的注意事项和具体实现
3. 内存管理
核心学习成效
- 地址空间:理解从源程序-->编译-->链接-->加载-->动态链接-->执行过程中地址的不同定义与变化
- 连续内存分配算法:first-fit, best-fit,worst-fit,buddy, *slab及其一些变种算法
- 内碎片和外碎片
- 连续内存分配方法:段地址,段式管理,页地址,页式管理,反置页表管理,段页式管理
- TLB与页式管理的关系
能力检测方法
- 能够理解和运用 first-fit, best-fit,worst-fit,buddy算法进行内存分配与释放
- 能够基于段式、页式、段页式进行虚实地址转换和虚存-->物理内存的访存操作
- 理解在段式、页式、段页式内存访问过程中,软硬件的分工
- 理解硬件的段/页式内存的处理过程,且能完成针对具体硬件的段页式操作系统相关实验
4. 虚拟存储
核心学习成效
- 理解虚拟存储的前提条件:局部性,掌握虚拟存储相关的覆盖/交换技术,掌握实现虚拟存储
- swap的基本原理和在实现机制
- 局部页置换算法:理解OPT、FIFO、LRU、LFU、CLOCK、改进的CLOCK等页置换算法和特征,理解belady异常,无belady异常的属于stack算法类的页置换算法
- 全局页置换算法:理解工作集、常驻集、缺页率的概念,内存抖动问题,负载控制方法,理解工作集置换算法、缺页率置换算法
能力检测方法
- 能够理解和运用 fOPT、FIFO、LRU、LFU、CLOCK、改进的CLOCK、工作集置换算法、缺页率置换算法等页置换算法进行内存替换
- 能判断某个置换算法是否属于stack算法类
- 理解硬件的段/页式内存的处理过程,且能完成针对具体硬件的虚拟存储操作系统相关实验
5. 进程与线程
核心学习成效
- 理解进程/线程的概念,进程与线程的关系与区别,进程/线程与程序的关系和差异,进程/线程控制块的组成
- 理解进程/线程的生命周期和状态模型
- 理解管理进程的过程:创建 fork、执行 exec、等待 wait、停止 exit
- 理解进程管理与内存管理的关系
注:可根据课程时长:讲解协程,理解不同的CPU复用方式;讲解2019 HotOS论文“A fork() in the road”,理解fork的利弊;讲解meltdown漏洞,从另外的角度理解arch/页表/进程/信息之间的关系
能力检测方法
- 能描述进程生命周期的状态转换关系和时机
- 能理解和掌握进程管理的4个重要过程
- 理解硬件的内核线程/用户进程的管理过程,且能完成针对具体硬件的线程/进程操作系统相关实验
6. 调度
核心学习成效
- 理解调度策略、准则和评价目标
- 掌握调度算法:先来先服务算法、短进程优先算法(抢占/不抢占)、最高响应比优先算法、最高响应比优先算法、多级反馈队列算法
- 理解实时任务的特点,RM/EDF实时调度算法,优先级反转问题和解决方法:优先级继承,优先级天花板
- *了解多处理器调度相关的调度策略 O(1),CFS,BFS(基于Linux)
能力检测方法
- 理解不同调度算法的差异,能够在给定的条件下(时间片,算法名称,进程执行时间等),进行具体调度算法的推演
- 理解并求解优先级反转问题
- 理解硬件的内核线程/用户进程的调度执行过程,且能完成针对具体硬件的调度框架/调度算法操作系统相关实验
7. 同步互斥
核心学习成效
- 理解原子操作、临界区的含义,临界区的访问规则
- 掌握临界区的基本实现方法:禁用中断、纯软件方法:Peterson算法、Dekkers算法、Eisenberg&McGuire算法;以及它们的局限性
- 掌握临界区的硬件原子指令支持下的实现方法:理解T&S,EXCHG等硬件原子指令,以及基于此指令的临界区方法
- 掌握信号量:特征,具体实现,易错情况
- 掌握管程:特征,具体实现,条件变量的特征与实现,易错情况,不同类型的管程:Hansen管程,Hoare管程,Mesa管程
- 掌握用信号量或管程来解决各种同步互斥问题:哲学家问题、理发师问题、不同优先策略的读者写者问题等
能力检测方法
- 能指出存在bug的临界区方法的问题所在和后果
- 能用信号量或管程来解决各种同步互斥问题(伪代码形式)
- 理解硬件的硬件原子指令,且能完成针对具体硬件的信号量、管程的实现和基于这两种机制的同步互斥问题求解的操作系统相关实验
8. 死锁
核心学习成效
- 掌握死锁的抽象表示方法
- 掌握死锁的必要条件
- 掌握死锁的的处理方法:死锁预防(Deadlock Prevention)、死锁避免(Deadlock Avoidance)、死锁检测和恢复(Deadlock Detection & Recovery)
- 掌握银行家算法,理解出现死锁与死锁安全的关系与区别
能力检测方法
- 能用伪代码或形式描述银行家算法的设计实现
- 理解硬件,且能实现针对具体硬件的死锁处理方法的操作系统相关实验
9. 进程间通信
核心学习成效
- 掌握IPC的基本原理
- 掌握PIPE机制和使用方法
- 掌握signal机制和使用方法
- 掌握message机制和使用方法
- 掌握shmem机制和使用方法
(注:可根据课程时长:讲解RPC、APC、异步编程)
能力检测方法
- 能用伪代码或文字形式描述PIPE/signal/message/shmem的实现机制
- 理解硬件,且能实现针对具体硬件的各种IPC机制的操作系统相关实验。
- *了解binder,dbus等IPC机制
10. 文件系统
核心学习成效
- 理解文件系统概念:文件系统、目录、文件的定义,属性与基本功能;文件描述符,文件控制块的特征与功能
- 理解目录与文件访问操作:文件目录操作:搜索文件,创建文件,删除文件,重命名文件,遍历路径,修改文件。
- 理解文件别名的两种实现方式:软链接、硬链接
- 理解虚拟文件系统的作用
- 理解文件系统的基本安全管理措施
- 理解日志文件系统的基本原理
- 理解基于fat/inode机制的文件系统的设计与实现
能力检测方法
- 能用伪代码或文字形式描述文件系统的组成和基本功能
- 能判断文件系统相关的系统调用在内核中的具体行为
- 理解硬件和磁盘等外设,且能实现针对具体硬件的文件系统机制的操作系统相关实验。
11. 输入输出管理
核心学习成效
- 理解外设驱动的基本功能
- 理解不同外设的特点和相应的处理模式:轮询、中断、DMA等
- 理解一个具体外设的中断响应过程
- 理解各种磁盘调度算法
能力检测方法
- 能用伪代码或文字形式描述磁盘调度算法,并能在给定条件下,进行算法的推演。
- 理解硬件和各种等外设,且能实现针对具体外设的设备驱动的操作系统相关实验。
12. *操作系统进展
核心学习成效
- 了解操作系统与计算机系统结构的关系和影响:系统虚拟化VMM的方法、CPU虚拟化机制、MEM虚拟化机制、I/O虚拟化机制
- 了解操作系统与编程语言的相关关系和影响:非C语言编写操作系统的特点、GO语言与操作系统、RUST语言与操作系统
- 了解异步编程的框架和实现方法:在用户态和内核中应用、设计和实现基于事件的异步编程方法
能力检测方法
- 能够阅读、分析测试具体的VMM, golang based OS, RUST-based OS,内核级异步编程基础架构