Czy każdy system operacyjny potrzebuje pamięci RAM?

76

Czy istnieje system operacyjny, którego można używać bez pamięci RAM, a konkretnie taki, w którym mogę utworzyć bootowalny pendrive i używać go na komputerze? Staje się to niezręczne, ponieważ ładowanie systemu polega na ładowaniu systemu operacyjnego do pamięci RAM.

Uwaga: pierwotnie chciałem wiedzieć o systemie operacyjnym bez pamięci RAM, aby sprawdzić, czy mój laptop (który nie uruchamia się, ale wyświetla pusty ekran) Pamięć RAM poszła nie tak, ale podoba mi się sposób, w jaki to pytanie się zawiesiło.

Suvarna Pattayil
źródło
23
Nie jestem pewien, czy procesor może w ogóle funkcjonować bez pamięci RAM, może to być dobre pytanie dla Computer Science.SE . Wiem na pewno, że nigdzie nie dotrzesz, jeśli nawet nie zdołasz przejść przez BIOS.
12
@ AndréDaniel procesor ma pamięć podręczną, która z perspektywy CS jest również pamięcią o dostępie swobodnym. Więc teoretycznie nie trzeba dodatkowych modułów RAM. Ale w praktyce wątpię, aby architektura x86 na to pozwalała.
Philipp
30
Wszystkie te argumenty dotyczące używania pamięci podręcznej procesora mają wątpliwą ważność, ponieważ przynajmniej na x86 pamięć podręczna nie jest pamięcią, do której można uzyskać bezpośredni dostęp. Twój kod zawsze odnosi się do pamięci RAM, ale procesor automatycznie zarządza swoimi pamięciami podręcznymi, tak że w rzeczywistości nie musi pobierać danych z pamięci RAM dla najczęściej używanych danych. Ale znowu, nie ma instrukcji montażu, która mówi „przechowuj to w pamięci podręcznej” „zapisz to w pamięci podręcznej”, są rejestry i jest pamięć główna (z wszystkimi jej dziwnymi trybami dostępu), kropka.
Matteo Italia,
3
(OTOH, teoretycznie można wykorzystać inną pamięć RAM (np. RAM wideo) lub urządzenia peryferyjne zmapowane w fizycznej przestrzeni adresowej)
Matteo Italia
13
Nowoczesne procesory x86 pozwalają umieścić pamięć podręczną w trybie „Pamięć podręczna jako pamięć RAM” - myślę, że w tym celu trzeba ustawić kilka MSR. Może to dotyczyć również niektórych procesorów ARM. Pamięć podręczna na współczesnych procesorach jest większa niż pojemność twoich pierwszych komputerów jako maksymalna pamięć. Jednak na komputerze oprogramowanie wewnętrzne nadal nie uruchamia się bez pamięci RAM. Potrzebujesz niestandardowego oprogramowania układowego lub czegoś innego niż platforma komputerowa.
LawrenceC

Odpowiedzi:

96

Czy każdy system operacyjny potrzebuje pamięci RAM?
W przypadku sprzętu kompatybilnego z IBM PC obowiązkowym krokiem procesu POST systemu BIOS jest sprawdzenie, czy jest pamięć RAM do załadowania systemu BIOS. Opcjonalnie sprawdzenie poprawności działania funkcji RAM przez proces POST. Po zakończeniu procesu POST BIOS ładuje bootloader do pamięci RAM i daje kontrolę bootloaderowi. Tak więc odpowiedź na twoje pytanie („Czy każdy system operacyjny potrzebuje pamięci RAM?”) Brzmi : tak, każdy sprzęt kompatybilny z IBM PC wymaga przynajmniej trochę działającej pamięci RAM do uruchomienia. Dotyczy to każdego systemu operacyjnego działającego na tym sprzęcie.

Zauważ, że w pierwotnym pytaniu OP było odniesienie do „laptopa”, który zinterpretowałem jako: sprzęt kompatybilny z IBM PC. Do końca tej odpowiedzi założę sprzęt kompatybilny z IBM PC.

