logo资料库

Nachos 中文教程.doc

第1页 / 共159页
第2页 / 共159页
第3页 / 共159页
第4页 / 共159页
第5页 / 共159页
第6页 / 共159页
第7页 / 共159页
第8页 / 共159页
资料共159页,剩余部分请下载后查看
第一章绪论
第一节Nachos概述
一、引言
二、Nachos教学用操作系统
第二节Nachos的实验环境
一、Nachos的安装
二、Nachos的目录结构
三、各个部分的编译运行
四、应用程序的编译
第二章机器模拟
第一节概述
第二节机器模拟的实现
1. Sysdep模块分析(文件sysdep.cc sysdep.h)
1.1 PoolFile 函数
1.2 OpenForWrite 函数
1.3 OpenForReadWrite 函数
1.4 Read 函数
1.5 ReadPartial 函数
1.6 WriteFile 函数
1.7 Lseek 函数
1.8 Tell 函数
1.9 Close 函数
1.10 Unlink 函数
1.11 OpenSocket 函数
1.12 CloseSocket 函数
1.13 AssignNameToSocket 函数
1.14 DeAssignNameToSocket 函数
1.15 PoolSocket 函数
1.16 ReadFromSocket 函数
1.17 SendToSocket 函数
1.18 CallOnUserAbort 函数
1.19 Delay 函数
1.20 Abort 函数
1.21 Exit 函数
1.22 RandomInit 函数
1.23 Random 函数
1.24 AllocBoundedArray 函数
1.25 DeallocBoundedArray 函数
2.中断模块分析(文件interrupt.cc interrupt.h)
2.1 PendingInterrupt类
2.2 Interrupt类
2.2.1 内部使用方法
2.2.1.1 CheckIfDue 方法
2.2.1.2 ChangeLevel 方法
2.2.2 内部使用函数
2.2.2.1 PrintPending 函数
2.2.3 对外接口
2.2.3.1 构造方法
2.2.3.2 析构方法
2.2.3.3 SetLevel方法
2.2.3.4 Enable方法
2.2.3.5 OneTick方法
2.2.3.6 YieldOnReturn方法
2.2.3.7 Idle方法
2.2.3.8 Halt方法
2.2.3.9 Schedule方法
2.2.3.10 DumpState方法
3. 时钟中断模块分析(文件timer.cc timer.h)
4. 终端设备模块分析(文件console.cc console.h)
5. 磁盘设备模块分析(文件disk.cc disk.h)
6. Nachos运行情况统计(文件stats.cc stats.h)
第三章线程管理系统
第一节进程与线程
一、进程
1. 进程概念
2. 进程的状态及状态变化
3. 进程调度
4. 进程之间的同步和互斥
5. 进程的实施
6. 进程的创建
二、线程
1. 线程概念
2. 进程和线程的关系
第二节Nachos的线程管理
一、Nachos的线程管理
二、Nachos线程管理同实际进程管理的不同
第三节Nachos线程管理系统的初步实现
1. 工具模块分析(文件list.cc list.h utility.cc utility.h)
2. 线程启动和调度模块分析(文件switch.s switch.h)
2.1 ThreadRoot函数
2.2 SWITCH函数
3. 线程模块分析(文件thread.cc thread.h)
3.1 Fork 方法
3.2 StackAllocate 方法
3.3 Yield 方法
3.4 Sleep 方法
4. 线程调度算法模块分析(文件scheduler.cc scheduler.h)
4.1 Run方法
5.Nachos主控模块分析(文件main.cc system.cc system.h)
6. 同步机制模块分析(文件synch.cc synch.h)
6.1 信号量 ( Semaphore )
6.2 锁机制
6.3条件变量
第四节线程管理系统作业
第五节实现实例
4.1 对线程的改进
4.2 对线程调度的改进
第四章文件管理系统
第一节文件管理系统概述
一、文件
1. 文件结构
2. 文件访问
3. 文件类型
4. 文件属性
5. 文件操作
二、目录
1. 目录结构
2. 多级目录结构
3. 文件路径名
4. 工作目录
5. 目录结构的勾连
6. 目录项
三、UNIX文件系统的实现
1. UNIX文件系统中的主要结构
2. UNIX文件系统存储资源的分配和回收
第二节Nachos文件管理系统
第三节Nachos文件系统的实现
1. 同步磁盘分析(文件synchdisk.cc 、synchdisk.h)
2. 位图模块分析(文件bitmap.cc、bitmap.h)
3. 文件系统模块分析(文件filesys.cc、filesys.h)
3.1生成方法
3.2Create方法
3.3Open方法
3.4Remove方法
4. 文件头模块分析(文件filehdr.cc、filehdr.h)
5. 打开文件结构分析(文件openfile.cc、openfile.h)
5.1ReadAt方法
5.2WriteAt方法
6. 目录模块分析(文件directory.cc directory.h)
第四节文件管理系统作业
第五章 用户程序和虚拟内存
第一节Nachos 对内存、寄存器以及CPU的模拟
1 RaiseException 方法
2 ReadMem 方法
3 WriteMem 方法
4 Translate方法
5 Run 方法
第二节Nachos用户进程运行机制
一、用户程序空间(文件address.cc, address.h)
1.1生成方法
1.2InitRegisters方法
1.3SaveState方法
1.4RestoreState方法
二、系统调用(文件exception.cc, syscall.h, start.s)
第三节 虚存管理的设计和实现
一、Nachos存储管理的改进要求
二、一个虚拟存储管理实现的实例
2.1 虚拟存储系统的总体设计
2.2 缺页中断陷入及其调度算法
2.3 虚存的存储分配
2.4 存储保护
2.5 实现中的一些细节
第四节 用户程序和虚拟存储作业
第六章 Nachos的网络系统
第一节Nachos对物理网络的模拟
第二节Nachos的邮局协议
2.1 PostalDelivery方法
2.2 Send方法
第三节网络部分作业
目 录 第一章 绪论.......................................................................................1 第一节 NACHOS 概述.................................................................... 1 一、引言....................................................................................... 1 二、Nachos 教学用操作系统......................................................2 第二节 NACHOS 的实验环境........................................................6 一、Nachos 的安装...................................................................... 6 二、Nachos 的目录结构..............................................................6 三、各个部分的编译运行...........................................................7 四、应用程序的编译...................................................................8 第二章 机器模拟...............................................................................9 第一节 概述 ................................................................................. 9 第二节 机器模拟的实现.............................................................15 1. Sysdep 模块分析(文件 sysdep.cc sysdep.h).....................15 1.1 PoolFile 函数.....................................................................15 1.2 OpenForWrite 函数...........................................................15 1.3 OpenForReadWrite 函数...................................................15 1.4 Read 函数.......................................................................... 16 1.5 ReadPartial 函数................................................................17 1.6 WriteFile 函数................................................................... 17 1.7 Lseek 函数.........................................................................17 1.8 Tell 函数............................................................................ 17 1.9 Close 函数......................................................................... 18 1.10 Unlink 函数..................................................................... 19 1.11 OpenSocket 函数.............................................................19 1.12 CloseSocket 函数............................................................ 19 1.13 AssignNameToSocket 函数............................................ 19 1.14 DeAssignNameToSocket 函数....................................... 20 1.15 PoolSocket 函数..............................................................20 1.16 ReadFromSocket 函数.................................................... 20 1.17 SendToSocket 函数.........................................................20 1.18 CallOnUserAbort 函数....................................................21 i
目 录 1.19 Delay 函数.......................................................................21 1.20 Abort 函数....................................................................... 21 1.21 Exit 函数..........................................................................22 1.22 RandomInit 函数.............................................................22 1.23 Random 函数...................................................................22 1.24 AllocBoundedArray 函数................................................22 1.25 DeallocBoundedArray 函数............................................23 2. 中断模块分析(文件 interrupt.cc interrupt.h).................. 23 2.1 PendingInterrupt 类............................................................26 2.2 Interrupt 类......................................................................... 27 2.2.1 内部使用方法............................................................. 28 2.2.2 内部使用函数............................................................. 29 2.2.3 对外接口..................................................................... 30 3. 时钟中断模块分析(文件 timer.cc timer.h)..................... 33 4. 终端设备模块分析(文件 console.cc console.h)............. 36 5. 磁盘设备模块分析(文件 disk.cc disk.h).........................38 6. Nachos 运行情况统计(文件 stats.cc stats.h)....................40 第三章 线程管理系统...................................................................42 第一节 进程与线程.....................................................................42 一、进程..................................................................................... 42 1. 进程概念............................................................................. 42 2. 进程的状态及状态变化.....................................................42 3. 进程调度............................................................................. 44 4. 进程之间的同步和互斥.....................................................46 5. 进程的实施......................................................................... 47 6. 进程的创建......................................................................... 48 二、线程..................................................................................... 48 1. 线程概念............................................................................. 48 2. 进程和线程的关系............................................................. 50 第二节 NACHOS 的线程管理......................................................51 一、Nachos 的线程管理............................................................51 二、Nachos 线程管理同实际进程管理的不同....................... 55 i i
目 录 第三节 NACHOS 线程管理系统的初步实现..............................56 1. 工具模块分析(文件 list.cc list.h utility.cc utility.h)........56 2. 线程启动和调度模块分析(文件 switch.s switch.h).......57 2.1 ThreadRoot 函数................................................................ 58 2.2 SWITCH 函数....................................................................58 3. 线程模块分析(文件 thread.cc thread.h)..........................59 3.1 Fork 方法...........................................................................62 3.2 StackAllocate 方法............................................................63 3.3 Yield 方法..........................................................................65 3.4 Sleep 方法......................................................................... 65 4. 线程调度算法模块分析(文件 scheduler.cc scheduler.h)67 4.1 Run 方法.............................................................................67 5. Nachos 主控模块分析(文件 main.cc system.cc system.h) 68 6. 同步机制模块分析(文件 synch.cc synch.h)................... 70 6.1 信号量 ( Semaphore )...................................................... 70 6.2 锁机制............................................................................... 71 6.3 条件变量........................................................................... 72 第四节 线程管理系统作业........................................................ 74 第五节 实现实例.........................................................................78 4.1 对线程的改进......................................................................78 4.2 对线程调度的改进..............................................................80 第四章 文件管理系统.....................................................................84 第一节 文件管理系统概述........................................................ 84 一、文件..................................................................................... 84 1. 文件结构............................................................................. 84 2. 文件访问............................................................................. 86 3. 文件类型............................................................................. 87 4. 文件属性............................................................................. 87 5. 文件操作............................................................................. 88 二、目录..................................................................................... 89 1. 目录结构............................................................................. 89 i i i
目 录 2. 多级目录结构..................................................................... 90 3. 文件路径名......................................................................... 90 4. 工作目录............................................................................. 90 5. 目录结构的勾连................................................................. 90 6. 目录项................................................................................. 91 三、UNIX 文件系统的实现......................................................92 1. UNIX 文件系统中的主要结构...........................................92 2. UNIX 文件系统存储资源的分配和回收...........................94 第二节 NACHOS 文件管理系统..................................................99 第三节 NACHOS 文件系统的实现............................................102 1. 同步磁盘分析(文件 synchdisk.cc 、synchdisk.h).......102 2. 位图模块分析(文件 bitmap.cc、bitmap.h)...................104 3. 文件系统模块分析(文件 filesys.cc、filesys.h)............105 3.1 生成方法......................................................................... 106 3.2 Create 方法.......................................................................107 3.3 Open 方法.........................................................................107 3.4 Remove 方法....................................................................108 4. 文件头模块分析(文件 filehdr.cc、filehdr.h)................108 5. 打开文件结构分析(文件 openfile.cc、openfile.h)...... 109 5.1 ReadAt 方法..................................................................... 111 5.2 WriteAt 方法.....................................................................111 6. 目录模块分析(文件 directory.cc directory.h)................112 第四节 文件管理系统作业.......................................................114 第五章 用户程序和虚拟内存.......................................................116 第一节 NACHOS 对内存、寄存器以及 CPU 的模拟...................116 1 RaiseException 方法..........................................................121 2 ReadMem 方法...................................................................122 3 WriteMem 方法..................................................................122 4 Translate 方法......................................................................122 5 Run 方法.............................................................................123 第二节 NACHOS 用户进程运行机制............................................125 一、用户程序空间(文件 address.cc, address.h)................125 i v
目 录 1.1 生成方法......................................................................... 126 1.2 InitRegisters 方法.............................................................127 1.3 SaveState 方法................................................................. 127 1.4 RestoreState 方法.............................................................127 二、系统调用(文件 exception.cc, syscall.h, start.s)..........128 第三节 虚存管理的设计和实现.............................................. 131 一、Nachos 存储管理的改进要求..........................................131 二、一个虚拟存储管理实现的实例.......................................131 2.1 虚拟存储系统的总体设计.............................................131 2.2 缺页中断陷入及其调度算法.........................................135 2.3 虚存的存储分配............................................................. 138 2.4 存储保护......................................................................... 138 2.5 实现中的一些细节......................................................... 139 第四节 用户程序和虚拟存储作业.......................................... 141 第六章 NACHOS 的网络系统.....................................................142 第一节 NACHOS 对物理网络的模拟............................................142 第二节 NACHOS 的邮局协议........................................................149 2.1 PostalDelivery 方法............................................................ 152 2.2 Send 方法............................................................................ 153 第三节 网络部分作业...............................................................154 v
第一章 绪论 第一节 Nachos概述 第一章 绪论 第一节 Nachos概述 一、引言 计算机操作系统是一门实践性很强的课程。一般地阐述其工作原 理,很可能使本来具体生动的内容变得十分抽象、枯燥并难以理 解。解决好理论与实践相结合的问题是提高操作系统教学质量的 关键。一门好的操作系统实践课将使读者更加形象和深刻地理解 课堂中讲述的概念、原理和它们的应用。 国内外许多著名的大学都在操作系统教学实践方面作了大量研 究,比较突出的有著名计算机专家 A.S.Tanenbaum 设计和实现的 MINIX。MINIX 是一个比较完整的操作系统,它的用户界面类 似于 UNIX。说它比较完整,是因为它包括了进程管理、文件系 统管理、存储管理、设备管理以及 I/O 管理等操作系统的所有重 要内容,而且还包含了系统启动和 Shell 等实际操作系统不可缺 少的部分。由于 MINIX 较 UNIX 的出现晚十年,所以在程序风 格上较原来的 UNIX 要好得多,更加结构化和模块化。包含有 3000 行注释的 12000 行源代码使整个系统较为容易阅读和理解。 但是 MINIX 作为教学用操作系统有它的不足之处,就是由于它 的目标是一个完整的操作系统,必然要和具体的设备打交道;而 且不同的机器指令集需要有不同的编译器,所以 MINIX 的移植 性并不令人满意。一个 MINIX 操作系统需要占据一台独立的主 机,所以在网络的配置和实现上比较复杂,读者需要有一定的实 践经验才能完成。 上海交通大学开发的 MOS 操作系统是另一个较成功的教学用操 作系统。它是一个小型而功能较齐全的多道程序的操作系统,主 要包括作业调度管理和文件系统管理,建立在一个只包含十几条 指令的指令集虚拟机基础之上。由于 MOS 比较简单,读者可以 非常容易地理解操作系统课程中讲述的进程调度和文件系统等 部分原理。MOS 的不足是过于简单,不能涵盖操作系统的大部 1
第一章 绪论 第一节 Nachos概述 分功能。MOS 的虚拟机指令集是自定义的,没有现成的编译器, 所以读者必须直接编写汇编程序才能在 MOS 虚拟机上运行。这 样就缺乏开发大型应用程序的能力。但是 MOS 毕竟给了读者一 个自由发挥的空间,在 MOS 的基础上衍生出 TOS 等学生自己定 义和实现的相对完整的操作系统。 二、Nachos教学用操作系统 作为教学用操作系统,需要实现简单并且尽量缩小与实际操作系 统之间的差距,所以我们采用 Nachos 作为操作系统课程的教学 实践平台。Nachos 是美国加州大学伯克莱分校在操作系统课程 中已多次使用的操作系统课程设计平台,在美国很多大学中得到 了应用,它在操作系统教学方面具有一下几个突出的优点:  采用通用虚拟机 Nachos 是建立在一个软件模拟的虚拟机之上的,模拟了 MIPS R2/3000 的指令集、主存、中断系统、网络以及磁盘系统等操 作系统所必须的硬件系统。许多现代操作系统大多是先在用 软件模拟的硬件上建立并调试,最后才在真正的硬件上运行。 用软件模拟硬件的可靠性比真实硬件高得多,不会因为硬件 故障而导致系统出错,便于调试。虚拟机可以在运行时报告 详尽的出错信息,更重要的是采用虚拟机使 Nachos 的移植变 得非常容易,在不同机器上移植 Nachos,只需对虚拟机部分 作移植即可。 采用 R2/3000 指令集的原因是该指令集为 RISC 指令集,其指 令数目比较少。Nachos 虚拟机模拟了其中的 63 条指令。由于 R2/3000 指令集是一个比较常用的指令集,许多现有的编译器 如 gc++能够直接将 C 或 C++源程序编译成该指令集的目标代 码,于是就不必编写编译器,读者就可以直接用 C/C++语言 编写应用程序,使得在 Nachos 上开发大型的应用程序也成为 可能。 2
第一章 绪论 第一节 Nachos概述  使用并实现了操作系统中的一些新的概念 随着计算机技术和操作系统技术的不断发展,产生了很多新 的概念。Nachos 将这些新概念融入操作系统教学中,包括网 络、线程和分布式应用。而且 Nachos 以线程作为一个基本概 念讲述,取代了进程在以前操作系统教学中的地位。 Nachos 的虚拟机使得网络的实现相当简单。与 MINIX 不同, Nachos 只是一个在宿主机上运行的一个进程。在同一个宿主 机上可以运行多个 Nachos 进程,各个进程可以相互通讯,作 为一个全互连网络的一个节点;进程之间通过 Socket 进行通 讯,模拟了一个全互连网络。  确定性调试比较方便;随机因素使系统运行更加真实 因为操作系统的不确定性,所以在一个实际的系统中进行多 线程调试是比较困难的。由于 Nachos 是在宿主机上运行的进 程,它提供了确定性调试的手段。所谓确定性调试,就是在 同样的输入顺序、输入参数的情况下,Nachos 运行的结果是 完全一样的。在多线程调试中,可以将注意力集中在某一个 实际问题上,而不受操作系统不确定性的干扰。 另外,不确定性是操作系统所必须具有的特征,Nachos 采用 了随机因子模拟了真实操作系统的不确定性。  简单而易于扩展 Nachos 是一个教学用操作系统平台,它必须简单而且有一定 的扩展余地。Nachos 不是向读者展示一个成功的操作系统, 而是让读者在一个框架下发挥自己的创造性进行扩展。例如 一个完整的类似于 UNIX 的文件系统是很复杂的,但是对于 文件系统来说,无非是需要实现文件的逻辑地址到物理地址 的映射以及实现文件 inode、打开文件结构、线程打开文件表 等重要的数据结构以及维护它们之间的关系。Nachos 中具有 所有这些内容,但是在很多方面作了一定的限制,比如只有 一级索引结构限制了系统中最大文件的大小。读者可以应用 3
分享到:
收藏