




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告实验一:用户接口实验1 实验目的1 .理解面向操作命令的接口Shell。2 .学会简单的shell 编码。3 .理解操作系统调用的运行机制。4 .掌握创建系统调用的方法。操作系统给用户提供了命令接口和程序接口(系统调用)两种操作方式。用户接口实验也因此而分为两大部分。首先要熟悉Linux的基本操作命令,并在此基础上学会简单的shell 编程方法。然后通过想Linux内核添加一个自己设计的系统调用, 来理解系统调用的实现方法和运行机制。在本次实验中,最具有吸引力的地方是:通过内核编译,将一组源代码变成操作系统的内核,并由此重新引导系统,这对我们初步了解操作系统的生成过程极为有利。
2、2 实验内容1) 控制台命令接口实验该实验是通过 “几种操作系统的控制台命令”、 “终端处理程序”、 “命令解释程序”和“Linux 操作系统的bash”来让实验者理解面向操作命令的接口shell和进行简单的shell 编程。查看bash 版本。编写bash 脚本,统计/my 目录下 c语言文件的个数2) 系统调用实验该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步了解来理解操作系统调用的运行机制;同时通过 “自己创建一个系统调用mycal(l ) ”和 “编程调用自己创建的系统调用”进一步掌握创建和调用系统调用的方法。编程调用一个系统调用fork(),观察结果。编程调用创建的
3、系统调用foo(),观察结果。mycall(),实现功能:显示字符串到屏幕上。编程调用自己创建的系统调用。实验步骤系统调用实验:1. 首先将 Linux-3.0.tar.bz2 拷贝到/usr/src目录下 命令: cp linux-3.0.tar.bz2 /usr/src/2. 打开终端,获得root 权限命令: sudo s3. 进入 /usr/src目录命令:cd /usr/src4. 解压 linux 源码命令:tar xvzf linux-3.0.tar.bz25. 进入目录linux-3.0.5命令:cd linux-3.06. 添加系统调用操作:gedit kernel/myse
4、rvice.c 在文本编辑器中添加#include <linux/kernel.h>#include <linux/linkage.h> asmlinkage void sys_mycall()printk(KERN_INFO "Hello, world!n");return;7. 修改 kernel/Makefile 添加生成myservice.c添加到Makefile 的编译规则中:obj-y += myservice.o8. .修改arch/x86/include/asm/unistd_32.h,添加以下内容:#define _NR_mycal
5、l SYS_ID/SYS_ID 表示新添加系统调用的调用号并修改文件中的NR_syscalls,将其值增加19. 修改arxh/x86/include/asm/syscalls.h添加以下内容:asmlinkage void sys_mycall();10. 修改arch/x86/kernel/syscall_table_32.S,添加以下内容:.long sys_mycall11. 配置内核(仅仅修改local versions即可)命令: make menuconfig12. 编译内核命令: make j4 bzImage(开4个线程编译)13. 编译内核模块命令:make j4 modu
6、les14. 安装内核模块命令:make modules_install15. 安装内核命令: make install16. 重启系统,在系统选择页面选择进入自己编译的linux-3.0 内核17. 在桌面建立测试的C 程序 test.c程序内容如下:#include <stdio.h>int main(int argc, char *argv)syscall(SYS_ID); / SYS_ID 表示新添加系统调用的调用号return 0;18. 编译程序gcc test.c o a.out19. 运行程序./a.out20. 查看内核日志(printk 的输出信息在内核日志中)
7、: dmesg实验结果1. 成功完成内核编译的任务,结果显示图如下:2. 下图为添加系统调用结果五 实验小结这次实验的内核编译需要进行一系列比较花时间的操作过程,但同时也锻炼了实际动手能力,在实践中对于操作系统这门课有了进一步的了解。同时,在本次实验中,学习了linux 系统的使用方法,掌握了很多的基本命令,也明白了添加系统调用的方法,为以后的学习提供了很大的帮助。- 15 -实验四:一个简单文件系统的实现实验目的1. 熟悉Ext 文件系统的原理2. 根据Ext 文件系统的数据结构和构建方法,自行实现一个简单的内存文件系统实验内容1 .设计并实现一个一级(单用户)文件系统程序a.提供以下操作:
8、a) 文件创建/删除接口命令create/deleteb) 目录创建/删除接口命令mkdir/rmdirc) 显示目录内容命令lsb.创建的文件不要求格式和内容2 .设计并实现一个二级文件系统程序a.提供用户登录;b.文件、目录要有权限实验原理1. Ext 文件系统结构:2. 引导块BootBlock每个硬盘分区的开头1024 字节,即0 byte 至 1023 byte是分区的启动扇区。 存放由ROM BIOS 自动读入的引导程序和数据,但这只对引导设备有效,而对于非引导设备,该引导块不含代码。这个块与ext2 没有任何关系。3. 超级块 SuperBlock每个分区均有一个super bl
9、ock块,定义了文件系统的全局信息,包括块的大小,总块数,空闲块,索引结点数,各种位图和i 节点表的地址和大小等信息。4. 数据块位图这是 ext2 管理存储空间的方法。即位图法。每个位对应一个数据块,位值为 0 表示空闲,1 表示已经分配。数据块位图定义为一个块大小。于是,一个组中的数据块个数就决定了。假设块大小为b 字节。 可以区别的块数为b*8 个5. 数据块 DataBlocks每个组的数据最大个数是在块大小定义后就确定了的。所以组容量也就确定了。假设块大小为b 字节。那么组容量就确定为(b*8)*b 字节若 1 块 =4K,则组块大小=4K*8*4K=128M6. inode位图与数
10、据块位图相似,用来表示索引结点是否已经被使用。假设块大小为b字节, 每个索引结点数据结构大小为128 字节。 最多可以有b*8 个索引结点,索引结点表需要占用的存储空间大小为(b*8)*128 字节。 即 (b*8)*128/b=8*128个块7. inode表索引结点表由若干个索引结点数据结构组成,需要占用若干个块。Ext2中的每个索引结点数据结构大小为128字节。 每个索引结点即对应一个文件或是目录。是对其除文件名(目录名)以外的所有属性的描述。例如:文件类型,文件创建时间,访问时间,修改时间,文件所占数据块的个数,指向数据块的指针。其中,数据块指针是由15 个元组的数据组成实验步骤运行结
11、果1. 根据要求编写源程序,实验源代码见附录12. 运行程序,运行结果如图:1. 根据提示输入help,结果如图:2. 输入 ls 列出根目录下的项目,然后创建文件目录c 再输入 ls 观察是否创建成功:5 进入文件目录c 并在c 中创建文件a6 打开a,并读取a7 关闭 a8 删除 a9. 删除文件目录c五 . 实验小结本次实验要求建立一个文件系统,由于在专业课上的基本知识学习比较薄弱,所以参考了网上的一些代码,进行了一些修改后最后获得结果。最后,也算完成了一个简单的文件系统,具备了题目中的要求。但在以后的学习中,还要对这一方面的知识进行一些补充。附录 1:实验源码:#include <
12、;stdio.h>#include <time.h>#include <string.h>#include <signal.h>#define DATA_BLOCK 263680/数据块起始地址# define BLOCK_SIZE 512/块大小# define DISK_START 0 / 磁盘开始地址# define BLOCK_BITMAP 512/块位图起始地址# define INODE_BITMAP 1024/inode 位图起始地址# define INODE_TABLE 1536/ 索引节点表起始地址# define INODE_SI
13、ZE 64 /struct inode 的大小struct group_descchar bg_volume_name16; / 卷名unsigned short bg_block_bitmap; / 保存块位图的块号unsigned short bg_inode_bitmap; / 保存索引结点位图的块号unsigned short bg_inode_table; /索引结点表的起始块号unsigned short bg_free_blocks_count; / 本组空闲块的个数unsigned short bg_free_inodes_count; /本组空闲索引结点的个数unsigned
14、 short bg_used_dirs_count; /本组目录的个数char bg_pad4; /填充 (0xff);struct inodeunsigned short i_mode; /文件类型及访问权限unsigned short i_blocks; / 文件的数据块个数unsigned long i_size; / 大小 ( 字节 )unsigned long i_atime; / 访问时间unsigned long i_ctime; / 创建时间unsigned long i_mtime; / 修改时间unsigned long i_dtime; / 删除时间unsigned sh
15、ort i_block8; / 指向数据块的指针char i_pad24; / 填充 (0xff);struct dir_entry/目录项结构unsigned short inode; /索引节点号unsigned short rec_len; /目录项长度unsigned short name_len; /文件名长度char file_type; /文件类型(1: 普通文件,2: 目录 . )char name9; /文件名;char Buffer512;/针对数据块的缓冲区char tempbuf4097; /unsigned char bitbuf512; / 位图缓冲区 unsign
16、ed short index_buf256;short fopen_table16; / 文件打开表unsigned short last_alloc_inode; /最近分配的节点号unsigned short last_alloc_block; /最近分配的数据块号unsigned short current_dir; /当前目录的节点号struct group_desc super_block1; /组描述符缓冲区struct inode inode_area1; / 节点缓冲区 struct dir_entry dir32;/ 目录项缓冲区char current_path256; /
17、 当前路径名 unsigned short current_dirlen;FILE *fp;void update_group_desc() fseek(fp,DISK_START,SEEK_SET); fwrite(super_block,BLOCK_SIZE,1,fp);void reload_group_desc()/ 载入组描述符fseek(fp,DISK_START,SEEK_SET); fread(super_block,BLOCK_SIZE,1,fp);void update_inode_bitmap()/ 更新 inode 位图 fseek(fp,INODE_BITMAP,SE
18、EK_SET); fwrite(bitbuf,BLOCK_SIZE,1,fp);void reload_inode_bitmap()/ 载入 inode 位图fseek(fp,INODE_BITMAP,SEEK_SET); fread(bitbuf,BLOCK_SIZE,1,fp);void update_block_bitmap()/ 更新 block 位图fseek(fp,BLOCK_BITMAP,SEEK_SET); fwrite(bitbuf,BLOCK_SIZE,1,fp);void reload_block_bitmap()/ 载入 block 位图fseek(fp,BLOCK_B
19、ITMAP,SEEK_SET);fread(bitbuf,BLOCK_SIZE,1,fp);void update_inode_entry(unsigned short i)/ 更新第 i 个 inode 入口 fseek(fp,INODE_TABLE+(i-1)*INODE_SIZE,SEEK_SET);fwrite(inode_area,INODE_SIZE,1,fp);void reload_inode_entry(unsigned short i)/ 载入第 i 个 inode 入口 fseek(fp,INODE_TABLE+(i-1)*INODE_SIZE,SEEK_SET);fre
20、ad(inode_area,INODE_SIZE,1,fp);void reload_dir(unsigned short i)/ 更新第 i 个目录fseek(fp,DATA_BLOCK+i*BLOCK_SIZE,SEEK_SET);fread(dir,BLOCK_SIZE,1,fp);void update_dir(unsigned short i)/ 载入第 i 个目录fseek(fp,DATA_BLOCK+i*BLOCK_SIZE,SEEK_SET);fwrite(dir,BLOCK_SIZE,1,fp);void reload_block(unsigned short i)/ 载入第
21、 i 个数据块fseek(fp,DATA_BLOCK+i*BLOCK_SIZE,SEEK_SET);fread(Buffer,BLOCK_SIZE,1,fp);void update_block(unsigned short i)/ 更新第 i 个数据块fseek(fp,DATA_BLOCK+i*BLOCK_SIZE,SEEK_SET);fwrite(Buffer,BLOCK_SIZE,1,fp);int alloc_block()/ 分配一个数据块,返回数据块号;unsigned short cur=last_alloc_block;unsigned char con=128;int fla
22、g=0;if(super_block0.bg_free_blocks_count=0) printf("There is no block to be alloced!n");return(0);reload_block_bitmap();cur=cur/8;while(bitbufcur=255) if(cur=511)cur=0;else cur+;while(bitbufcur&con)con=con/2;flag+;bitbufcur=bitbufcur+con;last_alloc_block=cur*8+flag;update_block_bitmap(
23、);super_block0.bg_free_blocks_count-; update_group_desc();return last_alloc_block;void remove_block(unsigned short del_num)/ 删除一个blockunsigned short tmp;tmp=del_num/8;reload_block_bitmap();switch(del_num%8)/ 更改 block 位图case 0:bitbuftmp=bitbuftmp&127;break;case 1:bitbuftmp=bitbuftmp&191;break
24、;case 2:bitbuftmp=bitbuftmp&223;break;case 3:bitbuftmp=bitbuftmp&239;break;case 4:bitbuftmp=bitbuftmp&247;break;case 5:bitbuftmp=bitbuftmp&251;break;case 6:bitbuftmp=bitbuftmp&253;break;case 7:bitbuftmp=bitbuftmp&254;break;update_block_bitmap();super_block0.bg_free_blocks_cou
25、nt+;update_group_desc();/int get_inode()/ 分配一个inode,返回序号unsigned short cur=last_alloc_inode;unsigned char con=128;int flag=0;if(super_block0.bg_free_inodes_count=0)printf("There is no Inode to be alloced!n");return 0;reload_inode_bitmap();cur=(cur-1)/8;while(bitbufcur=255)if(cur=511)cur=0;
26、else cur+;while(bitbufcur&con)con=con/2;flag+;bitbufcur=bitbufcur+con;last_alloc_inode=cur*8+flag+1;update_inode_bitmap();super_block0.bg_free_inodes_count-; update_group_desc();return last_alloc_inode;/void remove_inode(unsigned short del_num) unsigned short tmp;tmp=(del_num-1)/8;reload_inode_b
27、itmap();switch(del_num-1)%8)/ 更改 block 位图case 0:bitbuftmp=bitbuftmp&127;break;case 1:bitbuftmp=bitbuftmp&191;break;case 2:bitbuftmp=bitbuftmp&223;break;case 3:bitbuftmp=bitbuftmp&239;break;case 4:bitbuftmp=bitbuftmp&247;break;case 5:bitbuftmp=bitbuftmp&251;break;case 6:bitbuf
28、tmp=bitbuftmp&253;break;case 7:bitbuftmp=bitbuftmp&254;break;update_inode_bitmap();super_block0.bg_free_inodes_count+;update_group_desc();/ dirvoid dir_prepare(unsigned short tmp,unsigned short len,int type) /新目录和文件初始 化 .and .reload_inode_entry(tmp);/ 得到新目录的节点入口地址if(type=2)/ 目录inode_area0.i_
29、size=32;inode_area0.i_blocks=1;inode_area0.i_block0=alloc_block();dir0.inode=tmp;dir1.inode=current_dir;_len=len;_len=current_dirlen;dir0.file_type=dir1.file_type=2;for(type=2;type<32;type+)dirtype.inode=0;strcpy(,".");strcpy(,".");update_di
30、r(inode_area0.i_block0);inode_area0.i_mode=01006;/drwxrwxrwx: 目录elseinode_area0.i_size=0;inode_area0.i_blocks=0;inode_area0.i_mode=0407;/drwxrwxrwx: 文件update_inode_entry(tmp);/unsigned short reserch_file(char tmp9,int file_type,unsigned short *inode_num,unsigned short *block_num,unsigned short *dir_
31、num)/查找文件并改写缓冲区里节点号,所在目录节点的数据块号( 07) 、目录项所在号unsigned short j,k;reload_inode_entry(current_dir);j=0;while(j<inode_area0.i_blocks)reload_dir(inode_area0.i_blockj);k=0;while(k<32)if(!dirk.inode|dirk.file_type!=file_type|strcmp(,tmp)k+; else*inode_num=dirk.inode;*block_num=j;*dir_num=k;re
32、turn 1;j+;return 0;/void cd(char tmp9)unsigned short i,j,k,flag;flag=reserch_file(tmp,2,&i,&j,&k);if(flag)current_dir=i;if(!strcmp(tmp,".")&&_len)current_pathstrlen(current_path)-_len-1='0'current_dirlen=_len;else if(!strcmp(tmp,&q
33、uot;.");else if(strcmp(tmp,".")current_dirlen=strlen(tmp);strcat(current_path,tmp);strcat(current_path,"/");else printf("The directory %s not exists!n",tmp);/unsigned short i,j,k,m,n,flag;m=0;flag=reserch_file(tmp,1,&i,&j,&k);if(flag)flag=0;while(fopen_
34、tableflag!=dirk.inode&&flag<16)flag+;if(flag<16)fopen_tableflag=0;reload_inode_entry(i);while(m<inode_area0.i_blocks)remove_block(inode_area0.i_blockm+);inode_area0.i_blocks=0;inode_area0.i_size=0;remove_inode(i);reload_inode_entry(current_dir);dirk.inode=0;/if(k!=0)dirk-1.rec_len+=
35、dirk.rec_len ;update_dir(inode_area0.i_blockj);inode_area0.i_size-=16;m=1;while(m<inode_areai.i_blocks)flag=n=0;reload_dir(inode_area0.i_blockm);while(n<32)if(!dirn.inode)flag+;n+;if(flag=32)remove_block(inode_areai.i_blockm);inode_areai.i_blocks-;while(m<inode_areai.i_blocks)inode_areai.i_
36、blockm=inode_areai.i_block+m;update_inode_entry(current_dir);else printf("The file %s not exists!n",tmp);/void mkdir(char tmp9,int type)- 18 -unsigned short tmpno,i,j,k,flag;reload_inode_entry(current_dir); / 获得当前目录的索引节点给inode_area0if(!reserch_file(tmp,type,&i,&j,&k) / 未找到同名文件i
37、f(inode_area0.i_size=4096) / 目录项已满printf("Directory has no room to be alloced!n");return;flag=1;32 个if(inode_area0.i_size!=inode_area0.i_blocks*512)/ 目录中有某些个块中项未满i=0;while(flag&&i<inode_area0.i_blocks)reload_dir(inode_area0.i_blocki);j=0;while(j<32)if(dirj.inode=0)flag=0;brea
38、k;j+; i+;tmpno=dirj.inode=get_inode();_len=strlen(tmp);dirj.file_type=type;strcpy(,tmp);update_dir(inode_area0.i_blocki-1);else/全满inode_area0.i_blockinode_area0.i_blocks=alloc_block();inode_area0.i_blocks+;reload_dir(inode_area0.i_blockinode_area0.i_blocks-1);tmpno=dir0.inode=get_i
39、node();_len=strlen(tmp);dir0.file_type=type;strcpy(,tmp);/初始化新块for(flag=1;flag<32;flag+)dirflag.inode=0;update_dir(inode_area0.i_blockinode_area0.i_blocks-1); inode_area0.i_size+=16;update_inode_entry(current_dir);dir_prepare(tmpno,strlen(tmp),type);else /已经存在同名文件或目录if(type=1)pr
40、intf("File has already existed!n");else printf("Directory has already existed!n");/void rmdir(char tmp9)unsigned short i,j,k,flag;unsigned short m,n;if(!strcmp(tmp,".")|!strcmp(tmp,".")printf("The directory can not be deleted!n");return;flag=reserch_
41、file(tmp,2,&i,&j,&k);if(flag)reload_inode_entry(dirk.inode); / 找到要删除的目录的节点并载入 if(inode_area0.i_size=32)/只有.and .inode_area0.i_size=0;inode_area0.i_blocks=0;/reload_dir(inode_area0.i_block0);/dir0.inode=0;/dir1.inode=0;remove_block(inode_area0.i_block0); reload_inode_entry(current_dir);/
42、得到当前目录的节点并更改当前目录项remove_inode(dirk.inode);dirk.inode=0;update_dir(inode_area0.i_blockj);inode_area0.i_size-=16;flag=0;- 31 -m=1;while(flag<32&&m<inode_area0.i_blocks) flag=n=0;reload_dir(inode_area0.i_blockm);while(n<32)if(!dirn.inode)flag+;n+;if(flag=32)remove_block(inode_area0.i_b
43、lockm);inode_area0.i_blocks-;while(m<inode_area0.i_blocks)inode_area0.i_blockm=inode_area0.i_block+m;update_inode_entry(current_dir);else printf("Directory is not null!n");else printf("Directory to be deleted not exists!n");/void ls() int i,j,k,tmpno,no;i=0;printf("items
44、type mode sizen");reload_inode_entry(current_dir);while(i<inode_area0.i_blocks)k=0;reload_dir(inode_area0.i_blocki);while(k<32)if(dirk.inode)printf("%s",);if(dirk.file_type=2)j=0;reload_inode_entry(dirk.inode);if(!strcmp(,".")while(j+<13)printf(&qu
45、ot; ");else if(!strcmp(,".")while(j+<14)printf(" ");else while(j+<15-_len)printf(" ");printf("<DIR>");switch(inode_area0.i_mode&7)case 1:printf("x");break;case 2:printf("_w_");break;case 3:printf("
46、;_w_x");break;case 4:printf("r");break;case 5:printf("r_x");break;case 6:printf("r_w_");break;case 7:printf("r_w_x");break; printf("");else if(dirk.file_type=1)j=0;reload_inode_entry(dirk.inode);while(j+<15-_len)printf(" ")
47、;printf("<FILE>");switch(inode_area0.i_mode&7)case 1:printf("x");break;case 2:printf("_w_");break;case 3:printf("_w_x");break;case 4:printf("r");break;case 5:printf("r_x");break;case 6:printf("r_w_");break;case 7:printf(
48、"r_w_x");break;printf("%d bytes ",inode_area0.i_size); printf("n");k+;reload_inode_entry(current_dir); i+;/ fileunsigned short search_file(unsigned short Ino)/ 在打开文件表中查找是否已打开文件unsigned short fopen_table_point=0;while(fopen_table_point<16&&fopen_tablefopen_tab
49、le_point+!=Ino);if(fopen_table_point=16)return 0;return 1;/void read_file(char tmp9)/ 读文件unsigned short flag,i,j,k;flag=reserch_file(tmp,1,&i,&j,&k); / 返回文件目录项的信息if(flag)if(search_file(dirk.inode)reload_inode_entry(dirk.inode);if(!(inode_area0.i_mode&4)/i_mode:111b: 读 ,写 ,执行 printf(&
50、quot;The file %s can not be read!n",tmp);return;for(flag=0;flag<inode_area0.i_blocks;flag+)reload_block(inode_area0.i_blockflag);Buffer512='0'printf("%s",Buffer);if(flag=0)printf("The file %s is empty!n",tmp);else printf("n");else printf("The file %
51、s has not been opened!n",tmp);else printf("The file %s not exists!n",tmp); void write_file(char tmp9)/ 写文件 unsigned short flag,i,j,k,size=0,need_blocks;flag=reserch_file(tmp,1,&i,&j,&k);if(flag)if(search_file(dirk.inode)reload_inode_entry(dirk.inode);if(!(inode_area0.i_mod
52、e&2)/i_mode:111b: 读 ,写 ,执行 printf("The file %s can not be writed!n",tmp);return;while(1)tempbufsize=getchar(); if(tempbufsize='#') tempbufsize='0'break;if(size>=4096)printf("Sorry,the max size of a file is 4KB!n");tempbufsize='0'break; size+;need_bl
53、ocks=strlen(tempbuf)/512;if(strlen(tempbuf)%512)need_blocks+;if(need_blocks<9)while(inode_area0.i_blocks<need_blocks)inode_area0.i_blockinode_area0.i_blocks=alloc_block(); inode_area0.i_blocks+;j=0;while(j<need_blocks) if(j!=need_blocks-1)reload_block(inode_area0.i_blockj);memcpy(Buffer,tem
54、pbuf+j*BLOCK_SIZE,BLOCK_SIZE);update_block(inode_area0.i_blockj); elsereload_block(inode_area0.i_blockj);memcpy(Buffer,tempbuf+j*BLOCK_SIZE,strlen(tempbuf)-j*BLOCK_SIZE);if(strlen(tempbuf)>inode_area0.i_size)Bufferstrlen(tempbuf)-j*BLOCK_SIZE='0'inode_area0.i_size=strlen(tempbuf);update_block(inode_area0.i_blockj);j+;update_inode_entry(dirk.inode);else printf("Sorry,the
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实践应用2025年软件设计师试题及答案
- 如何培养学生的自主学习能力计划
- 2024年河北省文化和旅游厅下属事业单位真题
- 湖北省武汉市江岸区2025年八下数学期末学业质量监测模拟试题含解析
- 2024年贵州省商务厅下属事业单位真题
- 2024年南大奥宇高级中学招聘笔试真题
- 风险管理建议与企业应对措施试题及答案
- 打造高效学习计划软件设计师考试的试题及答案
- 2025年软考网络管理员考试复习笔记和试题及答案
- 代码注释与文档对照的作用试题及答案
- 事业单位考试职业能力倾向测验(综合管理类A类)试题与参考答案(2024年)
- 2015-2024年十年高考数学真题分类汇编专题23 导数及其应用大题综合(学生版)
- 四川盆地果树病虫害绿色防控-终结性考核-国开(SC)-参考资料
- 水土保持方案投标文件技术部分
- 钻井及井下作业井喷事故典型案例
- 《新能源汽车》课件 课题四 纯电动汽车
- GB/T 15934-2024电器附件电线组件和互连电线组件
- CQI-23模塑系统评估审核表-中英文
- 2023年重庆市中考化学试卷(B卷)及答案解析
- 湖北省2024年中考生物试卷
- 基于机器学习的腐蚀监测
评论
0/150
提交评论