《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等,我们不应该假设它们的长度或做类型转换。

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

页长度

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值