磁盘调度算法例子加练习

合集下载

磁盘调度试验

磁盘调度试验

实验四磁盘调度实验目的编程模拟实现磁盘调度的常用算法或调试分析相关磁盘调度程序, 加深对磁盘调度常用算法的理解和实现技巧。

实验内容1.自定义磁盘调度相关的数据结构;2.依据先来先服务算法(FCFS)、最短寻道优先算法(SSTF)、扫描(SCAN, 也称电梯)算法的原理, 编写对应函数, 模拟系统的磁盘调度服务;3.为了更好地模拟和评价算法的性能, 随机产生需寻道的磁道序列, 以磁道序列的首磁道为磁头的当前位置;在SCAN算法中, 允许用户指定当前寻道方向;4.统计以上算法总寻道次数和平均寻道距离;比较/分析以上算法的寻道性能, 并做出自己的评价。

实验步骤(源程序)#include<stdio.h>#include<stdlib.h>#include<iostream.h>#include<math.h>#define maxsize 1000int decide(char str[]) //判断输入数据是否有效{int i=0;while(str[i]!='\0'){if(str[i]<'0'||str[i]>'9'){return 0;break;}i++;}return i;}int trans(char str[], int a) //将字符串转换成数字{int i;int sum=0;for(i=0;i<a;i++){sum=sum+(int)((str[i]-'0')*pow(10,a-i-1));}return sum;}int *bubble(int cidao[],int m){int i,j;int temp;for(i=0;i<m;i++) //使用冒泡法按从小到大顺序排列 for(j=i+1;j<m;j++){if(cidao[i]>cidao[j]){temp=cidao[i];cidao[i]=cidao[j];cidao[j]=temp;}}cout<<"排序后的磁盘序列为: ";for( i=0;i<m;i++) //输出排序结果 {cout<<cidao[i]<<" ";}cout<<endl;return cidao;} int printnow(){char str[10];int a,now;cout<<"请输入当前的磁道号: ";A: cin>>str;a=decide(str);if(a==0){cout<<"输入数据的类型错误,请重新输入! "<<endl;goto A;}elsenow=trans(str,a);return now;}int printout(int cidao[],int now,int m)int i;int sum=0;cout<<"磁盘扫描序列为: ";for(i=m-1;i>=0;i--){cout<<cidao[i]<<" ";sum+=abs(now-cidao[i]);now=cidao[i];}return sum;}int printin(int cidao[],int now,int m){int i;int sum=0;cout<<"磁盘扫描序列为: ";for(i=0;i<m;i++){cout<<cidao[i]<<" ";sum+=abs(cidao[m-1]-now);now=cidao[i];}return sum;}int prints(int cidao[],int now,int m,int l,int r) {int j;int sum=0;while(l>=0){cout<<cidao[l]<<" ";sum+=now-cidao[l];now=cidao[l];l=l-1;}now=cidao[0];for(j=r;j<m;j++){cout<<cidao[j]<<" ";sum+=cidao[j]-now;now=cidao[j];}return sum;int printl(int cidao[],int now,int m,int l,int r){int j;int sum=0;while(r<m){cout<<cidao[r]<<" ";sum+=cidao[r]-now;now=cidao[r];r=r+1;}now=cidao[m-1];for(j=l;j>=0;j--){cout<<cidao[j]<<" "; //输出磁盘调度序列sum+=now-cidao[j];now=cidao[j];}return sum;}void FCFS(int cidao[],int m) //磁道号数组, 个数为m {int now;float sum=0; //总寻道长度 int j,i;float ave;cout<<"磁盘请求序列为: ";for( i=0;i<m;i++) //按先来先服务的策略输出磁盘请求序列 {cout<<cidao[i]<<" ";}cout<<endl;now=printnow(); //输入当前磁道号cout<<"磁盘扫描序列为: ";for( i=0;i<m;i++) //输出磁盘扫描序列{cout<<cidao[i]<<" ";}for(i=0,j=1;j<m;i++,j++) //求平均寻道长度{sum+=abs(cidao[j]-cidao[i]);ave=(float)(sum)/(float)(m);}cout<<endl;cout<<"平均寻道长度: "<<ave<<endl;}void SSTF(int cidao[],int m){int k=1;int now,l,r;int sum;float ave;cidao=bubble(cidao,m); //调用冒泡排序算法排序now=printnow(); //输入当前磁道号if(cidao[m-1]<=now) //若当前磁道号大于请求序列中最大者, sum=printout(cidao,now,m);if(cidao[0]>=now) //若当前磁道号小于请求序列中最小者, sum=printin(cidao,now,m);if(now>cidao[0]&&now<cidao[m-1]) //若当前磁道号大于请求序列中最小者且小于最大者{cout<<"磁盘扫描序列为: ";while(cidao[k]<now) //确定当前磁道在已排的序列中的位置, 后面的算法都用到了, 可以直接复制后少量修改, 节省时间。

