高等学校 操作系统课程庐山研讨班 北京大学信息学院 陈向群 2005 , 07

Post on 15-Mar-2016

138 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

高等学校 操作系统课程庐山研讨班 北京大学信息学院 陈向群 2005 , 07. 操作系统课程暑期研讨班 第七单元. OS 实习课程实战. 对教学操作系统的思考. 操作系统实习的重要性. OS 在计算机系统中的重要地位与作用 决定了 OS 课程的重要性 OS 复杂性也给学习带来了一定的困难 概念与思想,较概括也较抽象,理解不容易 OS 实习对于学生掌握 OS 原理是一个好的补充 真正理解 OS 原理的途径就是亲手编制一个 OS 如何设计好实习课程与实习环境 调动学生的积极性 使学生能够更好地掌握 OS 原理 - PowerPoint PPT Presentation

TRANSCRIPT

高等学校操作系统课程庐山研讨班

北京大学信息学院陈向群 2005 , 07

OS 实习课程实战

操作系统课程暑期研讨班 第七单元

对教学操作系统的思考

操作系统实习的重要性• OS 在计算机系统中的重要地位与作用 决定了 OS 课程的重要性• OS 复杂性也给学习带来了一定的困难 概念与思想,较概括也较抽象,理解不容易• OS 实习对于学生掌握 OS 原理是一个好的补充 真正理解 OS 原理的途径就是亲手编制一个 OS• 如何设计好实习课程与实习环境 调动学生的积极性 使学生能够更好地掌握 OS 原理 就是一个非常重要、非常值得认真研究的课题

对教学用操作系统的要求 - 1• 简洁性: 不能要求学生在一学期内就理解大型 OS 方方面面 现有 OS 通常太大、功能过于复杂 现有 OS 包括了很多改善性能的复杂算法 不适合教学使用• 可读性: 希望源代码可读性好 多数操作系统往往难易阅读和理解 并且包含了太多的选项和硬件驱动

• 良好的硬件细节封装性: 如果把实习内容陷入具体硬件细节的话 会忽略对系统整体的把握,不利于教学效果 要求 OS 底层能够具有良好的硬件细节封装性• 透明性; 源代码要清晰,不以效率为目标 OS 内核基本功能的实现,就足够复杂了 教学用的操作系统没有必要在效率下功夫• 文档与教材兼容性: 有关 OS 实习内容应与课程内容及教材互相呼应

对教学用操作系统的要求 - 2

Little OS 实习设计

为什么选择 Little OS - 1

• LittleOS 是 Lacroix Pascal 编写的一个基于 Intel32 位体系结构保护模式的微型操作系统

• 自由软件,所使用的部分代码也来源于自由软件• LittleOS 源代码量很少,压缩的源代码只占 117 K ,所有 C 语言源文件与头文件加在一起也不过 50 几个,而且文件的大小都在 10K 以内,多数只有 2

K 到 3K 规模合适,分析代码任务量不大,在一两个月里可以完成• LittleOS 实现的功能很简单 源代码符合简洁性与可读性的要求 各个程序模块的功能也相当透明

• LittleOS 是一个很“微小”的操作系统• 引导系统启动,然后进入保护模式 并开放键盘和时钟中断(再简单不过)• 在我们选用 LittleOS时 LittleOS 正处于初期开发阶段之中 是一个空的 OS 进程管理、内存管理、文件系统等都没有 一个空的 OS ,为学生们提供了广阔的实习空间

为什么选择 Little OS - 2

为什么选择 Little OS - 3

MUPS虚拟机 内存( 8

K)通 道

硬 盘( 64K)

C P U

终端( 用户

1)

终端( 用户

2)终端

( 用户3)

终端( 用户

N)虚拟机

命令输入运行输出

在给定的虚拟机上实现一个多任务、多用户的交互式操作系统 MUPS ,该系统能够完成文件管理、内存管理、进程管理、用户管理等操作系统的基本功能,并能在其上运行给定的虚拟机指令编写的程序

