Предотвратяване на изпълнение на MIPS памет

Правя някои проучвания с MIPS архитектурата и се чудех как операционните системи се внедряват с ограничените инструкции и защита на паметта, които mips предлага. Специално се чудя как една операционна система би предотвратила изпълнението на определени диапазони от адреси. Например, как една операционна система може да ограничи компютъра да работи в определен диапазон? С други думи, предотвратяване на нещо като изпълнение от динамично разпределена памет?

Първото нещо, което ми дойде на ум, е с TLB, но TLB предлагат само защита срещу запис в паметта (а не изпълнение).

Не виждам съвсем как би могло да се обработи и от операционната система, защото това би означавало, че всяка инструкция ще доведе до изключение и след това МНОГО цикли ще бъдат изгорени само за проверка дали компютърът е в нормален адресен диапазон.

Ако някой знае, как се прави обикновено? Обработва ли се по някакъв начин от хардуера по време на инициализацията (напр. дава му се диапазон от адреси и се прави изключение, ако е извън обхвата?)


person Rebecca Couture    schedule 18.11.2011    source източник


Отговори (2)


Повечето от проверките за защита се извършват хардуерно, от самия процесор, и не изискват много участие от страна на операционната система.

ОС създава някои специални таблици (таблици на страници или дескриптори на сегменти или някои подобни), където обхватите на паметта имат свързани разрешения за четене, запис, изпълнение и потребителски/ядрови разрешения, които процесорът след това кешира вътрешно.

След това процесорът при всяка инструкция проверява дали достъпът до паметта отговаря или не на разрешенията, установени от ОС, и ако всичко е наред, продължава. Ако има опит за нарушаване на тези разрешения, процесорът предизвиква изключение (форма на прекъсване, подобна на тези от външни за процесора I/O устройства), което операционната система обработва. В повечето случаи операционната система просто прекратява неправилното приложение, когато получи такова изключение.

В някои други случаи се опитва да се справи с тях и да накара привидно счупения код да работи. Един от тези случаи е поддръжката на виртуална, дискова памет. ОС маркира регион като неприсъстващ/недостъпен, когато не е архивиран от физическа памет и данните му са някъде на диска. Когато приложението се опита да използва този регион, ОС улавя изключение от инструкцията, която се опитва да осъществи достъп до този регион на паметта, поддържа региона с физическа памет, попълва го с данни от диска, маркира го като присъстващ/достъпен и рестартира инструкция, която е причинила изключението. Всеки път, когато на операционната система липсва памет, тя може да разтовари данни от определени диапазони на диска, да маркира тези диапазони като неприсъстващи/недостъпни отново и да възстанови паметта от тези региони за други цели.

Възможно е също да има специфични твърдо кодирани от процесора диапазони на паметта, недостъпни за софтуер, работещ извън ядрото на ОС, и процесорът може лесно да направи проверка и тук.

Това изглежда е така за MIPS (от „Бележка за приложението 235 – Мигриране от MIPS към ARM“):

3.4.2 Защита на паметта MIPS предлага защита на паметта само до степента, описана по-рано, т.е. адресите в горните 2 GB на адресното пространство не са разрешени, когато сте в потребителски режим. Не е възможен по-фин режим на защита.

въведете описание на изображението тук

Този документ изброява "MEM - страница грешка при извличане на данни; неправилно подравнена достъп до памет; нарушение на защитата на паметта" сред другите MIPS изключения.

Ако конкретна версия на MIPS CPU няма повече фини проверки за защита, те могат да бъдат емулирани само от операционната система и на значителна цена. ОС ще трябва да изпълни кодова инструкция по инструкция или да го преведе в почти еквивалентен код с вмъкнати адрес и проверки за достъп и да изпълни това вместо оригиналния код.

person Alexey Frunze    schedule 18.11.2011

Това наистина се прави с TLB. Без изпълнение на битове (NX битове) стана популярен само преди няколко години, така че по-старите MIPS процесори не подкрепете го. Най-новата версия на MIPS архитектурата (версия 3) и SmartMIPS Specific Application Extension го поддържа като незадължителна функция под името XI (Execute Inhibit).

Ако имате чип без тази функция, нямате късмет. Както вече каза Алекс, няма лесен начин за емулиране на тази функция.

person Mackie Messer    schedule 18.11.2011