实验报告六 磁盘调度算法

实验报告六  磁盘调度算法

实验报告六磁盘调度算法班级:软技2班学号:201467003084 姓名:刘道林一.实验内容:熟悉磁盘的结构以及磁盘的驱动调度算法的模拟,编程实现简单常用的磁盘驱动调度算法先来先服务(FIFO)、电梯调度算法、最短寻找时间优先算法、扫描(双向扫描)算法、单向扫描(循环扫描)算法等。

编程只需实现两个算法。

题目可以选取教材或习题中的相关编程实例。

编程语言建议采用c/c++或Java。

模拟程序鼓励采用随机数技术、动态空间分配技术,有条件的最好能用图形界面展现甚至用动画模拟。

实验性质:验证型。

二.实验目的和要求1)掌握使用一门语言进行磁盘驱动调度算法的模拟;2)编写程序将磁盘驱动调度算法的过程和结果能以较简明直观的方式展现出来。

三.实验原理、方法和步骤1. 实验原理磁盘驱动调度对磁盘的效率有重要影响。

磁盘驱动调度算法的好坏直接影响辅助存储器的效率,从而影响计算机系统的整体效率。

常用的磁盘驱动调度算法有:最简单的磁盘驱动调度算法是先入先出(FIFO)法。

这种算法的实质是,总是严格按时间顺序对磁盘请求予以处理。

算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。

但该算法可能会移动的柱面数较多并且会经常更换移动方向,效率有待提高。

最短寻找时间优先算法:总是优先处理最靠近的请求。

该算法移动的柱面距离较小,但可能会经常改变移动方向,并且可能会发生进程饥饿现象。

电梯调度:总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。

扫描(双向扫描):总是从最外向最里进行扫描,然后在从最里向最外扫描。

该算法与电梯调度算法的区别是电梯调度在没有最外或最里的请求时不会移动到最外或最里柱面,二扫描算法总是移到最外、最里柱面。

两端的请求有优先服被务的迹象。

循环扫描(单向扫描):从最外向最里进行柱面请求处理,到最里柱面后,直接跳到最外柱面然后继续向里进行处理。

该算法与扫描算法的区别是,回来过程不处理请求,基于这样的事实,因为里端刚被处理。

操作系统磁盘调度算法例题讲解

操作系统磁盘调度算法例题讲解

操作系统磁盘调度算法例题讲解1. 磁盘调度算法的背景和意义磁盘调度算法是操作系统中的重要组成部分,它的主要目的是优化磁盘访问,提高磁盘I/O操作的效率。

在计算机系统中,磁盘是一个重要的存储介质,它负责存储和读写数据。

然而,由于磁盘访问具有机械运动延迟和寻道时间等特性,使得磁盘I/O操作成为计算机系统中一个性能瓶颈。

为了解决这个问题,人们提出了各种各样的磁盘调度算法。

这些算法通过优化访问顺序、减少寻道时间、提高数据传输率等方式来提高磁盘I/O操作效率。

