AlexanderK
|
Wednesday 09.02.2005 16:56
|
|
|
Зарегистрирован: Tuesday 05.10.2004 13:47
Местоположение: 2:5020/829.5
Сообщений - 49
|
Vadim Ushakov писал(а): ... На мой взгляд специфика проекта требует микроядро, либо даже экзоядро, поверх которого работает объектно-ориентированная runtime-среда. Любая ОС предоставляет POSIX, этого достатоточно для реализации чего угодно.
|
Наверх
|
|
czarker
|
Wednesday 09.02.2005 17:18
|
|
|
Зарегистрирован: Monday 10.01.2005 17:26
Местоположение: Москва, т.д.
Сообщений - 48
|
AlexanderK
Хорошо быть оптимистом...
P.S.: глубока POSIX-совместимость MenuetOS, OpenVMS, QNX, наконец...
Но это всё, конечно, моё сугубо личное мнение.
|
Наверх
|
|
AlexanderK
|
Wednesday 09.02.2005 19:20
|
|
|
Зарегистрирован: Tuesday 05.10.2004 13:47
Местоположение: 2:5020/829.5
Сообщений - 49
|
И зачем ты их перечислил? Чтобы показать что в правилах бывают исключения? Тем не менее осей с нормальной раелизацией POSIX немало.
|
Наверх
|
|
czarker
|
Thursday 10.02.2005 01:17
|
|
|
Зарегистрирован: Monday 10.01.2005 17:26
Местоположение: Москва, т.д.
Сообщений - 48
|
Они сами писали, что не обеспечивают полной POSIX-совместимости.
И вообще, ядер много, хороших ядер почти нет.
Но это всё, конечно, моё сугубо личное мнение.
|
Наверх
|
|
AlexanderK
|
Thursday 10.02.2005 01:31
|
|
|
Зарегистрирован: Tuesday 05.10.2004 13:47
Местоположение: 2:5020/829.5
Сообщений - 49
|
А знаешь сколько всякой фигни в полной реализации? Она нафиг не нужна такая хорошая.
|
Наверх
|
|
Vadim Ushakov
|
Thursday 10.02.2005 05:57
|
|
|
Зарегистрирован: Monday 07.02.2005 04:57
Местоположение: Россия, Красноярск
Сообщений - 35
|
AlexanderK писал(а): ... Любая ОС предоставляет POSIX, этого достатоточно для реализации чего угодно. Мы здесь копья ломаем: писать собственное ядро или не писать. А решение оказывается простое - хотел бы я посмотреть, как объекты, выстроившись в колонну, дружно отправляются на stdout. А лучше на stderr.
POSIX, да святится имя твое,
Да пребудут в вечном GPF системы, не поддерживающие тебя,
Аминь.
|
Наверх
|
|
Vadim Ushakov
|
Thursday 10.02.2005 06:33
|
|
|
Зарегистрирован: Monday 07.02.2005 04:57
Местоположение: Россия, Красноярск
Сообщений - 35
|
czarker писал(а): ... функционально ядро и runtime для .NET представляют единое целое и должны выполняться с одинаковым приоритетом Как я не старался, так и не смог понять скрытый смысл этой фразы. Слова "должны выполняться с одинаковым приоритетом" как будто бы указывают на то, что runtime будет работать в отдельном процессе/потоке. По-моему, имелось ввиду нечто другое. Czarker, поясните свою мысль.
На мой взгляд, у 3ОС не может быть ядра в обычном понимании этого слова. Ядро 3ОС - это HAL для доступа к аппаратным ресурсам + runtime. Здесь возможны два варианта.
1. HAL работает в 0-м кольце, runtime - в 3-м кольце. В этом случае очевидно, что HAL представляет собой экзоядро. Такая модель позволяет сделать систему очень гибкой. Мы можем при желании запускать в отдельных процессах приложения, предназначенные для других прикладных подсистем: POSIX, Win32API, OS/2 и т.д. Для этого нужно написать runtime, для каждой конкретной подсистемы.
2. И HAL и runtime работают в 0-м кольце. Здесь мы теряем в гибкости, но получаем определенный запас устойчивости системы. Вынесение runtime подальше с глаз прикладного кода оставляет меньше шансов, что объект намеренно или случайно "выполнит недопустимую операцию." Этот вариант можно условно назвать "объектно-ориентированным микроядром."
Ни в первом ни во втором варианте не предусмотрено включение в состав "ядра" (которого на самом деле нет ) каких-либо сторонних компонентов. Поэтому мне также непонятно следующее высказывание: czarker писал(а): ... Специфика проекта требует модульное ядро, так что выбор резко сужается. Вопрос: какие еще компоненты/модули, по вашему мнению, должны быть в ядре? [ Редактирование Thursday 10.02.2005 06:35 ]
|
Наверх
|
|
czarker
|
Thursday 10.02.2005 09:54
|
|
|
Зарегистрирован: Monday 10.01.2005 17:26
Местоположение: Москва, т.д.
Сообщений - 48
|
AlexanderK AlexanderK писал(а): ... А знаешь сколько всякой фигни в полной реализации? Не надо! Либо мы имеем UNIX-основную ОС, и тогда логичней нести бремя предельной совместимости, либо мы имеем UNIX-несовместимую ОС, и тогда реализация через POSIX или его части - зло.
Vadim Ushakov Vadim Ushakov писал(а): ... хотел бы я посмотреть, как объекты, выстроившись в колонну, дружно отправляются на stdout. А лучше на stderr. А stderr и stdout - объекты сами по себе. Просто их так никто не называет, но они объектами являются. Кстати, а какие данные Вы на stderr посылаете? Vadim Ushakov писал(а): ... czarker писал(а): ... функционально ядро и runtime для .NET представляют единое целое и должны выполняться с одинаковым приоритетом Czarker, поясните свою мысль. Всё просто: код должен выполняться с одним приоритетом, т.е. либо в одном процессе (в ядре), либо в одном круге, если мы будем делать безъядерную систему.
nB: Что-то я разошёлся... "Мы будем делать"... Я-то ничего делать не буду. Vadim Ushakov писал(а): ... Вопрос: какие еще компоненты/модули, по вашему мнению, должны быть в ядре? Драйверы. Протоколы.
Если мы запихиваем в ядро .NET, то микроядерность тут же теряется - ядро слишком тяжёлое. Выполнять .NET с приоритетом выше драйверов нельзя - система будет неработоспособна.
Но это всё, конечно, моё сугубо личное мнение.
|
Наверх
|
|
Vadim Ushakov
|
Thursday 10.02.2005 13:10
|
|
|
Зарегистрирован: Monday 07.02.2005 04:57
Местоположение: Россия, Красноярск
Сообщений - 35
|
czarker писал(а): ... А stderr и stdout - объекты сами по себе. Согласен. Точно также встроенные в Windows элементы управления являются объектами (только вместо методов у них сообщения), однако никто их так не называет.
czarker писал(а): ... Кстати, а какие данные Вы на stderr посылаете? На stderr я обычно посылаю все те нехорошие слова, которые программа говорит пользователю, не умеющему с ней работать .
czarker писал(а): ... Vadim Ushakov писал(а): ... Вопрос: какие еще компоненты/модули, по вашему мнению, должны быть в ядре?
Драйверы. Протоколы.
На самом деле я имею очень смутное представление о .NET, так что все написанное ниже может являться бредом, однако все-таки выскажусь.
Я говорил о HAL + runtime, имея ввиду, что runtime только координирует работу объектов. Если для .NET runtime нужна серьезная поддержка со стороны каких-либо драйверов, то толкать его в 0-е кольцо нет смысла, независимо от того, используем ли мы модульный подход или "микроядерный" (в том смысле, о котором я писал ранее).
Если в 0-м кольце будут жить HAL, драйвера, runtime, то мы рискуем наступить на те же грабли, что и Microsoft: "Этот драйвер не тестировался на совместимость с Windows, вы уверены, что хотите продолжить установку?" Я считаю, что в системе не должно быть ни одной "легальной" возможности добавить сторонний код в нулевое кольцо, иначе наша система будет работать "от BSOD-а до BSOD-а."
Если мы берем за основу .NET, то логично вынести всю ее нетривиальную функциональность в отдельный процесс, и пусть "верхнеуровневые" объекты обращаются к ней через IPC, а она, в свою очередь, обращается с запросами к "нижнеуровневым" объектам.
Между прочим, слова Czarker о драйверах, работающих прямо в ядре, противоречат его же высказыванию:
czarker писал(а): ... Или вы считаете, что драйверы периферийных устройств в прогрессивной объектно-ориентированной системе должны работать ниже файловой системы? Но если уже мы "докатились" до разделения объектов на "нижнеуровневые" и "верхнеуровневые", то пусть все они работают в 3-м кольце. Тогда, по крайней мере, сбой одного из драйверов не утащит на тот свет всю систему.
Нет никакой необходимости в модульном ядре - вот, что я пытаюсь доказать. Все, что раньше по историческим причинам работало в 0-м кольце, может быть вынесено в обычные процессы/потоки/объекты (в зависимости от идеологии системы). При этом гарантируется:
а) увеличение устойчивости
б) улучшение инкапсуляции
в) упрощение разработки программ
Также возможно повышение производительности (если все будет спроектировано не просто правильно, а идеально).
|
Наверх
|
|
Модераторы: Roman I Khimov, netwizard. |
|
|