嵌入式系统及应用讲课讲稿.ppt

上传人:豆**** 文档编号:59808244 上传时间:2022-11-13 格式:PPT 页数:54 大小:684KB
返回 下载 相关 举报
嵌入式系统及应用讲课讲稿.ppt_第1页
第1页 / 共54页
嵌入式系统及应用讲课讲稿.ppt_第2页
第2页 / 共54页
点击查看更多>>
资源描述

《嵌入式系统及应用讲课讲稿.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统及应用讲课讲稿.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心嵌入式系统及应用电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心主要内容主要内容概述概述内存管理机制内存管理机制内存保护内存保护电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心概述概述不同实时内核所采用的内存管理方式不不同实时内核所采用的内存管理方式不同,有的简单,有的复杂。同,有的简单,有的复杂。实时内核所采用的内存管理方式与应用实时内核所采用的内存管理方式与应用领域和硬件环境密切相关。领域和硬件环境密切相关。在强实时应用领域,内存管理方法就比较简在强实时应用领域,内存管理方法就比较简单,甚至不提供内存管理功

2、能。单,甚至不提供内存管理功能。一些实时性要求不高,可靠性要求比较高,一些实时性要求不高,可靠性要求比较高,且系统比较复杂的应用在内存管理上就相对且系统比较复杂的应用在内存管理上就相对复杂些,可能需要实现对操作系统或是任务复杂些,可能需要实现对操作系统或是任务的保护。的保护。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心嵌嵌入入式式实实时时操操作作系系统统在在内内存存管管理理方方面面需要考虑如下因素:需要考虑如下因素:不不使使用用内内存存管管理理:最最快快速速和和最最确确定定的的内内存存管管理理方方式式,适适用用于于那那些些小小型型的的嵌嵌入入式式系系统统,系系统统中中的的任任务

3、务比比较较少少,且且数数量量固固定。定。通通常常的的操操作作系系统统都都至至少少具具有有基基本本的的内内存存管管理理方方法法:提提供供内内存存分分配配与与释释放放的的系系统统调用。调用。概述概述快速而确定的内存管理快速而确定的内存管理电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心虚拟存储技术:虚拟存储技术:为用户提供一种不受物理存储器结构和容量限制的为用户提供一种不受物理存储器结构和容量限制的存储管理技术,是桌面存储管理技术,是桌面/服务器操作系统为在所有任服务器操作系统为在所有任务中使用有限物理内存的通常方法,每个任务从内务中使用有限物理内存的通常方法,每个任务从内存中获得一定

4、数量的页面,并且,当前不访问的页存中获得一定数量的页面,并且,当前不访问的页面将被置换出去,为需要页面的其他任务腾出空间。面将被置换出去,为需要页面的其他任务腾出空间。置换是一种置换是一种具有不确定性具有不确定性的操作:当任务需要使的操作:当任务需要使用当前被置换出去的页面中的代码和数据时,将不用当前被置换出去的页面中的代码和数据时,将不得不从磁盘中获取页面,而在内存中另外的页面又得不从磁盘中获取页面,而在内存中另外的页面又可能不得不需要先被置换出去。可能不得不需要先被置换出去。在嵌入式实时操作系统中一般不使用虚拟存储在嵌入式实时操作系统中一般不使用虚拟存储技术,以技术,以避免页面置换所带来的

5、开销避免页面置换所带来的开销。概述概述不使用虚拟存储技术不使用虚拟存储技术电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心平面内存模式:平面内存模式:应应用用程程序序和和系系统统程程序序能能够够对对整整个个内内存存空空间间进进行访问。行访问。平平面面内内存存模模式式比比较较简简单单,易易于于管管理理,性性能能也也比较高。比较高。适适合合于于程程序序简简单单、代代码码量量小小和和实实时时性性要要求求比比较高的领域。较高的领域。内存保护:内存保护:应用比较复杂、程序量比较大的情况;应用比较复杂、程序量比较大的情况;防防止止应应用用程程序序破破坏坏操操作作系系统统或或是是其其他他应应用用

6、程程序的代码和数据。序的代码和数据。概述概述 内存保护内存保护电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护包含两个方面的内容:内存保护包含两个方面的内容:防止地址越界防止地址越界:每个应用程序都有自己独立的地址:每个应用程序都有自己独立的地址空间,当应用程序要访问某个内存单元时,由硬件空间,当应用程序要访问某个内存单元时,由硬件检查该地址是否在限定的地址空间之内,只有在限检查该地址是否在限定的地址空间之内,只有在限定地址空间之内的内存单元访问才是合法的,否则定地址空间之内的内存单元访问才是合法的,否则需要进行地址越界处理;需要进行地址越界处理;防止操作越权防止操作越权:

