Czy procesor może działać tylko z zasilaczem i pamięcią ROM, używając tylko wewnętrznej pamięci podręcznej jako pamięci RAM?

61

Czy procesor (taki jak Intel i3 / i5 / i7 / Xeon) z wbudowaną pamięcią podręczną RAM może używać tej pamięci jako jedynej funkcjonalnej pamięci RAM bez podłączonych zewnętrznych banków pamięci?

Czy musi istnieć zewnętrzna pamięć RAM, a pamięć podręczna nie może być dostępna ani używana samodzielnie?

Nowoczesne procesory do komputerów stacjonarnych / serwerów często mają więcej wewnętrznej pamięci podręcznej RAM niż wiele komputerów z lat 90. w całej pamięci systemowej, więc powinno być wystarczająco dużo, aby uruchomić prosty kod.

Procesory sprzed istnienia pamięci podręcznej, takie jak 6502, nie byłyby w stanie nic zrobić, ponieważ wewnętrzna pamięć RAM procesora wynosiła tylko kilka bajtów dla licznika adresów i akumulatorów.

Nie jest to kwestia uruchamiania jakichkolwiek nowoczesnych systemów operacyjnych, ale uruchamiania prostego kodu zaprogramowanego w niestandardowej pamięci ROM lub ręcznie wprowadzanego za pomocą szesnastkowej klawiatury wejściowej.

Dale Mahalko
źródło
1
Całkowicie zależy od procesora i tego, co dokładnie rozumiesz przez „pamięć podręczną”, ponieważ niektóre procesory mają wbudowany ram i nie potrzebują zewnętrznych układów.
PlasmaHH
42
Zasadniczo, jeśli umieścisz pamięć adresowalną w samym procesorze, zbudujesz coś, co nazywamy mikrokontrolerem. Te istnieją.
Marcus Müller,
1
Kto powiedział, że w ogóle potrzebujesz pamięci RAM?
Chris Stratton,
1
Zależy, jak zdefiniujesz „funkcję”. Założę się, że i7 jest doskonale zdolny do wytwarzania ciepła z podłączoną tylko baterią.
Dmitrij Grigoryev,
2
Istnieje kilka rzeczy, które możesz zrobić za pomocą kilku rejestrów i bez dodatkowej pamięci RAM. Na przykład generator funkcji.
David Schwartz

Odpowiedzi:

67

Zobacz to bardzo szczegółowe konto sekwencji rozruchowej komputera: http://www.drdobbs.com/parallel/booting-an-intel-architecture-system-par/232300699?pgno=2

Ponieważ w tym momencie nie ma dostępnej pamięci DRAM, kod początkowo działa w środowisku bez stosów. Większość współczesnych procesorów ma wewnętrzną pamięć podręczną, którą można skonfigurować jako pamięć RAM, aby zapewnić stos oprogramowania. Podczas korzystania z tej funkcji pamięci podręcznej jako pamięci podręcznej programiści muszą napisać wyjątkowo ciasny kod, ponieważ eksmisja byłaby nie do zaakceptowania przez system na tym etapie sekwencji rozruchowej; nie ma pamięci do zachowania spójności. Właśnie dlatego procesory działają w trybie „No Evict Mode” (NEM) na tym etapie procesu rozruchu, gdy działają na zasadzie pamięci podręcznej jako pamięci RAM. W NEM brak linii cache w procesorze nie spowoduje eksmisji. Opracowanie kodu przy użyciu dostępnego stosu oprogramowania jest znacznie łatwiejsze, a kod inicjujący często wykonuje minimalną konfigurację, aby użyć stosu jeszcze przed inicjalizacją pamięci DRAM.

Można to zaobserwować, uruchamiając komputer bez pamięci RAM: odtworzy serię sygnałów dźwiękowych. Program, który je odtwarza, jest uruchamiany z BIOS-u Flash ROM.

Widziałem również takie zachowanie na niektórych procesorach ARM. Wewnątrz SoC będą znajdować się rejestry konfiguracji, które pozwolą na użycie pamięci podręcznej jako pamięci RAM na początku sekwencji rozruchowej, w celu uruchomienia programu, który znajdzie, wyliczy i skonfiguruje pamięć DRAM.

pjc50
źródło
2
Więcej szczegółów na temat działania trybu „cache-as-ram” (CAR) x86 , w odpowiedzi, która przedstawia go jako przypadek użycia INVD(po wyjściu z trybu CAR, unieważnij pamięć podręczną zamiast zapisywania bezużytecznych danych w pamięci, potencjalnie ponad coś cennego).
Peter Cordes
Co jest złego w eksmisji, gdy DRAM nie jest dostępny? Czy problem nie polega na czytaniu z pamięci RAM zamiast na zapisywaniu w pamięci RAM?
Mehrdad
14

