- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计
Nachos设计
软件学院软件工程专业2007级06班
编号 姓名 学号
1 20073001239
2 □□□ 20073001111
3 □□□ 20073001186
4 □□□ 20073001096
任课教师:烈
实验教师:烈
助教:陈亚伟
目 录
一、综述 5
二、实验一 6
2.1 实验目标 6
2.2 实验背景 6
2.3.1 FCFS算法 7
2.3.2 静态优先数算法 7
2.3.3 动态优先数算法 7
2.3.4 彩票算法 12
2.4 实验代码及分工 20
三、实验二 20
3.1 实验目标 20
3.2 实验背景 20
3.3 实验分析 20
3.3.1 条件变量的实现 20
3.3.2 生产者消费者问题管程实现 21
3.3.3 哲学家就餐问题管程实现 26
3.4 实验代码及分工 31
四、实验三 31
4.1 实验目标 31
4.2 实验背景 31
4.3 实验分析 33
4.3.1 用户内存管理 33
4.3.2 系统调用 34
4.3.3 shell 40
4.3.4 实验结果分析 42
4.4 实验代码及分工 43
五、实验四 43
5.1 实验目标 43
5.2 实验背景 44
5.3 实验分析 44
5.3.1 Nachos文件长度的扩展 44
5.3.2 扩充Nachos文件的最大容量 46
5.3.3 实验结果分析 47
5.4 实验代码及分工 48
第一部分 综述
设计目标
计算机操作系统是一门实践性很强的课程。一般地阐述其工作原理,很可能使本来具体生动的内容变得十分抽象、枯燥并难以理解。解决好理论与实践相结合的问题是提高操作系统教学质量的关键。一门好的操作系统实践课将使读者更加形象和深刻地理解课堂中讲述的概念、原理和它们的应用。
课程目标
课程目标
体验现代操作系统所涉及的抽象思维的具体实现;?训练学生分析和理解现代操作系统内核源代码的能力;
培养学生组织和设计现代操作系统内核软件的技能;激励学生在现代操作系统设计方面的创新精神。
使用说明
1. 设计1-3个线程调度策略,至少实现一个动态优先数或彩票算法,通过并发执行多个不同的线程函数验证其正确性。
2. 设计一个Haro样式的条件变量,通过实现采用该条件变量的1-2个管程,用多个使用管程的协作线程验证其正确性。
3. 设计3-6个Nachos系统调用(至少应有fork,exec,exit系统调用),和一个多用户内存空间,通过编写一个Nachos中的MIPS机的shell命令解释程序调用这些Nachos系统调用同时装入和并发执行多道MIPS用户程序,看其是否都能正确执行(选作虚拟内存)。
4. 设计一个可动态伸缩文件长度和具有二级文件索引的Nachos文件系统(选作多级目录),通过存入和读/写/执行多个MIPS机用户程序文件,分析Nachos虚拟磁盘中这些文件的映像验证设计的正确性。
第二部分 内核线程调度策略设计
·实验目标
本实验主要完成在Nachos系统中线程调度算法的实现,具体为FCFS、静态优先数、动态优先数以及彩票算法。研究各种调度策略算法的实现,分析各种调度算法的性能。
·实验背景
实验初期错提供的Nachos内核十分不完善,在线程调度上,只是实现了基本的上下文切换,初等的轮转。在这样的背景下,我们需要重新编写一些调度算法。
从Nachos系统的基本内核./threads/scheduler.cc文件中可以看出Nachos系统的基本内核实现了先进先出的调度策略。
调度类Scheduler管理着一个就绪队列list。它的成员函数ReadyToRun(currentThread)将当前线程挂入该队列的队尾:
Scheduler::ReadyToRun (Thread *thread)
{ thread-setStatus(READY);
readyList-Append((void *)thread);
}
它的另一成员函数FindNextToRun()则从list队首摘出一个就绪线程准备运行:
Thread *
Scheduler::FindNextToRun ()
{
return (Thread *)readyList-Remove();
}
这从基本内核执行的输出中可以得到验证:
*** thread 0 looped 0 times
*** thread 1 looped 0 times
*** thread 0 looped
文档评论(0)