




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、评分: SHANGHAI UNIVERSITY操作系统实验报告学 院 计算机工程与科学专 业 计算机科学与技术学 号 学生姓名 计算机操作系统实验一报告实验一 题目 : 操作系统的进程调度姓名 : 张佳慧 学号 :12122544 实验日期 : 2015.1实验环境 : Microsoft Visual Studio实验目的 :进程是操作系统最重要的概念之一, 进程调度又是操作系统核心的主要内容。 本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容:1、设计一个有n个
2、进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。2、调度程序应包含23种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。操作过程:1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制
3、块结构如下:进程控制块结构如下: PCB进程标识数链指针优先数/轮转时间片数占用 CPU 时间片数进程所需时间片数进程状态进程控制块链结构如下:其中:RUN当前运行进程指针;HEAD进程就绪链链首指针;TAID进程就绪链链尾指针。2、 算法与框图(1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了, 优先级应该降低一级。 接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运
4、行。 原运行进程再按其优先数大小插入就绪链, 且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项 (相当于优先数法的优先数记录项位置) 。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等, 若相等说明已到达轮转时间, 应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。(3) 程序框图运行结果:Priority算法:Round Robi
5、n算法:实验代码:/操作系统实验-进程调度#include <cstdio>#include <ctime>#include <cstring>#include <cstdlib>const long n=5;struct pcbtype/进程控制块结构long id, priority, runtime, totaltime;char status;/R, W, F -> 运行,就绪,完成PCBn+1;long linkn+1;/链表结构long RUN, HEAD, TAIL;/选择算法long ChooseAlgo()char s12
6、8;printf("Please type the Algorithm(PriorityRound Robin):");gets(s);if (s0='P' | s0='p')return 1;return 0;/初始化void init()long i;for (i=1; i<=n; i+)PCBi.id = i;PCBi.priority = rand()%4+1;PCBi.runtime = 0;PCBi.totaltime = rand()%8+1;PCBi.status = 'W'/显示进程调度状况void s
7、howit()long i;printf("=n");printf("%-25s","ID");for (i=1; i<=n; i+) printf("%4ld", PCBi.id);printf("n%-25s","PRIORITY/TURNTIME");for (i=1; i<=n; i+) printf("%4ld", PCBi.priority);printf("n%-25s", "CPUTIME"
8、;);for (i=1; i<=n; i+) printf("%4ld", PCBi.runtime);printf("n%-25s", "ALLTIME");for (i=1; i<=n; i+) printf("%4ld", PCBi.totaltime);printf("n%-25s","STATUS");for (i=1; i<=n; i+) printf("%4c", PCBi.status);printf("n=n&
9、quot;);if (RUN != -1) printf("RUNNING PROCESS: %ldn", RUN);else printf("RUNNING PROCESS: NULLn");printf("WAITING QUEUE: ");for (i=HEAD; i!=-1; i=linki) printf("%ld ", i);printf("nn");/优先数调度算法void main_priority()long i, j, k; long sortn+1;init();/设置就绪
10、链for (i=1; i<=n; i+)sorti = i;for (i=1; i<=n; i+) /根据优先数排序for (j=n; j>i; j-)if (PCBsortj.priority > PCBsortj-1.priority)k=sortj; sortj=sortj-1; sortj-1=k;HEAD=sort1;for (i=1; i<n; i+)linksorti = sorti+1;TAIL = sortn;linkTAIL = -1;RUN = -1;/就绪链设置完毕RUN = HEAD;PCBRUN.status = 'R'
11、HEAD = linkHEAD;/运行链首进程while (RUN != -1)showit();PCBRUN.totaltime-;PCBRUN.priority -= 3; /优先级减3PCBRUN.runtime+;if (PCBRUN.totaltime = 0)/进程运行完成PCBRUN.status='F'RUN = HEAD;if (HEAD != -1)HEAD = linkHEAD;PCBRUN.status='R'elseif (HEAD != -1 && PCBRUN.priority < PCBHEAD.priori
12、ty)k=HEAD;PCBRUN.status = 'W'/寻找等待链中的合适位置while (k!=TAIL && PCBlinkk.priority > PCBRUN.priority)k=linkk;if (k = TAIL)linkk = RUN;/插入链尾之后TAIL = RUN;linkRUN = -1;RUN = HEAD;HEAD = linkHEAD;PCBRUN.status = 'R'elselinkRUN = linkk;/插入链中linkk = RUN;RUN = HEAD;/链首进程开始运行HEAD = link
13、HEAD;PCBRUN.status = 'R'showit();/轮转调度算法void main_round_robin()long i;init();/设置就绪链HEAD = 1;for (i=1; i<n; i+)linki = i+1;TAIL = n; linkTAIL = -1;RUN = -1;/就绪链设置完毕RUN = HEAD;PCBRUN.status = 'R'HEAD = linkHEAD;/运行首进程while (RUN != -1)showit();PCBRUN.totaltime-;PCBRUN.runtime+;if (PC
14、BRUN.totaltime = 0)/进程运行完成PCBRUN.status = 'F'RUN = HEAD;if (HEAD != -1)HEAD = linkHEAD;PCBRUN.status = 'R'elseif (HEAD != -1 && PCBRUN.runtime % PCBRUN.priority=0)/轮转时间到 PCBRUN.status='W'/插入链尾linkTAIL=RUN;linkRUN=-1;TAIL=RUN;RUN=HEAD;/链首进程开始运行HEAD=linkHEAD;PCBRUN.stat
15、us='R'showit();/主函数int main()long algo;srand(time(NULL);algo = ChooseAlgo();if (algo = 1)main_priority();/优先数法elsemain_round_robin();/简单轮转法printf("SYSTEM FINISHEDn");return 0;实验体会: 通过写代码的过程更加清晰地了解了两种算法的思想和用处,对算法的了解加深的同事也锻炼了写代码的能力。计算机操作系统实验三报告实验三 题目 : 请求页式存储管理姓名 : 张佳慧 学号 :12122544 实
16、验日期 : 2015.1实验环境 : Microsoft Visual Studio实验目的 :近年来,由于大规模集成电路(LSI)和超大规模集成电路(VLSI)技术的发展,使存储器的容量不断扩大,价格大幅度下降。但从使用角度看,存储器的容量和成本总受到一定的限制。所以,提高存储器的效率始终是操作系统研究的重要课题之一。虚拟存储技术是用来扩大内存容量的一种重要方法。学生应独立地用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。实验内容 :为了比较真实地模拟存储管理,可预先生成一个大致符合实际情况的指令地址流。然
17、后模拟这样一种指令序列的执行来计算和分析各种算法的访问命中率。 本实验采用页式分配存储管理方案, 并通过分析计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣。 另外也考虑到改变页面大小和实际存储器容量对计算结果的影响, 从而可为算则好的算法、合适的页面尺寸和实存容量提供依据。 实验是按下述原则生成指令序列的:(1) 50%的指令是顺序执行的。(2) 25%的指令均匀散布在前地址部分。(3) 25%的指令均匀散布在后地址部分。示例中选用最佳淘汰算法(OPT)和最近最少使用页面淘汰算法(LRU)计算页面命中率。公式为假定虚存容量为 32K,页面尺寸从 1K 至 8K,实存容量从 4 页至
18、 32 页。(1)最佳淘汰算法(OPT)这是一种理想的算法,可用来作为衡量其他算法优劣的根据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。 由于本示例中已预生成了全部的指令地址流, 故可计算出最佳命中率。该算法的准则是淘汰已满页表中不再访问或是最迟访问的的页。 这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不在访问该页,则把此页淘汰,不然得找出后继指令中最迟访问的页面淘汰。可见最佳淘汰算法要花费比较长的运算时间。(2)最近最少使用页淘汰算法(LRU)这是一种经常使用的方法,有各种不同的实施方案,这里采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访
19、问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页,总是处于靠近链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较大时,调整页表链的代价也是不小的。操作过程 :编写程序:#include <iostream>#include <process.h>#include <cstdlib>#include <algorithm>#include <ctime>#include <cstdlib>#include <cstring>#include <cstdio>
20、;#include <cmath>using namespace std;int adress32;/全局变量数组,地址流int p;/全局变量p是一共有多少地址流void init()/初始化函数, int t;srand(time(0);/随机产生指令序列 p=12+rand()%32; cout<<"地址流个数 P="<<p<<endl;cout<<"随机产生的地址流序列n"for(int i=0,j=0;i<p;i+,j+)t=1+rand()%9;adressi=t;/将随机产生
21、的指令数存入页面流 printf("a%d=%d ",i,t); j=j%5; if(i<10) printf(" "); if(j=4) printf("n");cout<<endl;void OPT(int n) /FIFO算法,n是M的值int e,q=p,m=n-1;int flag;int flag1;int queye=0;int leaflink32; memset(leaflink,0,sizeof(leaflink);for(int x=0;x<q;x+)e=x;flag=0;for(int
22、i=0;i<n;i+)if(leaflinki=adressx)flag=1;flag1=i;printf("有相同n");break;if(flag=0) int k=0; for(int j=0;j<m;j+)/0 1 2leaflinkk=leaflinkk+1; k+; leaflinkm=adresse; if(e>=m) queye+; if(flag=1) int temp10=0; for(int i=0;i<=m;i+) for(int a=e+1;a<q;a+) if(leaflinki=adressa) tempi+; i
23、nt index=0; for(int i=0;i<m;i+) int min=temp0; if(min>tempi) min=tempi; index=i; int l=leaflinkindex; leaflinkindex=leaflink0; leaflink0=l; for(int j=0;j<n;j+) printf("leaflink%d=%d ",j,leaflinkj); cout<<endl; cout<<"M="<<n<<"时FIFO的命中率为:"
24、;<<(1-(double)queye/p)*100<<"%"<<" "<<endl;void LRU(int n)/LRU算法int i;int m=n-1;int q=p;int e;int queye=0;int flag;int flag1;int y;int leaflink32;memset(leaflink,0,sizeof(leaflink);for(int x=0;x<q;x+)flag=0;e=x;for(i=0;i<n;i+)if(leaflinki=adressx)fla
25、g=1;flag1=i;printf("X=%d,lru%d = adress%d=%d ,flag= 1n",x,i,x,adressx);break;if(flag=0) int k=0;for(int j=0;j<m;j+)/0 1 2leaflinkk=leaflinkk+1; k+;leaflinkm=adresse;queye+;else if(flag=1) y=flag1;for(int j=0;j<m;j+)leaflinkflag1=leaflinkflag1+1;flag1+; leaflink3=adresse;printf("
26、发现相同后,改变leaflink%d=%dn",m,leaflink3); for(int j=0;j<n;j+) printf("leaflink%d=%d ",j,leaflinkj); cout<<endl;cout<<"发生替换次数:"<<queye<<endl;cout<<"M="<<n<<"时LRU的命中率为:"<<(1-(double)queye/p)*100<<"%&
27、quot;<<endl;int main()init();char c;printf("请输入选择算法(O:最佳淘汰 L:最近最少使用):");cin>>c;if(c='O')for(int i=3;i<4;i+)OPT(i);else if(c='L') for(int i=4;i<5;i+) LRU(i); cout<<endl; return 0;运行结果:最近最少使用:最佳淘汰:实验体会 : 通过这次实验,我了解了采用页式分配存储管理方案,并对页式分配存储管理的两个算法最佳淘汰算法和最近
28、最少使用页淘汰算法有了更深入的了解,为之后的学习奠定了基础。计算机操作系统实验四报告实验四 题目 : 文件操作与管理姓名 : 张佳慧 学号 :12122544 实验日期 : 2015.1实验环境 : Microsoft Visual Studio实验目的 :随着社会信息量的极大增长, 要求计算机处理的信息与日俱增, 涉及到社会生活的各个方面。因此,文件管理是操作系统的一个极为重要的组成部分。学生应独立地用高级语言编写和调试一个简单的文件系统, 模拟文件管理的工作过程。 从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。实验内容:1.要求
29、:(1)实际一个 n 个用户的文件系统,每个用户最多可保存 m 个文件。(2)限制用户在一次运行中只能打开 l 个文件。(3)系统应能检查打入命令的正确性,出错要能显示出错原因。(4)对文件必须设置保护措施,如只能执行,允许读、允许写等。在每次打开文件时根据本次打开的要求,再次设置保护级别,即可有二级保护。(5)对文件的操作至少应有下述几条命令:creat 建立文件。delete 删除文件。open 打开文件。close 关闭文件。read 读文件。write 写文件。2.示例:(1)程序采用二级文件目录,即设置了主文件目录(MFD)和用户文件目录(UFD) 。前者应包含文件主(即用户)及他们
30、的目录区指针;后者应给出每个文件主占有的文件目录,即文件名,保护码,文件长度以及他们存放的位置等。另外为打开文件设置了运行文件目录(AFD) ,在文件打开时应填入打开文件号,本次打开保护码和读写指针等。3.算法与框图(1)因系统小,文件目录的检索使用了简单的线性搜索,而没有采用 Hash 等有效算法。(2)文件保护简单实用了三位保护码,对应于允许读、允许写和运行执行,如下所示: 1 1 1允许写 允许读 允许执行如对应位为 0,则不允许。实验源码:#include <iostream>#include <cstdlib>#include <algorithm>
31、;#include <ctime>#include <cstring>#include <cstdio>#include <cmath>using namespace std;struct UFD int fname; int len; int procode3;ufd10;struct MFD int user; UFD p5;mfd10;int main() int x,n=10,flag1=1,flag2=1,flag3=1; if(flag1) for(int i=0;i<10;i+) ufdi.fname=i; int t=100
32、+rand()%900; ufdi.len=t; for(int j=0;j<3;j+) codej=rand()%2; srand(unsigned)time(NULL); bool f10; for(int i=0;i<10;i+) mfdi.user=i; memset(f,0,sizeof f); for(int j=0;j<5;j+) int t; do t=rand()%10; while(ft); ft=1; mfdi.pj=ufdt; while(n-&&flag2) cout<<"input user:&
33、quot;<<endl; cin>>x; if(x<0|x>=10) cout<<"try again"<<endl; break; for(int j=0;j<5;j+) cout<<mfdx.pj.fname<<" "<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl
34、; cout<<"input the command:"<<endl; cout<<"creat 1; delete 2; open 3; bye 4; close 5; read 6; write 7"<<endl; int s,index,flag=1; while(flag) cin>>s; switch(s) case 1: if(flag3) cout<<"输入你要创建的文件的名字:"<<endl; cin>>mfdx.p0.fn
35、ame; cout<<"输入你要创建的文件的长度:"<<endl; cin>>mfdx.p0.len; cout<<"输入你要创建的文件的权限:"<<endl; for(int i=0;i<3;i+) cin>>codei; for(int j=0;j<5;j+) cout<<mfdx.pj.fname<<" "<<mfdx.pj.len<<" "<<
36、code0<<code1<<code2<<endl; cout<<"input the command:"<<endl; else cout<<"输入你要创建的文件的名字:"<<endl; cin>>mfdx.pindex.fname; cout<<"输入你要创建的文件的长度:"<<endl; cin>>mfdx.pindex.len; c
37、out<<"输入你要创建的文件的权限:"<<endl; for(int i=0;i<3;i+) cin>>codei; for(int j=0;j<5;j+) cout<<mfdx.pj.fname<<" "<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl;
38、 cout<<"input the command:"<<endl; break; case 2: flag3=0; cout<<"输入要删除的文件:"<<endl; int t; cin>>t; for(int i=0;i<5;i+) if(mfdx.pi.fname=t) index=i; mfdx.pi.fname=0; mfdx.pi.len=000; memset(code,0,sizeof(code); for(int j=0;j&l
39、t;5;j+) cout<<mfdx.pj.fname<<""<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl; cout<<"input the command:"<<endl; break; case 3: cout<<"输入要打开的文件:"<<endl; int
40、 file; cin>>file; for(int i=0;i<5;i+) if(mfdx.pi.fname=file) if(code2=0) cout<<"你没有权限"<<endl; else cout<<"可以打开"<<endl; cout<<"input the command:"<<endl; break; case 4: for(int j=0;j<5;j+) cout<<mfdx.pj.fna
41、me<<""<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl; cout<<"goodbye"<<endl; flag=0; flag2=0; flag1=0; break; case 5: flag=0; flag1=0; break; case 6: cout<<"输入要读的文件:"&l
42、t;<endl; int file1; cin>>file1; for(int i=0;i<5;i+) if(mfdx.pi.fname=file1) if(code1=0) cout<<"你没有权限"<<endl; else cout<<"可以读"<<endl; cout<<"input the command:"<<endl; break; case 7: cout<<"输入要写的文件:&qu
43、ot;<<endl; int file2; cin>>file2; for(int i=0;i<5;i+) if(mfdx.pi.fname=file2) if(code0=0) cout<<"你没有权限"<<endl; else cout<<"可以写"<<endl; cout<<"input the command:"<<endl; break; return 0;实验结果:实验体会:本次实验主要是模拟了一下文
44、件系统, 文件是我们平时接触最多也是最广的形式, 即便是不会计算机的人们也可以通过这种操作文件来很方便地完成操作, 而本次实验让我了解到了文件系统的内部实现,虽然仅仅是通过 C+模拟的,但还是让我对它的原理有了更好的理解,也是对我们上课的内容的一个巩固。计算机操作系统实验六报告实验六 题目 : FAT 文件系统实验姓名 : 张佳慧 学号 :12122544 实验日期 : 2015.1实验环境 : win95 虚拟机实验目的 :从系统分析的角度出发,了解 FAT 文件系统的组织结构和文件的存储方式。进一步理解操作系统文件管理的基本思想。实验内容 :1.了解 3 吋软盘的 FAT 文件系统结构。2
45、.察看文件分配表的簇号链。3.察看文件目录表中文件目录结构。4.了解用簇号链映射的文件链式存储结构。5.分析目录文件的组成。实验步骤 :1. 进入 DEBUG 环境,装入 FAT 文件系统结构。执行命令:L 0 0 0 21说明:将 0 号驱动器中,逻辑扇区号从 0 开始的共 21H 个扇区读入内存,放在 DS:0000 为起始的地址中。2观察 1.44M 软盘中 FAT12 文件系统结构。执行命令:D 0000连续执行 D 命令,每次显示 128 个字节,可见文件系统结构。FAT 文件系统结构如下:逻辑扇区号其中:Boot 引导程序FAT 文件分配表FDT 文件目录表1.44M 软盘逻辑扇号
46、与物理扇区的对应关系逻辑扇号 0 # 0 道 0 面 1 扇逻辑扇号 1 H 11H 0 道 0 面 2 18 扇逻辑扇号 12 H 23H 0 道 1 面 1 扇18 扇逻辑扇号 24 H 35H 1 道 0 面 1 扇18 扇软盘有两面,每面 80 个磁道,每个磁道 18 个扇区,每个扇区 512 个字节,所以软盘的容量是 2*80*18*512 = 1474560, 1474560/1024/1024 大约为 1.44M。3分析文件分配表结构,了解用簇链映射的文件的链式存储结构。执行命令:D 200思考: 上面屏幕显示首簇号为 003 的文件共包括几个扇区?它分布在哪几个物理扇区上?答:
47、首簇号为 003 的文件共包括 2 个扇区,它分布在 0 道 0 面 2、3 扇。4观察 1.44M 软盘中文件目录表 FDT 以及文件目录结构执行命令:L 0 0 0 21说明:将逻辑扇区 0H 开始的共 21H 个物理扇区装入 DS:0000H 起始的内存。执行命令:D 2600说明:显示从 2600H 地址开始的 FDT 文件表。思考:计算 1.44M 的软盘根目录最多可以容纳多少文件?答: 1.44MB软盘的文件目录表FDT共14个扇区, 每个文件的目录登记项占用 32个字节,用作目录的一个扇区(512 字节)最多只能装入 512/32=16 个文件。因此,1.44MB 软盘的根目录下
48、最多可建文件或子目录 224 个。上图屏幕显示的文件的目录项中标示该文件的首簇号在何处?该文件是什么属性?答:首簇号在第 2 行的 1A1B 字节处,首簇号为 002,该文件属于归档文件。书上显示的文件首簇号在第 6 行的 1A1B 字节处,首簇号为 091,属归档文件。书上面的屏幕显示第 12 行目录项表示的是什么项目?答:第 12 目录项表示卷标。5观察 1.44M 软盘中文件目录表的长文件名目录结构思考:书上面屏幕显示的 23 行是什么目录项?答:长名的第一项,也是最后一项。若有一个文件名共长 34 个字符,要占多少目录项?答:四个目录项,三个长目录项和一个短目录项。6自己动手做:观察测试软盘的 FDT 区,找到名为 BAK 的文件目录。该文件是什么类型的文件?文件放在磁盘的哪个位置?占用几个存储单位?调出其内容看看。该文件为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区书记发言稿
- 规划建设管理培训大纲
- 教师语言行为培训
- 脚手架安全培训
- 2025版建筑工程用方木材料采购合同
- 2025版LED户外广告新媒体营销活动策划与执行合同
- 2025版钢结构场地租赁合同(含仓储、装卸及搬运服务)
- 2025版电商平台电商人员保密协议与竞业禁止合同
- 2025版木材行业信息化建设与技术支持合同
- 二零二五年度商铺租赁合同范本解读
- 《中国慢性便秘临床诊断与治疗规范(2024)》解读
- 水果联营合同协议
- 2024智能船舶规范
- 资料员笔试试题及答案
- 幼儿园晨间活动教研培训
- 浙江省建设工程检测技术人员(建筑材料及构配件)认证考试题库(含答案)
- 2025农村土地墓地买卖合同
- 《上海地区公共数据分类分级指南》
- 建筑施工现场消防安全培训课件
- 中小企业数字化转型路径分析
- 煤矿培训课件:煤矿自救互救知识
评论
0/150
提交评论