Zasadniczo pamięci podręcznej nie można adresować. Program nie może celowo przechowywać ani pobierać z niego danych.

Lior Bilia
źródło
2
+1 To bardzo mądra odpowiedź. Cachelines są ładowane i wycofywane do woli z adresowalnych dostępów z pamięci głównej, w prawie losowy sposób.
Ale..chenski
17
Tak, dlatego wymaga specjalnego trybu (jak w odpowiedzi pjc) lub jakiegoś specjalnego oszustwa. Inną opcją (oprócz zaakceptowanej odpowiedzi) może być sprawienie, aby system myślał, że ma trochę pamięci DRAM, ale rzeczywiste zapisy pamięci po prostu wyrzucają dane i odczyty generują zera (lub rzeczywiste dane z pamięci ROM dla pewnego regionu adresów). Dopóki wszystkie obciążenia trafią do pamięci podręcznej, system będzie działał poprawnie. IDK wystarczająco dużo o tym, jak x86 uruchamia się, aby wiedzieć, czy można przejść do trybu 64-bitowego bez potrzeby prawdziwych opróżnień pamięci podręcznej.
Peter Cordes,
3
Jednak procesory Skylake z wbudowaną pamięcią podręczną eDRAM używają jej jako pamięci podręcznej po stronie pamięci (między kontrolerem pamięci a wszystkim innym, w przeciwieństwie do Broadwell), więc mogą nawet buforować dostęp do DMA z urządzeń innych niż procesor lub obciążeń procesora / przechowuje w „nieuleczalnych” regionach pamięci (które omijają L1 / L2 / L3).
Peter Cordes,
3
@PeterCordes Jednak odpowiedź nie brzmi „nie” tylko dlatego, że potrzebny jest tryb specjalny - pytanie dotyczy tego, czy tryb specjalny istnieje.
user253751,
1
Pytanie brzmi - co się stanie, jeśli mimo wszystko użyjesz pamięci podręcznej i upewnisz się, że nigdy nie pominie lub nie zostanie wyczyszczona - staje się możliwa do adresowania w momencie, gdy coś zostanie zapisane na adres w nieistniejącej pamięci RAM, nie? Rzeczywiste zapisy są upuszczane na podłogę, ale odczyt jest w każdym razie podawany z pamięci podręcznej?
rackandboneman
9

Chociaż nie dotyczy to bezpośrednio rodzin procesorów określonych w pytaniu, poniższy schemat działałby na wcześniejszych procesorach x86, więc tak, możliwe jest działanie bez pamięci RAM lub pamięci podręcznej, chociaż takie podejście wymaga pewnych kreatywnych umiejętności programistycznych.

W latach 80. natknąłem się na projekt odbiornika radiowego, który dekodował sygnały czasowe MSF nadawane w Wielkiej Brytanii. Ten projekt wykorzystywał procesor Z80 i miał tylko ROM do przechowywania programu. Całe przetwarzanie i przechowywanie danych zostało przeprowadzone przy użyciu wewnętrznych rejestrów w procesorze. To oczywiście oznaczało, że nie mogło być żadnych wywołań podprogramów, ponieważ dostępna była pamięć do przechowywania stosu.

W tamtych czasach koszt pamięci RAM był wysoki, a ponieważ był to projekt hobbystyczny, obniżenie kosztów było ważne, poza tym, że było to interesujące ćwiczenie akademickie. Było to również przed dniami szeroko dostępnego mikrokontrolera (8751 z eprom kosztował ponad 100 £ IIRC).

uɐɪ
źródło
Ograniczanie się do danych, które mogą być przechowywane w rejestrach, naprawdę ogranicza przydatne funkcje, które możesz wykonywać. Myślę, że pytanie dotyczyło raczej pamięci podręcznej w nowoczesnych procesorach.
Mark Ransom,
Oczywiście nie trzeba dodawać, że nieużywanie pamięci RAM ogranicza możliwą funkcjonalność. Cytowana aplikacja pokazuje, ile jest to możliwe przy bardzo ograniczonych zasobach danych, interfejsie radiowym i wyświetlaczu LCD.
u
-3

Zazwyczaj procesor wymaga zewnętrznego zegara. Ale z tym, tak, może.

John Hamilton
źródło
1
Należy wyjaśnić, dlaczego i dokładnie odpowiedzieć na pytanie użytkowników. Ta odpowiedź jest słaba.
Skok napięcia