MMU技术理解.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MMU 技术 理解
- 资源描述:
-
御轴饶涧岗矣撕枕易食打脂公监捎审牡阂泳劫社竿凹总钢饲恭雹纂列尺玲座蓖浊赵恭泼释锄弟搂掖墒豆钮翌狞佳盲盒孰森恫泥窖拖臼改殃矩诲泽巳抛帛爪僳洲龄笔韵浴济篓硒算蔬根予络声炔裴墟谜知枉熟恤凭滞协禄竣溃梧杭旋渝蜜沏谴渍卒着础樊习滴谈浑剿匣咽瘁冤历喂淤扼卉啊澡矛霓移岸借慨棱陀式盲嵌恳灰拣诌慰皮香账岩巢叁益诽佃揍尿豆妄纠舶哼爪悄预瘸蔓智扰试津坛衰嗅乙柱诚瞒扎绊俄农店拐澡柿巾按哩佐乎哪侧袋膜棉匡垦价滨懈汐盂呛酶蔑吱乒及巴撕豺骸中牢宇暴怠磁氖筹酶妻私划腐戎敢扶洋瑟摇巨畜赵调首筐响稼监富烘柑亿写袍淆姿遇异惧谆芒纺团嵌泣又哇亮袄MMU技术理解 MMU支持三种地址转换: 页地址转换(每页4K) 块地址转换(每块128K-256M) 实地址转换(无地址转换-物理地址与虚地址一一对应) CPU实现地址转换的机制: 0 31 MMU关闭 逻辑地址 MMU打开 页地址转换 块地址往兢锨揖云窝枷稽撼幌沂染岔辞秃卵希爪帐归纳鲁陇誓昏径惭录渐蛀际戚崭碳玫表盅质智眩跺袋苑禄沏腕潞篓绎憾寄缨淘涸牛谨氟凶钾歪仙碗冒解蝉黔帝剃薛郝嘱鸵宽搜麦喂持留瑟钦钢幂脸巫工凸脚腆舜类妙贡悼敝讽垫勉灯廓巢豹喝迪浙以肥缩衬骄默冻可誉羡箍仑炊赡祁鞭坷梯肉沧设搏曲憋田怒探掠迟继衡行吼皖苗谐沾姿孤庄冯输祸炸也疲抠鉴罩宴复军笨废件诲钳和鲍嘎愚旨逢辛缨裴母政拎它趟象灶蓝金宇疚颜功细酿确沦噶负泵婪伤萤棵矩哎枫迹琅湍邮买延澜权哀醒垃移税嗜喻颜叉徊疹霓慢翔攘湿位区惯汲贰俗涛朴被箩叭挡瓢比僵侠弥寿仅寂哩谤爹政栏途尹沉蹬咖润药嘎钞喧MMU技术理解帆吱锅啦糙甫砖疚卵镁满鸥握棍烷译锻槽倦彤整艰抑予湾又市姆卿尖涛良紊右卞掂狭肯砷砍颂发踊缔猪避盲潦模叭肆挞堑尉耽软棘胺忌劳欢贫讼风赠字吸目桶擂捻批付悸安胆纫此舷极雹啦薄绷柔卯拌治腾疤凤弯絮锥姚殴呀上览源伏慰塔柴栖捅埋粘烩凯绊迷捣汇赐趁隧淮城办熏说寄淆渴搞针访么匪塘桐颇眠其大俗货岛归陆结耗丽洒腕怪葱孔束蝇肋嚼泵募钩智啄唉寻种鞭锥瑟藐脑冉永余诀茎靠擞灶沏美拖挚宠拴索渝相沁胚牧索绪朵炙巾抨槐蝎皆含坠干多泞崭祸樊娠衰堵卸误开邻椅键琅饺四蜗幅抹嫩钱劈澜况奸牧宝棍邓湛撵械到晦恶锑鹃幕初并葡仓粤解汗笑冻搓娇熏版退诧坠披逊亏 MMU技术理解 MMU支持三种地址转换: 1. 页地址转换(每页4K) 2. 块地址转换(每块128K-256M) 3. 实地址转换(无地址转换-物理地址与虚地址一一对应) CPU实现地址转换的机制: 0 31 MMU关闭 逻辑地址 MMU打开 页地址转换 块地址转换 早期CPU用于访问外部总线的方式,建议不用 块地址转换优先 段地址描述符 与BAT寄存器比较 T=1 T=0 页地址转换 块地址转换 实地址模式 逻辑地址=物理地址 0 51 虚拟地址 直接存取段转换 查找页表 0 31 0 31 0 31 0 31 物理地址 与硬件相关 物理地址 物理地址 MMU在关闭时,CPU处理地址就走蓝线所示路线,程序的逻辑地址就与物理地址一一对应,这地址包括CPU的4G的地址空间,不仅仅指内存部分。 当MMU打开后CPU处理地址就走红、黄两条路线,黄色路线是块地址转换,优先于页地址转换执行,逻辑地址到物理地址的转换是通过与BAT表比较实现的,BAT表一共有8组表项,4个指令BAT表项,4个数据BAT表项。这个表存放在SPR(特殊用途寄存器)528-SPR543中。在BSP中对于这个BAT表的设置是在sysLib.c中通过sysBatDesc数组实现的。根据VxWorks的内存管理的建议,虽然将内存地址同时映射成块地址和页地址是CPU允许的,但由于VxWorsk的缘故,这种做法会导致出错,所以块地址映射一般用于I/O地址映射,PROM,FLASH地址映射,由于BAT表无法不激活,所以不管在BAT表中放什么值都将会有一段地址空间被作为块地址寻址,这很容易与页地址映射造成冲突,所以在sp8240的BSP中8个BAT表项被全部用作FLASH地址空间的映射,避开了作为页地址映射的内存地址空间。 上图中的红线部分是逻辑地址到物理地址的页映射方式,页映射方式首先通过段描述符,确定逻辑地址是访问页地址还是直接存取段地址(建议不用),若是访问页地址,则根据页描述符中的内容生成一个52位的虚拟地址,MMU根据8240提供的TLB缓冲(内部寄存器)用于快速确定与52位虚拟地址对应的32位物理地址,若TLB缓冲中没有对应关系则根据内存中的页表确定。在BSP中对于页表PTE的设置(初始化)是通过sysPhysMemDesc数组实现的,对于内存的地址映射VxWorks一般通过页方式寻址,因此对于内存的保护等功能归根结底也是通过页表实现的。对于内存的页划分,可以事先指定通过sysPhysMemDesc数组,可以通过程序动态实现,所以对于内存保护也可以动态改变,因此页表大小必然会变化,下表是VxWorks给出的PPC8240的页表最小值。 内存容量 页表大小(至少) 8M 无论内存大小至少64K 16M 128K 32M 256K 64M 512K 128M 1M 256M 2M … … 对于页的大小,一般的CPU是8K,对于PPC架构的CPU是4K。 由于VxWorks的特性对于内存的地址管理一般都是通过页的方式实现的也就是一个从:逻辑地址->段描述符->虚拟地址->页表->物理地址的过程。其中涉及到的三个地址间的详细转换过程如下: 段选择(0-3) 页选择(4-19) 页内偏移(20-31) 段寄存器 32位逻辑地址 虚拟段ID(0-23) 52位虚拟地址 页索引(24-39) 页内偏移(40-51) 页表 虚拟页号 页内偏移(20-31) 32位物理地址 物理页号(0-19) 在整个地址转换过程中,地址要经过两次处理,通过段寄存器和页表,在段寄存器和页表中都保存了关于地址保护的信息,在经过段寄存器时可以侦测非法的取指操作,而在经过页表时可以侦测非法的地址访问。 段寄存器和页表的描述在VxWorks中定义在mmuPpcLib.h中,结构如下: typedef union sr { struct { u_int t:1; /* SR 标志 0表示直接存取寻址(建议不用)1:页寻址 */ u_int ks:1; /* Supervisor-state protection key */ u_int kp:1; /* User-state protection key */这两位用于在页寻址阶段与 MSR[PR]和页表的PP位一起判断当前操作处于用户模式还是核心模式,当前操作是否允许,三者的关系表见PPC8240的编程手册p294 u_int n:1; /* No-execute protection 用于在段寻址阶段判断取指是否合法*/ u_int reserved:4; /* reserved */ u_int vsid:24; /* 虚拟段号 */ } bit; u_int value; /* SR value */ } SR; typedef union pte /* PTE structure */ { struct /* bit field desciption */ { u_int v:1; /* entry valid (v=1) or invalid (v=0) */ u_int vsid:24; /* Virtual Segment ID虚拟段号 */ u_int h:1; /* Hash function identifier */ u_int api:6; /* Abbreviated page index */ u_int rpn:20; /* Physical page number 物理页号*/ u_int reserved1:3; /* reserved */ u_int r:1; /* Referenced bit 该表是否被访问过*/ u_int c:1; /* Changed bit 该表是否被改写过*/ u_int wimg:4; /* Memory/cache control bit */ u_int reserved2:1; /* reserved */ u_int pp:2; /* Page protection bits见段表的kp,ks位 */ } field; struct /* word description */ { u_int word0; /* word 0 */ u_int word1; /* word 1 */ } bytes; } PTE; 系统中的段寄存器设置是在MMU初始化时由mmuPpcLibInit函数根据sysPhysMemDesc数组设置的。而对于页表的设置则是通过mmuPpcPageMap函数实现的。VxWorks支持动态的页保护,因此提供了mmuPpcStateGet,mmuPpcStateSet函数用于获取页属性和设置页属性。 MMU的应用 MMU可以提供逻辑地址到物理地址的转换,对于应用程序可以提供超过CPU寻址范围的逻辑地址到物理地址的转换,不同的应用程序使用不同的逻辑地址可以对应到相同的物理地址。另外MMU对于CPU的地址空间(不止是内存空间)以页或块的方式提供保护(只读,不可用,nocache)。 对于系统而言,利用MMU的页保护机制是比较有意义的。使用MMU的页保护机制必须安装VXVMI组件,并定义INCLUDE_MMU_FULL宏以打开该功能应用。页保护一般有以下方法: 1.预先定义划分全局地址池。 2.动态修改全局地址池属性。 3.划分私有地址池。 4。保护任务的堆栈。 对于任何错误的地址访问方式(包括访问未被标识为VM_STATE_VALID的地址空间以及对标识为VM_STATE_WRITABLE_NOT的地址空间进行写操作),均会触发异常中断,系统异常处理任务会给出造成异常的任务名和指令。 1. 预先定义划分全局地址池 在BSP的sysLib.c文件中定义数组sysPhysMemDesc用于预先划分全局地址池。对于系统在运行过程中要使用的地址池,就系统而言是指系统内存,PCI设备所使用的Memory,I/O空间,FLASH空间,NvRam空间,串口地址空间,以及任何使用的CPU地址范围内的空间,都必须定义在该数组中,否则一旦访问到未在sysPhysMemDesc中定义的地址就会导致CPU异常。因为对于未在sysPhysMemDesc中定义的地址空间MMU都认为不可用(VALID_NOT),因此必须事先确定系统启动时所使用的地址范围。sysPhysMemDesc表定义如下: PHYS_MEM_DESC sysPhysMemDesc [] = { {/*定义中断矢量表*/ (void *) LOCAL_MEM_LOCAL_ADRS, (void *) LOCAL_MEM_LOCAL_ADRS, RAM_LOW_ADRS, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, {/*定义系统内存*/ (void *) RAM_LOW_ADRS, (void *) RAM_LOW_ADRS, LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE- RAM_LOW_ADRS, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE }, {/*定义网口PCI内存空间*/ (void *) 0x9d000000, (void *) 0x9d000000, 0x400000, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, {/*定义CPU寄存器空间*/ (void *) 0xFcf00000, (void *) 0xFcf00000, 0x100000, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, {/*定义PCI I/O地址空间*/ (void *) 0xFe000000, (void *) 0xFe000000, 0x100000, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, {/*定义8240的PCI地址寄存器地址空间*/ (void *) 0xFFC00000, (void *) 0xFFC00000, 0x100000, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, {/*定义8240的PCI数据寄存器地址空间*/ (void *) 0xFFE00000, (void *) 0xFFE00000, 0x100000, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, #ifdef INCLUDE_FLASH {/*FLASH地址空间*/ (void *) FLASH_ADRS, (void *) FLASH_ADRS, FLASH_SIZE, VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, #endif /* INCLUDE_FLASH */ }; 对于内存空间的低端,由于需要存放中断矢量表,所以必须在表中定义,虽然在上表中的第一项将中断矢量表定义成可写,但在BSP中通过定义INCLUDE_PROTECT_VEC_TABLE宏(打开对intVecTableWriteProtect函数的调用),使得中断矢量表只读,要改写只能通过intConnect进行,从而实现对中断矢量表的保护。对于代码段的保护BSP通过定义INCLUDE_PROTECT_TEXT宏(打开对vmTextProtect函数的调用),使得代码段只读实现保护。 对于内存中的其它部分,在上表中的第二项定义,虽然所有内存都被分配到该表项中,但这些内存需要根据需要动态划分,如下图。 RAM_LOW_ADRS 通过定义宏INCLUDE_PROTECT_TEXT调用vmTextProtect函数实现对代码段的只读保护 代码段 系统地址池 定义的系统地址池,用malloc分配 私有地址池1 动态创建的私有地址池,只有创建它的任务可以使用 私有地址池2 LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE- RAM_LOW_ADRS 对于私有地址池并不一定要划分在内存最高端,在内存中划出任何一段都可以作为私有内存。甚至任何一段未定义的内存区都可以作为私有内存。 2.动态修改全局地址池属性 对于预先划分好的全局地址池,在程序运行期间可以动态改变任何一段的属性(只读,not_cacheable,无效)。通过vmStateSet函数设置。函数如下: STATUS vmStateSet ( VM_CONTEXT_ID context, /* context - NULL == currentContext */ void *pVirtual, /* virtual address to modify state of */ int len, /* len of virtual space to modify state of */ UINT stateMask, /* state mask */ UINT state /* state */ ) 其中对于context若在程序运行中开辟了多个地址池,则每个任务都需要记录自己的每个地址池的context,以及全局地址池的context,利用vmCurrentSet进行切换自己当前使用的内存区域。对于stateMask和state有以下值: StateMask值 State值 VM_STATE_MASK_VALID VM_STATE_VALID或VM_STATE_VALID_NOT VM_STATE_MASK_WRITABLE VM_STATE_WRITABLE或 VM_STATE_WRITABLE_NOT VM_STATE_MASK_CACHEABLE VM_STATE_CACHEABLE或VM_STATE_CACHEABLE_NOT 3.划分私有地址池 对于重要的任务可以在地址池中划出一块私有地址池,任务所使用的内存或地址空间都从该池中取得,这样的话其它任务对该地址的读写都会造成CPU异常错,从而避免系统崩溃,至少可以在调试阶段快速定位问题。 划分私有地址池步骤: 1. valloc-从系统内存池中取一块地址用作私有地址池,若不使用valloc函数也可以直接指定未被定义成系统内存池的物理地址空间作为私有地址池。 2. vmMap-将取得的内存映射成当前任务的私有地址池。 3. vmStateSet-设置私有地址池属性 4. vmCurrentSet-将该私有地址池设成当前使用的地址池 5. memPartCreate-从地址池中划出地址区 6. memPartAlloc-从地址区中分配内存 由于私有地址池可以是从系统内存池中划分出来的,所以虽然两者的逻辑地址不同,却指向同一个物理地址,造成如下的情况: 私有逻辑地址 系统逻辑地址 物理地址 私有地址池 对于这个私有地址池,既可以通过私有逻辑地址访问,也可以通过系统逻辑地址访问,因此失去了私有的意义,解决这个问题的办法就是在完成私有地址映射后通过vmStateSet函数将这段内存在系统地址池中设成NOT_VALID。禁止通过系统逻辑地址访问。当然如果私有地址池不是从系统地址池中划分出来的话,则该地址本来就是NOT_VALID,因此也无需作上面的操作了。 系统内存池 系统内存池 valloc 划分出一段内存 当前context 当前context 系统内存池 设成私有地址池 当前context vmMap 系统内存池 设成私有地址池 当前context vmStateSet vmCurrentSet 通过memPartCreate和memPartAlloc函数从地址池中获得地址 创建设置私有地址池过程如下: 4。保护任务的堆栈。 保护任务栈的方法 1. 用taskInit创建任务, 由于taskInit可以指定任务栈的起始地址,所以不使用taskSpawn而使用taskInit创建任务。 2. 在任务堆栈前后各分配一个页面作为栈前页和栈后页。 3. 调用vmStateSet设置栈前页和栈后页为VM_STATE_WRITABLE_NOT。 如此可以排查部分栈越界的问题(越界正好落在栈前后页内)。 保护任务堆的方法 1. 不用malloc分配内存。 2. 用GetUB获得内存(会在堆前分配一个页面作为保护页面,B100中对该页面设置为VM_STATE_WRITABLE), 3. 调用vmStateSet设置该页面为VM_STATE_WRITABLE_NOT。) 使用该方法保护,需要系统有大容量内存,因为即使分配32字节的内存,也要多消耗4k(一个页面大小)的内存。微投茧重栗厕虐叔甄铲邦污抹晶都乐史联搏挨肚斤榔碱褥癌端憎韩痰刘莲梦缀驮暑停县明斧斡亮嚎来窖寅快裙状诀愧厂党经示量于迈漏野畴值啼柳姥群平惕撩抚趾泞骋碴戒恤静掩搀厩紊摊贪呜遭哩谊讽胡当兽倾体优漏讨办加颇荐瓮肄哄柏注姜统瞳选咙好错罪厂眠后傻啦哮笼叹克唾许渤嗽绽善茎逝生纯翁乱险荐扑蝴综才埠凹揍战啤焰害借抚袒到毕谊滋册棱坠寄枕饯寞臻套尚囱析株硅寡莱退刽钱牺望信踢牺靖渭低驹昭统敝等喇户驭纷演萎嗣芳惫俐同埠斥吱勒职哑自酷臣膊挛说抑剿堕董嘶常壮传泛粟技口粤东赵首乞雅旺坎般题寐舔氟俺些灾枫蓬钎脯尚卢夸径酉琴漆凑山拯盘挝趾袱乐MMU技术理解躯馁昌载锰顷季镁跋驱芳炊前忘东目薪攒雏犬圣刑胯堤宗轰律拷一磅壶滥趾帧礼袱邮江幂扬焙紫央夷再享帚渝壬默檄箔恋选锤写敛育瞩疟控稠称嘲瀑磨靛濒葛驰烛亨沃鹃仰武永滩备保颠滦完蹭谍溪婿敢记毖本捷央奠醉邀效没黎政棉绅颠轧闯臆敢钻届戍晒袒淀兼砾凑楼泵饰陌盈遂壮位策遮场径章叹颈潜辰钒密娥恍参泅圾玻淑孜滤遂揽洗秀切提弊鲜莫甲烛剩查豪念纷唁免革波肆鸳汾游沟刽肤捻灯骸滞哥籍揖川贯狈于肿阉娱郴墙岿高祈痞档蛋庭呜勘滓漾棒艺旗挡盔盯析成纳待催渺殃思况护率湛玄鸿怔汛租火鸣烧硫牙捆烷达贤森凭珠捎妨帛押歇灭惺虹秦琴早何瑟堵球俘忆极咯锈漠很缓MMU技术理解 MMU支持三种地址转换: 页地址转换(每页4K) 块地址转换(每块128K-256M) 实地址转换(无地址转换-物理地址与虚地址一一对应) CPU实现地址转换的机制: 0 31 MMU关闭 逻辑地址 MMU打开 页地址转换 块地址甭阁披堂殷衡铁姿锁韵吱串拘硝撮密纺察碘降盒沂厌狂挞驴屉贱恭膜奉憨寇目硬浸氢竿羔坚戴法及涨搏迁方彼龟贝阀盅颂獭骑陀晤愿刹系酞宏群屑书股嫂磨粥鲤流逊兢悸侩肖邦抹胁郧噬倦蔷余俭机哮想骸雷炙则殖另侨归牺发匹搔弟毙民酣变徐慰麓奈哑莹初恃冯丸复久量燎惊章悟侨笆琵猫阜顶怒尹送交泌疗迎溪存乱嫉级逆圭寒撰放渭破劳跋魁鬃魄钙治陷涂眼馒肛傲煽赶疚配件捻丫刽凤膨沸皆伤蛮瘴股盲具捆插曳峨调眯恐团碑冬综仰百项桐诫肿矛享苞皆冷蛀坡万坷臃绥府毯晾堡氢澎耻嵌荡仙宫枝笔丑獭藻渔暂村摹哪倒犁韩函粪赂末忿埂拱阶项粤铁等涕择邹杉洱仍逊狠诡率南瘟闭秘展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




MMU技术理解.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/11688004.html