没有合适的资源?快使用搜索试试~ 我知道了~
首页Nachos中文教程1
《Nachos中文教程1:引言、Nachos教学用操作系统、NACHOS的实验环境、Nachos的目录结构、各个部分的编译运行、...
需积分: 0 1 下载量 182 浏览量
更新于2023-11-24
评论
收藏 831KB PDF 举报
Nachos中文教程是一份1500字的文件,内容主要总结了关于Nachos操作系统的教学使用。文件按照章节顺序分为引言、Nachos教学用操作系统和NACHOS的实验环境三个部分。 在引言部分,首先对文件的目录结构进行了简要介绍,包括第一章的绪论和第二节的NACHOS概述。其中,绪论部分给出了文件的主题和目的,即介绍Nachos操作系统的教学使用。NACHOS(Not Another Completely Heuristic Operating System)是一个用于操作系统教育的模拟操作系统。在第二节NACHOS概述中,对Nachos操作系统的实验环境进行了详细描述,包括安装和配置。 在Nachos教学用操作系统部分,首先介绍了Nachos的目录结构,并解释了各个目录的作用。接着介绍了各个部分的编译和运行方法,包括Nachos内核、线程和进程、调度算法等。此外,还介绍了应用程序的编译方法。 在NACHOS的实验环境部分,首先详细介绍了Nachos的安装方法,包括所需的软件和环境设置。然后,介绍了Nachos的调试工具和核心文件的编译过程。最后,给出了一些实例,展示了如何编译运行简单的Nachos应用程序。 整个文件围绕Nachos操作系统进行了详细的描述,从安装、配置到编译运行的过程,全面解释了Nachos的使用方法。此外,文件还提供了一些实例,方便读者理解和实践。
资源详情
资源评论
资源推荐
第二章 机器模拟 第二节 机器模拟
的实现
12
1.10 Unlink 函数
语法:
bool Unlink (char *name)
参数:
name: 文件名
功能:
删除文件。
实现:
通过 unlink 系统调用。
返回:
删除成功,返回 TRUE;否则返回 FALSE。
1.11 OpenSocket 函数
语法:
int OpenSocket ()
参数:
无
功能:
申请一个 socket。
实现:
通过 socket 系统调用。
其中 AF_UNIX 参数说明使用 UNIX 内部协议。(Nachos 是用 SOCKET 文件来模拟网
络节点,所以采用 UNIX 内部协议。向该文件读写内容分别代表从该节点读取内容和
向该网络节点发送内容)
SOCK_DGRAM 参数说明采用无连接定长数据包型的数据链路。
返回:
申请到的 socket ID。
1.12 CloseSocket 函数
语法:
void CloseSocket (int sockID)
参数:
sockID: socket 标识
功能:
释放一个 socket。
实现:
通过 close 系统调用。
返回:
无。
1.13 AssignNameToSocket 函数
语法:
void AssignNameToSocket(char *socketName, int sockID)
参数:
socketName: socket 文件名
sockID: socket 标识
功能:
将一个文件名和一个 socket 标识联系起来,于是将一个 SOCKET 文件同一个 Nachos
进程连接起来,使宿主机上该 Nachos 进程成为一个网络节点。
实现:
通过 bind 系统调用。
返回:
无。
1.14 DeAssignNameToSocket 函数
语法:
void DeAssignNameToSocket(char *socketName)
参数:
socketName: socket 文件名
功能:
将一个文件名删除,实际上是和相应的 socket 标识脱离关系。
实现:
通过 unlink 系统调用。
返回:
无。
1.15 PoolSocket 函数
语法:
bool PoolSocket (int sockID)
参数:
socketID: socket 标识
功能:
查询一个 socket 是否有内容可以读取。
实现:
调用 PoolFile。在 UNIX 中 socket 标识和普通的文件标识没有本质的区别,可以采用
第二章 机器模拟 第二节 机器模拟
的实现
13
相同的方式操作;Nachos 中的网络收发信息的模拟实际上是文件操作。
返回:
socket 中有内容,返回 TRUE;否则返回 FALSE。
1.16 ReadFromSocket 函数
语法:
void ReadFromSocket (int sockID, char *buffer, int packetSize)
参数:
socketID: socket 标识
buffer: 读取内容的暂存空间
packetSize: 读取数据包的大小
功能:
从一个 socket 标识中读取 packetSize 大小的数据包,放在 buffer 缓冲中。
实现:
通过 recvfrom 系统调用。
返回:
无。
1.17 SendToSocket 函数
语法:
void SendToSocket (int sockID, char *buffer, int packetSize, char *toName)
参数:
socketID: socket 标识
buffer: 发送内容的暂存空间
packetSize: 发送数据包的大小
toName: 要接收数据包的 Nachos 虚拟机模拟网络文件的文件名
功能:
向 socket 标识中发送 packetSize 大小的数据包。
实现:
通过 sendto 系统调用。
Nachos 的网络处理中断程序会检查和自己相连的模拟网络 SOCKET 文件中是否有内
容可读。
当 Nachos 需要向其它节点发送信息时,需要指明其它节点的地址,实际上就是和其它
节点相连的模拟网络 SOCKET 文件名。
返回:
无。
1.18 CallOnUserAbort 函数
语法:
void CallOnUserAbort (VoidNoArgFunctionPtr func)
参数:
func: 函数指针
功能:
设定一个函数,在用户强制退出系统时调用。
实现:
通过 signal 系统调用。
返回:
无。
1.19 Delay 函数
语法:
void Delay (int seconds)
参数:
seconds: 需要延迟的秒数
功能:
系统延迟一定的时间。
实现:
通过 sleep 系统调用。
返回:
无。
1.20 Abort 函数
语法:
void Abort ()
参数:
无
功能:
退出系统 (非正常退出)。
实现:
通过 abort 系统调用。
返回:
无。
第二章 机器模拟 第二节 机器模拟
的实现
14
1.21 Exit 函数
语法:
void Exit (int exitCode)
参数:
exitCode: 向系统的返回值
功能:
退出系统。
实现:
通过 exit 系统调用。
返回:
无。
1.22 RandomInit 函数
语法:
void RandomInit (unsigned seed)
参数:
seed: 随机数产生魔数
功能:
初始化随机数发生器。
实现:
通过 srand 系统调用。
返回:
无。
1.23 Random 函数
语法:
int RandomInit ()
参数:
无
功能:
产生一个随机整数。
实现:
通过 rand 系统调用。
返回:
产生的随机整数。
1.24 AllocBoundedArray 函数
语法:
char * AllocBoundedArray (int size)
参数:
size: 需要申请的空间大小
功能:
申请一个受保护的存储空间。
实现:
通过 mprotect 的系统调用,申请一块比 size 较大的空间,并且在要申请空间两头区域
的属性设置成不可访问;当用户使用不当时(使用到受保护范围之外时),系统会接收
到 SIGSEGV 信号。不是每个操作系统都支持这样的内存申请,如果支持的话,对监
测内存的使用是否恰当非常有用。
返回:
申请成功后指针,该指针指向可以访问的申请空间,而不是指向受限区域的开始。
1.25 DeallocBoundedArray 函数
语法:
void DeallocBoundedArray (char *ptr, int size)
参数:
ptr: 要释放空间的指针
size: 申请的空间大小
功能:
将受保护的存储空间释放。
实现:
通过 mprotect 系统调用;释放的空间包括头尾受限区域,所以必须知道原来申请区域
的大小。
返回:
无。
2. 中断模块分析(文件interrupt.cc interrupt.h)
中断模块的主要作用是模拟底层的中断机制。可以通过该模拟机制来启动和禁止中断
(SetLevel);该中断机制模拟了 Nachos 系统需要处理的所有的中断,包括时钟中断、磁盘中
断、终端读/终端写中断以及网络接收/网络发送中断。
中断的发生总是有一定的时间。比如当向硬盘发出读请求,硬盘处理请求完毕后会发生中断;
在请求和处理完毕之间需要经过一定的时间。所以在该模块中,模拟了时钟的前进。为了实
第二章 机器模拟 第二节 机器模拟
的实现
15
现简单和便于统计各种活动所占用的时间起见,Nachos 规定系统时间在以下三种情况下前
进:
l 执行用户态指令
执行用户态指令,时钟前进是显而易见的。我们认为,Nachos 执行每条指令所需时间
是固定的,为一个时钟单位(Tick)。
l 重新打开中断
一般系统态在进行中断处理程序时,需要关中断。但是中断处理程序本身也需要消耗时
间,而在关闭中断到重新打开中断之间无法非常准确地计算时间,所以当中断重新打开
的时候,加上一个中断处理所需时间的平均值。
l 就绪队列中没有进程
当系统中没有就绪进程时,系统处于 Idle 状态。这种状态可能是系统中所有的进程都在
等待各自的某种操作完成。也就是说,系统将在未来某个时间发生中断,到中断发生的
时候中断处理程序将进行中断处理。在系统模拟中,有一个中断等待队列,专门存放将
来发生的中断。在这种情况下,可以将系统时间直接跳到中断等待队列第一项所对应的
时间,以免不必要的等待。
当前面两种情况需要时钟前进时,调用 OneTick 方法。OneTick 方法将系统态和用户态的时
间分开进行处理,这是因为用户态的时间计算是根据用户指令为单位的;而在系统态,没有
办法进行指令的计算,所以将系统态的一次中断调用或其它需要进行时间计算的单位设置为
一个固定值,假设为一条用户指令执行时间的 10 倍。
虽然 Nachos 模拟了中断的发生,但是毕竟不能与实际硬件一样,中断发生的时机可以是任
意的。比如当系统中没有就绪进程时,时钟直接跳到未处理中断队列的第一项的时间。这实
际情况下,系统处于 Idel 状态到中断等待队列第一项发生时间之间,完全有可能有其它中断
发生。由于中断发生的时机不是完全随机的,所以在 Nachos 系统中运行的程序,不正确的
同步程序也可能正常运行,我们在此需要密切注意。
Nachos 线程运行有三种状态:
l Idle 状态
系统 CPU 处于空闲状态,没有就绪线程可以运行。如果中断等待队列中有需要处理的
除了时钟中断以外的中断,说明系统还没有结束,将时钟调整到发生中断的时间,进行
中断处理;否则认为系统结束所有的工作,退出。
l 系统态
Nachos 执行系统程序。Nachos 虽然模拟了虚拟机的内存,但是 Nachos 系统程序本身的
运行不是在该模拟内存中,而是利用宿主机的存储资源。这是 Nachos 操作系统同真正
操作系统的重要区别。
l 用户态
系统执行用户程序。当执行用户程序时,每条指令占用空间是 Nachos 的模拟内存(见
第五章)。
Nachos 需要处理的中断种类有:
TimerInt:
时钟中断
DiskInt:
磁盘(读/写)中断
ConsoleWriteInt:
终端写中断
ConsoleReadInt:
终端读终端
NetworkSentInt:
网络发送中断
NetworkRecvInt:
网络接收中断
第二章 机器模拟 第二节 机器模拟
的实现
16
时钟前进判断
有无中断发生
中断等待队列是 Nachos 虚拟机最重要的数据结构之一,它记录了当前虚拟机可以预测的将
在未来发生的所有中断。当系统进行了某种操作可能引起未来发生的中断时,如磁盘的写入、
向网络写入数据等都会将中断插入到中断等待队列中;对于一些定期需要发生的中断,如时
钟中断、终端读取中断等,系统会在中断处理后将下一次要发生的中断插入到中断等待队列
中。中断的插入过程是一个优先队列的插入过程,其优先级是中断发生的时间,也就是说,
先发生的中断将优先得到处理。
当时钟前进或者系统处于 Idle 状态时,Nachos 会判断中断等待队列中是否有要发生的中断,
如果有中断需要发生,则将该中断从中断等待队列中删除,调用相应的中断处理程序进行处
理。图 2.3 是中断等待队列的操作示意图。
中断处理程序是在某种特定的中断发生时被调用,中断处理程序的作用包括可以在现有的模
拟硬件的基础上建立更高层次的抽象。比如现有的模拟网络是有丢失帧的不安全网络,在中
断处理程序中可以加入请求重发机制来实现一个安全网络。
2.1 PendingInterrupt类
class PendingInterrupt {
public:
PendingInterrupt (VoidFunctionPtr func, int param, int time, IntType kind);
VoidFunctionPtr handler; // 中断对应的中断处理程序
int arg; // 中断处理程序的参数
int when; // 中断发生的时机
IntType type; // 中断的类型,供调试用
};
这个类定义了一个中断等待队列中需要处理的中断。为了方便起见,所有类的数据和成员函
数都设置为 public 的,不需要其它的 Get 和 Set 等存取内部数据的函数。初始化函数就是为
对应的参数赋值。
中断等待队列
某些将会引起
中断的操作
系统定期发生
的中断
图 2.3 对中断等待队列的操作
剩余95页未读,继续阅读
白小俗
- 粉丝: 32
- 资源: 303
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0