Czy system operacyjny może uruchomić się z wadliwą pamięcią RAM?
Jeśli RAM jest uszkodzony (nie całkowicie nieobecny / uszkodzony) lub jeśli można (częściowo) zastąpić RAM, może być w stanie uruchomić za pomocą BadRAM z BadMEM łatek jądra. Wymaga to ponownej kompilacji jądra (brzmi łatwiej niż wtedy, gdy robisz to po raz pierwszy) oraz możesz zrestartować komputer i poinformować jądro, gdzie jest zła pamięć. Ładne wyjaśnienie zastosowania Memtest86 / Memtest86 + , BadRAM / BadMEM można znaleźć tutaj .

Czy system operacyjny może uruchomić się bez pamięci RAM i używać pamięci podręcznej procesora jako pamięci RAM?
O ile mi wiadomo, nie ma sposobu na użycie pamięci podręcznej procesora jako pamięci RAM bez pamięci RAM w systemie (jak sugeruje @philipp i inne) w komentarzach. Jeśli tak, dobrze byłoby dodać go tutaj. Jedyny artykuł, jaki mogłem znaleźć na ten temat, to ten artykuł, który stwierdza: „Używanie pamięci podręcznej procesora jako pamięci RAM do momentu zainicjowania pamięci RAM”. Nie jestem pewien, czy (i jak) będzie działać bez pamięci RAM. O ile mi wiadomo, nie ma działającego kodu, który uruchamiałby system operacyjny na komputerze kompatybilnym z IBM. Wszelkie komentarze do proof-of-concept, działającego kodu lub czegokolwiek są mile widziane w komentarzach i dodam je do tej odpowiedzi.

Czy mogę dostać się do BIOS-u?
Pytanie OP jest nieco niejasne, czy laptop jest w stanie przejść test POST systemu BIOS. Jak zauważa @Tonny, żaden system operacyjny nie pomoże ci „ dostać się do BIOS-u ”. Wprowadzić BIOS używając F1lub F2lub F10lub DELlub ESCklucz, w zależności od marki BIOS.

Jak odzyskać dane z laptopa bez pamięci RAM?
Co do celu stojącego za pytaniem: dlaczego potrzebujesz dostępu do laptopa? Prawdopodobnie dlatego, że na dysku twardym nadal znajdują się dane, które chcesz odzyskać? W takim przypadku znacznie łatwiej jest wyciągnąć dysk twardy (patrz instrukcja) i podłączyć go do zewnętrznego urządzenia pamięci masowej lub bezpośrednio do komputera. Oto fajny przewodnik, aby to zrobić.

agtoever
źródło
3
W praktyce to jest możliwe uruchomienie urządzenia z nieco wadliwy RAM (powiedzmy, że tylko jeden bank, który nie działa poprawnie). Jeśli BIOS nie zauważy (lub jeśli zauważy, może to być zwykłe zastąpienie F1), nadal możesz uruchomić system operacyjny taki jak Linux z łatką BadMEM / BadRAM, która instruuje jądro, aby unikało określonych bloków pamięci.
Matteo Italia,
5
@VusP: aby tylko sprawdzić pamięć RAM, użyj livecd / -usb z Memtest86 / Memtest86 +, pomiń testowanie pamięci RAM w BIOSie i uruchom memtest z livecd / -usb.
agtoever
4
Kto powiedział, że testowanie pamięci RAM podczas rozruchu jest „ obowiązkowe ”? To było powszechne, gdy maszyny miały kilka MB lub mniej, ale wkrótce stały się opcjonalne, gdy rozmiary wzrosły, a czas stał się zaporowy.
Andrew Medico,
3
@agtoever: Huh? Sztuczka pamięci podręcznej jako pamięci RAM nie przestaje nagle działać po zainicjowaniu pamięci RAM. Po prostu w tym momencie głupio jest unikać pamięci RAM, więc nikt nigdy nie próbuje. Ale sztuczka nie ma nic wspólnego z niezainicjalizowaniem pamięci RAM; właśnie wtedy jest to przydatne.
Mehrdad
3
@ Hi-Angel, nie można wykonać bezpośrednio z dysku, ponieważ procesor nie ma bezpośredniego dostępu do zawartości dysku. Musi wciskać polecenia do kontrolera dysku i czekać, aż przeniesie bloki danych z dysku do pamięci RAM. Tylko stamtąd procesor może bezpośrednio wykonywać instrukcje.
psusi
33

Jest to teoretycznie możliwe , ale byłoby bardzo powolne, ponieważ musiałby użyć dysku do dowolnego tymczasowego magazynu, który nie mieściłby się w pamięci podręcznej procesora. (Procesory mają kilka megabajtów pamięci podręcznej, ponieważ nawet pamięć RAM jest dla nich zbyt wolna . Pomyśl o tym.) Więc potrzebujesz raczej małego systemu operacyjnego.

(Cóż, wbudowane systemy na chipie mogą wykonywać kod z pamięci RAM lub wewnętrznej pamięci Flash - BIOS komputera może teoretycznie zrobić to samo, ale nie może uruchomić całego systemu operacyjnego.)

Ale kolejną rzeczą jest to, że BIOS działa przed i na zewnątrz dowolnego zainstalowanego systemu operacyjnego, i to BIOS pozwala na rozruch z pendrive'a lub cokolwiek innego. Jeśli więc nie możesz uzyskać dostępu do systemu BIOS, żaden inny system operacyjny na świecie nie pomoże.

grawitacja
źródło
6
Możliwe, że procesor może używać własnej pamięci podręcznej zamiast pamięci RAM. Może to być przydatna funkcja dla tych części kodu BIOS, które działają przed testem pamięci. Ale uruchomienie innego sprzętu bez pamięci RAM może być trudne. Nie byłbyś w stanie wykonać DMA, więc dyskowe operacje we / wy musiałyby być wykonane inaczej. Wydaje mi się, że BIOS nie próbowałby nawet załadować systemu operacyjnego, gdyby nie znaleziono dostępnej pamięci RAM. Rozmiar pamięci podręcznej jest jednak mniejszym problemem. Kilka MB może nie być dużo według współczesnych standardów, ale system operacyjny z czasów, gdy jeden MB RAM był duży, powinien nadal działać na nowoczesnych komputerach.
kasperd
2
@kasperd DEC Alpha został zaprojektowany do uruchamiania pierwszego etapu inicjalizacji po włączeniu z pamięci podręcznej, wstępnie załadowanej z „szeregowej pamięci ROM”. Stało się tak, ponieważ procesor nie mógł uzyskać dostępu do pamięci RAM, konwencjonalnej pamięci ROM ani żadnego innego zasobu odwzorowanego w pamięci (który obejmował wszystkie urządzenia we / wy IIRC) do momentu zainicjowania tabel stron.
zwolnić
@grawity co z dyskami SSD?
TechLife
@TechLife: Wciąż wolniejszy niż RAM o kilka rzędów niż wielkość. Chociaż, jak sądzę, gdybyś używał go jako RAM ... to po prostu nazywałby się RAM, więc nadal nie.
grawitacja
15

Z pewnym wysiłkiem można zaprojektować system, który nie zawiera pamięci RAM. Załaduj oprogramowanie z pamięci ROM (lub pamięci) i zrób wszystko w rejestrach lub w pamięci podręcznej. Taki system miałby wyjątkowo wąskie zastosowanie, a biorąc pod uwagę dzisiejsze ceny pamięci RAM, byłoby trochę bezcelowe. Gotowy laptop nie będzie działał bez wbudowanej pamięci.

Twoje prawdziwe pytanie jest bardziej prawdopodobne: „Jak uzyskać informacje z komputera, który nie chce się uruchomić” i to łatwe. Zdemontuj go, wyjmij napęd i podłącz go do zewnętrznej obudowy napędu.

Należy jednak pamiętać, że każdy komputer na tyle stary, że nie można po prostu uzyskać działającej pamięci RAM o wartości 20 USD, będzie miał napęd ATA (zwykły ATA, a nie SATA). Interfejs ten jest dziś prawie wygasły, więc musisz także znaleźć obudowę dysku z kartą ATA, a także adapter w pełnym rozmiarze do laptopa. Mam taki, który kupiłem w 2000 roku i trzymam kilka starych skrzynek tylko w tym celu.