虚拟机组成• CPU 完成基本的运算和控制功能。包含有一个通用寄存器、一个指令指针寄存器、三个中断寄存器(时钟中断、程序中断和 I/O 中断)以及一个通道状态寄存器• 存储区 分为用户存储区和系统存储区,其中用户区占 8K ,系统区认为是无限的,且对于存储区的访问不需要时间• 硬盘 存放用户的可执行文件和数据文件,其传输速度为每一个时钟周期传输一簇• 时钟 用于驱动整个虚拟机的运行, CPU 在每一个时钟周期里能够执行一条指令• 终端 用户与操作系统交互的主要界面,用户的命令通过终端输入,命令的运行结果也可以通过终端输出

可完成的功能• 命令解释器 即 shell ,用户的命令输入都由命令解释器负责解释和执行,是系统启动初始化之后装入内存的第一个进程• 用户管理 支持多用户,每一个登陆到系统的用户都有一个自己的 shell进程在运行• 进程管理 系统中所有的进程是并行执行的,包括 shell进程和用户进程,进程可以创建子进程,调度算法自定• 文件管理 对 64K 的虚拟硬盘进行分簇管理,要求支持目录结构和对文件的权限管理,实现对文件的复制、删除以及对目录的创建、删除、切换等基本操作• 内存管理 虚拟机硬盘上的可执行文件都必须先装入内存后才能运行,要求实现页式存储管理,页面大小自定• 附属功能 提供伪编译程序,将文本方式的可执行文件“编译”成为可装入内存的可执行文件;显示系统某些重要指标(如当前用户标识、当前进程信息等),提供系统运行性能统计(如总用户数、总进程数、 CPU 利用率、通道利用率、内存利用率等)

组织形式• 实习要求由四人组成一组完成,每组有一名负责人• 在按要求建立起虚拟机的基础上,实现 MU

PS 操作系统,并且利用提供的虚拟机指令编写两个能在虚拟机上运行的有意义的程序• 实习结束时以组为单位提交详细的分析和设计文档,并对富有特色的扩充功能进行说明

总结 实习内容目标非常明确,就是通过实习来加深实习者对于操作系统原理的认识,而且其内容也比较全面而充实,对操作系统原理中进程、用户、内存、文件管理等各个主要方面都有要求,对于其他的一些方面(如 I/O 、编译等)也有所触及。通过这几年的实习情况来看,确实对学生掌握操作系统原理有很大的帮助与促进,实习内容设计得是比较成功的

问题 尤为突出的是与计算机硬件相脱离。操作系统在计算机软件中处于基础地位,其与硬件的关系是最为密切的,所以在操作系统实习的过程中丝毫不涉及硬件,仍然使系统如同空中楼阁,就不免有纸上谈兵的感觉,还是没有与应用实际紧密结合。当然,目前的实习内容屏蔽硬件细节也是有一定的原因的,众所周知要实现一个真正能在硬件上运行的操作系统有相当的难度,不仅需要操作系统原理自身的知识,对于微机原理、系统结构等方面知识的掌握也有很高的要求,而从我们现在的课程设置与安排来看,这样的要求还很难达到。另外时间安排也制约了实习内容的进一步深入,通常处理硬件细节需要花费系统编制过程中相当大比例的时间和精力,在实际的系统开发中往往会花费几个月甚至几年,要在一个学期的时间里完成这样的工作的确极为困难,尽管实习比实际的系统开发已经作了相当大的简化

• 以小型 “自由”操作系统作为基础系统本身与计算机硬件紧密相连提供对硬件的接口可以简化工作实习工作在基础系统中展开• 借鉴模块化的设计思想把系统功能划分为几个层次每个层次划分为几个功能模块• 对基础系统进行连续的扩充每学期实习课程中做一部分工作所有工作保存在一个“库”中逐步实现所有的系统功能

为什么选择 Little OS - 4

LittleOS 功能 - 1

• 实现非常简单,没有实现用户界面 (即 Shell)• 只有一个简单的中断处理:–在系统初始化完毕之后,它开放了时钟和键盘中断–实际运行的时候,可以看见相应中断处理时的标记( * 与 ! 的显示)

• 实现了基本的中断处理机制• 实现了一个基于空闲表链的内存管理器 LM

M( List-based Memory Manager)• 给出了相应的系统接口函数

LittleOS 功能 - 2

• 没有进程的概念,也没有文件系统的概念,但是它对这些概念已经有了足够的底层支持• 提供了标准输出的概念,实现了对字符串的处理与内存拷贝函数,在此基础之上它实现了屏幕的格式化输出(其中的部分代码来自 Mach 和 Linux)

LittleOS 功能 - 3

LittleOS 基础结构 - 1

• 基础系统功能 可把基础系统看作是一个通用的系统启动管理程序 在逻辑上可以分解为:– 系统初始化代码段– 内存管理 LMM 模块– 中断模块– I/O支持模块和一个最小的系统支持库

基础系统模块图

LittleOS 基础结构 - 2

基础系统核心功能非常简单,它没有实现用户界面(即 Shell),而只是做了一个简单的中断处理的演示——在系统初始化完毕之后,它开放了时钟和键盘中断。实际运行的时候,可以看见相应中断处理时的标记,即在屏幕上显示字符“ *” 与“!”

LittleOS 基础结构 - 3

LittleOS 基础结构 - 4

该基础系统实现了基本的中断处理机制,并且实现了一个基于空闲表链的内存管理器 LMM( List-based Memory Manager ,由 Utah 大学的 Computer Systems Laboratory(CSL)提供),并给出了相应的系统接口函数。尽管目前的基础系统内没有进程的概念,也没有文件系统的概念,但是它已经有了足够的、对这些概念的底层支持。此外基础系统也提供了标准输出的概念,实现了对字符串的处理与内存拷贝函数,在此基础之上它实现了屏幕的格式化输出,需要说明的是其中的部分代码来自于 Mach 和 Linux

LittleOS 基础结构 - 5

基础系统在保护模式下接管计算机系统,并对硬件作相应的检测与初始化,如检测CPU 的具体型号和物理内存的大小,并对中断控制器和时钟控制器编程。接下来它初始化重要的系统表格(如 GDT 和 IDT),并且依照启动参数的信息对内存管理的相应数据结构进行初始化,至此系统环境已经初步建立

LittleOS 基础结构 - 6

内存管理 LMM - 1• LMM 一个基于线性表的灵活的内存分配、管理模块 按照 Amiga 的低级内存管理系统的思想设计• LMM 的优点: 内存利用率高。通过对齐方式调整的限制,在每次内存分配中最多只会浪费 14字节。特别对于 8字节对齐的内存分配根本不会浪费内存 对按照特定属性进行内存分配提供了支持。可以按照任意 2 的 N次幂为对齐方式分配内存,同时也可以以 2的 N次幂加任意偏移量对齐方式来分配内存 可以在指定的地址范围内分配一块内存。例如,有时需要在物理内存的前 16M 内或前 1M 内分配指定的内存

不足之处:• 它要求调用者记住每一个分配内存块的尺寸大小,在调用 lmm_free()函数释放内存时必须把这个 size 作为参数传入 这样,在此内存管理的最外层调用 malloc()函数时就必须记住所分配的每一块内存的尺寸大小

内存管理 LMM - 2

• 因为在进行内存分配时总要对一个单链表进行连续的顺序查找,所以 LMM 不能达到像那些对不同尺寸大小的内存块分别使用不同空闲块表进行管理的内存管理那样的高速分配• 它不能自动增加空闲块表(例如调用 sbrk()或类似的函数);如果内存不足,分配就只能失败• 它可能会在多线程环境下出错,不包含任何内部的互斥代码

