Bargest писал(а):
ИМХО на асме можно написать "хорошую ось" (вернее её ядро) целиком, и не так уж это прям нереально и архитрудно. И смысл есть - при нормальных навыках программирования работать оно будет быстрее, чем на ЯВУ
Ну дык этих осей было полно, ведь до Мультикса (самый конец 1960-х) вообще все они писались только на асме, да и после, вплоть до 1980-х, именно асм был основным языком.
Цитата:
Читаемость же зависит от стиля. Можно писать как КОС, которую действительно нереально поддерживать, а можно нормально оформлять и комментировать код, описывая всю логику работы.
Всё верно, но опять добавлю свою любимую заметку про то, что продуманная архитектура важней качественного написания. В конце концов, хорошо спроектированную, но плохо реализованную ОС можно переписать заново (вместо индусов-быдлокодеров посадить "белых людей"), а плохо спроектированной никакое качество собственно кодинга не поможет. У КОС с проектированием не просто плохо, а вообще никак, и именно это делает её абсолютно бесперспективной.
Цитата:
Но написать драйвера всех устройств и реализацию всех протоколов на асм невозможно по количеству времени, поскольку их огромное количество, к тому же под многие устройства есть готовые драйвера на ЯВУ (под тот же линух), которые можно при желании портировать (хоть часто непросто).
Насчёт времени Вы правы, а вот насчёт возможности портировать драйверы... Чтобы их просто взять готовыми, нужно, чтобы подсистема ввода-вывода, входящая в состав ядра системы, на 100% соответствовала системе, откуда берутся драйвера -- ну а по объёму и сложности эта подсистема превосходит любую другую, а зачастую одна имеет больший объём, чем всё остальное ядро системы со всеми этими многозадачностями, управлением памятью, таймерами и т.п. Но мало того, что нужна совместимость по вводу-выводу; остальное тоже очень важно. Например, многие драйверы в Винде используют потоки режима ядра -- пожалуй, самый большой недостаток архитектуры самой Винды, который не только усложняет систему, но ещё и делает её поведение малопредсказуемым. Соответственно, в самописной ОС, способной использовать драйверы Винды, необходимо обеспечить поддержку всех таких системных механизмов, т.е. по крайней мере в плане ядра написать свою Винду. То же самое касается и Линуха, и БЗДи, и любой другой системы. Ну а если ядро своей системы серьёзно отличается от другого, ни о каком простом портировании драйверов речи уже не будет: их придётся переделывать, и очень серьёзно.
Соответственно, как ни крути, а драйверы тоже придётся делать свои. Драйверы нижнего уровня, непосредственно взаимодействующие с "железом", есть смысл писать на ассемблере: они, как правило, небольшие по размерам и требуют таких специфических операций, как управление прерываниями, доступ к портам ввода-вывода и т.п. вещи, не слишком хорошо выразимые на языках высокого уровня (про эффективность уже вообще молчу, а ведь сокращение времени выполнения даже одного обработчика прерывания может прилично поднять характеристики системы в целом, в первую очередь её скорость реакции на эти самые прерывания). Кроме того, низкроуровневые драйверы привязаны к конкретному железу, а соответственно, и переносимость у них относительная (между разными системами её нет в силу различий в системных сервисах, предоставляемых ядром системы драйверам, ну а между разными архитектурами её нет в силу различий в программировании внешних устройств; лишь немногие устройства присутствуют в практически неизменном виде в разных архитектурах). А вот высокоуровневые драйверы типа файловых систем и сетевых протоколов, ИМХО, лучше писать на ЯВУ. Они действительно являются более-менее переносимыми и между разными архитектурами (поскольку не "завязаны" на аппаратуру), и между системами (поскольку интерфейс с ОС, зависящий от неё, обычно составляет лишь малую часть сложности таких драйверов, и проще переписать его, чем заново писать весь драйвер).