指导书《操作系统课程设计》
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课时4个学时。
任务二:程序模拟存储管理之“伙伴系统”算法
设计与编写程序实现动态内存管理之“伙伴系统”算法。初始内存的大小(必须是2 的幂)、申请内存的进程大小及次序等数据放在文本文件中。对于给定的输入文件,输 出进程申请与退出每步的内存分配状态。
课时4个学时。
任务三:老化算法模拟分页系统
设计与编写程序使用老化算法模拟一个分页系统。页面访问序列从文件(文本文 件)中读取。对于一个给定的输入文件,列出每1000个内存访问中发生缺页中断的数
设计内容:
1. 依据下图所示的算法或严蔚敏《数据结构(C 语言版)》P203 的内容编写
程序。
2. 测试数据依据下图并将其放在一个文本文件中。
第 5 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
设计要点与关键技术: 1. 动态内存管理之伙伴系统算法 2. 递归算法 3. 使用 Visual Studio2008 开发平台
策略,并用程序模拟运行。这种训练把知识获取和项目实践二者有机结合,增
强对课程内容的理解和掌握,并获得有关项目管理和团队合作等方面的训练和
经验。
二、课程设计主要内容及要求
任务一:线程同步与互斥
该任务依据对“生产者-消费者问题”示例演示代码(清单1-1)的分析,编写程序 实现男女共用浴室的情况下的同步与互斥(要求见《现代操作系统》习题51(P98)), 男女到达浴室的时间数据放在文本文件。对于给定的输入文件,观察测试输出结果的正 确性。
2. 编程设计:(教材 P98 页 51 题)
假设一个大学为了卖弄其政治上的正确性,准备把美国最高法院的信条“平
第 3 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
2012-11
等但隔离其本身就是不平等”既运用在种族上也运用在性别上,从而结束校园
内长期使用的浴室按性别隔离的做法。但是,为了迁就传统习惯,学校颁布法
2012-11
第 6 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
任务三:老化算法模拟分页系统
2012-11
设计内容:
1. 编写一个程序,它使用老化算法模拟一个分页系统。页帧的数量是参数。
页面的访问序列从文件中读取。对于一个给定的输入文件。列出每 1000
个内存访问中发生缺页中断的数目,它是可用页帧数的函数。(教材 P141,
令:当有一个女生在浴室里,那么其他女生可以进入,但是男生不行,反之亦
然。在每个浴室的门上有一个滑动指示符号,表示当前处于以下三种可能状态
之一:
空
有女生
有男生
用你偏好的程序设计语言编写下面过程(可以随意采用所希望的计数器和
同步技术):
woman_wants_to_enter
man_wants_to_enter
设计内容:
1. 分析并执行“生产者-消费者问题” 示例演示程序(源代码清单:1-1)。
演示程序执行步骤:
1) 以“记事本”程序创建 pc.txt 文件,文件内容为:
Fra Baidu bibliotek
其中,第 1 列为线程序号,第 2 列为线程类型(生产者还是消费者线程),第 3 列为等待时间, 第 4 列为运行时间。
2) 将文件 pc.txt 放在 C 盘根目录下 3) 运行生产程序,结果如下:
北理珠“操作系统”课题组
《操作系统课程设计指导书》
任务四:使用工具分析 Windows 之 NTFS 文件系统
2012-11
设计内容:
1. 学习 WinHex 工具软件的使用;
2. 利用 WinHex 工具对根目录下的文件进行删除、隐蔽、恢复、属性修改
及寻找其数据的存储位置;
3. 对非根目录下的文件进行上述(2)项的操作;
6. 完成任务三的程序设计、编写与测试工作。(第14周)
7. 熟悉任务四所使用的工具WinHex,并分析当前电脑的操作系统,以任一
文件为实例分析文件系统的管理组织机制。(第16周)
8. 编写课程设计报告并进行答辩。(第17周)
详情见“实践教学日历”
四、考核方法:
按学院要求进行考核,打分:
1、 平时成绩。包括课堂出勤情况、文档提交情况等内容。占总成绩的 20%。
void Producer(void *p){ DWORD m_waitt; DWORD m_workt; int m_id; m_id=((ThreadInfo *)(p))->id; m_waitt=(DWORD)(((ThreadInfo *)(p))->waitt *1000); m_workt=(DWORD)(((ThreadInfo *)(p))->workt *1000); Sleep(m_waitt); cout<<"生产者线程"<<m_id<<"生产产品"<<endl; WaitForSingleObject(g_hEmptySemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); cout<<"生产者线程"<<m_id<<"将产品放入缓冲池中...生产者线程执行结束"<<endl; Sleep(m_waitt); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hFullSemaphore,1,NULL);
第 9 页 共 10 页
2012 -11 北理珠“操作系统”课题组
《操作系统课程设计指导书》
}
void READFILE(char *file){ int n=0; DWORD thread_ID; DWORD wait_for_all; g_hMutex=CreateMutex(NULL,FALSE,(LPCWSTR)"mutex"); g_hFullSemaphore=CreateSemaphore(NULL,0,10,(LPCWSTR)"full"); g_hEmptySemaphore=CreateSemaphore(NULL,10,10,(LPCWSTR)"empty"); ifstream inFile; inFile.open(file); while(inFile){ inFile>>thread_info[n].id; inFile>>thread_info[n].type; inFile>>thread_info[n].waitt; inFile>>thread_info[n].workt; n++; inFile.get(); } for(int i=0;i<n;i++){ if(thread_info[i].type==PRODUCER || thread_info[i].type=='P') h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Producer),&thread_info[i],0,&thread_ID); else h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consumer),&thread_info[i],0,&thread_ID); } wait_for_all=WaitForMultipleObjects(n,h_Thread,TRUE,-1); cout<<"所有线程执行完毕!";
《操作系统课程设计指导书》
附件5:
课程设计指导书
2012-11
一、课程设计目的
《操作系统》是计算机专业的一门专业基础课,主要内容是介绍操作系统
的原理和策略;《操作系统课程设计》是在学生学习完该课程以后(或学习过程
中)进行的设计性实验课程,目的是使学生加深理解操作系统中的策略与思想,
并能编程实现。
课程设计的项目中,包含了若干子项目,分别设计实现这些子项目和算法
int id; char type; double waitt; double workt; }; HANDLE g_hMutex; HANDLE g_hFullSemaphore; HANDLE g_hEmptySemaphore; HANDLE h_Thread[MAX_THREAD_NUM]; ThreadInfo thread_info[MAX_THREAD_NUM]; using namespace std; //***********
4. 利用工具移动某个文件的数据块。
也可在 FAT32 文件系统中进行上述操作
设计要点与关键技术:
1. 对 NTFS 或 FAT32 的组织结构的认识
NTFS 格式可参见《现代操作系统》(第 3 版)P509“11.8 Windows NT
文件系统”
2. 工具的使用熟练度
第 8 页 共 10 页
41 题)
2. 一个简单的典型测试数据:
分配的内存帧数:3
进程页访问序列:0、1、2、3、4、1、2、0、1、2、3、4、0、1、2、3
3. 按要求设计测试比较更大数据量的页面访问
设计要点与关键技术:
1. 老化算法的理解
2. 使用 Visual Studio2008 开发平台
第 7 页 共 10 页
woman_leaves
man_leaves
设计要点与关键技术:
1. 线程的同步与互斥
2. 信号量上的 P、V 操作算法
3. 使用 Visual Studio2008 开发平台
第 4 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
任务二:程序模拟存储管理之“伙伴系统”
2012-11
北理珠“操作系统”课题组
《操作系统课程设计指导书》-源代码清单 1-1
【源代码清单 1-1】
#include <Windows.h> #include <conio.h> #include <stdlib.h> #include <fstream> #include <io.h> #include <string.h> #include <stdio.h> #include <iostream> #define PRODUCER 'P' #define CONSUMER 'C' #define MAX_BUFFER_NUM 10 #define MAX_THREAD_NUM 32 struct ThreadInfo{
}
void Consumer(void *p){ DWORD m_waitt; DWORD m_workt; int m_id; m_id=((ThreadInfo *)(p))->id ; m_waitt=(DWORD)(((ThreadInfo *)(p))->waitt*1000); m_workt=(DWORD)(((ThreadInfo *)(p))->workt*1000); Sleep(m_waitt); WaitForSingleObject(g_hFullSemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); cout<<"消费者线程"<<m_id<<"从缓冲池中取产品"<<endl; Sleep(m_workt); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hEmptySemaphore,1,NULL); cout<<"消费者线程"<<m_id<<"消费产品!...消费者线程执行结束"<<endl;
第 1 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
目。 课时4个学时。
2012-11
任务四:使用工具分析Windows之NTFS文件系统
使用WinHex工具分析当前操作系统(通常是Windows XP)的NTFS或FAT32文件系 统组织方式。(具体要求随后提供。)
课时2-4个课时。
三、课程设计基本步骤及进度安排
1. 学生分组(建议1-2人一组)、了解课程要求及熟悉任务一。(第9周)
2. 完成任务一的程序设计、编写与测试工作。(第10周)
3. 开始任务二的程序设计工作。(第11周)
4. 完成任务二的程序设计、编写与测试工作。(第12周)
5. 开始任务三的程序设计工作。(第13周)
2、 项目答辩成绩。每个题目均需要进行项目答辩,答辩时采取单人答辩
的方式,根据所做题目评委出题进行答辩。占总成绩的 30%。
3、 课程设计报告成绩。占总成绩的 50%。
4、 优秀率不超过 15%。
第 2 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
附录
2012-11
任务一:线程同步与互斥
任务二:程序模拟存储管理之“伙伴系统”算法
设计与编写程序实现动态内存管理之“伙伴系统”算法。初始内存的大小(必须是2 的幂)、申请内存的进程大小及次序等数据放在文本文件中。对于给定的输入文件,输 出进程申请与退出每步的内存分配状态。
课时4个学时。
任务三:老化算法模拟分页系统
设计与编写程序使用老化算法模拟一个分页系统。页面访问序列从文件(文本文 件)中读取。对于一个给定的输入文件,列出每1000个内存访问中发生缺页中断的数
设计内容:
1. 依据下图所示的算法或严蔚敏《数据结构(C 语言版)》P203 的内容编写
程序。
2. 测试数据依据下图并将其放在一个文本文件中。
第 5 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
设计要点与关键技术: 1. 动态内存管理之伙伴系统算法 2. 递归算法 3. 使用 Visual Studio2008 开发平台
策略,并用程序模拟运行。这种训练把知识获取和项目实践二者有机结合,增
强对课程内容的理解和掌握,并获得有关项目管理和团队合作等方面的训练和
经验。
二、课程设计主要内容及要求
任务一:线程同步与互斥
该任务依据对“生产者-消费者问题”示例演示代码(清单1-1)的分析,编写程序 实现男女共用浴室的情况下的同步与互斥(要求见《现代操作系统》习题51(P98)), 男女到达浴室的时间数据放在文本文件。对于给定的输入文件,观察测试输出结果的正 确性。
2. 编程设计:(教材 P98 页 51 题)
假设一个大学为了卖弄其政治上的正确性,准备把美国最高法院的信条“平
第 3 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
2012-11
等但隔离其本身就是不平等”既运用在种族上也运用在性别上,从而结束校园
内长期使用的浴室按性别隔离的做法。但是,为了迁就传统习惯,学校颁布法
2012-11
第 6 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
任务三:老化算法模拟分页系统
2012-11
设计内容:
1. 编写一个程序,它使用老化算法模拟一个分页系统。页帧的数量是参数。
页面的访问序列从文件中读取。对于一个给定的输入文件。列出每 1000
个内存访问中发生缺页中断的数目,它是可用页帧数的函数。(教材 P141,
令:当有一个女生在浴室里,那么其他女生可以进入,但是男生不行,反之亦
然。在每个浴室的门上有一个滑动指示符号,表示当前处于以下三种可能状态
之一:
空
有女生
有男生
用你偏好的程序设计语言编写下面过程(可以随意采用所希望的计数器和
同步技术):
woman_wants_to_enter
man_wants_to_enter
设计内容:
1. 分析并执行“生产者-消费者问题” 示例演示程序(源代码清单:1-1)。
演示程序执行步骤:
1) 以“记事本”程序创建 pc.txt 文件,文件内容为:
Fra Baidu bibliotek
其中,第 1 列为线程序号,第 2 列为线程类型(生产者还是消费者线程),第 3 列为等待时间, 第 4 列为运行时间。
2) 将文件 pc.txt 放在 C 盘根目录下 3) 运行生产程序,结果如下:
北理珠“操作系统”课题组
《操作系统课程设计指导书》
任务四:使用工具分析 Windows 之 NTFS 文件系统
2012-11
设计内容:
1. 学习 WinHex 工具软件的使用;
2. 利用 WinHex 工具对根目录下的文件进行删除、隐蔽、恢复、属性修改
及寻找其数据的存储位置;
3. 对非根目录下的文件进行上述(2)项的操作;
6. 完成任务三的程序设计、编写与测试工作。(第14周)
7. 熟悉任务四所使用的工具WinHex,并分析当前电脑的操作系统,以任一
文件为实例分析文件系统的管理组织机制。(第16周)
8. 编写课程设计报告并进行答辩。(第17周)
详情见“实践教学日历”
四、考核方法:
按学院要求进行考核,打分:
1、 平时成绩。包括课堂出勤情况、文档提交情况等内容。占总成绩的 20%。
void Producer(void *p){ DWORD m_waitt; DWORD m_workt; int m_id; m_id=((ThreadInfo *)(p))->id; m_waitt=(DWORD)(((ThreadInfo *)(p))->waitt *1000); m_workt=(DWORD)(((ThreadInfo *)(p))->workt *1000); Sleep(m_waitt); cout<<"生产者线程"<<m_id<<"生产产品"<<endl; WaitForSingleObject(g_hEmptySemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); cout<<"生产者线程"<<m_id<<"将产品放入缓冲池中...生产者线程执行结束"<<endl; Sleep(m_waitt); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hFullSemaphore,1,NULL);
第 9 页 共 10 页
2012 -11 北理珠“操作系统”课题组
《操作系统课程设计指导书》
}
void READFILE(char *file){ int n=0; DWORD thread_ID; DWORD wait_for_all; g_hMutex=CreateMutex(NULL,FALSE,(LPCWSTR)"mutex"); g_hFullSemaphore=CreateSemaphore(NULL,0,10,(LPCWSTR)"full"); g_hEmptySemaphore=CreateSemaphore(NULL,10,10,(LPCWSTR)"empty"); ifstream inFile; inFile.open(file); while(inFile){ inFile>>thread_info[n].id; inFile>>thread_info[n].type; inFile>>thread_info[n].waitt; inFile>>thread_info[n].workt; n++; inFile.get(); } for(int i=0;i<n;i++){ if(thread_info[i].type==PRODUCER || thread_info[i].type=='P') h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Producer),&thread_info[i],0,&thread_ID); else h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consumer),&thread_info[i],0,&thread_ID); } wait_for_all=WaitForMultipleObjects(n,h_Thread,TRUE,-1); cout<<"所有线程执行完毕!";
《操作系统课程设计指导书》
附件5:
课程设计指导书
2012-11
一、课程设计目的
《操作系统》是计算机专业的一门专业基础课,主要内容是介绍操作系统
的原理和策略;《操作系统课程设计》是在学生学习完该课程以后(或学习过程
中)进行的设计性实验课程,目的是使学生加深理解操作系统中的策略与思想,
并能编程实现。
课程设计的项目中,包含了若干子项目,分别设计实现这些子项目和算法
int id; char type; double waitt; double workt; }; HANDLE g_hMutex; HANDLE g_hFullSemaphore; HANDLE g_hEmptySemaphore; HANDLE h_Thread[MAX_THREAD_NUM]; ThreadInfo thread_info[MAX_THREAD_NUM]; using namespace std; //***********
4. 利用工具移动某个文件的数据块。
也可在 FAT32 文件系统中进行上述操作
设计要点与关键技术:
1. 对 NTFS 或 FAT32 的组织结构的认识
NTFS 格式可参见《现代操作系统》(第 3 版)P509“11.8 Windows NT
文件系统”
2. 工具的使用熟练度
第 8 页 共 10 页
41 题)
2. 一个简单的典型测试数据:
分配的内存帧数:3
进程页访问序列:0、1、2、3、4、1、2、0、1、2、3、4、0、1、2、3
3. 按要求设计测试比较更大数据量的页面访问
设计要点与关键技术:
1. 老化算法的理解
2. 使用 Visual Studio2008 开发平台
第 7 页 共 10 页
woman_leaves
man_leaves
设计要点与关键技术:
1. 线程的同步与互斥
2. 信号量上的 P、V 操作算法
3. 使用 Visual Studio2008 开发平台
第 4 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
任务二:程序模拟存储管理之“伙伴系统”
2012-11
北理珠“操作系统”课题组
《操作系统课程设计指导书》-源代码清单 1-1
【源代码清单 1-1】
#include <Windows.h> #include <conio.h> #include <stdlib.h> #include <fstream> #include <io.h> #include <string.h> #include <stdio.h> #include <iostream> #define PRODUCER 'P' #define CONSUMER 'C' #define MAX_BUFFER_NUM 10 #define MAX_THREAD_NUM 32 struct ThreadInfo{
}
void Consumer(void *p){ DWORD m_waitt; DWORD m_workt; int m_id; m_id=((ThreadInfo *)(p))->id ; m_waitt=(DWORD)(((ThreadInfo *)(p))->waitt*1000); m_workt=(DWORD)(((ThreadInfo *)(p))->workt*1000); Sleep(m_waitt); WaitForSingleObject(g_hFullSemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); cout<<"消费者线程"<<m_id<<"从缓冲池中取产品"<<endl; Sleep(m_workt); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hEmptySemaphore,1,NULL); cout<<"消费者线程"<<m_id<<"消费产品!...消费者线程执行结束"<<endl;
第 1 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
目。 课时4个学时。
2012-11
任务四:使用工具分析Windows之NTFS文件系统
使用WinHex工具分析当前操作系统(通常是Windows XP)的NTFS或FAT32文件系 统组织方式。(具体要求随后提供。)
课时2-4个课时。
三、课程设计基本步骤及进度安排
1. 学生分组(建议1-2人一组)、了解课程要求及熟悉任务一。(第9周)
2. 完成任务一的程序设计、编写与测试工作。(第10周)
3. 开始任务二的程序设计工作。(第11周)
4. 完成任务二的程序设计、编写与测试工作。(第12周)
5. 开始任务三的程序设计工作。(第13周)
2、 项目答辩成绩。每个题目均需要进行项目答辩,答辩时采取单人答辩
的方式,根据所做题目评委出题进行答辩。占总成绩的 30%。
3、 课程设计报告成绩。占总成绩的 50%。
4、 优秀率不超过 15%。
第 2 页 共 10 页
北理珠“操作系统”课题组
《操作系统课程设计指导书》
附录
2012-11
任务一:线程同步与互斥