Как вы думаете, управляемые ОС - хорошая идея? [закрыто]

15

Управляемые ОС, такие как Microsoft Singularity и JNode, представляют собой довольно интересную концепцию. По сути, ОС загружается с кодом, написанным на языке низкого уровня (C / C ++ / Assembly), который по существу реализует виртуальную машину. Остальная часть ОС (и все пользовательские приложения) работает на виртуальной машине. В этом есть несколько замечательных вещей. Например, вы неожиданно делаете произвольные указатели устаревшими. И если хорошо написано, вы избавитесь от тонны устаревшего кода, который есть в большинстве современных ОС.

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

Что вы думаете об этом?

Чинмай Канчи
источник
Я боюсь отвечать, так как я склонен к языкам высокого уровня, так как они являются единственными языками, которые я использовал
TheLQ
2
Я думаю, что с быстрыми компьютерами это большое дело. Тем не менее, если MSFT реализует его, он будет либо хорош, либо отстой - ничего промежуточного не будет.
Работа
Обратите внимание, что «устаревшая версия» - это то, что заставляет работать существующие приложения. Не стоит недооценивать важность фактического использования чего-либо.

Ответы:

8

Я думаю, что это еще один случай, когда «это зависит».

Если вы пишете такие приложения, как веб-браузеры, текстовые процессоры и т. Д., Где молниеносная производительность не обязательно является проблемой, тогда этот подход имеет свои преимущества. Используя этот подход, вы можете предложить своим клиентам более безопасный и более контролируемый опыт. Вы не только ограничиваете ущерб, который может нанести вредоносное ПО, но и работаете в более согласованной среде.

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

Тем не менее, будут приложения (такие как игры!), Которые требуют низкоуровневого доступа и по-прежнему должны запускаться «изначально».

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

ChrisF
источник
3
Я действительно не согласен. Нет никакой причины иметь игру, запускающуюся нативно, и нет никакой необходимости быть нативной, чтобы перейти на низкий уровень, если операционные системы предоставляют вам все необходимые управляемые точки входа. Конечно, есть некоторый недостаток производительности (на самом деле незначительный, если вся система управляется), но сегодня у нас достаточно вычислительной мощности и много потребности в высоконадежном программном обеспечении.
Wizard79
@Lorenzo Games уже уделяет достаточно внимания компьютерам, поэтому производительность очень важна. Тем не менее, я не уверен, насколько сильно это повлияет на производительность, если виртуальная машина будет выполнять только
внутренние
4
@TheLQ: дело в том, что играм уже не приходится иметь дело с «низкоуровневыми вещами», поскольку всегда есть какое-то промежуточное программное обеспечение (DirectX, Open GL и т. Д.). Конечно, они требуют значительных вычислительных ресурсов, но использование промежуточного программного обеспечения уже снижает производительность. Это было бы просто управляемое (и сопряженное) промежуточное ПО.
Wizard79
3
Если операционная система заботится о JITting, вы получите управляемый код, который выполняется более или менее быстро, чем «родной» код. Помните, что если вы должны иметь контроль над программой в виде ассемблера, вы всегда можете использовать программу непосредственно в байт-коде.
Чинмай Канчи
3
Afaik, MS Singularity получает значительное повышение производительности из-за того, что ему вообще не нужно переключаться между режимом ядра и режимом пользователя. Форкинг тоже становится намного дешевле.
9000
3

В общем, я думаю, что это хорошая идея, но так как их не так много или почти нет, очень сложно сказать, как они выступят в реальном мире. Я хотел бы, чтобы MS обновила проект Singularity, чтобы мы могли видеть, куда это идет, но я предполагаю, что часть его работает в какой-то версии Windows

Вальтер
источник
3

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

Хорошая управляемая операционная система предоставит вам всю управляемую точку входа, необходимую для выполнения всех необходимых действий на низком уровне, независимо от управляемости: перехвата прерываний и выполнения операций ввода-вывода с устройствами. C # также допускает небезопасный код (имеющий дело с указателями), но он будет разрешен только в «драйверах устройств» (которые будут просто еще одним типом изолированного процесса программного обеспечения).

Преимущества в отношении безопасности, однородности, портативности и особенно надежности, безусловно, превзойдут любой недостаток производительности. Тогда полностью управляемая система на удивление быстро работает, так как больше нет необходимости переключать контекст.

Wizard79
источник
Вы уверены, что переключение контекста не нужно? Вам все еще нужно запустить несколько программ одновременно.
Работа
Если и программы, и код выполняются в ВМ, переключение контекста может отсутствовать. Тем не менее, это потребует переопределения MMU на языке HL, поэтому я действительно сомневаюсь, что это принесет много пользы.
Maciej Piechotka
2

Управляемые ОС, вероятно, чем-то похожи на микроядра - вы жертвуете производительностью ради безопасности.

Могут быть подобные проблемы, так как это требует разделения кода на 2 части:

  • Низкоуровневое ядро, написанное на C / ассемблере
  • Ядро высокого уровня, написанное на управляемом языке

В зависимости от стоимости входа / выхода из безопасного языка HL это может вызвать проблемы, аналогичные микроядрам - возможно, немного быстрее (выход из HL быстрее, чем полное переключение контекста, но IIRC, например, JNI, довольно дорогой).