内存管理 LMM - 3

• 基础系统已经为实现 OS 各种基本功能做好了准备• 对于内存管理、中断处理等机制都提供了比较完备的底层支持• 给在实习中进一步对系统进行完善开发打下了很好的基础• 学生不必与硬件有过多的接触,不需要再去处理大量与硬件相关的问题,而只要使用基础系统所提供的接口,完成自己的实习工作

内存管理 LMM - 3

基于 LittleOS 的实习任务 - 1

对 LittleOS进行扩展,在某一个或几个方面实现操作系统的基本功能进程管理 内存管理文件系统 用户管理硬件驱动 ……

采用层次结构 把实习的目标系统划分为三个层次:–基本系统层: 实现操作系统的基本功能,包括进程调度、内存管理、文件系统和用户管理等 可以 LMM 为基础来实现传统的高速内存分配技术 可以实现一个“ LMM池”这样的数据结构 可在一个程序中有多个 LMM共存

基于 LittleOS 的实习任务 - 2

–完善系统层: 完善系统的各项功能,内存从简单的线性链表管理,经过封装扩展实现段页式管理,实现简单图形用户界面等等–扩充系统层:

在基本完整的系统中添加必要的功能 比如文本编辑、设备管理、网络接口等

基于 LittleOS 的实习任务 - 3

LittleOS扩展 - 1

• 进程管理–建立线程、进程的概念及相应数据结构– 多进程的调度– 多种进程调度算法

• 内存管理–固定的分页管理– 分段、段页式管理–虚拟内存管理

LittleOS扩展 - 2

• 文件系统– 用内存模拟的文件系统管理– 面向真正磁盘的文件系统管理– 多种文件系统组织方式

• 用户管理– 完善人机交互界面( Shell)– 多用户权限管理– 多种用户级别、关系的组织

LittleOS扩展 - 3

• 硬件驱动–键盘、鼠标等设备的驱动– 硬盘驱动(最好结合文件系统)–网卡驱动(最好附加简单的网络功能)

关于实习任务的说明 - 1

• 各小组可以根据提供的参考自己确定实习的具体任务。小组间不要有重复• 实习的最低要求,是扩展某一个方面的功能,并能顺利正确地运行,提供清晰的演示• 在最低要求的基础上,希望能够进行比较有特色的更高级扩展,包括完善功能、增加应用等• 代码编写的过程中,尽量采用模块化或面向对象的方法,考虑各部分代码的封装,并明确彼此之间的接口

关于实习任务的说明 - 2

• 操作系统各部分间不可避免地具有一定的关联(如进程管理需要内存管理的支持)。系统中必不可少的基础部分,各小组可以协同开发,共享成果• 各小组要注意突出自己的特色部分。这部分是实习任务的关键,要求独立完成

Little OS 实习效果 - 1

通过五届( 1996-2000) 学生的实习• 已对基础系统进行了必要的功能扩展设计• 教学用操作系统已基本成形• 具备了一个操作系统的各个基本功能模块

• 中断机制 编写 I/O 中断处理程序• 进程管理 建立初步的进程表结构,通过中断进行进程的切换   定义消息的格式,初步实现消息发送接收机制• 内存管理 提供关于内存分配、回收、重定位等主要接口 实现段式存储管理• 文件系统 编制了一个硬盘的模拟程序 磁盘调度、空闲块管理算法已经基本完成 Shell• 完成一个 Shell 核 可方便处理 Linux 式的命令及参数

Little OS 实习效果 - 2

Little OS 实习效果 - 3

Nachos 操作系统课实验环境

Nachos介绍 加州 Berkeley 大学研发的教学用操作系统 Nachos: Not Another Completely Heuristic Op

erating System

“I hear and I forget, I see and I remember, I do and I understand.”

-- Chinese proverb

Nachos 的特点

