porting.jpg

Переносимость — это свойство ПО, обеспечивающее перенос (портирование) выполнения кода с одной аппаратной платформе, для выполнения на другой.

Для пользовательских программ переносимость не всегда является целью, но для ядер OC и загрузчиков она часто остается таковой. Это значит, что их мультипортируемый код должен правильно выполняться на значительном количестве аппаратных платформ.

Разработка переносимого кода

Портирование требует строгого учета множества факторов, а именно:
• тип платформы (64, 32, 16, 8 бит)
• размер машинного слова
• использование скрытых и специальных типов данных
• размеры типов данных
• знак char
• выравнивание в памяти (выравнивание нестандартных типов, структур и пр.)
• порядок следования байтов
• получение и использование частоты работы ЦП
• получение и использование частоты срабатывания системного таймера
• размер страницы памяти
• аппаратная зависимость механизмов синхронизации
• порядок выполнения операций ЦП (преемптивность, верхняя память, SMP)
• аппаратная зависимость для некоторых обработчиков прерываний
• знание поведения компилятора и обход реализационно-зависимого поведения
• отказ/принятие во внимание свойств C, зависящих от реализации
• использование длинных имён с внешней связью
• использование ассемблера и ассемблерных вставок
• аппаратная зависимость части кода инициализация памяти и некоторых регистров
• и т.д

Всегда помните о проблемах переносимости и стремитесь к созданию ясного и портируемого кода. В большинстве случаев нужно просто гарантировать, что типы данных используются правильно.

Выбор языка программирования C — первый шаг в сторону уменьшения затрат на переносимость. Но есть ещё много других вещей, которые придется учитывать.

Отметим, что низкоуровневый код и код, который должен выполняться очень быстро, следует разрабатывать аппаратно зависимым и обычно на языке ассемблера.

В целом разработка переносимого кода должна подразумевать следующее:
• Код нужно создавать с учетом самого общего сценария
• Нужно предполагать, что случиться может все
• Нужно принять меры на все, что может случиться
• Нельзя полагаться на то, что будут доступны все возможности
• Нужно опираться только на минимум, доступный всем аппаратным платформам
• Нужно всегда использовать только переносимые типы в интерфейсах

При создании переносимого кода изолируйте аппаратно-зависимый и системно-зависимый код в отдельных модулях. Дозировано используйте препроцессор для облегчения переносимости. Минимизируйте аппаратно-зависимый объем кода.

Ссылки

Опыт и нюансы реализации переносимого кода детально освещены в следующих статьях:
Р.Лав Разработка ядра Linux
Переносимость. Основы
Написание переносимых программ
Переносимость ПО GNU

© Копировать пост можно лишь при наличии прямой индексируемой ссылки на youinf.ru

  

 

Ноль Комментариев

Оставьте первый Комментарий.

Оставьте Комментарий

 



 

Comment Spam Protection by WP-SpamFree

Trackbacks

 
 

Яндекс цитирования