7、对于允许多个应用程序共享的存储:对于允许多个应用程序共享的存储区域,每个应用程序都有自己的访问权限,如果一区域,每个应用程序都有自己的访问权限,如果一个应用程序对共享区域的访问违反了权限规定,则个应用程序对共享区域的访问违反了权限规定,则进行操作越权处理。进行操作越权处理。概述概述电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存管理机制内存管理机制 静态分配静态分配系系统统在在启启动动前前,所所有有的的任任务务都都获获得得了了所所需需要要的的所所有内存,运行过程中将不会有新的内存请求。有内存,运行过程中将不会有新的内存请求。在在强强实实时时系系统统中中,减减少少内内存存分分配配

8、在在时时间间上上可可能能带带来来的的不确定性。不确定性。不需要操作系统进行专门的内存管理操作。不需要操作系统进行专门的内存管理操作。系系统统使使用用内内存存的的效效率率比比较较低低下下,只只适适合合于于那那些些强强实实时时,且应用比较简单,任务数量可以静态确定的系统。且应用比较简单,任务数量可以静态确定的系统。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存管理机制内存管理机制动态分配动态分配 堆堆(heap):应应用用通通过过分分配配(malloc)与与释放(释放(free)操作来使用内存。)操作来使用内存。堆会带来碎片堆会带来碎片:内内存存被被逐逐渐渐划划分分为为位位于于已

9、已被被使使用用区区域域之之间间的的越越来来越越小小的空闲区域。的空闲区域。垃圾回收垃圾回收:对对内内存存堆堆进进行行重重新新排排列列,把把碎碎片片组组织织成成为为大大的的连连续续可可用用内内存存空空间间。但但垃垃圾圾回回收收的的时时间间长长短短不不确确定定:不不适适合合于处理实时应用。于处理实时应用。在在实实时时系系统统中中,避避免免内内存存碎碎片片的的出出现现,而而不不是是在在出现内存碎片时进行回收出现内存碎片时进行回收。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存管理机制内存管理机制常用管理方式:常用管理方式:固定大小存储区固定大小存储区:在指定边界的一块地址连续的内存

10、空间中,在指定边界的一块地址连续的内存空间中,实现固定大小内存块的分配。实现固定大小内存块的分配。可变大小存储区可变大小存储区:在指定边界的一块地址连续的内存空间中,在指定边界的一块地址连续的内存空间中,实现可变大小内存块的分配。实现可变大小内存块的分配。应用根据需要从固定大小存储区或者可变大应用根据需要从固定大小存储区或者可变大小存储区中获得一块内存空间,用完后将该小存储区中获得一块内存空间,用完后将该内存空间释放回相应的存储区。内存空间释放回相应的存储区。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心固定大小存储区管理固定大小存储区管理可供使用的一段连续的内存空间被称为是一个

11、分区;可供使用的一段连续的内存空间被称为是一个分区;分分区区由由大大小小固固定定的的内内存存块块构构成成,且且分分区区的的大大小小是是内内存存块块大大小的整数倍数。小的整数倍数。内存块内存块1内存块内存块2内存块内存块3内存块内存块4128字节字节512字节字节一个大小为一个大小为512512字节的分区,内存块为字节的分区,内存块为128128个字节的分区个字节的分区 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心typedef struct PartitionID ID;/*分区的分区的ID*/PartitionName Name;/*分区的名字分区的名字*/void *sta

12、rting_address;/*分区的起始地址分区的起始地址*/int length;/*分区的长度分区的长度*/intbuffer_size;/*内存块的大小内存块的大小*/PartitionAttribute attribute;/*属性属性*/int number_of_used_blocks;/*剩剩余余内内存存块块数数*/MemoryChain memory;/*内存块链内存块链*/Partition;分区的数据结构分区的数据结构 IDID表示分区的标识;表示分区的标识;starting_addressstarting_address表示分区的起始地址;表示分区的起始地址;lengt

