MicrosoftVisualC6.0的环境下操作系统课程设计.doc_第1页
MicrosoftVisualC6.0的环境下操作系统课程设计.doc_第2页
MicrosoftVisualC6.0的环境下操作系统课程设计.doc_第3页
MicrosoftVisualC6.0的环境下操作系统课程设计.doc_第4页
MicrosoftVisualC6.0的环境下操作系统课程设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录 1引言引言.1 1.1 编写目的.1 1.2 设计内容.1 1.3 设计原理.1 1.3.1 先进先出算法(FIFO).1 1.3.2 最优置换算法(OPT).1 1.3.3 最近最久未使用算法(LRU).2 1.4 运行环境.2 2设计方案设计方案.3 2.1 模块划分.3 2.3 模块调用关系图.3 2.4 模块流程图.3 2.4.1 主函数流程图.3 2.4.2 FIFO 函数流程图.4 2.4.3 LRU 函数流程图.5 2.4.4 OPT 函数流程图.5 3源代码源代码.6 3.1 程序代码.6 4测试结果测试结果.16 4.1 页面选择测试.16 4.2 应用算法选择测试.16 5总结总结.18 6程序使用说明书程序使用说明书.19 7参考文献参考文献.19 1引言引言 1.1 编写目的编写目的 在 Microsoft Visual C+6.0 的环境下用 C+语言编写程序,实现操作系统中页面在内 存与外存中如何置换的问题。 1.2 设计内容设计内容 设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命 中率。 设计要求: 主界面以灵活选择某算法,且以下算法都要实现 1、先进先出算法(FIFO) 2、最近最久未使用算法(LRU) 3、最佳置换算法(OPT) 1.3 设计原理设计原理 1.3.1 先进先出算法(先进先出算法(FIFO) 最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存 中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早 调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个 FIFO 队列, 收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就 把它插在队尾上。 这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。因为那些常被访 问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。 FIFO 的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率 增加了。当然,导致这种异常现象的页面走向实际上是很少见的。 1.3.2 最优置换算法(最优置换算法(OPT) 最优置换(Optimal Replacement)是在理论上提出的一种算法。其实质是:当调入新 的一页而必须预先置换某个老页时,所选择的老页应是将来不再被使用,或者是在最远的 将来才被访问。采用这种页面置换算法,保证有最少的缺页率。 但是最优页面置换算法的实现是困难的,因为它需要人们预先就知道一个进程整个运行过 程中页面走向的全部情况。不过,这个算法可用来衡量(如通过模拟实验分析或理论分析) 其他算法的优劣。 1.3.3 最近最久未使用算法(最近最久未使用算法(LRU) FIFO 算法和 OPT 算法之间的主要差别是,FIFO 算法利用页面进入内存后的时间长短 作为置换依据,而 OPT 算法的依据是将来使用页面的时间。如果以最近的过去作为不久将 来的近似,那么就可以把过去最长一段时间里不曾被使用的页面置换掉。它的实质是,当 需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以置换。这种算法就称 为最久未使用算法(Least Recently Used,LRU) 。 LRU 算法是与每个页面最后使用的时间有关的。当必须置换一个页面时,LRU 算法选择过 去一段时间里最久未被使用的页面。 LRU 算法是经常采用的页面置换算法,并被认为是相当好的,但是存在如何实现它的问题。 LRU 算法需要实际硬件的支持。其问题是怎么确定最后使用时间的顺序,对此有两种可行 的办法: (1)计数器。最简单的情况是使每个页表项对应一个使用时间字段,并给 CPU 增加一 个逻辑时钟或计数器。每次存储访问,该时钟都加1。每当访问一个页面时,时钟寄存器的 内容就被复制到相应页表项的使用时间字段中。这样我们就可以始终保留着每个页面最后 访问的“时间”。在置换页面时,选择该时间值最小的页面。这样做,不仅要查页表,而且 当页表改变时(因 CPU 调度)要维护这个页表中的时间,还要考虑到时钟值溢出的问题。 (2)栈。用一个栈保留页号。每当访问一个页面时,就把它从栈中取出放在栈顶上。 这样一来,栈顶总是放有目前使用最多的页,而栈底放着目前最少使用的页。由于要从栈 的中间移走一项,所以要用具有头尾指针的双向链连起来。在最坏的情况下,移走一页并 把它放在栈顶上需要改动6个指针。每次修改都要有开销,但需要置换哪个页面却可直接得 到,用不着查找,因为尾指针指向栈底,其中有被置换页。 因实现 LRU 算法必须有大量硬件支持,还需要一定的软件开销。所以实际实现的都是一种 简单有效的 LRU 近似算法。 一种 LRU 近似算法是最近未使用算法(Not Recently Used,NUR) 。它在存储分块表的每 一表项中增加一个引用位,操作系统定期地将它们置为0。当某一页被访问时,由硬件将该 位置1。过一段时间后,通过检查这些位可以确定哪些页使用过,哪些页自上次置0后还未 使用过。就可把该位是0的页淘汰出去,因为在最近一段时间里它未被访问过。 1.4 运行环境运行环境 操作系统:Windows XP 编程环境:Microsoft Visual C+6.0 2设计方案设计方案 2.1 模块划分模块划分 主界面: 设置页面产生算法选择界面和页面置换算法选择界面; 子界面: 页面产生算法分为两个界面,分别是随机产生算法和自己输入产生算法。 页面置换算法分为三个子界面,分别是先进先出算法界面、最近最久未使用算法界面、 最佳置换算法界面。 2.3 模块调用关系图模块调用关系图 Main() void OPT(); void Lru(int fold,Page *b) void FIFO(); int findExist (int curpage); int findRepl ace() int findSpac e(); int findSp ace(); int findRe place() ; int findExis t(int curpage) int Equation(in t fold,Page *b) void InitL(Page *b,int cBsizePsize) int GetMa x(Page *b) 图 21 2.4 模块流程图模块流程图 2.4.1 主函数流程图主函数流程图 start t= =1 switch fifo算法 Case1 Lru算法 Case2 Case3 Opt算法 退出 图 22 2.4.2 FIFO 函数流程图函数流程图 Start findExist(i) findSpace() findReplac e() 退出 图 23 2.4.3 LRU 函数流程图函数流程图 start Getmax() void InitL() endl val=0 val=Equation (fold,b); F bval.time=0; for(i=0;iBsize ;i+) if (i!=val) bi.time+; T 图 24 2.4.4 OPT 函数流程图函数流程图 Start findExist(i) findSpace() findReplac e() 退出 图 25 3源代码源代码 3.1 程序代码程序代码 #include #include #include #define Bsize 3 #define Psize 12 #include using namespace std; int QStringPsize; int Num=0; struct pageInfor int content;/页面号 int timer;/被访问标记 ; class YZ_replace public: YZ_replace(); /构造函数 YZ_replace(); /析构函数 int findSpace(); /查找是否有空闲内存 int findExist(int curpage); /查找内存中是否有该页面 int findReplace(); /查找应予置换的页面 void FIFO(); /FIFO 算法 void OPT(); void BlockClear(); /BLOCK 恢复 void initia1(int string);/初始化 pageInfor *block; /物理块 pageInfor *page; /页面号串 int memory_stateBsizePsize; int s; private: ; void P_String(int QString) /随机产生页面的各个数 int i; srand(unsigned)time(NULL); for(i=0;iPsize;i+) QStringi=rand()*9/RAND_MAX+1; cout页面走向:; for(i=0;iPsize;i+)/输出各个数 coutQStringi ; coutendl; YZ_replace:YZ_replace()/构造函数初始化 Block, s=0; block = new pageInforBsize; for(int i=0; iBsize; i+) blocki.content = -1; blocki.timer = 0; void YZ_replace:initia1(int QString )/用于初始化页 int j; page = new pageInforPsize; for(int i=0; iPsize; i+) pagei.content = QStringi; pagei.timer = 0; for(i=0;iPsize;i+) for(j=0;jBsize;j+) memory_stateji=0; YZ_replace:YZ_replace() s=0; int YZ_replace:findSpace()/查找是否有空闲内存 for(int i=0; iBsize; i+) if(blocki.content = -1) return i;/找到空闲内存, return -1; int YZ_replace:findExist(int curpage)/查找内存中是否有该页面 for(int i=0; iBsize; i+) if(blocki.content = pagecurpage.content)/找到内存中有该页面,返回 BLOCK 中位置 return i; return -1; int YZ_replace:findReplace()/查找先进先出算法中应予置换的页面 int pos = 0; for(int i=0; i= blockpos.timer) /找到应予置换页面,返回 BLOCK 中位置 pos = i; return pos; void YZ_replace:FIFO()/先进先出核心算法 int exist,space,position ; for(int i=0; iPsize; i+) exist = findExist(i); if(exist != -1)/内存中有该页面 for(int b=0; bBsize; b+) memory_statebi=memory_statebi-1; s+;/记录命中数的变量加 1 else space = findSpace(); if(space != -1)/内存中有空闲 for(int b=0; bBsize; b+) memory_statebi=memory_statebi-1;/将第一列的数组复制到第二列 blockspace = pagei; memory_statespacei=blockspace.content; else/内存中没有空闲 for(int b=0; bBsize; b+) memory_statebi=memory_statebi-1; position = findReplace();/找到要置换的位置 blockposition = pagei; memory_statepositioni=blockposition.content; for(int j=0; jBsize; j+) blockj.timer+;/BLOCK 中所有页面 TIMER+ void YZ_replace:BlockClear()/BLOCK 恢复 for(int i=0; iBsize; i+) blocki.content = -1; blocki.timer = 0; typedef struct page int num; /*记录页面号*/ int time; /*记录调入内存时间*/ Page; /* 页面逻辑结构,结构为方便算法实现设计*/ Page bBsize; Page callBsize; /*内存单元数*/ int cBsizePsize; /*暂保存内存当前的状态:缓冲区*/ int queue100; /*记录调入队列*/ int K; /*调入队列计数变量*/ void InitL(Page *b,int cBsizePsize) /*初始化内存单元、缓冲区*/ int i,j; for(i=0;iBsize;i+) bi.num=-1; bi.time=Psize-i-1; for(i=0;iBsize;i+) for(j=0;jPsize;j+) cij=-1; int GetMax(Page *b)/*取得在内存中停留最久的页面,默认状态下为最早调入的页面*/ int i; int max=-1; int tag=0; for(i=0;imax) max=bi.time; tag=i; return tag; int Equation(int fold,Page *b)/*判断页面是否已在内存中*/ int i; for(i=0;i=0) bval.time=0; for(i=0;iBsize;i+) if (i!=val) bi.time+; else queue+K=fold;/*记录调入页面*/ val=GetMax(b); bval.num=fold; bval.time=0; for(i=0;iBsize;i+) if (i!=val) bi.time+; /*以下是最佳置换算法*/ void YZ_replace:OPT() int exist,space,position ; for(int i=0; iPsize; i+) exist = findExist(i); if(exist != -1)/内存中存在该页面,此时即为命中 for(int b=0; bBsize; b+) memory_statebi=memory_statebi-1; s+;/命中次数加 1 else/内存中不存在该页面 space = findSpace();/查找是否有空闲内存 if(space != -1)/有空闲内存 for(int b=0; bBsize; b+) memory_statebi=memory_statebi-1; blockspace = pagei;/页面调入内存 memory_statespacei=blockspace.content; else for(int k=0; kBsize; k+) memory_stateki=memory_stateki-1; for(int j=i; jPsize; j+) if(blockk.content != pagej.content) blockk.timer = 1000; /将来不会用,设置 TIMER 为一个很大数 else blockk.timer = j; break; position = findReplace(); blockposition = pagei; memory_statepositioni=blockposition.content; int decide(string str) /判断输入数据是否为整型 for(int i=0;istr; a=decide(str); while(a=0) cout输入错误,请重新输入!str; a=decide(str); d=trans(str); return d; void Put()/页面产生的方法 cout请选择产生页面的方法 a:随机产生 b:输入产生endl; coutF; while(F!=a if(F=a) P_String(QString) ; if(F=b) cout请输入各页面号:endl; for(int i=0;iPsize;i+) QStringi=put(); coutendl; cout|-|endl; void main() cout|-页 面 置 换 算 法-|endl; cout|-|endl; int t=1; while(t) Put(); YZ_replace test1; YZ_replace test3; char select; do cout请选择要应用的算法:FIFO 算法 LRU 算法 OPT 算法 退出endl; int p,q; coutselect; while(select!=0 if(select=0) cout您选择的是菜单endl; cout完成退出.endl; t=0; if(select=1) cout您选择的是菜单endl; coutFIFO 算法状态:endl; test1.initia1(QString); test1.FIFO(); test1.BlockClear(); cout-endl; for(p=0;pBsize;p+) for(q=0;qPsize;q+) couttest1.memory_statepq ; coutendl; cout-endl; cout命中率:test1.s/Psizeendl; test1.YZ_replace(); coutendl; if(select=2) int i,j; K=-1; InitL(b, c); for(i=0;iPsize;i+) Lru(QStringi,b); c0i=QStringi;/*记录当前的内存单元中的页面*/ for(j=0;jBsize;j+) cji=bj.num; cout您选择的是菜单endl; coutLRU 算法状态:endl; cout-endl;/*结果输出*/ for(i=0;iBsize;i+) for(j=0;jPsize;j+) if(cij=-1) cout 0; else cout cij; cout endl; cout-endl; cout命中率:(Psize-(K+1)/Psize; coutt; coutendl; if(select=3) cout您选择的是菜单endl; coutOPT 算法状态:endl; test3.initia1(QString); test3.OPT(); test3.BlockClear(); cout-endl; for(p=0;pBsize;p+) for(q=0;qPsize;q+) couttest3.memory_statepq ; coutendl; cout-endl; cout命中率:test3.s/Psizeendl; test3.YZ_replace(); coutendl; while(select=1|select=2|select=3); 4测试结果测试结果 4.1 页面选择测试页面选择测试 图 41 图 42 分析:页面产生的方法有两种选择,分别是随机产生和自己输入产生,选择菜单的时候有 对异常输入的处理,如果输入错误,有错误提示,当输入正确菜单的时候,选择 a,自动 产生页面走向,如果选择 b,自己可以任意输入,如果输入错误,有错误提示。 4.2 应用算法选择测试应用算法选择测试 图 43 分析:选择算法时,有异常处理,即如果输入错误,有错误提示。如果选择菜单 1,即选 择了 FIFO 算法,展示此算法的置换状态并显示命中率。置换状态以二维数组的形式输出, 既直观又清晰。 图 44 分析:算法一进行完以后,界面自动跳到应用算法的选择界面,即可以再次选择置换算法, 选择菜单 2,即选择了 LRU 算法,展示此算法的置换状态并显示命中率,可以和第一个算 法进行对比,找出两种算法的不同。 图 45 分析:算法二进行完以后,界面自动跳到应用算法的选择界面,即可以再次选择置换算法, 选择菜单 3,即选择了 OPT 算法,展示此算法的置换状态并显示命中率,可以和第二个算 法进行对比,找出两种算法的不同。 图 46 分析:算法三进行完以后,界面自动跳到应用算法的选择界面,选择 0,可以退出此系统, 显示完成退出。 5总结总结 为期两周的操作系统课设在不断的探索、尝试、成功中结束了。现在,站在成功地峰 顶,回顾着走过的一路,真是什么感觉都有,枯燥、失败、劳累、迷茫、喜悦,应该说, 我的设计体会相当深刻。 首先,谈谈本系统的不足: 第一,我设计的页面值换算法里,页面个数和内存个数是一个定数,在这一点上没有 实现与操作员的交互,即页面数和内存个数并不能手动输入;第二,我设计的系统在界面 上并没有太大的优化,没有实现选择算法后可以重新选择页面产生的算法,重新进行页面 置换的选择。总体上来说,这两方面是本系统可以改进的地方,虽然我的课设已经验收, 但是我在验收完成后,继续完善了我的整个界面并改进了系统的不足之处,以达到系统的 完整性,简洁性,交互性。 其次,谈谈本系统特色、新的发明、创造等: 第一,在我的系统里,我觉得最大的亮点以及不同于别人的地方就是将三种页面置换 算法按照课本上老师讲的方式直观简便的输出 ,在采用输出算法时,我摒弃了常人所用的 一维数组输出法,而别出心裁的采用了二维数组的输出算法,模拟了内存的物理块,清晰 直观的表达了页面是如何在外存中被调入内存中的,以及各页面在调入过程中是否命中或 在置换时又置换了内存中哪个页面。第二,在软件工程的角度来看,我的系统具有高内聚 低耦合的优点,即各种算法之间,并不影响彼此的函数调用,而在各算法的内部,内聚度 很高。 最后,在整体上自我评价一下我的系统: 第一,在功能上,它完全实现了各种页面置换算法的模拟;第二,在界面设计上,新 颖独特,独树一帜,采用了二维数组的输出方法了;第三,异常处理面面俱到,不需要担 心因为输入错误而出现乱码,甚至重新执行。 我的结束语: 在此课设期间我为自己总结了四句话:鄙视平庸和碌碌无为,敢于主张自己并坚持不 懈,用于忍耐寂寞、枯燥和劳累,善于探求登峰捷径且百折不挠。 最最后,也是我最想说的话,衷心地感谢李新荣老师对我的悉心指导和最大的信任。 6程序使用说明书程序使用说明书 首先,我的程序采用 C+语言编写,需要在 Windows XP 操作系统中的 Microsoft Visual C+6.0 编程环境中运行,打开 Microsoft Visual C+6.0 编程环境,新建一个编译文 件; 其次,打开我的程序文档,将程序复制到编程环境中,进行调试、链接和执行,在执 行过程中,系统界面已经给出各种提示,测试人员可以随意输入,出错后,会自动跳出错 误提示。 最后,测试人员可以在系统界面的提示下,自己退出系统。 7参考文献参考文献 1、 现代操作系统 汤小丹 电子工业出版社 2、 软件工程导论 (第五版)张海藩 北京人民邮电出版社 3、 C+程序设计基础 周蔼林 林伟健 电子工业出版社 4、 数据结构 (第二版)刘振鹏 张小莉 郑艳娟 中国铁道出版社 袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃 蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃 袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆 艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂 肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论