本课程以“如何给一个拥有单核 CPU、内存、磁盘、键盘和显示器的基本计算机配备一个可实际运转的操作系统?”这一基本问题作为主线。本课程对一个基本操作系统中的六个基本模块,即 CPU 管理、内存管理、外设管理、磁盘管理与文件系统、用户接口和启动模块,以及这些模块之间的内在联系,进行了深入细致地原理教授、算法与数据结构设计,并借鉴开源操作系统 Linux 全面讲授了整个操作系统的代码实现。通过本系列课程的学习,学生可以体会一个完整的操作系统是如何良好运转的,据此培养学生设计和实现一个完整操作系统的能力,进而在未来从事计算机系统层面的工作时能应用这些能力和经验,最终逐渐形成计算机系统能力。同时本课程包含了进程设计与实现、虚存设计与实现、外设驱动与实现在内的12个配套实验,通过丰富的实践环节,使学生真正掌握设计、实现和分析完整操作系统的能力。
操作系统基础
章节测试
L6 操作系统历史
L7 我们的学习任务
L3 操作系统启动
L2 开始揭开钢琴的盖子
L5 系统调用的实现
L1 什么是操作系统
L4 操作系统接口
实验项目1 控制系统启动
实验项目2 添加系统调用
进程与线程
章节测试
L19 死锁处理
L16 进程同步与信号量
L15 一个实际的schedule函数
L17 信号量临界区保护
L8 CPU管理的直观想法
L10 用户级线程
L14 CPU调度策略
L12 内核级线程实现
L9 多进程图像
L11 内核级线程
L13 操作系统之“树”
L18 信号量的代码实现
实验项目3 进程运行轨迹的跟踪与统计
内存管理
章节测试
L23 段页结合的实际内存管理
L20 内存使用与分段
L22 多级页表与快表
L21 内存分区与分页
L25 内存换出
L24 内存换入-请求调页
实验项目4 地址映射与共享
设备驱动与文件系统
章节测试
L32 目录解析代码实现
L27 键盘
L28 生磁盘的使用
L30 文件使用磁盘的实现
L26 I/O与显示器
L29 从生磁盘到文件
L31 目录与文件系统
实验项目 5 终端设备的控制