首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java
.2.1  时间间隔

对于1s的时间间隔,不能用100jiffy。因为不同的平台可能设置不一,所以,应该用Hz(每秒定时器中断的次数)来衡量。

1.2.21.2.2  页面大小

内存页的大小为PAGE_SIZE字节,而不是4 KB。在不同的平台上,页大小范围可以是4 KB64 KBPAGE_SHIFT的作用是通过对地址右移PAGE_SHIFT得到一个地址所在页的页号。对于用户空间,可以使用getpagesize函数来得到页的大小。

例如,使用get_free_pages函数申请16 KB空闲空间(即214),先将16 KB转换成2order空闲页数。在x86下定义PAGE_SHIFT12,即2124 KB

 

int order = (14 - PAGE_SHIFT > 0) ? 14 - PAGE_SHIFT : 0;

buf = get_free_pages(GFP_KERNEL, order);

1.2.31.2.3  字节存储顺序

字节存储顺序有两种:低字节优先(little-endian称为小端字节序,高字节优先(big-endian或称大端字节序。低字节优先的方式是在存储多字节数值时,低字节在前面,高字节在后面。高字节优先则正好相反。现代的处理器大部分工作在big-endian模式下。Linux 内核定义了一组宏,用于在处理器字节序数据和特殊字节序数据之间进行转换。这组宏如下(Linux/byteorder/big_endian.h)

 

u32 _ _cpu_to_le32 (u32); //将一个 CPU 使用的值的字节序转换成一个小端字节序的无符号值

//32 little-endian

u32 _ _le32_to_cpu (u32);  //与上操作正好相反,将小端字节序的32位数转换为cpu使用的字节序。

 

使用这些宏,可以使编写可移植代码的工作变得更加容易。这个头文件还有一些类似的转换,如__be64_to_cpu__le16_to_cpus__cpu_to_le32p函数。

1.2.41.2.4  数据对齐

例如,读取一个存储在非4字节倍数的地址中的4字节值,这就存在数据对齐的问题。如果需要访问未对齐的数据,则应该使用下面的宏:

 

#include <asm/unaligned.h>

get_unaligned(ptr);

put_unaligned(val, ptr);

 

这些宏是与类型无关的,对各种数据项,不管它是1字节、2字节、4字节,还是8字节,这些宏都有效。所有版本的内核都定义了这些宏。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论