易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux中的内存分配和释放之bootmam_init()函数分析

  了解了Linux内存管理的基本知识后,我们来研究一下Linux内存的分配和释放。我们会分两个部分来研究的。我们向来探讨系统启动初期内存的分配和释放。这个阶段可以申请到大片的物理内存,但是要注意到以下两点!
  1)其实系统启动初期是指在init_mem()之前的阶段,在这个阶段由于只需要少量的内存(内核编译需要的内存,页帧位码表,页表,initrd),所以可以申请到大片的物理内存,但是我们还要注意到的是,如果在这个阶段不释放这些内存的话,init_mem()以后的内核是不可以再对这部分内存操作的(分配和释放)。
  2)这个阶段,我们只可以分配低端内存,分配不了高端内存,因为这个时候内存是没有内核逻辑地址的。
  好了,现在我们开始来研究与这个阶段有关的函数,通过这些函数的分析,我们可以更清楚内存管理是怎样的。我们先来研究bootmem_init()系统启动阶段内存管理初始化。这个函数是在start_kernel()的setup_arch()的paging_init()调用的。我们现在来看看paging_init()的具体代码。
  void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc)
{
 void *zero_page;
 int node;
 bootmem_init(mi);
struct meminfo *mi其实是从setup_arch()函数传过来的全局变量,这个全局变量是meminfo,这个变量记录了系统内存信息,具体来说是记录了bank的信息。我们来看看bootmem_init(mi)具体做些什么!
static void __init bootmem_init(struct meminfo *mi)
{
 struct node_info node_info[MAX_NUMNODES], *np = node_info;
 unsigned int bootmap_pages, bootmap_pfn, map_pg;
 int node, initrd_node;
 bootmap_pages = find_memend_and_nodes(mi, np);
对于struct node_info这个结构体是用来描述内存节点(node)的信息的,这里的node_info变量是这个结构体的数组,*np这是指向这个数组的指针,我们先来看看find_memend_and_nodes(mi, np);这个函数。
find_memend_and_nodes(struct meminfo *mi, struct node_info *np)
{
 unsigned int i, bootmem_pages = 0, memend_pfn = 0;
 for (i = 0; i < MAX_NUMNODES; i++) {
  np[i].start = -1U;
  np[i].end = 0;
  np[i].bootmap_pages = 0;
 }
这里是对刚才说的那个结构体进行初始化,一直把整个数组的每个单元初始化完为止。
for (i =


相关文档:

Linux学习笔记


远程登入:ssh che@192.168.1.111
1.添加用户:useradd cheyanbing
2.修改密码:passwd cheyanbing
3.mkdir /cd /cd .. /cd -/
4.回到用户主目录:cd / cd ~
5.cd /home/he
6.mkdir -p www/pro
远程拷贝
  scp che@192.168.1.111:/home/che/test
che@192.168.1.133:/home/che/
    &n ......

linux 2.4 和2.6 内核区别

随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要
进行改写。为了方便各位Linux爱好者我把自己整
理的这分文档share出来。该文当列举
了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个
函数的用
法。
特别声明:该文档中的内容来自http://lwn.net,该 ......

Suse Linux系统下JAVA AWT界面乱码问题

在Suse10.1下安装EOS5.3,界面按钮凡中文都是方格,可在终端查看中文都是好的,网上搜了好几天,终于弄明白原因。
 
EOS5.3使用的是jdk1.4.2,在suse下没有jdk默认要求的中文字体,需要做额外的配置,修改方法如下:
 
1.使用su命令切换为root用户,再使用cd命令切换到jdk安装路径下的jre;例如:
  ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号