
Комментарии 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 байт