13、hlength表示分区的存储单元的数量;表示分区的存储单元的数量;buffer_sizebuffer_size表示分区中每个表示分区中每个内存块的大小;内存块的大小;attributeattribute表示分区的属性;表示分区的属性;number_of_used_blocksnumber_of_used_blocks表示分区中已表示分区中已使用内存块的数量;使用内存块的数量;memorymemory为一个指针,指向分区中由空闲内存块组成的双向空闲内存为一个指针,指向分区中由空闲内存块组成的双向空闲内存块链表的头结点。块链表的头结点。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心分

14、区分区1分区分区2nextpreviousnextpreviousnextprevious空闲内存块链表空闲内存块链表电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心固定大小存储区管理固定大小存储区管理分区的操作分区的操作 创建分区删除分区从分区得到内存块把内存块释放到分区获取分区ID获取当前创建的分区的数量获取当前所有分区的ID获取分区信息 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心固定大小存储区管理固定大小存储区管理如果内存块处于如果内存块处于空闲状态空闲状态,将使用内存块中的几,将使用内存块中的几个字节作为控制结构,用来存放用于双向链接的个字节作为控制结构,

15、用来存放用于双向链接的前向指针和后向指针。前向指针和后向指针。在在使用内存块使用内存块时,内存块中原有的控制信息不再时,内存块中原有的控制信息不再有效,其中的所有存储空间都可以被使用。有效,其中的所有存储空间都可以被使用。固定大小存储区管理的固定大小存储区管理的系统开销系统开销对用户的影响为对用户的影响为零。零。由于内存块的大小固定,不存在由于内存块的大小固定,不存在碎片碎片的问题。的问题。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心可变大小存储区管理可变大小存储区管理可变大小存储区管理为基于堆的管理方式。可变大小存储区管理为基于堆的管理方式。堆为一段连续的、大小可配置的内存空

16、间,用来提供堆为一段连续的、大小可配置的内存空间,用来提供可变内存块可变内存块的分配。的分配。可变内存块称为可变内存块称为段段,最小分配单位称为,最小分配单位称为页页,即段的大,即段的大小是页的大小的整数倍。小是页的大小的整数倍。如果申请段的大小不是页的倍数,实时内核将会对段如果申请段的大小不是页的倍数,实时内核将会对段的大小进行调整,调整为页的倍数。的大小进行调整,调整为页的倍数。例如,从页大小为例如,从页大小为256个字节的堆中分配一个大小个字节的堆中分配一个大小为为350字节的段,实时内核实际分配的段大小为字节的段,实时内核实际分配的段大小为512个字节。个字节。电子科技大学嵌入式软件工

17、程中心电子科技大学嵌入式软件工程中心typedef struct HeapIDID;/*堆的堆的ID*/HeadNamename;/*堆的名字堆的名字*/TaskQueuewaitQueue;/*等待队列等待队列*/void*starting_address;/*内存空间起始地址内存空间起始地址*/intlength;/*内存空间长度内存空间长度/字节字节*/intpage_size;/*页长度(字节)页长度(字节)*/intmaximum_segment_size;/*最大可用段大小最大可用段大小*/RegionAttributeattribute;/*堆的属性堆的属性*/intnumber

18、_of_used_blocks;/*分配的块数分配的块数*/HeapMemoryChain memory;/*堆头控制结构堆头控制结构*/Heap;堆的数据结构堆的数据结构 waitQueuewaitQueue用来表示任务等待队列,如果任务从堆中申请段不能得到满足,将用来表示任务等待队列,如果任务从堆中申请段不能得到满足,将被阻塞在堆的等待队列上;被阻塞在堆的等待队列上;starting_addressstarting_address用来表示堆在内存中的起始地址;用来表示堆在内存中的起始地址;lengthlength表示堆的大小;表示堆的大小;page_sizepage_size为页的大小;为

19、页的大小;maximum_segment_sizemaximum_segment_size表示堆中当前最大可用段的大表示堆中当前最大可用段的大小;小;attributeattribute表示堆的属性;表示堆的属性;number_of_used_blocksnumber_of_used_blocks表示已分配使用的内存块表示已分配使用的内存块的数量;的数量;memorymemory表示空闲段链表。表示空闲段链表。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心可变大小存储区管理可变大小存储区管理可变大小存储区中的空闲段通过双向链表链接起可变大小存储区中的空闲段通过双向链表链接起来,形

