題 每個操作系統都需要RAM嗎?


是否有可以在沒有RAM的情況下使用的操作系統,特別是我可以在計算機中創建可啟動的pendrive並在其中使用它?這很麻煩,因為啟動本質上是在RAM中加載OS。

注意: 我原本想知道一個沒有RAM的操作系統,以檢查我的筆記本電腦(它沒有啟動但顯示空白屏幕)RAM已經壞了,但我喜歡這個問題滾雪球的方式。


77
2017-08-31 08:12


起源


我不確定CPU是否甚至可以在沒有RAM的情況下運行,這可能是一個很好的問題 計算機科學.SE。我確實知道的是,如果你甚至沒有設法通過BIOS,你將無法到達任何地方。
@AndréDaniel一個CPU具有緩存,從CS的角度來看,它也是隨機存取存儲器。所以 理論上 你不需要額外的RAM模塊。但 在實踐中 我懷疑x86架構允許這樣做。 - Philipp
關於使用處理器緩存的所有這些論點都具有可疑的有效性,因為至少在x86上,緩存不是可以直接訪問的內存。您的代碼始終引用RAM,但處理器會自動管理其緩存,因此實際上不必為最常訪問的數據獲取RAM中的數據。但同樣,沒有彙編指令說“將它存儲在緩存中”“在緩存中寫入”,有寄存器和主存儲器(具有所有奇怪的訪問模式),週期。 - Matteo Italia
(OTOH,理論上你 可以 利用其他RAM(例如視頻RAM)或物理地址空間中映射的外圍設備) - Matteo Italia
現代的x86 CPU允許你將片上緩存置於“緩存為RAM”模式 - 我認為需要設置一些MSR才能做到這一點。這也可能適用於某些ARM CPU。現代CPU上的緩存數量大於您的第一台PC可能具有的最大內存量。但是,在PC上,如果沒有RAM存在,固件仍然無法啟動。您需要一個自定義固件或不是PC平台的東西。 - LawrenceC


答案:


每個操作系統都需要RAM嗎?
對於IBM PC兼容硬件,a 強制性 的一步 BIOS POST過程 是檢查是否有RAM加載BIOS。 POST過程可選擇正確檢查RAM功能。在POST過程之後,BIOS將引導加載程序加載到RAM並控制引導加載程序。那麼問題的答案(“每個操作系統都需要RAM嗎?”)是: 是的,每個IBM PC兼容硬件都需要至少一些正常運行的RAM來啟動。對於在該硬件上運行的任何操作系統都是如此。

請注意,在OP的原始問題中,有一個“筆記本電腦”的引用,我將其解釋為:IBM PC兼容硬件。對於本答案的其餘部分,我將假設IBM PC兼容硬件。

操作系統是否可以使用錯誤的RAM啟動?
如果您的RAM出現故障(並且沒有完全缺席/損壞)或者您可以(部分)更換RAM,您可以使用 BadRAM 的 BadMEM 內核補丁。它需要你重新編譯內核(聽起來比你第一次這樣做更容易),你可以重新啟動並告訴內核你的內存不好。使用的一個很好的解釋 的Memtest86/的Memtest86 +,可以找到BadRAM / BadMEM 這裡

操作系統可以在沒有RAM的情況下啟動並使用CPU的緩存作為RAM嗎?
據我所知,沒有辦法將CPU的緩存用作RAM,而係統中沒有任何RAM(如@philipp和其他人所建議的那樣)。如果有的話,最好在這裡添加它。我能找到的關於這個主題的唯一論文是 這篇報告 表明:“在RAM初始化之前,使用處理器的緩存作為RAM”。不確定它是否(以及如何)起作用  內存。據我所知,沒有 工作的 在IBM兼容PC上引導操作系統的代碼。在評論中歡迎任何對概念證明,工作代碼或任何內容的引用,我將其添加到此答案中。

我可以進入BIOS嗎?
如果筆記本電腦能夠通過BIOS POST,OP的問題有點模糊。正如@Tonny指出的那樣,沒有 OS 會幫助你“進入BIOS“。你使用的進入BIOS F1 要么 F2 要么 F10 要么 DEL 要么 退出 鍵,取決於您的BIOS品牌。