• Nachos 作为一个普通用户进程,不需要特权;• 可在多种 UNIX 环境下工作,如: Linux 、 Sol

aris 等• 网上远程实验• 学生可方便地修改 Nachos 中的各部分,并观察修改效果,而不需要了解其它细节

Nachos 是一个可修改和跟踪的操作系统教学软件。它给出了一个支持多线程和虚拟存储的操作系统骨架,可让学生在较短的时间内对操作系统中的基本原理和核心算法有一个全面和完整的了解

软件模拟的机器硬件• Nachos 是建立在一个软件模拟的虚拟机上的。这个虚拟

机包括计算机的基本部分 , 如 CPU 、主存、中断系统,还有一些外部设备 , 如键盘、显示器、网络、以及磁盘系统

• 如: Machine类用来模拟计算机主机。它提供的功能有 :读写寄存器、读写主存 ,运行一条用户程序的汇编指令 ,运行用户程序 , 单步调试用户程序 ,显示主存和寄存器状态 ,将虚拟内存地址转换为物理内存地址等等

• 用软件模拟硬件具有可靠性高和便于监视程序工作的好处。学生不需要对特定的硬件进行控制,可把主要精力用于操作系统的基本原理

Nachos进程管理• 提供了一套基本的进程管理系统和一个信号量的实

现 ;• 可以一条指令一条指令地跟踪进程切换的过程;• 提供了一个进程系统 , 可以在它上面编写并发性程

序 , 并测试这些程序;• Nachos 是一个多线程的操作系统,用户程序的多线程是用多个用户程序解释进程实现的;

宿主机 CPU 和寄存器

系统线程

系统线程

系统线程

系统线程 用户程序用户进程

系统线程 用户程序

系统线程 用户程序

虚拟机 CPU 和寄存器

Nachos 中的系统进程和用户进程

Nachos 的进程结构

信号量 条件变量 锁

Thread类

模拟中断模块 正文切换模块 进程调度模块

用户程序

Nachos 文件系统• Disk 模拟了一个物理磁盘• SynchDisk类在物理磁盘的基础上定义了磁盘的抽象界面;进程提出读写请求后将睡眠等待 , 以后在磁盘中断的处理函数中唤醒它• FileHeader管理一个文件块在磁盘上分布情况的数据结构• OpenFile 实现文件的读写操作• FileSystem提供了一些用文件名来操作文件的功能• Directory 由一组目录项组成 ,每个目录项代表一个文件

Fi l eHeader

Fi l eSystem OpenFi l e Di rectory

SynchDi sk

Di sk

Nachos 的虚拟存储管理

采用页式管理,虚拟地址向物理内存地址变换的过程由页表或快表控制。页表和快表的数据项的结构是一样的,都由一个虚拟页号,一个物理页号和一些其它的标志组成

基于 Nachos 的操作系统课实验安排• 处理机调度算法• 进程同步• 虚拟存储管理• 文件系统

处理机调度实验• 实验提供操作系统的代码框架,但不包括文件系统、网络支持、虚存和用户级编程支持,只有线程结构和相关的一些材料• 实验的任务:读懂这些代码,并实现几个调度算法:先来先服务( FCFS)、优先级(抢先式、非抢先式)、轮转和多级排队• 实验的工作:修改文件只有两个: scheduler.cc和 scheduler.h ;主要的修改函数只有两个: Sc

heduler::ShouldISwitch 和 Scheduler::FindNextToRun

进程同步实验• 实现同步原语• 锁和条件变量• 再用信号灯来实现读者 - 作者问题

虚拟存储管理实验• 提供地址转换和页表结构• 实验任务是要给出缺页处理程序 实现二种页面替换算法–最少使用算法( LFU)–最近最少使用算法( LRU)

文件系统实验 Nachos提供了一基本文件系统,但有以下不足:• 不支持层次目录结构,只有一个根目录 所有文件都在此目录下• 目录大小不可变,有一个目录只能含有最多文件数的限制• 文件大小是固定的,在它生成时规定• 没有文件系统的系统调用• 本实验的任务就是要解决上述问题

