操作系统课程设计44409_第1页
操作系统课程设计44409_第2页
操作系统课程设计44409_第3页
操作系统课程设计44409_第4页
操作系统课程设计44409_第5页
免费预览已结束,剩余39页可下载查看

下载本文档

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

文档简介

1、任务一、进程创建、控制与撤消一、 目的:通过进程的创建和控制的设计来达到如下目的:1、加深对进程概念的理解,明确进程和程序的区别;2、进一步认识并发执行的概念,区别顺序执行和并发执行;3、分析进程争用临界资源的现象,学习解决进程互斥的方法;二、 内容:在WINDOWS环境下模拟实验:1、编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四 作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。2、同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出 来,同样通过终端输出。3、按进程的优先级的顺序撤消进程,同时通过终端显示 PCB的撤消

2、过程和 内存的释放过程程序流程图:源代码如下:#include<iostream>using namespace std;struct PCBint pid;int priority;int size;int detail;int isrun;PCB running20, ready20;int sum = 0, pid_1;void choose();void menu();int create()if (sum >= 20)cout << " 内存已满,请先结束或换出进程" << endl;elsecout << &

3、quot; 请输入第 " << sum + 1 << " 个进程 "<<endl;cout << " 请输入进程的 pid" << endl;cin >> runningsum + 1.pid;cout << " 请输入新的进程的优先级" << endl;cin >> runningsum + 1.priority;cout << "请输入新的进程的大小" << endl;c

4、in >> runningsum + 1.size;cout << "请输入新的进程的详情" << endl;cin >> runningsum + 1.detail;runningsum + 1.isrun = 1;sum+;return runningsum - 1.isrun;choose();void display()int pid;cout << " 请输入进程的 pid" << endl;cin >> pid;if (pid > 0 &&

5、; pid <= 20 && runningpid.isrun = 1)cout << " 进程的 pid 是 :"<< runningpid.pid<<endl;cout << " 进程的优先级是:"<< runningpid.priority<<endl;cout << " 进程的大小是:"<< runningpid.size<<endl;cout << " 进程的相关信息:&qu

6、ot;<< runningpid.detail<<endl;elsechoose();void replace()int pid1, pid2;cout << " 请输入第一个替换进程的 pid" << endl;cin >> pid1;cout << " 请输入第二个替换进程的 pid" << endl;cin >> pid2;if (pid1 > 0 && pid1 <= 20 && runningpid1.is

7、run = 1)if (runningpid1.priority > runningpid2.priority)ready20.pid = runningpid1.pid;ready20.priority = runningpid1.priority;ready20.size = runningpid1.size;ready20.detail = runningpid1.detail;runningpid1.pid = runningpid2.pid;runningpid1.priority = runningpid2.priority;runningpid1.size = runnin

8、gpid2.size;runningpid1.detail = runningpid2.detail;runningpid2.pid = ready20.pid;runningpid2.priority = ready20.priority;runningpid2.size = ready20.size;runningpid2.detail = ready20.detail;cout << " 替换完成 " << endl;cout << " 被替换进程的 pid 是 :"<< ready20.pid<

9、;<endl;cout << "被替换进程的优先级是:", ready20.priority;cout << "被替换进程的大小是:"<< ready20.size<<endl;cout << "被替换进程的详情是:"<<ready20.detail<<endl;elsecout << " 进程优先级不够大"<<endl;elsecout << " 所查看运行进程不存在 "

10、;<<endl;choose();void kill()int kpid;cout << " 请输入进程的 pid:"cin >> kpid;if (kpid > 0 && kpid < 20 && runningkpid.isrun = 1)runningkpid.isrun = 0;choose();void choose() int choose;cout << " 是否继续操作?继续,请输入1 ,退出:按任意键 " << endl;cout &

11、lt;< " 请输入你的选择: "cin >> choose;if (choose = 1) menu();else exit(0);void menu() int n, i;n = 1;while (n = 1)system("cls");cout<<进程模拟<< endl;cout << " 1. 创建进程 2. 查看进程信息" << endl;cout << " 3.撤销进程4. 终止进程 " << endl;cout