如何從沒有RAM的筆記本電腦恢復數據?
至於你的問題背後的目標:為什麼你需要訪問你的筆記本電腦?可能是因為硬盤上仍有數據要恢復?如果是這種情況,可以輕鬆拔出硬盤(參見手冊)並將其連接到外部存儲設備或直接連接到PC。 這裡 這是一個很好的指南。


96
2017-08-31 13:40



在實踐中它 是 可以運行RAM有些缺陷的機器(比如,只有一個銀行無法正常工作)。如果BIOS沒有註意到(或者,如果確實注意到,可能存在通常的F1覆蓋),您仍然可以使用BadMEM / BadRAM補丁運行像Linux這樣的操作系統,它指示內核避免指定的內存塊。 - Matteo Italia
@VusP:只需檢查你的RAM使用帶有Memtest86 / Memtest86 +的livecd / -usb,跳過BIOS中的RAM測試並從livecd / -usb運行memtest。 - agtoever
誰說在開機時測試RAM是“強制性“?當機器有幾MB或更少的時候很常見,但隨著尺寸的增加很快變得可選,時間也變得過高。 - Andrew Medico
@agtoever:嗯? RAM初始化時,緩存為RAM的技巧不會突然停止工作。只是在這一點上,避免使用RAM是愚蠢的,所以沒人試過。但這個伎倆與RAM未初始化無關;那就是它實際上有用的時候。 - Mehrdad
@ Hi-Angel,它無法直接從磁盤執行,因為cpu無法直接訪問磁盤的內容。它必須將命令戳入磁盤控制器並等待它將數據塊從磁盤傳輸到ram中的某個位置。只有從那裡才能直接執行cpu指令。 - psusi


這是可能的 理論上,但它會非常慢,因為它需要將磁盤用於任何不適合CPU緩存的臨時存儲。 (CPU有幾兆字節的緩存,因為即使是RAM也是如此 太慢了 對他們來說想一想。)所以你需要一個相當小的操作系統。

(好吧,嵌入式片上系統 能夠 從RAM或內部閃存執行代碼 - 理論上PC BIOS可以執行相同的操作,但它無法運行整個操作系統。)

但是,另一件事是,BIOS運行 之前 和  任何已安裝的操作系統,它是允許您從pendrive或其他任何東西啟動的BIOS。所以,如果你無法訪問BIOS,那麼 沒有 世界上其他操作系統將幫助您。


33
2017-08-31 12:25



可能是CPU可以使用自己的緩存而不是RAM。對於那些在內存測試之前運行的BIOS代碼部分,它可能是一個有用的功能。但讓其他硬件在沒有RAM的情況下工作可能會很棘手。您將無法執行DMA,因此磁盤I / O必須以不同方式完成。如果沒有找到可用的RAM,我想BIOS甚至不會嘗試加載操作系統。但是,緩存的大小不是問題。按現代標準來說,幾MB可能不是很多,但是從那些MB的RAM很多的那些日子開始的操作系統應該仍然適用於現代計算機。 - kasperd
@kasperd DEC Alpha 設計用於從緩存運行其第一階段的開機初始化,從“串行ROM”預加載。這是因為在初始化頁表之前,CPU無法訪問RAM,常規ROM或任何其他內存映射資源(包括所有I / O設備,IIRC)。 - zwol
@grawity固態硬盤怎麼樣? - TechLife
@TechLife:比RAM還慢幾個數量級以上。雖然,我想,如果你將它用作RAM ......它就是這樣 叫 RAM,所以仍然不。 - grawity


您可以通過一些努力設計一個不包含RAM的系統。從ROM(或存儲)加載您的軟件,並在寄存器或緩存中執行所有操作。這樣的系統使用範圍非常狹窄,而今天的RAM價格有點無意義。沒有一些板載內存,現成的筆記本電腦將無法運行。

您真正的問題更可能是“如何從無法啟動的計算機中獲取信息”,這很容易。拆卸它,卸下驅動器,然後將其連接到外部驅動器盒。

