Linux中内存的分配和回收

Tags: Memory   Linux  

一。[[Anchor(NBE1)]]系统启动时的内存操作

1。pg0的位置和尺寸

当 系统刚刚启动时,在分页功能未打开前,线性地址和物理地址是一一对应的。刚开启分页功能时,pg0的内存地址是 在编译内核时定义好的,见arch\i386\kernel\vmlinux.lsd.S,大小为4096字节,启始地址紧跟内核在内存中物理地址。由于 内核保护模式代码启始位置为0x100000,所以pg0地址=0x100000+内核保护模式代码尺寸。

对pg0的操作主要是开启分页机制时填写页面描述表信息,上一节在第一次页寻址设置中已经详细介绍。

leon Published by 2014-04-22 03:50

Detail »

获取cpu 温度篇

Tags: CPU  

刚接手这个的时候,可以说是一头雾水,完全不知道该怎么搞。首先接触到的就是hwmonitor和core temp 这两款软件,同时看到上面core temp 的说明,可以说知道一点东西了。可以它其中说的amd是在nb的特殊寄存器中,这个到底是什么寄存器了。当时没有去看amd的一些文档,就直接看是逆向hwmonitor和core temp软件,通过动态和静态分析了这两个软件的驱动和应用程序,只能说知道其中他们是在不断的进行端口读写分别是0XCF8和0xCFC这两个端口。你可以上网查找这两个端口是干什么的,之前由于我左右pci 配置空间读取问题,所以对这个两个端口不是很陌生。pci 配置空间相关说明就要看pci 规范了,说的很详细。

leon Published by 2014-04-11 15:45

Detail »

Linux伙伴系统算法及改进

Tags: Memory   Linux  

Linux内部使用页框来管理物理内存,在实际应用中,经常需要分配一组连续的页框,而频繁地申请和释放不同大小的连续页框,必然导致在已分配页框的内存块中分散了许多小块的空闲页框。这样,即使这些页框是空闲的,但要分配一个大块的连续页框就可能无法满足。

Linux采用了伙伴系统来解决上述难题。把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。例如,大小为16个页框的块,其起始地址是16×212的倍数。内存中的空闲页框组织形式如下图:

Author:leon

lyan Published by 2014-04-11 04:00

Detail »

频繁分配释放内存导致的性能问题的分析

Tags: Memory   Linux  

现象
1 压力测试过程中,发现被测对象性能不够理想,具体表现为:
进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70
2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000

leon Published by 2014-04-03 16:44

Detail »