關於計算機記憶體的疑問

2021-06-09 22:12:56 字數 1084 閱讀 8279

大家都知道,計算機啟動時,最開始從實體地址0xffff0處執行bios程式,而bios程式是固化在rom中

於是我想,這個位址應該不屬於記憶體條。進一步說,如果bios rom大小為64k,那麼它就應該占用f000:0~f000:ffff的位址;相應地,視訊記憶體bios可能占用e0000~bffff位址空間,還有其他一些bios都會占用部分位址空間。如果rom和ram(記憶體條)真的互不相干,只是邏輯上組成了計算機的記憶體空間,那麼可以說明一下2點:

1. 往rom中寫資料是無效的。例如mov [f000:1],ax(指令不一定正確,為了說明問題方便而已)這條指令不會對f0001單元有任何改變;mov [b800:0],ax是往視訊記憶體裡寫資料,不經過記憶體條,因為這個位址是顯示卡視訊記憶體的,和記憶體條沒半毛錢的關係

2. cpu可訪問的儲存單元(rom和ram)是和位址匯流排相連線的,主機板上位址匯流排的布局決定了該主機板能接受多大的顯示卡,想在同一塊主機板上更換更大視訊記憶體顯示卡是不行的。另外1g記憶體也不是連續的儲存單元,它被各種rom分割開來

以上兩點,應該都好做實驗論證,可惜我沒做過,希望有經驗的朋友告知真想,謝謝~

不過,我在win7自帶的dos工具下,往bios rom位址空間寫過資料,當時是可以寫的。後來想了下,該dos是執行於虛擬86模式下,而該模式下的位址不是真正的實體地址,也就不能證明什麼

後來,我 了解到bios對映技術,即是系統將各種bios位址對映到記憶體條裡,而f0000~fffff 等這些位址還是在記憶體裡,只不過約定這些位址單元不可修改。。 那麼這樣是不是就反駁了上述猜想呢。 但還是有些疑惑。 既然這樣,那麼32根位址匯流排就都是和記憶體條連線的,各種rom裡的程式也都是通過對映技術最終在記憶體條裡執行。但另一問題又來了,沒有位址匯流排,cpu如何訪問rom呢,即使對映技術,也得先訪問rom吧。

還有一種猜想,32根位址匯流排既連線rom位址空間,同時也連線了記憶體條ram。 不過這樣也還是有疑問,同乙個位址,cpu如何知道是去訪問rom還是記憶體條ram呢,計算機從不允許二義性

我個人還是比較肯定第一種猜想,之前聽朋友說過買了2根記憶體條(共4g),但作業系統只能識別2.9g,可能的原因就是 雖然有4g記憶體條,但只能占用較少的位址空間,其他的位址空間被各種rom占用了

關於這些疑問,清楚的朋友,請指教下小弟,先謝謝了:)

計算機記憶體

1.1 計算機硬體記憶體架構。計算機cpu central processing unit 和記憶體的互動是最頻繁的,記憶體是我們的快取記憶體區。使用者磁碟和cpu的互動,而cpu運轉速度越來越快,磁碟遠遠跟不上cpu的讀寫速度,才設計了記憶體,使用者快取使用者io等待導致cpu的等待成本。但是隨著...

計算機記憶體定址

摘自 1 基本概念 cpu段式管理 段式管理的基本原理是指把乙個程式分成若干個段 segment 進行儲存,每個段都是乙個邏輯實體 logical entity 乙個使用者作業或程序所包含的段對應乙個二維線形虛擬空間,程式通過分段 segmentation 劃分為多個模組,故可以對程式的各個模組分別...

計算機記憶體管理

在計算機中,儲存區域主要分為 他們的執行速率自下而上加快,與之相應的造價越高。其中,硬碟的執行效率最慢,暫存器的效率最快。在c 中,記憶體主要分為五個區,分別是 區是用來儲存程式的所有 以及字串常量等在編譯期間就能確定的值,在程式的整個生命週期內,在常量資料區的資料都是可用的。在這個區域內,所有的資...