內核的可以一致性策略
中間路線:
差不多所有的接口和核心代碼都是獨立於硬件體系架構的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。