Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Архитектура компьютера - Таненбаун Э.

Таненбаун Э. Архитектура компьютера — Спб.: Питер, 2007. — 844 c.
ISBN 5-469-01274-3
Скачать (прямая ссылка): arhkomputera2007.DjVu
Предыдущая << 1 .. 235 236 237 238 239 240 < 241 > 242 243 244 245 246 247 .. 422 >> Следующая

находятся во вспомогательной памяти. Если центральный процессор
попытается вызвать первую команду, он сразу получит ошибку отсутствия
страницы, в результате чего страница, содержащая первую команду, будет
загружена в память и внесена в таблицу страниц. После этого начнется
выполнение первой команды. Если первая команда содержит два адреса и оба
этих адреса находятся на разных страницах, причем не на той, в которой
находится команда, то произойдут еще две ошибки отсутствия страницы и еще
две страницы будут перенесены в основную память до завершения команды.
Следующая команда может вызвать еще несколько ошибок и т. д.
Такой метод работы с виртуальной памятью называется вызовом страниц по
требованию (demand paging). Такой вызов страниц напоминает кормление
младенца по требованию (в противоположность кормлению по расписанию):
когда младенец кричит, вы его кормите. При вызове страниц по требованию
страницы переносятся в основную память только в случае необходимости, но
не ранее.
Вопрос о том, стоит вызывать страницы по требованию или нет, имеет смысл
только при запуске программы. Когда программа проработает некоторое
время, нужные страницы уже окажутся в основной памяти. Однако если это
компьютер с разделением времени и процессы выгружаются, проработав
примерно 100 миллисекунд, то каждая программа будет запускаться
многократно. Для каждой программы распределение памяти уникально и при
переключении с одной программы на другую меняется, поэтому в системах с
разделением времени такой подход не годится.
Альтернативный подход основан на наблюдении, что многие программы
обращаются к адресному пространству неравномерно. Обычно большинство
обращений относятся к небольшому числу страниц. Это называется принципом
локальности. При обращении к памяти можно вызвать команду, вызвать данные
или сохранить данные. В каждый момент времени t существует набор страниц,
которые использовались при последних k обращениях. В [54] этот набор
страниц назван рабочим множеством.
Поскольку рабочее множество обычно меняется очень медленно, можно,
опираясь на последнее перед остановкой программы рабочее множество,
предсказать, какие страницы понадобятся при новом запуске программы. Эти
страницы можно загрузить заранее перед очередным запуском программы
(предполагается, что предсказание будет точным).
Политика замещения страниц
В идеале, чтобы сократить количество ошибок отсутствия страниц, можно
хранить в памяти набор страниц, которые постоянно используются программой
(так называемое рабочее множество). Однако программисты обычно не знают,
484
Глава 6. Уровень операционной системы
какие страницы находятся в рабочем множестве, поэтому операционная
система периодически должна показывать это множество. Если программа
обращается к странице, которая отсутствует в основной памяти, ее нужно
вызвать с диска. Однако чтобы освободить для нее место, на диск нужно
отправить какую-нибудь другую страницу. Следовательно, нужен алгоритм,
позволяющий определить, какую именно страницу необходимо удалить из
памяти.
Выбирать такую страницу просто наугад нельзя. Если, например, выбрать
страницу, содержащую команду, выполнение которой вызвало ошибку, то при
попытке вызвать следующую команду произойдет еще одна ошибка отсутствия
страницы. Большинство операционных систем стараются предсказать, какие из
страниц в памяти наименее полезны в том смысле, что их отсутствие
значительно не повлияет на ход программы. Один из методов решения этой
задачи таков: сначала прогнозируется время следующих обращений к каждой
странице, а затем страница, обращение к которой, согласно прогнозу,
должно произойти позже всех, удаляется. Иными словами, вместо того чтобы
удалять произвольную страницу, стараются выбрать такую страницу, которая
не понадобится достаточно долго.
По одному из алгоритмов удаляется та страница, которая дольше других не
использовалась, поскольку вероятность того, что она окажется в текущем
рабочем множестве, очень мала. Этот алгоритм называется LRU (Least
Recently Used - дольше всего не использовавшийся). Хотя этот алгоритм
работает достаточно хорошо, иногда возникают патологические ситуации. Вот
одна из них.
Представьте себе программу, выполняющую огромный цикл, занимающий 9
виртуальных страниц, в то время как в физической памяти место есть только
для 8 страниц. Когда программа перейдет к странице 7, в основной памяти
будут находиться страницы с 0 по 7. Затем совершается попытка вызвать
команду с виртуальной страницы 8, что вызывает ошибку отсутствия
страницы. В соответствии с алгоритмом LRU из памяти удаляется виртуальная
страница 0, поскольку она не использовалась дольше других. Виртуальная
страница 0 удаляется, а на ее место помещается виртуальная страница 8 (в
памяти оказываются страницы 1-8).
После выполнения команд с виртуальной страницы 8 программа возвращается к
началу цикла, то есть к виртуальной странице 0. Этот шаг вызывает еще
Предыдущая << 1 .. 235 236 237 238 239 240 < 241 > 242 243 244 245 246 247 .. 422 >> Следующая