logo资料库

多进程实现快速排序(北京大学操作系统课程实习).doc

第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
资料共38页,剩余部分请下载后查看
操作系统报告
1设计思路及主要代码分析
1.1实验目的
1.2实验要求
1.3设计思路
1.3.1程序流程图
1.3.2设计说明
1.3.3程序结构设计
1.4程序代码
1.4.1多线程排序
1.4.2多进程排序
2实验结果及问题分析
2.1多线程排序
2.1.1运行结果
2.1.2结果分析
2.2多进程排序
2.2.1运行结果
2.2.2结果分析
3实验小结
4问题回答
5附录
5.1机器环境及配置
5.2编译环境
5.3程序及源码
夏磊 S1048035 2010 级秋季班 操作系统报告 实验 3-- 多进程(线程)实现快速排序 姓名: 夏磊 学号: S1048035 班级: 2010 级秋季班 指导教师: 陈向群、原仓周 第 1页 / 共 38页
夏磊 S1048035 2010 级秋季班 目录 操作系统报告................................................................................................... 1 1 设计思路及主要代码分析........................................................................3 1.1 实验目的...................................................................................................................................... 3 1.2 实验要求...................................................................................................................................... 3 1.3 设计思路...................................................................................................................................... 3 程序流程图 ..........................................................................................................................3 设计说明..............................................................................................................................5 程序结构设计......................................................................................................................6 1.3.1 1.3.2 1.3.3 1.4 程序代码...................................................................................................................................... 7 多线程排序 ..........................................................................................................................7 多进程排序 ........................................................................................................................18 1.4.1 1.4.2 2 实验结果及问题分析 ............................................................................. 29 2.1 多线程排序................................................................................................................................ 29 运行结果............................................................................................................................29 2.1.1 2.1.2 结果分析............................................................................................................................29 2.2 多进程排序................................................................................................................................ 30 运行结果............................................................................................................................30 结果分析............................................................................................................................31 2.2.1 2.2.2 3 4 5 实验小结............................................................................................... 31 问题回答............................................................................................... 32 附录 ...................................................................................................... 38 5.1 机器环境及配置........................................................................................................................ 38 5.2 编译环境.................................................................................................................................... 38 5.3 程序及源码................................................................................................................................ 38 第 2页 / 共 38页
夏磊 S1048035 2010 级秋季班 1 设计思路及主要代码分析 1.1 实验目的 使用多进程(线程)方式,实现快速排序,体会多进程(线程)的实 际应用中的优势。 1.2 实验要求 在 Windows 环境下,编写一个多进程(线程)进行快速排序的 程序,使用的是产生 1,000,000 个随机数的文件。 要求说明你的程序运行的系统资源配置,给出测试结果并对测试 程序和结果做出说明。 1.3 设计思路 1.3.1 程序流程图 1) 多线程排序流程图 第 3页 / 共 38页
夏磊 S1048035 2010 级秋季班 2) 多进程排序流程图 第 4页 / 共 38页
夏磊 S1048035 2010 级秋季班 1.3.2 设计说明 1) 每次数据分割后产生两个新的进程(线程)处理分割后的数据, 线程直接共享内存数据,进程间的数据交换采用内存映射文件。 2) 每个进程(线程)处理的数据小于 1000 以后不再分割(控制 产生的进程在 20 个左右)。 3) 利用一些技巧使分割尽可能均匀:比较第一个、最后一个、中 间一个,三者中中间值作为分割值。 第 5页 / 共 38页
夏磊 S1048035 2010 级秋季班 1.3.3 程序结构设计 1) 可运行程序文件 程序主要为 2 个主运行程序和 1 个子进程排序程序。 2 个主运行程序分别为:线程排序程序 FileMapSort_Thread.exe 和进程排序程序 FileMapSort_Proc.exe。 1 个子进程排序程序为:qsort_proc.exe。 2) 测试数据 程序中使用随机函数初始化 1,000,000 个测试使用的数据,写到 二进制文件 Unsorted.dat 中,然后读取到内存或内存映射文件,以 便多线程(进程)排序,排序后将结果写到二进制文件 Sorted.dat 中。 出于 IO 的性能考虑使用了二进制文件读写,另外,为了便于查 看,排序前的数据和排序后的数据分别保存在了对应的 Unsorted.txt 和 Sorted.txt 中。 3) 时间计算 由于数据量较大,时间较长,使用 GetTickCount()即可。 第 6页 / 共 38页
夏磊 S1048035 2010 级秋季班 1.4 程序代码 1.4.1 多线程排序 1) 主程序代码:FileMapSort_Thread.cpp #include #include #include "functions.h" // 数据缓冲区指针 extern int* g_pData; // 数据量大小 extern int g_nDataCount; // 信号量,用于控制排序线程的数目 HANDLE hSemaphoreThread = NULL; // 事件,用于通知控制台线程排序完成 HANDLE hEventSortOver = NULL; 第 7页 / 共 38页
夏磊 S1048035 2010 级秋季班 /** * 线程参数结构 */ struct ThreadParam { int* m_pData; int m_nLow; int m_nHigh; // 数据缓冲区指针 // 数据开始下标 // 数据截止下标 }; /** * 线程函数 */ DWORD WINAPI threadProc( LPVOID lpParam ); /** * 主函数 */ void main( int argc, char** argv ) { //作业 2:进程同步机制实验——生产者消费者问题 //作者:夏磊 S1048035 //指导教师:陈向群、原仓周 printf( "============================================================== ====\n" ); printf( " printf( " printf( " printf( "============================================================== 作业 2-1:多线程实现快速排序\n" ); 学生:夏磊 S1048035 指导教师:陈向群、原仓周 \n" ); \n" ); ====\n" ); char szFileName[80]; int nTimeGap = 0; HANDLE hThread = NULL; // 文件名 // 时间计数 // 线程句柄 // 初始化数据缓冲区,信号量和事件 g_pData = new int[g_nCount]; hSemaphoreThread = CreateSemaphore( NULL, g_nThreadBoundary, g_nThreadBoundary, NULL ); hEventSortOver = CreateEvent( NULL, false, false, NULL ); if( hSemaphoreThread==NULL || hEventSortOver==NULL ) { printf( "信号量初始化失败!\n" ); 第 8页 / 共 38页
分享到:
收藏