因此,深入了解和掌握不同类型的磁盘调度算法对于优化计算机系统性能具有重要意义。

2. 先来先服务(FCFS)调度算法先来先服务(First-Come, First-Served)是最简单、最直观的一种磁盘调度算法。

它按请求顺序处理I/O请求。

当一个请求到达时,在当前位置完成当前请求后再处理下一个请求。

然而,在实际应用中,FCFS存在一些问题。

首先,它无法充分利用磁盘的带宽,因为磁盘的读写头可能在处理当前请求时,其他请求已经到达。

其次,由于磁盘请求的随机性,FCFS可能导致某些请求等待时间过长。

3. 最短寻道时间优先(SSTF)调度算法最短寻道时间优先(Shortest Seek Time First)是一种基于当前位置选择下一个最近请求的调度算法。

在SSTF算法中,选择离当前位置最近的请求进行处理。

SSTF算法相对于FCFS算法来说,在减少寻道时间方面有一定的优势。

它能够充分利用磁盘带宽,并且能够减少某些请求等待时间过长的问题。

然而,SSTF算法也存在一些问题。

首先,在某些情况下,由于选择最近的请求进行处理,可能导致某些较远位置上的请求长期等待。

其次,在高负载情况下,由于大量随机访问导致寻道距离变大,SSTF 算法可能会导致饥饿现象。

4. 扫描(SCAN)调度算法扫描(SCAN)是一种按一个方向依次处理I/O请求,并在到达边界后改变方向的调度算法。

SCAN算法从一个方向开始处理请求,直到到达磁盘的边界。

7.4.4 调度算法举例

7.4.4 调度算法举例

例题1:假设在单道批处理环境下有四个作业,已知它们进入系统的时间、估计运行时间:应用先来先服务、最短作业优先和最高响应比优先作业调度算法,分别计算出作业的平均周转时间和带权的平均周转时间。

先来先服务算法计算结果:最短作业优先算法计算结果:最高响应比算法计算结果例题2:在两道环境下有四个作业, 已知它们进入系统的时间、估计运行时间,作业调度采用短作业优先算法,作业被调度运行后不再退出, 进程调度采用剩余时间最短的抢先调度算法(假设一个作业创建一个进程)。

请给出这四个作业的执行时间序列,并计算出平均周转时间及带权平均周转时间。

10:00,JOB1进入,只有一作业,JOB1被调入执行,10:05,JOB2到达,最多允许两作业同时进入,所以JOB2也被调入;内存中有两作业,哪一个执行?题目规定当一新作业运行后,可按作业运行时间长短调整执行次序;即基于优先数可抢占式调度策略,优先数是根据作业估计运行时间大小来决定的,由于JOB2运行时间(20分)比JOB1少(到10:05,JOB1还需25分钟),所以JOB2运行,而JOB1等待。

10:10,JOB3到达输入井,内存已有两作业,JOB3不能马上进入内存;10:20,JOB4也不能进入内存,10:25,JOB2运行结束,退出,内存中剩下JOB1,输入井中有两作业JOB3和JOB4,如何调度?作业调度算法:最短作业优先,因此JOB3进入内存,比较JOB1和JOB3运行时间,JOB3运行时间短,故JOB3运行,同样,JOB3退出后,下一个是JOB4,JOB4结束后,JOB1才能继续运行。

四个作业的执行时间序列为:JOB1:10:00—10:05,10:40—11:05 JOB2:10:05—10:25JOB3:10:25—10:30JOB4:10:30—10:40。

实验七 磁盘调度

实验七 磁盘调度

实验七磁盘调度一、实验目的:磁盘是高速、大容量、旋转型、可直接存取的存储设备。

它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。

系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。

由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。

本实验要求模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。

通过实验来理解和掌握磁盘调度的职能。

二、实验内容:分别模拟如下电梯调度算法,对磁盘进行移臂操作:●先来先服务算法●最短寻道优先算法●电梯算法三、实验要求:1、假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。

2、磁盘是可供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。

当有进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到磁盘一次工作结束。

当有多个进程提出输入输出请求而处于等待状态时,可用磁盘调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。

为此设置“驱动调度”进程。

3、由于磁盘与处理器是并行工作的,所以当磁盘在为一个进程服务时,占有处理器的其它进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请访问磁道,为此设置“接受请求”进程。

4、为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,参考程序流程图。

5、“接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘的进程要求访问的磁道,表的格式如下:6、磁盘调度的功能是查“请求I/O”表,当有等待访问的进程时,按磁盘调度算法从中选择一个等待访问的进程,按其指定的要求访问磁道。

流程图中的“初始化”工作包括:初始化“请求I/O”表,设置当前移臂方向;当前磁道号。

并且假设程序运行前“请求I/O”表中已有若干进程(4~8个)申请访问相应磁道。

四、程序流程图:五.参考程序代码:#include <stdlib.h>#include<iostream.h>#include<cmath>typedef struct node{int data;struct node *next;}Node;void main(){void fcfs(Node *,int,int);//声明先来先服务函数FCFSvoid sstf(Node *,int,int);//声明最短寻道时间优先函数SSTFvoid scan(Node *,int,int);//声明扫描函数SCANvoid print(Node *); //输出链表函数Node *head,*p,*q; //建立一个链表int it,c=0,f,s; //c为链表长度,f是开始的磁道号,s是选择哪个算法head=(Node *)malloc(sizeof(Node));head->next=NULL;q=head;cout<<" /**************磁盘调度算法***************/"<<endl;cout<<endl;cout<<"新建一个单链表,以0作为结束标志:";cin>>it;while(it!=0){p=(Node *)malloc(sizeof(Node));p->next=NULL;p->data=it;q->next=p;q=p;cin>>it;c++;}cout<<"从几号磁道开始:";cin>>f; //f为磁道号print(head);cout<<"链表长度为:"<<c<<endl;cout<<"1、先来先服务算法FCFS"<<endl;cout<<"2、最短寻道时间优先算法SSTF"<<endl;cout<<"3、电梯调度算法(扫描算法SCAN)"<<endl;cout<<"0、退出"<<endl;cout<<"请选择:";cin>>s;while(s!=0){switch(s){case 1:cout<<"你选择了:先来先服务算法FCFS"<<endl;fcfs( head,c,f);break;case 2:cout<<"你选择了:最短寻道时间优先算法SSTF"<<endl;sstf( head,c,f);break;case 3:cout<<"你选择了:电梯调度算法(扫描算法SCAN)"<<endl;scan( head,c,f);break;}cout<<"退出请选0,继续请选1,2,3:";cin>>s;}}/***********************************************************/ void fcfs(Node *head,int c,int f)//先来先服务算法{void print(Node *);Node *l;//*m,*n;float num=0; //num为平均寻道长度l=head->next;for(int i=0;i<c;i++){num+=abs(l->data-f);f=l->data;l=l->next;}num=num/c;cout<<"先来先服务的寻道顺序是:"<<endl;print(head);cout<<"平均寻道长度:"<<num<<endl;}/*****************************************************************/ void sstf(Node *head,int c,int f)//最短寻道时间优先算法{void print(Node *);Node *p,*q,*r,*s,*l,*m;l=(Node *)malloc(sizeof(Node));l->next=NULL;m=l;q=head;p=head->next;s=head;r=head->next;float num=0;for(int i=0;i<c;i++){int min=abs(f-r->data);for(int j=0;j<c-i-1;j++){p=p->next;q=q->next;if(abs(f-p->data)<min){min=abs(f-p->data);r=p;s=q;}}num+=abs(f-r->data);f=r->data;s->next=r->next;r->next=NULL;m->next=r;m=r;q=head;p=head->next;s=head;r=head->next;}num=num/c;cout<<"最短寻道时间优先顺序是:"<<endl;print(l);cout<<"平均寻道长度:"<<num<<endl;}/***************************************************************/ void scan(Node *head,int c,int f)//扫描算法(电梯调度算法){void print(Node *);int min,max,i=0,j=0;float num=0;Node *p,*q,*r,*s,*m,*n,*x,*y;r=(Node *)malloc(sizeof(Node));//存放比开始磁道小的磁道r->next=NULL;s=r;m=(Node *)malloc(sizeof(Node));//存放比开始磁道大的磁道m->next=NULL;n=m;x=(Node *)malloc(sizeof(Node));x->next=NULL;y=x;q=head;p=head->next;while(p->next!=NULL){if(p->data-f>0){q->next=p->next;p->next=NULL;n->next=p;n=p;p=q->next;i++;}else{q->next=p->next;p->next=NULL;s->next=p;s=p;p=q->next;j++;}}if(p->data>=f){n->next=p;n=p;i++;}else{s->next=p;s=p;j++;}q=r; //对比开始磁道小的磁道排序p=r->next;while(q->next->next!=NULL){q=q->next;p=q->next;max=q->data;while(p->next!=NULL){if(p->data>max){max=p->data;p->data=q->data;q->data=max;max=q->data;}p=p->next;}if(p->data>max){max=p->data;p->data=q->data;q->data=max;max=q->data;}}//print(r);q=m;p=m->next;while(q->next->next!=NULL){q=q->next;p=q->next;min=q->data;while(p->next!=NULL){if(p->data<min){min=p->data;p->data=q->data;q->data=min;min=q->data;}p=p->next;}if(p->data<min){min=p->data;p->data=q->data;q->data=min;min=q->data;}}//print(m);x=m;p->next=r->next;y=x->next;while(y->next!=NULL){num+=abs(f-y->data);f=y->data;y=y->next;}num+=abs(f-y->data);num=num/c;cout<<"扫描算法的顺序是:"<<endl;print(x);cout<<"平均寻道长度为:"<<num<<endl;}/*****************************************************/void print(Node *head) //输出链表{Node *p;p=head->next;cout<<"单链表显示:";if(p==NULL){cout<<"单链表为空:";}else if(p->next==NULL){cout<<p->data;}else{while(p->next!=NULL){cout<<p->data<<"->";p=p->next;}cout<<p->data<<endl;}}六.实验结果分析1. 假设磁盘访问序列: 89,138, 73,122,41,142,56,76,读写头起始位置:95分别按照下列调度算法安排磁头服务序列,并计算寻道距离。

