• 4

作業系統&記憶體關聯 的基礎問題,卡很久想不通⋯⋯

你都知道 bit 是位元
那為何 32 bits 會是 2^32 個位元?
32 bits 當然是 32 個位元啊。


講一下數字系統。
假設有個數字系統是 4 個位數 (digit) 的 10 進制:□□□□
那麼這個系統可以記錄 0000 ~ 9999,共 10000 個數字 (number)

假設有個數字系統是 3 個位數 的 2 進制:□□□
那麼這個系統可以記錄 000 ~ 111,共 8 個數字

2 進制的 digit 稱為 binary digit,簡寫成 bit
bit 這個字就是這樣來的

假設有個數字系統是 32 個 bits
那麼這個系統可以記錄 2^32 個數字。


接下來講位址線。
每條位址線可以傳送 0 或 1 這兩個數字
32 條位址線就是一個 32-bit 的數字系統,可以傳送 2^32 個數字
一個數字代表一個位址,2^32 個數字就代表 2^32 個位址


最後講定址。
先試想下列問題

如圖,每間房子都是緊鄰的,每間房子寬度都是 5 m
每間房子依序配給連續的門牌號碼,從 1 配到 24
請問這段路有多長?
5 m * 24 = 120 m

x86 上,一個位址的範圍是 1 Byte。2^32 個位址定位出 1 B * 2^32 = 2^32 B。
(註:不是所有的機器都是 1 Byte,有些是 1 bit,有些是 2 Bytes,... 等)


補充:
位元就是位元,沒有在分什麼作業系統的位元,或是哪裡的位元
如同我開頭說的,位元是數字系統的詞彙。
建議你先從"電子計算機概論"這本書開始看起(書局裡一定都找的到)
這是所有從事電子/電機/資訊相關行業必修的一門課程
基本的電腦知識都是從這本書開始學的
網路上撰寫的文章
很多都是假定讀者是擁有一定的相關常識
初學者很容昜被內容誤導
記憶體的定址單位是 Byte,而不是 Bit,就這麼簡單

前面一堆人轉貼這麼多做什麼,總覺得 01 愈來愈像奇摩姿勢佳了
SkyHoop wrote:
所謂 32 bit ,應該是 2^32(^表示次方)個位元,也就是 4,294,967,296 bit
而大家都說 8 bit = 1 byte ,及 8 位元 = 1 位元組(byte = 位元組,錯誤請導正,謝謝 )

這邊 8 bit = 2^8 = 256 bit,也就是 1 byte 的組合可能
那32位元作業系統,最大支援 4GB 這我就不懂了!!...(恕刪)



很簡單
您是把CPU定址線和資料匯流排
搞混了

基本上來講
32 bit ,是 2^32(^表示次方)個位元,也就是 4,294,967,296 bit
算法是對的

但是
這裡的32 bit
是指CPU對記憶體的定址線只有32 bit
也就是只有32條線
所以記憶體只能到4G的容量

當然
現在的CPU的定址線不只有32 條線

為了系統和程式的穩定
所以Windows才限制定址線在32 條線

因此Windows 7也有一堆破解4G記憶體容量的文章
不過
破解的後果要自己負責喔~~


補充:
Windows 32和64
就是指資料匯流排

32,代表一次可以傳32個bit的資料
64,代表一次可以傳64個bit的資料

SkyHoop wrote:

你們的意思,作業系統的位元,表示是能在同一時間內存取資料的 “個數”
也就是可以一次存取 4,294,967,296 筆資料,也就是 32bit = 2^32 筆資料,
而這資料的大小,如上面那篇文章所說,電腦最小的存取資料大小為 byte,
所以推算出,若要發揮最大的存取 “個數” 也就是 4,294,967,296 筆資料,

那勢必這每筆資料必為最小存取大小,也就是 1 byte ,
若是大於 1 byte,那就無法存取 4,294,967,296 那麼多筆資料,
因為他最終滿足的要件不是存取的資料 “ 個數”,而是所有資料加總的大小,
也就是不能超過 4GB
請問這樣的解釋是對的嗎? 謝謝!!,...(恕刪)



不對
完全不對喔



32bit = 2^32
以定址線而言
指的是記憶體的"範圍""大小""地址"而已
也就是最大到4,294,967,296

就好比
您有4,294,967,296個抽屜

要去哪個抽屜拿資料
就由CPU的32條定址線
來通知

如果裝了
第5,000,000,000個抽屜(5G)
第6,000,000,000個抽屜(6G)
CPU和系統當然不會用到
也無法用到



而作業系統的位元
是指,到了抽屜後
最多可以一次拿多少資料

32位元
最多可以拿32bit=4 byte=4個英文字=2個中文字的資料






SkyHoop wrote:
不好意思,小弟不材,看了不少資料還是看不懂 bit byte 與作業系統的整合問題
以 32bit (俗稱32位元作業系統) 為例,( bit = 位元,錯誤請導正,謝謝 )
所謂 32 bit ,應該是 2^32(^表示次方)個位元,也就是 可以定址 4,294,967,296 Bytes


2^32 Bytes = 4GB

8559no wrote:
很簡單您是把CPU定...(恕刪)


這位兄台說的對 因為定址線的緣故(32條) 所以32BIT的硬體架構最大極限

就是4G 不過Pentinm II開始就有PAE技術,XP系統也能開PAE 能讀到4G記憶體的真實大小

