Конечно будет, к тому же, можно сделать один простой ход, который позволит вам собрать еще большую аудиторию.
Уж очень много человек одержимы идеей влиться в OSDEV-сцену, и среди пользователей хабрахабра таких также не мало. Часть одержимых идеей пытается прыгнуть чуть выше и пишет для таких же как они сами уроки. В итоге и появляются очередные протуберанцы о работе с защищенным режимом на ассемблере вместо основной темы — разработки ядра операционной системы.
У вас в багаже вполне переносимый код, достаточное множество реализованных алгоритмов, документация, хоть и изобилующая опечатками, страдающая орфографией, но все же вполне качественная. Вы могли бы показать сообществу, как реально устроена операционная система, с примерами кода. Пожевать, чтобы все могли это проглотить. Ну например, взять менеджер физической памяти и рассказать, как он работает, что такое buddy-алгоритм, чем хорош, или переходя уже к более высокому уровню — поведать о механизме slab. Рассказать про виртуальную память на примере своей ОС (хотя насколько помню тут у вас не все еще есть), про виртуальную файловую систему, драйверы, планирование, загрузку ELF. При достаточном качестве материалов они бы были мегапопулярны.
Также, статьи об использовании ОС в своих проектах могут быть очень интересными. Можно преподносить их подобно этому материалу про FreeRTOS. А можно комбинировать рассмотрение внутренностей ОС вместе с применением ее на практике. Например, рассказываете как сделать в вашей ОС что-то конкретное и добавляете немного информации о том, как же оно устроено. Чтобы у людей не складывалось ощущение черного ящика.
Следование группе стандартов POSIX и перенос стандартной библиотеки позволяют не беспокоиться по поводу софта.
Пример: быстро развивающийся проект Pedigree OS, в котором участвует автор довольно известного туториала — Джеймс Моллой.
К тому же, все вышесказанное характерно только для декстопных ОС, в то время как миниатюрные ядра систем реального времени и ОС для встраиваемых решений часто рассматриваются в качестве фреймворка для создания собственного продукта. Здесь уже проблема отсутствия ПО не стоит, решающими факторами оказываются характеристики данного решения.
Стек — вполне тривиальная вещь с точки зрения механизма, но польза от этого простого механизма — огромная.
Если говорить, не касаясь многозадачности:
1. При вызове подпрограмм в стек кладутся их формальные параметры, а также адрес возврата из подпрограммы. За счет этого подхода мы можем вызывать функции и всегда возвращаться туда, откуда мы их вызывали;
2. Также, на стеке выделяется память для локальных объектов функции;
3. Стек используется для временного сохранения данных из регистров процессора, потому что регистров обычно — не много.
Касаемо многозадачности:
Когда происходит прерывание таймера (как и любое другое) большинство ядер ОС сохраняют текущий регистровый контекст задачи в стеке. Переключение задач представляет собой подмену стека текущей задачи на стек той, что планировщик решил выполнить следом. Когда обработка прерывания завершается, регистровый контекст выталкивается из стека новой задачи, таким образом происходит переключение контекста. И именно за счет этого механизма программы могут разделять между собой единственный физический процессор.
Есть подходы, когда регистровый контекст сохраняется вручную, без использования аналогов инструкций push и pop, но это встречается довольно редко. Тем более, многие архитектуры умеют делать это (сохранение части регистрового контекста в стеке на момент обработки прерывания) почти на автомате.
Спасибо за статью, материал-то интересный! Хабрахабру нужен большой пинок под зад, ну или серия пинков, которая откроет дорогу новым качественным материалам.
Вы немного не поняли, это не моя ОС. А что до отечественных, тут поле довольно широкое. Не все, конечно, заслуживает внимания. Слышал еще про iRTOS; не помню, что, но что-то меня не впечатлило в ней. Может за последнее время что-то изменилось.
А мне вот отечественный проект один нравится, имя которому Embox. Это, конечно, решение не для самых «бедных» архитектур вроде микроконтроллеров нижнего ценового сегмента, но система заслуживает своего внимания. Код очень качественный, можно легко разобраться с любым компонентом данной ОС. Архитектура модульная, и, в принципе, не возбраняется собрать из этой мозаики что-то свое, подходящее только вам. Здесь в наличии несколько планировщиков, несколько менеджеров памяти на разные случаи жизни, потоки и псевдопроцессы, таймеры и механизмы обработки прерываний. Помимо всего сверху навешена система драйверов, файловая система, стандартная библиотека и набор приложений. Естественно, немного разобравшись, ото всего этого изобилия можно отказаться, получив вполне миниатюрную систему для вашей железки. Врать не буду, нигде не использовал, но активно игрался с x86 версией под эмулятором.
Насколько помню, там планировщик с несколькими очередями, по очереди на каждый приоритет. Количество приоритетов настраивается в конфигурационном файле (это константа). И вроде бы обычное приоритетное планирование. Смею предположить, что O(1). Но гарантий дать не могу.
FreeRTOS помимо классического псевдо-параллелизма с жирным стеком для каждой задачи позволяет работать с сопрограммами, которые исполняются кооперативно. Причем сопрограммы в данном случае полноценные, в отличии от имитации их за счет switch-case, как у Эдама Данкелса в Contiki.
Огромное спасибо за ваше творчество и новый сборник. Автор невероятно талантлив.
Вы узнаваемы. Не раз слышал от окружающих, что мелодия, которая играет у меня в колонках, наушниках и т.п. знакома, были случаи когда называли альбом или даже трек. И не мудрено. Музыка настоящая, живая, глубокая, яркая.
У меня HP 625. Там Turion 2 на борту и видео от ATI. Мне очень нравился, пока с ним не начались проблемы. Прошло полтора месяца и он стал включаться через раз. То есть, нажимаем кнопку power, ждем, ждем… А он мило висит на сплешике BIOS с логотипом HP и предложением нажать ESC для перехода в Setup menu. На ввод не реагирует. Выключаем, включаем снова. Та же история. Иногда прогружается до GRUB и зависает там. Также виснут все ОС без поддержки ACPI. Это удалось выяснить опытным путем. После загрузки полноценной ОС (в данном случае это Linux Mint) — все функционирует нормальным образом. И так до следующего включения. Думал это мне только так повезло. Поискал в интернете — проблема частая. И именно у ноутбуков HP, преимущественно этой серии.
Обратился по гарантийному талону по месту приобретения (магазин «ОГО», не имею ничего против — хороший магазин), как и написано в гарантийном талоне (а там указано, что если нет пометки СЦ, обслуживание происходит у них). Работник сервис-центра был шокирован, странно, говорит, дело в том, что вас должен обслуживать СЦ. Пометку наверное случайно не вписали в гарантийный талон, обращайтесь, мол, в официальные сервис-центры HP. Вот сегодня как раз туда буду звонить — все выясню.
Надеюсь все исправят. Покупкой доволен. Если бы не эти проблемы — совсем было бы хорошо.
Да, к матовости можно прибавить еще одно достоинство — все неплохо спроектировано в данном модельном ряде, сзади легко снять широкую крышку и получить доступ ко всем внутренностям, чего не хватает многим деллам, например.
От аккумулятора работает около трех с половиной часов, если не сильно нагружать и убрать подсветку.
Вытесняющая, если по таймеру. Но насчет адресного пространства вы правы. Пока автор не предложил решения ни на базе сегментной, ни на базе страничной модели. Хотя, судя по закомментированным кускам кода, они у него, вероятно, есть, просто он не хотел вываливать такой объем проблем аппаратуры на головы читателей за один присест.
Извините, а что помешало выделять по стеку на задачу и использовать для сохранения контекста аппаратные и такие привычные pushad и pushd, процессор же сам подобным образом сохраняет часть контекста в стеке — те самые ss, esp, eflags, cs и ip, можно же взять и помочь ему, сохранив регистры общего назначения и сегмент данных в том же стеке? Даже ничего нового городить не нужно: если уже разработан диспетчер прерываний, то контекст там наверняка сохраняется во враппере обработчика, в стеке. Остается только подменять стек при переключении задач, ну и если это необходимо, каталог страниц.
Кстати, TSS вам все равно понадобится, когда окунетесь в Ring3.
Немного больше системности, меньше хаоса, и все будет хорошо.
Дело в том, что сабж запускается только на современных процессорах с архитектурой x86. Никакими часами тут и не пахнет. А за счет реализации на языке ассемблера, увидеть ее на чем-то еще пока невозможно (не переносим код).
TL1 имеет ввиду случаи, когда те же персоналки используются для управления, скажем, станком каким, при этом они тихо себе работают, исполняя только им известное колдовство, принимая изредка команды через Ethernet или COM-порт. И вот стоит этот компьютер такой одинокий, совсем даже без терминала, но делает свою работу, потому что если не будет делать, то подведет своих хозяев, ой как подведет.
Причем, порой, найти на предприятии персоналку для таких целей проще, чем разработать решение на базе микроконтроллера или специальной платформы. Да и дешевле.
А 64Bit и Long Mode… просто ребята поняли, что это уже стандартный режим. И давно пора на него переходить, полностью, а не совмещая с Legacy Mode, как это сейчас везде работает. И они правы. Ни реальный, ни режим защищенный (тот самый режим совместимости) уже в прошлом. Первый вообще не нужен, в принципе, только в целях совместимости держат, а второй больно монструозный.
Вообще странно, так много людей из года в год пишут, что на ассемблере писать долго, что это сложно. Хотя на деле язык ассемблера настолько прост, и настолько прозрачен,… мало того, в том же fasm есть очень хороший макроязык (if, else, ...), есть структуры и «отображение» структур в заданные участки памяти (ключевое слово virtual). Естественно, писать на языке ассемблера всю логику — не слишком большое удовольствие. Но и создавать нечто лишь на нем не такое мучение, как может показаться на первый взгляд.
Если говорить о ядре, то в данном случае, это просто набор статически собранных процедур по работе с памятью, формированию пула потоков, вводу-выводу, синхронизации. Ну поддержка FAT и простой сетевой карточки в ту же кучу. Даже если и на ассемблере — объем работы не такой большой, особенно если на современном его диалекте.
Вот как запустится на ней хоть какой-то HTTP-сервер, так сразу найдутся люди — форкнут проект и подадут заявку на гос. финансирование, как приоритетной отечественной разработки в рамках формирования национальной программной платформы.
Только это не дает права так лениться при создании кода, как это многие сейчас делают. Скорость разработки, конечно, характеристика важная, но то, что многие программы, которые выполняют почти ту же функциональность, что и их аналоги десяти и даже двадцатилетней давности, ведут себя даже на топовых машинах странно, если не сказать безобразно… это раздражает. Потому как понимаешь, что люди больше не ученые, люди даже не специалисты. Они просто хорошо научились складывать из кубиков картины, похожие внешне на шедевры, но это иллюзия. Программирования как такового не осталось.
Есть еще жизнь на встраиваемых системах. Того же Эдама Данкелса следует вспомнить с его Contiki.
Ведь можно и на Си и на многих других языках писать эффективный код, оптимизировать. Но погоня за сверхприбылями, клиентами, все это имеет место быть.
Уж очень много человек одержимы идеей влиться в OSDEV-сцену, и среди пользователей хабрахабра таких также не мало. Часть одержимых идеей пытается прыгнуть чуть выше и пишет для таких же как они сами уроки. В итоге и появляются очередные протуберанцы о работе с защищенным режимом на ассемблере вместо основной темы — разработки ядра операционной системы.
У вас в багаже вполне переносимый код, достаточное множество реализованных алгоритмов, документация, хоть и изобилующая опечатками, страдающая орфографией, но все же вполне качественная. Вы могли бы показать сообществу, как реально устроена операционная система, с примерами кода. Пожевать, чтобы все могли это проглотить. Ну например, взять менеджер физической памяти и рассказать, как он работает, что такое buddy-алгоритм, чем хорош, или переходя уже к более высокому уровню — поведать о механизме slab. Рассказать про виртуальную память на примере своей ОС (хотя насколько помню тут у вас не все еще есть), про виртуальную файловую систему, драйверы, планирование, загрузку ELF. При достаточном качестве материалов они бы были мегапопулярны.
Также, статьи об использовании ОС в своих проектах могут быть очень интересными. Можно преподносить их подобно этому материалу про FreeRTOS. А можно комбинировать рассмотрение внутренностей ОС вместе с применением ее на практике. Например, рассказываете как сделать в вашей ОС что-то конкретное и добавляете немного информации о том, как же оно устроено. Чтобы у людей не складывалось ощущение черного ящика.
Пример: быстро развивающийся проект Pedigree OS, в котором участвует автор довольно известного туториала — Джеймс Моллой.
К тому же, все вышесказанное характерно только для декстопных ОС, в то время как миниатюрные ядра систем реального времени и ОС для встраиваемых решений часто рассматриваются в качестве фреймворка для создания собственного продукта. Здесь уже проблема отсутствия ПО не стоит, решающими факторами оказываются характеристики данного решения.
Если говорить, не касаясь многозадачности:
1. При вызове подпрограмм в стек кладутся их формальные параметры, а также адрес возврата из подпрограммы. За счет этого подхода мы можем вызывать функции и всегда возвращаться туда, откуда мы их вызывали;
2. Также, на стеке выделяется память для локальных объектов функции;
3. Стек используется для временного сохранения данных из регистров процессора, потому что регистров обычно — не много.
Касаемо многозадачности:
Когда происходит прерывание таймера (как и любое другое) большинство ядер ОС сохраняют текущий регистровый контекст задачи в стеке. Переключение задач представляет собой подмену стека текущей задачи на стек той, что планировщик решил выполнить следом. Когда обработка прерывания завершается, регистровый контекст выталкивается из стека новой задачи, таким образом происходит переключение контекста. И именно за счет этого механизма программы могут разделять между собой единственный физический процессор.
Есть подходы, когда регистровый контекст сохраняется вручную, без использования аналогов инструкций push и pop, но это встречается довольно редко. Тем более, многие архитектуры умеют делать это (сохранение части регистрового контекста в стеке на момент обработки прерывания) почти на автомате.
FreeRTOS помимо классического псевдо-параллелизма с жирным стеком для каждой задачи позволяет работать с сопрограммами, которые исполняются кооперативно. Причем сопрограммы в данном случае полноценные, в отличии от имитации их за счет switch-case, как у Эдама Данкелса в Contiki.
Вы узнаваемы. Не раз слышал от окружающих, что мелодия, которая играет у меня в колонках, наушниках и т.п. знакома, были случаи когда называли альбом или даже трек. И не мудрено. Музыка настоящая, живая, глубокая, яркая.
Жду смс-уведомления.
Обратился по гарантийному талону по месту приобретения (магазин «ОГО», не имею ничего против — хороший магазин), как и написано в гарантийном талоне (а там указано, что если нет пометки СЦ, обслуживание происходит у них). Работник сервис-центра был шокирован, странно, говорит, дело в том, что вас должен обслуживать СЦ. Пометку наверное случайно не вписали в гарантийный талон, обращайтесь, мол, в официальные сервис-центры HP. Вот сегодня как раз туда буду звонить — все выясню.
Надеюсь все исправят. Покупкой доволен. Если бы не эти проблемы — совсем было бы хорошо.
Да, к матовости можно прибавить еще одно достоинство — все неплохо спроектировано в данном модельном ряде, сзади легко снять широкую крышку и получить доступ ко всем внутренностям, чего не хватает многим деллам, например.
От аккумулятора работает около трех с половиной часов, если не сильно нагружать и убрать подсветку.
Кстати, TSS вам все равно понадобится, когда окунетесь в Ring3.
Немного больше системности, меньше хаоса, и все будет хорошо.
Следует читать так:
Ни реальный, ни режим защищенный (тот самый режим совместимости) не нужны, уже в прошлом.
TL1 имеет ввиду случаи, когда те же персоналки используются для управления, скажем, станком каким, при этом они тихо себе работают, исполняя только им известное колдовство, принимая изредка команды через Ethernet или COM-порт. И вот стоит этот компьютер такой одинокий, совсем даже без терминала, но делает свою работу, потому что если не будет делать, то подведет своих хозяев, ой как подведет.
Причем, порой, найти на предприятии персоналку для таких целей проще, чем разработать решение на базе микроконтроллера или специальной платформы. Да и дешевле.
А 64Bit и Long Mode… просто ребята поняли, что это уже стандартный режим. И давно пора на него переходить, полностью, а не совмещая с Legacy Mode, как это сейчас везде работает. И они правы. Ни реальный, ни режим защищенный (тот самый режим совместимости) уже в прошлом. Первый вообще не нужен, в принципе, только в целях совместимости держат, а второй больно монструозный.
Если говорить о ядре, то в данном случае, это просто набор статически собранных процедур по работе с памятью, формированию пула потоков, вводу-выводу, синхронизации. Ну поддержка FAT и простой сетевой карточки в ту же кучу. Даже если и на ассемблере — объем работы не такой большой, особенно если на современном его диалекте.
Есть еще жизнь на встраиваемых системах. Того же Эдама Данкелса следует вспомнить с его Contiki.
Ведь можно и на Си и на многих других языках писать эффективный код, оптимизировать. Но погоня за сверхприбылями, клиентами, все это имеет место быть.