logo资料库

北航OS操作系统课程指导书.pdf

第1页 / 共147页
第2页 / 共147页
第3页 / 共147页
第4页 / 共147页
第5页 / 共147页
第6页 / 共147页
第7页 / 共147页
第8页 / 共147页
资料共147页,剩余部分请下载后查看
编者序
教师寄语
初识操作系统
实验目的
初识实验
了解实验环境
ssh—远程访问我们的环境
接触CLI Shell,告别GUI Shell
获取实验包
基础操作介绍
命令行
Linux基本操作命令
实用工具介绍
nano
Vim
GCC
Git专栏–轻松维护和提交代码
Git是什么?
Git基础指引
Git文件状态
Git三棵树
Git时光机
Git分支
Git远程仓库与本地
Git冲突与解决冲突
实验代码提交流程
实战测试
实验思考
内核、Boot和printf
实验目的
操作系统的启动
内核在哪里?
Bootloader
gxemul中的启动流程
Let's hack the kernel!
Makefile——内核代码的地图
ELF——深入探究编译与链接
MIPS内存布局——寻找内核的正确位置
Linker Script——控制加载地址
MIPS汇编与C语言
循环与判断
函数调用
通用寄存器使用约定
实战printf
实验正确结果
实验思考
内存管理
实验目的
MMU和TLB
MIPS虚存映射布局
内存管理与内存翻译
物理内存管理
初始化流程说明
内存控制块
内存分配和释放
虚拟内存管理
两级页表机制
地址转换
页目录自映射
创建页表
地址映射
page insert and page remove
访存与TLB重填
正确结果展示
实验思考
挑战性任务
进程与异常
实验目的
进程
进程控制块
设置进程控制块
加载二进制镜像
创建进程
进程运行与切换
中断与异常
异常的分发
异常向量组
时钟中断
进程调度
实验正确结果
实验思考
挑战性任务
系统调用与fork
实验目的
系统调用(System Call)
一探到底,系统调用的来龙去脉
系统调用机制的实现
基础系统调用函数
进程间通信机制(Inter-Process Communication)
FORK
初窥fork
fork的结构
返回值的秘密
父与子
实验正确结果
实验思考
挑战性任务
文件系统
实验目的
背景知识
文件系统
磁盘
IDE磁盘
内存映射I/O
IDE磁盘操作
文件系统结构
磁盘布局
块缓存
文件系统详细结构
文件系统服务
正确结果展示
实验思考
实验挑战
管道与Shell
实验目的
管道
初窥管道
管道的测试
管道的读写
管道的竞争
shell
实验正确结果
管道测试
shell测试
实验思考
操作系统实验环境
实验目的
了解操作系统实验
操作系统实验工具
交叉编译器
Linux系统
实验环境配置
Linux操作系统
安装交叉编译器
安装仿真器
实验思考
小操作系统实验 指导书 操作系统课程实验任务及相关说明 带你体验自己动手完成一个小操作系统的乐趣 年 月 日
编者序 , 哲学家们只是用不同的方式解释世界 而问题在于改变世界。 ——马克思《关于费尔巴哈的提纲》 深夜,幽幽的荧屏,杂乱的代码,诡异的错误,不知所措的我们死死地盯着屏幕,试 图解决实验里那些莫名其妙的问题。每当这时,我们都不禁抱怨:代码为什么有这么多 错误,注释为什么这么混乱,指导书内容又为何如此鸡肋。抱怨之余我们也幻想了很多 假如,相信曾挣扎于操作系统实验的人都曾这么想过:假如代码注释更完善些,假如实 验的体系和计组一样成熟,假如 我们最大的愿望,便是有一本指南针般的指导书。它可能会穿插设置一些小练习让 我们更容易上手并带来满足感,它可能会针对性地让我们对某些细节进行深度思考,它 可能会从实验角度为我们展现一个真实的操作系统,它可能会让我们着迷于操作系统实 验,它优雅而美丽,它平易而近人。假如那样,我们或许能更专注于操作系统本身设计 吧。 但我们不希望我们只在心里假如,我们想做些什么。一路走来,我们耗费了太多的 时间在不必要的地方,因此,我们不希望这样的经历延续下去,一年又一年,一届又一 届,我们想做些改变。 这正是我们重新整理并改写指导书的初衷,而你将要看到的,就是我们为改善操作 系统实验而作出的努力。仅以此书献给我们所热爱的学弟学妹们,愿它能带给你一次愉 快而奇妙的编写操作系统的体验。 学生的潜力是无穷的,但我们还只是操作系统实验改革的起点。本书还有很多不足 之处与不完善之处,但是我们可以向你许诺,不再是大量无用材料的堆砌,不再是混乱 无逻辑的排版,除很少部分的转载外,其他内容都是我们日日夜夜呕心沥血的原创。同 时,秉着减轻代码难度,加强思考深度的初心,我们创造了许多思考训练。所有的思考 训练都是我们精心设计 是世上绝无仅有的。所以我们请求你,希望你多花些时间来看 看这本书,自主思考,勇于探索,并鼓励你与伙伴积极交流。 哪天我们若能在路上听到你和小伙伴神采飞扬地讨论操作系统实验中的某个细节, 那时或许我们会在心里欣慰地轻叹一声 “为了这帮兔崽子,值了!”
在重编指导书的过程中,我们对于读者的知识掌握情况做了如下的假设。 熟练掌握 语言,特别是指针、结构体的使用。 对于 体系结构有基本的了解(正常完成了计算机组成课程实验)。 初步了解中断、异常等概念。 指导书有三种特殊标记的段落:、 和 。 表示该段内容是补充说明,或者课外延展,可以选择性地跳过。 我们需要完成的实验任务,我们将在服务器端对代码是否合格进行检查。 思考训练,无固定答案,但是需要将你的见解写在实验报告中。注意这 些思考训练不同于你以往所做的题目,它由关键代码、见解、参考资料组成。你需 要使用参考资料与你认为的关键代码对你的见解进行支撑,为了做到这一点你可 能需要做很多功课。这部分内容将作为操作系统实验成绩的重要参考。我们没有规 定固定格式,只需要在说明前标明 序号即可。 编者寄语 按姓名汉语拼音顺序排列 天道酬勤。 行胜于言。 ——何涛 ——刘乾 一个人可以走得很快,但一群人可以走得更远,我愿与你们一路同行,分享彼此 的经验与知识。 ——王鹿鸣
教师寄语 “掌握操作系统原理的最好途径就是自己编写一个操作系统,我希望大家 都能写出自己的操作系统。” ——王雷 操作系统是计算机系统的一个重要系统软件,也计算机专业教学的重要内容。该课 程概念众多、内容抽象,不仅需要讲授操作系统的原理,而且还要通过实验加深对操作 系统理解。实验对操作系统课程的学习是至关重要的,掌握操作系统原理的最好途径就 是自己编写一个操作系统。 因此,从 年我开始讲授这门课程以来,一直想寻找一个好的操作系统实验环 境。我曾经尝试过 、、、 等很多实验环境,其中还得到了微软亚 洲研究院、 中国研究院的帮助,但是一直没有找到合适的实验环境。直到 年 我发现了 的 系统,并指导学生刘智武在毕业设计期间完成了该系统实验。同 时,在操作系统课上选了两个学生尝试完成 实验,但是效果不太好,由于 启动 比较复杂,他们在前两个实验上花费的时间太多了,以至于没时间完成后面的实验。因 此,我开始尝试将实验适当简化,并移植到相对简单的 上。 正好北航计算机学院在进行教学改革,希望将硬件课与软件课打通,加强学生系统 能力的培养。在学院支持下,组织了刘阳、程致远、刘伟、朱沥可等同学,我们参考 代码,完成了向 的移植工作。特别是刘阳同学,不仅编写了代码和手册,还完成了 很多组织协调工作。这时候总算有了一个能让学生在一学期完成的、相对完整的小型操作 系统。在推广 操作系统实验时,为了保证教学连续性,我们允许学生从 、 和 操作系统中选择一个实验完成,并可以分组完成。 、 和 年选择 操作系统实验的同学人数分别为 ,,, 实验成绩也在逐步上升。在 年的计算机学院实验班、 年和 年计算机大 班中开始全面推广,并要求每个同学独立完成。在实验教学过程中,我的研究生都当过 我的助教,另外还有一些其他老师的研究生和一些本科生志愿者,这些同学共同完成了 实验手册的编写、实验代码的完善和实验环境的搭建。这些人包括蔚鹏志、谭成鑫、王 刚、王欢、李康、王振、王平、马春雷、师斌、张健、高超、康乔、禹舟健和宗毅等同学, 特别是王振和马春雷对完成了大量实验手册完善工作,高超在沃天宇老师和师斌的帮助 下独立完成了整个实验环境的搭建,宗毅完成了实验向 的部分移植工作。我可 能无法把所有人的名字列出来,但由衷地感谢他们!
最后我要感谢刘乾、王鹿鸣和何涛三位同学!他们修改了代码中的错误、加入了大 量注释,特别是他们重写了整个实验指导手册。我再次感谢他们! 本实验的目标是在一学期内,以 为基础,让学生从最基本的硬件管理功能,逐 步扩充,最后完成一个完整的系统。操作系统实验共包括“初识操作系统”、“内核制作与 启动”、“内存管理”、“进程与中断”、“系统调用”、“文件系统”(选做)和“”(选 做)等七个部分。 初识操作系统:在只有命令行的环境下,掌握 的基础命令、常用工具以及 的使用。 内核制作与启动:了解计算机在加电之后,如何引导文件,初始化基本硬件设备, 通过修改链接脚本,学习把一段程序放在指定的内存地址。 内存管理:完成初始化 ,,建立虚拟内存管理机制,并在内存中安排基 本的内核数据结构布局。 进程与中断:完成初始化进程运行环境,实现进程创建的基本方法和简单的进程调 度算法。 系统调用:进程使用内核服务都是通过系统调用的方式实现。 文件系统:实现一个基于块设备的文件系统。 命令解释程序: 功能的实现,给用户提供了访问操作系统的接口。 从实验内容可以看出,现代操作系统基本的几个功能,例如内存空间,进程管理等, 都得到实现。通过这些实验,学生能够更加深入的理解操作系统原理及其实现方法,同 时也可以在这个基础上实现自己的功能,实现更加复杂的操作系统并完成一些有挑战性 任务。 我相信,现在的实验指导手册和代码注释会使同学们在完成复杂操作系统实验时感 到一些轻松。感谢这些同学对实验做出的贡献,希望你们不辜负他们的努力,用心完成 实验。更希望你们能为实验和实验指导书提出更多的反馈意见!
操作系统实验大事表 尝试 、、、 等实验环境,还得到了微软亚洲研 究院、 中国研究院的帮助,但没有合适的实验环境。 发现 的 实验,指导刘智武在毕业设计期间完成 实验。 挑选学生尝试 实验,但是由于 的启动比较复杂,学生只完成 两个实验。开始尝试将实验移植到相对简单的 上。 北航计算机学院教学改革,在学院支持下,组织了刘阳、程致远、刘伟、 朱沥可完成了 到 的移植工作。 选择 操作系统实验的同学仅有 。 选择 操作实验的同学比例上升到 。 选择的同学增加到了 ,实验成绩稳步上升。 在北航计算机学院实验班推广,并要求学生独立完成。 在北航计算机学院大班中推广,并且在这期间,许多人作为研究生助教 与本科生志愿者参与了实验手册的编写、环境搭建与代码的完善。 有感于实验手册质量欠缺,何涛、王鹿鸣、刘乾同学完成本书的第一版 撰写。 更多的可能,期待你们来书写!
目录 编者序 教师寄语 初识操作系统 实验目的 初识实验 了解实验环境 —远程访问我们的环境 接触 ,告别 获取实验包 基础操作介绍 命令行 基本操作命令 实用工具介绍 专栏轻松维护和提交代码 是什么? 基础指引 文件状态 三棵树 时光机 分支 远程仓库与本地 冲突与解决冲突 实验代码提交流程
实战测试 实验思考 内核、 和 实验目的 操作系统的启动 内核在哪里? 中的启动流程 ——内核代码的地图 ——深入探究编译与链接 内存布局——寻找内核的正确位置 ——控制加载地址 汇编与 语言 循环与判断 函数调用 通用寄存器使用约定 实战 实验正确结果 实验思考 内存管理 实验目的 和 虚存映射布局 内存管理与内存翻译 物理内存管理 初始化流程说明 内存控制块 内存分配和释放 虚拟内存管理 两级页表机制 地址转换 页目录自映射 创建页表 地址映射 访存与 重填 正确结果展示
分享到:
收藏