"памятная" история
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.03 09:26
Оценка: 9 (2)
Здравствуйте, Znow, Вы писали:

Z>Гейтс, насколько я знаю, никогда не работал в ИБМ и в разработке ПК ИБМ участия не принимал.

Именно. Вообще-то, наверное, стоит пояснить для тех, кто не слишком бегло владеет ассеблером x86. Дело в том, что "указатель" в 8086 хранится в двух 16разрядных регистрах — сегмент и смещение. Очевидно, что это дает нам 32 разряда или 4Гб потенциально адресуемой памяти.
Однако, разработчики Intel решили сэкономить на ширине адресной шины. Она была 20разрядной, ограничивая, таким образом, доступную память 1 мегабайтом. 64килобайтные сегменты накладываются друг на друга довольно-таки плотно, не давая адресовать всю память. Да, это удобно, потому что ближние указатели (в пределах одного сегмента) короче полных, и позволяют довольно плавно передвигать кусок кода в памяти, подменяя сегмент. Однако, если бы для сегментного регистра был выбран множитель хотя бы 256, а не 16, то объем адресуемой памяти возрос бы до 16мб. А шаг сегментов все еще оставался бы достаточно мелким. Не думаю, что 24разрядная адресная шина стоила бы существенно дороже, хотя я недостаточно компетентен для того, чтобы судить об этом уверенно.
Именно инженеры Intel решили, что десятикратного увеличения адресуемой памяти более чем достаточно. Ни IBM, ни Microsoft не могли с этим ничего поделать. Есть мнение, что обе компании достаточно существенно влияли на разработку нового процессора Intel, но верится в это с трудом. Если IBM еще как-то могла быть пришлашена к диалогу в качестве основного заказчика новых микросхем, то у Microsoft, совершенно случайно оторвавшей контракт на разработку ОС для игрушки IBM, вряд ли бы кто стал просить совета по архитектуре процессора.
Да, если бы Intel был более дальновиден, то 386 процессор был, скорее всего, совсем другим. Проблемы с исчерпанием основной памяти наступили бы значительно позже, программистам не пришлось бы трахаться с DPMI, и виртуальная адресация еще несколько лет оставалась бы уделом больших машин.
Затрудняюсь представить себе дальнейшее влияние такого архитектурного изменения. Почему-то мне кажется, что оно бы имело скорее негативные последствия для IT-индустрии. Легендарный лимит в 640кб и требования совместимости с унаследованным кодом много лет были источником вдохновения для поколений инженеров, проектировавших процессоры.
... << RSDN@Home 1.0 beta 6 >>

17.02.03 15:23: Ветка выделена из темы просто lol :))
Автор: Dominion
Дата: 13.02.03
— _MM_
17.02.03 19:33: Перенесено модератором из 'Коллеги, улыбнитесь' — _MM_
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: "памятная" история
От: Znow  
Дата: 17.02.03 11:45
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>... стоит пояснить для тех, кто не слишком бегло владеет ассеблером x86. Дело в том, что "указатель" в 8086 хранится в двух 16разрядных регистрах — сегмент и смещение. Очевидно, что это дает нам 32 разряда или 4Гб потенциально адресуемой памяти.

S>Однако, разработчики Intel решили сэкономить на ширине адресной шины.

Здесь, вероятно, надо заметить, что в 1977 г., когда процессор разрабатывался, 1 МБ ОЗУ казался поистине оглушительным объемом адресного пространства даже для вполне серьезных ЭВМ (процессор серии DEC PDP-11 в большинстве моделей не адресует более 64 КБ), не говоря уж о "микрокомпьютерах", как их тогда называли.

Причины данного проектировочного решения вовсе не в экономии.

S>Она была 20разрядной, ограничивая, таким образом, доступную память 1 мегабайтом. 64килобайтные сегменты накладываются друг на друга довольно-таки плотно, не давая адресовать всю память.


Почему же? Давая. 1 МБ — все адресное пространство этого процессора. Оно все доступно с использованием данной схемы адресации.

S>Да, это удобно, потому что ближние указатели (в пределах одного сегмента) короче полных, и позволяют довольно плавно передвигать кусок кода в памяти, подменяя сегмент.


Sic! Это исключительно важно! Особенно учитывая важность определенного рода совместимости с CP/M-80 и другими получавшими тогда быстрое распространение ОС для 8-битных микро-ЭВМ.

S>Однако, если бы для сегментного регистра был выбран множитель хотя бы 256, а не 16, то объем адресуемой памяти возрос бы до 16мб. А шаг сегментов все еще оставался бы достаточно мелким.


Дело тут в экономии — но не адресного пространства, а реальной памяти (безумно дорогой в те времена). Допустим, у тебя есть два неких объекта (скажем, программных сегмента), загружаемых в разные сегменты памяти. Их размер нужно округлить вверх до величины, кратной шагу сегмента. На этом мы теряем от 0 до 15 байт. Это плохо (память жутко дорогая!), но куда хуже было бы, если бы теряли до 255 байт (представляете — 255 байт потеряны, истрачены впустую — безумная расточительность!).

S>Именно инженеры Intel решили, что десятикратного увеличения адресуемой памяти более чем достаточно.


Десятикратного . В шестнадцатеричной системе счисления.

S>Ни IBM, ни Microsoft не могли с этим ничего поделать.


