Последний раз обновлено 10.02.014
Язык С предполагает использование плоской модели памяти. Это значит, что все указатели в программе ссылаются на одну и ту же физическую память, а различие областей этой памяти существует только логически. На компьютерах 70-х годов прошлого века, во времена создания языка С, такая модель имела свои преимущества.
К 80-м годам прошлого века идея модульного программирования была вполне сформирована, модульные программы признавались хорошо структурированными и надежными по сравнению с программами без модулей, но в общем требовали более сложной аппаратуры для своей работы. Существуют реальные процессоры, та же архитектура х86, которые поддерживают модульность программ аппаратно.
Модуль выделяет из общего адресного пространства область памяти "реализации", при этом эта область должна быть недоступна из остальных частей программы, модульные программы различают внутреннюю и внешнюю адресацию, для них не существует "универсального указателя" плоской модели памяти.
Логически модульная программа разделяет память на сегменты, поэтому такая программа если и не требует аппаратной защиты для сегментов, то точно может нормально работать на аппаратуре с сегментами.
Аппаратные сегменты, в той или иной их реализации, это аппаратная поддержка логически модульной структуры программы, поддержка такой технологии программирования, которая требует раздельных адресных пространств для интерфейса и реализации модуля.
Без аппаратной поддержки сегментов написать надежную систему, в которой одновременно выполняется много разных модулей, нельзя.