Finally, a former student had the following suggestions for doing well in this course, and since we agree with all of them, we include them here:

• Read the code that is handed out with the assignment first, until you pretty much understand it. Start with the ".h" files.

• Don't code until you understand what you are doing. Design, design, and design first. Only then split up what each of you will code.

• Talk to as many other people as possible. CS is learned by talking to others, not by reading, or so it seems to me now.

一名参加 Nachos 实验的学生体会

嵌入式操作系统 eCos 的分析与移植

eCos 实习基本概况• 实习内容: 分析移植 eCos嵌入式操作系统• 实习组织: 本科生 OS 实习小组, 2-4人• 实习时间: 一学期• 实习成果形式: 要求写出相关的 eCos 内核分析报告• 该实习工作已经延续了三届学生

eCos介绍 - 1

• eCos 是 Red Hat 的产品之一 可用于手持电脑及移动电话等等嵌入式系统 在工业控制领域也有大量应用• eCos 是一种开放源码,自由版权 高度可配置的嵌入式操作系统 可根据用户需求修改和裁剪系统内核组件功能 并对系统作硬件层次的优化

• 开发宿主机 : Windows NT, Windows 95, Unix • 支持目标处理器 : PPC, Motorola PowerPC (821, 823, 860) Matsushita MN 10300; Toshiba TX-39 • 支持目标板 / 机 : TX39 Evaluation Board JMR3904 MN10300 Standard Evaluation Board Cogent PowerPC • 支持编译器 : Cygnus GNUPro C and C++

eCos介绍 - 2

• 支持开发工具 : Cygnus GNUPro Toolkit: 嵌入式开发工具 , 能与目标机上的 eCos交互 eCos configuration tool: 图形化源代码级配置及优化工具 eCos simulators: eCos 模拟器 Insight debugger: 调试工具 Cygnus Source-Navigator: Windows 和 UNIX 平台下集成开发环境• 支持协议 : TCP/IP, physical layer Ethernet serial connection

eCos介绍 - 3

eCos 实习效果• 实习成果– 分析了 eCos 的内核机制– 完成了对 eCos 的移植– 使用和掌握了有关的开发环境和工具– 对现代嵌入式 OS 以及各种开发环境和工具有了深入认识

• 实习体会– 普遍反映收获很大– “ 对在课堂上学到的知识有了感性的认识;更加体会到操作系统作为软件的核心对其开发者的要求是全方位的;不仅是软件,硬件知识也是不可或缺的;另外很重要的一点就是系统设计整体上的把握必须很准确。”

MIT OS Engineering

MIT开放课件• 理念–公开自由的分享知识和交流思想

• 影响–遍及全世界,推动北美、亚洲的开放课件运动

• 价值–知识作为全人类的共同财富

MIT OS Engineering

• 概况– 研究生课程

• 教学形式– 讲课、实习、测验、跟踪

• 教员配置– 一位教授、多位助教

• 硬件配置– Sun Solaris服务器

• 课程难度– 具有清晰的硬件知识、对 C 语言有深刻理解

北美其它学校 OS 实习• Princeton• NYU• 课程内容和安排基本与 MIT 相同• 源代码目录树也相同

PKU 操作系统实习• 内容安排– 采用 MIT OS Engineering 的课程内容

• 难度设置– 同学普遍反映太难

• 效果反馈– 成功完成实习的同学认为能力得到很大提高

实习方式• 单独完成实验• 在已有的代码上完成实习• 鼓励相互交流经验,禁止抄袭• 每个实习前有一次讲课,要求规定时间内完成实习• 实习结束时助教和同学直接交流,要求同学在规定时间内回答给定的问题

MIT OS 实习内容• 概述– 分为 4 个 lab ,附有源代码及实验指导文档– MIT配备专用 Sun Solaris 服务器供学生实习– 以 Bochs X86 模拟器作为运行平台

对操作系统课程的深化• 内存管理• 进程• 文件系统和设备管理

实习反馈• 课程难度大• 预备知识多• 代码细节复杂• 调试困难• 能力提高大– 锻炼调试能力– 锻炼源代码阅读能力(复杂具有技巧性的源代码)– 锻炼编写底层代码能力

• 知识理解深– 知识具体化– 抽象理论的具体实现

实习内容• 硬件– 主要由学生自己解决– OS 实验室提供两台 PC 机供学生使用

• 软件– Linux开发环境– Bochs 模拟器– pdf 阅读工具

实习 lab1 (1)

• 实验目的– 熟悉 Linux开发环境• 文本编辑、解压缩文档、命令行编译器、 ma

ke工具• Linux 下程序安装步骤

– 熟悉 Bochs 模拟器• 下载源代码、按照安装说明编译安装源文件

– 深入理解 C 语言的机器模型• C 的参数传递规则,函数调用过程中栈的变化

实习 lab1 (2)

• 实验内容•熟悉目录树的结构• Bochs 下运行程序,源代码与机器代码的对应•引导扇区的识别• 位置无关代码的原理,编译链接的内容• Gcc参数传递时堆栈结构,临时寄存器, Ca

ller-Saved寄存器, Callee-Saved寄存器• C 语言中 setjmp/longjmp 的实现

实习 lab1 (3)

• 实习难点– 目录树结构,目录下文件的内容和作用– Makefile 的内容,参数项的意义– 汇编源代码

• 注意– Lab1 实习指导中实习步骤很清晰,没有太大困难– 但是实际上 Lab1 内容丰富,希望深入了解的学生需要自己查找资料

实习 lab1 (4)

• 时间预计– 安装和熟悉 Linux开发环境, 1天– 完成 lab1 ,回答实习指导书中的问题,编写实验报告, 1周– 补充 X86 体系结构和基本的汇编知识, 3天

实习 lab2 (1)• 实验目的– PC 机的引导过程• 引导扇区的内容和作用• CPU初始化后各个寄存器的内容• 实模式到保护模式的切换

– X86 体系结构的内存管理• gdt , ldt , tss描述符的结构和作用• 页目录、页表的内容和作用• 段式管理和页式管理的内容及其相互切换

– 汇编语言和 C 语言的交互• 汇编调用 C函数, C 语言调用汇编函数• C 中汇编函数的原型声明

实习 lab2 (2)

• 实验内容– 实现 OS boot loader– 完成内存管理所需要的设置和初始化相应的数据结构– 实现内核态下的输出

实习 lab2 (3)• 实习难点– 关键文件的整体结构,程序执行的整体流程– 需要代码阅读技巧,否则或者容易陷入代码细节,或者流于空谈,无法实现技巧性代码– 编译链接过程中对符号的操作以及符号的地址解析– 内核页目录和页表的权限设置– 有效的调试,猜测、试验、确证

• 注意– 对汇编和 X86 体系结构必须有相当的了解,否则许多代码无法读懂– 实习需要一定技巧,要求对 X86 有一定理解

实习 lab2 (4)

• 时间预计– 熟悉目录树中文件内容, 1天– 熟悉各种硬件相关知识, 5天– 编写代码和实验报告, 7天

• 注意– lab2 具有一定难度,许多函数不能一次编写正确,即使通过测试仍然可能存在错误– 页表和页目录的各种权限设置容易出错,而且极难调试,需要耐心

实习 lab3 (1)• 实验目的– 中断和异常的派发和处理• idt表的设置• 只处理时钟中断

– 进程调度和管理• tss段的设置•进程切换时的堆栈结构和堆栈操作• a.out 文件格式以及进程产生原理

– 编写复杂精细的汇编代码– 检验 lab2 中的内存管理– Linux 下源代码树的合并

实习 lab3 (2)

• 实验内容– 实现时钟中断,在屏幕上不断输出“ *”号– 实现两个进程,相互切换

实习 lab3 (3)

• 实习难点– 需要掌握许多硬件知识– 与 lab2紧密相关, lab2 的错误渗透到 lab3– 硬件不同位的错误都可能引起非常不同的错误现象,调试需要非常大的耐心

• 注意– 如果没有底层调试经验,应该强调代码的反复测试– 掌握硬件相关知识是前提– 强调渐进式开发,坚决杜绝先编码后调试,应该编码测试、调试同时进行

实习 lab3 (4)

• 时间预计– 此时每个同学的进度将出现差别– 时间视基础而定,代码调试一般需要 10天– 回答实习指导问题和编写实习报告, 4天

实习 lab4 (1)

• 实习目的– 用户态与核心态之间的切换– 理解多任务操作系统的核心 fork函数– 系统调用的实现及安全问题– 进程间通信的实现

实习 lab4 (2)

• 实习内容– 实现用户态的 fork函数– 进程间通信,实现两个乒乓球进程– 实现系统调用,对用户提供库接口

• 注意– 源代码中包含的内容非常丰富,警告同学不要陷入不必要的枝节– 要求相当熟悉 linux 环境下的程序开发

实习 lab4 (3)• 实习难点– 全面检验 lab2 和 lab3• 许多错误来自 lab2 中页表和页目录的权限设置• lab3进程切换如果考虑不周全也会引起错误

– 多处代码需要深入思考,需要创造性思维• 实现页表和页目录内容的引用• inline 的巧妙运用• 父进程和子进程的关系• 页故障嵌套处理

– X86 下系统编程的知识• 页故障的出错含义及其恢复

– 实现用户态下的 fork函数• 堆栈操作实现错误处理的派发

实习 lab4 (4)

• 时间预计– 最具有挑战性,许多代码非常具有技巧– 不少同学无法做完 lab4– 不少同学没有按照规定实现 lab4 ,因为不理解规定的实现途径– 预计需要 3周时间编写和调试代码– 需要 1周时间编写实验报告

• 注意– 需要非常强调软件开发方法,许多无法调试的错误的根源在于急于编写代码而不理解代码– 错误的思维必然导致错误的代码

实习 lab5/6 (1)

• 实验目的– 理解内核之上的文件服务– 理解 shell 的工作原理– 理解多进程间存在的竞争问题

实习 lab5/6 (2)• 实验内容– 实现文件服务•磁盘管理,空闲块位图,根目录• 文件结构抽象及其管理• 文件描述符的实现• 内存映象方式的文件系统实现• 基于进程间通信方式的文件操作

– 实现 shell• 实现键盘中断处理• 实现管道• 实现 spawn函数

实习 lab5/6 (3)• 实习难点– 理解文件系统的层次结构及其实现•磁盘层次• 文件服务器层次• 用户层次

– spawn函数中堆栈操作– 扩展 shell 功能

• 注意– 实习指导非常详尽的解释了 lab5/6 的实验步骤– 关键是扩展 shell 的功能,需要发挥创造性

实习 lab5/6 (4)

• 时间预计– lab5/6 代码编写和报告, 14天– 如果前面 lab 的实现有错误可能需要更长的时间去追踪和确认

同学反馈• 课程内容非常优秀– 其它课程如数据结构,编写的代码都不难,只要往下编,就会出结果,只需稍微调试– 而 OS 实习写代码时心里完全没有底,出错后也不知道哪里出的错,相比其它课程,代码更加复杂

• 课程可以改造人的思想– 面对无比复杂和庞大的代码陷阱,只有敬畏– 彻底颠覆了对计算机的认知,没想到计算机可以用来折磨人– 衣带渐宽终不悔,为伊消得人憔悴,只有为生活奋斗的人,才配享受生活

top related