20、成一个空闲段链。来,形成一个空闲段链。在在创建堆创建堆时,只有一个空闲段,其大小为整个存储区时,只有一个空闲段,其大小为整个存储区的大小减去控制结构的内存开销。的大小减去控制结构的内存开销。从存储区中从存储区中分配段分配段时,可依据时,可依据首次适应首次适应算法,查看空算法,查看空闲链中是否存在合适的段。闲链中是否存在合适的段。当把段当把段释放释放回存储区时,该段将被挂在空闲段链的链回存储区时,该段将被挂在空闲段链的链尾。尾。如果空闲链中有与该段相邻的段,则将其如果空闲链中有与该段相邻的段,则将其合并合并成一成一个更大的空闲段。个更大的空闲段。由于对申请的内存的大小作了一些限制,避免了内由于对

21、申请的内存的大小作了一些限制,避免了内存碎片的产生。存碎片的产生。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心堆堆1 10 0 其它控制标志其它控制标志0 0 其它控制标志其它控制标志1 1 其它控制标志其它控制标志正被使用的段正被使用的段空闲段空闲段空闲段空闲段堆堆2 2堆的空闲段链堆的空闲段链在段的控制块中设置了一个标志位,表示段被使用的情况:在段的控制块中设置了一个标志位,表示段被使用的情况:1 1表表示该段正被使用,示该段正被使用,0 0表示该段空闲。表示该段空闲。在固定大小存储区管理方式中,只有在空闲状态下,内存块才拥在固定大小存储区管理方式中,只有在空闲状态下,内存

22、块才拥有控制信息。在可变大小存储区管理方式中,无论段空闲或是正有控制信息。在可变大小存储区管理方式中,无论段空闲或是正在被使用,段的控制结构都始终存在。在被使用,段的控制结构都始终存在。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心可变大小存储区管理可变大小存储区管理堆的操作堆的操作 创建堆从堆中得到内存块释放内存块到堆中扩展堆获得已分配内存块的实际可用空间大小删除堆获得堆的ID获得在堆上等待的任务数量获得等待任务的ID列表获得堆的数量获得堆列表获得堆信息 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心Memory management in uC/OS-IIfix

23、ed-sized memory blocks from a partitionmemory partitionMultiple memory partitions电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心/*MEMORY CONTROL BLOCK */typedef struct /*Pointer to beginning of memory partition*/void *OSMemAddr;/*Pointer to list of free memory blocks */void *OSMemFreeList;/*Size(in bytes)of each blo

24、ck of memory*/INT32U OSMemBlkSize;/*Total number of blocks in this partition*/INT32U OSMemNBlks;/*Number of memory blocks remaining in this partition*/INT32U OSMemNFree;OS_MEM;Memory control block data structure电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心List of free memory control blocks created by OS_MemInitEac

25、h memory control block can be used to manage a partition 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心/*Max.number of memory partitions.*/#define OS_MAX_MEM_PART 32 /*Storage for memory partition manager */OS_MEM OSMemTblOS_MAX_MEM_PART;void OS_MemInit(void)OS_MEM *pmem;INT16U i;pmem=(OS_MEM*)&OSMemTbl0;/*Point to

