计算机操作系统实验指导.doc_第1页
计算机操作系统实验指导.doc_第2页
计算机操作系统实验指导.doc_第3页
计算机操作系统实验指导.doc_第4页
计算机操作系统实验指导.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

计算机操作系统实验指导(学生试用讲义)信息科学与技术学院2012年9月操作系统实验说明操作系统课程教学的主要目的,是学习计算机操作系统中资源管理的方法和技术,这些方法和技术,在以后的实际应用开发中加以借鉴,可以提高所开发的应用程序质量。为了加深对操作系统教材中所讲述的一些主要管理策略和算法的理解、掌握这些算法的思想、并能用已学习的程序设计语言实现之,根据教学大纲的要求,在进行操作系统课程教学过程中必须安排若干实验。要完成这些实验,需要学生具有一定的C语言或其他编程语言的编程能力。根据我校学生的实际情况,也为了学生易于完成本课程的实验,我们在本实验指导中,对大多数实验给出了其C语言程序的实现框架,这些程序是可以直接运行的;并且,对于实验中的一些主要算法,我们也给出其相应的程序段(需要学生完善后才能运行的),其目的是对学生完成本讲义要求的实验提供帮助。很显然,要能较好的达到本课程实验之目的,不能完全依赖本指导,还需要学生的劳动和配合。也为了学生的拓展学习,对于目前较为流行的UNIX/Linux操作系统的部分实验,作为资料附录在本讲义的最后,以供同学们参考或在条件成熟时选做。操作系统实验的要求:(1) 积极认真地做好实验前的准备,在每个实验前,必须写出需要上机调试的源程序,并通过静态分析方法调试和修改,不能等到上机时再编写程序。尽管本指导给出了完整的示例,但要完成要求的实验,可能需要从数据结构定义开始。(2) 上机时,要积极调试程序,只有通过调试和改错,才能积累经验、提高能力、正确完成实验。(3) 仔细观察程序运行情况,做好记录,作好分析。(4) 按要求认真书写实验报告。(5) 遵守机房实验用机规定和纪律,服从管理。实验1 模拟批处理系统的作业调度一、 实验目的1 加深对作业概念的理解。2 深入了解批处理系统如何组织作业、管理作业和调度作业。二、 实验预备知识1 作业的概念。2 作业的创建。3 作业的调度。三、 实验内容编写程序完成批处理系统中的作业调度,要求采用先来先服务调度算法、短作业优先调度算法。实验具体包括:首先确定作业控制块的内容和作业控制块的组织方式;然后完成作业调度;最后编写主函数对所做工作进行测试。 四、 参考程序(采用响应比高者优先调度算法)#include “string.h”#include “stdio.h”#define n 10 /假定系统中可容纳的作业数量为ntypedef struct jcb char name4; /作业名 int length; /作业长度、所需内存大小 int printer; /作业执行所需打印机的数量 int tape; /作业执行所需磁带机的数量 int runtime; /作业估计执行时间 int waittime; /作业在系统中的等待时间 int next; /指向下一个作业控制块的指针JCB; /作业控制块类型定义int head; /作业队列头指针定义int tape,printer;long memory;JCB jobtablen; /作业表int jobcount=0; /系统内现有作业的数量schedule( ) /作业调度函数 float xk,k;int p,q,s,t;do p=head; q=s=-1; k=0; while(p!=-1) if(jobtablep.length=memory & jobtablep.tape=tape & jobtablep.printerk) /满足条件的第一个作业或者作业q的响应比小于作业p的响应比 k=xk; /记录响应比 q=p; t=s; /if/ifs=p;p= jobtablep.next; /p指针后移/whileif(q!=-1) if(t=-1)/是作业队列的第一个 head= jobtablehead.next; else jobtablet.next= jobtableq.next;/为作业q分配资源:分配主存空间;分配磁带机;分配打印机 memory=memory- jobtableq.length; tape=tape- jobtableq.tape; printer=printer- jobtableq.printer; printf(“选中的作业的作业名:%sn”, );while(q!=-1)/作业调度函数结束main() char name4; int size, tcount, pcount, wtime, rtime;int p;/系统数据初始化memory=65536;tape=4;printer=2;head=-1;printf(“输入作业相关数据(以作业大小为-1停止输入):n”);/输入数据,建立作业队列 printf(“输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间n”); scanf(“%s %d %d %d %d”,name,&size,&tcount,&pcount,&wtime,&rtime); while(size!=-1) /创建JCB if(jobcountn) p=jobcount; else printf(“无法再创建作业n”); break;jobcount+;strcpy(,name);jobtablep.length=size;jobtablep.printer=pcount;jobtablep.tape=tcount;jobtablep.runtime=rtime;jobtablep.waittime=wtime;jobtablep.next=head; /挂入作业队列的队首head=p;/输入一个作业的数据printf(“输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间n”); scanf(“%s %d %d %d %d”,name,&size,&tcount,&pcount,&wtime,&rtime);/whileschedule(); /进行作业调度/main()结束实验2 模拟进程管理一、 实验目的1 加深对进程概念的理解,明确进程和程序的区别。2 深入了解系统如何组织进程、创建进程。3 进一步认识如何实现处理器调度。二、 实验预备知识1 进程的概念。2 进程的组织方式。3 进程的创建。4 进程的调度。三、 实验内容编写程序完成单处理机系统中的进程调度,要求采用先来先服务算法、最短CPU运行期优先调度算法、优先级调度算法、多级反馈队列轮转算法。实验具体包括:首先确定进程控制块的内容和进程控制块的组织方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所做工作进行测试。 四、 参考程序#include “stdio.h”#define running 1 / 用running表示进程处于运行态#define aready 2 / 用aready表示进程处于就绪态#define blocking 3 / 用blocking表示进程处于阻塞态#define sometime 5 / 用sometime表示时间片大小#define n 10 /假定系统允许进程个数为nstruct int name; /进程标识符 int status; /进程状态 int ax,bx,cx,dx; /进程现场信息,通用寄存器内容 int pc; /进程现场信息,程序计数器内容 int psw; /进程现场信息,程序状态字内容 int next; /下一个进程控制块的位置pcbarean; /模拟进程控制块区域的数组int PSW, AX,BX,CX,DX, PC,TIME; /模拟寄存器int run; /定义指向正在运行进程的进程控制块的指针Struct int head; int tail;ready; /定义就绪队列的头指针head和尾指针tailint pfree; /定义指向空闲进程控制块队列的指针scheduling( ) /进程调度函数 int i; if (ready.head=-1) /空闲进程控制块队列为空,退出 printf(“无就绪进程n”);return;i=ready.head; /就绪队列头指针赋给iready.head=pcbareaready.head.next; /就绪队列头指针后移if(ready.head=-1) ready.tail=-1; /就绪队列为空,修正尾指针ready.tailpcbareai.status=running; /修改进程控制块状态TIME=sometime; /设置相对时钟寄存器/恢复该进程现场信息AX=pcbarearun.ax;BX=pcbarearun.bx;CX=pcbarearun.cx;DX=pcbarearun.dx;PC=pcbarearun.pc;PSW=pcbarearun.psw;run=i;/进程调度函数结束create(int x) /进程创建函数 int i; if(pfree=-1) /空闲进程控制块队列为空 printf(“无空闲进程控制块,进程创建失败n”);return;i=pfree; /取空闲进程控制块队列的第一个pfree=pcbareapfree.next; / pfree后移/填写该进程控制块的内容=x;pcbareai.status=aready;pcbareai.ax=x;pcbareai.bx=x;pcbareai.cx=x;pcbareai.dx=x;pcbareai.pc=x;pcbareai.psw=x;if (ready.head!=-1) /就绪队列不为空时,挂入就绪队列的方式 pcbareaready.tail.next=i; ready.tail=i;pcbareaready.tail.next=-1;else /就绪队列不为空时,挂入就绪队列的方式 ready.head=i; ready.tail=i; pcbareaready.tail.next=-1;/进程创建函数结束main() /系统初始化 int num,i,j; run=ready.head=ready.tail =-1; pfree=0; for(j=0;j=0) create(num);scanf(“%d”,&num);scheduling(); /进程调度if(run!=-1) printf(“进程标识符 进程状态 寄存器内容:ax bx cx dx pc psw:n”); printf(“%8d%10d%3d%3d%3d%3d%3d%3dn”, , pcbarearun.status, pcbarearun.ax, pcbarearun.bx, pcbarearun.cx, pcbarearun.dx, pcbarearun.pc, pcbarearun.psw);/main()结束实验3 模拟内存管理一、 实验目的深入了解可变分区存储管理方式主存分配回收的实现。二、 实验预备知识存储管理中的可变分区存储管理方式。三、 实验内容编写程序完成可变分区存储管理方式的主存分配回收的实现。实验具体包括:首先确定主存空间分配表;然后采用首次适应算法、循环首次适应算法、最差适应算法完成主存空间的分配和回收;最后编写主函数对所做工作进行测试。 四、 参考程序#define n 10 /假定系统允许的作业数量最多为n#define m 10 /假定系统允许的空闲区数量最多为m#define minisize 100struct float address; /已分分区起始地址 float length; /已分分区长度,单位为字节int flag; /已分分区表登记栏标志,“0”表示空栏目,实验中只支持一个字符的作业名 used_tablen; /已分分区表struct float address; /空闲区起始地址 float length; /空闲区长度,单位为字节 int flag; /空闲区表登记栏标志,“0”表示空栏目,用“1”表示未分配 free_tablem; /空闲区表allocate(char J , float xk) /采用最佳适应算法为作业J分配xk大小的主存空间 int i, k; float ad; k= -1; for(i=0; i=xk & free_tablei.flag=1) if(k= -1 | free_tablei.lengthfree_tablek.length) k=i;if(k= -1) /未找到可用空闲区,返回printf(“无可用空闲区n”);return;/找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于或等于minisize,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize,则从空闲区划出一部分分配if(free_tablek.length-xk=minisize)free_tablek.flag=0;ad=free_tablek.address;xk= free_tablek.length;else free_tablek.length= free_tablek.length-xk; ad= free_tablek.address+ free_tablek.length;/修改已分分区表i=0;while(used_tablei.flag!=0 & i=n) /无表目填写已分分区 printf(“无表目填写已分分区,错误!n”); /修正空闲区表 if(free_tablek.flag=0) /前面找到的是整个空闲区 free_tablek.flag=1; else /前面找到的是某个空闲区的一部分 free_tablek.length= free_tablek.length+xk; return;else /修改已分分区表 used_tablei. address=ad; used_tablei. length=xk; used_tablei.flag=J;return;/主存分配函数结束reclaim(char J) /回收作业名为J的作业所占的主存空间 int i,k,j,s,t; float S,L; /寻找已分分区表中对应登记项 s=0; while(used_tables.flag!=J | used_tables.flag=0) & s=n) /已分分区表中找不到名为J的作业,返回 printf(“找不到该作业n”);return;/修改已分分区表used_tables.flag=0;/取得归还分区的起始地址S和长度LS= used_tables. address;L= used_tables. length;j=-1;k=-1;i=0;/寻找归还分区的上下邻空闲区,上邻表目k,下邻表目jwhile(im & (j=-1 | k=-1) if(free_tablei.flag=0) if(free_tablei.address+ free_tablei.length=S) /找到上邻 k=i; if(free_tablei.address=S+L) /找到下邻 j=i; i+;if(k!=-1) if(j!=-1) /与上下邻空闲区三项合并 free_tablek.length= free_tablej.length+ free_tablek.length+L; free_tablei.flag=0;else /上邻空闲区,下邻非空闲区,与上邻合并 free_tablek.length= free_tablek.length+L;else if(j!=-1) free_tablej. address=S; free_tablej.length= free_tablej.length+L;else t=0; while(free_tablet.flag=1 & tm) printf(“空闲区表没有空间,回收空间失败!n”); used_tables.flag=J; return;free_tablet. address=S;free_tablet.flag=1;free_tablet.length=L;return(true);/主存归还函数结束实验4 模拟文件管理一、实验目的 文件系统的主要功能就是方便用户对外存上的文件进行管理和操作,合理而有效地管理外存空间。本实验的目的是模拟文件系统常用的多级目录结构和外存空间离散分配(采用盘图管理外存)的策略,实现文件系统对文件的部分管理功能。二、实验内容 1、基本原理现代操作系统大多采用多级目录结构对外存中的文件进行管理,一个外存设备通常都有一个根目录,根目录下用户可根据需要创建子目录;任何一个文件可以属于某一个目录,也就是说,在相应的目录中记录了其所属文件的目录项;目录项中记录了该文件的必要信息。子目录也是作为文件保存的(称为目录文件)。用户通过文件名访问指定文件,文件系统则根据文件名查看目录信息,以确定文件在外存空间的位置,以便进一步的操作。文件系统的另一个重要任务是进行外存空间的管理,现在的操作系统对磁盘存储器大多不再采用连续分配的方法,而采用离散分配的策略。外存空间管理包括为文件分配所需的存储空间和用户删除文件时回收存储空间。常用的做法是,确定外存分配单位,并采用盘图等对外存进行分配和回收管理。2、本实验的内容设计目录结构(采用多级目录)以及文件目录项的结构、外存空间的盘图,并编程实现如下要求(本实验未考虑实现文件操作功能):(1) 初始化目录和盘图;(2) 为用户创建文件、增加文件长度分配外存空间和更新目录信息;(3) 允许用户删除文件,更新目录和回收外存空间;(4) 提供文件复制和移动并进行管理;(5) 允许更改存在文件的文件名;(6) 可以创建和删除子目录。(7) 实验提示:假定外存空间为1.0M,文件系统为文件分配存储空间的分配单位是物理块(扇区);根目录允许的目录项总数为100。三、实验要求对各种操作的结果,要能打印(显示)出目录信息和盘图结果。四、参考程序(以下提供的是一个简单的文件管理程序,供参考后完成实验题)#include #include typedef struct FDT char fname8,exfname3,property; int size; struct FDT *sibling,*son;FDT,*FP;FP Root=NULL;FP chdir(FDT *t) char ch,pname81,tn9= , , , , , , , ,0; /*假定路径名长不超过80*/ int i,k; FP r; printf(请输入新选择的目录所在的路径名及目录名(如:abcttt)n); scanf(%s,pname);printf(所选目录是:%sn,pname);i=0;r=t;while(pnamei!=0) k=0; while(pnamei=) i+; while(pnamei!=&pnamei!=0) tnk+=pnamei+; if(r) r=r-son; while(r &(!eqn(tn,8,r-fname)|(r-property!=d)&(r-property!=D) r=r-sibling;if(!r) printf(指定的路径或目录错误!按一键返回n); while(bioskey!=0) getchar(); getchar();return t; printf(你所选当前目录是:%sn,tn);return r;int eqn(char x,int c,char y) int i; if(!c) return 0; for(i=0;ic;i+) if(xi=0&(yi= ) break; else if(xi!=yi) return 0; return 1;void displist(FP q) int i; i=0; while(ifnamei+); printf( ); i=0;while(iexfnamei+); printf( %c ,q-property); if(q-property!=D&q-property!=d) printf(%dn,q-size);else printf(n);void dlist(FDT *ptr)int i; FP r; char fn9,exfn4,c1,c2; c1=c2= ; r=ptr-son; printf(输入要查看的当前目录下的文件/子目录名(*代表全体):); scanf(%s,fn); printf(n输入文件的扩展名(*代表全体或子目录):); scanf(%s,exfn); if(!r) printf(当前目录为空!按一键返回.:n); getchar();getchar(); return; i=0;while(i8 & fni= ) i+; if(i8) c1=fni;i=0; while(i3 & exfni= ) i+; if(isibling; if(c1!=* & c2!=*) if(!r) printf(查看的文件没有.按一键返回); getchar(); getchar(); return; while(r&(!eqn(fn,8,r-fname)|!eqn(exfn,3,r-exfname) r=r-sibling; displist(r); if(c1=* & c2!=*) printf(*&x);while(r) while(!eqn(exfn,3,r-exfname) r=r-sibling; displist(r);r=r-sibling; if(c1!=* & c2=*) printf(x&*);while(r) while(!eqn(fn,8,r-fname) r=r-sibling; displist(r);r=r-sibling; printf(所有内容如上显示。按一键返回!); getchar(); getchar();void create(FP r) char mn9,exn4= , , ,0; int s,i;char pt; FP q; printf(输入要在当前目录下新建的文件/子目录 名:); scanf(%s,mn); printf(n输入要建立文件/子目录的属性:A=归档/R=只读/H=隐含/D=子目录:); pt=getchar();while(pt102) pt=getchar(); if(pt!=D & pt!=d) printf(n输入扩展名:); scanf(%s,exn); printf(n输入文件大小-字节数:); scanf(%d,&s); else s=0; q=(FDT *)malloc(sizeof(struct FDT); i=0; while(ifnamei=mni;i+; while(ifnamei+= ;i=0; while(iexfnamei=exni;i+; while(iexfnamei+= ; q-property=pt;q-size=s; q-sibling=q-son=NULL; if(r-son) r=r-son;while(r-sibling) r=r-sibling; r-sibling=q; else r-son=q; printf(新建的文件/子目录是:); for(i=0;ifnamei); for(i=0;iexfnamei); printf( %c %dn,q-property,q-size);void delete(FP ptr) char fn9,exn4,ch; FP r,q; q=ptr;r=ptr-son; printf(输入要删除的文件/子目录 名:); scanf(%s,fn); printf(输入要删除的文件扩展名(子目录用*):); scanf(%s,exn); if(exn0!=*) while(r &(!eqn(fn,8,r-fname)|!eqn(exn,3,r-exfname) q=r;r=r-sibling; else while(r&(!eqn(fn,8,r-fname)|(r-property!=d)&(r-property!=D) q=r;r=r-sibling; if(!r) printf(要删除的文件/子目录 不存在! 按一键返回.);getchar();getchar(); return; else if(r-property=d|r-property=D)&r-son) printf(要删除的子目录不空!);return;else if(q-son=r) q-son=r-sibling;free(r);else q-sibling=r-sibling;free(r);printf(文件子目录%s已删除!,fn);void copyf(FP r) printf(暂时尚未实现! 按一键返回.n); /*请同学们完善之*/ getchar();getchar();void movef(FP r) printf(暂时尚未实现! 按一键返回.n); /*请同学们完善之*/ getchar(); getchar();main() FP p; int i,choice; char n=R,O,O,T, , , , ; p=Root=(FDT *)malloc(sizeof(FDT);p-son=p-sibling=NULL; for(i=0;ifnamei=ni; for(i=0;iexfnamei= ; for(;) choice=0; clrscr(); printf(nnn 请在下列操作中选择:n); printf( 1.改变当前目录n); printf( 2.查看目录n); printf( 3.建立文件/子目录n); printf( 4.删除文件/子目录n); printf( 5.复制文件n); printf( 6.移动文件/子目录n); printf( 0.结束本程序n);scanf(%d,&choice); printf(n); switch (choice) case 1:p=chdir(p);break; case 2:dlist(p);break; case 3:create(p);break; case 4:delete(p);break; case 5:copyf(p);break; case 6:movef(p); if(choice=0) break;/*for*/*main*/附录实验1 UNIXLinux操作系统的安装 以ReaHat红帽子 Linux为例1实验目的 学习各种操作系统的安装,体会操作系统为了方便用户,不断改进安装过程,从人机对话式的“生成”(generate)、安装(install)和设置(Setup)到分类、分阶段的“一路NEXT”自动完成。2实验内容 在Windows的安装中有“典型(Express)安装”、“便携安装”、“袖珍安装”和“定制(Custom)安装”4种选择,供安装者根据具体情况进行取舍。以保证安装后系统软件的正常运行,同时使操作系统“核心Kernel)”在内存中“常驻”量最精简。 安装前要做好准备工作:包括认真阅读有关资料(或光盘)中对硬件(CPU、内存和硬盘空间)的要求和具体安装方法及疑难问题解决;了解磁盘分区方式,掌握调整分区的工具软件PQMagic或 FIPS,学会制作安装启动盘,了解 Linux安装过程和 LILO的安装。3. 实验要求 (1)硬件环境要求 80386DX以上兼容机,可以使用 Intel、AMD、CRIX处理器,对 80386或 80486SX的CPU建议具有数字协处理器。主板可以是支持ISA、ESA或PCI总线结构。主存最小要求2MB,建议16MB以上。硬盘支持IDE、SCSI接口的控制器,容量最小为300MB,建议800MB以上。显示器可以使用 VGA、EGA、CGA或 SUPER VGA的显示卡或显示器。网卡可以使用各种通用的以太网卡及局域网卡。 另备3.5英寸软盘3张用于制作启动盘、辅助盘和 LILOb00t盘。 (2)软件环境要求 软件工具:PQMagic和 FIPS。 操作系统:RedHat 5.l一6.1。4实验步骤 PC硬盘的分区方案允许4个基本分区。每个基本分区有一个启动扇区。这样每个硬盘分成几个磁盘分区后,一般来说每个分区可以安装一个独立的操作系统。即每个分区可以由不同的操作系统进行管理。分区信息存储在该硬盘前部的分区表中。实际使用中感到太少,为克服这个设计问题,还设计了扩展分区。把4个基本分区其中的一个变成扩展分区,在扩展分区上并不能直接存储数据,而只能在扩展分区上再划分出若干个子分区,把其中的各个子分区称为逻辑分区,类似基本分区。各分区根据使用的操作系统不同,所用的文件系统类型也不同,对占用的分区的要求也不同。不同的文件类型与不同的操作系统相匹配,并且用不同的分区标识区分。MS DOS的FDISK程序一般无法识别出其他的文件系统类型,而将其他的文件类型的分区统一标识为“非“DOS类”。不同的操作系统对安装的分区的要求也不同,有些只能安装在基本分区里,有些例如Linux对安装在哪个分区没有限制。 安装步骤如下; (1)收集硬件配置资料。 硬盘空间大小; 显示卡类型,显示存储器大小; 网卡类型,中断向最号(IRQ)及1O地址; 域名服务器(DNS)地址、域名、本地机器IP地址、主机名和域名。 (2)对于要安装 Linux而又没有预留出自由空间,可利用 Linux光盘里的 FIPS工具来拆分基本分区;也可以利用DOS下的调整分区程序 PQMagic来拆分基本分区或逻辑分区,并将TQMagic安装到另一个分区。调整基本分区时PQMagic安装在逻辑分区里;调整扩展分区和逻辑分区时要将PQMagic安装在基本分区里。使用PQMagic要用较新的版本,以适应FAT32的需要。 (3)制作Linux引导盘和辅助盘。 在RedHat光盘的dosuti1s子目录下使用rawrite。具体步骤如下: 执行C:dosutilsraWriteimagesboot.img a:(引导盘) 执行C:Vdosutilsrawiteimagessupp.img a:(辅助硬件驱动盘,用于硬盘和NFS安装) (4)Linux对不同介质的安装方法。 使用启动软盘引导后用光盘完成Linux安装方法。 直接从光盘引导完成安装(要求CMOS和光盘都能支持光盘引导) 从硬盘完成安装:可以事先将Linux软件包拷人硬盘的一个分区,将Linux安装到硬盘的另一个分区; 网络安装:通过网络文件系统NFS或FTP并安装到硬盘。 除使用光盘外,使用其他介质还需要辅助盘。使用NFS安装时还得要知道本机、DNS和NFS的IP地址,网络的子网掩码和NFS上的安装目录。 (5)使用FDISK添加Linuxn native分区()和交换分区(swap)。 (6)格式化分区。 (7)选择安装内容。 (8)设置root用户的口令。 (9)设置网卡的中断向量号、lO地址、城名服务器(DNS)的IP地址,网络的子网掩码等。 (10)安装X服务器,需要设置显示器类型(分辨率、刷新频率)和显卡类型(芯片型号、颜色深度、显示内存)。如果安装的版本低于61最好先跳过对X

温馨提示

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

评论

0/150

提交评论