marp | theme | paginate | _paginate | header | footer | backgroundColor |
---|---|---|---|---|---|---|
true |
default |
true |
false |
white |
向勇 陈渝 李国良 任炬
2024年春季
让学生通过OS实践来深入地理解OS原理
- 硬件简单
- 软件简洁
- 循序渐进
- 理技结合
- 应用驱动
- 生物进化
让学生通过OS实践来深入地理解OS原理
- 硬件简单 -- RISC-V 64 支持OS的最小硬件子集
- 软件简洁 -- 采用Rust语言的抽象能力和高安全设计
- 循序渐进 -- 随着知识点扩展来扩展OS实践
- 理技结合 -- 原理的知识点与OS实践内容对应
- 应用驱动 -- OS功能扩展全来自于应用的需求
- 生物进化 -- 实践逐步形成的多个OS类似生命进化中形成的各种生物
- 理解式学习:编写应用,并通过分析应用与OS的执行过程,掌握OS原理
- 构造式学习:深入OS内部实现,参考/基于这些OS,扩展某些相对完整的OS功能
- 强调实践
- 提供十几个由简单到相对复杂的渐进式OS实例
- 提供OS的详细设计实现文档、多种测试用例、自动测试环境
- 原理与实践结合
- 课程上讲的OS原理和概念在实践或实验中基本上有对应
- 原理和实践有共同点和差异点
- 原理和实践相互补充和支持
- 课程内容
- 48学时,16次课
- 实践内容
- 32学时,5次实验
- 课程内容
-
"系统调用"
-
例子,用C语言,来自UNIX(例如Linux、macOS、FreeBSD)
fd = open("out", 1); write(fd, "hello\n", 6); pid = fork()
-
能理解和编写包含操作系统进程/文件等相关的简单命令行Linux程序
App/OS内存布局
- 地址空间
- 物理地址
- 页表
- 陷入上下文
- 任务上下文
- 中断响应
- 应用地址空间
- 内核地址空间
- 切换任务
- 切换特权级
- 切换页表
- fork
- exec
- exit
- wait
支持进程间通信和异步消息机制
对进程控制块的扩展
- 协程结构
- 线程结构
- 进程结构
对进程控制块扩展,支持线程同步互斥访问共享变量
对进程控制块扩展,支持线程同步互斥访问共享变量
- Mutex
- Semphore
- Condvar
支持块设备/串口等外设
- 内核态中断响应
- DMA
- 轮询
- 设备<-->内存间数据传输
- 同步互斥保护
实验 1 :获取任务信息
- 预先学习完成 实践 1--4
内容
我们的系统已经能够支持多个任务分时轮流运行,我们希望引入一个新的系统调用 sys_task_info 以获取当前任务的信息
实验 2 :完成mmap和munmap系统调用功能
- 预先学习完成 实践 1--5
内容
- 引入虚存机制后,原来内核的 sys_get_time 和 sys_task_info 函数实现就无效了。请你重写这个函数,恢复其正常功能。
- mmap 在 Linux 中主要用于在内存中映射文件, 本次实验简化它的功能,仅用于申请内存。请实现 mmap 和 munmap 系统调用
实验 3 :完成spawn系统调用功能
- 预先学习完成 实践 1--6
内容
实现一个完全 DIY 的系统调用 spawn,用以创建一个新进程。
实验 4 :实现文件的硬链接功能
- 预先学习完成 实践 1--7
内容
硬链接要求两个不同的目录项指向同一个文件,在我们的文件系统中也就是两个不同名称目录项指向同一个磁盘块。要求实现三个系统调用 sys_linkat、sys_unlinkat、sys_stat 。
实验 5 :实现文件的硬链接功能
- 预先学习完成 实践 1--10
内容
完成对基于信号量/条件变量的同步互斥多线程程序的死锁检测