Piotr
źródło
Zgoda. Brak pamięci RAM oznacza brak stosu, co oznacza brak możliwości wywołania procedury. Każdy kod, który mógłby zadziałać w tej sytuacji, musiałby być starannie wykonany ręcznie.
Loren Pechtel
Prawdziwe. Widziałem kod, który to zrobił. (Byłem pierwszą częścią procedury BIOS-u przed zainicjowaniem kontrolera pamięci).
Hennes,
2
@LorenPechtel To nie do końca prawda. Stos może być (i często jest) przechowywany w pamięci na chipie.
reirab
2
@LorenPechtel nie jest konieczne. ARM nie używa stosu do wywołania procedury.
domen
1
O ile widzę, te układy mają wewnętrzną pamięć SRAM ... która liczy się jako RAM.
domen
10

Jeśli dobrze przeczytam pytanie, wszyscy tutaj szczekają niewłaściwe drzewo.

Mówi wprost: „aby dostać się do BIOS-u”.

Jeśli laptop jest tak zepsuty, że nawet nie dostanie się do BIOS-u, wszystko inne jest bezcelowe.

Nie można uruchomić ŻADNEGO systemu operacyjnego na tym, niezależnie od sytuacji RAM.

Tonny
źródło
8

Twoje założenie, że pamięć jest zła, jest prawdopodobnie nieprawidłowe. Jeśli nie usłyszysz sygnałów dźwiękowych ani komunikatów na ekranie, główną przyczyną jest prawie na pewno awaria procesora (nieco mało prawdopodobne) lub awaria płyty głównej (bardzo prawdopodobne). Płyty główne cały czas zawodzą z powodu złączy lutowanych na zimno, które były częstym zjawiskiem we wczesnych dniach ruchu ROHS i wymogiem stosowania lutu bezołowiowego. Techniki produkcji zostały zoptymalizowane pod kątem użycia lutu ołowiowego, a przemysł zajął trochę czasu, aby złapać i rozwiązać problemy. Wielu producentów komponentów nie było skłonnych wydawać pieniędzy na modernizację swoich procesów. W końcu urządzenia będą testować i wypalać się w porządku, ale zepsują się miesiące lub lata później, po tym, jak prawdopodobnie wygasła jakakolwiek gwarancja. Dopiero wraz z rosnącą górą niepowodzeń i intensywnymi negatywnymi opiniami użytkowników producenci zaczęli ulepszać. W takim laptopie ponowne przepłynięcie płyty głównej w celu naprawy połączeń lutowanych na zimno jest prawie na pewno kosztowne.

szyć
źródło
To możliwe, ale zła pamięć też nie jest zgadywanką. Widziałem, że zła pamięć (a nawet zła pamięć) powoduje wiele razy błąd POST. Oczywiście najłatwiejszym sprawdzeniem pamięci jest zazwyczaj próba uruchomienia z usuniętymi różnymi kijami lub uruchomienie tylko jednym znanym dobrym kijem. Jeśli to rozwiązuje problemy, była to pamięć, gniazda pamięci lub kontroler pamięci.
reirab
5

Większość wczesnych komputerów z lat osiemdziesiątych lub mniej więcej miała system operacyjny (sterowniki sprzętowe, wsparcie IO, ładowanie programu, bardzo prosty interfejs wiersza poleceń itp.) W układzie ROM. Może nieco funkcjonować, nawet gdy układy RAM były nieoperacyjne. Ta funkcja była używana w specjalnych wersjach zawartości pamięci ROM zaprojektowanych do przeprowadzania testów sprzętowych i komunikowania się głównie za pomocą sygnałów dźwiękowych i lampek klawiatury.

CPU ma kilka rejestrów, które pamiętają przynajmniej adres wykonywanego polecenia, ale zwykle nie są one nazywane RAM.

