эмбрион писал(а):
Ошибки в системных задачах есть и в традиционных ОС. Поэтому вы по сути заявили, что даже традиционную ОС написать нельзя, поскольку она может упасть из-за ошибок.
Бред и перевирание сказанного мною. Я нигде не утверждал, что невозможно написать ОС. Я утверждал и утверждаю, что экзоядерная система абсолютно ненадёжна независимо в силу своей архитектуры, а соответственно, практически бесполезна (надёжность уровня MS DOS, где у программиста, если говорить про обычные ПК, была максимальная гибкость, вряд ли будет широко востребована).
Цитата:
Если же взглянуть на основную цель экзоядра - максимальную гибкость - то получим просто перенос ответственности за ошибки на программистов, расширяющих экзоядро своими компонентами. То есть всё будет работать прекрасно, а если разработчики компонентов косячат - значит им придётся исправлять свои ошибки (точно так же как разработчикам ОС в случае их косяков) - и всего делов-то.
Если происходит сбой в самой ОС, то пострадают все приложения, однако, если происходит сбой в отдельном приложении, то другие приложения и сама ОС не страдают (во всяком случае, не должны страдать, если в ОС нет ошибок в обработке ошибок).
В монолитном или микроядре есть чёткое разграничение, где находятся функции ОС, а где -- прикладного кода. Компоненты собственно системы защищены от посягательств (злонамеренных или случайных -- в силу наличия ошибок) со стороны прикладного кода. Поэтому, если предположить, что собственно системные компоненты не содержат ошибок, никакие действия прикладных программ не могут повредить другим прикладным программам или самой системе. Конечно, при наличии ошибок может случиться, что некоторое действие прикладной программы "убьёт" систему или нанесёт ещё какой-то вред -- но ошибки можно (и нужно) исправлять, так что монолитная или микроядерная система может быть надёжной.
В случае же экзоядра, где подавляющая часть функционала ОС вынесена не просто в режим пользователя, а прямо отдана на откуп приложениям, никакой надёжности не может быть в принципе. Если, например, приложение работает с файлами на диске, оно использует библиотеку, содержащую дисковые функции. Однако эти функции должны иметь доступ к регистрам контроллера дисков. В экзоядерной системе придётся эти самые регистры отобразить на пространство задачи, чтобы библиотека, входящая в это пространство, имела к ним доступ. Но тогда к ним будет иметь доступ и сама задача -- а значит, сможет сделать с контроллером дисков всё, что угодно. Именно поэтому я сравнил экзоядерную систему с MS DOS: там же никакой защиты нет, приложение может делать всё, что хочет -- вот и полная гибкость (и полная ненадёжность).
Цитата:
SII писал(а):
При возникновении прерывания в процессорах архитектуры IA-32 всегда выполняется межсегментный переход -- хотите Вы этого или нет
А если сегмент один и тот же ? Вы уверены, что внутри процессора всё сделано "по тупому" ?
Это как раз по-умному. Таблица векторов прерываний или другие системные структуры время от времени могут меняться, поэтому-то в тех случаях, когда переход по своей логике является межсегментным, он всегда выполняется именно как межсегментный -- со считыванием всех нужных дескрипторов и т.д. и т.п.