處理器、指令集架構和作業系統——32-bit與64-bit

d7Derik發表於2018-03-20

下圖是一個典型系統的硬體組成,其中的匯流排、PC(程式計數器)和暫存器的大小都被設計成字(word)。字長(即字的位元組數)是一個基本的系統引數,在不同的系統中通常不一樣,如嵌入式裝置往往只有1或2個位元組,而常見的系統則為4位元組或8位元組。
典型系統的硬體組成
我們在安裝作業系統和軟體的時候通常會面臨32-bit與64-bit兩種選擇,並且有時還需要了解自己電腦的處理器是32bit還是64-bit的。
那麼,上面提到的字長與32-bit、64-bit到底有什麼關係呢?

一、處理器

32-bit處理器指的是其暫存器、地址匯流排或資料匯流排的字長為4位元組(即32bits)的處理器。與之對應,64-bit處理器指的是其暫存器、地址匯流排或資料匯流排的字長為8位元組(即64bits)的處理器。
以下摘自wikepedia對32-bit64-bit處理器的定義:

In computer architecture, 32-bit integers, memory addresses, or other data units are those that are 32 bits (4 octets) wide. Also, 32-bit CPU and ALU architectures are those that are based on registers, address buses, or data buses of that size. 32-bit microcomputers are computers in which 32-bit microprocessors are the norm.

In computer architecture, 64-bit computing is the use of processors that have datapath widths, integer size, and memory address widths of 64 bits (eight octets). Also, 64-bit computer architectures for central processing units (CPUs) and arithmetic logic units (ALUs) are those that are based on processor registers, address buses, or data buses of that size. From the software perspective, 64-bit computing means the use of code with 64-bit virtual memory addresses.

處理器的內部硬體結構決定了它是32-bit還是64-bit。64-bit的地址匯流排是32-bit的兩倍,因此可定址空間更大,使應用程式具有更大的虛擬地址空間;64-bit每次能夠處理的字長比32-bit更大,因而在一些對效能要求高的場合更有優勢。

二、指令集架構

有一些軟體在下載的時候會提示選擇“x86”還是“x86-64”版本。這裡的“x86”和“x86-64”其實是指令集架構的名稱。
通俗地說,指令集架構(Instruction set architecture,ISA)就像是特定處理器的設計圖紙,規定了該類處理器支援哪些機器指令(指令集)、暫存器有哪些狀態以及輸入輸出模型。
根據指令集結構的設計,在處理器上通過硬體電路進行實現,就得到了支援該指令集架構的處理器。同一個指令集架構可以有多種不同的實現方式,基於同一指令集架構的應用程式可以相互移植。

根據wikipedia更加嚴格的定義,指令集架構是計算機的抽象模型,而指令集架構的在特定處理器上的實現方式則稱為微架構(Microarchitecture)。

指令集是計算機的抽象模型,是軟體和硬體之間的介面。它定義了計算機支援的資料型別、暫存器等具有哪些狀態以及這些狀態各自的含義、指令集(一組構成計算機機器語言的機器指令)和輸入輸出模型。一個ISA可以有多個不同的實現,但是建立在同一個ISA之上的軟體可以執行於該ISA的不同實現。
微架構(Microarchitecture)是給定ISA在特定處理器上的實現方式。同一個ISA可以使用不同的 Microarchitecture來實現。
計算機架構是微架構和指令集的總和。

指令集架構規定了處理器的指令集——該硬體所支援的機器指令(可以用更具有可讀性的組合語言來描述)。作業系統和其它應用程式的程式碼最終都要轉化為對應機器指令,才能被處理器解釋和執行。

可見,指令集架構決定了處理器的實現。也就是說,指令集架構的32-bit或64-bit決定了對應處理器的位數。例如,x86-64 ( 也稱為x64、x86_64、AMD64和Intel 64)是X86指令集的64-bit版本,同時也支援32-bit和64-bit的指令集。

三、作業系統與應用程式

作業系統建立在處理器之上(如下圖所示),利用處理器的指令集來進行硬體管理和資源抽象。根據目標處理器的不同,作業系統也相應地分為32-bit和64-bit的系統。
作業系統提的分層檢視
現在的大部分處理器都是64-bit的,支援64-bit作業系統;同時,這些處理器也完全相容32-bit作業系統。但是,32-bit的處理器則不能安裝64-bit的作業系統,因為它只支援32-bit的指令集。

應用程式利用作業系統提供的服務來完成特定的任務。64-bit作業系統通常能同時支援32-bit和64-bit的應用程式,但是32-bit的作業系統則不支援64-bit的應用程式(除非通過某些虛擬化來實現)。

四、如何檢視位數

如何檢視自己的處理器和作業系統是32-bit還是64-bits?
這裡給出了Windows的檢視方法,下面介紹linux下的檢視方法。執行lscpu命令,如下圖所示:
lscpu命令執行效果
“Architecture”表示CPU的型別:”x86_32” 為32-bit,“x86_64”則為64-bit;
“CPU op-mode(s)”表示linux系統的型別:只有“32-bit”為32-bit,包含“64-bit”則為64bit。


參考:
《深入理解計算機系統》

相關文章