版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ARM 的存储管理单元 MMU 知识点介绍 1ARM MMU 页表设置计算 9ARM 的存储管理单元 MMU 知识点介绍由于ARM勺MM知识体系比较庞大,只总结必须知道了解的 MMI知识点。(一)MM内存管理单元的作用( 1 )虚拟存储空间到物理存储空间的映射( 2)存储器访问权限控制(3)设置虚拟存储空间的缓冲特性(二)MMU勺地址变换的内存块单元(1)段单元:按大小为1M的内存块单元为单位进行的虚拟地址物理地址之间的变换。2)大页单元:按大小为 64K 的内存块单元为单位进行的虚拟地址物理地址之间的变换(3)小页单元:按大小为 4K 的内存块单元为单位进行的虚拟地址物理地址之间的变换。(4
2、)极小页单元:按大小为 1K 的内存块单元为单位进行的虚拟地址物理地址之间的变换。Linux在最初的汇编代码中使用段单元的映射机制来实现MM的开启。当Linux系统启动之后采用的是小页单元的映射机制,因为我们知道 Linux 把物理内存和虚拟内存的管理是按页来管理的,每个页大小为 4k 字节。(三)MMU勺地址变换方式( 1)一级页表地址映射Modified virtual addr&ss20 19鹫畜鞘怎SB蠡畫鵠辭虚财址Section index一级描述符TableidexTranslation tabl包 base一级描述符地址Phy steal address20 19图】3114 1
3、30TransiatiDn base3114 132t0Transit:cn base00Section first-level descriptorSection t)利呂口 ddTS3SiSBZAPDomain1cB1a内存物理地址一级页表地址段映射,是指按1M大小的内存块单元进行的地址映射,查找的过程就是找到页表基地址和当前需要转化的虚拟地址 的高12位为索引的页目录项,由于每个目录项都是 4字节对齐的,所以应该为:页表基地址 +虚拟地址高12位X 4,从上图中可看出一级描述符的地址总是4字节对齐的,即后两位为0. 一级描述符地址中存放的是一级描述符,一级描述符的格式定义如下:3120
4、19Section base address映射实例:题目:把内存的地址从 0x100000-0x200000空间映射成虚拟地址 0xc0100000-0xc0200000的地址空间.(第一步)根据图1的介绍,我们先把内存虚拟地址右移 20位:Table in dex = (0xc0100000 20) = 0xc01(第二步)我们打算用内存地址 0x4000-0x8000的内存空间内作为存放页表的内存地址。所以把0x4000写到CP15:C2寄存器。注意0x4000正好是16k对齐。所以这里的一级描述符地址为:一级描述符地址:(0x4000 + (0xc01 20) = 0x1APQomai
5、n, C,B属性在实例中不做设置。所以最终的一级页表描述符为:1cb1O =0b10010=0x12一级页表描述符 = (0x1 20的index索引找到一级描述符基地址(0x4000 + (0xc01 20, 然后再与虚拟地址的低 20位相加,得到对应的物理地址 0x100000.(2)二级页表地址映射虔握地址Tatfe indes门申熨義n基地址3114 130Tar因 M;on baseTranslation table base一级描述符地址3114 13f2 10Transution baTablii ndsit0-0First-level ddscriptor3110 9日543
6、21 0CcrM PAR Mit W 碱耐4Dmt 叭1Q 1二盘描述符地址二级描述笛Semind-level desjoiplor3i12 11 IQTT? &5 4S 21 0Page baseAP3AP2APIAPDC B1 0Physical addressLeel two 佃劭定index二级页表的映射查找过程其实就是,找到页表基地址,然后找到一级描述符,然后通过一级描述符找到二级页表的基地址,然后再找 到二级页表的描述符,通过二级页表描述符来找到对应的物理地址基地址。二级描述符结构:31161512 11 10 987654321 0II ISmall page base addr
7、essAP3 AP2 AP1 APO C B 1 0 Small page图4二级描述符的说明可以参考一级描述符的描述。虚拟地址3122 2M211-0厂rRP0ptotfselA卜Arm中用cpf5中的c21ns目录项页面表内存页面(3) 级,二级页表地址映射的过程图:阴目录项和页面表都是存放在内存中的表。虚拟地址和物理地址的转化就是查找这些表的过程。ARM MMU 页表设置计算MMU使得每个用户进程拥有自己独内存管理单元简称 MM,U 它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。 立的地址空间,并通过内存访问权限的检查保护每个进程所用的内存不被其他进程破坏。 重点就在
8、于地址映射:页表的结构与建立、映射的过程。1、S3C2410/S3C2440 MM地址变换过程1 )地址的分类 一个程序在运行之前,没有必要全部装入内存,仅需要将那些要运行的部分先装入内存,其余部分在用到时从磁盘载入,当内存不足 时,再将暂时不用的部分调出到磁盘。这使得大程序可以在较小的内存空间中运行,也使得内存中可以同时装入更多的程序并发执行,这样的存储器一般称为虚拟存储器。 虚拟地址最终需要转换为物理地址才能读写实际的数据,通过将 虚拟地址空间和物理空间划分为同样大小的空间(段或页) ,然后 两 个空间建立映射关系 。由于虚拟地址空间远大于物理地址,可能多块虚拟地址空间映射到同一块物理地址
9、空间,或者有些虚拟地址空间没有映射到具体的物 理地址空间上去(使用到时再映射)。ARM cpu地址转换涉及三种地址:虚拟地址( VA, Virtual Address )、变换后的虚拟地址(MVA Modified Virtual Address )、物 理地址( PA,Physical Address )没有启动MM时,CPU核心,cache, MMU外设等所有部件使用的都是物理地址。启动MMU后,CPU核心对外发出虚拟地址 VA VA被转换为MVA供cache,MM使用,在这里MVA被转换成PA最后使用PA读取实际设 备 CPU核心看到和用到的只是虚拟地址 VA至于VA如果去对应物理地址P
10、A CPU核心不理会 caches和MM看不至U VA 他们利用 MVA转换得到PA 实际设备看不到VA MVA读写它们使用的是物理地址 PAMVA是除CPU核心外的其他部分看到的虚拟地址,VA与MVA勺变化关系如果VA32M需要使用进程标识号 PID (通过读CP15的C13获得)来转换为MVAif (VA 32M) thenMVA = VA | (PID 25)elseMVA = VA使用MVA而不使用VA的目的是,当有重叠的 VA时,转换为MVA地址并不重叠,减小转换为 PA的代价比如两个进程 1、2,VA都是 0- (32M-1),贝U MVA分别为 0x02000000-0x03ff
11、ffff,0x04000000-0x05ffffff。下文说到虚拟地址,如果没有特别指出,就是指 MVA2)虚拟地址到物理地址的转换过程arm cpu 使用页表来进行转换,页表由一个个条目组成,每个条目存储一段虚拟地址对应的物理地址及访问权限,或者下一级页表 的地址S3C2440最多会用到两级页表,以段(Section,1M)的方式进行转换时只用到一级页表,以页(Page)的方式进行转换时用到两级 页表。页的大小有3种:大页(64KB,小页(4KB,极小页(1KB。条目也称为描述符,有:段描述符、大页描述符、小页描述符、 极小页描述符 -保存段、大页、小页、极小页的起始物理地址;粗页表描述符、
12、细页表描述符,它们保存二级页表的物理地址。下图为S3C2440的地址转换图TTBSthCliOH g1rnml*tn?n寸bymodified vituftl addrQST- 血如orSection123 &y inodifiod irlrtiisl ddrQss bi“負qLa斡p$萨b“eWNc bigCom pbteIndexed by modjilc/l vWlul addro musxxTriypAfrUNO lIndQw by modified virtual address W|19.121254HDTi464KBFlrfHK)tjiMoIndcZDyWW4I 4ddr& tM
13、strO|$mo)ii 片中*4KB1nd$xd by (Tdirid virn*jl address Uh|19:13%O1024 心Mix.Indexed Dy modifldEg Vddrpstirtypa1KBTTB base代表一级页表的地址,将它写入协处理器 CP15的寄存器C2 (称为页表基址寄存器)即可,一级页表的地址是16K对齐,使用31:14存储页表基址,13:0为0一级页表使用4096个描述符来表示4GB空间,每个描述符对应1MB的虚拟地址,存储它对应的1MB物理空间的起始地址,或者存储 下一级页表的地址。使用 MVA31:20来索引一级页表(20-31 一共12位,2X
14、2=4096,所以是4096个描述符),得到一个描述符,每 个描述符占4个字节。一级页表描述符格式如下:剽如 1913 11 1 9 9$43210a paatt aMrttt|1即c0CB一TinyIma* Mldf*.pc1E3116 1S17 11 10 9 7 e 5 9 2 1 CiFflvHW psiStnialil p0TlnyfUQ*二级页表描述符AP、ap3、ap2、apl、apO结合CP15寄存器C1的R/S位,决定如何进行访问检查。段 描述符中AP控制整个段(1MB访问权限;大页描述符每个 apx(0-3)控制一个大页(64KB中1/4内存的访问权限,即ap3对 应大页高
15、端的16KB,apO对应大页低端的16KB小页描述符与大页描述符类似,每个 apx(0-3)控制一个小页(4KB的1/4内存的 访问权限;极小页中的ap控制整个极小页(1KB的访问权限。F表为AP S、R的对照表APSR特权模式用户模式说明0000无访问权限无访问权限任何访问将产生“Permission fault异常0010只读无访问权限在超级权限下可以进行读操作0001只读只读任何写操作将产生” Permission fault异常0011保留-01XX读/写无访问权限只允许在超级模式下访问10XX读/写只读在用户模式下进行写操作将产生Permission fault异常11XX读/写读/
16、写在所有模式下允许任何访问XX11保留-3、TLB的作用从MVA到PA的转换需要访问多次内存,大大降低了 CPU勺性能,有没有办法改进呢?程序执行过程中,用到的指令和数据的地址往往集中在一个很小的范围内,其中的地址、数据经常使用,这是程序访问的局部性。由 此,通过使用一个高速、容量相对较小的存储器来存储近期用到的页表条目(段、大页、小页、极小页描述符),避免每次地址转 换都到主存中查找,这样就大幅提 高性能。这个存储器用来帮助快速地进行地址转换,成为转译查找缓存( Translation Lookaside Buffers , TLB)当CPU发出一个虚拟地址时,MM首先访问TLB如果TLB中
17、含有能转换这个虚拟地址的描述符,则直接利用此描述符进行地址转换 和权限检查,否则MMU访问页表找到描述符后再进行地址转换和权限检查,并将这个描述符填入TLB中,下次再使用这个虚拟地址时就直接使用TLB用的描述符。使用TLB需要保证TLB中的内容与页表一致,在启动 MM之前,页表中的内容发生变化后,尤其要注意。一般的做法是在启动MM之前使整个TLB无效,改变页表时,使所涉及的虚拟地址对应的TLB中条目无效。4、Cache的作用同样基于程序访问的局部性,在主存和 CPUS用寄存器之间设置一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的 一部分指令或数据从主存调入这个存储器,供CPUS段
18、时间内使用,对提高程序的运行速度有很大作用。这个cache 一般称为高速缓存。 写穿式(Write Through ) 任一 CPU发出写信号送到Cache的同时,也写入主存,保证主存的数据同步更新。优点是操作简单,但由于主存速度慢,降低了系统 的写速度并占用了总线的时间。 回写式(Write Back)数 据一般只写到Cache,这样可能出现Cache中的数据得到更新而主存中的数据不变(数据陈旧)的情况。此时可在Cache中设一个标志地址及数据陈旧 的信息,只有当Cache中的数据被换出或强制进行”清空“操作时,才将原更新的数据写入主存响应的单元中, 保证了 Cache和主存中数据一致。Ca
19、che有以下两个操作: ”清空“(clean ):把Cache或Write buffer中已经脏的(修改过,但未写入主存)数据写入主存 ”使无效“(In validate ):使之不能再使用,并不将脏的数据写入主存。S2C2440内置了指令 Cache (ICaches)、数据Cache (DCacheS、写缓存(Write buffer ),需要用到描述符中的 。位(Ctt )和B 位( Btt )1)指令 Cache( ICaches) 系统刚上电或复位时,ICaches中的内容是无效的,并且ICaches功能关闭。往Icr位(CP15协处理器中寄存器1的第12位)写1可 以启动ICach
20、es,写0停止ICachesICaches 一般在MM开启后使用,此时描述符的 C位用来表示一段内存是否可以被 Cacha若Ctt=1,允许Cache,否则不允许。如果 MM没有开启,ICaches也可以被使用,此时CPU读取指令时所涉及的内存都被当做允许 CacheICaches关闭时,CPU每次取指都要读取主存,性能低,所以通常尽早启动ICachesICaches开启后,CPU每次取指时都会先在ICaches中查看是否能找到所用指令,而不管 Ctt是0还是1。如果找到成为Cache命中, 找不到称为Cache丢失,ICaches被开启后,CPU的取指有如下三种情况: Cache命中且Ctt
21、为1时,从ICaches中取指,返回CPU Cache丢失且Ctt为1时,CPU从主存中取指,并且把指令缓存到 Cache中 Ctt为0时,CPU从主存中取指2)数据 Cache( DCaches)与ICaches相似,系统刚上电或复位时,DCaches中的内容无效,并且DCaches功能关闭,Write buffer中的内容也是被废弃不用的。 往Ccr位(CP15协处理器 中寄存器1的第二位)写1启动DCaches写0停止DCaches Write buffer和DCaches紧密结合,额米有 专门的控制来开启和停止它与ICaches不同,DCaches功能必须在MM开启之后才能被使用。DC
22、aches被关闭时,CPU每次都去内存取数据。Ctt是0还是1,找到了成为Cache命意为Ctt与Ccr进行逻辑与后的值DCaches被开启后,CPU每次读写数据时都会先在 DCaches中查看是否能找到所要的数据,不管 中,找不到成为Cache丢失。通过下表可知 DCaches和 Write buffer 在Ccr,Ctt,Btt各种取值下,如何工作,Ctt and CcrCtt andCcrBttDCaches、Write buffer 和主存的访问方式00Non-cached , non-buffered(NCNB)读写数据时都是直接操作主存,并且可以被外设中止;写数据时不使用Write
23、 buffer,CPU会等待写操作完成;不会出现Cache命中01Non-Cached buffered(NCB)读数据时都是直接操作主存;不会出现Cache命中;写数据时,数据线存入 Write buffer,并在随后写入主存;数据存入Write buffer后,CPU立即继续执行;读数据时,可以被外设中止; 写数据时,无法被外设中止Cached,write-through(写通)mode读数据时,如果 Cache命中则从Cache中返回数据,不读取主存;读数据时,如果Cache丢失则从读主存中返回数据,并导致“linefil啲动作;10写数据时,数据先存入 Write buffer,并在随
24、后写入主存;数据存入Write buffer后,CPU立即继续执行;写数据时,如果 Cache命中则新数据也写入 Cache中;写数据时,无法被外设中止Cached,write-back( 写回)mode读数据时,如果 Cache命中则从Cache中返回数据,不读取主存;11读数据时,如果Cache丢失则从读主存中返回数据,并导致“linefile 的动作;写数据时,如果 Cache丢失则将数据先存入 Write buffer , 据在随后与入主存;存储完毕后CPu立即继续执行,这些数写数据时,如果Cache命中则在Cache中更新数据,并设置这些数据为”脏的,“但是不会写入主存;使用Cach
25、e时需要保证Cache Write buffer 的内容和主存内容一致,保证下面两个原则: 清空DCaches使主存数据得到更新 使无效ICaches,使CPU取指时重新读取主存在实际编写程序时,要注意如下几点: 开启 MM前,十五小 ICaches, DCaches和 Write buffer 关闭MM前,清空ICaches、DCaches即将”脏“数据写到主存上 如果代码有变,使无效ICaches,这样CPU取指时会从新读取主存Cache 使用DM臊作可以被Cache的内存时,将内存的数据发送出去时,要清空Cache;将内存的数据读入时,要使无效 改变页表中地址映射关系时也要慎重考虑 开启
26、ICaches或DCaches时,要考虑ICaches或DCaches中的内容是否与主存保持一致 对于I/O地址空间,不使用 Cache和Write buffer5、S3C2440 MMUTLB Cache的控制指令S3C2440除了 ARM920的CPU核心外,还有若干个协处理器,用来帮助主 CPu完成一些特殊功能。对 MMU TLB Cache等的操作涉及 到协处理器。vMCR|MRC条件协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2 cond p#,Rd,cn,cm,MRCII从协处理器获得数据,传给ARM920T CP核心寄存器MCR/数据从ARM
27、920T CP核心寄存器传给协处理器condII 执行条件,省略时表示无条件执行p#II 协处理器序号II 一个常数RdIIARM920T CPU核心的寄存器cn 和 cmII 协处理器中的寄存器II 一个常数其中, 、cn、cm、 仅供协处理器使用,它们的作用如何取决于具体的协处理器、MM使用实例:地址映射 这个实例将开启 MMU并将虚拟地址OxAOOOOOOO-OxAOIOOOOO映射到物理地址0x56000000-0x56100000( GPBCO物理地址为0x56000010,GPBDA物理地址为0x56000014),来驱动LED将虚拟地址0xB0000000-0xB3FFFFFF映
28、射到物理地址0x30000000-0x33FFFFFF在连接程序时,将一部分代码的运行地址指定为0xB0004000.这 个程序只使用一级页表,以段的方式进行地址映射,32位CPUS拟地址空间达到4G 级页表使用4096个描述符来表示4G空间(每个描述符对应1MB),每个描述符占4字节,所以一级页表占16KB这个程序使用SDRAI的开始16KB存放一级页表,所以剩下 的内存开始地址就为0x30004000,这个地址最终会对应虚拟地址 0xB0004000 (所以代码运行地址为0xB000400C)程序分为两部分:第一部分的运行地址为 0,它用来初始化SDRAM复制第二部分的代码到SDRAMM存
29、放在0x30004000)、设置页 表、启动MMU最后跳到SDRAMP(地址0XB0004000,第二部分运行地址设为 0xB000400Q用来驱动LED先看连接文件 mmu.ldsSECTIONS firtst0x00000000 : head.o init.o second 0xB0004000 : AT(2048) leds.o 程序分两个段:first 和seco nd。first 由head.o和init.o 组成,加载和运行地址都是0, seco nd由leds.o组成,加载地址为2048, 重定位地址为 0xB0004000。* File : head.S功能:设置SDRAM将第
30、二部分代码复制到 SDRAM设置页表,启动MMU然后跳到SDRAM继续执行*.text.global _start_start:ldr sp, =4096设置栈指针,以下都是C函数,调用前需要设好栈bl disable_watch_dog 关闭 WATCHD,否贝U CPU会不断重启bl memsetupbl copy_2th_to_sdrambl create_page_tablebl mmu_initldr sp, =0xB4000000ldr pc, =0xB0004000halt_loop:b halt_loop/* init.c: 进行一些初始化,在 Steppingstone 中运
31、行设置存储控制器以使用 SDRAM 将第二部分代码复制到 SDRAM 设置页表启动 MM,U 启动以后下面代码都用虚拟地址重设栈指针,指向SDRA顶端(使用虚拟地址)跳到SDRA中继续执行第二部分代码*它和head.S同属第一部分程序,此时 MM未开启,使用物理地址*/* WATCHDO寄存器 */#define WTCON(*(volatile unsigned long *)0x53000000)/* 存储控制器的寄存器起始地址 */#define MEM_CTL_BASE0x48000000/*关闭WATCHDO否贝U CPU会不断重启*/void disable_watch_dog(v
32、oid) WTCON = 0;/关闭WATCHDOG简单,往这个寄存器写 0即可/* 设置存储控制器以使用 SDRAM*/void memsetup(void)/* SDRAM 13个寄存器的值*/unsigned long constmem_cfg_val= 0x22011110,/BWSCON0x00000700,0x00000700,0x00000700,0x00000700,0x00000700,0x00000700,0x00018005,0x00018005,0x008C07A3,0x000000B1,/BANKCONO/BANKCON1/BANKCON2/BANKCON3/BANK
33、CON4/BANKCON5/BANKCON6/BANKCON7 /REFRESH/BANKSIZE0x00000030,/MRSRB60x00000030, /MRSRB7 ;int i = 0;volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;for(; i 13; i+)pi = mem_cfg_vali; / 循环复制 13 个寄存器到内存控制器基址/* 将第二部分代码复制到 SDRAM*/void copy_2th_to_sdram(void)unsigned int *pdwSrc= (unsigne
34、d int *)2048;/ 第二段代码加载地址 2048/4kb 最大 4096unsigned int *pdwDest = (unsigned int *)0x30004000;while (pdwSrc (unsigned int *)4096)*pdwDest = *pdwSrc;pdwDest+; pdwSrc+;/*设置页表*/0x30004000前放页表/*用于段描述符的一些宏定义*31:20 段基址, 11:10AP*/#define MMU_FULL_ACCESS#define MMU_DOMAIN#define MMU_SPECIAL#define MMU_CACHEAB
35、LE#define MMU_BUFFERABLE#define MMU_SECTION#define MMU_SECDESC#define MMU_SECDESC_WB8:5Domain ,3C ,2B , 1:00b10 为段描述符(3 10) /* 访问权限 AP */(0 5)/* 属于哪个域 Domain*/(1 4) /* 必须是 1 */(1 3) /* cacheable C 位 */(1 20)/ 段描述符中 31:20 保存段的物理地址,对应 (physicaladdr & 0xFFF00000)MMU_SECDESC_WB;/* 0x56000000是GPIO寄存器的起始物
36、理地址,* GPBCON和GPBDA这两个寄存器的物理地址 0x56000010 0x56000014,*为了在第二部分程序中能以地址 0xA0000010 0xA0000014来操作GPBCONGPBDAT*把从0xA0000000开始的1M虚拟地址空间映射到从0x56000000开始的1M物理地址空间 */virtuladdr = 0xA0000000;physicaladdr = 0x56000000;MMU_SECDESC;/* SDRAM的物理地址范围是 0x300000000x33FFFFFF* 将虚拟地址 0xB000000(0xB3FFFFFF映射到物理地址 0x3000000
37、00x33FFFFFF上,*/总共64M涉及64个段描述符virtuladdr = 0xB0000000; physicaladdr = 0x30000000; while (virtuladdr 0xB4000000)MMU_SECDESC_WB;virtuladdr += 0x100000; physicaladdr += 0x100000;/* 启动 MMU/ 右移 20 位就是 1/ 右移 20 位就是 1*/void mmu_init(void)unsigned long ttb = 0x30000000;_asm_(mov r0, #0nmcr p15, 0, r0, c7, c7
38、, 0n /*mcr p15, 0, r0, c7, c10, 4n /* drain writemcr p15, 0, r0, c8, c7, 0n /*mov r4, %0n/* r4 =mcr p15, 0, r4, c2, c0, 0n /*mvn r0, #0nmcr p15, 0, r0, c3, c0, 0n /*/*使无效 ICaches 和 DCaches */ buffer on v4 */使无效指令、数据 TLB */页表基址 */设置页表基址寄存器 */不进行权限检查 */域访问控制寄存器设为 0xFFFFFFFF,对于控制寄存器,先读出其值,在这基础上修改感兴趣的位,* 然后再写入/* 读出控制寄存器的值 */*/mrcp15, 0, r0, c1, c0, 0n/* 控制寄存器的低 16 位含义为: .RVI .RS B. .CAM* R :表示换出 Cache 中的条目时使用的算法,*0 = Random replacement ; 1 = Round robin replacement* V :表示异常向量表所在的位置,*0 = Low addresses = 0x00000000 ; 1 = High addresses = 0xFFFF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 直埋管道施工方案
- 农民视角的工农联盟
- 活动运营岗位招聘面试题及回答建议2025年
- 2024年度虚拟现实产品研发与销售合同
- 2024年度技术转让合同标的:生物制药技术转让
- 2024年工程设备租赁合同终止条款
- 2024年度安置房买卖合同中的交易条件确认
- 2024年度智能家居LED照明产品研发与生产合同
- 2024年度中美智能家居技术研发与合作合同
- 04年设备租赁及维护服务合同
- 篮球智慧树知到期末考试答案2024年
- 智慧教育发展趋势智慧课堂
- GB/T 43635-2024法庭科学DNA实验室检验规范
- 劳动仲裁:如何处理仲裁证据
- 大酒店劳务派遣服务专项方案
- 医院培训课件:《病室环境管理》
- 中国感染性休克指南
- 2021年初中部汉语听写大赛题库
- 大数据治理与服务管理解决数据孤岛问题的关键措施
- 带电作业规程课件
- 建筑工程《拟投入本项目的主要施工设备表及试验检测仪器设备表》
评论
0/150
提交评论