dz offline
Фабрики – рабочим, землю – крестьянам, сегментацию – бамбуку!
Дмитрий Завалишин
Со времени выхода в свет первого 8086 и до самого дня рождения 80386 программисты всех стран и народов последовательно и непрерывно ругались на архитектуру адресации в этих процессорах, виданное ли дело, чтобы и шестидесяти пяти К нельзя было проехать, не наткнувшись на границу сегмента? И как же это муторно: постоянно переставлять сегменты из угла в угол, увеличивать указатель на единицу не командой inc, а с шаманскими танцами и проверкой выхода за границу сегмента, – в общем, было, было за что ругнуть незадачливых дизайнеров Intel. И вот настал тот светлый миг, когда появился на свет 386-й, и стало возможным адресовать 4G одним смещением, не сдвигая с места сегмента. Программисты прокричали "ура" и... перестали пользоваться сегментами вообще.
Нет, я понимаю, что глаза бы на них после стольких лет мытарств не смотрели, но нельзя же так! Там ребенок был, в выплеснутой-то воде, граждане! И немалый, я бы сказал. Ведь мучились-то мы не с сегментами все это время, а со "смещениями", нерюхи! В чем причина постоянных переходов от сегмента к сегменту? В том, что они МАЛЕНЬКИЕ, а не в том, что они есть на свете, и вовсе не за что их было со свету сживать. А FLAT-модель (это когда мы делаем вид, что в процессоре сегментных регистров нет, и нарочно лишаем себя возможностей, с ними связанных) -это не великое достижение человечества, а глупость на уровне детского "не играй в мои игрушки": мол, вы, сегменты, мне в 8086 столько крови попортили, что я вами теперь в отместку в 386-м пользоваться не буду. Правильно, так их, пусть им будет хуже. А мы помучаемся в тупом и прямом, как доска, адресном пространстве, которого не так и много, всего 4G, и стоит зарядить memory-mapped файлов приличных с десяток, да DLL'eй понагрузить, да еще shared memory свое отъест, и – приплыли. И ладно бы была польза какая, а то ведь наоборот, FLAT-модель неестественна для существующих ОС. Например, разделяемая между процессами память гораздо легче реализуется с использованием сегментов. DLL положить в отдельный сегмент – тоже удобно, а уж DLL'евские персональные данные просто просятся, как и отображаемые в память файлы, в сегмент.
Самое обидное же в этой истории с процессорами то, что давным-давно создан в недрах Intel процессор IAPX432, в котором работа с памятью реализована гораздо умнее, чем во всей пачке 80x86. Создан и похоронен. Однако переводную книжку с описанием его архитектуры еще можно найти в России. Увидите – обязательно почитайте, очень интересная вещь. С правильными и удобными сегментами.