但請注意,任何足夠大的計算機,你不能只為它獲得價值20美元的工作RAM,它將具有ATA(常規ATA,而不是SATA)驅動器。這個界面今天幾乎絕跡,所以你還需要找到一個帶有ATA卡的驅動器盒以及一個全尺寸到筆記本電腦大小的適配器。我有一個我在2000年買的,我為此目的保留了幾個舊案例。


15
2017-08-31 23:41



同意。沒有RAM意味著沒有堆棧,這意味著無法調用例程。任何可以在這種情況下工作的代碼都必須仔細手工組裝。 - Loren Pechtel
真正。我見過代碼可以做到這一點。 (在內存控制器初始化之前,我是BIOS例程的第一部分)。 - Hennes
@LorenPechtel這並不完全正確。堆棧可以(並且經常)存儲在片上存儲器中。 - reirab
@LorenPechtel沒有必要。 ARM不使用堆棧來調用例程。 - domen
據我所知,這些芯片有內部SRAM ......就算是RAM。 - domen


如果我正確地閱讀了這個問題,那麼這裡的每個人都在咆哮錯誤的樹。

他明確表示“為了進入BIOS”。

如果筆記本電腦壞了,它甚至不會進入BIOS,其他一切都毫無意義。

無論RAM情況如何,您都無法在此處啟動任何操作系統。


10
2017-09-02 07:45





您對內存不好的假設可能無效。如果沒有發出嗶嗶聲或屏幕消息,根本原因幾乎可以肯定是CPU(有些不太可能)或主板出現故障(很可能)。由於冷焊點,主板一直處於老化狀態,這在ROHS運動的早期和使用無鉛焊料的要求中很常見。 製造技術已經針對使用鉛基焊料進行了優化,業界花了一些時間來抓住並解決問題。許多組件製造商不太願意花錢來升級他們的流程。畢竟,在任何保修可能到期後,這些設備都會在幾年或幾年之後進行測試和刻錄。只有越來越多的失敗和用戶的強烈負面反饋,製造商才開始改進。 在這樣的筆記本電腦上,讓主板重新流動以糾正冷焊點幾乎肯定是成本過高的。


8
2017-09-01 10:42



這是可能的,但糟糕的記憶也不是一個糟糕的猜測。我已經看到壞內存(甚至是壞的內存套接字)導致多次POST失敗。當然,最簡單的內存檢查通常只是嘗試使用不同的支架移除引導或僅使用一個已知的好棒進行引導。如果這解決了問題,它可能是內存,內存插槽或內存控制器。 - reirab


大多數20世紀80年代或以後的早期計算機都有ROM芯片中的操作系統(硬件驅動程序,IO支持,程序加載,非常簡單的命令行界面等)。即使RAM芯片無法操作,它也可能有些功能。此功能用於特殊的ROM內容版本,專為運行硬件測試而設計,主要通過蜂鳴器和鍵盤燈進行通信。

CPU有幾個寄存器來記住至少執行的命令的地址,但這些寄存器通常不稱為RAM。

常規C代碼無法在沒有RAM的系統中運行,因為它使用堆棧內存來分配變量,堆棧在RAM中。當最近的計算機啟動時,常規動態RAM最初不可用,因為RAM刷新設備需要初始設置才能工作。彙編代碼首先運行並執行主板初始化。 RAM開始工作,然後C代碼可以運行。


5
2017-09-02 17:00



最後一段並非完全正確。堆棧不必位於片外RAM中。實際上,堆棧位於片上存儲器中是很常見的。即使在普通機器上,當前正在執行的線程的堆棧通常也在緩存中,並且只有在調度程序交換線程時才會被推送到DRAM。不過,我已經為DSP編寫了代碼,其中堆棧位於可直接尋址的片上存儲器中,從未觸及過DRAM。當然,我想你可以說在這種情況下片上存儲器在技術上是RAM。 - reirab
此外,使用寄存器(而不是堆棧)將至少一些參數和返回值傳遞給C函數並不罕見。此外,局部變量通常也存儲在寄存器中,而不是存儲在C編譯器的堆棧中。您甚至可以特別請求編譯器使用'register'關鍵字將特定變量放入寄存器中。當然,一旦函數需要比你有寄存器空間更多的局部變量,你需要去內存,但這是一個適用的硬件約束,無論編程語言如何。 - reirab


