设为首页 加入收藏

TOP

ARM Linux选择语句应用实例
2014-11-24 08:17:53 来源: 作者: 【 】 浏览:0
Tags:ARM Linux 选择 语句 应用 实例

1、区的基本概念


由于硬件的限制,Linux内核并不能对所有页面都一视同仁。有些页面位于内存中特定的物理地址上,所以不能将其用于一些特定的任务。由于存在这种限制,所以内核把页划分为不同的区(zones)。内核使用区对其具有一些相似的特性页进行分组,Linux中把页面分成了3种。


ZONE_DMA:这个区包含的页能用来执行DMA操作


ZONE_NORMAL:这个区包含的都是正常映射的页


ZONE_HIGHEM:这个区包含“高端内存”,其中的页并不能永久地映射到内核地址空间


用户可以查看,里面有相关的定义:


#define ZONE_DMA 0


#define ZONE_NORMAL 1


#define ZONE_HIGHMEM 2


ZONE_DMA位于低端的内存空间,用于某些旧的ISA设备。ZONE_NORMAL的内存直接映射到Linux内核线性地址空间的高端部分,许多内核操作只能在ZONE_NORMAL中进行。


2、区得分配


为了确定内存分配时获得区域倾向顺序,Linux内核中有函数build_zonelists_node,其位于中:


static int _init build_zonelists_node(pg_data_t *pgdat,struct zonelist *zonelist,int j,int k){


switch(k){


struct zone *zone;


/*打印出错信息*/


default:


BUG();


/*ZONE_HIGHMEM的入口*/


case ZONE_HIGHMEM:


zone = pgdat->node_zone + ZONE_HIGHMEM;


if(zone->present_pages){


zonelist->zones[j++] = zone;


}


/*ZONE_NORMAL的入口*/


case ZONE_NORMAL:


zone = pgdat->node_zone + ZONE_NORMAL;


if(zone->present_pages)


zonelist->zones[j++] = zone;


/*ZONE_DMA的入口*/


case ZONE_DMA:


zone = pgdat->node_zone + ZONE_DMA;


if(zone->present_pages)


zonelist->zones[j++] = zone;


/*无break*/


}


return j;


}


在这个函数里,使用了switch语句,在此处可以看出switch语句的几个注意要点。


switch语句中各个case的顺序可以调换,如在此处中将default放在了最上面。


switch语句的各个case后可以跟多条语句,且不需要括号。


在这个switch语句中没有break语句,这时由于这些语句需要顺序执行,此外,在这个switch语句中还包括if条件语句。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ARM Linux基本运算符综合实例 下一篇LInux下网络通信编程实例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)