2017-01-29 20 views
-1

Я читал книгу «Эндрю S.Tanenbaum», в котором он упоминает, что:.Почему мы не можем добавить максимальную функциональность в ядре операционной системы?

«MINIX был один из первых UNIX-подобных операционных систем на основе дизайна микроядра Идея микроядра заключается в обеспечении минимальная функциональность в ядре до делает его надежным и эффективным. Следовательно, управление памятью и файловая система были вытеснены в пользовательские процессы ».

Означает ли это, что «ядра с максимальной функциональностью» не будут надежными и эффективными? Почему это так, пожалуйста, объясните с помощью примера.

Благодаря

+0

Как автор определил термины «надежный» и «эффективный» в контексте книги до чтения этого раздела? – ray

+0

Читайте также [Операционные системы: три простых пьесы] (http://pages.cs.wisc.edu/~remzi/OSTEP/), и до этого wikipage на [операционных системах] (https://en.wikipedia.org/wiki/Operating_system) –

+0

Типичным примером [монолитных ядер] (https://en.wikipedia.org/wiki/Monolithic_kernel) является [ядро Linux] (https://en.wikipedia.org/wiki/Linux_kernel) который на практике довольно успешный, надежный и эффективный (и имеет * множество функциональных возможностей). Вы должны попытаться установить некоторый [дистрибутив Linux] (https://en.wikipedia.org/wiki/Linux_distribution) на свой компьютер. –

ответ

1

Я думаю, тонкий, но важный, аспект понимания этого вопроса зависит от того, как термины «надежные» и «эффективные» определены. Для этого ответа я буду использовать следующие общие определения:

  • надежно: трудно или менее вероятно, к неисправности или иным образом нарушать/аварии

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

Хотя не каждый будет d Определите термины таким же образом (например, во встроенной системе использование наименьшего количества пространства может считаться более «эффективным»), в большинстве случаев я думаю, что пользователи склонны к смещению в сторону скорости.

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

Я думаю, что важная часть здесь - «минимальная функциональность». Наличие минимального количества функциональности подразумевает, что количество кода, которое должно быть написано, прочитано и сохранено/отлажено, меньше одного с большим количеством материалов в нем.

В этом смысле, и с учетом моих определений выше, меньше кода означает, что ядро ​​в целом меньше, вероятно, проще и проще в работе. Чем проще система, тем легче выявить потенциальные/актуальные проблемы, сделав систему более «надежной» в этом смысле. Это уменьшает вероятность появления новых скрытых ошибок, превращая их в кодовую базу и ломая что-то позже.

Он также может сделать его более «эффективным» (т. Е. Быстрее), потому что система будет иметь меньшую обработку служебных данных, чтобы заботиться о ней, чтобы обеспечить правильную работу. Другими словами: чем меньше вы должны работать, тем меньше времени вам нужно будет потратить на работу.

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

Означает ли это, что «ядра с максимальной функциональностью» не будут надежными и эффективными?

Не обязательно, хотя это зависит от того, что означает «максимальная функциональность». Например, если медиа-плеер, почтовый клиент и текстовый процессор внутри ядра помогут ему достичь «максимальной функциональности»? Может быть. Имеет ли это смысл? No.

Для этого обсуждения я буду использовать следующее определение:

  • максимальная функциональность: совместимость с максимальным количеством аппаратных средств возможного

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

В этом смысле ядро ​​может иметь «максимальную функциональность» без полностью, жертвуя «эффективностью и надежностью».

Код должен быть добавлен для того, чтобы ядро ​​позволяло идентифицировать компоненты, загружать их драйверы и т. Д., Что увеличило бы вероятность появления ошибок при вводе кода и объеме обработки чтобы позаботиться о дополнительных функциях. И даже тогда большинство ошибок будут только временными.

Итак, как вы можете видеть, есть компромисс. Итак, что относительно микроядра?

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

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

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

Но, как я уже говорил, это компромисс. Например, перемещение функциональности ядра снаружи в пользовательскую землю приводит к некоторым штрафам за эффективность/скорость. То, что раньше было простым вызовом функции в монолитном ядре (например, Linux) в рамках одного и того же процесса в пространстве ядра, теперь нуждается в перераспределении межпроцессной связи с несколькими независимыми задачами вне себя, что требует большего количества переключателей контекста между ними , и время, прежде чем задача может быть завершена.

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

Надеюсь, это поможет.

+0

, но когда у вас есть системные функции (например, управление файлами), выполняемые как пользовательские процессы, они не будут менее безопасными? –

+0

@ Я думаю, это зависит. Уровень безопасности должен быть рассмотрен в контексте некоторой модели угрозы, но мы можем сказать, что если процесс выполняется в пространстве пользователя, а не в пространстве ядра, * область * повреждения, вызванного скомпрометированный процесс будет более ограниченным. Это похоже на выполнение серверного процесса как «root» по сравнению с его собственной отдельной учетной записью пользователя, например 'apache'. Если пользователь 'apache' скомпрометирован, объем ущерба более ограничен, чем если пользователь root установлен. – ray

 Смежные вопросы

  • Нет связанных вопросов^_^