當我1967年去大學時,計算機係有一個 Stantec Zebra。存儲器由8192字磁鼓組成。還有12個寄存器和2個累加器。您可能會考慮RAM而不是我們所知道的。


4
2017-09-03 08:45





您至少需要片上高速緩存來存儲寄存器(本質上是非常少量的片上RAM),以便CPU執行單元可以正常工作。所以即使你的CPU也有'RAM'。

沒有Von-Neumann OS的設計沒有我相信的內存需求。

所以不行。


3
2017-09-02 11:17





與其他所有人一樣,我確實同意你需要RAM並且沒有它就無法工作,但我也閱讀了以下內容:

(我原本想加載一個無RAM的OS來檢查RAM是否有   變壞了,但我喜歡這個問題滾雪球的方式。)

這確實存在於BIOS中,有一個功能可以深入檢查RAM。 在啟動並進入BIOS內部時,將“快速開機自檢”選項更改為關閉,它將對您的RAM執行完整的檢查。 此選項應位於“高級BIOS功能”中,類似於AMI BIOS上的第二選擇。

希望這會讓你更進一步。 ;-)


3
2017-09-03 05:45





你沒有 需要 RAM,例如,使用a 圖靈機

圖靈機是一種操縱符號的假想設備   根據規則表的一條膠帶。儘管很簡單,   圖靈機可以適用於模擬任何計算機的邏輯   算法,特別適用於解釋a的功能   計算機內的CPU。

(我不認為磁帶是RAM。)

現在你真正的問題應該是詢問“有用”並用“有用”來定義你的意思


3
2017-09-03 08:14



在圖靈機的概念層面,所有類型的讀寫數據存儲都基本相同:RAM,寄存器,緩存,磁帶,磁盤。它們之間的唯一區別是訪問速度。 - Barmar
@Barmar RAM表示隨機存取存儲器。這意味著您可以按任何順序訪問其中的單元格。圖靈機上磁帶上的單元只能按順序訪問(無論是方向還是交替)。所以我說Turing機器上的磁帶根據定義不是RAM。 - kasperd
@Barmar那是不對的。 RAM的定義不允許尋道時間。因此,TM的磁帶根本不符合RAM的定義,因為您無法在不尋找的情況下訪問任意單元。 - kasperd
@Barmar,掛鐘時間的概念可能不適用,但時間概念,因為它需要O(n)讀取操作到達那裡,當然。 - psusi
@Barmar,不,你沒有。這就是為什麼我們使用大的“O”符號來談論純粹的數學複雜性,這與復雜的“時間”無關。該TM中的磁帶驅動器的數學模型使得它在任何方向上都只能讀取......而不是在任何時間內向前或向後縮放。因此,如果您上次讀取字節1,則在未先讀取其間的26個字節的情況下,無法讀取字節27。這就是為什麼它不是ram。如果你想要的內存可以超過這26個字節,無論是0或5分鐘,那都是ram,而不是磁帶。 - psusi


嵌入式使用的專用操作系統完全由ROM(只讀存儲器)運行。但是,為了做任何有用的事情,您通常仍需要至少少量的RAM。我還沒有看到一台沒有RAM的PC。

至於關於內存測試的原始問題,如果計算機將POST(即使其通過Power On Self-Test並嘗試啟動),則Memtest86專門用於測試RAM。它測試第一個64KB的RAM,將自身加載到該RAM中,然後根據需要徹底測試系統內存的其餘部分。 “Flakey”內存(而不僅僅是簡單的壞內存)並不常見,但我看到Memtest86間歇性地發現計算機的內存測試錯過了(畢竟,POST內存測試意味著在合理的時間內完成雖然memtest86的最快測試運行時間為5-10分鐘,但更全面的測試需要數小時。)


3
2017-09-04 18:56