对于1s的时间间隔,不能用100个jiffy。因为不同的平台可能设置不一,所以,应该用Hz(每秒定时器中断的次数)来衡量。
1.2.21.2.2 页面大小
内存页的大小为PAGE_SIZE字节,而不是4 KB。在不同的平台上,页大小范围可以是4 KB到64 KB。PAGE_SHIFT的作用是通过对地址右移PAGE_SHIFT得到一个地址所在页的页号。对于用户空间,可以使用getpagesize函数来得到页的大小。
例如,使用get_free_pages函数申请16 KB空闲空间(即214),先将16 KB转换成2order空闲页数。在x86下定义PAGE_SHIFT为12,即212为4 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字节,这些宏都有效。所有版本的内核都定义了这些宏。






