《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。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章