12、<<"5. 退出 " << endl;cout << " 请输入你的选择: "cin >> i;switch (i)case 1:create();break;case2:display(); break;case3:replace(); break;case 4:kill();break;case5:exit(0);default:n = 0;int main()menu();return 0;运行结果如下:raw C;w indo¥vs5/stem 32cnnde3(e进程模拟,创建进程 2

13、.查看 ,撤销进程4J5,退出 楂输入你的选择,国 Ci r d q ws syste mmd. exe23请输入新的进程的优先级 力青输入新的进程的大小 %输入新的进程的详情 12SB C;v.ri n d ovrssystem32cmd.exe按任意键退出:程进进止模2.st4.退 2ff进销I .仓3举心出的的程人入,日7E:1自?择pi优的的的人请请1进进进进口辑SH C:vindowssystem 3 2cmd.exe自信程程进抵旨-4.退 模2.、14:1 培程5.除四送销 建撤 创3.1选的 的程 尊 人入 i工.创建进程蓑进程3 .撤销进程 4.奏止进5.退出翻建螺誉赢程的Md

14、 请输入第二个替换进程的pid23嚣鞭曾嚣磐在请输入1,退出,按任意键任务三、基本存储器管理1、 目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。 当用户提出申请存储 器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使 用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源 时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同 的存储管理方式下怎样实现主存的分配和回收。2、 内容:从下两种存储管理方式的主存分

15、配和回收中, 选择一种管理方式来实现 本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。程序流程图:源代码如下:#include<conio.h>#include<iostream># define n 10 /系统最大作业数# define maxsize 20 /空闲区最大内存# define minisize 100using namespace std;structfloat addr; /已分配分区起始地址float size; /已分配分区长度,单位为字节int flag;us

16、eedn; / 已分配区表structfloat addr; /空闲区起始地址float size; /空闲区大小int flag; /0 为空, 1 未分配freesmaxsize;void allo(char a,float xk)int i,k;float ad;k=-1;for(i=0;i<maxsize;i+)if(freesi.size>=xk&&freesi.flag=1)if(k=-1|freesi.size<freesk.size)k=i;if(k=-1)cout<<”无可用空闲区"<<endl;return

17、;if(freesk.size-xk<=minisize)freesk.flag=0;ad=freesk.addr;xk=freesk.size;elsefreesk.size=freesk.size-xk;ad=freesk.addr+freesk.size;i=0;while(useedi.flag!=0&&i<n)i+;if(i>=n)cout<<"error,未初始化"<<endl;if(freesk.flag=0)freesk.flag=1;elsefreesk.size=freesk.size+xk;re

18、turn;elseuseedi.addr=ad;useedi.size=xk;useedi.flag=a;return;void findc(char x)int i,k,a,s,t;float S,L;s=0;while(useeds.flag!=x|useeds.flag=0)&&s<n)s+;if(s>=n)cout<<"没有找到该作业"<<endl;return;useeds.flag=0;S=useeds.addr;L=useeds.size;a=-1;k=-1;i=0;while(i<maxsize&am

19、p;&(a=-1|k=-1)if(freesi.flag=1)if(freesi.addr+freesi.size=S)k=i;if(freesi.addr=S+L)a=i;i+;if(k!=-1)if(a!=-1)freesk.size=freesa.size+freesk.size+L;freesa.flag=0;elsefreesk.size=freesk.size+L;elseif(a!=-1)freesa.addr=S;freesa.size=freesa.size+L;elset=0;while(freest.flag=1&&t<maxsize)t+;

20、if(t>=maxsize)cout<<" 内存空闲表没有空间, 回收空间失败"<<endl;useeds.flag=a;return;freest.addr=S;freest.size=L;freest.flag=1;return;int main( )int i,a;float xk;frees0.addr=10240;frees0.size=10240;frees0.flag=1;for(i=1;i<maxsize;i+)freesi.flag=0;for(i=0;i<n;i+)useedi.flag=0;while(1)(c

21、out<<"选择操作:"<<endl<<"0-退出"<<endl<<"1-分配内存"<<endl<<”2-回收已 分配内存"<<endl<<"3-显示内存信息"<<endl;cout<<”请输入你的选择:"cin>>a;switch(a)(case 0: exit(0);case 1:cout<<输入作业名:"cin>>

22、a;cout<<”请输入作业大小:"cin>>xk;allo(a,xk);break;case 2:cout<<输入要回收分区的作业名"cin>>a;findc(a);break;case 3:cout<<输出空闲分区:"<<endl<<”起始地址分区长度标志"<<endl;for(i=0;i<maxsize;i+)cout<<freesi.addr<<" "<<freesi.size<<

23、;" "<<freesi.flag<<endl;cout<<"按任意键,输出已分配信息"<<endl;getch();cout<<"查看已分配分区:"<<endl<<"起始地址 分区长度 标志"<<endl;for(i=0;i<n;i+)if(useedi.flag!=0)cout<<useedi.addr<<" "<<useedi.size<<&

24、quot; "<<useedi.flag<<endl;elsecout<<useedi.addr<<" "<<useedi.size<<" "<<useedi.flag<<endl;break;default:cout<<"输入有误! ! "<<endl;return 1;11 t 存-.内息择19小 配信选二大 -4t= 作内己内移器存 : 内育推 配信选 索窗 内己内你操出配收受作套出配收尖 分回分回显

25、输 选所a-I3-请*选 Al-e-A请国a C;Yindo?/5system32cmd.exe内息择,现配信选区短内己叫你闲址1015空地 0000000000000000000 -0-s 始 0000000000000000001 213 0 010 010 0 0 0 0 0 0 0 0101010' 0 0C: ,7- i ndm ?E & exeI a 0 0 0 a 0配分区*分区长度标志起始夏量意键.输出已分配信息204s 11 123=。维分回显输0A000000 SI 选0-E-B-请0_000 0 0-030存 .配信选-获刀雷 作内昌你 操出配收一父任务五

26、、死锁的避免一、目的在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系 统的吞吐量,但可能发生一种危险一一死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这 种状态时,若无外力作用,他们都无法在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防 死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的 限制条件较弱,有可能获得令人满意的系统性能。:、内容利用银行家算法来避免死锁的发生#include<iostream>#include<iom

27、anip>#define max_s 20#define max_p 100int availablemax_s;int max max_p max_s ;int allocation max_p max_s ;int need max_p max_s ;int request max_s ;int requestPID;int source;int process;using namespace std;/1:表示请求的资源>还分配的资源/2:表示请求的资源>系统剩余的资源/3:表示不存在安全序列/0:成功int banker( int stSq )int i , j ,

28、k;for( i = 0 ; i < source ; i+ )if( requesti > needrequestPIDi ) return 1;for( i = 0 ; i < source ; i+ )if( requesti > availablei ) return 2;for( i = 0 ; i < source ; i+ )availablei -= requesti;allocationrequestPIDi += requesti;needrequestPIDi -= requesti;int finish max_p = 0 ;int wor

29、k max_s ;int curS;for( i = 0 ; i < source ; i+ ) worki = availablei;for( k = 0 ; k < process ; k+ )bool flag = false;for( i = 0 ; i < process && !flag ; i+ )if( finishi = 0 )flag = true;for( j = 0 ; j < source && flag; j+ )if( needij > workj )flag = false;curS = i;if(

30、!flag )for( j = 0 ; j < source ; j+ )availablej += requestj;allocationrequestPIDj -= requestj;needrequestPIDj += requestj;return 3;finishcurS = k+1;for( j = 0 ; j < source ; j+ )workj += allocationcurSj;for( i = 0 ; i < process ; i+ )j = 0;while( finishj != i + 1 )j+;stSqi = j;return 0;void

31、 setCS()source = 3;process = 5;int a = 4 , 5 , 8 ;int max20100;int m max_s = 8 , 5 , 4 , 5 , 3 , 3 , 10 , 1 , 3 , 3 , 3 , 3 , 5 , 4 , 4 ,;int al max_s = 1 , 2 , 1 , 3 , 1 , 1 , 4 , 1 , 3 , 3 , 2 , 2 , 1 , 1 , 3 ;int re = 0 , 2 , 2 ;int i , j;cout<<"当前可用资源数:"<<endl;for( i = 0 ;

32、i < source ; i+ )(availablei = ai;cout<<setw(5)<<availablei;cout<<endl<<endl;cout<<"进程所需资源的最大数量:"<<endl;for( i = 0 ; i < process ; i+ )(for( j = 0 ; j < source ; j+ )(maxij = mij;cout<<setw(5)<<maxij;cout<<endl;cout<<endl

33、;cout<<"进程已分配到资源量:"<<endl;for( i = 0 ; i < process ; i+ )(for( j = 0 ; j < source ; j+ )(allocationij = alij;cout<<setw(5)<<allocationij;cout<<endl;)cout<<endl;cout<<”进程还需的资源量:"<<endl;for( i = 0 ; i < process ; i+ )(for( j = 0 ;

34、 j < source ; j+ )(needij = maxij - allocationij;cout<<setw(5)<<needij;)cout<<endl;)cout<<endl;requestPID = 1;cout<<"进程"<<requestPID<<"正在请求的资源:"<<endl;for( i = 0 ; i < source ; i+ )(requesti = rei;cout<<setw(5)<<re

35、questi;)cout<<endl<<endl;)void main()(setCS();int stSq max_p = 0 ;cout<<"银行家算法的演示"<<endl;int error = banker( stSq );if( !error )cout<<”可以进行分配"<<endl;for( int i = 0 ; i < process ; i+ )cout<<setw(5)<<stSqi;cout<<endl;elsecout<

36、<"剩余资源无法满足要求,拒绝分配资源"<<endl;任务六、磁盘空间的分配与回收1、 目的:磁盘初始化时把磁盘存储空间分成许多块(扇区) ,这些空间可以被多个用户共享。用户作业在执行期间常常要在磁盘上建立文件或已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。 。一个文件存放到磁盘上,可以组织成顺序文件(连续文件) 、链接文件(串联文件) 、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实验使学生掌握磁盘存储空间的分

37、配和收回算法。2、 内容:模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。从下题目中选择一题来实现设备的管理:( 1) 连续的磁盘存储空间的分配和回收。( 2) 用位示图管理磁盘存储空间。( 3)模拟 UNIX 系统的空闲块组链接法,实现磁盘存储空间的管理。3、 提示: 参考教材P231P2341、 连续的磁盘存储空间的分配和回收:( 1) 要在磁盘上建立顺序文时,必须把按序排列的逻辑记录依次存放在磁盘的连续存储空间中。可假定磁盘初始化时,已把磁盘 存储空间划分成若干个等长的块(扇区) ,按柱面号和盘面号的顺序给每一块确定一个编号。随着文件的建立、删除、磁盘存储空间被分成许多区(

38、每一区包含若干块) ,有的区存放着文件,而有的区的空闲的。 当要建立顺序文件时必须找到一个合适的空闲区来存放文件记录,当一个文件被删除时,则该文件占用的区应成为空闲区。为此可用一张空闲区表不记录磁盘存储空间中尚未占用的部分,格式如下:序列起始空闲块号空闲块个数状态156未分配2143未分配32130未分配4E目1 111 111 111 111 111 11111111(2)要建立文件时,先查找空闲区表,从状态为“未分配”的登记栏目中找出一 个块数能满足要求的区,由起始空闲块号能依次推得可使用的其它块号。若不需 要占用该区的所有块时,则剩余的块仍应为未分配的空闲块,这时要修改起空闲 块号和空闲

39、块数。若占用了该区的所有块,则相应登记栏中的状态修改成“空表 目”,删除一个文件时,从空闲区表中找一个状态为“空表目”的登记栏目,把归 还的起始块号和块数填入对应的位置。磁盘存储空间的分配和回收算法类似于主存储器的可变分区方式的分配和回 收。同学们可参考上一实验的第一题。(3)当找到空块后,必须启动磁盘把信息存放到指定的块中,启动磁盘必须给出 由三个参数组成的物理地址:柱面号、磁道号和物理记录号。故必须把找到的空 闲块号换算成磁盘的物理地址。为了减少移臂次数,磁盘上的信息按柱面上各磁道顺序存放。现假定一个盘 组共有200个柱面,(编号0199)每个柱面有20个磁道(019,同一柱面上 的各磁道

40、分布在各盘面上,故磁道号即盘面号。),每个磁道被分成等长的6个物 理记录(编号05,每个盘面被分成若干个扇区,故每个磁道上的物理记录号即 为对应的扇区号。)。那么,空闲块号与磁盘物理地址的对应关系如下:假设M=空闲块号/6, m=空闲块号/6则物理记录号=m磁道号=M/20,柱面号=M/204) 删除一个文件时,从文件目录表中可得到该文件在磁盘上的起始地址和逻辑记录个数,假定每个逻辑记录占磁盘上的一块,则可推算出归还后的起始空闲块号和块数,登记到空闲区表中。换算关系如下:起始空闲块号= (柱面号 *20+磁道号) *6+物理记录号空闲块数=逻辑记录数5) 请设计磁盘存储空间的分配和回收程序,要

41、求把分配到空闲块转换成磁盘物理地址,把归还的磁盘空间转换成空闲块号假定空闲区表的初值如提示( 1)中指出,现有一文件要占用 10 块,运行你所设计的分配程序,显示或打印分配后的空闲区表以及分配到的磁盘空间的起始物理地址。然后,有一文件被删除,它占用的磁盘空间为: 1 号柱面 2 号磁道, 0号物理记录开始的 4 块,运行你所设计划的回收程序,显示或打印回收后的空闲区表。2、用位示图管理磁盘存储空间的分配和回收:( 1)为了提高磁盘存储空间的利用率,可在磁盘上组织成链接文件、索引文件,这类文件可以把逻辑记录存放在不连续的存储空间。为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指

42、出。位示图由若干字节构成,每一位与磁盘上的一块对应, “ 1”状态表示相应块已占用, “ 0”状态表示该块为空闲。位示图的形式与上一实验中的位示图一样,但要注意,对于主存储空间和磁盘存储空间应该用不同的位示图来管理,绝不可混用。( 2)申请一块磁盘空间时,由分配程序查位示图,找出一个为“ 0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“ 1 ” 。假设现在有一个盘组共 80 个柱面,每个柱面有两个磁道,每个磁道分成4 个物理记录。那么,当在位示图中找到某一字节的某一位为 “ 0” 时, 这个空闲块对应的磁盘物理地址为:柱面号=字节号磁道号=位数/4物理记录号=位数 /4(3)

43、归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在 位示图中的对应位,把该位置成“ 0”。按照(2)中假设的盘组,归还块在位示图 中的位置计算如下:字节号=柱面号位数=磁道号*4+物理记录号(4)设计申请一块磁盘空间和归还一块磁盘空间的程序。要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间物理地址显示或打印出来, 归还时把归还块对应于位示图的字节号和位数显示或打印出来。(5)假定已有如表61磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,按(4)中要求显示或打印运行的结果。然后再归还如表 6-2的空间, 运行回收程序,按(4)中的要求显示或打印运行结

44、果。柱面号磁道号物理记录号001002010013100112表61柱面号磁道号物理记录号002010101表623、模拟UNIX系统的空闲块成组链接法,实现磁盘存储空间的管理:(1)假定磁盘存储空间已被划分成长度 n的等长块,共有M块可供使用。UNIX 系统中采用空闲块成组链接的方法来管理磁盘存储空间,将磁盘中的每N个空闲块(NM)分成一组,最后一组可以不足 N块,每组的第一块登记了下一组空闲 块的块数和块号,第一组的块数和块号登记在专用块中,登记的格式如下:空闲块数K 空闲块号1 空闲块号2空闲块号K当第一项内容为“ 0”时,则第二项起指出的空闲块是最后一组。(2)现模拟UNIX系统的空闲

45、块成组链接,假定共有8块可供使用,每3块为一 组,则空闲块成组链接的初始状态为:AA1A4开始时,空闲块号是顺序排列的,但经若干次的分配和归还操作后,空闲块的链 接就未必按序排列了。用二维数组AMN来模拟管理磁盘空间,用 Ai表示第i块,第0块A0 作为专用块。(3)成组链接的分组情况记录在磁盘物理块中,为了查找链接情况,必须把它们 读入主存,故当磁盘初始化后,系统先将专用块内容复到主存中,定义一个数组 MA存放专用块内容,即MA=A0。中请一块磁盘空间时,查 MA,从中找出空 闲块号,当一组空闲块只剩第一块时,则应把该块中指出的下一组的空闲块数和 块号复制到专用块中,然后把该块分配给申请者。

46、当一组的空闲块分配完后则把 专用块内容(下一组链接情况)复制到主存,再为申请者分配。分配算法如图61 o(4)归还一块时给出归还的块号,若当前组不满规定块时,将归还块登记入该组; 若当前组已满,则另建一新组,这时归还块作为新一组的第一块,应把主存中登 记的一组链接情况MA复制归还块中,然后在 MA重新登记一个新组。归还一块 的算法图62。图62采用成组链接的回收算法(5)设计分配和归还磁盘空间的程序,能显示或打印分配的磁盘空间的块号,在 完成一次分配或归还后能显示或打印各空闲块组的情况(各组的空闲块数和块 号)。本实验省去了块号与物理地址之间的转换工作,而在实际的系统中必须进行块号与物理地址的

47、转换工作。(6)运行你所设计的程序,假定空闲块链接的初始状态如提示(2),现先分配4块,再依归还第2块和第6块。把执行后分配到的块号依次显示或打印出来,且 显示或打印空闲块组的情况。在上次执行的基础上继续分配 3块,然后归还第1块,再申请5块,显示或 打印依次分配到的块号及空闲块组情况。#include<iostream> using namespace std;void init(int disk88)int cyd,tra,sor;char select='Y'cout<<”开始初始化."<<endl;while(select=

48、'y'|select='Y')cout<<"请输入柱面号:"cin>>cyd;cout<<"请输入磁道号:"cin>>tra;cout<<"请输入物理地址号:”;cin>>sor;diskcyd4*tra+sor=1;cout<<”是否继续 Y|N"<<endl;cout<<"请输入你的选择:"getchar();cin>>select;void loca(int disk88)int i,j;int flag=0;int cyd,tra,sor;for(i=0;i<8;i+)for(j=0;j<8;j+)if(diskij=0) diskij=1;flag=1;break;if(flag=1) break;if(flag=1)cyd=i;tra=j/4;sor=j%4;cout<<"分配到的柱面号

温馨提示

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

评论

0/150

提交评论