Пользовательскому приложению также, вероятно, потребуются отдельные контексты, поскольку многие приложения написаны на других платформах (например, C, Java или .Net). В тех же случаях приложения могут быть привязаны к процессору (компиляторы, музыкальные конвертеры и т. Д.) И могут требовать даже оптимизации ассемблера для выполнения с достаточной скоростью. Кроме того, защита MMU, реализованная на языке HL, вероятно, будет не такой быстрой, как аппаратная, даже если она будет гораздо более точной.

Кроме того, язык HL не владеет операциями низкого уровня. Хотя программное обеспечение обычно разрабатывается с использованием «хороших» методов кодирования, в драйверах нет необходимости. Я не думаю, что они защитят по крайней мере от некоторых ошибок, поскольку ядрам иногда требуется ручное управление памятью.

Наконец, я не думаю, что такая ОС потребует полной виртуальной машины. Поскольку операционная система не может быть построена на принципах компиляции, один раз запускаемых повсюду, на языках HL (даже с GC & co.) Будет лучшим кандидатом.

Например, вы неожиданно делаете произвольные указатели устаревшими.

ОС изначально низкоуровневая. Вы передаете оборудованию не только «произвольный указатель», но, скорее всего, физический адрес, а не виртуальный. Некоторые DMA могут обрабатывать только первые 16 МБ памяти. Хотя такая ОС может сильно упростить, она не избавится от адресов.

И если хорошо написано, вы избавитесь от тонны устаревшего кода, который есть в большинстве современных ОС.

  1. Есть много устаревшего оборудования. Гораздо больше, чем в программном обеспечении. Сначала вы запускаете в реальном режиме, затем включаете переход A20 (не спрашивайте) в защищенный режим, затем в длинный режим.
  2. API / ABI совместимость хорошая. Скажем, они написали такую ​​ОС - что бы вы на ней запустили? Firefox - нет (C и C ++ используют WinAPI). Java - вероятно, его нужно было портировать или иметь некоторые незначительные проблемы через ikvm - если только он не использовал JNI. Я предполагаю, что MSSQL (и, конечно, Oracle, MySQL, Postgresql ...) не написаны на управляемом языке, поэтому он не подходит для сервера.
  3. Даже ошибка совместимости "хорошая". AFAIK MS тратит много времени, просто проверяя и проверяя, не использует ли какое-либо программное обеспечение API интеллектуальным (читай неправильно) способом. Например, проблема использования указателя после freeнего, когда Windows фактически начала освобождать память.

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

Мацей Печотка
источник
2

Лично я думаю, что идея управляемой ОС немного похожа на коммунизм: хорошая в теории, но неосуществимая для реализации.

Проблема в том, что я просто не вижу способа создать управляемую ОС без полного переписывания ОС с нуля (и я надеюсь, что кто-то может доказать, что я не прав в этой части). Кроме того, как вы десятилетиями неуправляемого кода вписались в управляемую ОС?

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

И наконец, как компания, такая как Microsoft или Apple, собирается продавать управляемые ОС своим клиентам? Будет ли средний пользователь компьютера вообще заботиться о том, является ли его ОС управляемой или неуправляемой?

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

Джейсон Бейкер
источник
2
Ядро ОС не очень важно для принятия. MS разработала совершенно новое, несовместимое ни с чем ядро ​​NT, и это было успешно. Apple кардинально изменила архитектуру своего ядра (и архитектуру своего процессора, трижды) и продолжает процветать. Ключом является совместимость с существующим программным обеспечением и простота портирования. Слои совместимости и / или виртуализации, которые обеспечивают плавный переход от старого кода к новому, не выглядят чрезмерно сложными в управляемой ОС.
9000
2

Управляемый код - это просто экстраполяция того, что сегодня предлагает вам защита виртуальной памяти, а именно способность компьютера запретить доступ к ресурсам.

IBM уже делает это на своих мэйнфрейм-системах (они просто называют это как-то иначе), так что, на мой взгляд, это просто вопрос времени, прежде чем это произойдет в системах, доступных для широкой публики.

Вас не интересует, работает ли на ноутбуке Google (на котором работает Chrome и, в основном, больше ничего) управляемый код или нет?


источник
1

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

Это не совсем так. В JNode, например, естьUnsafe класс (и другие), который позволяет вам получать доступ к ячейкам памяти и так далее. Есть также некоторые «магические» классы / методы, которые JIT-компилятор переводит в привилегированные инструкции. Доступ к этим классам / методам ограничен (или будет ограничен) менеджером безопасности, JIT-компилятором и так далее. Но если вы пишете код, который выполняется на уровне операционной системы, эти возможности вам доступны.

Предостережение (конечно) в том, что неправильное использование Unsafeи связанные с ними классы могут привести к сбою операционной системы немедленно или в будущем.

Стивен С
источник
0

Я сомневаюсь в их полезности для настольных компьютеров. Но время может доказать, что я не прав в этом вопросе.

Но один интересный потенциал на мой взгляд - это серверная операционная система, а точнее гостевая операционная система в виртуализированной среде. Мне никогда не удавалось установить полную установку Windows Server в среде виртуального сервера, зная, сколько ненужных сервисов он выполняет, включая полный графический интерфейс.

Теперь установить что-то вроде Singularity на виртуальном сервере для размещения приложений ASP.NET, это имеет больше смысла. Предполагая, что они могут сделать его легкой ОС.

Пит
источник
1
Хорошо отказаться от Windows вообще, когда вы можете.
Работа
1
Тенденция к браузерам с песочницей и другим вещам, выходящим в Интернет, вероятно, показывает, что управляемая или по крайней мере разрозненная ОС или рабочий стол тоже желательны.
9000