標籤:

計算機中的存儲器們

計算機當中包含的存儲器可以分為隨機存儲器(RAM)和只讀存儲器(ROM)(好像硬碟也能叫存儲器,但本文不討論)。RAM的特點是要持續供電才能保存數據,可讀可寫,而ROM就算斷電,也不會丟失數據,而且是只讀的。

我們打開機箱的蓋子,羅列一下所有的RAM和ROM,首先主板上有一根或者幾根4G/8G的RAM,還有一個CMOS,它也是RAM,顯卡上面有2G的RAM(就是顯存),還有ROM,網卡上面也有ROM。而CPU和這些存儲器是通過匯流排連在一起,我們整理一下,他們的邏輯連接大概就像這樣。

為什麼每個介面卡都有ROM

ROM是只讀的,硬體廠商在製作硬體的時候會在裡面設置一些程序(比如一些可供調用的函數,就是所謂的BIOS),至於這些函數是幹嘛用的下面再說。你也許會說,為什麼不把所有的程序都寫到主板上的ROM裡面?我們拿顯卡舉例吧,生產顯卡的廠商不止一家,他們的ROM裡面的程序是不一樣的,如果把所有的程序都寫到主板上的ROM,那我以後換顯卡該怎麼辦?這其實就像你寫程序一樣的,你應該不會把所有功能都寫在一個函數裡面吧?!所以不同的介面卡都有自己的ROM。

這些不同的存儲器在物理上都是獨立的,但是在CPU眼裡,它們被抽象成了一塊邏輯存儲器(就是所謂的內存地址空間),每個設備對應邏輯存儲器的一個地址範圍,就像這樣。

當cpu訪問相應的內存區段時,實際上就是在訪問相應設備的內存。當然,這裡還有一個有意思的問題,就是CPU如果要把顯存上的一個地址的內容挪到cpu內部,就像執行指令"MOV ax, [B800:0]"(當然這是偽代碼,實際上是不合法的。B800:0是顯存上的一個地址),但CPU如何根據這個指令判斷出應該去顯存上面去讀數據,而不是其他什麼存儲器呢?這涉及到計算機組成原理了,有興趣的可以去學習下。

接下來我們聊一個有意思的話題,就是主板上的ROM在操作系統被載入的過程中扮演一個什麼樣子的重要角色?我們知道任何程序(包括操作系統)一開始是被存在硬碟上的,想要得到執行的話,肯定需要被載入到內存條上才行,可是誰來載入呢?因為我們在按下開機鍵的時候,內存條才剛剛通電,上面什麼東西都沒有啊!等等,我們好像漏掉了什麼?回顧上面的內存地址空間示意圖,我們主板上的Rom已經有程序了,且內容不會因為斷電而消失記得嗎?所以當機器通電的時候,cpu就可以訪問到System Rom 裡面的BIOS程序了。所以整個過程是這樣的,當我們按下開機鍵的時候,cpu直接從某一地址開始執行代碼(在8086CPU的機器中,該地址是FFFF:0000,這個地址剛好在"System Bios Rom"這個地址範圍內,我們不需要關心這具體地址是什麼,反正就是在硬體層面「寫死了的地址」),好了,接下來想幹嘛就幹嘛,當然也可以從硬碟把操作系統的代碼給load到內存條(這是籠統的描述,以後再詳細描述操作系統從硬碟載入到內存的過程),這差不多就是「盤古開天地」的過程了。


推薦閱讀:

諾基亞有哪些操作系統?
深入計算機底層,從幾本靠譜的書開始
CPU怎樣對存儲器們進行讀寫?
一個Mac小白的自我修養
如何減少電腦中病毒的幾率?

TAG:操作系統 |