北京大学计算机科学技术系北京大学微处理器研究开发中心rambusvs课件_第1页
北京大学计算机科学技术系北京大学微处理器研究开发中心rambusvs课件_第2页
北京大学计算机科学技术系北京大学微处理器研究开发中心rambusvs课件_第3页
北京大学计算机科学技术系北京大学微处理器研究开发中心rambusvs课件_第4页
北京大学计算机科学技术系北京大学微处理器研究开发中心rambusvs课件_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高等计算机系统结构,主存与存储管理系统 Main Memory & Memory Management,(第六讲),2011.04.18,程 旭,存储系统的扩展图示,速度: 最快 最慢 容量: 最小 最大 每位成本: 最高 最低,控制,数据通路,Tape Network,处理器,L1 Cache,Disk,Main Memory DRAM,L2 Cache,10 IPC,0.01 IPC,0.000001 IPC,微处理器-主存(DRAM)的延迟差距,主存系统的性能,延迟(Latency):主要与Cache的性能相关 访问时间(access time) 周期时间(cycle time) 带宽(Bandwidth):主要与I/O的性能相关 带宽对Cache的性能也很重要(L2-Cache) 提高带宽比减低延迟容易些 在系统级(板级)提高存储系统性能受限制 在芯片内部提高存储系统的性能,主存性能,简单: CPU、Cache、总线和主存同宽(32或64位) 宽度: CPU/Mux 1 个存储字; Mux/Cache、总线和主存N个存储字 (Alpha: 64 位 示例为字交叉(word interleaved),cache,bus,mux,CPU,Cache,M,bus,第一种解决方案 高带宽DRAM,第二种解决方案 存储器和Cache之间宽数据通路,第三种解决方案 存储模块交叉访问,CPU,M,CPU,Cache,bus,M,M,M,M,增加带宽 交叉访问(Interleaving),非交叉访问的访问模式:,开始访问D1,CPU,Memory,开始访问 D2,得到D1,四路交叉访问的访问模式:,访问体 1,访问体 2,访问体 3,我们可以再次访问体 0,CPU,Memory Bank 1,Memory Bank 0,Memory Bank 3,Memory Bank 2,访问体 0,主存性能,时序模型 (字长 32 位) 1个周期 发送 地址, 6个周期访问时间, 1个周期发送数据 Cache块为 4个字 Simple M.P. = 4 x (1+6+1) = 32 Wide M.P. = 1 + 6 + 1 = 8 Interleaved M.P. = 1 + 6 + 4x1 = 11,独立存储体,独立访问 与 顺序访问 的存储体 多处理器 I/O CPU(Hit under n Misses, 非阻塞Cache) 超体(Superbank):包含若干Bank,支持同时的多路访问 体(Bank):所有的存储器在单块传输中都活跃 体数为多少? 体数 一个体中访问存储字所需的时钟数 为了支持顺序访问,否则在上一次访问完成之前,就会再次访问原存储体 (就像向量处理的方式),避免体冲突,程序 int x256512; for (j = 0; j 512; j = j+1) for (i = 0; i 256; i = i+1) xij = 2 * xij; 即使有128个体,由于512是128的倍数,字访问时还会出现冲突 软件:循环交换 或 声明数组大小不是2的幂次 (数组填充Array padding) 硬件:质数存储体 体号 地址 mod 体数 体内地址 地址 mod 体内字数 体号 体数 体内地址 体内字数 地址 体数体内字数 体数 和 体内字数 互质,中国余数定理 整数ai 和 bi 满足下列规则: 并且如果i j时 ai和aj互质, 那么整数x只有唯一结果 (确定映射): 体号 = b0, 体数 = a0 (本例为 3) 体内地址 = b1, 体内字数 = a1 (本例为 8) N个字编址为 0 到 N-1, 质数体数, 字数为2的幂次,快速体号,Seq. Interleaved Modulo Interleaved Bank Number: 0 1 2 0 1 2 Address within Bank: 0 0 1 2 0 16 8 1 3 4 5 9 1 17 2 6 7 8 18 10 2 3 9 10 11 3 19 11 4 12 13 14 12 4 20 5 15 16 17 21 13 5 6 18 19 20 6 22 14 7 21 22 23 15 7 23,存储技术,静态存储器:SRAM、Register File 动态存储器:DRAM、SDRAM、DDR和RAMbus 主存系统体系结构研究 存储管理系统介绍与回顾 总结,随机存储器(RAM)技术,为什么计算机设计人员需要了解RAM技术? 处理器的性能通常受到存储器带宽的限制 随着集成电路密度的增加,一些存储器将和处理器集成在同一芯片上 片载存储器来满足特殊需求 指令cache 数据cache 写缓冲器 为什么不用触发器技术来实现RAM? 密度:RAM需要更高的密度,静态RAM单元,6管SRAM单元,bit,word (行选),bit,bit,word,写操作: 1. 驱动位线(bit) 2. 选择行 读操作: 1. 对两条位线预充电,使得bitVdd 2. 选择行 3. 存储单元将一条线拉为低 4. 列上的信号放大器检测 bit 和 bit 之间的差异,拉高,1,0,0,1,典型的SRAM组织: 16字4位,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,SRAM Cell,-,+,Sense Amp,-,+,Sense Amp,-,+,Sense Amp,-,+,Sense Amp,.,.,Word 0,Word 1,Word 15,Dout 0,Dout 1,Dout 2,Dout 3,-,+,Wr Driver & Precharger,-,+,Wr Driver & Precharger,-,+,Wr Driver & Precharger,-,+,Wr Driver & Precharger,Address Decoder,WrEn,Precharge,Din 0,Din 1,Din 2,Din 3,A0,A1,A2,A3,.,.,为了将新值写入存储单元: 我们需要同时驱动两边 每次只能写入一个存储字 增设另外一对位线 (w 和 w) 可以同时进行读和写,b,a,SelB,SelA,w,w,SelW,寄存器堆所用的单端口 (写) SRAM单元,双读端口、单写端口的寄存器堆,:,:,:,busB,Address Decoder,WrEn,Ra,Register Cell,-,+,Wr Driver,busW,Register Cell,-,+,Wr Driver,busW,Register Cell,-,+,Wr Driver,busW,:,SelW0,SelB0,SelA0,Register Cell,Register Cell,Register Cell,:,SelW31,SelB31,SelA31,busB,busB,busA,busA,busA,5,Rb,5,Rw,5,典型SRAM的逻辑图,写使能信号通常是低电平有效 (WE_L) Din和Dout是结合在一起的: 需要一个新的控制信号输出使能信号(OE_L) WE_L有效(Low), OE_L禁止 (High) D 为数据输入 WE_L禁止 (High), OE_L有效 (Low) D 为数据输出 WE_L和OE_L都有效: 结果不确定. 千万不要这样做!,典型的SRAM定时,Write Timing:,D,Read Timing:,WE_L,A,Write Hold Time,Write Setup Time,Data In,Write Address,OE_L,High Z,Junk,Read Address,Garbage,Read Access Time,Data Out,Read Access Time,Data Out,Junk,Read Address,进一步分析SRAM单元,通常SRAM具有许多存储字 (行) 位线(bit lines)就很长,因而也就具有较大的电容 晶体管N1、N2、P1和P2就必须非常小 晶体管N1、P1没有足够的能量来快速驱动位线(Bit): 需要增设一个信号放大器(sense amplifier)来比较 Bit 和Bit,6管 SRAM单元,bit,bit,word (行选择),bit,bit,word,N1,N2,P1,P2,SRAM的问题,六个晶体管需要较多的芯片面积 假设 在某单元中存储“0”: 晶体管 N1将试图将 Bit拉为0 晶体管 P2 将试图将Bit为1 但是由于这些位线在预充电时都将置为高: 那么是否必须需要P1和P2?,bit = 1,bit = 0,Select = 1,On,Off,Off,On,N1,N2,P1,P2,On,On,SRAM的问题 (续),P型晶体管 (P2)具有三个功能: 在读操作期间, 将 Bit 线驱动为高 (Select = 1) 在下一次写操作之前, 保持N1的门一直在高电平 在读操作期间, 防止 N1的门电容将它的所有电荷都泄漏给 Bit,bit = 1,bit = 0,Select = 1,N1 On,On,P2,Vdd,On,On,N1的门电容,当将入“0”到这个单元时, 置为高,在下一次写入之前, P2将一直保持为高,4管RAM单元,读操作: 1. 对b预充电, 使得 b Vdd 2. 选择行 3. 感应 4. 放大数据 5. 写 刷新: 假读周期 写操作: 1. 驱动位线( bit lines) 2. 选择行,在读取数据期间,消耗掉的电荷,必须被恢复,优点: 较小: 取消了 2个负载设备和1个供电端 缺点: 附加了刷新周期 降低了抗干扰能力,单管单元,写操作: 1. 驱动位线 2. 选择行 读操作: 1. 预充电, 使得位线 Vdd 2. 选择行 3. 单元和位线共享电荷 在位线上只有非常小的电压变化 4. 感应 (非常奇妙的感应放大器) 可以检测到大约一百万电子伏特的变化 5. 写: 恢复电压值 刷新 1. 仅仅需要对每个单元进行一次假读操作,行选择,位线,DRAM引论,Dynamic RAM (DRAM): 需要刷新 密度非常高 耗电非常低 (工作时0.10 .5 W, 等待(standby)0.25 10 mW) 每位的成本非常低 管脚敏感: 输出使能(Output Enable: OE_L) 写使能(Write Enable:WE_L) 行地址过滤(Row address strobe: ras) 列地址过滤(Col address strobe:cas),cell array N bits,r o w,c o l,addr,log N,sense,D,单感应放大器 耗电较少, 面积小,2,传统的DRAM组成,行 译 码 器,行地址,列地址,数据,RAM单元阵列 RAM Cell Array,字选择 (行选择),位线(数据),行和列地址在一起: 每次选择一位,每个交叉点代表一个单管DRAM单元,列选择器 & I/O电路,典型的DRAM组成,典型DRAMs: 并行访问多位 例如: 2 Mb DRAM = 256K x 8 = 512行 x 512列 x 8位 行和列地址并行作用于所有 8个位面 (planes),典型DRAM的逻辑框图,控制信号 (RAS_L, CAS_L, WE_L, OE_L) 都是低电平有效 Din和Dout合并在一起(D): WE_L有效(低), OE_L禁止 (高)时, D作为数据输入管脚 WE_L禁止(高), OE_L有效 (低) D作为数据输出管脚 行和列地址共享相同的一组管脚(A) RAS_L变成低: 管脚A被锁定为行地址 CAS_L变成低: 管脚A被锁定为列地址,DRAM 写操作定时,WE_L,A,Row Address,OE_L,Junk,WR Access Time,WR Access Time,CAS_L,Col Address,Row Address,Junk,Col Address,D,Junk,Junk,Data In,Data In,Junk,DRAM 写时钟周期,Early Wr Cycle: WE_L asserted before CAS_L,Late Wr Cycle: WE_L asserted after CAS_L,当 RAS_L有效时, 所有DRAM开始访问,DRAM 读操作定时,OE_L,A,Row Address,WE_L,Junk,Read Access Time,Output Enable Delay,CAS_L,Col Address,Row Address,Junk,Col Address,D,High Z,Junk,DRAM 读时钟周期,Early Read Cycle: OE_L asserted before CAS_L,Late Read Cycle: OE_L asserted after CAS_L,Junk,Data Out,High Z,当 RAS_L有效时, 所有DRAM开始访问,DRAM 读操作定时,周期时间 与 访问周期,DRAM (读/写)周期时间 DRAM (读/写)访问时间 DRAM (读/写)周期时间: 我们可以以多快的频率来开始进行存储访问? 比喻: 我们只能在4x的年度的夏天,才能收看到奥运会足球赛 DRAM (读/写) 访问时间: 一旦我们开始进行访问,那么要过多长时间可以获得数据? 比喻: 在奥运会期间,一旦我们想看,最多等一天就可以收看到下一场比赛 DRAM的带宽限制: 比喻:如果我们2002年还想看新的世界级足球比赛?,计算机中的主存系统,主存访问过程,Need for Error Correction!,Motivation: Failures/time proportional to number of bits! As DRAM cells shrink, more vulnerable Went through period in which failure rate was low enough without error correction that people didnt do correction DRAM banks too large now Servers always corrected memory systems Basic idea: add redundancy through parity bits Common configuration: Random error correction SEC-DED (single error correct, double error detect) One example: 64 data bits + 8 parity bits (11% overhead) Really want to handle failures of physical components as well Organization is multiple DRAMs/DIMM, multiple DIMMs Want to recover from failed DRAM and failed DIMM! “Chip kill” handle failures width of single DRAM chip,DRAM技术的发展 Throughput vs. Latency,快速页模式(Fast Page Mode, FPM)DRAM,常规DRAM组成: N行 x N列 x M位 同时读和写M位 每 M位访问需要 一个RAS / CAS周期 FPM DRAM N x M 锁存器来保存一行 在读取一行到寄存器后 仅仅需要CAS来访问该行中的其他M位存储块(bank) 在RAS_L保持有效, 同时CAS_L 不断变化,快速页模式操作,DRAM性能指标:(x-y-y-y,例如6-3-3-3) x:first data access time in clock/bus cycles y:successive burst data access time in clock/bus cycles,快速页模式操作,EDO DRAM(Extended Data Out),(20%40%性能提升),EDO DRAM性能指标:5-2-2-2 at 66MHz,Burst EDO DRAM,SDRAM(Synchronous DRAM),基于DRAM的技术(CAS、RAS,etc) 允许在一个DIMM中包含多个BANK DIMM SDRAM 168 pin增加了ba0、ba1两个管脚 与CPU或芯片组使用同步时钟信号 五组控制信号,可组成多种命令 CS:chip select RAS:raw address select CAS:col address select WE:write enable DQM:output enable 更好的支持Burst方式 可编程设置模式: Bust length,sequence.,SDRAM(Synchronous DRAM),SDRAM Mode Register,SDRAM read,SDRAM performance,CAS Latency is important x-y-y(例如:3-2-2) CAS Latency the RAS-to-CAS delay RAS precharge time 时钟主频 PC66:66MHz PC100:100MHz PC133:133MHz,DDR SDRAM,DDR:Double data rate 时钟上升沿和下降沿均可以发送数据(带宽X2 !) 在原有的SDRAM的架构基础上加以较小的改进(可复用原有生产线) SDRAM和DDR均为开放标准(JEDEC)(Important !),SDRAM,DDR,DDR-SDRAM Timing Diagram,SDRAM的Bank和内存规范,图1: 4M X 1bit X 32chip 图2: 4bank in a dimm SIMM、DIMM single/doul in-line memory module 目前使用的都是DIMM 时钟频率 PC1600 100MHz 10028 MB/s PC2100 133MHz PC2400 150MHz,图1,图2,RAMBUS(RDRAM),RAMBUS内存的发展: Base RAMBUS Concurrent RAMBUS 被用于一些娱乐设施(如SONY PS2),高端图形工作站以及一些高性能的显卡等 Direct RAMBUS,存储模块为RIMM(RamBus In-line Memory Module) 全新的内存架构 高时钟速率、高带宽:600MHz、800MHz 私有标准(需要支付专利费用和利润),RAMBUS存储架构,以32MB芯片为例 分为32个Bank,1MB/bank Bank512 row,2KB/row Row = 128 dualocts dualocts = 16 bytes 每个Bank连接两个sense amp 图中左右两个标号相同的sense amp是同一个 相邻两个Bank不可同时读! Bank0、Bank15、Bank16、Bank31拥有一个私有的amp 两条64bits内部通道,RAMBUS的读操作,每次行列选择读出一个dualocts(128bits) 两条总线各输出64bits 通过read mux转换为8bits数据输出(并-串) read mux由Clock to Master控制,经过4周期输出8组8bits数据(双沿) Clock to Master: 400MHz 实际数据传输速率800MHz PC800,RAMBUS构造全貌,两个Write Mux(串-并) 两个地址控制 Row Control Column Control 一组Ctrl regs,RAMBUS vs.SDRAM系统连接,RAMBUS vs.SDRAM性能,RAMBUS vs.SDRAM封装,SIMM single in-line memory module DIMM dual in-line memory module RIMM rambus in-line memory module,DDR II SDRAM,DDR3 SDRAM,Direct RAMBUS(DRDRAM),其它DRAMESDRAM (Enhanced SDRAM), Ramtron,其它DRAMESDRAM (Enhanced SDRAM), Ramtron,其它DRAMVCDRAM (Virtual Channel DRAM,NEC),其它DRAMFCDRAM (Fast Cycle DRAM, 富士),其它DRAMMDRAM (Multibanked DRAM) MoSys 1T-SRAM,其它DRAMRLDRAM (Reduced Latency DRAM),300MHz (3.3ns cycle time) DDR Format I/O Separate row/column address Supply Voltage of 1.8V 144-Ball T-FBGA Package,各种DRAM的性能比较,The Real World DRAM Interfaces,PCB板的Path Length,DRAM Research Areas,提高带宽是最重要目标 降低Latency Topology Memory Command Address Mapping,Choices for Future,主存系统模型,通道(channel): 主存控制器与DRAM之间独立的数据总线。目前大部分处理器和北桥芯片组有2条通道,允许同时访问2组DRAM。,主存系统的研究,空间并行性 每个通道都可以独立、并行地处理主存访问 时间并行性 单个通道内多个主存访问延迟的重叠 局部性 如果连续二个访问指向同一个通道内同一个设备中同一个体同一行,则第二个主存访问可以仅需要Read或Write一个命令,能够大大降低第二个主存访问延迟。,Embedded DRAM,CPU和DRAM合并在一个芯片中 消除由于Pin和PCB所带来的带宽限制 巨大的On-chip L3 Cache的需求 IRAM,虚拟存储系统,提供一种理想中的非常非常大的存储器 许多工作所需存储器的总和大于实际的物理存储器 每个工作的地址空间大于实际的物理存储器 使得可利用的(快速、昂贵)的物理存储器得以很好地利用 简化存储器的管理 (当今,使用虚拟存储技术的主要原因) 使用存储层次,保持平均访问时间很低 至少包括两级存储层次:主存 和 二级存储 虚拟地址 程序员使用的地址 虚拟地址空间 上述地址的集合 存储器地址 物理存储器中存储字的地址,也称为物理地址或实地址( Real address),虚拟存储系统设计的基本问题,如何在分配主存空间以安放代码和数据? 如何为程序分配主存空间,分配多少,何时分配? 超过主存容量的一个程序或多个程序的替换策略? 如何软硬件协同保证运行正常? 如何为用户程序提供独立的地址空间? 如何提供存储保护?(病毒、恶意破坏、错误的编程),页式存储管理,V = 0, 1, . . . , n - 1 虚拟地址空间 M = 0, 1, . . . , m - 1 物理地址空间 映射: V M U 0 地址映射函数,将主存物理空间按照固定页面大小分割 将不连续的主存物理空间映射为连续的程序虚拟空间 提供页表(OS)和MMU(CPU)管理机制的支持 使用TLB(Translation lookaside buffer)提供地址快速变换 提供页表基址寄存器,进程页表,虚实地址变换机制MMU(mem management unit),CPU发出虚拟地址 MMU通过table walk访问主存页表,获得映射关系 MMU将虚页号变换为物理页号,产生物理地址,访存 缺页时,处理器转到页面失效入口,交给OS处理,虚实地址变换,两级页表变换,虚拟地址经过两级页表映射 页表基址寄存器存储一级页表首址 一级页表中将一个较大虚拟地址范围映射到一个二级页表 考虑多页面大小的支持(4K 64K 4M.),快表TLB(Translation lookaside buffer),TLB(Translation lookaside buffer,变换旁路缓冲器) TLB是页表的Cache 典型的实现:64Entry全相联存储器 同样要实现替换算法等 相比页表,要多出虚页号的域,64路 全相联,主要的虚拟存储实现方式,段式 将程序划分成为若干个地址连续的区域(段),通过段描述符和段内偏移来访问。代码段、数据段、堆栈段、共享段等 优点:十分方便的存储共享和存储保护 缺点:段的连续性容易造成存储碎片问题 页式 将地址空间划分成大小固定的页 优点:灵活性好 缺点:可能造成空间浪费,即使只使用一个字节也要分配一个页 段页式 在段式划分的基础上,将段再划分成页 优点:解决了段的连续存放问题 缺点:开销大,控制复杂,操作系统多不愿使用,?,虚拟存储的主要组成,MMU:Memory Management Unit TLB:Translation lookaside buffer TLB的功能一般包含在MMU中 Table walking:页表查找机制 页表:主存中的虚实地址转换信息,MMU,MMU:存储管理部件, Memory Management Unit MMU是系统中进行虚实地址转换的核心部件 MMU的主要工作如下: 在TLB的协助下完成虚实地址转换 维护TLB的控制机制 负责存储保护 在TLB失效或非法访问时向处理器发起中断 维护一个TLB失效后的再填充机制(Table walking),TLB,TLB:变换旁视缓冲器,Translation Lookaside Buffer TLB是内存中页表的Cache,用来保存最近用过的页表项信息 极大地提高了地址变换的速度 相对于Cache,页表项的存储局部性更好,有更小的失效率 典型的TLB表项包含符号位、VPN、PPN和权限位 符号位:有效位等 VPN:Virtual Page Number PPN:Physical Page Number,Also as Physical Frame Number 权限位:对该页面的访问权限控制,禁止、只读、只写、读写,Flag,VPN,PPN,Perm,VPN,Offset,虚拟地址,PPN,Offset,物理地址,TLB(续),TLB可以应用Cache中的绝大部分技术 直接映射、组相联或者全相联 组相联 - 全相联 - 组相联 多级TLB Victim TLB等,Table walking,Table walking是当TLB失效发生后,重新填充TLB表项的机制 硬件Table walking机制 典型代表:Intel IA32系列、PowerPC 当TLB失效时,通过硬件状态机的控制,搜索页表,获得相应的信息并填充到TLB中 优点:速度快(不需中断、不需指令执行、访问DCache) 缺点:操作系统必须使用规定格式的页表(Intel的补丁式的页表) 注意:TLB失效后访问DCache也可能造成一级、二级Cache失效,从而导致较大的失效损失,Table Walking(续),软件Table walking 典型代表:MIPS、Alpha 当发生TLB失效时,MMU发出一个失效中断 操作系统的失效中断处理函数搜索页表,找到相应的表项,并通过特定的指令填充到TLB中去 优点:操作系统具有完全的灵活性、可移植性好 缺点:性能较硬件要差 中断损失 处理函数导致指令Cache失效 处理函数访问页表导致数据Cache失效 处理函数访问页表导致嵌套的TLB失效,相关研究,TLB失效率 全相联,层次式两级TLB 页表结构 MPT、LPT、HPT、GPT、CPT Table Walking机制的开销 硬件、软件,最多访存次数,与Cache的关系 大虚地址空间支持 新型页表,支持多种页大小 稀疏空间使用的支持,请求页式管理与存储保护,请求页式管理(Demand Paging) 并不一次将代码和数据全部装如主存 通过缺页中断保证程序可以正常的运行 存储保护 页表中的权限位使得CPU和OS可以在页面一级管理权限 RWX访问控制:限制该页面可否做读、写、执行操作 U(user):限制该页面可否由用户态程序访问 辅助位 A(Access):该页是否曾被访问过 M(Modify):该页是否曾被改变过 (思考,辅助位应由谁设置,MMU or OS ?),虚拟存储与存储保护,进程(process) vs. 线程(thread) 多道程序(multiprogramming) 进程切换(process switch) 操作系统和硬件结构联合保证 多进程共享硬件资源 多进程互不影响 对体系结构的要求 至少两种运行模式:User,Kenel/Supervisor 提供用户进程只读的处理器状态 提供模式转换机制 提供限制存储访问的机制保护用户进程存储状态,Virtual Machine,Protection via Virtual machine The increasing importance of isolation and security

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论