Управляемые ОС, такие как Microsoft Singularity и JNode, представляют собой довольно интересную концепцию. По сути, ОС загружается с кодом, написанным на языке низкого уровня (C / C ++ / Assembly), который по существу реализует виртуальную машину. Остальная часть ОС (и все пользовательские приложения) работает на виртуальной машине. В этом есть несколько замечательных вещей. Например, вы неожиданно делаете произвольные указатели устаревшими. И если хорошо написано, вы избавитесь от тонны устаревшего кода, который есть в большинстве современных ОС.
Однако, как недостаток, вы находитесь намного дальше от аппаратного обеспечения, и как разработчик вы теряете возможность опускаться до более низкого уровня абстракции и пачкать руки.
Что вы думаете об этом?
источник
Ответы:
Я думаю, что это еще один случай, когда «это зависит».
Если вы пишете такие приложения, как веб-браузеры, текстовые процессоры и т. Д., Где молниеносная производительность не обязательно является проблемой, тогда этот подход имеет свои преимущества. Используя этот подход, вы можете предложить своим клиентам более безопасный и более контролируемый опыт. Вы не только ограничиваете ущерб, который может нанести вредоносное ПО, но и работаете в более согласованной среде.
Это как разница между консольными и компьютерными играми. Первые точно знают, с каким оборудованием они должны работать, поэтому могут использовать эти знания, тогда как вторые должны уметь справляться с большим разнообразием видеокарт, звуковых карт, скоростей жесткого диска и т. Д.
Тем не менее, будут приложения (такие как игры!), Которые требуют низкоуровневого доступа и по-прежнему должны запускаться «изначально».
Как и управляемые языки, вам придется использовать соответствующий инструмент для работы.
источник
В общем, я думаю, что это хорошая идея, но так как их не так много или почти нет, очень сложно сказать, как они выступят в реальном мире. Я хотел бы, чтобы MS обновила проект Singularity, чтобы мы могли видеть, куда это идет, но я предполагаю, что часть его работает в какой-то версии Windows
источник
Я думаю, что преимущества полностью управляемой ОС огромны, и это может стать будущим, но на это уйдет много лет.
Хорошая управляемая операционная система предоставит вам всю управляемую точку входа, необходимую для выполнения всех необходимых действий на низком уровне, независимо от управляемости: перехвата прерываний и выполнения операций ввода-вывода с устройствами. C # также допускает небезопасный код (имеющий дело с указателями), но он будет разрешен только в «драйверах устройств» (которые будут просто еще одним типом изолированного процесса программного обеспечения).
Преимущества в отношении безопасности, однородности, портативности и особенно надежности, безусловно, превзойдут любой недостаток производительности. Тогда полностью управляемая система на удивление быстро работает, так как больше нет необходимости переключать контекст.
источник
Управляемые ОС, вероятно, чем-то похожи на микроядра - вы жертвуете производительностью ради безопасности.
Могут быть подобные проблемы, так как это требует разделения кода на 2 части:
В зависимости от стоимости входа / выхода из безопасного языка HL это может вызвать проблемы, аналогичные микроядрам - возможно, немного быстрее (выход из HL быстрее, чем полное переключение контекста, но IIRC, например, JNI, довольно дорогой).
Пользовательскому приложению также, вероятно, потребуются отдельные контексты, поскольку многие приложения написаны на других платформах (например, C, Java или .Net). В тех же случаях приложения могут быть привязаны к процессору (компиляторы, музыкальные конвертеры и т. Д.) И могут требовать даже оптимизации ассемблера для выполнения с достаточной скоростью. Кроме того, защита MMU, реализованная на языке HL, вероятно, будет не такой быстрой, как аппаратная, даже если она будет гораздо более точной.
Кроме того, язык HL не владеет операциями низкого уровня. Хотя программное обеспечение обычно разрабатывается с использованием «хороших» методов кодирования, в драйверах нет необходимости. Я не думаю, что они защитят по крайней мере от некоторых ошибок, поскольку ядрам иногда требуется ручное управление памятью.
Наконец, я не думаю, что такая ОС потребует полной виртуальной машины. Поскольку операционная система не может быть построена на принципах компиляции, один раз запускаемых повсюду, на языках HL (даже с GC & co.) Будет лучшим кандидатом.
ОС изначально низкоуровневая. Вы передаете оборудованию не только «произвольный указатель», но, скорее всего, физический адрес, а не виртуальный. Некоторые DMA могут обрабатывать только первые 16 МБ памяти. Хотя такая ОС может сильно упростить, она не избавится от адресов.
free
него, когда Windows фактически начала освобождать память.Я предполагаю, что он получит популярность примерно в то же время, что и микроядра.
источник
Лично я думаю, что идея управляемой ОС немного похожа на коммунизм: хорошая в теории, но неосуществимая для реализации.
Проблема в том, что я просто не вижу способа создать управляемую ОС без полного переписывания ОС с нуля (и я надеюсь, что кто-то может доказать, что я не прав в этой части). Кроме того, как вы десятилетиями неуправляемого кода вписались в управляемую ОС?
Ядра самых популярных операционных систем протестированы в боевых условиях и развивались в течение нескольких десятилетий. Вы не просто переписываете их по прихоти. Не говоря уже о том, что история полна примеров конструкций процессоров и архитектур ядра, которые, несомненно, были лучше, но никогда не могли никого убедить, что они того стоили, чтобы перейти на них.
И наконец, как компания, такая как Microsoft или Apple, собирается продавать управляемые ОС своим клиентам? Будет ли средний пользователь компьютера вообще заботиться о том, является ли его ОС управляемой или неуправляемой?
Выше было отмечено, я надеюсь, что я не прав и что управляемые ОС станут реальностью. Но я скептически. Если мы когда-нибудь увидим это, вероятно, не будет в течение еще одного или двух десятилетий.
источник
Управляемый код - это просто экстраполяция того, что сегодня предлагает вам защита виртуальной памяти, а именно способность компьютера запретить доступ к ресурсам.
IBM уже делает это на своих мэйнфрейм-системах (они просто называют это как-то иначе), так что, на мой взгляд, это просто вопрос времени, прежде чем это произойдет в системах, доступных для широкой публики.
Вас не интересует, работает ли на ноутбуке Google (на котором работает Chrome и, в основном, больше ничего) управляемый код или нет?
источник
Это не совсем так. В JNode, например, есть
Unsafe
класс (и другие), который позволяет вам получать доступ к ячейкам памяти и так далее. Есть также некоторые «магические» классы / методы, которые JIT-компилятор переводит в привилегированные инструкции. Доступ к этим классам / методам ограничен (или будет ограничен) менеджером безопасности, JIT-компилятором и так далее. Но если вы пишете код, который выполняется на уровне операционной системы, эти возможности вам доступны.Предостережение (конечно) в том, что неправильное использование
Unsafe
и связанные с ними классы могут привести к сбою операционной системы немедленно или в будущем.источник
Я сомневаюсь в их полезности для настольных компьютеров. Но время может доказать, что я не прав в этом вопросе.
Но один интересный потенциал на мой взгляд - это серверная операционная система, а точнее гостевая операционная система в виртуализированной среде. Мне никогда не удавалось установить полную установку Windows Server в среде виртуального сервера, зная, сколько ненужных сервисов он выполняет, включая полный графический интерфейс.
Теперь установить что-то вроде Singularity на виртуальном сервере для размещения приложений ASP.NET, это имеет больше смысла. Предполагая, что они могут сделать его легкой ОС.
источник