版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中北大学软件学院实训说明书实训名称: 操作系统课程设计 基于Linux的设备分配及磁盘调度算法题目名称: 软件工程专 业: 班 级: 12210A02 小组成员学号: 1221010516 姓名: 高田田 成绩: 学号: 1221010543 姓名: 王 浩 成绩: 学号: 1221010618 姓名: 许嘉阳 成绩: 学号: 1221010707 姓名: 王晋英 成绩: 薛海丽指导教师: 2015 年 1 月任务分工情况说明姓名分工组长高田田 负责小组分工,资料查询,参与整体需求分析及概要设计,完成设备分配部分的详细设计及代码。完成代码整合及主函数的编写。完成小组说明书文档整理工作。组员王浩
2、 资料查询, 参与整体需求分析及概要设计,完成磁盘调度中先来先服务(FCFS)和循环扫描调度算法(CSCAN)部分的详细设计及代码,协助完成设备分配。组员许嘉阳 资料查询, 参与整体需求分析及概要设计,完成磁盘调度中最短寻道时间优先算法(SSTF)和扫描调度算法(SCAN)部分的详细设计及代码代码,协助完成设备分配。组员王晋英 资料查询, 参与整体需求分析及概要设计,完成进程控制部分的详细设计及代码编写。目录1. 绪论12. 需求分析12.1. 目的12.2. 内容22.2.1. 进程调度22.2.2. 设备分配22.2.3. 磁盘调度33. 概要设计43.1. 进程调度43.1.1. 功能模
3、块图43.1.2. 相关函数53.2. 设备分配53.2.1. 功能模块图63.2.1. 相关函数63.3. 磁盘调度73.2.1. 功能模块图73.2.1. 相关函数74. 详细设计74.1. 进程调度74.1.1进程创建74.1.2进程切换94.1.3进程阻塞104.1.4进程唤醒104.1.5进程结束114.1.6进程显示124.2. 设备分配134.2.1. 设备分配134.2.2. 设备释放164.2.3. 设备添加194.2.4. 设备删除214.2.5. 设备显示244.3. 磁盘调度264.3.1. 先来先服务算法264.3.2 最短寻道时间优先算法274.3.3 扫描算法28
4、 4.3.4 循环扫描算法30 4.3.5 调用四种算法比较315. 心得体会326. 参考文献337. 源代码341. 绪论随着信息技术的发展, ,Linux操作系统得到了前所未有的广泛应用。Linux被应用到包括便携式电子设备、生物科技以及航天科技等各种领域。显然不同应用领域对Linux系统的实时性、公平性和吞吐量等性能有着不同的要求,而进程调度算法对Linux系统性能起着至关重要的作用,用来创建进程,撤销进程,实现进程转换,它提供了可运行得进程之间复用CPU的方法 ,并为创建的进程在设备分配功能中提供所必要设备。同时,Internet的飞速发展使数据增长,这给数据增长带来了很大的压力。对
5、数据的访问性能、数据传输性能、数据管理性能和存储扩展等方面都提出了比过去更高的要求。这需要一个既能满足大容量信息存储、能适应将来容量扩充要求的存储器管理系统,又可以大大提高传输速率,还可以完成信息高速处理的计算机体系架构。而随着技术的发展,设备管理技术和磁盘调度技术成为提高数据处理和数据传输的关键因素。因此,研究海量管理系统中的分配管理技术和磁盘调度策略具有重要意义。本次课程设计就这些问题展开了一些有意义的研究工作。2. 需求分析 2.1. 目的 (1)通过本实验可以加深理解有关进程控制块(PCB) 、进程队列的概念,体会并了解创建进程、切换进程、阻塞进程、唤醒进程、结束进程、显示进程的具体实
6、施过程。 (2)完成设备管理功能的模拟,掌握包括通道和控制器的添加和删除,设备的添加、删除,设备的分配和回收 。 (3)通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解。2.2. 内容 2.2.1. 进程调度 2.2.2.1.功能分析 (1)每个进程有一个进程控制块(PCB)表示。进程控制块包含如下信 息:进程名、进程编号、进程的大小和进程的临接PCB的地址。 (2)每个进程的状态可以是就绪(ready) 、执行(running)和阻塞 (bl
7、ock)三种状态之一。 (3)进程创建,由系统生成一个PCB结点,用进队函数放入就绪队列。 如果没有正在执行的进程,则将等待队列中就绪进程调入执行。 (4)进程切换,通过函数实现将运行队列中的执行进程调入就绪队列, 将等待队列中就绪进程调入执行。 (5) 进程阻塞,通过函数实现将运行队列中的执行进程调入阻塞队 列,将等待队列中就绪进程调入执行。 (6) 进程唤醒,通过函数实现将阻塞队列中的阻塞进程调入就绪队 列,将等待队列中就绪进程调入执行。 (7) 进程结束,通过函数实现将就绪队列中的就绪进程抢占运行队 列。 (8)进程显示,根据队列进程的存储特性,顺序查找到每个进程并依 次输出每个进程的名
8、称和大小。 (9) 所创建进程将会在设备分配功能中为其提供所需必要设备。 2.2.2.1.数据结构 进程控制块(PCB) 2.2.2. 设备分配 2.2.2.1.功能分析 (1)设备管理子系统涉及到通道控制表(CHCT)、控制器控制表(COCT) 和设备控制表(DCT)来体现输入输出系统。 (2)实现上述设备、控制器以及通道的层次关系,同时能够添加或删 除新的设备、控制器或通道。 (3)通过键盘命令模拟进程执行过程中提出的设备分配或释放请求, 并为此请求分配或释放设备。分配设备成功后可将进程状态调整为阻塞,释 放设备后变为就绪状态。 (4)分配设备时应如果该设备已被其它进程占用,则设备分配失败
9、, 请求进程进入阻塞状态,同时等待该设备的释放。如果设备空闲,进程占用 设备的同时还应提出申请控制器请求,直到与设备相关的通道都已申请成功 为止。 (5)设备、控制器或通道的释放应引起对应节点的等待队列中的第一 个阻塞进程被唤醒。如果被唤醒的进程还未完成申请操作,应继续执行上级 节点的申请操作。 2.2.2.2.数据结构 设备控制表(DCT) 控制器控制表(COCT) 通道控制表(CHCT) 2.2.3. 磁盘调度 系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。先来先服务算法(FCFS)
10、这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。 最短寻道时间优先算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大
11、。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。 扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集
12、中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。 循环扫描算法(CSCAN)循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。3. 概
13、要设计3.1. 进程调度 3.1.1. 功能模块图图3.1 进程管理功能模块图 3.1.2. 相关函数 void enqueue(int id,char *name,int size,struct PCB *head)-进程 进入队列(就绪队列、阻塞队列) struct PCB *dequeue(struct PCB *head)-进程移出队列 void createProcess()-创建进程 void switchProcess()-进程切换 void blockProcess()-阻塞进程 void wakeupProcess()-唤醒进程 void terminateProcess()
14、-结束进程 void displayProcessstatus()-显示进程状态 3.2. 设备分配 3.2.1. 功能模块图图3.2 设备分配功能模块图 3.2.1. 相关函数 struct DCT *findDCT(char name)-用设备名查找设备 struct COCT *findController(char name)-用控制器名查找控制器 struct CHCT *findChannel(char name)-用通道名查找通道 addProcesstoWaiting(*waiting,*p)-进入进程等待队列 add(*head,*node)-入队列 struct PCB *
15、getFirst(*head)-获得队列里的第一个进程 allocateCHCT(*chct,*p)-分配CHCT allocateCOCT(*coct,*p)-分配COCT allocateDCT()-分配DCT releaseCHCT(*name,*chct,*p)-释放通道 releaseCOCT(*name,*coct,*p)-释放控制器 releaseDCT()-释放设备 addChannel(char name)-增加通道 addController(*name,*chct)-增加控制器 addDevice(*name,*coct)-增加设备 deleteDCT(char name
16、DCT)-删除设备 deleteCOCT(char nameCOCT)-删除控制器 deleteCHCT(char nameCHCT)-删除通道 displayDCT()-显示设备3.3. 磁盘调度 3.2.1. 功能模块图图3.3 磁盘调度功能模块图 3.2.1. 相关函数 Sort(int Array,int n)-冒泡排序算法,从小到大排序 Output(int Track,int Num)-输出磁道请求顺序 FCFS(int Track,int Num)-先来先服务调度算法 SSTF(int Track,int Num)-最短寻道时间优先调度算法 SCAN(int Track,int
17、Num)-扫描调度算法 C_SCAN(int Track,int Num)-循环扫描调度算法4. 详细设计4.1. 进程调度 4.1.1进程创建 (1)核心代码void createProcess()printf(nname: );scanf(%s,name); printf(size: );scanf(%d,&size);printf(n); enqueue(id+,name,size,ready); /用进队函数将进程放入就绪队列 if(running=0) /如果没有正在执行的进程,则将等待队列中就绪进程调入执行 running=dequeue(ready); (2)测试结果图4.1.1
18、 进程管理主界面 图 进程创建前 图 进程创建后 4.1.2进程切换 (1)核心代码 void switchProcess() if(running!=0&ready-next!=0) enqueue(running-id,running-name,running-size,ready); /将正在执行的进程放入就绪队列 running=dequeue(ready); /将就绪队列中第一个进程 调入执行 elseprintf(没有可切换的进程n);(2)测试结果 图 进程切换前 图 进程切换后图 没有可切换的进程 4.1.3进程阻塞 (1)核心代码 void blockProcess()if(
19、running=0)printf(没有可阻塞的进程n); else enqueue(running-id,running-name,running-size,blocked); /将正在执行的进程挂入阻塞队列 running=0; if(ready-next=0) printf(没有可执行的进程n); else running=dequeue(ready); (2)测试结果 图 进程阻塞前 图进程阻塞后图 没有可阻塞的进程4.1.4进程唤醒 (1)核心代码 void wakeupProcess()if(blocked-next=0)printf(没有可激活的进程);elseenqueue(bl
20、ocked-next-id,blocked-next-name,blocked-next-size,ready);dequeue(blocked);if(running=0)running=dequeue(ready);(2)测试结果 图 进程唤醒前 图4.1.11 进程唤醒后图 没有可唤醒的进程4.1.5进程结束(1)核心代码void terminateProcess() if(running=0) printf(没有需要结束的进程n);else running=dequeue(ready);(2)测试结果 图 进程结束前 图 进程结束后图 没有可结束的进程4.1.6进程显示(1)核心代码v
21、oid displayProcessstatus()printf(-就绪状态-n);if(ready-next=0)printf(当前没有进程在该状态n);if(ready-next!=0)q=ready-next;while(ready-next!=0)printf(%s,ready-next-name);printf( %dn,ready-next-size);ready-next=ready-next-next;ready-next=q;printf(-执行状态-n);if(running=0) printf(当前没有进程在该状态n);if(running!=0)printf(%s,ru
22、nning-name);printf( %dn,running-size);printf(-阻塞状态-n);if(blocked-next=0) printf(当前没有进程在该状态nn);if(blocked-next!=0)p=blocked-next;while(blocked-next!=0)printf(%s,blocked-next-name);printf( %dn,blocked-next-size);blocked-next = blocked-next-next;blocked-next=p;(2)测试结果 图4.1.16 进程显示结果4.2. 设备分配 4.2.1. 设备分
23、配 (1)核心代码void allocateCHCT(struct CHCT *chct,struct PCB *p)/分配CHCT if(chct-occupied!=0) /如果通道被占用 printf(不能分配通道n); addProcesstoWaiting(chct-waiting,p);/添加进程到通道等待队列else chct-occupied=p;printf(分配成功!n); add(blocked,p);if(ready!=0)running=dequeue(ready);elserunning=0;/分配COCT void allocateCOCT(struct COCT
24、 *coct,struct PCB *p) if(coct-occupied!=0) printf(不能分配控制器n); addProcesstoWaiting(coct-waiting,p); add(blocked,p); if(ready!=0) running=dequeue(ready); elserunning=0; return;else coct-occupied=p; allocateCHCT(coct-chct,p); /已分配控制器请求分配通道 /分配DCT void allocateDCT() char nameDCT10;printf(请输入设备名称:);scanf(
25、%s,nameDCT);struct DCT * dct=findDCT(nameDCT); struct PCB * p = running;if(dct!=NULL&p!=NULL)if(dct-occupied!=0)printf(不能分配设备n);addProcesstoWaiting(dct-waiting,p);add(blocked,p);if(ready!=0)running=dequeue(ready);elserunning=0;return;elsedct-occupied=p;allocateCOCT(dct-coct,p); /设备分配成功请求分配控制器 else p
26、rintf(发生错误!n); (2)测试结果图4.2.1 设备管理主界面请求设备顺序为:process1-input1(成功) process2-printer2(失败:设备、控制器成功,通道被占用。进程阻 塞,挂入通道等待队列) process3-input1(失败:设备input1被占用) 图4.2.2 设备分配前 图4.2.3 设备分配后 4.2.2. 设备释放 (1)核心代码void releaseCHCT(char *name,struct CHCT *chct,struct PCB *p)/释放通道if(p!=NULL)addProcesstoWaiting(chct-waitin
27、g,p);if(strcmp(name,chct-occupied-name)=0)if(chct-waiting-next!=NULL)chct-occupied = dequeue(chct-waiting);elsechct-occupied = NULL;void releaseCOCT(char *name,struct COCT *coct,struct PCB *p)/释放控制器if(p!=NULL)addProcesstoWaiting(coct-waiting,p);if(strcmp(name,coct-occupied-name)=0)if(coct-waiting-ne
28、xt!=NULL)coct-occupied = dequeue(coct-waiting);elsecoct-occupied = NULL;releaseCHCT(name,coct-chct,coct-occupied); /控制器已释放,请求释放通道 void releaseDCT()/释放设备char nameDCT10;printf(请输入要释放的设备名称:n);scanf(%s,nameDCT);char nameP10;printf(请输入要释放的进程名称:n);scanf(%s,nameP);struct DCT *temp = findDCT(nameDCT);if(str
29、cmp(temp-occupied-name,nameP)=0)if(temp-waiting-next!=NULL)temp-occupied = dequeue(temp-waiting);elsetemp-occupied = NULL;releaseCOCT(nameP,temp-coct,temp-occupied); /设备释放成功,请求释放控制器 elseprintf(没有对应的设备和进程!); (2)测试结果释放:input1-process1(成功:同时通道等待队列中的process2设备分 配成功,process3的设备和控制器分配成 功,挂入通道等待队列) 图4.2.4
30、input1释放前 图4.2.5 input1释放后 4.2.3. 设备添加 (1)核心代码 void addChannel(char name)/增加通道 struct CHCT *temp=(struct CHCT *)malloc(sizeof(struct CHCT); strcpy(temp-name,name); temp-next=0; temp-busy=0; struct PCB *newnode=(struct PCB *)malloc(sizeof(struct PCB); temp-waiting=newnode; temp-waiting-next = NULL; t
31、emp-occupied=0; struct CHCT * head=chcts; /进入了chcts队列 while(head-next!=0) head=head-next; head-next=temp;void addController(char *name,struct CHCT *chct)/增加控制器 struct COCT *temp=(struct COCT *)malloc(sizeof(struct COCT); strcpy(temp-name,name); temp-next=0; temp-busy=0; struct PCB *newnode=(struct P
32、CB *)malloc(sizeof(struct PCB); temp-waiting=newnode; temp-waiting-next = NULL; temp-occupied=0; temp-chct= chct; struct COCT *head=cocts; /进入了cocts队列 while(head-next!=0) head=head-next; head-next=temp; void addDevice(char *name,struct COCT *coct)/增加设备 struct DCT *temp=(struct DCT *)malloc(sizeof(st
33、ruct DCT);strcpy(temp-name,name);temp-next=0;temp-busy=0;struct PCB *newnode=(struct PCB *)malloc(sizeof(struct PCB); temp-waiting=newnode;temp-waiting-next = NULL;temp-occupied=0;temp-coct= coct;struct DCT *head=dcts;while(head-next!=0)head=head-next;head-next=temp; (2)测试结果添加 通道:chct3添加控制器:coct4属于通
34、道chct3添加 设备:disk2属于控制器coct4 图4.2.6 添加前 图4.2.7 添加后 4.2.4. 设备删除 (1)核心代码 void deleteDCT(char nameDCT)/删除设备struct DCT *temp = findDCT(nameDCT);struct DCT *head = dcts;if(temp=NULL)printf(没有对应的设备!n);return ;elsewhile(head-next!=0)if(strcmp(temp-name,head-next-name)=0)if(temp-occupied!=NULL)printf(此设备现在正在
35、使用不能删除n);else head-next=head-next-next;break;else head=head-next;void deleteCOCT(char nameCOCT)/删除控制器struct COCT *temp=findController(nameCOCT);struct COCT *head=cocts;if(temp=NULL)printf(没有对应的控制器n);return;elsewhile(head-next!=0)if(strcmp(temp-name,head-next-name)=0)if(temp-occupied!=NULL)printf(此控制
36、器现在正在使用不能删除n);elsehead-next=head-next-next;break;head=head-next;void deleteCHCT(char nameCHCT)/删除通道struct CHCT *temp=findChannel(nameCHCT);struct CHCT *head=chcts;if(temp=NULL)printf(没有对应的通道n);return;elsewhile(head-next!=0)if(strcmp(temp-name,head-next-name)=0)if(temp-occupied!=NULL)printf(此通道现在正在使用
37、不能删除n);else/deleteDCT(temp-);head-next=head-next-next;/i+;break;head=head-next; (2)测试结果删除设 备:input1删除控制器:coct4 级联删除未被占用的设备disk2,若disk2被占用则不 能删除删除通 道:chct3 图4.2.8 删除前 图4.2.9 删除后 4.2.5. 设备显示 (1)核心代码 void displayDCT()struct DCT *dct;struct COCT *coct;struct CHCT *chct = chcts;struct PCB *pcb;/-显示通道 whi
38、le(chct-next!=NULL)chct = chct-next;printf( %s(,chct-name);if(chct-occupied!=0)printf(%s,chct-occupied-name);printf();pcb = chct-waiting-next; /waiting是头结点,pcb指向队列第一个进程while(pcb!=NULL)printf(%s,pcb-name);pcb = pcb-next;printf(n);/-显示控制器coct = cocts;while(coct-next!=NULL)coct = coct-next;if(strcmp(co
39、ct-chct-name,chct-name)=0)printf( %s(,coct-name);if(coct-occupied!=0)printf(%s,coct-occupied-name);printf();pcb = coct-waiting-next;while(pcb!=NULL)printf(%s,pcb-name); pcb = pcb-next;printf(n);/-显示设备dct = dcts;while(dct-next!=NULL)dct = dct-next;if(strcmp(dct-coct-name,coct-name)=0)printf( %s(,dct-
40、name);if(dct-occupied!=0)printf(%s,dct-occupied-name);printf();pcb = dct-waiting-next;while(pcb!=NULL)printf(%s,pcb-name); pcb = pcb-next;printf(n); (2)测试结果图4.2.9均为显示结果 4.3. 磁盘调度 本系统划分为四个模块:先来先服务算法模块void FCFS(int Track,int Num)、最短寻道时间优先算法模块void SSTF(int Track,int Num)、扫描算法模块void SCAN(int Track,int N
41、um) 和循环扫描算法模块:void C_SCAN(int Track,int Num)图4.3.1 磁盘调度首页 4.3.1. 先来先服务算法 输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移 动平均磁道数。主要代码:for(i=0;iN;i+)if(NumTracki)temp=Tracki-Num;else temp=Num-Tracki;Num=Tracki;Sum+=temp;AverTime=(float)Sum/N;图4.3.2 先来先服务算法执行结果 最短寻道时间优先算法首先将随机生成的磁盘请求序列与当前所在的磁道号进行比较,将所得之差用数组 Ttrack
42、保存起来。然后在求出Ttrack数组中最小的数即为第一个访问的磁道。再 将访问过的磁道置-1。再次循环,求出平均寻道长度,输出移动的平均磁道数。 主要代码:for(j=0;jN;j+) for(i=0;iN;i+)if(Ttracki=-1)continue;elseif(NumTracki) Ttracki=Tracki-Num;else Ttracki=Num-Tracki;min=200;minj=0;for(i=0;iN;i+)if(Ttracki=-1) continue;elseif(Ttrackimin)min=Ttracki;minj=i;Num=Trackminj;DiskD
43、count+=Num; Sum=Sum+Ttrackminj;Ttrackminj=-1;AverTime=(float)Sum/N;图4.3.3 最短寻道时间优先算法执行结果 扫描算法将磁道号用冒泡法将随机生成的磁道请求序列从小到大排序,随机生成的当前磁道 号,选择移动臂的移动方向,根据当前磁道在已排的序列中的位置,选择扫描的顺序, 求出平均寻道长度,输出移动的平均磁道数。主要代码:Output(Track,Num);for(i=0;iN;i+) tempi=Tracki; Sort(temp,N); /将访问序列从小到大排序 while(tempk=0;j-) printf( %d ,te
44、mpj); for(j=r;jN;j+) printf( %d ,tempj); Sum=Num-2*temp0+tempN-1; else printf(磁道访问的序列为:); for(j=r;j=0;j-) printf( %d ,tempj); Sum=Num-temp0+2*tempN-1; AverTime=(float)Sum/N;图4.3.4 扫描调度算法执行结果 循环扫描算法将磁道号用冒泡法从小到大排序,输出排好序的序列,随机生成的当前磁道号,规 定移动臂单向反复的从内向外移动,根据当前磁道在已排的序列中的位置,选择扫描 的顺序,求出平均寻道长度,输出移动的平均磁道数。主要代码:Output(Track,Num);for(i=0;iN;i+) tempi=Tracki; Sort(temp,N); /将访问序列从小到大排序 printf(磁道访问的序列为:); while(tempkNum) /找到Num在访问序列所在的位置 k+; l=k-1; r=k; for(j=r;jN;j+) printf( %d ,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省青岛市平度第三中学2025届物理高三上期中质量跟踪监视试题含解析
- 2025届安徽省青阳县第一中学高三物理第一学期期末质量检测模拟试题含解析
- 2025届山东省日照市五莲县物理高一上期末学业水平测试试题含解析
- 2025届四川省资阳市高中高三物理第一学期期中质量检测模拟试题含解析
- 云南省绿春县一中2025届物理高二上期末综合测试模拟试题含解析
- 江西省上饶市民校联盟2025届物理高二第一学期期中质量检测试题含解析
- 2025届黑龙江省友谊县红兴隆管理局第一高级中学物理高一第一学期期中考试模拟试题含解析
- 内蒙古包头市北方重工业集团有限公司第三中学2025届高三上物理期中学业水平测试模拟试题含解析
- 2025届江苏省徐州市睢宁县高级中学物理高一上期末监测试题含解析
- 2025届福建省长汀、连城、武平、永定、漳平、上杭六地一中联考物理高一上期中联考模拟试题含解析
- 新概念二单词表
- 全国职业院校技能大赛高职组(酒水服务赛项)备赛试题库(含答案)
- 幼儿园《警察职业介绍》PPT
- 2022考评员工作总结5篇
- 常用抗癫痫药物简介
- 期中考主题班会PPT
- 树立反对拜金主义人生观教育教育PPT讲座课件
- 水厂、污水厂生产管理运维手册
- 压路机维修服务合同协议书范本简约版
- 如何当好一名合格的项目经理课件
- 新形势下如何创新统计工作
评论
0/150
提交评论