




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一课程概述1.1.设计构想 程序能够完成以下操作:创建进程:先输入进程的数目,再一次输入每个进程的进程名、运行总时间和优先级,先到达的先输入;进程调度:进程创建完成后就选择进程调度算法,并单步执行,每次执行的结果都从屏幕上输出来。1.2.需求分析在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度
2、便成为操作系统设计的中心问题之一。本次实验在VC+6.0环境下实现先来先服务调度算法,短作业优先调度算法,高优先权调度算法,时间片轮转调度算法和多级反馈队列调度算法。 1.3.理论依据 为了描述和管制进程的运行,系统为每个进程定义了一个数据结构进程控制块PCB(Process Control Block),PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过PCB对进程进行控制,亦即,系统是根据进程的PCB而不是任何别的什么而感知进程的存在的,PCB是进程存在的惟一标志。本次课程设计用结构体Process代替PCB的功能。1.4.课程任务一、 用C语言(
3、或C+)编程实现操作模拟操作系统进程调度子系统的基本功能;运用多种算法实现对进程的模拟调度。二、 通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转、短作业优先、多级反馈队列调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。三、 实现用户界面的开发1.5.功能模块分析:1、 进程概念:进程是被独立分配资源的最小单位。进程是动态概念,必须程序运行才有 进程的产生。2、进程的状态模型: (1)运行:进程已获得处理机,当前处于运行状态。(2)就绪:进程已经准备好,一旦有处理器就可运行。3、处理机调度:在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机 这一
4、重要的资源。处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将 处理机分配给它运行,以实现进程并发地执行。4、进程调度算法的功能:记录系统中所有进程的执行情况选择占有处理机的进程进行进程的上下文切换5、进程调度的算法:(1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在 就绪队列的后面,那么先来先服务总是把当前处于就绪队列之首的那个进程调 度到运行状态。(2)优先数算法:即进程的执行顺序由高优先级到低优先级。系统或用户按某种原则为进程指定一个优先级来表示该进程所享有的确调度优先权。该算法核心是确定进程的优先级。(3)时间片轮转算法:固定时间片,每个进程在执行一个时
5、间片后,轮到下一进程执行,知道所有的进程执行完毕。处理器同一个时间只能处理一个任务。处理器在处理多任务的时候,就要看请求的时间顺序,如果时间一致,就要进行预测。挑到一个任务后,需要若干步骤才能做完,这些步骤中有些需要处理器参与,有些不需要(如磁盘控制器的存储过程)。不需要处理器处理的时候,这部分时间就要分配给其他的进程。原来的进程就要处于等待的时间段上。经过周密分配时间,宏观上就象是多个任务一起运行一样,但微观上是有先后的,就是时间片轮换。 (4) 多级反馈队列法:又称反馈循环队列或多队列策略, 主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列, 较高优先级的队列一般分配
6、给较短的时间片。 处理器调度先从高级就绪进程队列中选取可占有处理器的进程, 只有在选不到时, 才从较低 级的就绪进程队列中选取。(5)短作业优先法:对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成, 或发生某事件而被阻塞放弃处理机时再重新调度。二设计方案2.1先来先服务调度算法思想先来先服务调度算法的思想是按照进程进入就绪队列的先后顺序调度并分配处理机执行。先来先服务调度算法是一种不可抢占的算法,先进入就绪队列的进程,先被处理机运行。一旦一个进程占有了处理机,它就一直运行下去,直到该进程完成工作或者因为等待某事件而不能继续运行时才释
7、放处理机。算法流程图图1.先来先服务算法流程图程序代码#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node char name10; /*进程名*/int cputime; /*占用cpu时间*/char starttime5; /进程开始时间int needtime; /*要求运行时间*/char state; /*状态*/struct node *next; /*指针*/PCB;PCB *ready, *run, *finish; /就绪、执行、结束指针in
8、t N; /进程数量void print() /输出函数PCB *p;printf(" NAME CPUTIME STARTTIME NEEDTIME STATUSn");if(run != NULL)printf(" %-10s%-10d%-10s%-10d %cn",run->name,run->cputime,run->starttime,run->needtime,run->state); /*输出执行的进程的信息*/p=ready;while(p != NULL)printf(" %-10s%-10d%-
9、10s%-10d %cn",p->name,p->cputime,p->starttime,p->needtime,p->state); /*输出就绪进程的信息*/p=p->next; p=finish;while(p != NULL)printf(" %-10s%-10d%-10s%-10d %cn",p->name,p->cputime,p->starttime,p->needtime,p->state); /*输出结束队列的信息*/ p=p->next; getchar(); /*使用g
10、etchar()函数可以让输出时停留画面, 等待人按回车继续*/ void insert(PCB *q) /*插入新进程,把进程按进程到来时间大小排序*/ PCB *p1,*s,*r;int b;s=q; /*指针s指向新要插入的进程*/p1=ready; /*指针p1指向原来的进程队列的队首*/r=p1; /*使用指针r是指向p1前面的进程*/b=1;while(p1!=NULL)&&b)if(strcmp(p1->starttime,s->starttime)<0) r=p1; p1=p1->next; /*新进程的开始时间大,则p1 指向下一个进程
11、继续比*/ else b=0; if(r!=p1) r->next=s; s->next=p1; /*新进程找到位置,插在r和p1之间*/elses->next=p1; ready=s; /*新进程的开始时间按最小,插在队首,并修改就绪队首ready指针*/ void create() PCB *p;int i;ready=NULL; run=NULL; finish=NULL;printf("Please enter the name and time and starttime of PCB:n"); /*输入进程名、运行时间和开始时间*/for(i=
12、0;i<N;i+) p=(PCB *)malloc(sizeof(PCB); /*为新进程开辟空间*/scanf("%s",p->name); /*输入进程名*/scanf("%d",&p->needtime); /*输入进程要求运行时间*/scanf("%s",p->starttime); /输入进程开始时间p->cputime=0; p->state='W' /*表示就绪队列中未在队首先执行,但也是就绪状态*/if (ready!=NULL) insert(p); /*就
13、绪队首不为NULL,插入新进程*/else /*否则先插在NULL前*/p->next=ready;ready=p; printf(" Display is going to start: n");printf("*n");print(); getchar();run=ready; /*队列排好,run指向就绪队列队首*/ready=ready->next; /*ready指向下一个进程*/run->state='R' /*队首进程的状态为就绪*/void FCFS()while(run != NULL)run->
14、cputime=run->cputime+run->needtime;run->needtime=0;run->next=finish;finish = run;run->state='E'run = NULL;if(ready != NULL)run = ready;run->state='R'ready=ready->next;print();void main() printf("Please enter the total number of PCB:n");scanf("%d&qu
15、ot;,&N);create(); /*模拟创建进程,并输入相关信息*/FCFS(); /*先来先服务调度算法*/测试结果及说明首先输入进程个数(为5个),这里命名为A,B,C,D,E,然后分别输入运行时间和开始时间所有进程都在队列中,并都处于等待状态其中一个进程执行完毕所有进程都执行完毕2.2优先级调度2.2.1算法思想进程的执行顺序由高优先级到低优先级,系统或用户按某种原则为进程指定一个优先级来表示该进程所享有的确调度优先权。该算法核心是确定进程的优先级。2.2.2算法流程图图2.优先级调度流程图2.2.3程序代码#include <stdio.h>#include &
16、lt;stdlib.h>#include <string.h>typedef struct node char name10; /*进程名*/ int prio; /*优先数*/ int cputime; /*占用cpu时间*/ int needtime; /*要求运行时间*/ char state; /*状态*/ struct node *next; /*指针*/PCB;PCB *ready,*run,*finish; /*就绪 执行 结束指针*/int N;void prt() /*输出函数,可以方便看到进程执行的演示*/ PCB *p; printf(" NA
17、ME CPUTIME NEEDTIME PRIORITY STATUSn"); if(run!=NULL) printf(" %-10s%-10d%-10d%-10d %cn",run->name,run->cputime,run->needtime,run->prio,run->state); /*输出执行的进程的信息*/ p=ready; while(p!=NULL) printf(" %-10s%-10d%-10d%-10d %cn",p->name,p->cputime,p->needti
18、me,p->prio,p->state); /*输出就绪进程的信息*/ p=p->next; p=finish; while(p!=NULL) printf(" %-10s%-10d%-10d%-10d %cn",p->name,p->cputime,p->needtime,p->prio,p->state); /*输出结束队列的信息*/ p=p->next; getchar(); /*使用getchar()函数可以让输出时停留画面,等待人按回车继续*/void insert(PCB *q) /*插入新进程,把进程按优先
19、数大小排序*/ PCB *p1,*s,*r; int b; s=q; /*指针s指向新要插入的进程*/ p1=ready; /*指针p1指向原来的进程队列的队首*/ r=p1; /*使用指针r是指向p1前面的进程*/ b=1; while(p1!=NULL)&&b) if(p1->prio>=s->prio) r=p1; p1=p1->next; /*新进程的优先数小,则p1 指向下一个进程继续比*/ else b=0; if(r!=p1) r->next=s; s->next=p1; /*新进程找到位置,插在r和p1之间*/ else s-
20、>next=p1; ready=s; /*新进程的优先数最大,插在队首,并 修改就绪队首ready指针*/void create() PCB *p; int i;ready=NULL; run=NULL; finish=NULL;printf("Please enter the name and time and priority of PCB:n"); /*输入进程名、运行时间和优先级*/for(i=0;i<N;i+) p=(PCB *)malloc(sizeof(PCB); /*为新进程开辟空间*/ scanf("%s",p->na
21、me); /*输入进程名*/ scanf("%d",&p->needtime); /*输入进程要求运行时间*/ scanf("%d",&p->prio); /*输入进程优先数*/ p->cputime=0; p->state='W' /*表示就绪队列中未在队首先执行,但也是就绪状态*/ if (ready!=NULL) insert(p); /*就绪队首不为NULL,插入新进程*/ else p->next=ready; ready=p; /*否则先插在NULL前*/ printf("
22、; Display is going to start: n"); printf("*n"); prt(); run=ready; /*队列排好,run指向就绪队列队首*/ ready=ready->next; /*ready指向下一个进程,这样当进程执行时如果优先数小于其他的进程,应该先进行优先数最大的进程*/ run->state='R' /*队首进程的状态为就绪*/void prio() while(run!=NULL) run->cputime=run->cputime+1; /*运行一次cpu占用时间加一*/ ru
23、n->needtime=run->needtime-1; /*运行一次要求运行时间减一*/ run->prio=run->prio-1; /*运行一次优先数减一*/ if(run->needtime=0) /*若要求运行时间为0时*/ run->next=finish; /*退出队列*/ finish=run; /*finish为结束进程的队列 */ run->state='E' /*修改状态为结束*/ run=NULL; /*释放run指针*/ if (ready!=NULL) /*创建新就绪队列的头指针*/ run=ready; r
24、un->state='R' ready=ready->next; else if(ready!=NULL)&&(run->prio<ready->prio) /*队首进程的优先数比它下一个小,且下一个进程不为NULL时执行*/ run->state='W' run->next=NULL; /*队首进程退出进程队列*/ insert(run); /*在进程队列中重新插入原来的队首进程*/ run=ready; /*重新置就绪队列的头指针*/ run->state='R' ready=r
25、eady->next; prt(); void main() printf("Please enter the total number of PCB:n"); scanf("%d",&N); create(); /*模拟创建进程,并输入相关信息*/ prio(); /*优先数调度算法*/2.2.4测试结果及说明优先级调度算法运行情况如图1,图2,图3,图4所示 图1.输入进程块的数量 图2.输入每个进程的名称、时间、优先级 图3.输入所有的进程的相关信息 图4.所有进程调度算法完成2.3时间片轮转调度2.3.1算法思想 所有就绪进程按先来
26、先服务的原则排成一个队列,将新来的进程加到就绪对列的末尾,每当执行进程调度时,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。也就是说CPU的处理时间划分成一个个相同的时间片,就绪队列的所有进程轮流运行一个时间片。当一个时间片结束时,如果运行进程用完它的时间片后还未完成,就强迫运行进程让出CPU,就把它送回到就绪队列的末尾,等待下一次调度。同时,进程调度又去选择就绪队列中的队首进程,分配给它一时间片,以投入运行。直至所有的进程运行完毕。2.3.2算法流程图2.3.3程序代码#include <stdio.h>#include <stdlib.h>#inclu
27、de <string.h>typedef struct node char name10; /*进程名*/ int count; /*计数器,判断是否=时间片的大小*/int cputime; /*占用cpu时间*/int needtime; /*要求运行时间*/char state; /*状态*/struct node *next; /*指针*/PCB;PCB *ready,*run,*finish,*tail; /*就绪 执行 结束 尾指针*/int N,round;void prt() /*输出函数,可以方便看到进程执行的演示*/PCB *p; printf(" N
28、AME CPUTIME NEEDTIME STATUSn"); if(run!=NULL) printf(" %-10s%-10d%-10d %cn",run->name,run->cputime,run->needtime,run->state); /*输出执行的进程的信息*/ p=ready; while(p!=NULL) printf(" %-10s%-10d%-10d %cn",p->name,p->cputime,p->needtime,p->state); /*输出就绪进程的信息*/
29、p=p->next; p=finish; while(p!=NULL) printf(" %-10s%-10d%-10d %cn",p->name,p->cputime,p->needtime,p->state); /*输出结束队列的信息*/ p=p->next; getchar(); void insert(PCB *q) /*在队尾插入新的进程*/ PCB *p;p=ready;while(p->next!=NULL)p=ready->next;tail=p;tail->next=q;q->next=NULL;
30、 void create() PCB *p; int i;ready=NULL; run=NULL; finish=NULL;printf("Please enter the name and time of PCB:n"); /*输入进程名、和*/for(i=0;i<N;i+) p=(PCB *)malloc(sizeof(PCB); /*为新进程开辟空间*/ scanf("%s",p->name); /*输入进程名*/ scanf("%d",&p->needtime); /*输入进程要求运行时间*/ p-
31、>cputime=0; p->state='W' /*表示就绪队列中未在队首先执行,但也是就绪状态*/ if (ready!=NULL) insert(p); /*就绪队首不为NULL,插入新进程*/ else p->next=ready; ready=p; tail=p; printf(" Display is going to start: n"); printf("*n"); prt(); getchar(); run=ready; /*队列排好,run指向就绪队列队首*/ ready=ready->next
32、; /*ready指向下一个进程*/ run->state='R' /*队首进程的状态为就绪*/void count() while(run!=NULL) run->cputime=run->cputime+1; /*运行一次cpu占用时间加一*/run->needtime=run->needtime-1; /*运行一次要求运行时间减一*/run->count=run->count+1; /*运行一次计数器加一*/if(run->needtime=0) /*若要求运行时间为0时*/ run->next=finish; /*退
33、出队列*/finish=run; /*finish为结束进程的队列 */run->state='E' /*修改状态为结束*/run=NULL; /*释放run指针*/if (ready!=NULL) /*创建新就绪队列的头指针*/run=ready; run->state='R' ready=ready->next; elseif(run->count=round) /*如果时间片到*/ run->count=0; /*计数器置0*/if(ready!=NULL) /*如就绪队列不空*/run->state='W
34、9; insert(run); /*在进程队列中重新插入原来进程,插入队尾*/run=ready; /*重新置就绪队列的头指针*/run->state='R'ready=ready->next; prt(); void main() printf("Please enter the total number of PCB:n");scanf("%d",&N);create(); /*模拟创建进程,并输入相关信息*/count(); /*优先数调度算法*/2.3.4测试结果及说明时间片轮转调度算法运行情况如图1,图2,图
35、3所示图1 所有的进程都在队列中 图2 其中一个进程执行完毕 图4 所有的进程都执行完毕2.4多级反馈队列调度算法思想允许进程在队列之间移动。在系统中设置多个就绪队列,每个队列对应一个优先级,第一个队列的优先级最高,第二队列次之。以下各队列的优先级逐步低。各就绪队列中的进程的运行时间片不同,高优先级队列的时间片小,低优先级队列的时间片大。进程并非总是固定在某一队列中,新进程进入系统后,被存放在第一个队列的末尾。如果某个进程在规定的时间片内没有完成工作,则把它转入到下一个队列的末尾,直至进入最后一个队列。系统先运行第一个队列中的进程。当第一队列为空时,才运行第二个队列中的进程。依此类推,仅当前面
36、所有的队列都为空时,才运行最后一个队列中的进程。当处理器正在第i个队列中为某个进程服务时,又有新进程进入优先级最高的队列(第1(i-1)中的任何一个对列),则此新进程要抢占正在运行进程的处理器,即由调度程序把正在运行的进程放回第i队列的末尾,把处理器分配给新到的高优先级进程。除最低优先权队列外的所有其他队列,均采用相同的进程调度算法,即按时间片轮转的FIFO(先进先出)算法。最后一个队列中的进程按按时间片轮转或FCFS策略进行调度。它是综合了FIFO、RR和剥夺式HPF的一种进程调度算法。算法流程图程序代码#include<stdio.h>#include <stdlib.h
37、>#include <string.h>#define NULL 0typedef struct nodechar name10; /*进程名*/int num;/*进程所在队列数,也是该队列的时间片*/int cputime; /*占用cpu时间*/int needtime; /*要求运行时间*/struct node *next; /*指针*/PCB;PCB *qf1,*ql1;PCB *qf2,*ql2;PCB *qf3,*ql3;/定义三个队列的头指针和尾指针int blog1,blog2,blog3;/*分别记录队列1,、队列2、队列3中进程数*/void inse
38、rt(PCB *q,PCB *qf,PCB *ql) q->num+;if(qf=NULL&&ql=NULL) /队列为空qf=ql=q; else/队列不为空ql->next=q;ql=q;ql->next=NULL;void create(int n)/创建进程,刚来的进程都进入队列1PCB *p;p=(PCB *)malloc(sizeof(PCB);int i;blog1=blog2=blog3=0;/各队列中进程数均为0printf("Please enter the name and needtime of PCB:n"); /
39、*输入进程名和所需时间*/for(i=0;i<n;i+) /p=(PCB *)malloc(sizeof(PCB); /*为新进程开辟空间*/scanf("%s",p->name); /*输入进程名*/scanf("%d",&(p->needtime); /*输入进程要求运行时间*/p->cputime=0;p->num=0;insert(p,qf1,ql1);blog1+;/队列中进程数加1int run(PCB *q,PCB *qf,PCB *ql)PCB *p,*f,*l;/*p=(PCB *)malloc(s
40、izeof(PCB);f=(PCB *)malloc(sizeof(PCB);l=(PCB *)malloc(sizeof(PCB);*/p=q;f=qf;l=ql;if(q->needtime<=q->num) /*在时间片内完成*/q->cputime+=q->needtime;q->needtime=0;free(q);return 0;else/*不能在时间片内完成*/q->cputime+=q->num;q->needtime-=q->num;if(q->num<3)q->num+;insert(p,f,l
41、);/进入下一个队列return 1;void prt() /*输出函数,可以方便看到进程执行的演示*/PCB *p;/p=(PCB *)malloc(sizeof(PCB);int a;printf(" NAME CPUTIME NEEDTIME STATUSn");while(blog1>0|blog2>0|blog3>0)if(blog1>0)/*第一个队列不为空*/p=qf1;qf1=qf1->next;p->next=NULL;blog1-;printf(" %-10s%-10d%n",p->name,
42、p->needtime); a=run(p,qf2,ql2);if(a=1)blog2+;else if(blog2>0)/*第二个队列不为空*/p=qf2;qf2=qf2->next;p->next=NULL;blog2-;printf(" %-10s%-10d%n",p->name,p->needtime); a=run(p,qf3,ql3);if(a=1)blog3+;else if(blog3>0)/*第三个队列不为空*/p=qf3;qf3=qf3->next;p->next=NULL;blog3-;printf
43、(" %-10s%-10d%n",p->name,p->needtime); a=run(p,qf3,ql3);if(a=1)blog3+; /*使用getchar()函数可以让输出时停留画面,等待人按回车继续*/void main()qf1=ql1=(PCB *)malloc(sizeof(PCB);qf2=ql2=(PCB *)malloc(sizeof(PCB);qf2=ql2=(PCB *)malloc(sizeof(PCB);int n;blog1=blog2=blog3=0;printf("请输入进程的个数: ");scanf(&
44、quot;%d",&n);create(n);prt();2.4.4测试结果及说明2.5短作业调度2.5.1算法思想 短作业优先调度算法是指对短作业进行调度的算法。它从后备队列总选择一个或若干个运行时间最短的作业,将他们调入内存运行。2.5.2算法流程图:开始输入进程名就绪队列空?结束YN按时间服务进行排序执行程序短作业优先算法流程图2.5.3程序代码#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node char name10; /*进程名*/
45、int cputime; /*占用cpu时间*/int needtime; /*要求运行时间*/char state; /*状态*/struct node *next; /*指针*/PCB;PCB *ready, *run, *finish; /就绪、执行、结束指针int N; /进程数量void print() /输出函数PCB *p;printf(" NAME CPUTIME NEEDTIME STATUSn");if(run != NULL)printf(" %-10s%-10d%-10d %cn",run->name,run->cpu
46、time,run->needtime,run->state); /*输出执行的进程的信息*/p=ready;while(p != NULL)printf(" %-10s%-10d%-10d %cn",p->name,p->cputime,p->needtime,p->state); /*输出就绪进程的信息*/p=p->next; p=finish;while(p != NULL)printf(" %-10s%-10d%-10d %cn",p->name,p->cputime,p->needtim
47、e,p->state); /*输出结束队列的信息*/ p=p->next; getchar(); /*使用getchar()函数可以让输出时停留画面, 等待人按回车继续*/ void insert(PCB *q) /*插入新进程,把进程按进程到来时间大小排序*/ PCB *p1,*s,*r;int b;s=q; /*指针s指向新要插入的进程*/p1=ready; /*指针p1指向原来的进程队列的队首*/r=p1; /*使用指针r是指向p1前面的进程*/b=1;while(p1!=NULL)&&b)if(p1->needtime<s->needtim
48、e) r=p1; p1=p1->next; /*新进程的开始时间大,则p1 指向下一个进程继续比*/ else b=0; if(r!=p1) r->next=s; s->next=p1; /*新进程找到位置,插在r和p1之间*/elses->next=p1; ready=s; /*新进程的开始时间按最小,插在队首,并修改就绪队首ready指针*/ void create() PCB *p;int i;ready=NULL; run=NULL; finish=NULL;printf("Please enter the name and time of PCB:n"); /*输入进程名、运行时间和开始时间*/for(i=0;i<N;i+) p=(PCB *)malloc(sizeof(PCB); /*为新进程开辟空间*/scanf("%s",p->name); /*输入进程名*/scanf("%d",&p->needti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年部门级安全培训考试试题及答案综合卷
- 25年公司安全管理员安全培训考试试题及答案综合卷
- 2025新版车间安全培训考试试题7A
- 2025民间借款抵押合同书范本
- 2025光纤采购合同范本3
- 2025YY简易建筑工程劳务承包合同
- 2025标准设备采购合同模板
- 2025家居、电器商品购销合同
- 2025技术研发合作合同
- 2025年油气储层保护剂项目合作计划书
- 【华为】通信行业:华为下一代铁路移动通信系统白皮书2023
- Python 程序设计智慧树知到期末考试答案章节答案2024年四川师范大学
- 03D201-4 10kV及以下变压器室布置及变配电所常用设备构件安装
- 城乡环卫保洁投标方案(技术标)
- 充值合同范本
- 湖南省炎德英才名校联考联合体2024年4月春季高一年级下学期第二次(期中)联考数学试卷
- MSDS中文版(锂电池电解液)
- 《职业病防治法》知识考试题库160题(含答案)
- 全国初中数学青年教师优质课一等奖《反比例函数的图象和性质》教学设计
- 2023-2024学年人教版数学八年级下册期中复习卷
- 环境监测仪器安装施工方案(更新版)
评论
0/150
提交评论