Zwykły kod C nie może działać w systemie bez pamięci RAM, ponieważ używa pamięci stosu do przydzielania zmiennych, a stos jest w pamięci RAM. Po uruchomieniu ostatniego komputera zwykła dynamiczna pamięć RAM początkowo nie jest dostępna, ponieważ urządzenie do odświeżania pamięci RAM wymaga wstępnej konfiguracji do działania. Kod zestawu jest uruchamiany jako pierwszy i inicjuje płytę główną. Pamięć RAM zaczyna działać, a następnie można uruchomić kod C.

h22
źródło
4
Ostatni akapit nie jest do końca prawdą. Stos nie musi znajdować się poza pamięcią RAM. W rzeczywistości dość często stos znajduje się w pamięci na chipie. Nawet na normalnych komputerach stos aktualnie wykonywanego wątku zwykle znajduje się w pamięci podręcznej i jest wypychany do pamięci DRAM tylko wtedy, gdy program planujący zamienia wątki. Napisałem jednak kod dla procesorów DSP, gdzie stos znajdował się w bezpośrednio adresowalnej pamięci na chipie i nigdy nie dotknął pamięci DRAM. Oczywiście, jak sądzę, można argumentować, że w tym przypadku pamięć na chipie jest technicznie RAM.
reirab
4
Ponadto nie jest niczym niezwykłym, że przynajmniej niektóre parametry i zwracane wartości są przekazywane do funkcji C za pomocą rejestrów (a nie stosu). Ponadto zmienne lokalne są również często przechowywane w rejestrach, a nie na stosie przez kompilatory C. Możesz nawet konkretnie zażądać od kompilatora umieszczenia określonej zmiennej w rejestrze za pomocą słowa kluczowego „register”. Oczywiście, gdy funkcja potrzebuje więcej zmiennych lokalnych, niż masz miejsce na rejestrację, musisz wyjść do pamięci, ale jest to ograniczenie sprzętowe, które obowiązuje niezależnie od języka programowania.
reirab
4

Kiedy poszedłem na uniwersytet w 1967 r., Dział informatyki miał Stantec Zebra . Pamięć składała się z magnetycznego bębna o długości 8192 słów. Było też 12 rejestrów i dwa akumulatory. Możesz wziąć pod uwagę tę pamięć RAM, ale nie taką, jaką znamy.

David Marshall
źródło
3

Będziesz potrzebował przynajmniej pamięci podręcznej chipów dla rejestrów (zasadniczo bardzo małej ilości pamięci RAM na chipie), aby jednostka wykonawcza CPU mogła działać. Więc nawet twój procesor ma „RAM”.

Uważam, że żaden system operacyjny Von-Neumann nie został zaprojektowany bez wymaganej pamięci.

Więc nie.

Cześć Lo
źródło
3

Jak wszystkie inne osoby tutaj, zgadzam się co do tego, że potrzebujesz pamięci RAM i nie mogę bez niej pracować, ale czytam również:

(Początkowo chciałem załadować system operacyjny bez pamięci RAM, aby sprawdzić, czy pamięć RAM się zepsuła, ale podoba mi się sposób, w jaki to pytanie się zawiesiło).

To faktycznie istnieje w BIOSie, istnieje funkcja dogłębnego sprawdzenia pamięci RAM. Podczas uruchamiania i wchodzenia do BIOS-u zmień opcję „Szybki autotest po włączeniu” na „wyłączony”, a następnie przeprowadzi pełne sprawdzenie pamięci RAM. Ta opcja powinna znajdować się w „zaawansowanych funkcjach BIOS-u”, coś w rodzaju drugiego wyboru w BIOS-ach AMI.

Mam nadzieję, że postawi cię o krok dalej. ;-)

Olivier M.
źródło
3

Nie potrzebujesz pamięci RAM, np. Użyj maszyny Turinga .

Maszyna Turinga to hipotetyczne urządzenie, które manipuluje symbolami na pasku taśmy zgodnie z tabelą reguł. Pomimo swojej prostoty, maszynę Turinga można dostosować do symulacji logiki dowolnego algorytmu komputerowego, i jest szczególnie przydatna w wyjaśnianiu funkcji procesora wewnątrz komputera.

(Nie uważałbym taśmy za pamięć RAM.)

