天天看點

平台遷移——v$transportable_platform

平台遷移——v$transportable_platform

這個ENDIAN_FORMAT是什麼意思呢?

轉載一篇文章:http://www.eygle.com/digest/2007/01/whats_mean_endian.html

在各種計算機體系結構中,對于位元組、字等的存儲機制有所不同,因而引發了計算機通信領域中一個很重要的問題,即通信雙方交流的資訊單元(比特、位元組、

字、雙字等等)應該以什麼樣的順序進行傳送。如果不達成一緻的規則,通信雙方将無法進行正确的編/譯碼進而導緻通信失敗。目前在各種體系的計算機中通常采用的位元組存儲機制主要有兩種:

big-edian和little-endian。本文簡要描述這兩種存儲機制的來曆、特點和差別。

  為了叙述友善,下面先對本文中将要用到的兩個術語做簡單的定義。

  1、MSB

  MSB是Most Significant Bit/Byte的首字母縮寫,通常譯為最重要的位或者最重要的位元組。它通常用來表明在一個bit序列(如一個byte是8個bit組成的一個序列)或者一個byte序列(如word是兩個byte組成的一個序列)中對整個序列取值影響最大的那個bit/byte。

  2、LSB

  LSB是Least Significant Bit/Byte的首字母縮寫,通常譯為最不重要的位或者最不重要的位元組。它通常用來表明在一個bit序列(如一個byte是8個bit組成的一個序列)或者一個byte序列(如word是兩個byte組成的一個序列)中對整個序列取值影響最小的那個bit/byte。

二、endian的由來

  1、Definition

  endian: The ordering of bytes in a multi-byte number.

定義:在計算機系統體系結構中用來描述在多位元組數中各個位元組的存儲順序。

  2、Etymology

  The term comes from Swift's "Gulliver's Travels" via the famous paper

"On Holy Wars and a Plea for Peace" by Danny Cohen, USC/ISI IEN 137,

1980-04-01.

  The Lilliputians, being very small, had correspondingly small political

problems. The Big-Endian and Little-Endian parties debated over whether

soft-boiled eggs should be opened at the big end or the little end.[From:

Free On-Line Dictionary Of Computing or Jargon File]

  詞源:據Jargon File記載,endian這個詞來源于JonathanSwift在1726年寫的諷刺小說 "Gulliver's Travels"(《格利佛遊記》)。該小說

在描述Gulliver暢遊小人國時碰到了如下的一個場景。在小人國裡的小人因為非常小(身高6英寸)是以總是碰到一些意想不到的問題。有一次因為對水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開的争論而引發了一場戰争,并形成了兩支截然對立的隊伍:支援從Big-End剝開的人Swift就稱作Big-Endians而支援從Little-End剝開的人就稱作Little-Endians......(字尾ian表明的就是支援某種觀點的人:-)。Endian這個詞由此而來。

  

  1980年,Danny Cohen在其著名的論文"On Holy Wars and a Plea for Peace"中為了平息一場關于在消息中位元組該以什麼樣的順序進行傳送的争論而引用了該詞。該文中,Cohen非常形象貼切地把支援從一個消息序列的MSB開始傳送的那夥人叫做Big-Endians,支援從LSB開始傳送的相對應地叫做Little-Endians。此後Endian這個詞便随着這篇論文而被廣為采用。

三、各種endian

  1、big-endian

  A computer architecture in which, within a given multi-byte numericrepresentation, the most significant byte has the lowest address (theword is stored "big-end-first").  Most processors, including the IBM 370 family, the PDP-10, the Motorola microprocessor

families, and most of the various RISC designscurrent in mid-1993, are big-endian. [From: Free On-Line Dictionary Of Computing or Jargon File]

  big-endian:計算機體系結構中一種描述多位元組存儲順序的術語,在這種機制中最重要位元組(MSB)存放在最低端的位址上。采用這種機制的處理器有IBM3700系列、PDP-10、Mortolora微處理器系列和絕大多數的RISC處理器。

+----------+

| 0x34 |<-- 0x00000021

| 0x12 |<-- 0x00000020

圖1:雙位元組數0x1234以big-endian的方式存在起始位址0x00000020中

  在Big-Endian中,對于bit序列中的序号編排方式如下(以雙位元組數0x8B8A為

例):

bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

+----------------------------------------+

val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |

^ 0x8B 0x8A ^

MSB LSB

圖2:Big-Endian的bit序列編碼方式

  注1:通常在TCP/IP協定棧所說的網絡序(Network Order)就是遵循Big-Endian規則。在TCP/IP網絡通信中,通信雙方把消息按照如圖2的方式進行編碼,然後按從MSB(Bit0)到LSB的順序在網絡上傳送。

  2、little-endian

   A computer architecture in which, within a given

16- or 32-bit word,bytes at lower addresses have lower significance (the

word is stored "little-end-first"). The PDP-11 and VAX families of

computers and Intel microprocessors and a lot of communications and

networking hardware are little-endian.

  The term is sometimes used to describe the ordering of units other

than bytes; most often, bits within a byte. [From: Free On-Line Dictionary

Of Computing or Jargon File]

  little-endian:計算機體系結構中一種描述多位元組存儲順序的術語,在這種機

制中最不重要位元組(LSB)存放在最低端的位址上。采用這種機制的處理器有PDP-11、

VAX、Intel系列微處理器和一些網絡通信裝置。該術語除了描述多位元組存儲順序外

還常常用來描述一個位元組中各個比特的排放次序。

| 0x12 |<-- 0x00000021

