免费注册 查看新帖 |

Chinaunix

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

linux1.0内存管理的两个函数解读 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-02 19:47 |只看该作者 |倒序浏览
这个是linux1.0版,内存管理中,内核页目录,页表,以及管理主内存得主要数据结构mem_map和free_page_list得初始化。
unsigned long paging_init(unsigned long start_mem, unsigned long end_mem) //页目录和页表得初始化,这里主要是内核可用主内存得初始化
{
unsigned long * pg_dir;
unsigned long * pg_table;
unsigned long tmp;
unsigned long address;
/*
* Physical page 0 is special; it's not touched by Linux since BIOS
* and SMM (for laptops with [34]86/SL chips) may need it.  It is read
* and write protected to detect null pointer references in the
* kernel.
*/
#if 0
memset((void *) 0, 0, PAGE_SIZE);
#endif
start_mem = PAGE_ALIGN(start_mem);
address = 0;
pg_dir = swapper_pg_dir;
while (address  mem_map)                     
  *--p = MAP_PAGE_RESERVED;             //都初始化为保留页面
start_low_mem = PAGE_ALIGN(start_low_mem);
start_mem = PAGE_ALIGN(start_mem);      //字节对齐
while (start_low_mem = 0xA0000 && tmp > 10,
  end_mem >> 10,
  codepages << (PAGE_SHIFT-10),
  reservedpages << (PAGE_SHIFT-10),
  datapages << (PAGE_SHIFT-10));
/* test if the WP bit is honoured in supervisor mode */
wp_works_ok = -1;
pg0[0] = PAGE_READONLY;
invalidate();
__asm__ __volatile__("movb 0,%%al ; movb %%al,0": : :"ax", "memory");
pg0[0] = 0;
invalidate();
if (wp_works_ok < 0)
  wp_works_ok = 0;
return;
}
可以看到linux对内存的使用,首先是保留内核空间,在最低端保留0xA0000内存空间,但不知道这个空间干吗用的,然后是主内存空间从start_mem开始到end_mem这是系统要进行管理的空间,然后把这个空见映射到内核线性地址0xc0000000开始的空间,所以看见现在的linux可知持最大内存是1g,可见内核可以访问内核的任意地址。


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP