Skip to content
Perestoronin Pavel edited this page Jan 11, 2021 · 7 revisions

1. Виртуальная память: распределение памяти страницами по запросам, свойство локальности, рабочее множество, анализ страничного поведения процессов. Схема страничного преобразования в процессорах Intel (X86) PAE – размеры таблиц дескрипторов.

Стали делить память на страницы. Можно выполнить программу, которая находится не целиком в памяти. Для этого нужно содержать части кода с которыми в текущий момент работает процессор. Это воплотилось в понятие виртуальная память.

Виртуальная память – память, размер которой превышает размер реального физического пространства.

Существуют три схемы управления виртуальной памятью:

  1. управление памятью страницами по запросам;
  2. управление память сегментами по запросам;
  3. управление памятью сегментами, делёнными на страницы, по запросам.

Управление памятью страницами по запросам

Загрузка частей программы в память выполняется по запросу. Т.е. соответствие части кода загружаемого по запросу, когда процессор обращается к этим частям кода. Если в памяти отсутствует страница к которой было произведено обращение, то произойдет исключение.

Адресное пространство процесса и адресное пространство физической памяти делится на блоки равного размера. Блоки, на которые делится адресное пространство процесса называют страницами, а блоки на которые делится физическая память – кадрами, фреймами или блоками.

Виртуальный адрес состоит из номера страницы и смещения страницы.

При выполнении программы, которая находится не целиком в памяти, процесс потребует страницу, которой нет в оперативной памяти - возникнет исключение (страничная неудача - исправимое исключение), которое будет обработано в режиме ядра. В результате менеджер памяти попытается загрузить страницу в свободную память, а процесс на это время будет заблокирован. По завершении работы менеджера памяти страница будет загружена и процесс будет продолжать выполнятся с той команды на которой возникло исключение. Если свободная страница в физической памяти отсутствует то менеджер памяти должен выбрать страницу для замещения.

Свойство локальности

Если обращение было к странице, то наиболее вероятно, что следующее обращение будет к этой же странице.

Рабочее множество

Обслуживание страничных прерываний - важная проблема. Для её решения была сформулирована идея рабочего множества, а именно зависимость количества страничных прерываний от объёма памяти. Это обобщённая мера статичного поведения программы.

Обращение процесса к странице не является стабильным и равномерным. В качестве локальной меры производительности принимается число страниц, к которым обращался процесс за интервал времени delta(d), который был назван working set - рабочее множество.

Размер рабочего множества W является монотонной функцией от delta(t), то есть при увеличении delta(t) число страниц, к которому обращается процесс, будет стремиться к некоторому пределу, который и будет определять оптимальное количество страниц для выполнения программы.

В случае, если страницу загрузить не удалось, возникает trashing - подкачка одних и тез же страниц.

За время своей жизни процесс меняет свои рабочие множества.

hit rate - доля обращений, не потребовавших смены страницы.

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

Система может контролировать количество страничных прерываний. Если оно резко возросло, то это означает, что рабочее множество не может быть загружено в память. Таким образом, требуется увеличить размер квоты (выделенное изначально процессу количество страниц) на непродолжительный интервал времени.

Схема страничного преобразования в процессорах Intel (X86) PAE – размеры таблиц дескрипторов

Начиная с Pentium Pro был включен регистр CR4, где 5-ый бит - это PAE (Physical Adress Extension) - расширение физического адреса.

Если PAE = 1, то разрешено использование расширенного 36-разрядного, вместо 32-разрядного, физического адреса. При этом физический адрес остается 32-разярдным, все изменения касаются только работы страничного механизма.

2. Прерывания от системного таймера в защищенном режиме: функции (по материалам лабораторной работы).

На консультации она говорила, что UNIX/Windows работают в Long mode'e и типа это не защищенный режим, но тут написано "по материалам лабораторной работы"... Ничего не понятно....

UNIX

По тику:

  • инкрементирует счетчик тиков аппаратного таймера;
  • декременирует квант текущего потока;
  • обновляет статистику использования процессора текущим процессом — инкремент поля c_cpu дескриптора текущего процесса до максимального значения 127;
  • инкрементирует счетчики часов и других таймеров системы;
  • декрементирует счетчик времени до отправления на выполнение отложенного вызова (если счетчик достиг нуля, то выставление флага для обработчика отложенного вызова).

По главному тику:

  • регистрирует отложенные вызовы функций, относящиеся к работе планировщика, такие как пересчет приоритетов;
  • пробуждает в нужные моменты системные процессы, такие как swapper и pagedaemon. Под пробуждением понимается регистрация отложенного вызова процедуры wakeup, которая перемещает дескрипторы процессов из списка "спящих" в очередь готовых к выполнению.
  • декрементирует счётчик времени, оставшегося времени до посылки одного из следующих сигналов:
    • SIGALRM – сигнал, посылаемый процессу по истечении времени, предварительно заданного функцией alarm();
    • SIGPROF – сигнал, посылаемый процессу по истечении времени заданного в таймере профилирования;
    • SIGVTALRM – сигнал, посылаемый процессу по истечении времени, заданного в "виртуальном" таймере.

По кванту:

  • посылает текущему процессу сигнал SIGXCPU, если тот превысил выделенную ему квоту использования процессора.
Windows

По тику:

  • инкрементирует счётчик системного времени;
  • декрементирует квант текущего потока на величину, равную количеству тактов процессора, произошедших за тик (если количество затраченных потоком тактов процессора достигает квантовой цели, запускается обработка истечения кванта);
  • декрементирует счетчики времени отложенных задач;
  • если активен механизм профилирования ядра, инициализирует отложенный вызов обработчика ловушки профилирования ядра путем постановки объекта в очередь DPC: обработчик ловушки профилирования регистрирует адрес команды, выполнявшейся на момент прерывания.

По главному тику:

  • освобождает объект "событие", который ожидает диспетчер настройки баланса.

По кванту:

  • инициализирует диспетчеризацию потоков путем постановки соответствующего объекта в очередь DPC.

Clone this wiki locally