В чем преимущество написания ОС полностью в сборке? - PullRequest
6 голосов
/ 20 августа 2009

MenuetOS является примером ОС, полностью написанной на ассемблере. Есть ли какое-то преимущество в написании этого на ассемблере вместо низкоуровневого языка программирования, такого как C?

Ответы [ 9 ]

9 голосов
/ 20 августа 2009

Взаимодействие с ОС, как правило, проще всего на языке, на котором оно написано - C в UNIX и Win32, C ++ в BeOS и т. Д. MenuetOS был разработан специально для упрощения разработки приложений на ассемблере, поэтому лучшим выбором было написать сама ОС в сборке.

Для ОС, которые не предназначены для общего назначения, таких как встроенные системы и микроконтроллеры, накладные расходы, вносимые механическим переводом (то есть компиляцией) C в сборку, могут быть неприемлемыми. Компиляторы не так умны, как люди, особенно когда дело доходит до неоправданно небольших оптимизаций, требуемых на встраиваемых платформах, а запись непосредственно в сборке гарантирует, что компилятор не будет испортить тщательно разработанные алгоритмы.

5 голосов
/ 20 августа 2009

Предположительно, вы можете написать компактную и быструю ОС. Хотя, возможно, вы не сможете написать это быстро, и вы потеряете надежду на тривиальную переносимость.

3 голосов
/ 20 августа 2009

Главное преимущество: вам не нужен компилятор C . Вторичное преимущество: если вам нужно сделать размер кода действительно очень маленьким, то (а) современные компиляторы стремятся больше к быстрому выполнению, чем к небольшому размеру кода, и (б) человеческое наказание за написание ассемблерного кода меньше, если артефакт меньше.

Так что, если вы делаете какую-то действительно крошечную ОС для какой-то новой встроенной ISA, и все это должно соответствовать 4K, запись в ассемблере может быть хорошим выбором ...

3 голосов
/ 20 августа 2009

По-прежнему существует активное сообщество людей, которые устраивают демонстрации на собраниях. Есть сайты, где люди даже пишут демо-версии для 8-битной версии, например, машины C64 и Atari XL. Это просто их «оружие выбора». И им нравится кодировать в этом формате. И обеспечивает более высокую степень контроля, но требует большего понимания машины. Их мастерство над машиной и способность выполнять целые исполняемые файлы в меньшем объеме памяти, чем занимают стандартные C-библиотеки, дают им сильное чувство удовлетворения.

Независимо от того, насколько хорош ваш компилятор, он все равно следует механическому процессу генерации кода. Сборка в значительной степени дает вам полный контроль, позволяя вам делать вещи, которые нелегко представить даже языком вроде C. Например, «атомарные операции» обычно заключаются в вызове ОС или вызове функции, что делает их существенно менее эффективными, поскольку это не стандартный способ представить их на том языке, на котором он сам. (Иногда они будут представлены внутренним расширением компилятора до C.)

Кроме того, он позволяет выполнять нетрадиционные задачи, такие как использование стека процессоров способами, которые вы НЕ МОЖЕТЕ сделать в C. (Таким образом, в C вы создаете структуру данных «Stack», используя динамическое выделение памяти, чтобы реплицировать то, что процессор может изначально делаем.)

Размер по размеру. Я видел полноэкранный текстовый режим, текстовый редактор, для которого требовалось менее 512 байт для исполняемого изображения. Это написал парень, которого я знал по доскам объявлений. (До эры WWW.) Я видел код запуска C, который занимал больше памяти, чем это!

3 голосов
/ 20 августа 2009

Я полагаю, преимущество в том, что это дало им много хорошего пиара, учитывая количество мест, где я видел эту историю. Репутация дает вам лучшие рабочие места ...

3 голосов
/ 20 августа 2009

Оптимизированная сборка - самая быстрая, которую вы можете получить. Даже хорошо оптимизированный C заметно медленнее, чем хорошо продуманная сборка. Для операционной системы общего назначения, однако, выгоды не стоят трудности. Я не могу представить, чтобы сборка ОС масштабировалась в этой области. Насколько я помню, Menuet предназначен для очень маленьких, простых встроенных систем, где повышенная сложность кода сборки перевешивается преимуществами производительности.

0 голосов
/ 20 августа 2009

Кто-то может сказать - скорость и маленький код (под маленьким кодом я имею в виду не исходный код, конечно, но скомпилированный), что касается второго - вероятно, да, что касается скорости - я не знаю насколько Различия заключаются в том, что у вас есть приличный c-компилятор. Но я могу дать вам один большой недостаток - вы не можете портировать такую ​​ОС на другие архитектуры, а запись ОС на ассемблере привязывает вас к одной и выбранной архитектуре процессора. Я даже не буду упоминать время, которое вам придется потратить на написание такого программного обеспечения, по сравнению с C.

0 голосов
/ 20 августа 2009

Я думаю, только производительность и размер.

0 голосов
/ 20 августа 2009

На данный момент не так много, хотя это, естественно, зависит от того, для какой системы и для каких ресурсов вы пишете ОС. Почти все современные компьютеры поставляются в комплекте с компилятором C, который в основном настолько близок к машине, насколько это возможно, поэтому использование Assembly не поможет. С другой стороны, если вы пишете код для робота, сборка будет очень полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...