免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 774 | 回复: 0
打印 上一主题 下一主题

UClinux的内存管理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-24 23:23 |只看该作者 |倒序浏览

一.概述:
       由于缺少了MMU硬件支持,uClinux不能支持虚拟内存管理(virtual memory management)和内存保护.这就意味着它完全不使用标准linux内核(kernel)中的分页管理机制,也就没有了页表(page table)和页目录(page directory)对线性地址的映射,从而线性地址到物理地址的转 换也是不需要进行任何工作的。换句话说,uClinux中所使用的都是直接物理地址。而且,由于没有了虚拟内存管理的功能,uClinux不再使用”按需调页”(demand paging)。这样在程序载入内存执行的时候需要将程序的全部映像都一次装入。那些比物理内存还大的程序将无法执行。这也是uclinux的缺陷之一。
       尽管如此,uClinux还是将整个物理内存划分成大小为4KB的页面。由数据结构page管理,有多少页面就有多少page结构,它们又作为元素组成一个数组mem_map[]。
       进程可以向核心申请使用物理内存。这仍然通过使用传统的kmalloc()和kfree实现。这些内存块来自于free_area数组,由blocksize表、sizes表、page_descriptor结构和blockheader结构共同管理。
      
二.uClinux内存管理的局限性:
       由于缺少了MMU硬件的支持,uClinux的多任务管理功能受到一定限制:
1.       uClinux中无法实现fork而只能使用vfork.这并不意味着uClinux不具有多任务功能,而是父进程在调用vfork之后必须在子进程调用exec()或者exit()之前阻塞。
2.       标准linux中的内存分段为应用程序提供了接近无限的堆空间和栈空间,而uClinux为可执行程序在紧随它的数据段结束处分配堆栈空间。这样如果堆栈增长的太大,它将可能覆盖程序的静态数据段和代码段。
3.       不具有内存保护。
    4.  应用程序必须一次性载入。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/23237/showart_160223.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP