Почему бы не создать ОС, работающую в оперативной памяти?

Почему бы не создать ОС, работающую в оперативной памяти?

Возможно, это не тот сайт StackExchange, чтобы задать этот вопрос, но я не нашел лучшего. Кажется, нет такого сайта для вопросов об операционных системах.

Недавно я размышлял об ОС, работающей исключительно в оперативной памяти, и о том, что она имела бы массу преимуществ.

  • Создать такую ​​ОС было бы гораздо проще, поскольку не пришлось бы иметь дело с файловыми системами, кэшированием и т. д.
  • Это было бы намного быстрее.
  • Программы было бы проще писать, поскольку им не нужно было бы ничего загружать и сохранять.
  • Вместо того, чтобы писать исходный код и затем компилировать, программы можно было бы напрямую манипулировать в памяти. REPL-ы приближаются к этому, но почему бы не пойти до конца? ТакжеLightTableпохоже на это в том смысле, что оно 'позволяет вам изменять запущенные программы', но я думаю, что это можно развить дальше. Очевидно, нам понадобится какой-то другой способ манипулирования/создания программ в памяти.
  • Базы данных будут значительно упрощены, поскольку не нужно будет кэшировать запросы. Они могут даже не понадобиться вообще.
  • Не требуется загрузка или выключение.

Очевидно, что при таком подходе есть проблемы:

  • Память энергозависима: вам придется менять оборудование, чтобы память всегда поддерживалась в рабочем состоянии с помощью резервной батареи или чего-то еще.
  • Есть много ситуаций, когда данные будут слишком большими, чтобы поместиться в оперативную память. Например, большие веб-сайты с огромными базами данных, люди с огромными коллекциями музыки/видео и т. д. Однако у большинства людей нет огромных коллекций видео, они смотрят потоковое видео с Netflix. Например, посмотрите на успех ChromeBook, у которого всего 16 ГБ SSD.
  • обновление ОС в памяти может быть сложным, но некоторые языки уже делают это, например Java, Erlang с возможностью горячей замены

В любом случае, я, должно быть, что-то упускаю, иначе все компьютерщики, которые намного умнее меня, уже сделали бы это, но что именно?

решение1

Вы не сможете эффективно использовать оперативную память, если у вас есть только оперативная память, по двум причинам:

  1. Если страница «грязная», но к ней нет доступа, ее придется хранить в оперативной памяти, даже если вы предпочли бы использовать оперативную память для других целей.

  2. Каждый раз, когда приложение может использовать память или не использовать ее, вам придется сказать «нет», если только вы не можете учесть все уже сделанные вами резервирования, даже если большинство из этих резервирований вряд ли когда-либо будут использованы, поскольку в противном случае вам пришлось бы принудительно завершать процессы.

Итак, все, что у вас есть, это оперативная память, и вы не можете использовать ее эффективно. Это был бы ужасный рецепт для универсальной операционной системы.

Но основная причина, по которой это плохая идея, проста — наличие вещей, отличных от оперативной памяти, не заставляет вас их использовать. Это простопозволяетвы можете использовать их, если это выгодно. Вы не можете сделать вещи лучше, убирая варианты.

решение2

Цены на ОЗУ и дисковое хранилище различаются на порядок даже сегодня. Это означает, что по мере роста потребностей в хранении, хранение всего в ОЗУ становится намного дороже, чем альтернативы. Это также относится к памяти ПЗУ (должно быть чем-то энергонезависимым, чтобы загрузить ее), где использование небольшого объема и размещение остальных необходимых программ/кода на диске является более экономичным выбором, чем все в ПЗУ.

Жесткий диск емкостью 1 ТБ за 50 долларов против 1 ГБ оперативной памяти за 30 долларов

120 ГБ SSD за 100 долларов против 16 ГБ ОЗУ за 150 долларов

Я купил такой компьютер с одним ОЗУ несколько десятилетий назад и до сих пор им пользуюсь. Tandy Model 102 с 24k статической ОЗУ. У него все еще была своего рода файловая система, поскольку вам все еще нужно было организовывать и выбирать документы и программы. Не прижился из-за цены — когда я его купил, он стоил 600 долларов.

введите описание изображения здесь

решение3

Вы можете запустить ОС Linux полностью из оперативной памяти (после загрузки с постоянного носителя или из PXE).

Вам просто нужно создать пользовательский initrd, создать ramfs и смонтировать его как root после заполнения.

Однако существуют некоторые практические ограничения, поскольку оперативная память относительно дорогая и мала по сравнению с твердотельными накопителями, жесткими дисками и т. д.

решение4

Встроенные ОС часто могут работать полностью в оперативной памяти, в зависимости от приложения. Янаписал одиннесколько лет назад для микроконтроллера Atmel.

В 1980-х годах существовало множество систем, которые могли работать полностью в оперативной памяти. Технически вам не нужно былолюбойдиск в оригинальном IBM PC или XT, поскольку они могли загружаться прямо в интерпретатор BASIC, встроенный в ROM. Все ранние машины Commodore (например, VIC-20, C64, 4+, C16 и т. д.) (и многие другие) были такими же.

В 1990-х годах самой популярной потребительской системой со всей ОС, исполняемой в оперативной памяти, была PalmOS, которая изначально не имела никакой файловой системы (внутренне все хранилось в одной большой (нереляционной) базе данных записей оперативной памяти. Если вы помните файлы PRC и PDB, то там были просто дампы этих записей оперативной памяти для определенного ресурса приложения или хранилища данных). Только после того, как они ввели внешние опции хранения, в ОС был встроен какой-либо доступ к файловой системе, и даже тогда, если вы не использовали карты SD или MMC в своем устройстве, система работала полностью из оперативной памяти. Приложениям не нужно было «загружаться», поскольку они работали практически in situ (хотя они могли выделять стек и пространство кучи, естественно).

Ядро Linux можно настроить для работы полностью из ОЗУ. Это не так уж и полезно для вычислений общего назначения (где устройство не будет знать, что вы собираетесь ему передать), но если вы знаете конкретные границы памяти для конкретного приложения, вы можете настроить и запустить его таким образом. У вас не будет никакого свопа, и вам придется использовать что-то для загрузки ядра в первую очередь с любым кодом приложения, который вы хотите запустить, но это можно сделать (хотя, конечно, в реальном сценарии вам понадобится по крайней мере какая-то прошивка для хранения данных ядра и приложения на случай повторной инициализации устройства).

Почему мы не часто видим это на практике за пределами определенных областей встроенного пространства? Даже встроенные устройства должны инициализироваться изчто-нибудь, и в наши дни флэш-память довольно дешева и надежна, что делает довольно простым и дешевым, по крайней мере, добавление небольшого твердотельного хранилища для загрузки. И если ваш объем для устройства не большой, наличие микросхем ПЗУ, сделанных для хранения вашей ОС для начальной загрузки/повторной инициализации, может быть дорогим. Конечно, в более универсальных ПК, где производитель не знает, какую нагрузку вы собираетесь поместить в систему, возможность иметь постоянное хранилище, которое может использоваться в качестве резервного хранилища для обмена страницами виртуальной памяти, является огромным преимуществом. Но для более пользовательских потребностей, не требующих огромного хранилища, существует множество ОС, которые могут работать полностью только из ОЗУ.

Связанный контент