| 0x34 |<-- 0x00000020

  圖3:雙位元組數0x1234以little-endian的方式存在起始位址0x00000020中

  在Little-Endian中,對于bit序列中的序号編排和Big-Endian剛好相反,其方

式如下(以雙位元組數0x8B8A為例):

bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

+-----------------------------------------+

圖4:Little-Endian的bit序列編碼方式

  注2:通常我們說的主機序(Host Order)就是遵循Little-Endian規則。是以當兩台主機之間要通過TCP/IP協定進行通信的時候就需要調用相應的函數進行主機序(Little-Endian)和網絡序(Big-Endian)的轉換。

注3:正因為這兩種機制對于同一bit序列的序号編排方式恰恰相反,是以《現代英漢詞典》中對MSB的翻譯為"最高有效位"欠妥,故本文定義為"最重要的bit

/byte"。

  3、middle-endian:

   Neither big-endian nor little-endian. Used of

perverse byte orders such as 3-4-1-2 or 2-1-4-3, occasionally found in

the packed decimal formats of some minicomputer manufacturers.[From:

  middle-endian:除了big-endian和little-endian之外的多位元組存儲順序就是

middle-endian,比如以4個位元組為例:象以3-4-1-2或者2-1-4-3這樣的順序存儲的

就是middle-endian。這種存儲順序偶爾會在一些小型機體系中的十進制數的壓縮格

式中出現。

四、收尾

  要詳細解釋這兩種編碼順序已經超出本文所涉及的内容,如果你有興趣的話可以參考上面提及的Danny Cohen的論文("On Holy Wars and a Plea for Peace"),該論文詳細的描述了這兩種編碼順序的曆史、所基于的數學理論和各自擁護者争論的焦點等知識,絕對可以大飽你打破沙鍋問到底的内心需要。

五、References & WebLinks

1. Free On-Line Dictionary Of Computing

[http://foldoc.doc.ic.ac.uk/foldoc/index.html]

2. Jargon File [http://info.astrian.net/jargon/]

3. Gulliver's Travels《格利佛遊記》

[http://www.jaffebros.com/lee/gulliver/]

4. On Holy Wars and a Plea for Peace

[http://khavrinen.lcs.mit.edu/wollman/ien-137.txt]

1311 |Pageviews:5435

<a target="_blank">評論</a>

<a target="_blank">1條新浪微網誌</a>

<a target="_blank">1條騰訊微網誌</a>

還沒有評論,沙發等你來搶

<a target="_blank"></a>

社交帳号登入:

<a target="_blank" href="http://eygle.duoshuo.com/login/weibo/">微網誌</a>

<a target="_blank" href="http://eygle.duoshuo.com/login/qq/">QQ</a>

<a target="_blank" href="http://eygle.duoshuo.com/login/renren/">人人</a>

<a target="_blank" href="http://eygle.duoshuo.com/login/douban/">豆瓣</a>

<a target="_blank">更多»</a>

平台遷移——v$transportable_platform

釋出

<a target="_blank" href="http://duoshuo.com/">Powered by 多說</a>

我覺得你對MSB和LSB的翻譯不好。幾個個位元組資訊中那一位都是同等重要的。

Posted by: Freeden Young at August 19, 2009 7:23 PM

------

o, not that. it's the saying from our books,2. and they also the same in English: 'MSB是Most Significant '....

and they do means, i think. like the Most Significant is the one that influence most in a number. of course the Most Significant one is the number in front. ;) isnt that?

不時在itpub網站上看到有人問byte edian是什麼意思. 在這兒說一下我的了解吧.

    在計算機中最小的機關是一個位元組,不過一個位元組能表示的範圍太小了,我們可以将一個位元組了解成一個0-9間的任何一個數字, 是以我們要表示一個千位數時就需要四位來表示, 給定一個四位數8765, 這個值是不會變的, 但我們記錄這個數字時可以寫成8765也可以記錄成5678, 隻要我們自已記住是如何存貯就可以了. 在三十二位的系統中, 一個整數由四個位元組來組成, 所在在不同的硬體系統中放在記憶體中時, 就有兩種順序, Big Edian指将千位寫在前面, Little Edian指将個位寫成前面. 有些人了解成一個Byte中各個bit的順序是不對的.

    在Oracle的資料檔案中, 記錄了各種資訊, 有一些資訊是用多于一個位元組來表示的, 如相對資料塊位址(RDBA)由四個位元組組成, 而Row index則隻需要兩個位元組組成, 不同硬體平台下的Oracle在将這些資訊寫入檔案時, 就出現了不同的寫入順序, 是以不同硬體的Oraclce資料檔案并不能在互相拷貝使用. 由于位元組對齊方式隻有2種, 而實際上我們有很多的不同的硬體平台, 是以有的不同硬體平台他們的位元組對齊方式是相同的, 在相同的平台上, Oracle資料庫檔案其實是相同的, 理論上應當是可以互通的,

隻是Oracle可以記錄了一些OS的資訊, 導緻資料檔案不能通過.

   我曾經将Windows下的檔案拷貝到Linux下和Solaris(在PC上的)平台下測試, 8i的資料檔案在拷貝上去後, 通過重建控制檔案和resetlogs成功打開, biti用9i做了試驗, 在9i的第一個塊上記錄了平台資訊, 通過交換第一個block後, 成功地在Linux上打開了Windows下9i的資料檔案, 需要注意的是這隻能作為測試, 而不是官方的, 請大家在不同平台移植時還是用exp/imp方式吧.

   隻是在學習的過程中可以大膽設想, 小心求證.