ИБМ могла что-то поделать! Инженеры ИБМ, фигурально выражаясь, нарезали адресное пространство под различные нужды. Именно их волей начиная с адреса A0000h ОЗУ заканчивалась и начиналась системная область (видеопамять МДА и ПЗУ).

Воспринимая выпускаемый ПК лишь как игрушку, не имеющую перспекив развития, они отнеслись к этому делу "спустя рукава", сделав распределение адресов жестким и не подлежащим конфигурированию (чего, к примеру, удалось избежать инженерам DEC при создании серии PDP-11 — одно и то же ПО под ОС РТ-11 успешно могло работать как на "младших" процессорах с адресацией 64 КБ, так и на мощных процессорах "старших" моделей с адресацией до 16 МБ).

[ Фразы в сослагательном наклонении пропущены, с вашего дозволения ]
Re[7]: "памятная" история
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.03 12:06
Оценка:
Здравствуйте, Znow, Вы писали:

S>>Она была 20разрядной, ограничивая, таким образом, доступную память 1 мегабайтом. 64килобайтные сегменты накладываются друг на друга довольно-таки плотно, не давая адресовать всю память.


Z>Почему же? Давая. 1 МБ — все адресное пространство этого процессора. Оно все доступно с использованием данной схемы адресации.

Я имел в виду те 4Гб, которые можно было бы адресовывать при помощи двух 16-битных чисел.

Z>Дело тут в экономии — но не адресного пространства, а реальной памяти (безумно дорогой в те времена). Допустим, у тебя есть два неких объекта (скажем, программных сегмента), загружаемых в разные сегменты памяти. Их размер нужно округлить вверх до величины, кратной шагу сегмента. На этом мы теряем от 0 до 15 байт. Это плохо (память жутко дорогая!), но куда хуже было бы, если бы теряли до 255 байт (представляете — 255 байт потеряны, истрачены впустую — безумная расточительность!).

Абсолютных величин не бывает. Давайте посмотрим размер относительных потерь. Очевидно, что в среднем терялась бы половина шага округления, т.е. примерно 128 байт. Если средний размер сегмента равен 32K (половина от максимального), то потери памяти составят 128/32768=0.00390625, или 0.4%. Менее полупроцента денег, затраченных на покупку PC, (даже если считать, что вся стоимость — это память), выброшены впустую.
Z>Десятикратного . В шестнадцатеричной системе счисления.
Ну да, а инженеры IBM опустили эту планку до десятичной системы: 640k = 64k*10

Z>ИБМ могла что-то поделать! Инженеры ИБМ, фигурально выражаясь, нарезали адресное пространство под различные нужды. Именно их волей начиная с адреса A0000h ОЗУ заканчивалась и начиналась системная область (видеопамять МДА и ПЗУ).

Речь идет не об этих несчастных 384 килобайтах, а о потере 4Гб-1Mb потенциально адресуемой памяти.

Z>Воспринимая выпускаемый ПК лишь как игрушку, не имеющую перспекив развития, они отнеслись к этому делу "спустя рукава", сделав распределение адресов жестким и не подлежащим конфигурированию (чего, к примеру, удалось избежать инженерам DEC при создании серии PDP-11 — одно и то же ПО под ОС РТ-11 успешно могло работать как на "младших" процессорах с адресацией 64 КБ, так и на мощных процессорах "старших" моделей с адресацией до 16 МБ).

Стоит обратить внимание, что даже конфигурируемое распределение адресов не позволило бы подняться выше 1Mb из-за ограниченй адресной арифметики. Не знаю, как эту проблему решил DEC, но скорее всего множитель сегментного регистра там не равен 16.
... << RSDN@Home 1.0 beta 6 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: "памятная" история
От: Znow  
Дата: 17.02.03 12:18
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Znow, Вы писали:


S>Абсолютных величин не бывает. Давайте посмотрим размер относительных потерь. Очевидно, что в среднем терялась бы половина шага округления, т.е. примерно 128 байт. Если средний размер сегмента равен 32K (половина от максимального),


Очень часто программы создавали множество мелких сегментиков. Предположим, мы реализуем функцию malloc (модель памяти, скажем, большая). Разумно было бы на каждый запрос памяти отдавать адрес, несмещенный в своем сегменте. Например, если программа запросит 64 КБ (максимум возможного) под массив, это единственная альтернатива. Но чаще программа будет запрашивать по 100, 56, 234, в крайнем случае 5623 байта. Адреса размещенных блоков также проще возвращать в нормализованном виде с нулевым смещением.

S>Стоит обратить внимание, что даже конфигурируемое распределение адресов не позволило бы подняться выше 1Mb из-за ограниченй адресной арифметики.


На данном процессоре — нет. Но дальновидное решение могло бы оставить открытыми пути для роста. Фактически, все пришло к тому, что память росла-росла (с 16 КБ до 640 КБ) и уперлась в абсолютно непроницаемый жесткий потолок A0000h.

S>Не знаю, как эту проблему решил DEC, но скорее всего множитель сегментного регистра там не равен 16.


Там применялась другая архитектура, не основанная на сегментах.
Re[9]: "памятная" история
От: mvg_first Россия  
Дата: 17.02.03 12:31
Оценка:
Здравствуйте, Znow, Вы писали:

Это все прям как в институте каком нибудь теория сегментация памяти или еще что — ребяты Вы не забыли как называется ветка? Что смешного то? И куда только смотрит модератор
... << RSDN@Home 1.0 beta 6a >>
В борьбе бобра с ослом — всегда побеждает бобро!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.