Teraz twoje prawdziwe pytania powinny dotyczyć „użytecznego” i zdefiniować, co rozumiesz przez „użyteczny” .

Ian Ringrose
źródło
3
Na poziomie koncepcyjnym maszyny Turinga wszystkie typy danych do odczytu i zapisu są zasadniczo równoważne: pamięć RAM, rejestry, pamięć podręczna, taśma magnetyczna, dysk. Jedyną różnicą między nimi jest szybkość dostępu.
Barmar
1
@Barmar RAM oznacza pamięć o dostępie swobodnym. Oznacza to, że możesz uzyskać dostęp do znajdujących się w nim komórek w dowolnej kolejności. Komórki na taśmie w maszynie Turinga są dostępne tylko sekwencyjnie (w dowolnym kierunku lub naprzemiennie). Powiedziałbym więc, że taśma na maszynie Turinga z definicji nie jest pamięcią RAM.
kasperd
1
@Barmar To jest nieprawidłowe. Definicja pamięci RAM nie pozwala na czasy wyszukiwania. Dlatego taśma TM po prostu nie pasuje do definicji RAM, ponieważ nie można uzyskać dostępu do dowolnych komórek bez szukania.
kasperd
1
@Barmar, pojęcie zegara ściennego może nie mieć zastosowania, ale pojęcie czasu, ponieważ w nim wymaga O (n) operacji odczytu, aby się tam dostać, z pewnością tak.
psusi
1
@Barmar, nie, ty nie. Dlatego używamy dużej notacji „O”, aby mówić o czysto matematycznej złożoności, która nie ma związku z tym, ile „czasu” może zająć coś rzeczywistego. Model matematyczny napędu taśmowego w tej TM jest taki, że może on czytać tylko ... w obu kierunkach ... nie przybliżać ani do przodu ani do tyłu, w żadnym czasie. Dlatego jeśli ostatnio czytałeś bajt 1, nie możesz odczytać bajtu 27 bez uprzedniego przeczytania 26 bajtów pomiędzy nimi. Dlatego nie jest to baran. Jeśli potrzebujesz pamięci, która może pominąć te 26 bajtów, niezależnie od tego, czy zajmuje to 0, czy 5 minut, byłby to RAM, a nie taśma.
psusi
3

Istnieją specjalne systemy operacyjne do wbudowania, które wyczerpują się całkowicie z pamięci ROM (pamięć tylko do odczytu). Aby jednak zrobić coś pożytecznego, zwykle potrzebujesz co najmniej niewielkiej ilości pamięci RAM. Nie widziałem jednak komputera, który uruchomiłby się bez pamięci RAM.

Jeśli chodzi o pierwotne pytanie dotyczące testu pamięci, jeśli komputer wykona test POST (tj. Przejdzie autotest po włączeniu zasilania i spróbuje się uruchomić), to Memtest86 został zaprojektowany specjalnie do testowania pamięci RAM. Testuje pierwsze 64 KB pamięci RAM, ładuje się do tej pamięci RAM, a następnie testuje resztę pamięci systemowej tak dokładnie, jak chcesz. Pamięć „płatkowa” (w przeciwieństwie do zwykłej złej pamięci) jest rzadka, ale widziałem, że Memtest86 łapał sporadycznie zły fragment, który został pominięty przez test pamięci komputera (w końcu test pamięci POST ma się zakończyć w rozsądnym czasie , podczas gdy najszybszy test memtest86 trwa 5-10 minut, a bardziej kompleksowe testy trwają kilka godzin).

użytkownik153822
źródło
1

Tak, możesz mieć komputer bez pamięci RAM. W większości procesorów x86 istnieje tryb specjalny, który pozwala na uruchamianie go tylko z pamięcią podręczną. Jeśli sprawdzisz Coreboot (wcześniej Linux), może to zrobić. Nazywa się to cache-as-ram. Właściwie możesz na tym opierać cały system operacyjny, a dzięki nowoczesnym dużym pamięciom podręcznym może nawet mieć GUI (sprawdź menuet-os). Ale nikt jeszcze tego nie zrobił.

Jorge Aldo
źródło