<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux 中的 32 位與 64 位

          共 3243字,需瀏覽 7分鐘

           ·

          2020-12-26 09:03

          公眾號關(guān)注“杰哥的IT之旅”,

          選擇“星標(biāo)”,重磅干貨,第一時間送達(dá)!

          作者:xiongyuanxiong
          鏈接:https://www.cnblogs.com/xiongyuanxiong/p/3528327.html

          在通用PC領(lǐng)域,不論是windows還是linux界,我們都會經(jīng)常聽到"32位"與"64位"的說法,類似的還有"x86"與"x86_64","i386"與"amd64",這兩組概念之間有著怎樣的聯(lián)系和區(qū)別呢?

          實(shí)際上這兩組概念涉及了三個層次:硬件,系統(tǒng)和軟件。

          1、硬件

          早期的intel處理器,如i386,486,586,奔騰系列的CPU架構(gòu),都是32位的(32位的寄存器,32位的虛擬地址空間),統(tǒng)稱為x86架構(gòu)。

          隨著技術(shù)的發(fā)展,32位CPU已經(jīng)無法滿足需求,intel與AMD采用不同的方法開發(fā)64位架構(gòu)的CPU,intel使用與x86完全不同的IA64架構(gòu),由于與原來的X86完全不兼容,因此在PC領(lǐng)域沒有得到應(yīng)用,只在服務(wù)器領(lǐng)域有一些使用。

          而AMD開發(fā)的架構(gòu)稱為amd64(將寄存器擴(kuò)充為64位,支持64位虛擬地址),能夠完全兼容x86指令集,不用任何修改就能運(yùn)行老的操作系統(tǒng)和應(yīng)用軟件,在PC界得到廣泛的應(yīng)用,現(xiàn)在市場上幾乎所有的PC用途的CPU都是支持amd64指令集的了。

          當(dāng)然intel也很快開發(fā)出支持該指令集的CPU,不過intel將其稱為x64架構(gòu),而不是用amd64這個名字。而在linux中則稱為x86_64,即x86架構(gòu)的64位擴(kuò)展。

          有關(guān)x86_64的詳細(xì)描述可翻閱《深入理解計算機(jī)系統(tǒng)》一書。

          在linux中查看CPU是否64位的方法:如果/proc/cpuinfo內(nèi)的flags字段中含有"lm",則表示使用的是64位CPU(運(yùn)行“grep 'lm' /proc/cpuinfo”命令,輸出不為空)。

          2、系統(tǒng)

          系統(tǒng)同樣可分為32位與64位。在x86_64架構(gòu)的CPU出現(xiàn)之前,PC的操作系統(tǒng)都是用32位,例如windows 2000,xp,當(dāng)時的unix,linux等。

          在x86_64架構(gòu)出現(xiàn)后,系統(tǒng)也就有了兩個版本:32位和64位,兩者的主要區(qū)別在于與硬件體系結(jié)構(gòu)相關(guān)的操作中。

          由于x86_64架構(gòu)完全兼容x86架構(gòu),因此,32位的系統(tǒng)完全可以在x86_64位上運(yùn)行,只不過它只使用了x86部分,沒有完全發(fā)揮硬件的功能而已。

          而64位系統(tǒng)專門針對64位的擴(kuò)展功能而開發(fā)的,就是為了最大限度地發(fā)揮硬件的能力,它無法在x86架構(gòu)的cpu上運(yùn)行。

          另外,不論是windows還是linux,驅(qū)動程序都需要加載到內(nèi)核空間中,因此它的類型(32位或64位)需要跟系統(tǒng)完全相同。

          系統(tǒng)與CPU的關(guān)系如下圖所示:?

          查看linux系統(tǒng)是32位還是64位的方法:執(zhí)行shell命令“arch”,顯示為x86_64表示當(dāng)前系統(tǒng)為64位,顯示為i386,i486等表示系統(tǒng)是32位的。

          3、軟件

          在系統(tǒng)上運(yùn)行的應(yīng)用軟件同樣有32位和64位之分,老的應(yīng)用軟件運(yùn)行在32位CPU及32位系統(tǒng)中,屬于32位軟件。

          出現(xiàn)了64位系統(tǒng)之后,也出現(xiàn)了專門運(yùn)行在64位系統(tǒng),能夠最大限度使用64位系統(tǒng)的擴(kuò)展功能的原生64位程序。

          對于C程序來說,64位程序相比32位程序最大的區(qū)別就是int,long以及指針數(shù)據(jù)類型的長度都是64位的,可以使用64位的虛擬地址空間。

          實(shí)際遠(yuǎn)不止這些,編繹器在將64位C程序翻譯成匯編語言或者機(jī)器語言時,會盡量使用64位處理器的寄存器,盡量避免訪問內(nèi)存,例如把函數(shù)的參數(shù),及局部變量優(yōu)先放在寄存器,而不是在用戶棧中。

          另外在64位系統(tǒng)中,為了兼容數(shù)量眾多的老的應(yīng)用程序,系統(tǒng)都會增加一個虛擬層,用來翻譯x86指令,這樣32位程序也可以在64位系統(tǒng)中運(yùn)行(windows和linux都支持)。

          同樣在64位系統(tǒng)中,使用64位編繹器一般也可以選擇編譯成32位程序(gcc使用-m32編譯成32位可執(zhí)行文件)。

          另外在PC上,軟件能否運(yùn)行,只需看系統(tǒng)是否支持即可,可以不用理會CPU的架構(gòu)。軟件與系統(tǒng)的關(guān)系如下圖所示:

          linux中查看可執(zhí)行文件是32位還是64位的方法:執(zhí)行shell命令“file /usr/bin/xxx", 如果是32位程序,顯示為"ELF 32-bit …";如果是64位,則顯示為:"ELF 64-bit…"。

          4、linux發(fā)行版與內(nèi)核

          在linux發(fā)行版中,一般會針對不同的架構(gòu)發(fā)布不同的安裝光盤,以debian為例,可用于PC的就有i386和amd64這兩個版本。

          根據(jù)上面的描述,這兩個版本的系統(tǒng)都可以安裝在使用64位的CPU的機(jī)器上,而使用32位CPU的機(jī)器上則只能安裝i386版本的系統(tǒng)。

          在debian amd64光盤中帶的內(nèi)核及軟件包全都是64位版本的,而debian i386光盤中則有32位和64位的內(nèi)核,以及32位的軟件,可能是考慮到有些用戶想用64位內(nèi)核來運(yùn)行32位程序吧。

          內(nèi)核源代碼是沒有32位,64位之分的,在編譯內(nèi)核時可以用ARCH參數(shù)手工指定編譯成哪一個架構(gòu)。例如:"make ARCH=i386 menuconfig","make ARCH=i386"用于配置,編譯32位內(nèi)核;

          而"make ARCH=x86_64 menuconfig","make ARCH=x86_64"則用于配置,編譯64位內(nèi)核。

          但是,在debian amd64光盤安裝的系統(tǒng)里編譯的32位內(nèi)核是無法引導(dǎo)的,因?yàn)橄到y(tǒng)安裝的所有軟件包都是原生64位程序,無法在32位內(nèi)核上運(yùn)行,典型的錯誤是提示引導(dǎo)時找不到能運(yùn)行的init程序;

          而使用debian i386光盤安裝的系統(tǒng)中編譯的64位內(nèi)核卻可以使用,只是需要在配置內(nèi)核時加上IA32 Emulation支持(menuconfig的:"Executable file formats/Emulations"-->"IA32 Emulation")。

          基于這樣的原因,我原來用搭建的debian amd64光盤安裝的系統(tǒng)(http://www.cnblogs.com/xiongyuanxiong/p/3523306.html),現(xiàn)在也改成用debian i386光盤來安裝了,這樣就能同時編譯新的32位和64位官方內(nèi)核進(jìn)行對比測試。

          往期資源回顧 需要可自取

          推薦閱讀

          點(diǎn)個[在看],是對杰哥最大的支持!
          瀏覽 36
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本一本在线观看视频干女人 | 欧美大屌操嫩逼小视频 | 插人网站在线看 | 俺去拉官方二区三区 | 台湾长腿美人ladyyuan |