關於CPU位數,OS位數以及內存大小關系的一點總結


(這個學期做助教,說來好慚愧啊,雖然我也是考研進來的,但是就在兩年前復習的資料居然全部都忘光了。對大二的孩子們提問的問題多半都解決不了!!!越來越覺得自己的學習方法有問題了,總是想着一些知識能夠根據自己多看幾遍印象就深刻了,或者說每次記憶知識時總是想下次再記在腦海里吧!這樣導致很多東西必須看資料才能想起來:啊原來是這樣的,我看過啊,我知道的啊!這樣的陋習一定要趕緊改正了,每次學習一個新的知識,都要記在腦海里,深刻地理解一下!!!)

1. CPU位數:一個時鍾周期內處理器處理的二進制位數。

CPU位數 = CPU中寄存器的位數 = CPU一次並行處理的數據寬度

CPU為了實現其功能一般設計了指令集,即是CPU的全部指令,這就是機器語言。計算機的所有功能都是基於CPU的指令集。

如Intel 8086 CPU 是16位,其指令集也是16位。如Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,這是為了向上兼容。

 

2. 操作系統位數

操作系統位數 = 其所依賴的指令集位數 <= CPU位數

操作系統位數對CPU位數有向上兼容,如32位CPU上運行16操作系統,64位CPU上運行32位操作系統等情況。

 

3. 內存容量與操作系統位數的關系。(有種說法是:32位操作系統最大只能支持4G內存)

在使用計算機時,其支持的最大內存是由操作系統硬件兩方面決定的。

在早期的PC機中,采用的是三總線結構:數據總線,地址總線和控制總線。分別來實現不同的功能:數據總線用來傳輸數據,地址總線用來傳輸地址,控制總線用來傳輸一些控制信號。但在現在的PC機中,一般使用了總線復用功能。如在PCI總線中,地址總線和數據總線總是分時復用的(也就是說假如PCI總線有32為數據總線,這32位數據總線在某個時刻傳輸數據,在下一個時刻卻用來充當地址總線的作用)。

回顧了關於總線的一點知識后,先來說硬件方面對內存容量的控制作用。

在計算機中地址總線的數目決定了CPU的尋址范圍,這種由地址總線對應的地址稱為 物理地址

先說一下硬件方面的因素,在上面已經提到了地址總線,在計算機中 CPU的地址總線數目 決定了CPU 的尋址范圍,這種由地址總線對應的地址稱作為物理地址。假如CPU有32根地址總線(一般情況下32位的CPU的地址總線是32位,也有部分32位的CPU地址總線是36位的,比如用做服務器的CPU),那么提供的可尋址物理地址范圍 為 232=4GB(在這里要注意一點,我們平常所說的32位CPU和64位CPU指的是CPU一次能夠處理的數據寬度,即位寬,不是地址總線的數目)。自從64位CPU出現之后,一次便能夠處理64位的數據了,其地址總線一般采用的是36位或者40位(即CPU能夠尋址的物理地址空間為64GB或者1T)。CPU訪問任何存儲單元必須知道其物理地址。

再說說物理地址,線性地址,邏輯地址的關系:

1) 物理地址(Physical Address): 剛剛講過了,由CPU地址總線的位數決定。

2) 線性地址(Linear Address): 如果沒有開啟分頁機制,線性地址就等於物理地址。如果開啟了分頁機制,線性地址到物理地址需要經過二級地址轉換。線性地址可以很大,但最終要運行在物理地址上,而缺頁機制和進程掛起等,就是為了讓遠比物理內存大的程序,運行在如此小的物理內存中。在網上看到一個例子,生動又形象:好比公交車上讓座,假設座位是內存,其他站立空間是硬盤,剛上車的時候你很高興,你和你女朋友(進程A,B)都有座位(進入內存),如果此時,有個孕婦上車了,售票員大姐(操作系統)發現了,"孕婦優先",於是開始問"誰給孕婦讓個座啊"(進程調度),不過很不幸,這個系統是非搶占式的,孕婦(進程S)只好等待,作為一個有理想有道德的程序猿(優先級低),當仁不讓,自己站了起來了(進程掛起),操作系統一看,有個家伙把座椅(內存)釋放出來了,於是排隊等候的孕婦就坐到了你原來的位置,你切換到公交地板上(硬盤)。車到某站,孕婦下車了,於是你重新坐上座位(內存占有),在公家車的整個運營過程中,座位(內存)是有限的,而人不不斷上下,所以人上來首先站在車廂內,然后根據各種成文的,不成文的規矩,占有或者釋放內存(座位)。座位是有限的,而人相對來說是無限的,怎么利用有限的資源,服務更多的進程,這或許是操作系統應該考慮的。

3) 邏輯地址(Logical Address): 指分段機制提供的地址,由段部分和一個便宜部分構成。段機制是虛擬地址到線性地址的基礎。線性地址 = 段基址 + 偏移地址。例如,你在進行C語言指針編程中,可以讀取指針變量本身值(&操作),實際上這個值就是邏輯地址,它是相對於你當前進程數據段的地址,不和絕對物理地址相干。應用程序員僅需與邏輯地址打交道,而分段和分頁機制對您來說是完全透明的,僅由系統編程人員涉及。應用程序員雖然自己可以直接操作內存,那也只能在操作系統給你分配的內存段操作。

 

這三種地址關系為,邏輯地址經過段式映射(Segmentation Translation)到線性地址線性地址經過頁面映射(Page Translation)后,得到物理地址

 

言歸正傳,再說說操作系統對內存容量的控制作用。

在上面中有提到,用戶使用計算機時,直接操縱的只能是邏輯地址,要經過操作系統的轉換后才能變換為物理地址。如對於32位的操作系統而言,其邏輯地址編碼采用的地址位數是32位,那么操作系統所提供的邏輯地址尋址范圍為:232 = 22 * 230 = 4GB(所以在32位CPU和32位的操作系統中,最大支持的內存為4G)。但是理論上是4G的內存,在我們真正使用時並不到4G,大約只有3.2G左右。這是因為在intel x86架構下,采用的是內存映射技術(Memory-Mapped I/O, MMIO),也就說將4GB邏輯地址中一部分要划分出來與BIOS ROM、CPU寄存器、I/O設備這些部件的物理地址進行映射,那么邏輯地址中能夠與內存條的物理地址進行映射的空間肯定沒有4GB了。

 

 參考文獻:

【1】http://blog.csdn.net/ray_zhang_3/article/details/5447140

【2】 http://www.cnblogs.com/dolphin0520/archive/2013/05/31/3110555.html 

【3】http://bbs.51cto.com/thread-1089741-1.html

【4】http://blog.csdn.net/macrossdzh/article/details/5954763 

【5】http://laoxu.blog.51cto.com/4120547/1166661

【6】http://ilinuxkernel.com/?p=414

【7】http://blog.csdn.net/linpeng12358/article/details/41450805

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM