实验零:操作系统实验准备
1.实验目的:
了解操作系统开发实验环境
熟悉命令行方式的编译、运行和调试过程
了解 X86
了解总体实验内容
2.准备知识:
2.1
了解 OS 实验
写一个操作系统难吗 ?别被现在上百万行的 Linux 和 Windows 操作系统吓倒。当年
Thompson 乘他老婆带着小孩度假留他一人在家时,写了 UNIX;当年 Linus 还是一个 21 岁大
学生时完成了 Linux 雏形。站在这些巨人的肩膀上,我们能否也尝试一下做“巨人”的滋味
呢?
MIT 的 Frans Kaashoek 等在 2006 年 参考 PDP-11 上的 UNIX Version 6 写了 一个可在
X86 上跑的操作系统 xv6(基于 MIT License),用于学生学习操作系统。我们可以站在他
们的肩膀上,基于 xv6 的设计,尝试着一步一步完成一个从“空空如也”到“五脏俱全”的
“麻雀”操作系统—ucore,此“麻雀”包含虚存管理、进程管理、处理器调度、同步互
斥、进程间通信、文件系统等主要内核功能,总的内核代码量(C+asm)不会超过 5K 行。充
分体现了“小而全”的指导思想。
ucore 的运行环境可以是真实的 X86 计算机,不过考虑到调试和开发的方便,我们可采
用 X86 模拟 器,比如 QEMU、BOCHS 等,或 X86 虚拟运 行环境,比如 VirtualBox、VMware
Player 等。ucore 的开发环境主要是 GCC 中的 gcc、gas、ld 和 MAKE 等工具,也可采用集成
了这些工具的 IDE 开发环境 Eclipse-CDT。运行环境和开发环境既可以在 Linux 或 Windows
中使用。
那我们准备如何一步一步实现 ucore 呢?安装一个操作系统的开发过程,我们可以有如
下的开发步骤:
1) 启动操作系统的 bootloader,用于了解操作系统启动前的状态和要做的准备工作,
了解运行操作系统的硬件支持,操作系统如何加载到内存中,理解两类中断--“外
设中断”,“陷阱中断”,内核态和用户态的区别;
2) 内存管理子系统,用于理解 x86 分段/分页模式,了解操作系统如何管理物理内存和
虚存、页表管理、一类中断-“故障中断”、缺页故障处理、基于页的内存替换;
3)
进程管理子系统,用于了解进程创建、执行、切换和结束的动态管理过程,了解在
用户态通过系统调用得到内核态的内核服务的过程;
4)
处理器调度子系统,用于理解操作系统的调度过程和调度算法;
5) 同步互斥子系统,用于了解同步互斥的具体实现以及对系统性能的影响,研究死锁
产生的原因,以及如何避免死锁;
6)
进程间通信子系统:用于了解进程间如何进行信息交换和共享;
7)
文件系统,了解文件系统的具体实现,与进程管理等的关系,了解缓存对操作系统
IO 访问的性能改进,了解虚拟文件系统(VFS)、buffer cache 和 disk driver 之
间的关系。
8) 网络协议栈(选做):了解网卡驱动、TCP/IP 协议栈实现和 Web 应用。
其中每个开发步骤都是建立在上一个步骤之上的,就像搭积木,从一个一个小木块,最
- 1
- 2
- 3
- 4
- 5
- 6
前往页