《Linux内核设计与实现》读书笔记——可移植性

内核的可移植性策略

中间路线:

差不多所有的接口和核心代码都是独立于硬件体系架构的C语言代码;

在对性能要求很严格的部分,内核的特性会根据不同的硬件体系进行调整;

与体系架构相关的代码都放在arch/xx/目录中,xx是体系架构名,比如x86。

 

字长

Linux中的字长指机器的位数,比如x86有32位和64位的,所以字长分别是32位和64位(字长这里不是字(word)的长度)。

在asm/types.h中的BITS_PER_LONG表示字长,比如include\asm-generic\bitsperlong.h中:

#ifdef CONFIG_64BIT
#define BITS_PER_LONG 64
#else
#define BITS_PER_LONG 32
#endif /* CONFIG_64BIT */

C语言中long类型的长度被确定是机器的字长,而int类型有时会比字长小。

尽管没有明确规定,但是Linux支持的体系架构中,int是32位,short是16位。

操作系统常用一个简单的助记符来描述此系统中数据类型的大小:

LLP64:long long和指针的长度是64位,long是32位的;

LP64:long,long long和指针都是64位的;Linux采用的是这种。

ILP64:int,long,long long和指针的长度是64;

用typedef声明的类型称为不透明类型,比如pid_t,atomic_t等,我们不应该假设它们的长度或做类型转换。

内核定义了长度明确的类型:

《Linux内核设计与实现》读书笔记——可移植性_第1张图片

 

页长度

定义在asm/page.h下,x86是4KB。

 

你可能感兴趣的:(Linux,linux)