linux核心分析筆記—-核心可移植性

來源:互聯網
上載者:User

      關於linux核心的可移植性我不用多說,現在的linux作業系統,你裝系統時應該很明白的知道了,很少說(至少我沒見到)不相容不能裝的問題。今天就來說說這個問題:
     

1.位元組和資料類型
      能夠由機器一次就完成處理的資料被稱為字,字指位的數目。所以我們常聽到機器是多少位的時候,就是指該機的字長。處理器通用寄存器的大小和它的字長是相同的。C語言定義的long類型總對等於機器字長。對於支援的每一種體繫結構,Linux都要將<asm/types.h>中的BITS_PER_LONG定義為C long類型的長度,也就是系統的字長。不透明類型是那些通過typeder聲明的類型。另外就是,我們常常需要在程式中使用長度明確的類型,核心在asm/types.h中定義了這些長度明確的類型,而該檔案又被包含在檔案linux/types.h中,如下表所示:

     

      其中帶符號的變數用的比較少。接下來是char型:分為有符號(-128~127)和無符號(0~255).

      2.資料對齊

      如果一個變數的記憶體位址正好是它長度的整數倍,它就被稱為自然對齊的。關於位元組對齊的內容還是相當繁瑣的,我這裡就不細講了,後面我會有專門的專題來說這個問題。

      3.位元組順序

      位元組順序是指在一個字中各個位元組的順序。處理器在對字取值時既可能將最低有效位所在位元組當作第一個位元組(最左邊的位元組),也可能將其當作最後一個位元組(最右邊的位元組)。如果最高有效位所在的位元組放在最高位元組位置上,其他位元組依次放在低位元組位置上,那麼該位元組順序稱作高位優先(big-endian)[存放左大右小],否則就叫做little-endian[左小又大].直接舉個例子,如下:

                  00000000 00000000 00000100 00000011

      

       下面是上述資料在兩種不同位元組序的相片順序:        

     

       雖然不習慣,但確實是這樣的,使用高位優先的體繫結構把最高位元組位存放在最小的記憶體位址上。下邊的代碼可以判定給定的機器位元組對齊類型:

int x = 1;if (*(char *)&x == 1)    /* little endian */else    /* big endian */

      在linux核心支援的每一種體繫結構,相應的核心都會根據機器使用的位元組順序在它的asm/byteorder.h中定義__BIG_ENDIAN或__LITTILE_ENDIAN中的一個。,這個標頭檔還從include/linux/byteord
er中包含了一組宏命令完成位元組順序之間的相互轉換,最常用的宏命令如下:

u23 __cpu_to_be32(u32);    /* convert cpu's byte order to big-endian */u32 __cpu_to_le32(u32);    /* convert cpu's byte order to little-endian */u32 __be32_to_cpu(u32);    /* convert big-endian to cpu's byte order */u32 __le32_to_cpus(u32);   /* convert little-endian to cpu's byte order */

      4.時間

      關於核心的時間問題,絕對不要假定時鐘中斷髮生的頻率,也就是每秒產生的jiffies數目。相反,應該使用HZ來正確計量時間。

      5.頁長度

      當處理用頁管理的記憶體時,絕對不要假設頁的長度。不同的體繫結構使用頁的長度也是不一樣的。當處理用頁組織管理的記憶體時,通過PAGE_SIZE來使用以位元組數來表示的頁長度,而PAGE_SHIFT這個值定義了從最右端屏蔽多少位能夠得到該地址對應的頁的頁號。

      總之,編寫可移植的代碼需要考慮許多問題:字長,資料類型,對齊,位元組次序,頁大小,處理器排序等等。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.