Сперва были и 640 кб доступной обычной памяти, и жестко заданные адреса областей внешних устройств, хотя все это можно было запихать в BIOS, и возвращать конкретные адреса по запросам. Затем в 32-разрядной винде было 2+2 Гб, которые героическими усилиями переделали в 3+1. В 64-разрядной винде снова 8+8 Тб. Сейчас читаю про макось — и там тоже сплошные явно определенные константы.
Это что-то вроде профессионального бега по граблям, или действительно есть серьезная необходимость изначально задавать эти адреса/размеры глобальными константами вместо того, чтобы определить их только внутри ядра, а всем внешним модулям (даже драйверам и системным службам) возвращать конкретные значения исключительно по запросам)?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Сперва были и 640 кб доступной обычной памяти, и жестко заданные адреса областей внешних устройств, хотя все это можно было запихать в BIOS, и возвращать конкретные адреса по запросам. Затем в 32-разрядной винде было 2+2 Гб, которые героическими усилиями переделали в 3+1. В 64-разрядной винде снова 8+8 Тб.
Это что ещё за 8+8 такое, просто любопытно? А причина может быть простая — одним битом удобно управлять трафиком на системной шине: нет бита == RAM, есть бит == MMIO, и это, например, прибито гвоздями в железе.
Re[2]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, aik, Вы писали:
aik>Это что ещё за 8+8 такое
Ошибся — 8 Гб там только на процессы, адреса ядра размазаны с 0xFFFF0800'00000000 по 0xFFFFFFFF'FFFFFFFF. Но все равно ж это явно определенные константы — какая необходимость жестко фиксировать их наперед?
aik>А причина может быть простая — одним битом удобно управлять трафиком на системной шине: нет бита == RAM, есть бит == MMIO, и это, например, прибито гвоздями в железе.
В каких-нибудь микроконтроллерах это может быть и удобным, но не в вычислительных же (в широком смысле) системах.
Re[3]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Ошибся — 8 Гб там только на процессы, адреса ядра размазаны с 0xFFFF0800'00000000 по 0xFFFFFFFF'FFFFFFFF. Но все равно ж это явно определенные константы — какая необходимость жестко фиксировать их наперед?
В 64-х битах такое разделение диктует железо.
Re[4]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Евгений Музыченко, Вы писали:
Pzz>>В 64-х битах такое разделение диктует железо.
ЕМ>Любое 64-разрядное железо диктует одну и ту же схему разделения адресов?
x86, я имею ввиду. Не удивлюсь, если и ARM тоже, в порядке подражания.
Re[6]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Евгений Музыченко, Вы писали:
Pzz>>x86, я имею ввиду.
ЕМ>Угу, а при проектировании любой ОС всегда наперед известно все без исключения железо, на котором она будет работать?
А на другом железе, возможно, константы будут другими, не?
Здравствуйте, Marty, Вы писали:
M>А на другом железе, возможно, константы будут другими, не?
Ну да, могут. И при таком подходе разбираться с ними придется и всем модулям ОС, которых это касается, и каждому стороннему софту отдельно. Когда можно было забить эти константы в один соответствующий модуль ОС, который отдавал бы их по запросу.
Re[9]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Евгений Музыченко, Вы писали:
M>>А на другом железе, возможно, константы будут другими, не?
ЕМ>Ну да, могут. И при таком подходе разбираться с ними придется и всем модулям ОС, которых это касается, и каждому стороннему софту отдельно. Когда можно было забить эти константы в один соответствующий модуль ОС, который отдавал бы их по запросу.
И чем лучше разбираться в ран-тайме лучше, чем разбираться в компайл-тайме?
Здравствуйте, Евгений Музыченко, Вы писали:
Pzz>>x86, я имею ввиду.
ЕМ>Угу, а при проектировании любой ОС всегда наперед известно все без исключения железо, на котором она будет работать?
При проектировании винды, да. Линукс, наверное не обязательно.
Re[8]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Sharowarsheg, Вы писали:
ЕМ>>Угу, а при проектировании любой ОС всегда наперед известно все без исключения железо, на котором она будет работать?
S>При проектировании винды, да. Линукс, наверное не обязательно.
Здравствуйте, Sharowarsheg, Вы писали:
ЕМ>>при проектировании любой ОС всегда наперед известно все без исключения железо, на котором она будет работать?
S>При проектировании винды, да.
И что, при проектировании NT в конце 80-х было известно, что она будет работать на MIPS, IA-64, Amd64, ARM?
Re[9]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>>>при проектировании любой ОС всегда наперед известно все без исключения железо, на котором она будет работать?
S>>При проектировании винды, да.
ЕМ>И что, при проектировании NT в конце 80-х было известно, что она будет работать на MIPS, IA-64, Amd64, ARM?
NT третья, которая 3.5 и 3.51? Нет, очевидно. x86 и альфа, а всё остальное — как повезло.
Когда понадобилось x64, поправили ядро на новые константы, да и всё.
Re[10]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, Sharowarsheg, Вы писали:
S>>Когда понадобилось x64, поправили ядро на новые константы, да и всё.
ЕМ>А что именно выиграли-то за счет констант?
Быстро, удобно, и практично. 3.51 NT, между прочим, запускалась на 8 MB оперативки. Наверное, и на 4 тоже, но я не пробовал.
Re[12]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Sharowarsheg, Вы писали:
ЕМ>>А что именно выиграли-то за счет констант? S>Быстро, удобно, и практично.
Первое верно — в данном случае, как я уже намекал, позволяло выиграть какую-нибудь десятитысячную долю процента от скорости/объема (сейчас это значение нужно уменьшить еще раз в тысячу). Достойный выигрыш, безусловно.
Второе верно исключительно в сиюминутном плане. Вспоминаем PC, в которой видеопамять была прибита гвоздями к A000, дисковое ПО — к C000, и т.п., и какие пляски требовались для использования свободных промежутков адресного пространства. А ведь даже тогда лишняя пара перемычек на плате совершенно терялась в стоимости любой платы, и все эти прибитые адреса могли бы определяться софтом через запросы к BIOS.
С виндой было то же самое — сперва казалось, что 2 Гб — это непредставимо большой объем ОЗУ, а потом пришлось извращаться с ужиманием пространства ядра до 1 Гб. Хотя не было никаких препятствий к тому, чтобы раскладывать ядро сверху вниз, и оно со всеми потрохами могло бы занимать 20-50-100 Мб, оставляя все остальное для пользовательских процессов. На хрена ему было в конце 80-х два гигабайта, когда даже сейчас 64-разрядная десятка и одного ядром не занимает?
Так что реально удобнее — экономия одного килобайта(это я еще сильно завысил) кода для изначальной поддержки динамического размещения, или весь тот геморрой, что потребовался для переделки и тестирования с 2+2 на 3+1?
Ну и практично это исключительно в одном плане — чтобы занять работой достаточное количество людей. Техническая практичность здесь отсутствует напрочь.
S>3.51 NT, между прочим, запускалась на 8 MB оперативки. Наверное, и на 4 тоже, но я не пробовал.
Верно. Так для чего ей были константно заложены те два гига только под одно ядро?
Re[13]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Ну и практично это исключительно в одном плане — чтобы занять работой достаточное количество людей. Техническая практичность здесь отсутствует напрочь.
S>>3.51 NT, между прочим, запускалась на 8 MB оперативки. Наверное, и на 4 тоже, но я не пробовал.
ЕМ>Верно. Так для чего ей были константно заложены те два гига только под одно ядро?
Чтобы я сейчас, через тридцать или сколько-там лет, мог запустить её с двумя гигами под ядро — примерно в 100 раз больше, чем исходно было задумано.
Re[14]: Откуда такая неизбывная приверженность к константам?
Здравствуйте, Sharowarsheg, Вы писали:
ЕМ>>Так для чего ей были константно заложены те два гига только под одно ядро?
S>Чтобы я сейчас, через тридцать или сколько-там лет, мог запустить её с двумя гигами под ядро — примерно в 100 раз больше, чем исходно было задумано.
А сумеете внятно объяснить, как на эту возможность повлияла именно константность раскладки адресного пространства?