вторник, 11 ноября 2008 г.

Windows 95 не загружается на машинах с памятью 1 Гб

Это перевод Windows 95 doesn't boot with more than 1GB of RAM. Автор: Реймонд Чен. Входит в книгу The Old New Thing.

Короткий ответ:

Windows 95 откажется загружаться, если ваша машина имеет памяти больше, чем примерно 480 Мб. В те времена это считалось огромным количеством памяти. Вспомните: целевой машиной для Windows 95 был 386SX с 4 Мб памяти на борту. А мощная машина в те времена имела 16 Мб. Закон Мура давал как минимум 7 лет прежде, чем о таком ограничении можно было бы беспокоиться. Один из моих знакомых даже не поленился найти машину с 96 Мб памяти, чтобы проверить, что Windows 95 не упадёт при работе с "невероятно большим количеством памяти" (и она работала).

Windows 98 подняла это ограничение до 1 Гб, потому что кое-кто (не будем его называть) был достаточно безрассуден, чтобы продавать машины с 1 Гб памяти и предустановленной Windows 98 вместо гораздо более подходящей Windows NT.

Длинный ответ:

Одним из первых действий при загрузке Windows 95 после переключения в 32-х разрядный режим является инициализация 32-битного менеджера памяти. При этом получается проблема курицы и яйца: менеджеру памяти нужно выделить себе кусок памяти, чтобы хранить, например, списки блоков памяти. Но он не может выделять память до того, как заработает менеджер памяти (т.е. он сам). Ой!

Было решено инициализировать менеджер памяти дважды.

Когда менеджер памяти инициализируется в первый раз, он берёт для себя всю доступную память из блока памяти фиксированного размера в сегменте данных типа init. Этот блок становится рабочей памятью для менеджера памяти. Именно отсюда он будет выделять память.

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

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

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

Память, которая хранила фиксированный блок, будет освобождена в конце процесса инициализации системы, когда освобождается сегмент данных init.

Ограничение на максимальный размер памяти возникает из-за размера начального фиксированного блока памяти. Он должен быть достаточно большим, чтобы удовлетворить все запросы на выделение памяти, когда менеджер памяти сканирует память системы. Если у вас слишком много памяти, то фиксированный блок заполнится и очередное выделение памяти станет неудачным. Т.е. сканирование памяти будет неудачным и система остановится.

Размер начального сегмента выбирается исходя из двух факторов. Чем больше вы сделаете его, тем больше памяти вы можете поставить в систему прежде чем столкнётесь с ограничением размера памяти. С другой стороны, вы не можете сделать его слишком большим, иначе на машинах с малым количеством памяти просто не останется места для загрузки VMM.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.

Примечание. Отправлять комментарии могут только участники этого блога.