Это - копия документа, находившегося на http://dz.ru. Авторские права, если не указано иначе, принадлежат Дмитрию Завалишину и/или Евгении Завалишиной. Все изменения, внесенные мной, находятся в этой рамочке.Пожалуйста, прочитайте disclaimer. |
Вот он. Подбирается. Кто не верил в Y2K bug? Поглядите на его меньшого брата:
Так и в новый год будет - 32-е декабря, 33-е... :-)
Экспонат прислал Dmitry Moskovich. Спасибо!
Тому, кто хоть немного помнит физику и математику, будет, думаю, весело читать Открытое письмо в Государственный комитет по стандартам Александра Кондратьева и его же Физику вакуума. Прелесть, как хорошо написано. :-)
Рекламная пауза | |||
|
С 5 декабря 1999 года совершенно новая линейка сканеров Epson продается
в России под отдельной маркой Perfection. Что это значит и кто
за этим стоит? Подробности на www.perfection.ru |
||
На моё обвинение в адрес механизма своппинга (вообще-то правильно - пейджинга, но своппинг уж устоялся) Windows NT я, конечно, получил несколько писем. Из Микрософта, например, написали, что предложенная мной схема потребует усложнения своппера, что само по себе минус. Надёжность упадёт и тэ пэ.
Ну, на это мы скажем гневное нет. Давайте рассмотрим ситуацию более детально.
Итак, мы имеем традиционную ОС с подсистемой виртуальной памяти. Имеем 128М оперативки и для простоты положим, что всего лишь 28М заперты ядром и не свопятся. Осталось 100. В этом пространстве ютятся 5 процессов, каждый из которых хочет 20М памяти и один, который хочет 100. Первые 5 в настоящий момент не работают активно, то есть их окна минимизированы и их данные в основном им пока не нужны. То есть рабочее множество у каждого - по полмегабайта, а то и меньше. Остального процессор не касается. Последний, толстый процесс, имеет рабочее множество в 50 мегабайт и вполне активен. Естественно, что подсистема управления памятью весело вытеснит по 19.5 мегабайт у каждого из пяти тощих скучающих процессов на диск, а толстому живчику выдаст максимум возможного. Для простоты отставим в сторону объем, выделяемый под кеш - положим, он давно стабилизировался и не влияет на виртуалку.
Теперь толстый процесс отработал и закончился. После него осталось примерно от 50 до 90 мегабайт свободной оперативной памяти - зависит от того, как именно работал толстый процесс. Ну да это не важно. Уж полтинник-то точно есть.
Мы имеем 50М свободной оперативной памяти, около 100М высвопленных на диск страниц виртуальной памяти и пустой процессор. Давно пустой. Минуту.
Нет никакой причины не закидать обратно в память высвопленные страницы. Объём необходимого для этого кода в нормально написанной ОС занимает пять-десять строк на Си. Необходимо проверить загрузку процессора (один оператор If), наличие свободной памяти разумного размера (ещё один), поставить в очередь на swap in первую страницу из списка высвопленных (ещё два-три оператора) и уснуть на несколько миллисекунд, чтобы дать процессу стартовать (один). Если этого не сделать, то есть риск мгновенно набить очередь на своппинг до отказа, не дождавшись роста загрузки от первой операции по закачке страницы в память.
Итого менее десяти строк навскидку. Могут потребоваться отсемафоривания, что добавит ещё 2-6 строк. Код явно эвристического характера, но в любой ОС половина кода - такого характера, а вторая - вообще никакого. Работа с таблицами и списками, то есть.
Отрицательный эффект от такого кода несложно оценить. Поскольку мы не располагаем возможностью предсказывать будущее, вероятна ситуация, когда очередная превентивная загрузка страницы будет запущена непосредственно перед тем, как системе потребуется процессорная или дисковая подсистема для выполнения какой-либо иной работы. В этом случае мы затормозим работу системы в среднем на время одного позиционирования головок на своп-диске. Вероятность невелика, ущерб невелик - можно пренебречь.
Что касается превентивно загруженных страниц. Поскольку они не востребованы своими процессами, и не будь превентивной загрузки, так и лежали бы в свопе, никаких потерь памяти не происходит - страницы загружаются с диска и остаются в списках "чистых" - имеющих актуальную копию в свопе. Если процессу такая страница вдруг потребуется - мы в выигрыше, поскольку загрузили её заранее и снизили время ожидания для пользователя. Если она не потребовалась, но потребовалась другая, та, которую мы не загрузили, мы не в выигрыше, но и НЕ в проигрыше - одним оператором любую из (ошибочно) превентивно загруженных страниц можно освободить и загрузить на её место реально нужную.
Есть, впрочем, одна простая причина всего этого не делать. Если система рассчитывается на работу в режиме непрерывного пейджинга, то есть ситуация с десятью "минутами молчания" просто нереальна, а если нулевая загрузка процессора и бывает, то на краткие промежутки, то вся катавасия с превентивной загрузкой - мимо кассы. Создаваемая ей лишняя нагрузка (на диск, в первую очередь) будет постоянно пересекаться с полезной работой и заметно отнимать у машины производительность, а случайный выбор загружамеых страниц при небольшом объеме превентивной загрузки будет давать очень небольшой эффект.
Другими словами, одно дело - закрыть фотошоп и через пять минут открыть давно не использовавшееся окно word-а. Тут превентив даст очевидный и существенный результат. Другое - гонять на машине http- и SQL сервера под существенной нагрузкой.
Фактически, отсутствие в NT превентивной загрузки страниц означает, таким образом, одну простую вещь. Система позиционируется как сер-вер-на-я. И десктопные её применения компанию Микрософт волнуют не больше, чем вампира варёная морковка.
А про студентов, я, конечно, со зла. Студенты пишут подсистему security. И не только в Микрософте. Вон, DVD, опять же... :-)
Реклама | ||
"Говорят под Новый год, что не пожелается, то всегда произойдет, то всегда случается!" Только не говорите, что Вы никогда не мечтали стать обладателем легендарного пакета CorelDRAW, самого что ни на есть настоящего, в фирменной коробочке, с серийным номером и почетным званием легального пользователя. И вот, пожалуйста, CorelDRAW Select Edition стоит всего 50 долларов. Мы, конечно же, не ратуем за то, чтобы вместо подарков на Новый Год родным и близким, любимым и не очень, вы бросились покупать CorelDRAW, но почему бы не побаловать себя лично?
|
Вот ведь ушлость-то хакерская...
К разговору о DVD, зонах и взломе этого механизма. У Sony, в мире Playstation, существует подобное ограничение - диски с играми снабжаются кодом региона, и не всякий диск в результате будет работать на данном экземпляре Sony Playstation. Очевидно, это воспринимается пользователями как неудобство и, конечно, от такого неудобства хочется избавиться. И это вполне возможно. На фото изображён вполне промышленным путём изготавливающийся патч. Только не для софта, как это часто бывает, а для самой приставки. Достаточно открыть корпус и припаять несколько проводков к указанным точкам платы, соединив их с контактами этого крошечного блочка, как приставка позабудет сомнения и начнёт запускать любые диски - своего региона или чужого, "родные" или пиратские... очень удобно.
Принцип работы патча удивительно прост. Он представляет собой однокристальный микрокомпьютер, который синтезирует кодовую последовательность, соответствующую правильному и честному диску. Последовательность внедряется в то место схемы приставки, где она должна появляться при установке диска. Вот так всё просто.
Конечно, это решение - не панацея, взломать таким образом можно лишь оборудование, в котором присутствует и доступна для паяльника эта самая точка, куда можно подмешать подложный сигнал. При правильном проектировании её может не быть.
Но это при правильном проектировании. Даже Sony, заинтересованная в том, чтобы на её приставках работали только лицензионные игры, упустила это из виду и спроектировала вполне ломабельную схему игровой приставки.
Что же говорить о производителях DVD-проигрывателей? Они, в массе своей, вовсе не заинтересованы в ограничении возможностей своей продукции и, видимо, были бы рады, если бы их проигрыватель читал все диски без разбору. Что за резон в таком случае усложнять жизнь взломщика...
К чему я всё это говорю? Просто хочу ещё раз обратить внимание на тот факт,
что защитить диск от несанкционированного просмотра - крайне тяжело. Эту проблему
нужно решать нетехническим путём. Как и, например, проблему продажности русского
ГИБДД. Никакая слежка не поможет до тех пор, пока ситуация выгодна всем - и
водителям, и ГИБДД-шникам.
Спасибо всем, кто неустанно сообщал мне о проблемах с поиском. Дело в том, что первый заход с его починкой дал неправильные результаты и потребовалось второе вмешательство. Спасибо Сергею Трофимовскому, теперь всё работает отлично.