Комментарии 63
Прикольно, конечно, но монолитное ядро и C++ в 2021?
Модель системы — однопоточная. Чуть позже разработчики собираются добавить поддержку многоядерных процессоров. Сейчас она может работать с ними, но недолго — всего несколько минут.
Воу, плюсовики опять не смогли в многопоточность. Неожиданно, конечно. Ну ничего, пару лет в дебаггере и %feature_name% точно-точно заработает без падений на 8 ядрах.
for (size_t index = 0; index < (((size_t)AHCI::Limits::MaxPorts * 512) / PAGE_SIZE); index++) {
m_identify_metadata_pages.append(MM.allocate_supervisor_physical_page().release_nonnull());
}
if (kernel_command_line().ahci_reset_mode() == AHCIResetMode::Aggressive) {
for (auto index : taken_ports.to_vector()) {
auto port = AHCIPort::create(*this, static_cast<volatile AHCI::PortRegisters&>(controller.hba().port_regs[index]), index);
m_handled_ports.set(index, port);
port->reset();
}
return;
}
for (auto index : taken_ports.to_vector()) {
auto port = AHCIPort::create(*this, static_cast<volatile AHCI::PortRegisters&>(controller.hba().port_regs[index]), index);
m_handled_ports.set(index, port);
port->initialize_without_reset();
}
Нечитаемо.
PhysicalAddress AHCIPortHandler::get_identify_metadata_physical_region(u32 port_index) const
{
dbgln_if(AHCI_DEBUG, "AHCI Port Handler: Get identify metadata physical address of port {} - {}", port_index, (port_index * 512) / PAGE_SIZE);
return m_identify_metadata_pages[(port_index * 512) / PAGE_SIZE].paddr().offset((port_index * 512) % PAGE_SIZE);
}
Индекс всегда вычисляется верно. Я гарантирую это.
// "Unpad" the device name string.
for (u32 i = 93; i > 54 && bbuf[i] == ' '; --i)
bbuf[i] = 0;
А как вам такое?
Рад за челочека, что он излечился и делом занимается. Но пользы, скорее всего, никакой
Ну так-то С++ живее всех живых и нет причин не писать на нём в том числе и новый проекты, особенно с выходом новых стандартов. Если для вас это не читаемо и у вас аллергия на этот ЯП, пишите на Питоне, или становитесь Растосектантом, вставляющим своё важное мнение в любоё место, даже когда не спрашивают :)
Эквивалентную замену предоставите? Все мы конечно в курсе что ядро можно писать на СИ, но в 21м году хотелось бы чтобы компилятор за пользователя что-нибудь все таки делал.
Еще хочется увидеть ЯП на котором невозможно делать ошибки.
И на каком из этих языков можно написать ОС не прибегая к СИ ?
А что плохого в написании ядра на Си?
Если не делать монолит и не тащить драйвер мышки в ядро, вполне осиливаемая задача.
Не нравится Си - можно на расте написать.
Rust:
* https://os.phil-opp.com/ -- Туториалы по написанию простенькой ОСи на Rust (+ немного ассемблера, ЕМНИП);
* https://gitlab.redox-os.org/redox-os/redox -- Настоящая ОСь, написанная полностью на Rust.
На Rust точно можно.
Без Си не проблема. Вот без ассемблера/машинного кода вы вряд ли справитесь на большей части архитектур, но это и для Сей ровно так же справедливо
Эквивалентную замену предоставите?Возможно, что можно придумать ЯП ориентированный именно для написания операционных систем.
Я сейчас переписываю свою хоббийную ОС на Pascal, но столкнулся с проблемами из-за нестандартной модели памяти (сегментирование против плоской). В 99% случаев (проектов) этой проблемы нет, сейчас плоская модель повсюду.
не знаю на счёт UB, но вот в Delphi/Pascal можно вызвать чисто чисто виртуальный метод. Т.е. видимо можно создать объект, имеющий не полную реализацию, и словить исключение. Помню не редко их ловил в BSPlayer. В Си++ например так низзя, будет ошибка компиляции.
Помню не редко их ловил в BSPlayer. В Си++ например так низзя, будет ошибка компиляции.
Delphi выдаст предупреждение на этапе компиляции, а уж собирать проект с предупреждениями — это так себе идея.
[dcc32 Warning] Example.dpr(18): W1020 Constructing instance of 'TExample' containing abstract method 'TExample.SomeMethod'
Тогда уж Оберон.
Ну на пример потому что в оригинальном коде первое условие еще и функцию завершает.
Да там правда два одинаковых цикла, но под разными условиями https://github.com/SerenityOS/serenity/blob/b91df26d4a14c2721d1920e76552012864c97790/Kernel/Storage/AHCIPortHandler.cpp#L34
После второго функция завершается.
Возможно, чел хотел ветвление из цикла убрать, чтобы "добавить скорости"... но в 2021 это так не работает
По-хорошему бы
port->initialize(shall_reset);
Модель системы — однопоточная.
Система не однопоточная.
Видимо, это сюда перекочевало из ошибки автора обзора на Ars Technica. Имелось в виду, что пока поддерживается использование одного ядра процессора. Поддержка SMP есть, но пока работает не очень стабильно.
"Если есть желание, можно помочь и написать новый браузер с нуля."
:)
Современный браузер написать на порядок более сложно и трудоемко, чем операционную систему.
Так я не понял, она на голом-то железе запустится? Или чтобы эту ОС использовать, надо иметь и настоящую?
Прокомментирую увиденное по своему профилю, глядя вот на это:
https://github.com/SerenityOS/serenity/blob/master/Kernel/Graphics/Intel/NativeGraphicsAdapter.cpp
Самопальный графический <<стек>> в виде голого фрейм-буффера есть. Зрелость его по вменяемым меркам собственной графики близка к 0. Для Intel GPU есть поддержка ровно 1 контроллера 2006-2008 года. Драйверная модель статическая, чисто регистровая. Ни прерываний, ни аппаратного курсора, менеджмента памяти, никакого задела даже на 2D акселератор (а он там простейший, строк в 100 кода можно уложиться, если бы был VMEM-менеджмент, но...), масса fixme даже на 645 строк в мастере. Зато есть чтение EDID через GMBUS.
Посоны, видимо, глянули на размеры настоящих драйверов и решили забить в пользу VESA/int10 и UEFI mode-switcher-ов. Одним словом с драйверами вах.
Для современных систем конечно самое главное — браузер, поэтому ждем порта хромиума или файрфокса (и ТорБраузера заодно) :) А одно из возможных применений — «чистая система» (под которую с огромной долей вероятности не будет вирусов и эксплойтов) для выхода в инет из виртуалки — для задач с высокими требованиями к безопасности, типа интернет-банкинга.
Чёрт, как я соскучился по нормальному интерфейсу. Где кнопки это кнопки, а чекбокс это чекбокс, а не ползающий пупырь с меняющейся контекстной поясняющей надписью, не то в прямой, не то в обратной логике.
Чёрт, как я соскучился по нормальному интерфейсу. Где кнопки это кнопки, а чекбокс это чекбокс, а не ползающий пупырь с меняющейся контекстной поясняющей надписью, не то в прямой, не то в обратной логике.
На любой дистрибутив Линукса можно накатить любую DE и в ней что угодно под себя настроить. Обычно в них по умолчанию все и так нормальное. Вот LXDE например:
операционную систему еще не доработали. Но дело осталось за малым
Оптимизм — это, наверное, здорово, но когда взрослые дядьки демонстрируют незамутненную подростковую наивность, это уже по-другому называется. Как тут не вспомнить многострадальную ReactOS, которая последние десять лет «вот-вот и будет готова». Автор поста, вы серьезно считаете, что продемонстрированное поделие при всем уважении к труду авторов, которое (насколько я понял) хоть как-то запускается пока только на виртуальной машине, не умеет в многопоточность, не работает на современный процессорах, не имеет набора драйверов и утилии и пишется командой энтузиастов (я так понимаю, речи о полноценном тестировании не идет) хоть в каком-то обозримом будущем способно выйти в релиз?
У авторов серенити нет никакой наивности. Они пишут это не для того, чтобы оно когда-нибудь стало продакшен-системой, а для развлечения.
авторы проекта утверждают, что система собиралась практически с нуля
Денис Попов тоже что-то подобное утверждал. Наверное, не стоит все подряд утверждения транслировать безо всякой аналитики. Среди комментаторов (смотри комменты) тут же нашелся человек, который потрудился посмотреть в исходники и нашел тонну говнокода. У автора статьи на это мозгов не хватило, зато хватает их на прогнозы типа «дело осталось за малым».
нашел тонну говнокода
И что? Это не противоречит "собиралась практически с нуля" — Попов просто взял дистр линукса и ничего сам не писал, а тут всё самописное, достаточно посмотреть на этот самый код, его качество это уже другой вопрос.
Да и вообще насчёт говнокода — вы в ядро линукса когда-нибудь заглядывали? Там его тоже достаточно — даже сейчас, про первые версии я уже молчу, но ничего, работает ведь, шагает по планете. Можете для разнообразия глянуть на код windows (есть в сети), вообще страх и ужас — но это не мешает ему быть #1 в десктопах.
Объясните, пожалуйста, мне глупому, кому и зачем нужна ОС без софта, ну кроме как для развлечения?
а ещё Колибри есть. И #КОСМОС для создания своей оси. Тоже без нормальных дров и их там никогда не будет.
Я чего-то давно не слышал о подвижках Колибри. Её развивать перестали?
Не мне об этом говорить, но не кажется ли вам, что это изобретение (очередного) велосипеда? Да классно, да идейно, да лучше чем ничего, но это же столько труда и все ради "лофтовой" оси?
Очень и очень интересно.
Буду наблюдать за развитием проэкта. Интересно есть контрибьюторы из России?
Почему никто вместо очередного дистрибутива линукса не напишет ту самую киношную ОС с огромными прогрессбарами и анимацией интерфейса? :)
Кажется кто то не знает, что в KDE есть ретро темы)
Ох уж эти болгенОСы)
Посмотрел эту ОС, в принципе неплохо. Кто хочет попробовать без установки: https://copy.sh/v86/?profile=serenity
Правда на Serenity нету пакетного менеджера, что не очень удобно. Ну, кто ж без недостатков...
SerenityOS: Unix-подобная операционная система с кастомным ядром и графическим интерфейсом в стиле 90-х