1 (изменено: Freeman, 18.10.2015 в 18:16)

Тема: ОС в функциональной парадигме + ядро ОС

На данном этапе можно попробовать представить, как будет выглядеть ОС, выполненная в рамках функциональной парадигмы и написанная на функциональном языке. Предлагаемое описание — только одна из возможных реализаций ОС — в виде базы данных, что продиктовано особенностями Кантора. Другие авторы могут представлять функциональную ОС по-другому.

Предполагается, что функциональная ОС на Канторе будет обладать следующими особенностями:

  • Основа подсистемы выполнения — оптимизатор на основе правил или статистики.

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

  • Точки отсчета для оптимизатора выбираются внутри фрактала.

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

2

Re: ОС в функциональной парадигме + ядро ОС

Перечисленные выше пункты, описывающие особенности ОС на функциональном языке, взяты из СУБД. Тем самым подразумевается, что такая ОС будет обладать свойствами базы данных. Это означает, что в ней будет решена задача, которую пытается решить ОС "Фантом" -- неизбывность (персистентность) состояния:

  • Благодаря транзакциям и ACID БД всегда находится в согласованном состоянии.

  • В СУБД нет понятия "открыть файл" (открыть таблицу) или "загрузить функцию" (триггер, пакет). Таблицы, триггеры, функции и пакеты лежат в БД и доступны всегда и везде, если хватает прав.

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

  • Для обслуживания у СУБД обычно имеется несколько промежуточных состояний (запущена, размонтирована, смонтирована, в работе), к чему уже пришли современные ОС, достигнув соответствующего уровня сложности в процессе развития. Переход на технологии СУБД лишь закрепит фактическое положение, упростив и сделав прозрачней обслуживание и администрирование.

3

Re: ОС в функциональной парадигме + ядро ОС

Freeman пишет:

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

Какая проьбоема производительности в ОС в этом плане? Скорость загрузки?

4

Re: ОС в функциональной парадигме + ядро ОС

kdenis пишет:

Скорость загрузки?

Разница в скорости первого запуска программы и последующих.

5 (изменено: Freeman, 18.11.2018 в 12:49)

Re: ОС в функциональной парадигме + ядро ОС

Вот правил я вчера boot.wim и с сожалением наблюдал бешеную активность жесткого диска. Пришли мысли о том, что в ОС на функциональном языке не программы, а ядро должно решать, где будут располагаться обрабатываемые данные -- в памяти или на диске.

Файл boot.wim занимает 280 МБ, а в системе свободно порядка 1,5 ГБ ОЗУ. Почему нельзя однократно считать файл, проделать все необходимые изменения в памяти и сохранить? Но нет, инфраструктура DISM выполнена в идеологии файловых систем и не поддается такой настройке.

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

А вот ОС на функциональном языке, опираясь на предсказуемость программ, сможет точно оценить, сколько памяти потребуется для выполнения той или иной команды, как это делает построитель планов и оптимизатор запросов в СУБД. Соответственно, сами программы должны быть подвержены планированию, то есть не быть "черными ящиками", написанными на Си.

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

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

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

6

Re: ОС в функциональной парадигме + ядро ОС

В принципе примерно так работают современные микропрограммы SAN-ов, - то, что считают "горячим" - в кэше контроллера(ов), по необходимость flush на непосредственно диски.

7

Re: ОС в функциональной парадигме + ядро ОС

Статья «Жирные программы — факторы скорости» на Хабре. Автор — один из разработчиков KolibriOS.

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

Оценка влияния — возможные непрогнозируемые лаги.

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

Java тормозит™

-Pi. Виртуальные машины. Это языки с промежуточным байт кодом, базирующиеся на .NET платформе, либо на Java-платформе, ну и сюда же можно отнести и PyPy, и V8. Вы всегда с собой носите байт машину – она с вами на диске, она с вами в памяти. Хотя, если верить тестам, то кажется, что все почти нормально – проигрыш на вычислениях десятки процентов, ну максимум до 100% в худших случаях. Только тесты, как правило, не учитывают скорость загрузки самой виртуальной машины. И это память, память и еще раз память, десятки и сотни мегабайт.

Разработчики сами знают эту проблему и движутся в направлении компиляции в нативный код. Это ART вместо Dalvika для Android, и .NET Native от Microsoft.

Также есть краткое продолжение темы от того же автора.