Цитата(gerber @ Feb 24 2018, 11:07)

Поэтому ничто не мешает разместить 2 приложения в едином адресном пространстве. Нужен соответствующий ELF Loader, и хватило бы памяти в принципе по объему.
Ну если можно генерить исполняемые файлы и с таблицей перемещения - то пойдёт.
А если я хочу вычислить адрес целевой переменной используя скажем - операции побитового OR или AND или сдвига над адресом? В варианте с линейным виртуальным адресным пространством, перемещаемым при помощи MMU - да никаких проблем! А вот если попробуем слинковать это в перемещаемый загрузочный образ, то я думаю получим ошибку компоновщика, так как не допускается обычно при этом никаких операций кроме сложений и вычитаний.
Цитата(gerber @ Feb 24 2018, 11:07)

Даже на "взрослых" машинах с MMU вполне себе существует Linux без swap-файла и подкачки памяти с диска. MMU тут не при деле, кто будет генерировать исключение при нехватке памяти - MMU или менеджер памяти, не суть важно
Менеджер памяти - это кто? Это тот, кто выделяет динамическую память из пула? malloc()/free()?
А при чём тут "исключение при нехватке памяти"? Если сумме работающих в данный момент приложений нужно больше памяти, чем есть физически, то это и решается подкачкой, когда страницы памяти, к которым давно не было обращения, вытесняются из физической памяти в своп, и это место физической памяти используется для хранения других страниц виртуальной памяти. А когда приложению потребуется вытесненная память, оно просто обратиться по данным адресам, MMU сгенерит исключение и страница будет возвращена из свопа в физическую память. И делается это силами MMU. Приложение про всю эту кухню не знает, и не обращается к менеджеру памяти вообще после того как получит весь необходимый объём от malloc().
Без MMU такой механизм организовать невозможно. Соответственно те задачи, которые нормально выполняются в среде с виртуальной памятью, не могут быть выполнены никак без неё - только переписыванием алгоритма работы приложения.
Опять-же - как без MMU отображать в память процесса какие-то общие ресурсы? Например библиотеки? (есть в линухе аналог DLL?) Или файлы (чтобы работать с ними просто как с областями памяти)?
Далее - как полноценно защитить адресное пространство одного приложения от другого без MMU? Да никак.
Если всё это вычесть из полноценного линуха на ядре с MMU, то останется он при этом линухом или это будет уже совсем другая ОС? Да нет конечно - это совсем другая уже ОС будет.