Dla procesorów, które używają pamięci (większość z nich) istnieje pewien rodzaj interfejsu pamięci, niektóre mają nazwy (np. Amba, axi, wishbone), inne nie. Z punktu widzenia procesorów jest to adres i dane i proszę albo przeczytać, albo napisać, co jest pod tym adresem. W dawnych czasach miałbyś jeden autobus, a twój flesz, baran i urządzenia peryferyjne zasiadałyby w tym autobusie patrząc na pewne (zazwyczaj górne) fragmenty adresu, aby określić, czy są one adresowane, a jeśli tak, to czytaj dalej lub wskocz na magistrala danych w przeciwnym razie pozostaje trójpromotowa. Dzisiaj, w zależności od układu, itp., Niektóre z tych dekodowania pamięci odbywają się w rdzeniu lub w jego pobliżu, a twój publiczny interfejs do rdzenia lub układu może być kilkoma magistralami, może to być konkretna magistrala flash i konkretny autobus szyny i konkretny dramat bus, itp.
Pierwszy problem z płaską przestrzenią adresową, nawet jeśli został podzielony na flash i ram, część pamięci jest płaska, adres 0 do N-1 dla N bajtów. W przypadku niewbudowanego systemu operacyjnego, aby ułatwić ludziom życie, gdyby program mógł w pewien sposób zakładać, że wszystkie zaczynają się od adresu 0 lub adresu 0x100 lub adresu 0x8000, zamiast konieczności kompilacji w jakiejkolwiek innej wolnej pamięci jest miejsce lub system operacyjny nie musi całkowicie przenosić programu z mniejszej pamięci i zastępować go innym podczas przełączania zadań. Najłatwiejszym sposobem było wykorzystanie segmentu inteli: schematu odsunięcia. Programy zawsze zaczynały się w tym samym miejscu, ponieważ segment kodu został skorygowany przed uruchomieniem programu i zastosowano przesunięcie do wykonania (bardzo uproszczony widok tego modelu), gdy przełączanie zadań między programami właśnie zmieniłeś segment kodu, przywróć komputer do następny program. Jeden program może mieć adres 0x1100, a drugi 0x8100, ale oba programy sądzą, że są pod adresem 0x0100. Łatwy dla wszystkich programistów. MMU zapewniają tę samą funkcjonalność, biorąc ten adres na magistrali procesora i nazywając go wirtualnym adresem, mmu zwykle siedzi blisko procesora między interfejsem pamięci procesorów a resztą układu/świata. Aby ponownie wyświetlić adres 0x0100 w mmu, sprawdź go w tabeli i przejdź do adresu fizycznego 0x0100, a po przełączeniu zadania zmień tabelę tak, aby następne pobranie 0x0100 przechodziło do 0x1100. Każdy program myśli, że działa pod adresem 0x0100, łączenie, kompilowanie, rozwijanie, ładowanie i wykonywanie kodu jest mniej bolesne.
Następną funkcją jest buforowanie, ochrona pamięci itp. Tak więc procesor i jego kontroler pamięci mogą dekodować niektóre adresy przed osiągnięciem mmu, być może niektóre rejestry rdzenia i być może same kontrolki mmu. Ale inne rzeczy, takie jak pamięć i urządzenia peryferyjne, mogą być adresowane po drugiej stronie mmu, po drugiej stronie cache, która często jest następną warstwą cebuli poza mmu. Podczas odpytywania portu szeregowego, na przykład w celu sprawdzenia, czy dostępny jest inny bajt, nie chcesz, aby dostęp do danych był buforowany tak, aby pierwszy odczyt rejestru statusu portu szeregowego faktycznie wyszedł na magistrali fizycznej i dotknął portu szeregowego, a następnie wszystkie następnie czyta przeczytaną nieaktualną wersję w pamięci podręcznej. Chcesz tego dla wartości pamięci RAM, celu pamięci podręcznej, ale dla niestabilnych rzeczy, takich jak rejestry stanu, jest to bardzo złe. Tak więc w zależności od systemu prawdopodobnie nie będzie można włączyć pamięci podręcznej danych, dopóki nie zostanie włączone mmu.Interfejs pamięci na ARM ma na przykład bity kontrolne, które wskazują, jaki to jest dostęp, czy jest to niekwalifikowalny dostęp do pamięci podręcznej, część serii, tego typu rzeczy. W ten sposób można włączyć buforowanie instrukcji niezależnie od buforowania danych, a bez wartości mmu przekaże te sygnały sterujące bezpośrednio do kontrolera pamięci podręcznej, który jest następnie podłączony do świata zewnętrznego (jeśli nie obsługiwał transakcji). Tak więc pobranie instrukcji może zostać zbuforowane ze wszystkich innych elementów, które nie są buforowane. Ale do bufora danych ram dostępu, ale nie rejestru stanu z portu szeregowego, co musisz zrobić, to skonfigurować tabele dla mmu i w środowisku osadzonym możesz po prostu mapować ram jeden do jednego, co oznacza adres 0x1000 wirtualny staje się 0x1000 fizyczne , ale teraz możesz włączyć bit pamięci podręcznej danych dla tego fragmentu pamięci. Następnie dla portu szeregowego możesz odwzorować adresy wirtualne na fizyczne, ale wyczyścisz bit aktywacji pamięci podręcznej dla tego fragmentu pamięci. Teraz możesz włączyć pamięć podręczną danych, odczyty pamięci są teraz buforowane (ponieważ sygnały kontrolne przekazywane przez mmu są oznaczone jako takie, ale dla dostępu do rejestru sygnały sterujące wskazują, że nie można ich zapisać w pamięci podręcznej).
Z pewnością nie musisz mapować wirtualnie na fizyczny jeden do jednego, zależy to od wbudowanego lub niewłączonego systemu operacyjnego, itp. Ale to jest miejsce, w którym wchodzi ochrona. Najłatwiej zobaczyć w systemie operacyjnym. Aplikacja w warstwie aplikacji nie powinna mieć możliwości dostępu do chronionej pamięci systemowej, jądra itp. Nie powinna być w stanie wyłuskać miejsca w pamięci innych aplikacji. Tak więc po włączeniu aplikacji tabele mmu odzwierciedlają dostępną pamięć i dostęp do pamięci, do której nie ma dostępu. Każdy adres niedozwolony przez program jest przechwytywany przez mmu, generowany jest wyjątek/błąd (przerwanie), a jądro/nadzorca przejmuje kontrolę i może sobie poradzić z tym programem. Możesz zapamiętać termin "ogólny błąd ochrony" z wcześniejszych dni w systemie Windows, zanim marketing i inne grupy zainteresowań w firmie zdecydowały, że powinniśmy zmienić nazwę, to było wprost z podręcznika wywiadu, że przerwanie zostało zwolnione, gdy miałeś wadę które nie pasowały do innych kategorii, takich jak pytanie wielokrotnego wyboru w teście A bob, B ted, C alice, D żadnego z powyższych. Ogólna usterka ochrony nie była żadną z powyższych strategii, ale jest najczęstszym trafieniem, ponieważ tak właśnie było, gdy program próbował uzyskać dostęp do pamięci lub wejścia/wyjścia poza przydzieloną mu przestrzeń pamięci.
Inną korzyścią z mmus jest malloc. Przed mmus alokacja pamięci musiała wykorzystywać schematy do ponownego rozmieszczenia pamięci, aby zachować duże puste bloki pośrodku. dla tego następnego dużego malloc, aby zminimalizować "z 4meg za darmo dlaczego mój 1kbajtowy podział się nie powiódł?". Teraz, podobnie jak dysk, przycinasz przestrzeń pamięci na te 4kbyte lub kilka takich rozmiarów. Malloc, który ma rozmiar mniejszy lub mniejszy, pobiera dowolną porcję w pamięci za pomocą wpisu tabeli mmu, aby wskazać na niego i nadać wywołującemu adres wirtualny powiązany z tym wejściem mmu. Potrzebujesz 4096 * 10 bajtów, nie musisz szukać tyle pamięci liniowej, ale znaleźć 10 liniowych wpisów w tabeli mmu, wziąć 10 kawałków pamięci (niekoniecznie sąsiednich) i umieścić ich fizyczne adresy w wpisach 10 mmu.
Najważniejsze jest to, "jak" to robi, że zwykle znajduje się pomiędzy procesorem a pamięcią podręczną lub jeśli nie ma pamięci podręcznej fizycznej szyny pamięci. Logika mmu sprawdza adres, używa go do zaglądania do tabeli. Bity w tabeli zawierają adres fizyczny plus niektóre sygnały kontrolne, które zawierają pamięć podręczną, oraz pewien sposób wskazania, czy jest to prawidłowy wpis, czy chroniony region. Jeśli ten adres jest chroniony, mmu uruchamia przerwanie/zdarzenie z powrotem do rdzenia. Jeśli jest poprawna, modyfikuje adres wirtualny, aby stał się adresem fizycznym na innym/poza mmu, a bity, takie jak bit pamięci podręcznej, służą do informowania o tym, co jest po drugiej stronie mmu, jaki rodzaj transakcji to jest, instrukcja, dane, cacheable, burst, itp. W przypadku osadzonego systemu operacyjnego, który nie jest osem, potrzebny może być tylko jeden stolik mmu. Szybkim sposobem w systemie operacyjnym do wykonywania ochrony na przykład byłoby posiadanie tabeli na aplikację lub podzestaw tabeli (które drzewo przypomina strukturę katalogów), tak, że po przełączeniu zadań wystarczy zmienić tylko jedną rzecz, początek tabeli lub początek jednej gałęzi drzewa w celu zmiany adresów wirtualnych na fizyczne i przydzielonej pamięci (ochrony) dla tej gałęzi drzewa.
Potrzebuje tagu 'praca domowa'? –
Niezupełnie.;-) –
Brak dalszych aktualizacji? –