Введение
Набор ресурсов, активно используемых процессом.
Рабочий набор — это понятие в информатике, которое определяет объем памяти, необходимый процессу в заданный промежуток времени.
Определение
Питер Деннинг (1968) определяет "рабочий набор информации процесса в момент времени t" как совокупность информации, к которой процесс обращался в течение интервала времени своего выполнения. Как правило, единицы информации рассматриваются как страницы памяти. Предполагается, что это приближение к набору страниц, к которым процесс, вероятно, обратится в будущем (например, в течение следующих единиц времени), и, в частности, указание на то, какие страницы следует хранить в основной памяти для обеспечения максимальной производительности процесса.
Обоснование
Эффект от выбора того, какие страницы будут храниться в основной памяти (в отличие от вывода страниц во вспомогательное хранилище) имеет большое значение: если в основной памяти хранится слишком много страниц процесса, то одновременно готовыми к выполнению могут быть меньше других процессов. Если же в основной памяти хранится слишком мало страниц процесса, то резко возрастает частота возникновения ошибок страниц, и количество активных (не приостановленных) процессов, выполняющихся в системе, приближается к нулю. Модель рабочего набора утверждает, что процесс может находиться в оперативной памяти только в том случае, если все страницы, которые он в данный момент использует (часто аппроксимируемые наиболее недавно использованными страницами), помещаются в оперативную память. Эта модель основана на принципе "всё или ничего", то есть, если объём необходимых страниц увеличивается, а в оперативной памяти нет места, процесс выгружается из памяти, чтобы освободить её для других процессов. Часто сильно загруженный компьютер имеет настолько много процессов в очереди, что если бы всем процессам было разрешено выполняться в течение одного квантового интервала времени, они обращались бы к большему количеству страниц, чем доступно оперативной памяти, что приводило бы к "трешингу". Выгружая некоторые процессы из памяти, достигается эффект, при котором процессы – даже те, которые были временно удалены из памяти – завершаются значительно быстрее, чем если бы компьютер пытался запустить их все одновременно. Процессы также завершаются быстрее, чем если бы компьютер выполнял только один процесс за раз до завершения, поскольку это позволяет другим процессам выполняться и продвигаться вперёд, пока один процесс ожидает данные с жесткого диска или другого общего ресурса. Иными словами, стратегия рабочего набора предотвращает "трешинг", поддерживая при этом максимально возможную степень мультипрограммирования. Таким образом, она оптимизирует использование процессора и пропускную способность системы.
Реализация
Основным препятствием при реализации модели рабочего набора является отслеживание содержимого рабочего набора. Окно рабочего набора – это скользящее окно. При каждом обращении к памяти новое обращение добавляется на одном конце, а самое старое удаляется с другого. Страница считается принадлежащей рабочему набору, если на неё было обращение в пределах окна рабочего набора. Чтобы избежать накладных расходов на поддержание списка последних k обращений к страницам, рабочий набор часто реализуют, отслеживая время t последнего обращения и считая рабочий набор состоящим из всех страниц, к которым обращались за определённый период времени. Модель рабочего набора сама по себе не является алгоритмом замены страниц, но алгоритмы замены страниц могут быть разработаны таким образом, чтобы удалять только те страницы, которые не входят в рабочий набор для данного процесса. Примером такого подхода является модифицированная версия алгоритма "часов", известная как WSClock.
Варианты
Рабочий набор можно разделить на рабочий набор кода и рабочий набор данных. Это различие важно, когда код и данные разделены на соответствующем уровне иерархии памяти, поскольку если какой-либо из рабочих наборов не помещается на этом уровне иерархии, произойдет подкачка (thrashing). Помимо самого кода и данных, в системах с виртуальной памятью, записи отображения памяти (из виртуальной в физическую) страниц рабочего набора должны быть кэшированы в буфере трансляции адресов (TLB) для эффективного выполнения процесса. Это различие обусловлено тем, что код и данные кэшируются небольшими блоками (линиями кэша), а не целыми страницами, но поиск адресов осуществляется на уровне страницы. Таким образом, даже если рабочие наборы кода и данных помещаются в кэш, если они распределены по множеству страниц, рабочий набор виртуальных адресов может не поместиться в TLB, вызывая подкачку TLB. Аналоги рабочего набора существуют и для других ограниченных ресурсов, в частности, для процессов. Если набору процессов требуется частое взаимодействие между несколькими процессами, то у него есть рабочий набор процессов, который необходимо планировать совместно для продолжения работы: если процессы не планируются одновременно – например, если есть два процесса, но только одно ядро для их выполнения – то процессы могут продвигаться только со скоростью одного взаимодействия за квант времени. Другие ресурсы включают файловые дескрипторы или сетевые сокеты – например, копирование одного файла в другой проще всего выполнить с помощью двух файловых дескрипторов: один для ввода, один для вывода, и, следовательно, размер "рабочего набора файловых дескрипторов" составляет два. Если доступен только один файловый дескриптор, копирование все равно возможно, но требует получения дескриптора для ввода, чтения из него (например, в буфер), освобождения его, затем получения дескриптора для вывода, записи в него, освобождения его, а затем повторного получения дескриптора ввода и повторения. Аналогично, серверу может потребоваться много сокетов, и при ограничении ему придется неоднократно освобождать и повторно получать сокеты. Вместо подкачки, эти ресурсы обычно необходимы программе, и если она не может получить достаточно ресурсов, она просто завершается с ошибкой.
If the processes are not scheduled simultaneously – for example, if there are two processes but only one core on which to execute them – then the processes can only advance at the rate of one interaction per time slice. Other resources include file handles or network sockets – for example, copying one file to another is most simply done with two file handles: one for input, one for output, and thus has a "file handle working set" size of two. If only one file handle is available, copying can still be done, but requires acquiring a file handle for the input, reading from it (say into a buffer), releasing it, then acquiring a file handle for the output, writing to it, releasing it, then acquiring the input file handle again and repeating. Similarly a server may require many sockets, and if it is limited would need to repeatedly release and re acquire sockets. Rather than thrashing, these resources are typically required for the program, and if it cannot acquire enough resources, it simply fails.