Comments 48
хорошая статья. заморочался. молодец
Отличная статья и проект, вписать ось в пол Кб пусть даже урезанную, это вам не blink от ардуинщиков на 1Кб. Автору респект!
Достойная цель.
Теперь оболочка нужна. СекторКоммандер. Тоже 512 размером))))
С ассемблером по компактности сопоставим Форт (Forth) не путать с Фортраном и в 512 байт его умещали и не в одномм исполнении, хотя исторически у него блоки были в 1024 байт.
P.S. А, минимальным для ДОС был VC (Волков командер) исходники которого опубликовали для Истории
Нужны! И теперь есть такие системы, типа 286 компов, которые заменить - это сотни млн рублей (которых разумеется нету у и так бедной нашей промки).
А также энтузиастам, которые эти системы эмулируют на чипах esp, чтобы копаться в железяках или играть в игры.
И Nc нужен. А Far даже на современных компах используется.
Вообще vc чем хорош, что это com файл, он не может быть больше 64 килобайта. Однако демосценеры демонстрируют такие вещи, что стоит им захотеть - они и интерфейс современной винды туда уместят и еще места под программы останется. Может быть, ИИ сподобится, когда-нибудь (сейчас он вообще плохо умеет в оптимизацию).
да, только смысл писать на forth?
асм, по проще, и ты уверен в отсутствии накладных расходов
А, Вы пробовали? Форт как раз своими возможностями хорошо показывает себя во встраиваемых системах, хотя и высокоуровневое программирование ему не чуждо.
P.S. Смысл есть, если Форт систему на всевозможное железо реализуют начиная с ассемблера и “кончая” Питоном и Rust, помимо других популярных языков.
forth - интерпритируемый, а если и есть компиляторы, то помни, что он хранит данные на стеке, это накладно, если нужно доставать далекие переменные, да и не нравиться мне синтаксис, он банально мение читаемый
Форт может и в компилирование как разные его современные реализации. “Синтаксис” Форта построен на последовательном прочтении слов (т.к. он относится к конкатенативным языкам близких к естественным), а стек(и) это элемент сцепления слов по данным эффективным способом. И у стека есть “свойство” - он может рассматриваться как “кэш” временем жизни данных на которои мы управляем.
P.S. Вероятно Вы правы т.к. Форт не многие могут оценить и принять как рабочий инструмент. (Форт это система в его понимании). Сам начинал с ассемблера … На Форт ассемблер пишется легко, а на ассемблере Форт посложнее. Открытая реализация OpenBios - это 99,9% - Форт (фактически реализация “ОС”), а на Форт есть ещё разной успешности и известности реализации ОС
Я про то, что скомпилированный код на форте, скорее всего, был бы объемней, чем на чистом асме
Отнюдь,зависит от исполнения целевого результата.Для AVR, к примеру ассемблерный “Форт” один японский разработчик уместил в 512 флеша (или 256 ассемблерных команд). SPF4 для КолибриОС ужатый исполняемый Файл около 24Кб от начального где то 136Кб (пол размера при этом встроенныый макрооптимизатор дающий нативный 32-ух битный x86 код)
P.S. А, по классике - шитый код в МикроКонтроллере даёт реализовать типично. Форт систему в 8-16Кб
Так а если интерпретатор в 512 байт, то код мне куда пихать?
В следующие сектора, Разместить FORTH в 512 байтах https://habr.com/ru/articles/563250/ Он прочитает листинг и добавит к своему телу расширив Форт. И эта самораскрутка может быть разной сложности.
P.S. Но, чтобы Ось назвать Осью она должна предоставить определённый сервис программам, а не базовые встроенные в него возможности.
только вот то, что описал ты нельзя назвать осью в секторе, тут уже 2 сектора получится
Тогда имеет смысл определится в минимальных терминах, что считать Осью. Это Ось? https://github.com/nanochess/bootOS
P.S. @"Занятия в грузинской школе. Учитель:
Гиви, скажи нам, что такое “ос”?
Это большой полосатый мух, учитель!
Нэт. Гиви. Большой полосатый мух - это шмел, а ос - это то, вокруг чего вертится Земля! "
Не, прикол то в том, что тут не важна болтология, ведь априори один сектор будет занимать интерпретатор форта. А к компиляторам меньше доверия по оверхеду
В таком случае, к примеру, поддержка Форт механик на уровне железа делает его возможность использования без оверхеда. Реально такое сделать на FPGA т.к. MISC контроллеров нет на рынке, за исключением GA144.
Молодец
Очень круто, чо.
Интересная демосцена.
В оглавлении ссылка на "Цикл ОС" битая
Вот только железа для запуска такой ОС практически ни у кого нет. Только эмуляторы вроде qemu. Нынешние компы такое не запустят (UEFI везде).
Добавить планировщик задач и будет полноценная многозадачная ОС.
(всё остальное - в модули/драйверы/задачи).
в real-mode возможна только кооперативная многозадачность, а это не очень приколько, плюс планировщик в, оставшиеся 13, что ли, байт не поместиться при всем желании мне кажется, только если отдать ответственность за сохранения контекста на программы, а это уже фигня какая-то на не многозадачность
В real-mode это достаточно прикольно. Вытесняющая многозадачность на i8080 - это очень прикольно. По NMI.
Планировщик у меня уместился в ~200 байт (8080). x86 будет больше. Наверное.
в real-mode возможна только кооперативная многозадачность
Неверно. В реальном режиме невозможна виртуальная память и невозможна защита задач друг от друга и системы от задач, потому что нет соответствующей аппаратной базы, -- но к типу многозадачности это вообще никакого отношения не имеет. Другое дело, что в 512 байт "настоящую" ОС не всунуть :)
А вот, почему бы защищенный режим не заюзать? :)
Нет, конечно не для этой версии. А сделать под 386-й (тогда и текущий код можно уменьшить).
Пример (256 кб интро, Protected mode, Multi-threading): https://www.pouet.net/prod.php?which=96105
Я кстати загуглил: аппаратный таймер всё-таки был, и поэтому, наверное, возможна нормальная многозадачность.
А по поводу "настоящей ОС": что ты этим называешь? Можно буквально отдельной программой подменить или добавить прерывания, или добавить свои, которые смогут использовать другие программы. Я писал в статье, что нет четкого определения "ОС - это"
Наличие/отсутствие таймера к процессору отношения не имеет. Конкретно в IBM PC и всех последующих более-менее совместимых машинах он был. Изначально это была микросхема 8253 или 8254, один из каналов которого в качестве таймера, кидающегося прерываниями, и использовался; позднее таймер стал частью более сложных микросхем, но для программиста это роли не играет.
Возможно, мы используем термины не совсем идентичным образом, что может создавать проблемы с пониманием. Вообще, вытесняющая многозадачность -- это когда ОС может по своему усмотрению снять с процессора один поток и поставить другой. Таймер для этого не обязателен; скажем, ОС может передать управление вышедшему из ожидания завершения операции ввода-вывода высокоприоритетному потоку, сняв с процессора низкоприоритетный поток, который работал, пока высокоприоритетный поток вынужденно простаивал, ожидая завершение ввода-вывода. В кооперативной многозадачности такое невозможно: там поток должен сам тем или иным способом отдать управление. Таймер же нужен для реализации разделения времени, т.е. когда потокам выделяется определённый отрезок (квант) времени, в течение которого они могут непрерывно занимать процессор, и если поток весь свой квант выжрал, ОС принудительно снимает его с процессора и отдаёт процессор другому потоку -- и так до тех пор, пока все готовые к выполнению потоки не отработают свои кванты, и лишь после этого происходит возврат к первому из них. Таким образом, любая система с разделением времени будет системной с вытесняющей многозадачностью, но не каждая система с вытесняющей многозадачностью обязана быть системой с разделением времени (исторический пример -- OS/360, которая, возможно, вообще первой "большой и совсем-совсем настоящей" ОС в истории была; разделение времени там было необязательной опцией, но вытесняющая многозадачность была (почти) всегда, причём и в случае отсутствия таймера).
Чёткого определения ОС действительно нет, т.е. опять возвращаемся к терминологии. Для меня более-менее полноценная ОС -- это (а) средство управления ресурсами вычислительной системы (памятью, процессорным временем, периферией в широком смысле слова), распределения их между приложениями и самой ОС, и (б) набор сервисов, предоставляемых прикладным программам и абстрагирующих их от особенностей железа, насколько это возможно. MS DOS и CP/M, например, совсем полноценными ОС для меня не являются -- они однозадачные, а соответственно, в принципе не предусматривают разделения ресурсов между приложениями, а вот Винда с Линухом или упомянутая мной выше ОС/360 -- являются.
Я, к сожалению, не в силах читать всю эту простынку, но могу сказать по второму пункциу следующее: чтобы ось могла прервать одну задачу, она должна словить прерывание, если его не вызывает сама программа, то его должна вызывать другая часть - таймер. Можно конечно сделать систему, где прерывания от сторонних ресурсов говорят "эй, мне тут выполниться надо" и проц передает управление, но это чет не то, если делать вытесняющую многозадачность, то через таймер, то так да - он есть почти везде.
Говорю - возможно будет вторая статья с обновой, выносом терминала отдельно (хотя и мне не очень нравиться это решение), директориями там
чтобы ось могла прервать одну задачу, она должна словить прерывание, если его не вызывает сама программа, то его должна вызывать другая часть - таймер. Можно конечно сделать систему, где прерывания от сторонних ресурсов говорят "эй, мне тут выполниться надо" и проц передает управление, но это чет не то, если делать вытесняющую многозадачность, то через таймер, то так да - он есть почти везде.
Вообще-то, подавляющее число устройств ввода-вывода использует механизм прерываний, чтобы информировать процессор (систему) о тех или иных событиях -- например, о завершении ранее начатой операции. И этих прерываний более чем достаточно для переключения потоков (задач), таймер необходимым ни разу не является. Собственно, все настоящие ОС и переключают потоки по целой куче разных событий, а отнюдь не только по истечению времени; приоритеты выполнения не просто так придумали.
Походу Линус готовит преемника...
SectorOS: операционная система в пределах 512 байт