2011-11-18 20 views
5

Przeprowadzam badania z architekturą MIPS i zastanawiałem się, w jaki sposób wdrażane są systemy operacyjne z ograniczonymi instrukcjami i ochroną pamięci oferowaną przez mips. Zastanawiam się, w jaki sposób system operacyjny uniemożliwiłby wykonanie niektórych adresów z różnych zakresów. Na przykład, w jaki sposób system operacyjny może ograniczać działanie komputera PC w określonym zakresie? Innymi słowy, uniemożliwić coś takiego, jak wykonywanie z dynamicznie przydzielanej pamięci?Zapobieganie wykonaniu pamięci MIPS

Pierwszą rzeczą, która przyszła na myśl, są koperty TLB, ale koperty TLB oferują tylko ochronę przed zapisem (a nie wykonywanie).

Nie bardzo rozumiem, w jaki sposób może być obsługiwany przez system operacyjny, ponieważ oznaczałoby to, że każda instrukcja spowodowałaby wyjątek, a następnie WIELE cykli byłoby spalone po prostu sprawdzając, czy komputer był w rozsądnym adresie zasięg.

Jeśli ktoś wie, jak to się zwykle robi? Czy jest to w jakiś sposób obsługiwane przez sprzęt podczas inicjalizacji (np. Podano zakres adresów i wyjątek trafił, jeśli jest poza zakresem?)

Odpowiedz

2

Większość kontroli ochrony odbywa się w sprzęcie, przez sam procesor i nie jest potrzebna dużo zaangażowania ze strony OS.

System operacyjny tworzy specjalne tabele (tabele stron lub deskryptory segmentów lub niektóre z nich), w których zakresy pamięci skojarzyły uprawnienia odczytu, zapisu, wykonywania i użytkownika/jądra, które procesor następnie wewnętrznie buforuje.

Procesor na każdej instrukcji sprawdza, czy dostęp do pamięci jest zgodny z uprawnieniami ustalonymi przez system operacyjny i czy wszystko jest w porządku, kontynuuje. Jeśli istnieje próba naruszenia tych uprawnień, CPU podnosi wyjątek (formę przerwania podobną do tej z urządzeń zewnętrznych we/wy CPU) obsługiwaną przez system operacyjny. W większości przypadków system operacyjny po prostu kończy działanie szkodliwej aplikacji, gdy ma taki wyjątek.

W niektórych innych przypadkach próbuje je obsłużyć i sprawić, że pozornie zepsuty kod działa. Jednym z takich przypadków jest obsługa wirtualnej pamięci na dysku. System operacyjny oznacza region jako nieobecny/niedostępny, gdy nie ma kopii zapasowej w pamięci fizycznej, a jego dane znajdują się gdzieś na dysku. Gdy aplikacja próbuje użyć tego regionu, system operacyjny przechwytuje wyjątek od instrukcji, która próbuje uzyskać dostęp do tego regionu pamięci, wspiera region z pamięcią fizyczną, wypełnia dane z dysku, zaznacza je jako obecne/dostępne i ponownie uruchamia instrukcja, która spowodowała wyjątek. Gdy tylko system operacyjny ma mało pamięci, może odładować dane z określonych zakresów na dysk, oznaczyć te zasięgi jako niedostępne/niedostępne ponownie i odzyskać pamięć z tych regionów do innych celów.

Może być również określony zakodowany na sztywno przez zakresy pamięci procesora niedostępne dla oprogramowania działającego poza jądrem systemu operacyjnego, a procesor może z łatwością dokonać tutaj również sprawdzenia.

To wydaje się być w przypadku MIPS (from "Application Note 235 - Migrating from MIPS to ARM"):

3.4.2 Zabezpieczenie pamięci MIPS zapewnia ochronę pamięci wyłącznie w zakresie opisanym wcześniej tj adresy w górnej 2 GB przestrzeni adresowej nie są dozwolone w trybie użytkownika. Nie jest możliwy precyzyjny system ochrony.

enter image description here

This document listy „MEM - strona winy dane sprowadzić; wyrównane dostępu do pamięci; naruszenie ochrony pamięci” wśród innych wyjątków MCI.

Jeśli określona wersja procesora MIPS nie ma dokładniejszych kontroli zabezpieczeń, mogą one być emulowane tylko przez system operacyjny i przy znacznych kosztach. System operacyjny musiałby wykonać instrukcję kodu za pomocą instrukcji lub przetłumaczyć ją na prawie równoważny kod z wprowadzonymi sprawdzeniami adresów i dostępu i wykonać to zamiast oryginalnego kodu.

2

Jest to rzeczywiście robione z TLB. No Execute Bits (NX bits) stał się popularny zaledwie kilka lat temu, więc starsze procesory MIPS nie obsługują go. Najnowsza wersja MIPS architecture (Release 3) i SmartMIPS Application-Specific Extension obsługuje ją jako opcjonalną funkcję pod nazwą XI (Execute Inhibit).

Jeśli masz mikroukład bez tej funkcji, masz pecha. Tak jak powiedział już Alex, nie ma prostego sposobu na emulowanie tej funkcji.