Введение

Набор ресурсов, активно используемых процессом.

Рабочий набор — это понятие в информатике, которое определяет объем памяти, необходимый процессу в заданный промежуток времени.

Определение

Питер Деннинг (1968) определяет "рабочий набор информации процесса в момент времени t" как совокупность информации, к которой процесс обращался в течение интервала времени своего выполнения. Как правило, единицы информации рассматриваются как страницы памяти. Предполагается, что это приближение к набору страниц, к которым процесс, вероятно, обратится в будущем (например, в течение следующих единиц времени), и, в частности, указание на то, какие страницы следует хранить в основной памяти для обеспечения максимальной производительности процесса.

Обоснование

Эффект от выбора того, какие страницы будут храниться в основной памяти (в отличие от вывода страниц во вспомогательное хранилище) имеет большое значение: если в основной памяти хранится слишком много страниц процесса, то одновременно готовыми к выполнению могут быть меньше других процессов. Если же в основной памяти хранится слишком мало страниц процесса, то резко возрастает частота возникновения ошибок страниц, и количество активных (не приостановленных) процессов, выполняющихся в системе, приближается к нулю. Модель рабочего набора утверждает, что процесс может находиться в оперативной памяти только в том случае, если все страницы, которые он в данный момент использует (часто аппроксимируемые наиболее недавно использованными страницами), помещаются в оперативную память. Эта модель основана на принципе "всё или ничего", то есть, если объём необходимых страниц увеличивается, а в оперативной памяти нет места, процесс выгружается из памяти, чтобы освободить её для других процессов. Часто сильно загруженный компьютер имеет настолько много процессов в очереди, что если бы всем процессам было разрешено выполняться в течение одного квантового интервала времени, они обращались бы к большему количеству страниц, чем доступно оперативной памяти, что приводило бы к "трешингу". Выгружая некоторые процессы из памяти, достигается эффект, при котором процессы – даже те, которые были временно удалены из памяти – завершаются значительно быстрее, чем если бы компьютер пытался запустить их все одновременно. Процессы также завершаются быстрее, чем если бы компьютер выполнял только один процесс за раз до завершения, поскольку это позволяет другим процессам выполняться и продвигаться вперёд, пока один процесс ожидает данные с жесткого диска или другого общего ресурса. Иными словами, стратегия рабочего набора предотвращает "трешинг", поддерживая при этом максимально возможную степень мультипрограммирования. Таким образом, она оптимизирует использование процессора и пропускную способность системы.

Реализация

Основным препятствием при реализации модели рабочего набора является отслеживание содержимого рабочего набора. Окно рабочего набора – это скользящее окно. При каждом обращении к памяти новое обращение добавляется на одном конце, а самое старое удаляется с другого. Страница считается принадлежащей рабочему набору, если на неё было обращение в пределах окна рабочего набора. Чтобы избежать накладных расходов на поддержание списка последних k обращений к страницам, рабочий набор часто реализуют, отслеживая время t последнего обращения и считая рабочий набор состоящим из всех страниц, к которым обращались за определённый период времени. Модель рабочего набора сама по себе не является алгоритмом замены страниц, но алгоритмы замены страниц могут быть разработаны таким образом, чтобы удалять только те страницы, которые не входят в рабочий набор для данного процесса. Примером такого подхода является модифицированная версия алгоритма "часов", известная как WSClock.

Варианты

Рабочий набор можно разделить на рабочий набор кода и рабочий набор данных. Это различие важно, когда код и данные разделены на соответствующем уровне иерархии памяти, поскольку если какой-либо из рабочих наборов не помещается на этом уровне иерархии, произойдет подкачка (thrashing). Помимо самого кода и данных, в системах с виртуальной памятью, записи отображения памяти (из виртуальной в физическую) страниц рабочего набора должны быть кэшированы в буфере трансляции адресов (TLB) для эффективного выполнения процесса. Это различие обусловлено тем, что код и данные кэшируются небольшими блоками (линиями кэша), а не целыми страницами, но поиск адресов осуществляется на уровне страницы. Таким образом, даже если рабочие наборы кода и данных помещаются в кэш, если они распределены по множеству страниц, рабочий набор виртуальных адресов может не поместиться в TLB, вызывая подкачку TLB. Аналоги рабочего набора существуют и для других ограниченных ресурсов, в частности, для процессов. Если набору процессов требуется частое взаимодействие между несколькими процессами, то у него есть рабочий набор процессов, который необходимо планировать совместно для продолжения работы: если процессы не планируются одновременно – например, если есть два процесса, но только одно ядро для их выполнения – то процессы могут продвигаться только со скоростью одного взаимодействия за квант времени. Другие ресурсы включают файловые дескрипторы или сетевые сокеты – например, копирование одного файла в другой проще всего выполнить с помощью двух файловых дескрипторов: один для ввода, один для вывода, и, следовательно, размер "рабочего набора файловых дескрипторов" составляет два. Если доступен только один файловый дескриптор, копирование все равно возможно, но требует получения дескриптора для ввода, чтения из него (например, в буфер), освобождения его, затем получения дескриптора для вывода, записи в него, освобождения его, а затем повторного получения дескриптора ввода и повторения. Аналогично, серверу может потребоваться много сокетов, и при ограничении ему придется неоднократно освобождать и повторно получать сокеты. Вместо подкачки, эти ресурсы обычно необходимы программе, и если она не может получить достаточно ресурсов, она просто завершается с ошибкой.