操作系统课程设计指导书.docx
《操作系统课程设计指导书.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计指导书.docx(47页珍藏版)》请在冰豆网上搜索。
操作系统课程设计指导书
《操作系统》实习指导书
信息工程学院
2015年12月
《操作系统实习》教学大纲
课程编号:
B3503004学分:
1
课程英文名称:
OperatingSystemofcomputer课程类别:
专业必修课
开课学期:
第五学期开课单位(系):
计算机系
适用专业:
计算机科学与技术、计算机科学与技术(网络工程)
制定人:
宋洪军
一、制定依据
根据浙江农林大学2012版培养方案、操作系统课程教学大纲等制订本实习教学大纲。
二、目的与基本要求
1.目的
操作系统实习是操作系统课程的重要实践性环节。
通过银行排队叫号系统、请求页式管理、小型文件系统、Linux进程管理、Linux进程间通信和Linux设备管理的设计与实现,可以加深学生对课堂中所讲授内容的理解,培养学生的系统开发能力,加强学生的项目经验,使学生初步具有研究、设计、编制和调试操作系统模块的能力。
2.基本要求
根据操作系统实习任务书所确定的设计内容,每位同学根据要求选择实习题目进行设计,针对设计内容查阅相关资料、进行理论分析、确定相应算法并编程实现原型系统;完成原型系统后,按照浙江农林大学实习说明书书写规范,编写操作系统实习报告。
注意:
严禁抄袭,所提交的报告不能雷同,查出后相关同学设计成绩以零分处理。
三、实习内容
题目一:
银行排队叫号系统
题目二:
请求页式管理
题目三:
用U盘制作Windows7操作系统
题目四:
文件系统的设计与实现
题目五:
Linux文件基本操作
题目六:
Linux进程间通信
题目七:
Linux文件系统调用
题目八:
批处理的简单应用
题目九:
linux下WWW服务器的配置
题目十:
linux下FTP服务器的配置
四、组织及指导方式
1.学生的组织
本实习安排十个题目,题目6必做,其余1~8题选择四个题目,9、10选择一个题目。
2.指导方式
跟班指导。
五、成绩评定
由指导教师根据学生在设计中的表现、任务的完成情况、实习报告的质量等综合评定。
评分标准为:
1)实验表现占40%;2)设计、提交报告占20%;3)出勤率占40%。
根据以上三个标准,实习成绩按优秀、良好、中等、及格和不及格五级记分制评定。
六、教材及主要参考资料
1.教材
[1]张尧学主编.计算机操作系统教程(第三版).北京:
清华大学出版社,2006
2.主要参考书
[1]张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:
清华大学出版社,2006
[2]汤子瀛主编.计算机操作系统(第三版).西安:
西安电子科技大学出版社,2001
[3]张坤等编.操作系统实验教程.北京:
清华大学出版社,2008
[4]张丽芬等编.操作系统实验教程.北京:
清华大学出版社,2006
[5]AndrewS.Tanenbaum.ModernOperatingSystems,SecondEdition.EnglewoodCliffs,N.J,PrenticeHall,2001
[6]屠祁等编.操作系统基础(第三版).北京:
清华大学出版社,2000
[7]冯耀霖等编.操作系统.西安:
西安电子科技大学出版社,2001
[8]左万历.计算机操作系统教程(第二版).北京:
高等教育出版社,2004
第一章设计规范与说明
1.1设计规范
一、问题分析与系统结构的设计
充分地分析和理解问题本身。
本阶段主要解决“要作什么,限制条件是什么”。
首先从问题中抽取合适的数据结构,作为整个系统的底层,解决问题的算法作为上层。
定义数据的存储结构及其在这些结构上的操作,使得在上层的应用中可以通过这些操作完成对数据结构层的访问。
在这个过程中,要综合考虑系统功能,使所设置的操作要易于系统整体功能的实现。
最后写出每个函数的功能、自己编写的代码部分要用特别方式标记出来,列出函数间的调用关系,可以使用调用关系图表示则更加清晰,这样便完成了系统结构设计。
二、详细设计和编码
详细设计的目的是对函数的进一步求精。
用if、while和赋值语句等类语言写出算法的框架。
利用类语言的目的是避免陷入细节。
在编码时,可以对详细设计的结果进一步求精,用高级语言表示出来。
应注意以下事项。
1.程序的每一行最好不超过60个字符。
每个函数通常不要太长,以40行为宜。
函数包含的程序行数太多,易于造成阅读困难。
2.变量定义为:
名+类型。
如:
LinkList*firstLinkListPointer;其中first为名,后面的LinkListPointer说明是链表指针类。
3.控制if、while等语句的嵌套深度,最多不超过5层。
4.对每一段程序完成的作用,除非常明显的除外(如:
x=x+1;注释为x加1,没有什么意义),都应加以注释。
这会对程序的调试提供很多方便。
5.对每个数据结构和其函数要进行单元测试。
6.根据情况可以设立若干调试点,即输出若干信息,用于验证和你的设想是否一致。
另外,对于输入输出语句,必须对它们的作用加以说明。
否则,在调试程序时,无法了解系统需要输入说明,系统输出的又是什么。
1.2报告的整理与形成
在程序开发过程中,逐步形成各种必要的文档及资料。
所提交的电子版文件夹以姓名+班级+学号命名,文件夹包括:
(1)实习报告:
要求按照给出的操作系统实习报告封面及正文格式书写;
(2)试验截图:
操作过程截图;
(3)可执行文件:
带注释的源程序代码。
为每一个设计题目建立文件夹,文件夹包含以上三项内容,压缩后提交。
第二章设计内容
2.1银行排队叫号系统
一、设计目的
熟练掌握pv操作的相关知识;认识信号量的相关含义;加深对线程(进程)的认识;
二、设计内容
某银行提供10个服务窗口(7个对私服务窗口,3个对公服务窗口)和100个供顾客等待的座位。
顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。
取号机每次仅允许一位顾客使用,有对公和对私两类号,每位顾客只能选取其中一个。
当营业员空闲时,通过叫号选取一位顾客,并为其服务。
要求:
调试源程序,使之能运行。
修改程序,加入等待的另一种情况:
取了号码在叫到之前就自己离开了,为一致起见,假定凡是号码为4的倍数的客户自行离开,离开时间为叫到该客户之前的一个随机数。
当每一个客户离开时,增加一个功能:
输出客户从开始取票到离开银行的实际等待时间。
三、原理及算法
排队系统完全模拟了人群排队的全过程,通过取票进队。
排队等待、叫号服务等功能,很好的解决了客户在服务机构办理业务时所遇到的各种排队、拥挤和混乱现象,代替了人们站队的辛苦,把顾客等待的烦恼变成了一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。
排队过程大致流程为:
本次的银行叫号系统由pv操作来模拟实现。
实验中用到的相关知识介绍(windows环境下)
1.同步对象
同步对象是指Windows中用于实现同步与互斥的实体,包括信号量(Semaphore)、互斥量(Mutex)、临界区(CriticalSection)和事件(Events)等。
本实验中使用到信号量、互斥量和临界区三个同步对象。
同步对象的使用步骤:
(1)创建/初始化同步对象。
(2)请求同步对象,进入临界区(互斥量上锁)。
(3)释放同步对象(互斥量解锁)。
(4)这些对象在一个线程中创建,在其他线程中都可以使用,实现同步与互斥。
2.相关API的功能及使用
利用WindowsSDK提供的API编程实现实验题目要求,而VC中包含有WindowsSDK的所有工具和定义。
要使用这些API,需要包含堆这些函数进行说明的SDK头文件——最常见的是Windows.h(特殊的API调用还需要包含其他头文件)
下面给出的是本实验使用到的API的功能和使用方法简单介绍:
(1)CreateThread
功能——创建一个在调用进程的地址空间中执行的线程
格式:
HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,
DWORDdwStackSize,
LPTHREAD_START_ROUTINElpStartAddress,
LPVOIDlpParamiter,DWORDdwCreationFlags,LpdwordlpThread)
参数说明:
lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。
dwStackSize——定义原始堆栈大小。
lpStartAddress——指向
LPTHRAED_START_ROUTINE类型定义的函数。
lpParamiter——定义一个给进程传递参数的指针。
dwCreationFlags——定义控制线程创建的附加标志。
lpThread——保存线程标志符(32位)
(2)CreateMutex
功能——创建一个命名或匿名的互斥量对象
格式:
HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,BOOLbInitialOwner,
LPCTSTRlpName);
参数说明:
lpMutexAttributes——必须取值NULL。
bInitialOwner——指示当前线程是否马上拥有该互斥量(即马上加锁)。
lpName——互斥量名称。
(3)CreateSemaphore
功能——创建一个命名或匿名的信号量对象
格式:
HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,
LONGlInitialCount,
LONGlMaximumCount,
LPCTSTRlpName);
参数说明:
lpSemaphoreAttributes——必须取值NULL。
lInitialCount——信号量的初始值。
该值大于0,但小于lMaximumCount指定的最大值。
lMaximumCount——信号量的最大值。
lpName——信号量名称。
(4)WaitForSingleObject
功能——使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间
格式:
DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);
参数说明:
hHandle——信号量指针。
dwMilliseconds——等待的最长时间(INFINITE为无限等待)。
(5)ReleaseSemaphore
功能——对指定信号量加上一个指定大小的量。
成功执行则返回非0值
格式:
BOOLReleaseSemaphore(HANDLEhSemaphore,
LONGlReleaseCount,
LPLONGlppreviousCount);
参数说明:
hSemaphore——信号量指针。
lReleaseCount——信号量的增量。
lppreviousCount——保存信号量当前值。
(6)ReleaseMutex
功能——打开互斥锁,即把互斥量加1。
成功调用则返回0
格式:
BOOLReleaseMutex(HANDLEhMutex);
参数说明:
hMutex——互斥量指针。
(7)InitializeCriticalSection
功能——初始化临界区对象
格式:
VOIDInitializeCritical