不過最後限制就在作業系統,即使硬體已經可以支援到4G以上,作業系統架構限制

也是沒用,所以最後XP無法使用到4G記憶體 其實是作業系統所導致..

一開始OS架構無法支援 後來可以了也不想改到可以支援 因為你不買新的微軟要賺????

再說XP的記憶體管理也很差 記憶體都不會釋放會一直占用 換掉也好.............

硬體限制 跟 軟體限制 是不同的兩件事情





Bowaa wrote:
記憶體的定址單位是 Byte,而不是 Bit,就這麼簡單

前面一堆人轉貼這麼多做什麼,總覺得 01 愈來愈像奇摩姿勢佳了


這點不對 做byte addressing的是軟體&CPU指令

不是記憶體, 送到記憶體本身的時候會是換算過的bit address

(這個去看單顆記憶體晶片的datasheet就知道)

為什麼CPU設計成byte addressing,而1byte = 8bit則是歷史因素


基本上大家願意講這麼多的原因是知識需要正確的理解以及消化
如果一開始有偏差 後來對於正確的理論就會越來越走偏

理解偏差是甚麼樣子相信這串裡面也有範例了
讀了很多回文,感覺是很會讀書,但不太了解實務及運用。

絕大多數的32bit作業系統在正常情況下,無法讀取到4GB的記憶體,這不是"觀念問題"或觀念的對錯,這是"事實"。

大家算法都很正確,但基本上的觀念/錯誤很簡單,因為多數人只把注意力放在作業系統以及記憶體上面,請問電腦只有作業系統一項嗎,以及只有作業系統需要用記憶體嗎?

計算完很高深的理論值4GB,以及看似很複雜的所謂位址/定址之後,若稍微想一下,這些“總數”必須分給其他元件,例如顯示卡、PCI、ACPI等等之後,請問還會有理論的最大值留下來嗎?


Stallings wrote:
你都知道 bit 是...(恕刪)

Bowaa wrote:
記憶體的定址單位是 ...(恕刪)

8559no wrote:
很簡單
您是把CPU...(恕刪)

venlen wrote:
這位兄台說的對 因為...(恕刪)


先感謝各位的回應,謝謝大家願意花時間為我這電腦白痴解說!!

這邊在稍微統整一下這些資料,再次以我的方式解釋,希望各位幫我看看,謝謝!!


首先,各位有提到,位址線 或 定址線,我不確定是不是同一個東西,

所以我這邊先通稱為 位址線,

⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯

第一Stallings大 所提到的,bit概念,

簡單說,32 = 一個量化數字, bit 是一種進為概念,

因此 32 bit = 一個32位數的數字,但是每一位都以2進位,也就是只有 0 , 1兩位

例: 0000000000000000000000000000000
0000000000000000000000000000001
0000000000000000000000000000002


11111111111111111111111111111111 ( 32位數 )

這共有 4,294,967,296 個 數字可能

而當前討論的例子,CPU 擁有 32條 位址線,也就是每一個位數個由一條線送出 0 or 1,

到這邊就是 32 bit 的概念 跟容量一點關係也沒有


⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯

第二就是統合 Stallings、Bowaa、8559no、venlen 前輩們的意見的想法,

接下來是討論這些 位址 的大小,也就是 32 個位數組成的 數字,

例:0000000000000000000000000000001

他最終就是個 指令,至於這指令卻是占有空間,也就是 1 byte ,

當前的例子中是 1 byte,但非絕對,因當初制定會有所不同,

所以這 4,294,967,296 個數字可能,就是 4,294,967,296 個指令可能,

他們每一個的空間大小就是 1 byte ,所以這些指令的總和大小就等於

4,294,967,296 * 1 byte = 4,294,967,296 byte = 4GB,

而先撇開所謂 硬體限制,單純軟體限制上,就限制了 32 條位址線,因此最多最多

CPU 能使用的 記憶體大小,就是 4GB


⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯


第三是由8559no大所解惑的

也就是所謂 作業系統的 32bit、64bit,則是跟上述的不太一樣,

而是說 CPU 一次所能存取的資料量大小,這時候的 bit 就真的是容量換算上的 bit,

32bit = 4byte = 兩個中文字的大小


這些就是我腦袋消化後的結果,當然當中還有很多細節我可能還沒辦法更深入了解

但單就目前的資料,我這樣的表達方式,是正確的嗎!? 還是依舊錯誤連篇呢!?

希望還有前輩可以解答,但在這之前我又有幾個小問題,希望大家幫忙

⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯

1. 定址線、位址線 ? 一樣的東西? 哪種稱呼才比較常使用?位址匯流排(Address Bus) 是一樣的東西!?



2.資料匯流排(Data Bus),這東西究竟是 CPU 硬體製造上的限制?

還是 windows 作業系統上的限制!?

也就是 CPU 32位元 就是 32條線 64位元 就是 64條線,

所以你今天 買了 32位元 CPU,你就灌不了

64位元的 windows 作業系統?

而你買了 64 位元 CPU 就 32 、64位元 都可以灌,向下相容!?

還是 CPU 根本就沒有分 32位元、64 位元,從頭到尾都是 windows 作業系統限制的!?


最後還是非常感謝那麼多人願意回應我,不怕浪費時間的為我解答,謝謝各位!!
  • 4
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?