64位

64位

計算機架構中的内存地址等的最大寬度
在計算機架構中,64位整數、内存地址或其他數據單元,是指它們最高達到64位(8字節)寬。此外,64位CPU和算術邏輯單元架構是以寄存器、内存總線或者數據總線的大小為基準。64位CPU在1960年代,便已存在于超級計算機,且早在1990年代,就有以RISC為基礎的工作站和服務器。2003年才以x86-64和64位PowerPC處理器架構的形式引入到(在此之前是32位)個人計算機領域的主流。“64位”計算機架構一般具有64位寬的整數型寄存器,它可支持(内部和外部兩者)64位“區塊”(chunk)的整數型數據。
    中文名:64位 外文名:64 bit 别名:

架構影響

處理器中的寄存器通常可分為三種︰整數、浮點數、其它。在所有常見的主流處理器中,隻有整數寄存器(integer register)才可存放指針值(内存數據的地址)。非整數寄存器不能存放指針來讀寫内存,因此不能用來避開任何受到整數寄存器大小所影響的内存限制。

幾乎所有常見的主流處理器(大部分的ARM和32位MIPS實作是明顯的例外)集成了浮點數硬件,它有可能使用64位寄存器保存數據,以供處理。例如,x86架構包含了x87浮點數指令,并使用8個80位寄存器構成堆棧結構。後來的x86修改版和x86-64架構,又加入SSE指令,它使用8個128位寬的寄存器(在x86-64中有16個寄存器。與之相較,64位Alpha系列處理器,除了32個64位寬整數寄存器以外,也定義了32個64位寬的浮點數寄存器。

優缺點

一個常見的誤解是:除非計算機安裝的内存大于4GB,否則64位架構不會比32位架構好。這不完全正确。

部分操作系統保留了一部分進程地址空間供操作系統使用,造成使用者程序可用于映射内存的地址空間減少。例如,Windows XP DLL 以及 userland OS組件映射到每一個進程的地址空間,即使計算機裝有4GB的内存,也僅留下2至3.8GB(端視其設置)的可用地址空間。這個限制在64位Windows中并不會出現。

文件的内存映射對32位的架構而言不再合用,尤其是相對便宜的DVD燒錄技術的引入。大于4GB的文件不再罕見,且如此大的文件無法簡單的映射到32位架構的内存;隻能映射文件的一部分範圍到地址空間上,并以内存映射存取文件,當有需要時,就必須将這些範圍映射進或映射出地址空間。這是一個問題,因為充裕的内存映射仍是從磁盤至内存最有效率的存取方法,如果操作系統能适當實行的話。

64位架構主要的缺點是,相對于32位架構,占用相同的數據會消秏更多的内存空間(由于腫脹的指針,以及其它型态和對齊補白等可能)。這會增加進程對内存的需求,且可能會影響高效能處理器高速緩存的使用。維持一部分的32位模型是一個處理方法,且大緻合理有效。實際上,高效能導向的z/OS操作系統便采取這個方法,要求程序代碼存放在32位地址空間的任一數字,數據對象則可(選擇性)存放在64位區域。

目前主要的商業軟件是建立在32位代碼,而非64位代碼,所以不能取得在64位處理器上較大的64位地址空間,或較寬的64位寄存器和數據路徑的優點。然而,免費或自由軟件操作系統的使用者已經可以使用專有的64位運算環境。并非所有的應用程序都需要大量的地址空間或操作64位數據項,所以這些程序不會享受到較大的地址空間或較寬的寄存器和數據路徑的好處;主要受益于64位版本的應用程序,并不會享受到使用x86的版本,會有更多的寄存器可以使用。

數據模型

以高階語言編寫的應用軟件,從32位架構轉換到64位架構的各種困難。一個共同的問題是,部分程序員假定指針如同其它數據型态一樣有相同的長度。程序員假定他們可以在數據型态之間傳送數量而不遺失信息。這些假定隻在一部分32位機器上如此(甚至是一部分16位機器),不過在64位機器上就不再如此。C語言及其後代C++尤其容易産生這種錯誤。

要在C和C++中避免這種錯誤,如果确定原始類型的大小為所需的基礎sizeof操作符可用來确定原始類型的大小,無論是在編譯以及執行時期。此外,在C99标準中的表頭,以及在C++标準中的表頭的numeric_limits類,可提供更多有用的信息sizeof隻返回字符大小。這個用法使人産生誤解,因為一個字符(CHAR_BITS)的大小是由自身決定,在所有的C或C++實作中并未以相同方式定義。然而,除了這些編譯器目标DSP以外,“64位=8字符(每一字符有8位)”已成标準。

必須謹慎使用ptrdiff_t型态(在标準表頭中)兩個指針相減的結果;太多代碼甯可不正确的使用“int”或“long”。表示一個指針(而不是指針差異)為一個整數,在此可以使用uintptr_t(它隻定義在C99中,不過某些編譯器另外集成較早版本的标準以提供之,作為一個擴充)。C和C++并未定義指針、整數型(int)、長型(long)為特定的位數目。

在主要的32位機器程序設計環境中,指針、“int”變量、“long”變量全部都是32位長。

然而,在64位機器下的許多程序設計環境,“int”變量仍然是32位寬,不過“long”和指針是64位寬,上述内容稱為LP64數據模型。另一個選擇是ILP64數據模型,三種數據型态都是64位寬,甚至SILP64連“short”變量也是64位寬。然而,大多數情況下所需的修改是相對次要且簡單,而且許多編寫良好的程序可以簡單的重新編譯給新的環境,而無須修改。另一個選擇是LLP64模型,其維持32位代碼的兼容性,使int和long為32位。“LL”指“long long”型态,其在所有平台下至少是64位,包括32位環境。

今天有許多64位編譯器使用LP64模型(包括Solaris、AIX、HP、Linux、Mac OS X、IBM z/OS 本地編譯器)。微軟的VC++編譯器使用LLP64模型。其缺點是在LP64模型中将long存放到int可能會溢出。另一方面,還會使強制轉型一個指針為long可以作用;在LLP模型下,情況則剛好相反。兩者皆不應該出現在合乎C99的代碼中。

注意,程序設計模型是在預編譯器底層選擇的,且數個模型可共存于同一操作系統。然而一般由OS API選擇程序設計模型作為原始模型。

另一個考量是用于驅動程序的數據模式。在現代的操作系統中,驅動程序彌補了大多數的操作系統代碼(盡管許多代碼可能不會加載,當操作系統執行時。許多驅動程序大量使用指針操控數據,且在某些情況下必須讀入一定大小的指針進入支持DMA的硬件。舉個例子,提供給32位PCI設備的驅動程序,請求設備的DMA數據進入64位機器内存的較高區域,可能無法滿足來自操作系統從設備到大于4GB内存讀入數據的要求。因為對于這些地址的指針,将不适合設備的DMA寄存器。這個問題可如下解決,當向設備發出DMA請求時,OS采用與設備相符的内存限制,或者使用IOMMU。

超越

直至2007年,64位字組似乎已滿足大部分的運用。不過仍應提到,IBM的System/370及後繼者使用128位浮點數,且許多現代處理器也内含128位浮點數寄存器。System/370及後繼者尤其顯着,在這方面,他們也使用多達16字節的可變長度十進制數(即128位)。

圖像

在數碼圖像中,64位為附有16位Alpha通道的48位圖像。

處理器

這裡的64位技術是相對于32位而言的,這個位數指的是CPU GPRs(General-Purpose Registers,通用寄存器)的數據寬度為64位,64位指令集就是運行64位數據的指令,也就是說處理器一次可以運行64bit數據。64bit處理器并非現在才有的,在高端的RISC(Reduced Instruction Set Computing,精簡指令集計算機)很早就有64bit處理器了,比如SUN公司的UltraSparcⅢ、IBM公司的POWER5、HP公司的Alpha等。

64bit計算主要有兩大優點:可以進行更大範圍的整數運算;可以支持更大的内存。不能因為數字上的變化,而簡單的認為64bit處理器的性能是32bit處理器性能的兩倍。實際上在32bit應用下,32bit處理器的性能甚至會更強,即使是64bit處理器,目前情況下也是在32bit應用下性能更強。所以要認清64bit處理器的優勢,不可迷信64bit。

目前主流CPU使用的64位技術主要有AMD公司的AMD64位技術、Intel公司的EM64T技術、和Intel公司的IA-64技術。其中IA-64是Intel獨立開發,不兼容現在的傳統的32位計算機,僅用于Itanium(安騰)以及後續産品Itanium2,一般用戶不會涉及到,因此這裡僅對AMD64位技術和Intel的EM64T技術做一下簡單介紹。

AMD64位技術

AMD64的位技術是在原始32位X86指令集的基礎上加入了X86-64擴展64位X86指令集,使這款芯片在硬件上兼容原來的32位X86軟件,并同時支持X86-64的擴展64位計算,使得這款芯片成為真正的64位X86芯片。這是一個真正的64位的标準,X86-64具有64位的尋址能力。

X86-64新增的幾組CPU寄存器将提供更快的執行效率。寄存器是CPU内部用來創建和儲存CPU運算結果和其它運算結果的地方。标準的32-bit x86架構包括8個通用寄存器(GPR),AMD在X86-64中又增加了8組(R8-R15),将寄存器的數目提高到了16組。X86-64寄存器默認位64-bit。還增加了8組128-bit XMM寄存器(也叫SSE寄存器,XMM8-XMM15),将能給單指令多數據流技術(SIMD)運算提供更多的空間,這些128位的寄存器将提供在矢量和标量計算模式下進行128位雙精度處理,為3D建模、矢量分析和虛拟現實的實現提供了硬件基礎。通過提供了更多的寄存器,按照X86-64标準生産的CPU可以更有效的處理數據,可以在一個時鐘周期中傳輸更多的信息。

EM64T技術

Intel官方是給EM64T這樣定義的:EM64T全稱ExtendedMemory 64 Technology,即擴展64bit内存技術。EM64T是Intel IA-32架構的擴展,即IA-32e(Intel Architectur-32 extension)。IA-32處理器通過附加EM64T技術,便可在兼容IA-32軟件的情況下,允許軟件利用更多的内存地址空間,并且允許軟件進行32bit線性地址寫入。EM64T特别強調的是對32bit和64bit的兼容性。Intel為新核心增加了8個64bitGPRs(R8-R15),并且把原有GRPs全部擴展為64bit,如前文所述這樣可以提高整數運算能力。增加8個128bit SSE寄存器(XMM8-XMM15),是為了增強多媒體性能,包括對SSE、SSE2和SSE3的支持。

Intel為支持EM64T技術的處理器設計了兩大模式:傳統IA-32模式(legacy IA-32 mode)和IA-32e擴展模式(IA-32e mode)。在支持EM64T技術的處理器内有一個稱之為擴展功能激活寄存器(extended feature enable register,IA32_EFER)的部件,其中的Bit10控制着EM64T是否激活。Bit10被稱作IA-32e模式有效(IA-32e mode active)或長模式有效(long mode active,LMA)。當LMA=0時,處理器便作為一顆标準的32bit(IA32)處理器運行在傳統IA-32模式;當LMA=1時,EM64T便被激活,處理器會運行在IA-32e擴展模式下。

目前AMD方面支持64位技術的CPU有Athlon 64系列、Athlon FX系列和Opteron系列。Intel方面支持64位技術的CPU有使用Nocona核心的Xeon系列、使用Prescott 2M核心的Pentium 4 6系列和使用Prescott 2M核心的P4 EE系列。

64位技術就像一股不可阻擋的浪潮撲面而來,從今年開始,64位技術将逐步滲透進我們的生活,也許明年這個時候,我們已經習慣了在64位操作系統下運行64位程序。

上一篇:電子印章

下一篇:vm虛拟機

相關詞條

相關搜索

其它詞條