磁盘调度算法实验报告

磁盘调度算法实验报告

磁盘调度算法实验报告磁盘调度算法实验报告引言:磁盘调度算法是操作系统中的重要组成部分,它负责决定磁盘上数据的访问顺序,以提高磁盘的访问效率。

在本次实验中,我们对比了三种常见的磁盘调度算法:先来先服务(FCFS)、最短寻道时间优先(SSTF)和扫描(SCAN)算法。

通过对比实验结果,我们将分析不同算法的优缺点,并对其适用场景进行探讨。

实验过程:为了模拟磁盘调度算法在实际应用中的情况,我们使用了一个包含100个磁道的磁盘模型。

我们随机生成了一组磁道请求序列,并以此作为实验数据。

首先,我们使用FCFS算法对数据进行访问,记录下访问每个磁道所需的时间。

然后,我们分别使用SSTF和SCAN算法进行同样的操作,并记录下相应的访问时间。

实验结果:经过实验,我们得到了不同调度算法的访问时间数据。

在FCFS算法中,由于它按照请求的先后顺序进行访问,所以磁头需要频繁地在磁道之间移动,导致访问时间较长。

SSTF算法则根据当前磁头位置选择最近的磁道进行访问,因此其访问时间相对较短。

而SCAN算法则将磁头从一端移动到另一端,期间访问所有请求的磁道,这样可以减少磁头的移动次数,从而提高访问效率。

