linux 2.6源代码情景分析笔记之内存5
在内存启动最开始时,bios的起主导作用,内核通过它来了解物理内存的情况。同时调用bios过程建立一组物理地址范围和其对应的内存类型。
通过函数machine_specific_memory_setup()函数来建立物理地址映射。此表可以获取,是内核在bios列表的基础上构建的;否则内核按照保守的缺省设置构建这张表:从0x9f(lowmemsize())到0x100(high_memory)号的所有页框都标记为保留。setup_memory函数构架这张表。
static unsigned long __init setup_memory(void)
{
unsigned long bootmap_size, start_pfn, max_low_pfn;
start_pfn = PFN_UP(init_pg_tables_end);
find_max_pfn();
max_low_pfn = find_max_low_pfn();
bootmap_size = init_bootmem(start_pfn, max_low_pfn);
register_bootmem_low_pages(max_low_pfn);
reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
reserve_bootmem(0, PAGE_SIZE);此函数用来保留页面,方法是将保留位变成1.
reserve_ebda_region();
if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD && boot_cpu_data.x86 == 6)
reserve_bootmem(0xa0000 - 4096, 4096);
return max_low_pfn;
}
函数经过简化变成最基本的形态。
其中,ul分别是bootmap_size(bit map的size),start_pfn(开始的页框),max_low_pfn(被内核直接映射的最后一个页框的页框号) ;
#define PFN_UP(x) (((x) + PAGE_SIZE - 1) >> PAGE_SHIFT);
unsigned long init_pg_tables_end __initdata = ~0UL
三个相关的宏:
#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
#define PFN_DOWN(x) ((x) >> PAGE_SHIFT)
#define PFN_PHYS(x
相关文档:
一、 头文件 1 “”中的头文件,在源文件当前目录查找 2 -I 中指定目录 3 gcc的环境变量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH 4 编译器预设路径、内定目录: /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../.. ......
1. vmstat
这个工具可以让你了解到系统资源当前的负载率,包括CPU,内存,swap空间,io等等。
基本用法
$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so&n ......
网上介绍linux裁剪的文章很多,不过很多都是忽略了前面的很多步骤。最近老板要布置linux裁剪的任务,我没有什么linux项目基础,所以很多东西都要自己摸索。下面是我总结的步骤。
Linux内核裁剪
1.
首先把linux源代码下载到本地,下载的网址是www.kernel.org,
2.&n ......
基于Linux的Socket网络编程的性能优化
2009-10-23 嵌入式在线 收藏 | 打印
1 引言
随着Intenet的日益发展和普及,网络在嵌入式系统中应用非常广泛,越来越多的嵌入式设备采用Linux操作系统。Linux是一个源代码公开的免费操作系统,具有强移植性, ......
--------------------------------------------------
几个宏:
PGDIR_SHIFT:确定页全局目录项能映射的区域大小的对数。此宏用于计算页全局目录中一个单独表项所能映射区域的大小。PGDIR_MASK用于屏蔽offset table,middle air,upper dir.字段的所有位。
#define PGDI ......