26、 memory control block(MCB)*/for(i=0;i OSMemFreeList=(void*)&OSMemTbli+1;/*Store start address of memory partition */pmem-OSMemAddr =(void*)0;pmem-OSMemNFree =0;/*No free blocks */pmem-OSMemNBlks =0;/*No blocks */pmem-OSMemBlkSize =0;/*Zero size */pmem+;pmem-OSMemFreeList=(void*)0;/*Initialize last n

27、ode */pmem-OSMemAddr =(void*)0;/*Store start address of memory partition*/pmem-OSMemNFree =0;/*No free blocks */pmem-OSMemNBlks =0;/*No blocks */pmem-OSMemBlkSize =0;/*Zero size */*Point to beginning of free list */OSMemFreeList =(OS_MEM*)&OSMemTbl0;OS_MemInit电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心OS_MEM *OS

28、MemCreate(void*addr,INT32U nblks,INT32U blksize,INT8U*err)OS_MEM *pmem;INT8U *pblk;void *plink;INT32U i;OS_ENTER_CRITICAL();pmem=OSMemFreeList;/*Get next free memory partition */if(OSMemFreeList!=(OS_MEM*)0)/*See if pool of free partitions was empty*/OSMemFreeList=(OS_MEM*)OSMemFreeList-OSMemFreeLis

29、t;OS_EXIT_CRITICAL();if(pmem=(OS_MEM*)0)/*See if we have a memory partition */*err=OS_MEM_INVALID_PART;return(OS_MEM*)0);plink=(void*)addr;/*Create linked list of free memory blocks */pblk =(INT8U*)addr+blksize;for(i=0;i OSMemAddr =addr;/*Store start address of memory partition */pmem-OSMemFreeList=

30、addr;/*Initialize pointer to pool of free blocks*/pmem-OSMemNFree =nblks;/*Store number of free blocks in MCB */pmem-OSMemNBlks =nblks;pmem-OSMemBlkSize =blksize;/*Store block size of each memory blocks*/*err =OS_NO_ERR;return(pmem);OSMemCreate电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心Partition created by OSMem

31、Create0OSMemAddr =addrOSMemFreeList=addrOSMemBlkSize=blksizeOSMemNBlks =nblksOSMemNFree =nblksContiguous memorypmemOSMemCreate()arguments电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心void *OSMemGet(OS_MEM*pmem,INT8U*err)void *pblk;OS_ENTER_CRITICAL();if(pmem-OSMemNFree 0)/*See if there are any free memory blocks*/p

32、blk=pmem-OSMemFreeList;/*Yes,point to next free memory block*/pmem-OSMemFreeList=*(void*)pblk;/*Adjust pointer to new free list*/pmem-OSMemNFree-;/*One less memory block in this partition*/OS_EXIT_CRITICAL();*err=OS_NO_ERR;/*No error */return(pblk);/*Return memory block to caller */OS_EXIT_CRITICAL(

33、);*err=OS_MEM_NO_FREE_BLKS;/*No,Notify caller of empty memory partition*/return(void*)0);/*Return NULL pointer to caller */OSMemGet电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心Partition after OSMemGetpblk电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心INT8U OSMemPut(OS_MEM *pmem,void*pblk)OS_ENTER_CRITICAL();if(pmem-OSMemNFree=pmem

34、-OSMemNBlks)/*Make sure all blocks not already returned */OS_EXIT_CRITICAL();return(OS_MEM_FULL);/*Insert released block into free block list */*(void*)pblk =pmem-OSMemFreeList;pmem-OSMemFreeList=pblk;pmem-OSMemNFree+;/*One more memory block in this partition */OS_EXIT_CRITICAL();return(OS_NO_ERR);/

35、*Notify caller that memory block was released*/OSMemPut电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心Partition after OSMemPutpblk电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护 内存保护可通过硬件提供的内存保护可通过硬件提供的MMUMMU(memory memory management unitmanagement unit)来实现。)来实现。目前,大多数处理器都集成了目前,大多数处理器都集成了MMUMMU:大幅度降低那些通过在处理器外部添加MMU模块的处理方式所存在

36、的内存访问延迟。MMU现在大都被设计作为处理器内部指令执行流水线的一部分,使得使用MMU不会降低系统性能,相反,如果系统软件不使用MMU,还会导致处理器的性能降低。在某些情况下,不使能MMU,跳过处理器的相应流水线,可能导致处理器的性能降低80%左右。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护早期的嵌入式操作系统大都没有采用早期的嵌入式操作系统大都没有采用MMUMMU:一方面是出于对硬件成本硬件成本的考虑;另一方面是出于实时性实时性的考虑。嵌入式系统发展到现在,硬件成本越来越低,嵌入式系统发展到现在,硬件成本越来越低,MMUMMU所带来的成本因素基本上可以不用

37、考虑所带来的成本因素基本上可以不用考虑原来的嵌入式原来的嵌入式CPUCPU的速度较慢,采用的速度较慢,采用MMUMMU通常会通常会造成对时间性能的不满足,而现在造成对时间性能的不满足,而现在CPUCPU的速度的速度也越来越快,并且采用新技术后,已经将也越来越快,并且采用新技术后,已经将MMUMMU所带来的所带来的时间代价时间代价降低到比较低的程度降低到比较低的程度嵌入式嵌入式CPUCPU具有具有MMUMMU的功能已经是一种必要的趋的功能已经是一种必要的趋势。势。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护由于采用由于采用MMUMMU后对应用的运行模式甚至开发模后

38、对应用的运行模式甚至开发模式都会有一些影响,大量嵌入式操作系统都没式都会有一些影响,大量嵌入式操作系统都没有使用有使用MMUMMU。对于对于安全性、可靠性安全性、可靠性要求高的应用来讲如果不要求高的应用来讲如果不采用采用MMUMMU,则几乎不可能达到应用的要求。,则几乎不可能达到应用的要求。如果没有如果没有MMUMMU的功能,将无法防止程序的的功能,将无法防止程序的无意破坏无意破坏,无法截获各种非法的无法截获各种非法的访问异常访问异常,当然更不可能防止,当然更不可能防止应用程序的应用程序的蓄意破坏蓄意破坏了。了。采用采用MMUMMU后,便于发现更多的潜在问题,并且也便后,便于发现更多的潜在问题

39、,并且也便于问题的定位。于问题的定位。未采用未采用MMUMMU时,内存模式一般都是平面模式,应用可以任时,内存模式一般都是平面模式,应用可以任意访问任何内存区域、任何硬件设备,程序中出现非法访意访问任何内存区域、任何硬件设备,程序中出现非法访问时,开发人员是无从知晓的,也非常难于定位。问时,开发人员是无从知晓的,也非常难于定位。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护MMUMMU通常具有如下功能:通常具有如下功能:内存映射内存映射;检查逻辑地址是否在限定的地址范围限定的地址范围内,防止页面地址越界;检查对内存页面的访问是否违背特权信息特权信息,防止越权操作内

40、存页面;在必要的时候(页面地址越界或是页面操作越权)产生异常异常。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心应用应用程序程序逻辑地址逻辑地址MMUMMU物理内存物理内存物理地址物理地址内存映射把应用程序使用的地址集合(逻辑地址)翻内存映射把应用程序使用的地址集合(逻辑地址)翻译为实际的物理内存地址(物理地址)译为实际的物理内存地址(物理地址)电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护大多数处理器的典型页面大小为大多数处理器的典型页面大小为4K4K字节,字节,有些处理器也可能使用大于有些处理器也可能使用大于4K4K字节的页面,字节的页面,但页面

41、大小总是但页面大小总是2 2的幂,以对发生在的幂,以对发生在MMUMMU中中的地址映射行为流水线化。的地址映射行为流水线化。当页放置到物理内存时,页面将放置到当页放置到物理内存时,页面将放置到页页框架框架(page framepage frame)中。)中。页框架是物理内存的一部分,具有与页面同样的大小,且开始地址为页面大小的整数倍。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护MMU包含着能够把逻辑地址映射为物理地址的表,称为页表页表。操作系统操作系统能够在需要的时候对这种映射关系进行改变:应用程序对内存的需求发生变化或是添加或删除应用程序的时候。在应用程序中的

42、任务发生上下文切换时。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心页号页号逻辑地址逻辑地址偏移量偏移量页框架页框架物理地址物理地址偏移量偏移量页表基址寄存器页表基址寄存器特权和其特权和其他信息他信息页框架页框架页表页表基于页表的内存映射过程基于页表的内存映射过程 例如,一个系统具有例如,一个系统具有3232位的地址空间和位的地址空间和4K4K字节的页面,字节的页面,3232位的地位的地址空间由址空间由2020位的页号和位的页号和1212位的页内偏移量构成。位的页内偏移量构成。MMUMMU将检查将检查2020位位的页号,并为该页面提供(根据的页号,并为该页面提供(根据MMUMMU

43、表进行映射)页框架地址。表进行映射)页框架地址。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护每个内存页还具有一些特权和状态信息。每个内存页还具有一些特权和状态信息。MMU提供二进制位来标识每个页面的特权或状态信息。这些二进制位用来确定页面中的内容是否:可被处理器指令所使用(执行特权)可被处理器指令所使用(执行特权)可写(写特权)可写(写特权)可读(读特权)可读(读特权)已被回写(脏位)已被回写(脏位)当前在物理内存中(有效位)当前在物理内存中(有效位)电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护在操作系统的支持下,在操作系统的支持

44、下,MMUMMU还提供虚拟存储功能,还提供虚拟存储功能,即在任务所需要的内存空间超过能够从系统中获即在任务所需要的内存空间超过能够从系统中获得的物理内存空间的情况下,也能够得到正常运得的物理内存空间的情况下,也能够得到正常运行。行。当需要的页面被添加到逻辑地址空间时,任务对内存当需要的页面被添加到逻辑地址空间时,任务对内存页面的合法访问,将自动访问到物理内存。页面的合法访问,将自动访问到物理内存。页面当前不在物理内存中时,将导致页面故障异常,页面当前不在物理内存中时,将导致页面故障异常,然后操作系统负责从后援存储器(如硬盘或是然后操作系统负责从后援存储器(如硬盘或是FLASHFLASH存存储设

45、备)中获取需要的页面,并从产生储设备)中获取需要的页面,并从产生页面故障页面故障的机的机器指令处重新执行。器指令处重新执行。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护MMUMMU通常具有如下不同功能程度的使用方式:通常具有如下不同功能程度的使用方式:没有使用MMU,应用程序和系统程序能够对整个内存空间进行访问。采用该模式的系统比较简单、性能也比较高,适合于程序简单、代码量小和实时性要求比较高的领域。大多数传统的嵌入式操作系统都采用该模式;0级,内存的平面使用模式级,内存的平面使用模式电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护通

46、常只是打开通常只是打开MMUMMU,并通过创建一个域,并通过创建一个域(domaindomain,为内存保护的基本单位,每个域,为内存保护的基本单位,每个域对应一个页表)的方式来使用内存,并对每次对应一个页表)的方式来使用内存,并对每次内存访问执行一些必要的地址转换操作。内存访问执行一些必要的地址转换操作。该模式仍然只是拥有该模式仍然只是拥有MMUMMU打开特性的平面内存打开特性的平面内存模式;模式;1级,处理具有级,处理具有MMU和内存缓存的嵌入式处理器和内存缓存的嵌入式处理器电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护MMUMMU被打开,且创建了被打开,且创

47、建了静态的域静态的域(应用程序的(应用程序的逻辑地址同应用程序在物理内存中的物理地址逻辑地址同应用程序在物理内存中的物理地址之间的映射关系在系统运行前就已经确定),之间的映射关系在系统运行前就已经确定),以保护应用和操作系统在指针试图访问其他程以保护应用和操作系统在指针试图访问其他程序的地址空间时不会被非法操作。序的地址空间时不会被非法操作。通常使用消息传送机制实现数据在被通常使用消息传送机制实现数据在被MMUMMU保护保护起来的各个域之间的移动。起来的各个域之间的移动。2级,内存保护模式级,内存保护模式电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护通过操作系统使

48、用通过操作系统使用CPU提供的内存映射机提供的内存映射机制,内存页被动态地分配、释放或是重新制,内存页被动态地分配、释放或是重新分配。分配。从内存映射到基于磁盘的虚拟内存页的过从内存映射到基于磁盘的虚拟内存页的过程是透明的。程是透明的。3级,虚拟内存使用模式级,虚拟内存使用模式电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护0 0级模式为大多数传统嵌入式实时操作系统的使用级模式为大多数传统嵌入式实时操作系统的使用模式,同模式,同1 1级模式一样,都是级模式一样,都是内存的平面使用模式内存的平面使用模式,不能实现内存的保护功能。不能实现内存的保护功能。2 2级模式是目

49、前大多数嵌入式实时操作系统所采用级模式是目前大多数嵌入式实时操作系统所采用的内存管理模式,既能实现内存保护功能,又能的内存管理模式,既能实现内存保护功能,又能通过静态域的使用方式保证系统的通过静态域的使用方式保证系统的实时特性实时特性。3 3级模式适合于应用比较复杂、程序量比较大,并级模式适合于应用比较复杂、程序量比较大,并不要求实时性的应用领域。不要求实时性的应用领域。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心应用程序应用程序1应用程序应用程序2代码代码2数据数据24G0代码代码1数据数据14G0逻辑地址逻辑地址应用程序应用程序1的页表的页表应用程序应用程序2的页表的页表代

50、码代码1数据数据1数据数据2代码代码2操作系统操作系统物理内存物理内存0基于静态域的基于静态域的MMUMMU使用方式使用方式 也称为是一一对应的使用方式。也称为是一一对应的使用方式。在这种一一对应的使用方式中,应用程序的逻辑地址在这种一一对应的使用方式中,应用程序的逻辑地址同应用程序在物理内存中的物理地址相同,简化了内同应用程序在物理内存中的物理地址相同,简化了内存管理的实现方式。存管理的实现方式。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心内存保护内存保护在嵌入式实时操作系统中,在嵌入式实时操作系统中,MMUMMU通常被用通常被用来进行内存保护:来进行内存保护:实现操作系统与

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