讨论与分析:从实验结果可以看出,不同的磁盘调度算法在不同的场景下有着不同的优势。

FCFS算法适用于请求较少、请求之间没有明显关联的情况。

因为它简单易实现,不需要额外的计算和判断,但在高负载情况下容易导致磁头抖动,降低整体性能。

SSTF算法适用于请求之间有明显关联的情况,因为它能够选择最近的磁道进行访问,减少了磁头的移动次数。

但是,当请求分布不均匀时,SSTF算法可能会导致某些磁道长时间得不到访问。

SCAN算法则适用于对整个磁盘进行扫描的场景,因为它能够在一个方向上连续访问多个磁道,减少了磁头的移动次数。

但是,SCAN算法可能会导致某些磁道长时间得不到访问,因此在请求分布不均匀的情况下,其性能可能会受到影响。

结论:通过本次实验,我们对比了三种常见的磁盘调度算法,并分析了它们的优缺点及适用场景。

操作系统-磁盘调度算法

操作系统-磁盘调度算法

操作系统-磁盘调度算法1 一次磁盘读/写操作需要的时间寻找时间(寻道时间)T s:在读/写数据前,需要将磁头移动到指定磁道所花费的时间。

寻道时间分两步:(1) 启动磁头臂消耗的时间:s。

(2) 移动磁头消耗的时间:假设磁头匀速移动,每跨越一个磁道消耗时间为m,共跨越n条磁道。

则寻道时间T s= s + m * n。

磁头移动到指定的磁道,但是不一定正好在所需要读/写的扇区,所以需要通过磁盘旋转使磁头定位到目标扇区。

延迟时间T R:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。

设磁盘转速为r(单位:转/秒,或转/分),则平均所需延迟时间T R=(1/2)*(1/r) = 1/2r。

1/r就是转一圈所需的时间。

找到目标扇区平均需要转半圈,因此再乘以1/2。

传输时间T R:从磁盘读出或向磁盘中写入数据所经历的时间,假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N,则传输时间T R= (b/N) * (1/r) = b/(rN)。

每个磁道可存N字节数据,因此b字节数据需要b/N个磁道才能存储。

而读/写一个磁道所需的时间刚好是转一圈的时间1/r。

总的平均时间T a= T s+ 1/2r + b/(rN),由于延迟时间和传输时间都是与磁盘转速有关的,且是线性相关。

而转速又是磁盘的固有属性,因此无法通过操作系统优化延迟时间和传输时间。

所以只能优化寻找时间。

2 磁盘调度算法2.1 先来先服务算法(FCFS)算法思想:根据进程请求访问磁盘的先后顺序进行调度。

假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问55、58、39、18、90、160、150、38、184号磁道。

按照先来先服务算法规则,按照请求到达的顺序,磁头需要一次移动到55、58、39、18、90、160、150、38、184号磁道。

磁头共移动了 45 + 3 + 19 + 21 + 72 + 70 + 10 + 112 + 146 = 498个磁道。

实验六 磁盘调度算法

实验六  磁盘调度算法

实验六磁盘调度算法【实验目的】通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。

【实验内容】问题描述:设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN 和循环SCAN算法的工作过程。

假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。

程序要求如下:1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。

2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。

3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。

4)输出:每种算法的平均寻道长度。

【实验代码】#include <iostream>#include <fstream>#include <iomanip>#include <stdio.h>using namespace std;const int MaxNumber=100;int TrackOrder[MaxNumber];//磁盘访问序列int MoveDistance[MaxNumber];//磁头每次移动的距离double A verageDistance;//平均寻道长度bool direction;//SCAN和CSCAN算法的磁头移动方向int M;//开始磁道号int N;//磁道个数void inputData(){cout<<"请输入磁道个数N: ";cin>>N;cout<<"\n请输入磁盘访问顺序(此部分由文件读入)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档