940 likes | 1.15k Views
高等学校 操作系统课程庐山研讨班 北京大学信息学院 陈向群 2005 , 07. 操作系统课程暑期研讨班 第七单元. OS 实习课程实战. 对教学操作系统的思考. 操作系统实习的重要性. OS 在计算机系统中的重要地位与作用 决定了 OS 课程的重要性 OS 复杂性也给学习带来了一定的困难 概念与思想,较概括也较抽象,理解不容易 OS 实习对于学生掌握 OS 原理是一个好的补充 真正理解 OS 原理的途径就是亲手编制一个 OS 如何设计好实习课程与实习环境 调动学生的积极性 使学生能够更好地掌握 OS 原理
E N D
高等学校操作系统课程庐山研讨班北京大学信息学院陈向群2005,07高等学校操作系统课程庐山研讨班北京大学信息学院陈向群2005,07
操作系统课程暑期研讨班第七单元 OS实习课程实战
操作系统实习的重要性 • OS在计算机系统中的重要地位与作用 决定了OS课程的重要性 • OS复杂性也给学习带来了一定的困难 概念与思想,较概括也较抽象,理解不容易 • OS实习对于学生掌握OS原理是一个好的补充 真正理解OS原理的途径就是亲手编制一个OS • 如何设计好实习课程与实习环境 调动学生的积极性 使学生能够更好地掌握OS原理 就是一个非常重要、非常值得认真研究的课题
对教学用操作系统的要求 - 1 • 简洁性: 不能要求学生在一学期内就理解大型OS方方面面 现有OS通常太大、功能过于复杂 现有OS包括了很多改善性能的复杂算法 不适合教学使用 • 可读性: 希望源代码可读性好 多数操作系统往往难易阅读和理解 并且包含了太多的选项和硬件驱动
对教学用操作系统的要求 - 2 • 良好的硬件细节封装性: 如果把实习内容陷入具体硬件细节的话 会忽略对系统整体的把握,不利于教学效果 要求OS底层能够具有良好的硬件细节封装性 • 透明性; 源代码要清晰,不以效率为目标 OS内核基本功能的实现,就足够复杂了 教学用的操作系统没有必要在效率下功夫 • 文档与教材兼容性: 有关OS实习内容应与课程内容及教材互相呼应
为什么选择Little OS - 1 • LittleOS是Lacroix Pascal编写的一个基于Intel32位体系结构保护模式的微型操作系统 • 自由软件,所使用的部分代码也来源于自由软件 • LittleOS源代码量很少,压缩的源代码只占117 K,所有C语言源文件与头文件加在一起也不过50几个,而且文件的大小都在10K以内,多数只有2K到3K 规模合适,分析代码任务量不大,在一两个月里可以完成 • LittleOS实现的功能很简单 源代码符合简洁性与可读性的要求 各个程序模块的功能也相当透明
为什么选择Little OS - 2 • LittleOS是一个很“微小”的操作系统 • 引导系统启动,然后进入保护模式 并开放键盘和时钟中断(再简单不过) • 在我们选用LittleOS时 LittleOS正处于初期开发阶段之中 是一个空的OS 进程管理、内存管理、文件系统等都没有 一个空的OS,为学生们提供了广阔的实习空间
MUPS虚拟机 在给定的虚拟机上实现一个多任务、多用户的交互式操作系统MUPS,该系统能够完成文件管理、内存管理、进程管理、用户管理等操作系统的基本功能,并能在其上运行给定的虚拟机指令编写的程序 内存(8K) 终端 (用户1) 命令输入 C P U 通 道 运行输出 硬 盘(64K) 终端 (用户N) 虚拟机 终端 (用户2) 终端 (用户3)
虚拟机组成 • CPU 完成基本的运算和控制功能。包含有一个通用寄存器、一个指令指针寄存器、三个中断寄存器(时钟中断、程序中断和I/O中断)以及一个通道状态寄存器 • 存储区 分为用户存储区和系统存储区,其中用户区占8K,系统区认为是无限的,且对于存储区的访问不需要时间 • 硬盘 存放用户的可执行文件和数据文件,其传输速度为每一个时钟周期传输一簇 • 时钟 用于驱动整个虚拟机的运行,CPU在每一个时钟周期里能够执行一条指令 • 终端 用户与操作系统交互的主要界面,用户的命令通过终端输入,命令的运行结果也可以通过终端输出
可完成的功能 • 命令解释器 即shell,用户的命令输入都由命令解释器负责解释和执行,是系统启动初始化之后装入内存的第一个进程 • 用户管理 支持多用户,每一个登陆到系统的用户都有一个自己的shell进程在运行 • 进程管理 系统中所有的进程是并行执行的,包括shell进程和用户进程,进程可以创建子进程,调度算法自定 • 文件管理 对64K的虚拟硬盘进行分簇管理,要求支持目录结构和对文件的权限管理,实现对文件的复制、删除以及对目录的创建、删除、切换等基本操作 • 内存管理 虚拟机硬盘上的可执行文件都必须先装入内存后才能运行,要求实现页式存储管理,页面大小自定 • 附属功能 提供伪编译程序,将文本方式的可执行文件“编译”成为可装入内存的可执行文件;显示系统某些重要指标(如当前用户标识、当前进程信息等),提供系统运行性能统计(如总用户数、总进程数、CPU利用率、通道利用率、内存利用率等)
组织形式 • 实习要求由四人组成一组完成,每组有一名负责人 • 在按要求建立起虚拟机的基础上,实现MUPS操作系统,并且利用提供的虚拟机指令编写两个能在虚拟机上运行的有意义的程序 • 实习结束时以组为单位提交详细的分析和设计文档,并对富有特色的扩充功能进行说明
总结 实习内容目标非常明确,就是通过实习来加深实习者对于操作系统原理的认识,而且其内容也比较全面而充实,对操作系统原理中进程、用户、内存、文件管理等各个主要方面都有要求,对于其他的一些方面(如I/O、编译等)也有所触及。通过这几年的实习情况来看,确实对学生掌握操作系统原理有很大的帮助与促进,实习内容设计得是比较成功的
问题 尤为突出的是与计算机硬件相脱离。操作系统在计算机软件中处于基础地位,其与硬件的关系是最为密切的,所以在操作系统实习的过程中丝毫不涉及硬件,仍然使系统如同空中楼阁,就不免有纸上谈兵的感觉,还是没有与应用实际紧密结合。当然,目前的实习内容屏蔽硬件细节也是有一定的原因的,众所周知要实现一个真正能在硬件上运行的操作系统有相当的难度,不仅需要操作系统原理自身的知识,对于微机原理、系统结构等方面知识的掌握也有很高的要求,而从我们现在的课程设置与安排来看,这样的要求还很难达到。另外时间安排也制约了实习内容的进一步深入,通常处理硬件细节需要花费系统编制过程中相当大比例的时间和精力,在实际的系统开发中往往会花费几个月甚至几年,要在一个学期的时间里完成这样的工作的确极为困难,尽管实习比实际的系统开发已经作了相当大的简化
为什么选择Little OS - 4 • 以小型 “自由”操作系统作为基础 • 系统本身与计算机硬件紧密相连 • 提供对硬件的接口可以简化工作 • 实习工作在基础系统中展开 • 借鉴模块化的设计思想 • 把系统功能划分为几个层次 • 每个层次划分为几个功能模块 • 对基础系统进行连续的扩充 • 每学期实习课程中做一部分工作 • 所有工作保存在一个“库”中 • 逐步实现所有的系统功能
LittleOS功能 - 1 • 实现非常简单,没有实现用户界面 (即Shell) • 只有一个简单的中断处理: • 在系统初始化完毕之后,它开放了时钟和键盘中断 • 实际运行的时候,可以看见相应中断处理时的标记(*与!的显示)
LittleOS功能 - 2 • 实现了基本的中断处理机制 • 实现了一个基于空闲表链的内存管理器LMM(List-based Memory Manager) • 给出了相应的系统接口函数
LittleOS功能 - 3 • 没有进程的概念,也没有文件系统的概念,但是它对这些概念已经有了足够的底层支持 • 提供了标准输出的概念,实现了对字符串的处理与内存拷贝函数,在此基础之上它实现了屏幕的格式化输出(其中的部分代码来自Mach和Linux)
LittleOS基础结构 - 1 • 基础系统功能 可把基础系统看作是一个通用的系统启动管理程序 在逻辑上可以分解为: • 系统初始化代码段 • 内存管理LMM模块 • 中断模块 • I/O支持模块和一个最小的系统支持库
LittleOS基础结构 - 2 基础系统模块图
LittleOS基础结构 - 3 基础系统核心功能非常简单,它没有实现用户界面(即Shell),而只是做了一个简单的中断处理的演示——在系统初始化完毕之后,它开放了时钟和键盘中断。实际运行的时候,可以看见相应中断处理时的标记,即在屏幕上显示字符“*”与“!”
LittleOS基础结构 - 5 该基础系统实现了基本的中断处理机制,并且实现了一个基于空闲表链的内存管理器LMM(List-based Memory Manager,由Utah大学的Computer Systems Laboratory(CSL)提供),并给出了相应的系统接口函数。尽管目前的基础系统内没有进程的概念,也没有文件系统的概念,但是它已经有了足够的、对这些概念的底层支持。此外基础系统也提供了标准输出的概念,实现了对字符串的处理与内存拷贝函数,在此基础之上它实现了屏幕的格式化输出,需要说明的是其中的部分代码来自于Mach和Linux
LittleOS基础结构 - 6 基础系统在保护模式下接管计算机系统,并对硬件作相应的检测与初始化,如检测CPU的具体型号和物理内存的大小,并对中断控制器和时钟控制器编程。接下来它初始化重要的系统表格(如GDT和IDT),并且依照启动参数的信息对内存管理的相应数据结构进行初始化,至此系统环境已经初步建立
内存管理LMM - 1 • LMM一个基于线性表的灵活的内存分配、管理模块 按照Amiga的低级内存管理系统的思想设计 • LMM的优点: 内存利用率高。通过对齐方式调整的限制,在每次内存分配中最多只会浪费14字节。特别对于8字节对齐的内存分配根本不会浪费内存 对按照特定属性进行内存分配提供了支持。可以按照任意2的N次幂为对齐方式分配内存,同时也可以以2的N次幂加任意偏移量对齐方式来分配内存 可以在指定的地址范围内分配一块内存。例如,有时需要在物理内存的前16M内或前1M内分配指定的内存
内存管理LMM - 2 不足之处: • 它要求调用者记住每一个分配内存块的尺寸大小,在调用lmm_free()函数释放内存时必须把这个size作为参数传入 这样,在此内存管理的最外层调用malloc()函数时就必须记住所分配的每一块内存的尺寸大小
内存管理LMM - 3 • 因为在进行内存分配时总要对一个单链表进行连续的顺序查找,所以LMM不能达到像那些对不同尺寸大小的内存块分别使用不同空闲块表进行管理的内存管理那样的高速分配 • 它不能自动增加空闲块表(例如调用sbrk()或类似的函数);如果内存不足,分配就只能失败 • 它可能会在多线程环境下出错,不包含任何内部的互斥代码
内存管理LMM - 3 • 基础系统已经为实现OS各种基本功能做好了准备 • 对于内存管理、中断处理等机制都提供了比较完备的底层支持 • 给在实习中进一步对系统进行完善开发打下了很好的基础 • 学生不必与硬件有过多的接触,不需要再去处理大量与硬件相关的问题,而只要使用基础系统所提供的接口,完成自己的实习工作
基于LittleOS的实习任务 - 1 对LittleOS进行扩展,在某一个或几个方面实现操作系统的基本功能 进程管理 内存管理 文件系统 用户管理 硬件驱动 ……
基于LittleOS的实习任务 - 2 采用层次结构 把实习的目标系统划分为三个层次: • 基本系统层: 实现操作系统的基本功能,包括进程调度、内存管理、文件系统和用户管理等 可以LMM为基础来实现传统的高速内存分配技术 可以实现一个“LMM池”这样的数据结构 可在一个程序中有多个LMM共存
基于LittleOS的实习任务 - 3 • 完善系统层: 完善系统的各项功能,内存从简单的线性链表管理,经过封装扩展实现段页式管理,实现简单图形用户界面等等 • 扩充系统层: 在基本完整的系统中添加必要的功能 比如文本编辑、设备管理、网络接口等
LittleOS扩展 - 1 • 进程管理 • 建立线程、进程的概念及相应数据结构 • 多进程的调度 • 多种进程调度算法 • 内存管理 • 固定的分页管理 • 分段、段页式管理 • 虚拟内存管理
LittleOS扩展 - 2 • 文件系统 • 用内存模拟的文件系统管理 • 面向真正磁盘的文件系统管理 • 多种文件系统组织方式 • 用户管理 • 完善人机交互界面(Shell) • 多用户权限管理 • 多种用户级别、关系的组织
LittleOS扩展 - 3 • 硬件驱动 • 键盘、鼠标等设备的驱动 • 硬盘驱动(最好结合文件系统) • 网卡驱动(最好附加简单的网络功能)
关于实习任务的说明 - 1 • 各小组可以根据提供的参考自己确定实习的具体任务。小组间不要有重复 • 实习的最低要求,是扩展某一个方面的功能,并能顺利正确地运行,提供清晰的演示 • 在最低要求的基础上,希望能够进行比较有特色的更高级扩展,包括完善功能、增加应用等 • 代码编写的过程中,尽量采用模块化或面向对象的方法,考虑各部分代码的封装,并明确彼此之间的接口
关于实习任务的说明 - 2 • 操作系统各部分间不可避免地具有一定的关联(如进程管理需要内存管理的支持)。系统中必不可少的基础部分,各小组可以协同开发,共享成果 • 各小组要注意突出自己的特色部分。这部分是实习任务的关键,要求独立完成
Little OS实习效果 - 1 通过五届(1996-2000)学生的实习 • 已对基础系统进行了必要的功能扩展设计 • 教学用操作系统已基本成形 • 具备了一个操作系统的各个基本功能模块
Little OS实习效果 - 2 • 中断机制 编写I/O中断处理程序 • 进程管理 建立初步的进程表结构,通过中断进行进程的切换 定义消息的格式,初步实现消息发送接收机制 • 内存管理 提供关于内存分配、回收、重定位等主要接口 实现段式存储管理 • 文件系统 编制了一个硬盘的模拟程序 磁盘调度、空闲块管理算法已经基本完成Shell • 完成一个Shell核 可方便处理Linux式的命令及参数
Nachos介绍 加州Berkeley 大学研发的教学用操作系统 Nachos: Not Another Completely Heuristic Operating System “I hear and I forget, I see and I remember, I do and I understand.” -- Chinese proverb
Nachos的特点 Nachos是一个可修改和跟踪的操作系统教学软件。它给出了一个支持多线程和虚拟存储的操作系统骨架,可让学生在较短的时间内对操作系统中的基本原理和核心算法有一个全面和完整的了解 • Nachos作为一个普通用户进程,不需要特权; • 可在多种UNIX环境下工作,如:Linux、Solaris等 • 网上远程实验 • 学生可方便地修改Nachos中的各部分,并观察修改效果,而不需要了解其它细节
软件模拟的机器硬件 • Nachos是建立在一个软件模拟的虚拟机上的。这个虚拟机包括计算机的基本部分, 如CPU、主存、中断系统,还有一些外部设备,如键盘、显示器、网络、以及磁盘系统 • 如:Machine类用来模拟计算机主机。它提供的功能有:读写寄存器、读写主存,运行一条用户程序的汇编指令,运行用户程序,单步调试用户程序,显示主存和寄存器状态,将虚拟内存地址转换为物理内存地址等等 • 用软件模拟硬件具有可靠性高和便于监视程序工作的好处。学生不需要对特定的硬件进行控制,可把主要精力用于操作系统的基本原理
Nachos进程管理 • 提供了一套基本的进程管理系统和一个信号量的实现 ; • 可以一条指令一条指令地跟踪进程切换的过程; • 提供了一个进程系统,可以在它上面编写并发性程序,并测试这些程序; • Nachos是一个多线程的操作系统,用户程序的多线程是用多个用户程序解释进程实现的;
Nachos 中的系统进程和用户进程 宿主机CPU和寄存器 系统线程 系统线程 系统线程 系统线程 系统线程 系统线程 用户程序 用户程序 用户程序 用户进程 虚拟机CPU和寄存器
Nachos文件系统 • Disk模拟了一个物理磁盘 • SynchDisk类在物理磁盘的基础上定义了磁盘的抽象界面;进程提出读写请求后将睡眠等待,以后在磁盘中断的处理函数中唤醒它 • FileHeader管理一个文件块在磁盘上分布情况的数据结构 • OpenFile实现文件的读写操作 • FileSystem提供了一些用文件名来操作文件的功能 • Directory由一组目录项组成,每个目录项代表一个文件
Nachos的虚拟存储管理 采用页式管理,虚拟地址向物理内存地址变换的过程由页表或快表控制。页表和快表的数据项的结构是一样的,都由一个虚拟页号,一个物理页号和一些其它的标志组成