Linux中的内存页表创建之memtable_init()函数分析
本函数的分析很难具体,因为涉及了很多arm的处理器型号和每个型号对应的cache和write buffer的工作方式,这片文章只是做简单的记录,方便以后了解更深后回来再来完善这个函数。
这个函数的调用过程如:start_kernel()->setup_arch()->paging_init()->memtable_init().传递的struct meminfo mi是一个全局变量,里面记录了整个系统所有bank的信息。我们来大概看看这个函数的代码。
void __init memtable_init(struct meminfo *mi)
{
struct map_desc *init_maps, *p, *q;//要注意这里很重要的结构-struct map_desc,这个结构体的内容等下会细讲的。
unsigned long address = 0;
int i;
build_mem_type_table();//这个函数可以说来是我最含糊的函数,我们来浅析一下吧。
static void __init build_mem_type_table(void)
{
struct cachepolicy *cp;
unsigned int cr = get_cr();//就是获得cp15的c1寄存器的内容
int cpu_arch = cpu_architecture();//获得寄存器的架构版本
int i;
#if defined(CONFIG_CPU_DCACHE_DISABLE)
if (cachepolicy > CPOLICY_BUFFERED)
cachepolicy = CPOLICY_BUFFERED;
#elif defined(CONFIG_CPU_DCACHE_WRITETHROUGH)
if (cachepolicy > CPOLICY_WRITETHROUGH)
cachepolicy = CPOLICY_WRITETHROUGH;
#endif//这里涉及到一个全局变量cachepolicy,我们可以称为cache政策,其实可以看出以上几行都是和系统配置选项有关的。
if (cpu_arch < CPU_ARCH_ARMv5) {
if (cachepolicy >= CPOLICY_WRITEALLOC)
&n
相关文档:
~/test
|
|
|------main.c
|------lib
| |
| |------StringLen.h
| |------Strlen.c
| |------Strnlen.c
----------------StringLen.h:
#ifndef _STRING ......
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。 top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, ......
本人安装的是Vmware 6.5精简版,导致后来我想在虚拟机和Windows下互传不了文件,发现少了linux.iso镜像文件。我在网上找到并把它放到虚拟机的安装目录下,然后启动虚拟机下的linux操作系统,虚拟机--->设置,单击CD/DVD,选择使用ISO镜像,路径指向linux.iso,然后在/mnt/cdrom下就有了vmware-t ......
Linux正则表达式技术指南
导读:本文介绍Linux正则表达式技术。包括使用不同的工具如grep、awk以及sed去查找包含特定文本串的文件。
关键词:Linux正则表达式 grep awk sed
正在加载数据...
【TechTarget中国原创】作为一个Linux管理员,您需要对文本文件进行处理。您可以使用不同的工具如grep、awk以及sed去 ......
不同色彩和分辨率所对应的值
depth-----640x480----800x600----1024x768-----1280x1024
8bit---------769--------771--------773----------775
15bit--------784--------787--------790----------793
编辑/boot/grub/目录下的menu.lst文件(有些系统menu.lst文件是软连接到 ......