Re[3]: Откуда такая неизбывная приверженность к константам?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 19.10.24 17:51
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

N>>Я плохо представляю себе процессор (особенно в то время) с неограниченными размерами адресных регистров и количеством проводов на внешней шине.

ЕМ>Пока смена архитектуры влекла за собой смену программной модели, и программы с 8-разрядных ПК не переносились автоматически на 16-разрядные, а с 16-разрядных — на 32-разрядные, разумно было исходить из разрядности архитектуры.

Где это у нас автоматический перенос программ?
К нему только-только подходят (ну если не считать Ada, Erlang и Python, и то, как только подходим к задачам типа математики или нейросетей — всё, приехали).

N>>А если мы имеем 20 бит, то потеря примерно половины из них на разные ROM, I/O и прочее — вполне естественна.

ЕМ>Господь с Вами, где там естественность? Половина от мегабайта — 512 кб, а на "разные ROM, I/O и прочее" попервости уходило чуть больше сотни.

A0000-BFFFF видеопамять всех видов
C0000-DFFFF область расширителей
E0000-FFFFF BIOS (да, занимал сильно больше 64KB, начиная ещё с AT)

Ну да, с запасом. В 1 из 3 (расширители) этот запас оказался лишним. В 2 из 3 (видеопамять и BIOS) стало не хватать, первое достаточно быстро поднялось до 256-512KB и ушло в отдельные адреса, второе — чуть медленнее, но микрухи ещё до EFI ставили вплоть до 512KB.

Конечно, если бы их поменяли местами, можно было бы непрерывным куском откусить от области расширителей, а не мапить в неё отдельным неудобным куском, как делали с XMS. Но и так разница между 640KB и 768KB не так долго была критичной.

И не надо вспоминать про "хватит всем", этот миф давно развенчан.

N>>то, что BIOS запускался с опять же константного адреса F000:FFF0, ты уже не считаешь? Что IDT реального режима сидела по адресу 0:0?

ЕМ>Это все жалкие копейки, какой смысл их вообще упоминать? Коню понятно, что ряд основных параметров неизбежно приходится фиксировать. Но этих параметров очень немного, подавляющее большинство остальных выбирается произвольно.

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

N>>Я не вижу твёрдых причин делать эти параметры переменными и требовать извлекать из какого-то справочника, если нет нескольких таких устройств (ресурсов, в общем случае). Там, где было (как компорты, в количестве от 1 до 8), BIOS таки давал такие данные по запросу.

ЕМ>То есть, протокол PnP Вы считаете стратегической ошибкой, и адреса/порты/прерывания до сих пор следовало настраивать перемычками?

А это уже от тебя встречный поиск границ

Нет, не считаю. Потому, что комплект аппаратуры стал вариабельнее. И по количеству (кто мешал впихнуть 4 ATA контроллера?), и по типу (вот у этой машины вообще нету ни ATA ни видео, зато есть два SCSI, один медный FiberChannel и COM-мультипортовка на 64 порта). И когда стало _легко_ делать вариабельные адреса, то это стали делать.

Заметь, MCA, на которой это впервые появилось, это ~1987. PCI это 1991. Прогресс был стремительным за это время, и возможность перешла из дорогого сегмента в общий. Но и то — вначале PCI имел подпорки для AGP, для ATA и ещё для чего-то, отдельными требованиями в стандарте. А это такая же фиксация.

Но и при этом полно зафиксированных вещей. Если ты посмотришь на описания северного моста, то у него на корневой PCI шине дофига фиксированных устройств, которые настраиваются через конфигурационное пространство PCI. Это сам корневой мост, это контроллер памяти, это ещё много чего. С приходом северного моста внутрь процессора суть не поменялась, там те же настройки, и BIOS начинает работу с их кручения. И там много ограничений в духе "Core 4-го поколения имеет только 40 (навскидку) физических линий адреса памяти", а в следующем поколении вдруг добавляют ещё 2 линии. Это всё естественные процессы развития.

N>>Всегда есть какие-то постоянные параметры. Начиная с кодов команд процессора

ЕМ>Боюсь, Вы не поняли исходной идеи. Или поняли, но из природного упрямства решили довести ее до абсурда.

Повторяю: не из какого-то упрямства, а в порядке поиска границ. Ты сам допускаешь, что какие-то значения должны быть константными. Но чётких критериев разграничения не дал.

EM>>>в 32-разрядной винде было 2+2 Гб, которые героическими усилиями переделали в 3+1.

N>>Эта переделка вообще потребовалась, потому что на 64 бита не успели быстро перейти.
ЕМ>А если бы изначально, вместо фиксации 2+2, определили M+N, то переделки не потребовалось бы вовсе, а реализация запроса M и N была бы, наверное, в тысячи раз дешевле той переделки.

Какие нафиг N и какие M? Чему они могли бы быть равны?

Есть определённые правила оптимальности конфигурации, за пределами которых она становится перекошенной и оттого бесполезной. Не было причины делать память юзерленда менее 2GB, потому что не нужно ядру столько; и невозможно давать на толстой машине (2-4GB RAM) меньше 0.5GB ядру, потому что оно тогда только и делало бы, что гоняло байтики между буферами. В линуксе тех времён было такое понятие, как bounce buffers. Почитай про него.

Вот потому и делали 2:2, 3:1 и для особых извращенцев — 3.5:0.5, но в последнем случае уже гнали калёной метлой на 64-битные машины, на которых не надо было упираться в ограничения и работали они уже лучше, чем в таком кривом варианте.

N>>В остальном от неё проблем больше, чем пользы.

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

Ну расскажи, в чём именно непродуманность.

N>>то, что в автомобиле конкретные габариты и диаметр колёс, ты тоже будешь считать неоправданно зафиксированной константой?

ЕМ>Если Вы о габаритах кузова, то они соответствуют как раз исходным константам архитектуры — разрядности магистрали и адресного пространства.

Нѣтъ! Им соответствует функциональность типа "возить до 4 человек весом до 100 кг с грузом в объёме до двух обычных чемоданов, со скоростью до 150 км/ч". А какого размера будет при этом машина — это уже как раз вопрос реализации.

EM> Неоправданной фиксацией было бы, например, искусственное, произвольное разделение багажника на секции, из-за которого невозможно было бы загрузить предмет, не помещающийся в секцию.


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

N>>А питающее напряжение в электросети?

ЕМ>Это тоже исходный параметр. Неоправданной фиксацией константы было бы, например, произвольное ограничение величины тока, потребляемого из одной розетки.

Ну так и оно тоже есть. Большинство наших розеток ограничены 10A. А если я хочу 10.8? Ставить другие розетки и вилки.

Вернёмся от аналогий к основному вопросу. Я всё-таки не вижу, где эти ограничения были бы настолько неоправданны, что заставили бы страдать индустрию без причины на длительный срок. Вместо этого я вижу, что как только упирались в них, достаточно быстро находился вариант решить проблему переходом за следующий порог, который при этом был в разы дальше. Но чтобы без порога вообще — такого не бывало, потому что мы в реальном мире.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.