Измененное сжатие памяти - RU2673694C2

Код документа: RU2673694C2

Чертежи

Показать все 11 чертежа(ей)

Описание

Уровень техники

[0001] С прогрессом компьютерной технологии увеличилась производительность процессоров компьютеров. Однако производительность таких процессоров компьютеров иногда замедляется другими сдерживающими факторами в компьютере. Например, скорость передачи данных с жестких дисков в оперативную память (RAM) является сдерживающим производительность компьютера фактором. Одним способом уменьшения влияния сдерживающих факторов в компьютере является хранение большего объема данных в RAM. Однако стоимость RAM остается достаточно высокой, так что обычно невыгодно использовать очень большие объемы RAM в компьютерах.

Сущность изобретения

[0002] Данная Сущность изобретения предоставляется, чтобы представить набор идей в упрощенном виде, которые дополнительно описываются ниже в Подробном описании. Данная Сущность изобретения не предназначена для определения ключевых признаков или существенных признаков заявленного предмета изобретения, и также не предназначена для использования в ограничении объема заявленного предмета изобретения.

[0003] В соответствии с одним или несколькими аспектами идентифицируется первый набор страниц памяти, которые изменены. Первый набор страниц памяти сжимается в сжатое хранилище, которое состоит из второго набора страниц памяти. После того, как первый набор страниц памяти сжат в сжатое хранилище, диспетчеру памяти разрешено переориентировать первый набор страниц памяти. Более того, второй набор страниц памяти записывается в файл подкачки вместо записи первого набора страниц памяти в файл подкачки.

[0004] В соответствии с одним или несколькими аспектами вычислительное устройство включает в себя память, диспетчер памяти, сконфигурированный для управления страницами памяти, и диспетчер сжатого хранилища. Диспетчер сжатого хранилища конфигурируется для сжатия в сжатое хранилище, ассоциированное с процессом, первого набора страниц памяти, которые изменены процессом, причем сжатое хранилище состоит из второго набора страниц памяти. Диспетчер сжатого хранилища дополнительно конфигурируется для разрешения диспетчеру памяти переориентировать страницу памяти для каждой страницы памяти в первом наборе страниц памяти после того, как страница памяти сжата в сжатое хранилище, и записи второго набора страниц памяти в файл подкачки при отсутствии записи первого набора страниц памяти в файл подкачки.

Краткое описание чертежей

[0005] Во всех чертежах используются одинаковые номера для ссылки на сходные признаки.

[0006] Фиг. 1 иллюстрирует примерную систему, применяющую измененное сжатие памяти в соответствии с одним или несколькими вариантами осуществления.

[0007] Фиг. 2 иллюстрирует примерный жизненный цикл страниц памяти в соответствии с одним или несколькими вариантами осуществления.

[0008] Фиг. 3 иллюстрирует примерную запись страничной памяти в соответствии с одним или несколькими вариантами осуществления.

[0009] Фиг. 4 иллюстрирует пример сжатия страниц памяти в соответствии с одним или несколькими вариантами осуществления.

[0010] Фиг. 5 - блок-схема алгоритма, иллюстрирующая примерный процесс для сжатия страниц памяти в соответствии с одним или несколькими вариантами осуществления.

[0011] Фиг. 6 - блок-схема алгоритма, иллюстрирующая примерный процесс для извлечения сжатых страниц памяти в соответствии с одним или несколькими вариантами осуществления.

[0012] Фиг. 7 иллюстрирует примерную карту страниц памяти в соответствии с одним или несколькими вариантами осуществления.

[0013] Фиг. 8 иллюстрирует примерную карту областей в соответствии с одним или несколькими вариантами осуществления.

[0014] Фиг. 9 показывает пример выгрузки рабочего набора в соответствии с одним или несколькими вариантами осуществления.

[0015] Фиг. 10 - блок-схема алгоритма, иллюстрирующая примерный процесс для выгрузки рабочего набора в соответствии с одним или несколькими вариантами осуществления.

[0016] Фиг. 11 - блок-схема алгоритма, иллюстрирующая примерный процесс для загрузки рабочего набора в соответствии с одним или несколькими вариантами осуществления.

[0017] Фиг. 12 иллюстрирует примерную систему, которая включает в себя примерное вычислительное устройство, которое соответствует одной или нескольким системам и/или устройствам, которые могут реализовывать различные описанные в этом документе методики.

Подробное описание

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

[0019] Более того, в некоторых ситуациях, например, когда программа приостановлена, рабочий набор страниц памяти выгружается. Выгрузка рабочего набора страниц памяти включает в себя идентификацию списка страниц памяти в рабочем наборе процесса программы, сжатие идентифицированных страниц памяти и запись сжатых идентифицированных страниц памяти в сжатое хранилище последовательно по виртуальному адресу в памяти у идентифицированных страниц памяти. В файле подкачки резервируется пространство для сжатого хранилища, и сжатое хранилище записывается в зарезервированное пространство в файле подкачки.

[0020] В ответ на последующее определение, что программу нужно возобновить, загружается рабочий набор страниц памяти для программы. Загрузка рабочего набора страниц памяти включает в себя извлечение сжатого хранилища из файла подкачки и сохранение сжатого хранилища в набор страниц памяти сжатого хранилища. Страницы памяти сжатого хранилища распаковываются и возвращаются диспетчеру памяти для включения в рабочий набор программы.

[0021] Фиг. 1 иллюстрирует примерную систему 100, применяющую измененное сжатие памяти в соответствии с одним или несколькими вариантами осуществления. Система 100 включает в себя диспетчер 102 памяти, диспетчер 104 сжатого хранилища и страничную память 106. Как правило, диспетчер 102 памяти управляет хранением данных в страничной памяти 106. Диспетчер 102 памяти выделяет части страничной памяти 106 различным программам 108 в системе 100. Программа 108 при работе также называется в этом документе процессом (который является экземпляром работающей программы 108), поэтому части страничной памяти 106, выделенные программе 108, также называются выделенными процессу программы 108. Страницы, выделенные процессу, принадлежат или предназначены тому процессу, и используются тем процессом и никаким другим процессом (и соответственно, также называются закрытыми страницами). Программы 108 могут быть приложениями, программами операционной системы или другими компонентами либо модулями. Диспетчер 102 памяти принимает запросы от этих программ 108 для извлечения данных из страничной памяти 106 и записи данных в страничную память 106. Страничная память 106 может быть, например, любым типом адресуемой CPU (центральным процессором) памяти, например энергозависимой памятью (например, RAM) или энергонезависимой памятью (например, флэш-памятью).

[0022] Диспетчер 102 памяти также выделяет одну или несколько частей страничной памяти 106 диспетчеру 104 сжатого хранилища. Хотя и проиллюстрирован отдельно, диспетчер 104 сжатого хранилища рассматривается как программа 108 с целью выделения страниц памяти. Диспетчер 104 сжатого хранилища формирует одно или несколько сжатых хранилищ 110 для хранения данных в сжатом виде, например, одно сжатое хранилище 110 для каждой программы 108. Система 100 также включает в себя файл 112 подкачки, который является файлом на запоминающем устройстве, в котором можно хранить страницы памяти. Запоминающее устройство, в котором хранится файл 112 подкачки, является вспомогательным запоминающим устройством в системе 100, и в одном или нескольких вариантах осуществления имеет большее время чтения/записи, но больший объем памяти, нежели страничная память 106. Запоминающее устройство, в котором хранится файл 112 подкачки, может быть, например, флэш-памятью (например, твердотельным диском (SSD)) или магнитным диском. Хотя на фиг. 1 иллюстрируется один файл 112 подкачки, следует отметить, что в систему 100 можно включить несколько файлов подкачки.

[0023] Диспетчер 102 памяти управляет страничной памятью 106 с использованием подкачки. Диспетчер 102 памяти выстраивает память 106 (например, RAM) в страницы, которые являются единицей данных конкретного (например, фиксированного) размера. Действие подкачки относится к считыванию данных в единицах страниц из базового файла, которым в системе 100 является файл 112 подкачки, когда данные не находятся в памяти 106. Действие подкачки также относится к записи недействительных (измененных) данных обратно в файл 112 подкачки в единицах страниц. Страницы памяти соответственно также называются страницами памяти, базирующимися в файле подкачки. Такие методики подкачки известны специалистам в данной области техники.

[0024] Диспетчер 102 памяти включает в себя контроллер 114 памяти, который работает для осуществления функциональных возможностей диспетчера 102 памяти, и таблицу 116 страниц, которая является записью различной информации касательно страниц памяти в страничной памяти 106. Таблица 116 страниц включает в себя информацию, указывающую, где хранятся страницы памяти в любое заданное время. Как подробнее обсуждается ниже, страницы памяти обычно хранятся в физической памяти (страничной памяти 106) или в сжатом хранилище 110 (которое само может храниться в физической памяти или в файле 112 подкачки), хотя в некоторых ситуациях несжатые страницы памяти могут храниться в файле 112 подкачки. Для страниц памяти, сохраненных в физической памяти, диспетчер 102 памяти напрямую обращается к страницам памяти. Для страниц памяти, сохраненных в сжатом хранилище 110, диспетчер 102 памяти запрашивает страницы памяти у диспетчера 104 сжатого хранилища, который извлекает и при необходимости распаковывает страницы памяти, и возвращает диспетчеру 102 памяти распакованные страницы памяти. В случае, когда несжатая страница памяти хранится в файле 112 подкачки, диспетчер памяти извлекает страницу памяти из файла 112 подкачки.

[0025] Страничная память 106 включает в себя несколько страниц, каждую из которых в любое заданное время можно классифицировать как один из нескольких разных типов страниц, и эта классификация со временем может меняться. Одним типом страницы памяти является страница памяти, которая выделена программе 108 и в настоящее время используется той программой 108, и этот тип страницы памяти называется страницей рабочего набора (или, в качестве альтернативы, назначенной страницей) в рабочем наборе процесса программы 108 (также называемом рабочим набором программы 108). Используемая в настоящее время страница памяти относится к странице памяти, к которой программа 108 обратилась в рамках порогового количества времени (например, предшествующие 20 секунд), или к которой программа 108 обращается иным образом, так что страницу памяти не нужно переориентировать с помощью диспетчера 102 памяти. Переориентация страницы памяти относится к повторному использованию страницы памяти диспетчером 102 памяти для чего-либо еще, например, хранения других данных для той же или другой программы либо для другого использования в системе.

[0026] Другим типом страницы памяти является страница памяти, которая выделена программе 108 и не используется программой 108 в настоящее время, и этот тип страницы памяти называется ожидающей страницей (или, в качестве альтернативы, переназначаемой страницей). Страница памяти, не используемая в настоящее время, относится к странице, содержимое которой не изменено (или записано в файл 112 подкачки либо сжатое хранилище 110 с момента последнего изменения), и к которой программа 108 не обратилась в рамках порогового количества времени (например, предшествующие 20 секунд), или к которой программа 108 обращается иным образом, так что страницу памяти можно переориентировать с помощью диспетчера 102 памяти. Страницу памяти можно переориентировать, например, путем назначения ей другого типа страницы (например, рабочего), выделения ее другой программе и так далее.

[0027] Другим типом страницы памяти является страница памяти, содержимое которой изменено, но еще не скопировано в файл 112 подкачки, и этот тип страницы памяти называется измененной страницей (или, в качестве альтернативы, недействительной страницей). Измененную страницу памяти не нужно переориентировать с помощью диспетчера 102 памяти. Однако после сжатия и сохранения измененной страницы памяти в сжатом хранилище 110, как подробнее обсуждается ниже, можно изменить классификацию страницы памяти (например, на ожидающую страницу или свободную страницу).

[0028] Другим типом страницы памяти является страница памяти, которая в настоящее время не выделена программе 108 и с которой диспетчер 102 памяти может делать все, что угодно (включая переориентацию). Этот тип страницы памяти называется свободной страницей (или, в качестве альтернативы, освобожденной страницей).

[0029] Диспетчер 102 памяти использует различные правила или критерии для определения, когда страницы памяти в страничной памяти 106 распределяются программам 108, какие страницы памяти распределяются каким программам 108, какие страницы памяти, ранее выделенные программе 108, нужно переориентировать, и так далее. Диспетчер 102 памяти при необходимости также определяет классификацию для типов страниц памяти, изменение классификаций страниц памяти. В одном или нескольких вариантах осуществления диспетчер 102 памяти ведет список или другую запись того, какие страницы памяти в страничной памяти 106 классифицируются по какому типу страницы. Например, диспетчер 102 памяти может вести список или другую запись страниц рабочего набора, список или другую запись ожидающих страниц, список или запись измененных страниц, список или запись свободных страниц и так далее.

[0030] Система 100 представляет одно или несколько устройств. В одном или нескольких вариантах осуществления проиллюстрированные в системе 100 компоненты 102-108 включаются как часть одного и того же вычислительного устройства. В качестве альтернативы компоненты можно распределить по двум или более устройствам.

[0031] Фиг. 2 иллюстрирует примерный жизненный цикл 200 страниц памяти в соответствии с одним или несколькими вариантами осуществления. Страницу памяти можно выделить программе и включить в рабочий набор 202 программы. Рабочий набор 202 программы включает в себя страницы рабочего набора программы. Диспетчер 102 памяти может обрезать (также называется "уменьшением") страницы памяти в рабочем наборе 202 программы в различные моменты и по различным причинам, например, чтобы сделать страницы памяти доступными для других программ. Страницы памяти, которые записаны (изменены) и обрезаны из рабочего набора 202, перемещаются (204) в измененный список 206 страниц памяти.

[0032] Диспетчер 104 сжатого хранилища сжимает страницы памяти в измененном списке 206 и добавляет (208) сжатые страницы памяти к страницам памяти в сжатом хранилище 110. Диспетчер 104 сжатого хранилища может разными способами определять моменты, когда сжимать страницы памяти в измененном списке, например, сжимать страницы памяти с равными или неравными интервалами, сжимать страницы памяти в ответ по меньшей мере на пороговое количество страниц памяти, включаемых в измененный список, сжимать страницы памяти в ответ на запрос от диспетчера 102 памяти, сжимать страницы памяти в ответ на определение, что страницы памяти процесса нужно выгрузить, что подробнее обсуждается ниже, и так далее. После сжатия и добавления в сжатое хранилище 110 страницы памяти в измененном списке 206 перемещаются (210) в список 212 ожидания. Список 212 ожидания является списком ожидающих страниц, хотя в качестве альтернативы страницы памяти могут перемещаться в список свободных страниц.

[0033] Само сжатое хранилище 110 состоит из нескольких страниц памяти, также называемых в этом документе страницами памяти сжатого хранилища, и эти страницы памяти сжатого хранилища можно переместить (214) в измененный список 206 по желанию сжатого хранилища 110 или диспетчера 102 памяти. Однако страницы памяти сжатого хранилища не нужно перемещать по желанию в измененный список на длительное время (потенциально - бесконечно). Страницы памяти сжатого хранилища могут оставаться в рабочем наборе сжатого хранилища.

[0034] Для страниц памяти сжатого хранилища, перемещенных в измененный список 206, диспетчер 102 памяти (или, в качестве альтернативы, диспетчер 104 сжатого хранилища) записывает (216) страницы памяти сжатого хранилища в файл 112 подкачки. Таким образом, страницу памяти из рабочего набора 202 после сжатия и сохранения в странице памяти сжатого хранилища можно записать в файл 112 подкачки. Следует отметить, что диспетчер 104 сжатого хранилища не пытается сжимать страницы памяти сжатого хранилища в измененном списке 206. Диспетчер 104 сжатого хранилища может разными способами идентифицировать страницы памяти, которые он не пытается сжимать, например, на основе процесса, что страницы памяти выделяются (например, если выделены системному процессу, например диспетчеру 104 сжатого хранилища, то попытка сжать страницы памяти не предпринимается), путем ведения записи страниц памяти сжатого хранилища, и так далее.

[0035] Могут возникать ситуации, в которых страницу памяти из рабочего набора 202, которая перемещается в измененный список 206, нельзя сжать или иным образом добавить к странице памяти сжатого хранилища 110 за предполагаемое количество времени (например, в рамках порогового количества времени), либо система 100 решает вообще не сжимать страницу памяти по различным причинам политик. Такие ситуации изредка могут возникать, например, из-за усиленного использования памяти в системе 100, усиленного использования процессора в системе 100, различных политик, применяемых к системе 100, и так далее. В таких ситуациях диспетчер 102 памяти записывает (218) несжатую страницу памяти в файл 112 подкачки. Такие страницы памяти соответственно не включаются в страницу памяти сжатого хранилища 110, но диспетчер 102 памяти ведет запись (например, в таблице 116 страниц), что такие страницы памяти доступны из файла 112 подкачки, а не диспетчера 104 сжатого хранилища.

[0036] Возвращаясь к фиг. 1, страницы страничной памяти 106 имеют соответствующий уровень приоритета. Только конкретные типы страниц памяти (например, измененные страницы) могут иметь уровни приоритета, либо, в качестве альтернативы, все типы страниц памяти могут иметь уровни приоритета. Диспетчер 102 памяти задает уровень приоритета для каждой страницы памяти и может определить уровень приоритета для страницы памяти различными способами. В одном или нескольких вариантах осуществления уровень приоритета для страницы памяти является уровнем приоритета, назначенным операционной системой процессу или потоку, который запросил выделение страницы памяти. Для определения уровня приоритета для страницы памяти также могут использоваться другие критерии, например запрос от программы 108, страница памяти ассоциируется с конкретным типом извлечения (например, упреждающее извлечение страниц), и так далее. Диспетчер 102 памяти также может изменять со временем уровни приоритета у страниц памяти (например, снижая уровни приоритета у страниц памяти, к которым программа 108 не обращается в течение порогового количества времени, снижая уровни приоритета у страниц памяти сжатого хранилища, которые записаны в файл 112 подкачки и перемещены в список 212 ожидания, и так далее).

[0037] Уровни приоритета можно различными способами использовать в системе 100. В одном или нескольких вариантах осуществления страницы памяти записываются в файл 112 подкачки на основе их уровня приоритета. Страницы памяти для записи в файл 112 подкачки, приоритет которых ниже, записываются в файл подкачки перед страницами памяти с более высоким приоритетом. Это позволяет более приоритетным страницам памяти оставаться в физической памяти дольше, чем менее приоритетным страницам памяти, и избегает сценария инверсии приоритетов, в котором более приоритетные страницы памяти записываются в файл подкачки (и уже не находятся в физической памяти) перед менее приоритетными страницами памяти (которые остаются в физической памяти). Аналогичным образом в одном или нескольких вариантах осуществления страницы памяти переориентируются из списка ожидания на основе их уровня приоритета. Страницы памяти в списке ожидания, приоритет которых ниже, переориентируются перед страницами памяти с более высоким приоритетом. Это позволяет более приоритетным страницам памяти оставаться в списке ожидания дольше, чем менее приоритетные страницы памяти.

[0038] Фиг. 3 иллюстрирует примерную запись 300 страничной памяти в соответствии с одним или несколькими вариантами осуществления. Иллюстрируется набор из нескольких (X) уровней 302 приоритета, причем набор уровней 302 приоритета включает в себя уровни приоритета, которые могут соответствовать страницам. Запись 300 страничной памяти является записью, например, об измененных страницах страничной памяти 106 из фиг. 1. Уровни приоритета с большими номерами могут иметь более высокий приоритет перед уровнями приоритета с меньшими номерами (например, уровень 4 приоритета может иметь более высокий приоритет, нежели уровень 1 приоритета), или наоборот. В качестве альтернативы для идентификации уровней приоритета помимо номеров могут использоваться метки, например буквы или другие символы.

[0039] Для каждого уровня 302 приоритета запись 300 идентифицирует набор из нуля или более страниц памяти, имеющих тот уровень приоритета. Например, страницы 304 соответствуют уровню 1 приоритета, страницы 306 соответствуют уровню 3 приоритета, и так далее. Запись 300 можно вести любыми различными способами, например в виде списка или другой структуры данных, идентифицирующей страницы памяти, соответствующие конкретному уровню приоритета, используя разные области хранения (например, разные кэши) для страниц памяти, соответствующих разным уровням приоритета, и так далее.

[0040] Возвращаясь к фиг. 1, сжатое хранилище 110 реализуется в виде одной или нескольких страниц памяти, выделенных диспетчером 102 памяти диспетчеру 104 сжатого хранилища. Эти страницы памяти являются страницами памяти в виртуальном адресном пространстве пользовательского режима в диспетчере 104 сжатого хранилища, что предоставляет различные функциональные возможности. Страницы памяти, реализующие сжатое хранилище 110, не потребляют виртуальное адресное пространство ядра и обеспечивают безопасность, чтобы не допустить незащищенности данных, потому что никакая программа пользовательского режима без привилегий не может обращаться к данным в страницах памяти. Кроме того, используя страницы памяти в виртуальном адресном пространстве пользовательского режима в диспетчере 104 сжатого хранилища, диспетчер 102 памяти и диспетчер 104 сжатого хранилища управляют страницами памяти с использованием существующих прикладных программных интерфейсов (API) диспетчера памяти, позволяя диспетчеру 104 сжатого хранилища управлять страничной организацией базовых данных, возможностями подкачки и так далее по его желанию.

[0041] В одном или нескольких вариантах осуществления диспетчер 104 сжатого хранилища сжимает страницы страничной памяти 106 и сохраняет сжатые страницы в некой области сжатого хранилища 110, что также называется сжатием страниц памяти в сжатое хранилище 110 или в область сжатого хранилища 110. Диспетчер 104 сжатого хранилища формирует отдельное сжатое хранилище 110 для каждой программы 108 (и ассоциированное с ней) и добавляет сжатые страницы памяти из измененного списка 206 от конкретной программы 108 в области сжатого хранилища 110, ассоциированные с конкретной программой. В качестве альтернативы диспетчер 104 сжатого хранилища может формировать и поддерживать сжатые хранилища 110 с иным разбиением, нежели одно сжатое хранилище 110 для каждой программы 108 (например, диспетчер 104 сжатого хранилища может формировать и поддерживать сжатые хранилища 110 для произвольного набора программ 108 или для всей памяти со страничной организацией в системе).

[0042] Каждая область сжатого хранилища 110 состоит из нескольких страниц памяти в страничной памяти 106, которые выделяются диспетчером 102 памяти диспетчеру 104 сжатого хранилища. Например, область может иметь размер 128 килобайт, а страницы памяти могут иметь размер 4 килобайта каждая, хотя эти значения являются примерами, и в качестве альтернативы могут использоваться другие размеры области и/или страницы. Страницы в страничной памяти 106, которые сжимаются в конкретную область, имеют по меньшей мере аналогичные уровни приоритета, и страницы памяти, которые составляют область страничной памяти 106, имеют по меньшей мере аналогичные уровни приоритета, как и страницы памяти, сжатые в ту область. Страницы памяти, имеющие по меньшей мере аналогичные уровни приоритета, относятся к страницам памяти, имеющим одинаковые или аналогичные уровни приоритета.

[0043] Следует отметить, что операции, обсуждаемые в этом документе как выполняемые диспетчером 104 сжатого хранилища или сжатым хранилищем 110, могут выполняться одним или обоими из диспетчера 104 сжатого хранилища и сжатого хранилища 110, что операции, обсуждаемые в этом документе как выполняемые диспетчером 104 сжатого хранилища, в качестве альтернативы могут выполняться сжатым хранилищем 110, и что операции, обсуждаемые в этом документе как выполняемые сжатым хранилищем 110, в качестве альтернативы могут выполняться диспетчером 104 сжатого хранилища. В одном или нескольких вариантах осуществления диспетчер 104 сжатого хранилища отвечает за управление каждым сжатым хранилищем 110, направление запросов чтения и записи в подходящее сжатое хранилище 110, управление памятью для сжатого хранилища 110 (например, запрашивая выделение страниц памяти сжатому хранилищу 110) и так далее. В таких ситуациях каждое сжатое хранилище 110 может быть просто набором страниц памяти. В качестве альтернативы по меньшей мере часть управления и логики для управления памятью для сжатого хранилища 110 (например, запрос выделения диспетчером 102 памяти набора страниц в страничной памяти 106 сжатому хранилищу 110) можно реализовать с помощью самого сжатого хранилища 110. В таких ситуациях сжатое хранилище 110 включает в себя одну или несколько страниц памяти, а также модуль сжатого хранилища для реализации управления и логики для управления памятью для сжатого хранилища 110.

[0044] В одном или нескольких вариантах осуществления страницы страничной памяти 106, которые сжимаются в конкретную область сжатого хранилища 110, имеют одинаковый уровень приоритета, и разные области используются для разных уровней приоритета. Страницы памяти, которые составляют область сжатого хранилища 110, имеют такой же уровень приоритета, как и страницы памяти, сжатые в ту область. Например, диспетчер 104 сжатого хранилища может сжать страницы 304 из фиг. 3 в одну область, которая состоит из страниц памяти, выделенных диспетчеру 104 сжатого хранилища и имеющих уровень 1 приоритета. В качестве другого примера диспетчер 104 сжатого хранилища может сжать страницы 306 из фиг. 3 в другую область, которая состоит из страниц памяти, выделенных диспетчеру 104 сжатого хранилища и имеющих уровень 3 приоритета. Следует отметить, что для каждого уровня приоритета диспетчер 104 сжатого хранилища может создать ноль или более областей, состоящих из страниц памяти, соответствующих тому уровню приоритета.

[0045] В качестве альтернативы страницы страничной памяти 106, которые сжимаются в конкретную область сжатого хранилища 110, могут иметь аналогичные, но не обязательно одинаковые уровни приоритета. Можно определять разными способами, какие уровни приоритета являются аналогичными, например, на основе того, находятся ли уровни приоритета в пределах порогового количества уровней (например, 1 или 2) друг от друга. Например, уровень 1 приоритета и уровень 2 приоритета могут быть аналогичными, и соответственно страницы уровня 1 приоритета и страницы уровня 2 приоритета можно сжать в одну область, но уровень 1 приоритета и уровень 5 приоритета не могут быть аналогичными, и соответственно страницы уровня 1 приоритета и страницы уровня 5 приоритета не сжимаются в одну область.

[0046] Аналогичным образом страницы памяти, которые составляют область страничной памяти 106, могут иметь аналогичные, но не обязательно такие же уровни приоритета, как и страницы памяти, сжатые в ту область. Например, страницы памяти, которые составляют область сжатого хранилища 110, могут иметь уровень 3 приоритета, а страницы памяти, сжатые в ту область, могут иметь уровень 2 приоритета или уровень 3 приоритета. Кроме того, область может состоять из страниц памяти одинакового или аналогичного уровня приоритета. Например, область может состоять из некоторых страниц памяти, имеющих уровень 2 приоритета, и некоторых страниц памяти, имеющих уровень 3 приоритета.

[0047] Для создания области диспетчер 104 сжатого хранилища запрашивает выделение диспетчером 102 памяти набора страниц страничной памяти 106 диспетчеру 104. Выделенный набор страниц классифицируется как страницы рабочего набора, и диспетчер 104 сжатого хранилища ассоциирует выделенный набор страниц с конкретным сжатым хранилищем 110. Диспетчер 104 сжатого хранилища сжимает страницы памяти в измененном списке 206 и сохраняет те сжатые страницы в наборе страниц, выделенных диспетчеру 104 сжатого хранилища.

[0048] Таким образом, например, конкретный набор страниц сжимается в дополнительный набор страниц, соответствующий по меньшей мере аналогичным уровням приоритета. После того, как сжимается конкретный набор страниц, дополнительный набор страниц также классифицируется как измененные страницы. Таким образом, диспетчер 104 сжатого хранилища сжимает тот конкретный набор страниц в другой набор страниц такого же типа (измененные), соответствующих по меньшей мере аналогичным уровням приоритета. Однако, когда диспетчер 104 сжатого хранилища сжимает тот конкретный набор страниц, количество страниц в том конкретном наборе страниц обычно больше количества страниц в сжатом наборе страниц. Сжатый набор страниц затем можно записать в файл 112 подкачки. Различные политики могут применяться для определения того, когда (или действительно ли) сжатый набор страниц записывается в файл 112 подкачки.

[0049] Фиг. 4 иллюстрирует пример сжатия страниц памяти в соответствии с одним или несколькими вариантами осуществления. Страничная память 106 включает в себя пять страниц 306 памяти, имеющих одинаковый уровень приоритета (например, уровень 3 приоритета, как обсуждалось выше), как проиллюстрировано по ссылке 402. Диспетчеру 104 сжатого хранилища выделяется область сжатого хранилища, включающая в себя две страницы 404 памяти, имеющие по меньшей мере аналогичные уровни приоритета, как и страницы 306 памяти. Диспетчер 104 сжатого хранилища сжимает страницы 306 памяти в страницы 404 памяти, как проиллюстрировано по ссылке 406. После сжатия диспетчер 102 памяти может переориентировать страницы 306 памяти, потому что сжатая версия страниц 306 памяти сохраняется в страничной памяти 106 в виде страниц 404 памяти. Таким образом, после сжатия страничная память 106 хранит страницы 404 памяти, но не должна хранить страницы 306 памяти.

[0050] Фиг. 5 - блок-схема алгоритма, иллюстрирующая примерный процесс 500 для сжатия страниц памяти в соответствии с одним или несколькими вариантами осуществления. Процесс 500 осуществляется диспетчером сжатого хранилища, например диспетчером 104 сжатого хранилища из фиг. 1, и может быть реализован в программном обеспечении, микропрограммном обеспечении, аппаратных средствах или их сочетаниях. Процесс 500 показан в виде набора этапов и не ограничивается показанным порядком для выполнения операций различных этапов. Процесс 500 является примерным процессом для сжатия страниц памяти; дополнительные обсуждения сжатия страниц памяти включаются в этот документ со ссылкой на другие фигуры.

[0051] В процессе 500 идентифицируется набор из одной или нескольких страниц памяти в измененном списке (этап 502). Набор из одной или нескольких страниц памяти можно идентифицировать различными способами, например, идентифицировать в порядке, в каком страницы памяти добавляются в измененный список, на основе уровней приоритета страниц (например, менее приоритетные страницы идентифицируются перед более приоритетными страницами), и так далее.

[0052] Набор страниц памяти, идентифицированный на этапе 502, сжимается в область сжатого хранилища в страничной памяти (этап 504). Эта область сжатого хранилища состоит из одной или нескольких страниц памяти сжатого хранилища, которые имеют по меньшей мере аналогичные уровни приоритета, как и набор страниц памяти, идентифицированный на этапе 502. Как часть сжатия на этапе 504 диспетчер сжатого хранилища ведет запись того, где в области хранится сжатая версия каждой страницы памяти в наборе страниц памяти. Эта запись может принимать различные виды, например для каждой сжатой версии страницы памяти - запись о том, какая одна или несколько страниц памяти сжатого хранилища хранят сжатую версию страницы памяти, для каждой сжатой версии страницы памяти - запись о диапазоне адресов в области, которая хранит сжатую версию страницы памяти, и так далее.

[0053] Сжатие страницы памяти относится к сжатию содержимого страницы памяти (например, сохраненных данных). Для сжатия страницы памяти может использоваться любая из различных открытых и/или защищаемых методик сжатия. Например, страницу памяти можно сжать с использованием алгоритмов сжатия с кодированием по длинам серий, алгоритмов сжатия LZW, алгоритмов кодирования по методу Хаффмана, и так далее. При необходимости может применяться несколько разных алгоритмов сжатия, например, разные алгоритмы сжатия для разных типов содержимого. Например, один алгоритм сжатия может использоваться для буквенно-цифрового и/или текстового содержимого, другой алгоритм сжатия может использоваться для графического содержимого, и другой алгоритм сжатия может использоваться для звукового содержимого. Методика сжатия, используемая для сжатия страницы памяти, обычно является алгоритмом сжатия без потерь, хотя в некоторых обстоятельствах (например, для некоторого графического и/или звукового содержимого) в качестве альтернативы можно использовать алгоритм сжатия с потерями. Конкретный алгоритм сжатия также может зависеть от устройства, где быстрое устройство (например, с одним или несколькими более мощными процессорами) может оснащаться алгоритмом сжатия с большей нагрузкой на процессор, который сжимает лучше, тогда как медленное устройство (например, с одним или несколькими менее мощными процессорами) может оснащаться алгоритмом с меньшей нагрузкой на процессор, который не сжимает так же хорошо. Конкретный алгоритм сжатия также может основываться на компромиссе с производительностью запоминающего устройства. Если CPU существенно превосходит по быстродействию запоминающее устройство, то может использоваться алгоритм сжатия с большей нагрузкой на процессор, который сжимает лучше (и соответственно, приводит к меньшему вводу/выводу запоминающего устройства).

[0054] В одном или нескольких вариантах осуществления страницы памяти на этапе 504 сжимаются по отдельности. В качестве альтернативы две или более страницы памяти можно сжимать вместе (например, алгоритм сжатия можно прогонять на двух или более страницах памяти вместе, а не по отдельности).

[0055] Дополнительная обработка набора страниц памяти при необходимости также может выполняться на этапе 504. Эта дополнительная обработка может быть шифрованием содержимого набора страниц памяти (например, с использованием шифрования симметричным ключом, шифрования открытым ключом и так далее), формированием данных обнаружения ошибок, например данных CRC (контроль циклическим избыточным кодом) для набора страниц памяти, формированием аутентификационной информации, например данных HMAC (хешированный код проверки подлинности сообщения) для набора страниц памяти, и так далее.

[0056] Набор страниц памяти, идентифицированный на этапе 502, перемещается в список ожидания (этап 506) после сжатия в сжатое хранилище или, в качестве альтернативы, в свободный список. Набор страниц памяти можно переместить в список ожидания (или свободный список) различными способами, например, в ответ на уведомление диспетчером 104 сжатого хранилища диспетчера 102 памяти, что можно освободить набор страниц памяти. Набор страниц памяти, идентифицированный на этапе 502, можно переместить в список ожидания (или свободный список) и переориентировать, потому что в страничной памяти не нужно хранить две версии одной и той же страницы памяти (одна несжатая версия и одна сжатая версия), так как это может быть неэффективным использованием страничной памяти.

[0057] Страницы памяти сжатого хранилища, которые составляют область сжатого хранилища, записываются в файл подкачки с помощью диспетчера памяти (этап 508). Следует отметить, что страницы памяти сжатого хранилища не нужно немедленно записывать в файл подкачки. Точнее, запись страниц памяти сжатого хранилища можно отложить на более позднее время, например, время, когда диспетчер 102 памяти желает освободить страницы памяти для выделения другой программе 108, время, когда диспетчер 104 сжатого хранилища желает записать страницы памяти сжатого хранилища, и так далее. Также следует отметить, что можно реализовать любое количество методик для повышения скорости, эффективности и т. д. записи страниц памяти сжатого хранилища в файл подкачки (например, страницы памяти сжатого хранилища можно записывать смежными блоками и т. п.).

[0058] Следует дополнительно отметить, что в файл 508 подкачки записываются страницы памяти сжатого хранилища вместо записи в файл подкачки набора страниц памяти, идентифицированного на этапе 502. Таким образом, сжатые версии набора страниц памяти, идентифицированного на этапе 502, записываются в файл подкачки без записи (или при ее отсутствии) распакованных версий набора страниц памяти в файл подкачки.

[0059] Как только в файл подкачки записываются страницы памяти сжатого хранилища, которые составляют область, страницы памяти сжатого хранилища помещаются в список ожидания на уровне приоритета у страниц памяти сжатого хранилища (или, в качестве альтернативы, на более низком уровне). В этот момент страницы памяти сжатого хранилища считаются доступной памятью в системе 100 и могут быть переориентированы в любое время по желанию диспетчера 102 памяти.

[0060] В одном или нескольких вариантах осуществления диспетчер сжатого хранилища не позволяет диспетчеру памяти записывать страницу памяти сжатого хранилища, пока страница памяти сжатого хранилища практически не заполнена. Практически заполненная страница памяти сжатого хранилища относится к почти не оставшемуся пространству хранения в странице памяти, в которое можно было бы сохранить дополнительные сжатые страницы памяти. Например, использован по меньшей мере пороговый объем пространства хранения страницы памяти сжатого хранилища для хранения сжатых страниц памяти.

[0061] Следует отметить, что хотя некоторые из обсуждений в этом документе относятся к сжатию страниц памяти одного или нескольких процессов, обсуждаемые в этом документе методики аналогично применяются к сжатию страниц памяти для всей памяти со страничной организацией, которая может включать в себя страничную память пользовательского режима и страничную память режима ядра. В таких ситуациях весь файл подкачки представляется памятью в сжатом хранилище, и сжатое хранилище по существу управляет файлом подкачки, так как все измененные страницы проходят через сжатое хранилище.

[0062] Фиг. 6 - блок-схема алгоритма, иллюстрирующая примерный процесс 600 для извлечения сжатых страниц памяти в соответствии с одним или несколькими вариантами осуществления. Процесс 600 осуществляется диспетчером сжатого хранилища, например диспетчером 104 сжатого хранилища из фиг. 1, и может быть реализован в программном обеспечении, микропрограммном обеспечении, аппаратных средствах или их сочетаниях. Процесс 600 показан в виде набора этапов и не ограничивается показанным порядком для выполнения операций различных этапов. Процесс 600 является примерным процессом для извлечения сжатых страниц памяти; дополнительные обсуждения извлечения сжатых страниц памяти включаются в этот документ со ссылкой на другие фигуры.

[0063] От диспетчера памяти принимается запрос страницы памяти (этап 602). Этот запрос может быть, например, ответом на запрос от программы 108, запрашивающей доступ к содержимому в странице памяти после того, как по меньшей мере одна страница памяти сжата в сжатое хранилище 110. Запрос включает в себя идентификатор по меньшей мере одной страницы памяти, также называемый ключом. Диспетчер памяти может запросить одну страницу памяти или несколько страниц памяти.

[0064] В ответ на запрос выполняется проверка в отношении того, находится ли запрошенная страница памяти в странице памяти сжатого хранилища в страничной памяти (этап 604). Как обсуждалось выше, страницы памяти сжатого хранилища не нужно немедленно записывать в файл 112 подкачки, поэтому запрошенная страница памяти может оставаться доступной в странице памяти сжатого хранилища в страничной памяти 106. Следует отметить, что страница памяти сжатого хранилища может находиться в рабочем наборе диспетчера 104 сжатого хранилища или в различных списках (например, измененном списке либо списке ожидания), но все же находиться в страничной памяти.

[0065] Если запрошенная страница памяти находится в сжатом хранилище в страничной памяти, то запрошенная страница памяти распаковывается (этап 606) и возвращается диспетчеру памяти (этап 608). После распаковки и возврата сжатая страница памяти удаляется из области сжатого хранилища 110, предотвращая соответственно дублирование страницы памяти между несжатым и сжатым видами страницы памяти. После того, как содержимое страницы памяти сжатого хранилища распаковано и возвращено, страницу памяти сжатого хранилища можно переориентировать или освободить.

[0066] Способ, которым распаковывается запрошенная страница памяти, может меняться по меньшей мере частично на основе методики, используемой для сжатия запрошенной страницы памяти. Любая другая обработка, выполняемая над страницей памяти, также проверяется или отменяется на этапе 606, например дешифрование страницы памяти, проверка данных обнаружения ошибок, проверка аутентификационной информации, коррекция данных (если возможна), если эта проверка терпит неудачу, и так далее. Если данные обнаружения ошибок или аутентификационную информацию нельзя проверить и/или данные нельзя скорректировать, то диспетчеру памяти можно вернуть указание, что запрошенная страница памяти повреждена, вместо распакованной запрошенной страницы памяти.

[0067] Если запрошенная страница памяти не находится в сжатом хранилище в страничной памяти, то страница памяти сжатого хранилища, которая включает в себя запрошенную страницу памяти, извлекается из файла подкачки (этап 610). Извлечение страницы памяти сжатого хранилища включает в себя считывание страницы памяти сжатого хранилища из файла подкачки и сохранение страницы памяти сжатого хранилища в сжатом хранилище 110 в страничной памяти 106. Тогда запрошенная страница памяти находится в сжатом хранилище 110 в страничной памяти, поэтому запрошенная страница памяти распаковывается (этап 606) и возвращается диспетчеру памяти (этап 608).

[0068] Следует отметить, что этапы 604 и 610 могут выполняться вместе. Например, диспетчер 104 сжатого хранилища ведет запись, какие страницы памяти сжимаются в какие страницы памяти сжатого хранилища. В ответ на запрос на этапе 602 диспетчер 104 сжатого хранилища считывает страницу памяти сжатого хранилища, в которую сжимается запрошенная страница памяти. Если страница памяти сжатого хранилища находится в сжатом хранилище 110 страничной памяти 106, то диспетчер 104 сжатого хранилища считывает страницу памяти сжатого хранилища из страничной памяти 106. Если страница памяти сжатого хранилища не находится в сжатом хранилище 110 страничной памяти 106, то возникает ошибка страницы, диспетчер 102 памяти извлекает страницу памяти сжатого хранилища из файла подкачки и помещает страницу памяти сжатого хранилища в страничную память 106, а затем диспетчер сжатого хранилища считывает страницу памяти сжатого хранилища из страничной памяти 106.

[0069] Также следует отметить, что диспетчер 104 сжатого хранилища при необходимости может решить распаковать и вернуть (а при необходимости - извлечь из файла подкачки) одну или несколько страниц памяти в дополнение к запрошенной странице памяти. Например, диспетчер 104 сжатого хранилища может решить распаковать и вернуть одну или несколько страниц памяти, ближайших (например, в пределах порогового диапазона адресов) к запрошенной странице памяти, в попытке увеличить производительность путем уменьшения будущих запросов страниц памяти диспетчером памяти.

[0070] Следует дополнительно отметить, что при сжатии страниц памяти и извлечении страниц памяти, обсуждаемых в этом документе, диспетчер 104 сжатого хранилища работает для обеспечения продвижения запроса записи (сжатие) или чтения (извлечение) от диспетчера памяти. Обеспечиваемое диспетчером 104 сжатого хранилища продвижение относится к предотвращению взаимоблокировок в системе 100, потому что не доступны никакие страницы памяти по меньшей мере частично из-за сжатия страниц памяти. Диспетчер 104 сжатого хранилища работает для обеспечения этого продвижения независимо от того, сжата ли уже запрошенная страница памяти и сохранена в файл 112 подкачки, и независимо от того, переориентирована ли запрошенная страница памяти после сжатия и сохранения в файл 112 подкачки. В одном или нескольких вариантах осуществления продвижение для сжатия страниц памяти обеспечивается путем сообщения диспетчеру памяти записать одну или несколько несжатых страниц памяти в измененном списке в файл подкачки, посредством этого освобождая одну или несколько страниц памяти. Продвижение для извлечения страниц памяти обеспечивается путем предварительного выделения необходимых ресурсов заранее (например, одной или нескольких страниц памяти в рабочем наборе диспетчера сжатого хранилища), чтобы гарантировать, что по меньшей мере у одного такого считывания всегда будут необходимые ресурсы для продолжения.

[0071] Возвращаясь к фиг. 1, каждая страница памяти имеет ассоциированный с ней идентификатор (также называемый ключом), который позволяет отличать страницы памяти друг от друга. Этот идентификатор может назначаться любыми различными компонентами, например, диспетчером 102 памяти или диспетчером 104 сжатого хранилища. Сжатая версия страницы памяти занимает меньше пространства в страничной памяти 106, чем сама страница памяти, поэтому диспетчером 104 сжатого хранилища не используется одна и та же структура единицы данных. Например, диспетчер 102 памяти может управлять страничной памятью 106 по страницам памяти, но диспетчер 104 сжатого хранилища не станет этого делать.

[0072] Диспетчер 104 сжатого хранилища ведет карту страниц памяти, чтобы идентифицировать, в каких областях сжатых хранилищ 110 хранятся различные сжатые страницы памяти. Фиг. 7 иллюстрирует примерную карту 702 страниц памяти в соответствии с одним или несколькими вариантами осуществления. Для каждой страницы памяти, сжатой в сжатое хранилище 110, карта 702 страниц памяти ведет соответствующую запись 704, идентифицирующую, где сжатая страница памяти хранится в областях страниц памяти. Сжатое хранилище 110 иллюстрируется в виде одной или нескольких (n) разных областей 706(1), …, 706(n), каждая из которых состоит из нескольких страниц памяти, как обсуждалось выше. В одном или нескольких вариантах осуществления для каждого сжатого хранилища 110 в страничной памяти 106 ведется отдельная карта страниц памяти. В качестве альтернативы карты страниц памяти для нескольких сжатых хранилищ можно объединять в одну карту страниц памяти, и запись 704 может включать в себя идентификатор сжатого хранилища 110, в котором хранится сжатая страница памяти.

[0073] Каждая запись 704 включает в себя поле 710 ключа страницы, поле 712 номера области, поле 714 смещения, поле 716 размера и поле 718 флага (флагов). Поле 710 ключа страницы хранит идентификатор соответствующей сжатой страницы памяти. Этот идентификатор может принимать любой из различных видов. Например, он мог бы быть идентификатором процесса и виртуальным адресом, идентификатором записи и т. д.

[0074] Поле 712 номера области хранит идентификатор конкретной области 706, в которой хранится соответствующая сжатая страница памяти. Являюсь обычно числом, эту область можно идентифицировать различными другими способами. Поле 714 смещения хранит идентификатор смещения в конкретной области 706, где начинается хранение данных для соответствующей сжатой страницы памяти. В качестве альтернативы вместо идентификаторов области и смещения могло бы использоваться одно или несколько полей, хранящих любой другой идентификатор (идентификаторы) местоположения в сжатой части, где хранится соответствующая сжатая страница памяти.

[0075] Поле 716 размера хранит идентификатор размера (например, в байтах) соответствующей сжатой страницы памяти. При наличии области, смещения в конкретной области и размера сжатой страницы памяти можно без труда идентифицировать диапазон адресов в памяти, в котором хранится сжатая страница памяти. Поле 718 флага (флагов) хранит различную информацию о состоянии касательно соответствующей сжатой страницы памяти. Примеры таких флагов включают в себя приоритет выбора для страницы памяти, используемый для определения, какие страницы памяти выбираются для сжатия, уровень приоритета, соответствующий странице памяти, и так далее.

[0076] Нужно учитывать, что карта 702 страниц памяти является лишь примером. В других вариантах осуществления в каждую запись карты 702 могут включаться дополнительные поля. Например, в каждую запись карты 702 можно включить данные обнаружения ошибок, например данные CRC, аутентификационную информацию, например данные HMAC, информацию, описывающую историю и/или частоту использования страницы памяти, и так далее. Кроме того, одно или несколько полей 710-718 можно исключить из записей карты 702. Более того, следует отметить, что данные в одном или нескольких полях 710-718 можно хранить вместе со страницей памяти в страничной памяти 106, а не в отдельной записи.

[0077] В дополнение к карте 702 страниц памяти диспетчер 104 сжатого хранилища также ведет карту областей, чтобы идентифицировать, какая страница памяти хранится в конкретном местоположении области. Таким образом, карта 702 страниц памяти действует для идентификации, где хранится идентифицированная сжатая страница памяти, тогда как карта областей действует для идентификации, какая сжатая страница памяти хранится в данном местоположении области.

[0078] Фиг. 8 иллюстрирует примерную карту 802 областей в соответствии с одним или несколькими вариантами осуществления. Для каждого смещения в области, где хранится другая страница памяти, карта 802 областей ведет запись 804, идентифицирующую соответствующую сжатую страницу памяти, сохраненную с тем смещением. Каждая запись 804 включает в себя поле 806 ключа страницы, поле 808 номера области и поле 810 смещения.

[0079] Поле 806 ключа страницы хранит идентификатор соответствующей сжатой страницы памяти аналогично полю 710 ключа страницы в записи 704 из фиг. 7. Поле 808 номера области хранит идентификатор конкретной области 706, в которой хранится соответствующая сжатая страница памяти, аналогично полю 712 номера области в записи 704. Поле 810 смещения хранит идентификатор смещения в конкретной области 706, где начинается хранение данных для соответствующей сжатой страницы памяти, аналогично полю 714 смещения в записи 704. В качестве альтернативы вместо идентификаторов области и смещения могло бы использоваться одно или несколько полей, хранящих любой другой идентификатор (идентификаторы) местоположения в сжатой части, где хранится соответствующая сжатая страница памяти.

[0080] Нужно учитывать, что карта 802 областей является лишь примером. В других вариантах осуществления в каждую запись карты 802 могут включаться дополнительные поля, и/или одно или несколько полей 806-810 можно исключить из записей карты 802. Более того, следует отметить, что данные в одном или нескольких полях 806-810 можно хранить вместе со страницей памяти в страничной памяти 106 из фиг. 1, а не в отдельной записи.

[0081] Карту 702 страниц памяти из фиг. 7 и карту 802 областей из фиг. 8 можно реализовать любыми различными способами. В одном или нескольких вариантах осуществления эти карты реализуются в виде дерева B+ для повышенной производительности при обращении к отдельным записям. В качестве альтернативы можно использовать любые из различных других традиционных структур данных, чтобы реализовать эти карты, например деревья AVL, хэш-таблицу, массивы и так далее.

[0082] Возвращаясь к фиг. 1, могут возникать ситуации, в которых диспетчер 102 памяти желает переместить весь рабочий набор для программы 108 из страничной памяти 108. В одном или нескольких вариантах осуществления такие ситуации возникают, когда приостанавливается программа 108 в системе 100. Как часть процесса приостановки программы 108 рабочий набор страниц памяти сжимается и сохраняется в сжатом хранилище 110, что также называется выгрузкой рабочего набора. Это сжатое хранилище 110 впоследствии можно записать в файл 112 подкачки. Если программу 108 нужно впоследствии возобновить (например, больше не приостанавливать), то сжатое хранилище 110 извлекается из файла 112 подкачки (если оно записывалось в файл 112 подкачки), и страницы памяти в сжатом хранилище 110 распаковываются и возвращаются в рабочий набор 202, что также называется загрузкой рабочего набора.

[0083] Фиг. 9 показывает пример выгрузки рабочего набора в соответствии с одним или несколькими вариантами осуществления. На фиг. 9 иллюстрируется рабочий набор 202 конкретного процесса программы 108, Процесса X. Выгрузка рабочего набора 202 выполняется путем формирования списка 902 страниц памяти, например списка начальных виртуальных адресов и длин (например, подсчет последовательных страниц памяти в рабочем наборе, начиная с того начального виртуального адреса). Список упорядочивается последовательно, например, от наименьшего адреса к наибольшему адресу (эти адреса являются виртуальными адресами пространства памяти, в котором исполняется процесс). Страницы памяти рабочего набора 202 добавляются в измененный список 206 в этом же последовательном упорядочении. Кроме того, страницы памяти рабочего набора 202 сжимаются в этом же последовательном упорядочении и записываются в сжатое хранилище 110, ассоциированное с программой 108, в этом же последовательном упорядочении, как показано. Таким образом, хотя страницы памяти в рабочем наборе 202 могут быть несмежными в рабочем наборе 202, они записываются в смежные местоположения в сжатом хранилище 110.

[0084] Также определяется общий размер сжатого хранилища 110, и резервируется пространство в файле 112 подкачки, достаточное для хранения сжатого хранилища 110. Когда сжатое хранилище 110 записывается в файл 112 подкачки, сжатое хранилище 110 непрерывно записывается в файл 112 подкачки. Запись страниц в смежную, последовательно упорядоченную часть файла подкачки может дать последующей операции чтения возможность считать большой, последовательно упорядоченный блок файла 112 подкачки, когда страницы считываются обратно в рабочий набор 202 во время последующей операции загрузки.

[0085] Фиг. 10 - блок-схема алгоритма, иллюстрирующая примерный процесс 1000 для выгрузки рабочего набора в соответствии с одним или несколькими вариантами осуществления. Процесс 1000 осуществляется диспетчером сжатого хранилища, например диспетчером 104 сжатого хранилища из фиг. 1, и может быть реализован в программном обеспечении, микропрограммном обеспечении, аппаратных средствах или их сочетаниях. Процесс 1000 показан в виде набора этапов и не ограничивается показанным порядком для выполнения операций различных этапов. Процесс 1000 является примерным процессом для выгрузки рабочего набора; дополнительные обсуждения выгрузки рабочего набора включаются в этот документ со ссылкой на другие фигуры.

[0086] В процессе 1000 выполняется определение для выгрузки одной или нескольких страниц из рабочего набора процесса в файл подкачки (этап 1002). Это определение может выполняться (например, диспетчером 102 памяти или другим диспетчером политик) на основе различных критериев, например определения, что процесс неактивен или приостановлен, что один или несколько потоков, ассоциированных с процессом, не были активны в течение конкретного количества времени, что процесс находился в фоне в течение конкретного количества времени, что процесс не использовал некоторое количество страниц в течение конкретного количества времени, что приостановлена вычислительная система в целом или является неактивной, и так далее.

[0087] Как только принято решение выгрузить одну или несколько страниц, идентифицируется одна или несколько возможных страниц из рабочего набора процесса, и формируется список этих возможных страниц памяти (этап 1004). Список возможных страниц памяти последовательно упорядочивается, например от наименьшего виртуального адреса к наибольшему виртуальному адресу. В одном или нескольких вариантах осуществления диспетчер 102 памяти анализирует каждую страницу рабочего набора и на основе некоторых критериев определяет, является ли каждая страница кандидатом на выгрузку. В одном или нескольких вариантах осуществления кандидаты на выгрузку могут включать в себя закрытые страницы и/или базирующиеся в файле подкачки совместно используемые страницы в рабочем наборе 202. Возможные страницы также можно идентифицировать разными способами, например на основе того, являются ли те страницы чистыми (страницы, которые записаны в сжатое хранилище 110, но не изменены с момента такой записи, так что текущая версия страницы в физической памяти такая же, как и страница в сжатом хранилище 110). Кроме того, в одном или нескольких вариантах осуществления при принятии решения, является ли страница кандидатом на выгрузку, может учитываться то, заблокирована ли страница в памяти.

[0088] Возможные страницы памяти в списке, сформированном на этапе 1004, добавляются в измененный список 206 (этап 1006). Возможные страницы памяти добавляются в измененный список в таком же последовательном упорядочении, как они появляются в сформированном на этапе 1004 списке.

[0089] Возможные страницы памяти в измененном списке 206 сжимаются и записываются в сжатое хранилище 110, ассоциированное с работающей программой, то есть процессом (этап 1008). Сжатие может выполняться любыми способами аналогично обсуждению выше касательно фиг. 5. Различные другие операции (например, шифрование содержимого страниц памяти, формирование данных обнаружения ошибок и т. п.) при необходимости также могут выполняться над страницами памяти аналогично обсуждению выше касательно фиг. 5. Сжатые страницы памяти записываются в сжатое хранилище 110 в таком же последовательном упорядочении, как они появляются в сформированном на этапе 1004 списке, и в котором они появляются в измененном списке 206. Таким образом, хотя страницы памяти в рабочем наборе 202 могут быть несмежными в рабочем наборе 202, они записываются в смежные местоположения в сжатом хранилище 110 (например, как показано на фиг. 9). После того, как возможная страница памяти записывается в сжатое хранилище 110, возможная страница памяти удаляется из рабочего набора 202 (например, и добавляется в свободный список).

[0090] В файле 112 подкачки резервируется пространство, достаточное для хранения сжатого хранилища 110 (этап 1010). Резервирование пространства в файле 112 подкачки относится к предусмотрению или пометке части файла 112 подкачки как приемлемой для записи туда сжатого хранилища 110, но неприемлемой для записи туда других данных. Пространство в файле 112 подкачки можно резервировать различными способами, например путем ведения таблицы выделения или другой записи, идентифицирующей части файла подкачки и то, являются ли такие части зарезервированными (и если зарезервированы, то идентифицирующей сжатое хранилище 110, для которого они резервируются). Резервирование может выполняться, например, диспетчером 102 памяти или диспетчером 104 сжатого хранилища.

[0091] Позднее принимается решение (например, диспетчером 102 памяти или диспетчером 104 сжатого хранилища) записать сжатое хранилище 110, включая сжатые выгруженные страницы, в зарезервированное пространство в файле 112 подкачки (этап 1012). В одном или нескольких вариантах осуществления это решение может быть принято на основе определения, что прошло некоторое пороговое количество времени, в течение которого все еще действительны критерии, которые привели к решению выгрузить (на этапе 1002). Например, может пройти конкретное количество времени (например, 5 минут), в котором процесс по-прежнему неактивен либо приостановлен. Решение также может быть принято на основе определения диспетчером 102 памяти, что нужно больше физической памяти для использования одной или несколькими другими программами 108.

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

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

[0094] Фиг. 11 - блок-схема алгоритма, иллюстрирующая примерный процесс 1100 для загрузки рабочего набора в соответствии с одним или несколькими вариантами осуществления. Процесс 1100 осуществляется диспетчером сжатого хранилища, например диспетчером 104 сжатого хранилища из фиг. 1, и может быть реализован в программном обеспечении, микропрограммном обеспечении, аппаратных средствах или их сочетаниях. Процесс 1100 показан в виде набора этапов и не ограничивается показанным порядком для выполнения операций различных этапов. Процесс 1100 является примерным процессом для загрузки рабочего набора; дополнительные обсуждения загрузки рабочего набора включаются в этот документ со ссылкой на другие фигуры.

[0095] В процессе 1100 выполняется определение для загрузки сжатого хранилища, которое ранее было выгружено из рабочего набора для некоего процесса (этап 1102). В одном или нескольких вариантах осуществления это определение выполняется диспетчером 102 памяти или другим диспетчером политик и может выполняться на основе различных критериев. Такие критерии могут включать в себя прием указания, что процесс больше не является неактивным или приостановленным, прекращение тех условий, которые привели к решению выгрузить на этапе 1002 из фиг. 10, и так далее.

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

[0097] Если выгруженная страница памяти сжатого хранилища не находится в физической памяти, то страница памяти извлекается из файла подкачки (этап 1106). Извлечение страниц памяти сжатого хранилища включает в себя считывание страниц памяти сжатого хранилища из файла подкачки и сохранение страниц памяти сжатого хранилища в сжатом хранилище 110 в страничной памяти 106. В одном или нескольких вариантах осуществления это считывание страниц памяти сжатого хранилища считывает большие блоки страниц памяти сжатого хранилища из файла подкачки, которое поэтому эффективнее считывания меньших блоков из произвольных местоположений в файле подкачки. Кроме того, поскольку страницы записывались в смежный блок, зарезервированный в файле подкачки, и записывались в последовательном порядке виртуальных адресов, кластеры из нескольких страниц можно считывать большими блоками и в последовательном порядке виртуальных адресов, обеспечивая более эффективные операции чтения.

[0098] Выгруженные страницы памяти в страницах памяти сжатого хранилища в сжатом хранилище 110 распаковываются (этап 1108) и возвращаются диспетчеру памяти (этап 1110). Возврат распакованных страниц памяти диспетчеру памяти позволяет включить распакованные страницы памяти в рабочий набор программы. Распаковка может выполняться любыми способами аналогично обсуждению выше касательно фиг. 6. Различные другие операции (например, дешифрование содержимого страниц памяти, проверка данных обнаружения ошибок и т. п.) при необходимости также могут выполняться над страницами памяти аналогично обсуждению выше касательно фиг. 6. После распаковки и возврата сжатая страница памяти удаляется из области сжатого хранилища 110. После того, как содержимое страницы памяти сжатого хранилища распаковано и возвращено, страницу памяти сжатого хранилища можно переориентировать или освободить.

[0099] Также освобождается зарезервированное пространство для сжатого хранилища в файле подкачки (этап 1112). Затем зарезервированное пространство в файле подкачки доступно для хранения других данных.

[00100] Возвращаясь к этапу 1104, если какие-либо из выгруженных страниц памяти остаются в физической памяти, то те страницы памяти распаковываются (этап 1108) и возвращаются диспетчеру памяти (этап 1110). Страницы памяти сжатого хранилища, хранящие те выгруженные сжатые страницы памяти, не нужно считывать из файла подкачки на этапе 1106, потому что они остаются в физической памяти.

[00101] Следует отметить, что извлечение выгруженных страниц памяти сжатого хранилища на этапе 1106 и распаковка страниц памяти на этапе 1108 могут выполняться параллельно. В одном или нескольких вариантах осуществления распаковываются страницы памяти, которые извлечены из файла подкачки, тогда как одновременно другие выгруженные страницы памяти сжатого хранилища считываются из файла подкачки. Можно использовать несколько потоков для распаковки страниц памяти и извлечения страниц памяти сжатого хранилища из файла подкачки. Например, один поток, работающий на одном ядре процессора в системе 100, может управлять извлечением страниц памяти сжатого хранилища из файла подкачки, а потоки, работающие одновременно или параллельно на оставшихся ядрах процессора в системе 100, могут управлять распаковкой страниц памяти.

[00102] Таким образом, производительность загрузки страниц памяти сжатого хранилища можно увеличить с использованием методик, обсуждаемых в этом документе. Страницы памяти сжимаются, поэтому считывается меньше страниц памяти, чем считывалось бы без сжатия. Кроме того, распаковка может выполняться параллельно считыванию страниц памяти, и несколько потоков распаковки могут работать одновременно, дополнительно увеличивая скорость, с которой можно возвращать распакованные страницы памяти диспетчеру памяти.

[00103] Обсуждаемые в этом документе методики также поддерживают различные дополнительные функциональные возможности. Количество операций чтения и записи в запоминающее устройство, которое хранит файл подкачки, можно уменьшить благодаря сжатию страниц памяти. Уменьшение количества операций чтения и записи в запоминающее устройство может привести к увеличенному сроку службы для запоминающего устройства, а также уменьшить сдерживающие факторы, обусловленные вводом/выводом запоминающего устройства. Кроме того, сжатие страниц памяти может привести к увеличению количества страниц памяти, доступных для выделения программам диспетчером памяти.

[00104] Кроме того, выгруженные страницы памяти сжатого хранилища занимают меньшее количество страниц, чем распакованные версии страниц памяти. Выгруженные страницы памяти сжатого хранилища записываются в файл 112 подкачки и добавляются в список ожидания, как обсуждалось выше, и благодаря их сжатому характеру в списке ожидания можно хранить большее количество сжатых хранилищ. Это может увеличить вероятность того, что если возобновляется приостановленная программа, то страницы памяти сжатого хранилища для той программы находятся в физической памяти и, соответственно, могут быть загружены быстрее, чем если бы извлекались из файла подкачки.

[00105] Более того, сжатые страницы памяти сохраняются в сжатых хранилищах с аналогичными уровнями приоритета, как и те страницы памяти перед сжатием. В результате сохранения по меньшей мере аналогичных уровней приоритета у страниц памяти избегают сценариев инверсии приоритетов, в которых существенно более приоритетные страницы памяти записываются в файл подкачки перед менее приоритетными страницами памяти.

[00106] Хотя конкретные функциональные возможности обсуждаются в этом документе со ссылкой на конкретные модули, следует отметить, что функциональные возможности отдельных обсуждаемых в этом документе модулей можно разделить на несколько модулей, и/или по меньшей мере некоторые функциональные возможности нескольких модулей можно объединить в один модуль. Более того, конкретный модуль, обсуждаемый в этом документе как выполняющий некое действие, включает в себя тот конкретный модуль, самостоятельно выполняющий действие, или тот конкретный модуль, в качестве альтернативы вызывающий или иным образом обращающийся к другому компоненту или модулю, который выполняет действие (или выполняет действие в сочетании с тем конкретным модулем). Таким образом, конкретный модуль, выполняющий некое действие, включает в себя тот конкретный модуль, самостоятельно выполняющий действие, и/или другой модуль, вызываемый или иным образом доступный тому конкретному модулю, выполняющему действие.

[00107] Фиг. 12 иллюстрирует примерную систему в целом по ссылке 1200, которая включает в себя примерное вычислительное устройство 1202, которое соответствует одной или нескольким системам и/или устройствам, которые могут реализовывать различные описанные в этом документе методики. Вычислительное устройство 1202 может быть, например, сервером поставщика услуг, устройством, ассоциированным с клиентом (например, клиентским устройством), системой на кристалле и/или любым другим подходящим вычислительным устройством или вычислительной системой.

[00108] Примерное вычислительное устройство 1202, которое проиллюстрировано, включает в себя систему 1204 обработки, один или несколько машиночитаемых носителей 1206 и один или несколько интерфейсов 1208 I/O, которые коммуникационно соединены друг с другом. Хотя и не показано, вычислительное устройство 1202 может дополнительно включать в себя системную шину или другую систему передачи данных и команд, которая соединяет друг с другом различные компоненты. Системная шина может включать в себя любую структуру или сочетание разных шинных структур, например шину памяти либо контроллер памяти, периферийную шину, универсальную последовательную шину и/или процессор либо локальную шину, которая использует любую из ряда шинных архитектур. Также предполагается ряд других примеров, например линии управления и передачи данных.

[00109] Система 1204 обработки соответствует функциональным возможностям для выполнения одной или нескольких операций с использованием аппаратных средств. Соответственно, система 1204 обработки иллюстрируется как включающая в себя элементы 1210 аппаратных средств, которые могут конфигурироваться в виде процессоров, функциональных блоков и так далее. Это может включать в себя реализацию в аппаратных средствах в виде специализированной интегральной схемы или другого логического устройства, образованного с использованием одного или нескольких полупроводников. Элементы 1210 аппаратных средств не ограничиваются материалами, из которых они образованы, или используемыми в них механизмами обработки. Например, процессоры могут состоять из полупроводника (полупроводников) и/или транзисторов (например, электронных интегральных схем (ИС)). В таком контексте исполняемыми процессором командами могут быть исполняемые в электронном виде команды.

[00110] Машиночитаемые носители 1206 иллюстрируются как включающие в себя память/хранилище 1212. Память/хранилище 1212 представляет объем памяти/хранилища, ассоциированный с одним или несколькими машиночитаемыми носителями. Память/хранилище 1212 может включать в себя энергозависимые носители (например, оперативное запоминающее устройство (RAM)) и/или энергонезависимые носители (например, постоянное запоминающее устройство (ROM), флэш-память, оптические диски, магнитные диски и так далее). Память/хранилище 1212 может включать в себя несъемные носители (например, RAM, ROM, несъемный жесткий диск и так далее), а также съемные носители (например, флэш-память, съемный жесткий диск, оптический диск и так далее). Машиночитаемые носители 1206 можно конфигурировать различными другими способами, как дополнительно описано ниже.

[00111] Интерфейс (интерфейсы) 1208 ввода/вывода соответствуют функциональным возможностям для предоставления пользователю возможности вводить команды и информацию в вычислительное устройство 1202, а также позволяют представлять информацию пользователю и/или другим компонентам либо устройствам с использованием различных устройств ввода/вывода. Примеры устройств ввода включают в себя клавиатуру, устройство управления курсором (например, мышь), микрофон (например, для речевого ввода), сканер, сенсорные функциональные возможности (например, емкостные или другие датчики, которые конфигурируются для обнаружения физического касания), камеру (например, которая может применять длины волн в видимой или невидимой части спектра, например инфракрасные частоты, чтобы обнаруживать перемещение, которое не предполагает касание, а также жесты), и так далее. Примеры устройств вывода включают в себя устройство отображения (например, монитор или проектор), динамики, принтер, сетевую карту, устройство с тактильным откликом и так далее. Таким образом, вычислительное устройство 1202 может конфигурироваться различными способами, как дополнительно описано ниже, чтобы поддерживать взаимодействие с пользователем.

[00112] Вычислительное устройство 1202 также включает в себя диспетчер 1214 хранилища. Диспетчер 1214 хранилища предоставляет различные функциональные возможности измененного сжатия памяти, которые обсуждались выше. Диспетчер 1214 хранилища может реализовывать, например, диспетчер 104 сжатого хранилища из фиг. 1. Хотя проиллюстрирован обособленным от машиночитаемых носителей 1206, следует отметить, что диспетчер 1214 хранилища в качестве альтернативы можно реализовать как часть машиночитаемых носителей 1206.

[00113] Различные методики могут описываться в этом документе в общем контексте программного обеспечения, элементов аппаратных средств или программных модулей. Как правило, такие модули включают в себя процедуры, программы, объекты, элементы, компоненты, структуры данных и так далее, которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Термины "модуль", "функциональные возможности" и "компонент" при использовании в данном документе в целом представляют программное обеспечение, микропрограммное обеспечение, аппаратные средства или их сочетание. Признаки описанных в этом документе методик являются платформо-независимыми, то есть методики можно реализовать на различных вычислительных платформах, имеющих различные процессоры.

[00114] Реализация описанных модулей и методик может храниться или передаваться посредством некоторого вида машиночитаемых носителей. Машиночитаемые носители могут включать в себя ряд носителей, к которым можно обращаться с помощью вычислительного устройства 1202. В качестве примера, а не ограничения, машиночитаемые носители могут включать в себя "машиночитаемые носители информации" и "машиночитаемые среды передачи сигналов".

[00115] "Машиночитаемые носители информации" относятся к носителям и/или устройствам, которые предоставляют возможность постоянного хранения информации, и/или к материальному хранилищу, в отличие от простой передачи сигналов, несущих или сигналов как таковых. Таким образом, машиночитаемые носители информации относятся к средам не для переноса сигналов. Машиночитаемые носители информации включают в себя такие аппаратные средства, как энергозависимые и энергонезависимые, съемные и несъемные носители и/или запоминающие устройства, реализованные по способу или технологии, подходящих для хранения информации, такой как машиночитаемые команды, структуры данных, программные модули, логические элементы/схемы или другие данные. Примеры машиночитаемых носителей информации могут включать в себя, но не ограничиваются, RAM, ROM, EEPROM, флэш-память или другую технологию памяти, компакт-диск, универсальные цифровые диски (DVD) или другое оптическое запоминающее устройство, жесткие диски, магнитные кассеты, магнитную ленту, накопитель на магнитных дисках или другие магнитные запоминающие устройства, либо другое запоминающее устройство, материальные носители или изделие, которые подходят для хранения нужной информации и к которым можно обращаться с помощью компьютера.

[00116] "Машиночитаемые среды передачи сигналов" относятся к среде переноса сигналов, которая конфигурируется для передачи команд в аппаратные средства вычислительного устройства 1202, например по сети. Среды передачи сигналов обычно могут воплощать машиночитаемые команды, структуры данных, программные модули или другие данные в модулированном сигнале данных, таком как несущие, сигналы данных или другой транспортный механизм. Среды передачи сигналов также включают в себя любые средства доставки информации. Термин "модулированный сигнал данных" означает сигнал, который имеет одну или несколько своих характеристик, установленных или измененных таким образом, чтобы кодировать информацию в сигнале. В качестве примера, а не ограничения, средства связи включают в себя проводные средства, такие как проводная сеть или прямое проводное соединение, и беспроводные средства, такие как акустические, радиочастотные, инфракрасные и другие беспроводные средства.

[00117] Как описывалось ранее, элементы 1210 аппаратных средств и машиночитаемые носители 1206 соответствуют командам, модулям, логике программируемого устройства и/или логике неизменяемого устройства, реализованным в аппаратном виде, которые могут применяться в некоторых вариантах осуществления для реализации по меньшей мере некоторых аспектов описанных в этом документе методик. Элементы аппаратных средств могут включать в себя компоненты интегральной схемы или системы на кристалле, специализированной интегральной схемы (ASIC), программируемой пользователем вентильной матрицы (FPGA), сложного программируемого логического устройства (CPLD) и другие реализации в кремнии или других аппаратных устройствах. В этом смысле элемент аппаратных средств может работать в качестве устройства обработки, которое выполняет программные задачи, заданные командами, модулями и/или логикой, воплощенными элементом аппаратных средств, а также аппаратного устройства, используемого для хранения команд для исполнения, например, описанных ранее машиночитаемых носителей информации.

[00118] Сочетания вышеупомянутого также могут применяться для реализации различных методик и модулей, описанных в этом документе. Соответственно, программное обеспечение, аппаратные средства или программные модули и другие программные модули можно реализовать в виде одной или нескольких команд и/или логики, воплощенных в некотором виде машиночитаемых носителей информации и/или с помощью одного или нескольких элементов 1210 аппаратных средств. Вычислительное устройство 1202 может конфигурироваться для реализации конкретных команд и/или функций, соответствующих программному обеспечению и/или аппаратным модулям. Соответственно, реализация модулей в виде модуля, который в качестве программного обеспечения исполняется вычислительным устройством 1202, может по меньшей мере частично достигаться в аппаратных средствах, например, посредством использования машиночитаемых носителей информации и/или элементов 1210 аппаратных средств в системе обработки. Команды и/или функции могут исполняться/обрабатываться с помощью одного или нескольких изделий (например, одного или нескольких вычислительных устройств 1202 и/или систем 1204 обработки), чтобы реализовать методики, модули и примеры, описанные в этом документе.

[00119] Как дополнительно проиллюстрировано на фиг. 12, примерная система 1200 обеспечивает универсальные среды для прозрачного взаимодействия с пользователем при запуске приложений на персональном компьютере (ПК), телевизионном устройстве и/или мобильном устройстве. Службы и приложения запускаются практически аналогично во всех трех средах для общего взаимодействия с пользователем при переходе с одного устройства на другое, используя при этом приложение, играя в видеоигру, просматривая видео и так далее.

[00120] В примерной системе 1200 несколько устройств взаимосвязаны посредством центрального вычислительного устройства. Центральное вычислительное устройство может быть локальным для нескольких устройств или может располагаться удаленно от нескольких устройств. В одном или нескольких вариантах осуществления центральное вычислительное устройство может быть облаком из одного или нескольких серверов, которые подключаются к нескольким устройствам по сети, Интернету или другой линии передачи данных.

[00121] В одном или нескольких вариантах осуществления эта архитектура взаимосвязей дает возможность доставки функциональных возможностей между несколькими устройствами, чтобы обеспечить пользователю нескольких устройств общее и прозрачное взаимодействие. Каждое из нескольких устройств может обладать разными физическими требованиями и возможностями, и центральное вычислительное устройство использует платформу, чтобы сделать возможной доставку на устройство восприятия, которое как приспособлено к этому устройству, так и является общим для всех устройств. В одном или нескольких вариантах осуществления создается класс целевых устройств, и восприятия приспосабливаются к родовому классу устройств. Класс устройств может задаваться физическими признаками, типами использования или другими общими характеристиками устройств.

[00122] В различных реализациях вычислительное устройство 1202 может допускать ряд разных конфигураций, например для использований на компьютере 1216, мобильном устройстве 1218 и телевизоре 1220. Каждая из этих конфигураций включает в себя устройства, которые могут обладать в целом разными конструкциями и возможностями, и таким образом, вычислительное устройство 1202 может конфигурироваться в соответствии с одним или несколькими разными классами устройств. Например, вычислительное устройство 1202 можно реализовать как компьютерный класс 1216 устройства, который включает в себя персональный компьютер, настольный компьютер, многоэкранный компьютер, переносной компьютер, нетбук и так далее.

[00123] Вычислительное устройство 1202 также можно реализовать как мобильный класс 1218 устройства, который включает в себя мобильные устройства, например мобильный телефон, портативный музыкальный проигрыватель, портативное игровое устройство, планшетный компьютер, многоэкранный компьютер и так далее. Вычислительное устройство 1202 также можно реализовать в виде телевизионного класса 1220 устройства, который включает в себя устройства, имеющие более крупные экраны или подключенные к ним в обычных средах просмотра. Эти устройства включают в себя телевизоры, телевизионные приставки, игровые приставки и так далее.

[00124] Описанные в этом документе методики могут поддерживаться этими различными конфигурациями вычислительного устройства 1202 и не ограничиваются конкретными примерами описанных в этом документе методик. Эти функциональные возможности также можно полностью или частично реализовать посредством использования распределенной системы, например в "облаке" 1222 посредством платформы 1224, как описано ниже.

[00125] Облако 1222 включает в себя и/или соответствует платформе 1224 для ресурсов 1226. Платформа 1224 обобщает лежащие в основе функциональные возможности аппаратных средств (например, серверов) и программные ресурсы облака 1222. Ресурсы 1226 могут включать в себя приложения и/или данные, которые могут использоваться, пока компьютерная обработка исполняется на серверах, которые удалены от вычислительного устройства 1202. Ресурсы 1226 также могут включать в себя услуги, предоставляемые через Интернет и/или по сети абонента, например сотовой сети или сети Wi-Fi.

[00126] Платформа 1224 может обобщать ресурсы и функции для соединения вычислительного устройства 1202 с другими вычислительными устройствами. Платформа 1224 также может служить для обобщения масштабирования ресурсов, чтобы предоставлять соответствующий уровень масштаба возникшей потребности в ресурсах 1226, которые реализуются посредством платформы 1224. Соответственно, в варианте осуществления с взаимосвязанными устройствами реализация описанных в этом документе функциональных возможностей может распределяться по всей системе 1200. Например, функциональные возможности можно частично реализовать на вычислительном устройстве 1202, а также посредством платформы 1224, которая обобщает функциональные возможности облака 1222.

[00127] Несмотря на то, что предмет изобретения описан на языке, характерном для структурных признаков и/или методологических действий, необходимо понимать, что предмет изобретения, определенный в прилагаемой формуле, не обязательно ограничивается описанными выше характерными признаками или действиями. Скорее, описанные выше характерные признаки и действия раскрываются в качестве примерных видов реализации формулы изобретения.

Реферат

Группа изобретений относится к управлению памятью. Технический результат - обеспечение возможности увеличения объема памяти. Набор страниц памяти из рабочего набора процесса программы, например по меньшей мере некоторые из страниц памяти, которые изменены, сжимается в сжатое хранилище перед записью в файл подкачки. Сжатое хранилище состоит из нескольких страниц памяти, страницы памяти сжатого хранилища можно переориентировать с помощью диспетчера памяти после записи в файл подкачки. Последующие запросы страниц памяти, которые сжаты в сжатое хранилище, от диспетчера памяти выполняются путем обращения к страницам памяти сжатого хранилища, распаковки запрошенных страниц памяти и возврата запрошенных страниц памяти диспетчеру памяти. 2 н. и 6 з.п. ф-лы, 12 ил.

Формула

1. Реализуемый компьютером способ для увеличения объема памяти, доступной для выделения программам в вычислительном устройстве, содержащий этапы, на которых:
идентифицируют первый набор страниц памяти, которые изменены, где первый набор страниц памяти выделяется процессу программы;
сжимают первый набор страниц памяти в сжатое хранилище страничной памяти, где сжатое хранилище состоит из второго набора страниц памяти и сжатое хранилище ассоциируется только с процессом программы;
разрешают диспетчеру памяти переориентировать первый набор страниц памяти после того, как первый набор страниц памяти сжат в сжатое хранилище; и
записывают второй набор страниц памяти из сжатого хранилища в файл подкачки, расположенный во вспомогательном запоминающем устройстве, которое имеет большее время чтения/записи, но больший объем памяти, нежели страничная память, вместо записи первого набора страниц памяти в файл подкачки.
2. Способ по п. 1, дополнительно содержащий этап, на котором разрешают диспетчеру памяти переориентировать второй набор страниц памяти после того, как второй набор страниц памяти записан в файл подкачки.
3. Способ по п. 1, дополнительно содержащий этапы, на которых, в ответ на определение выгрузить страницы памяти процесса:
идентифицируют список страниц памяти в рабочем наборе процесса;
сжимают идентифицированные страницы памяти;
записывают сжатые идентифицированные страницы памяти в сжатое хранилище последовательно по виртуальному адресу в памяти у идентифицированных страниц памяти;
резервируют пространство для сжатого хранилища в файле подкачки; и
записывают сжатое хранилище в зарезервированное пространство в файле подкачки.
4. Способ по п. 3, дополнительно содержащий этапы, на которых, в ответ на определение загрузить страницы памяти процесса после выгрузки страниц памяти процесса:
извлекают сжатое хранилище из файла подкачки;
сохраняют извлеченное сжатое хранилище в третий набор страниц памяти;
распаковывают сжатые страницы памяти в третий набор страниц памяти; и
возвращают распакованные страницы памяти для включения в рабочий набор процесса.
5. Способ по п. 1, дополнительно содержащий этап, на котором обеспечивают продвижение при возврате первого набора страниц памяти после того, как первый набор страниц памяти сжат, и независимо от того, записан ли второй набор страниц памяти в файл подкачки или переориентирован после записи в файл подкачки.
6. Способ по п. 1, в котором каждая из первого набора страниц памяти имеет по меньшей мере аналогичные уровни приоритета и каждая из второго набора страниц памяти имеет по меньшей мере аналогичные уровни приоритета.
7. Вычислительное устройство, сконфигурированное для увеличения объема памяти, доступной для выделения программам в вычислительном устройстве, содержащее:
память;
диспетчер памяти, сконфигурированный для управления страницами памяти; и
диспетчер сжатого хранилища, сконфигурированный для увеличения объема памяти, которая доступна диспетчеру памяти для выделения программам вычислительного устройства, путем:
сжатия первого набора страниц памяти, которые изменены процессом, в сжатое хранилище страничной памяти, где сжатое хранилище состоит из второго набора страниц памяти, первый набор страниц памяти выделяется процессу программы и сжатое хранилище ассоциируется только с тем процессом программы;
разрешения диспетчеру памяти переориентировать страницу памяти для каждой страницы памяти в первом наборе страниц памяти после того, как страница памяти сжата в сжатое хранилище; и
записи второго набора страниц памяти из сжатого хранилища в файл подкачки, расположенный во вспомогательном запоминающем устройстве, которое имеет большее время чтения/записи, но больший объем памяти, нежели страничная память, при отсутствии записи первого набора страниц памяти в файл подкачки.
8. Вычислительное устройство по п. 7, в котором диспетчер сжатого хранилища дополнительно конфигурируется для:
в ответ на определение выгрузить страницы памяти процесса:
идентификации списка страниц памяти в рабочем наборе процесса,
сжатия идентифицированных страниц памяти,
записи сжатых идентифицированных страниц памяти в сжатое хранилище последовательно по виртуальному адресу в памяти у идентифицированных страниц памяти,
резервирования пространства для сжатого хранилища в файле подкачки, и
записи сжатого хранилища непрерывно в зарезервированное пространство в файле подкачки; и
в ответ на определение загрузить страницы памяти процесса после выгрузки страниц памяти процесса:
извлечения сжатого хранилища из файла подкачки,
сохранения извлеченного сжатого хранилища в третий набор страниц памяти,
распаковки сжатых страниц памяти в третий набор страниц памяти, и
возврата распакованных страниц памяти для включения в рабочий набор процесса.

Авторы

Патентообладатели

Заявители

СПК: G06F12/023 G06F12/08 G06F2212/401

Публикация: 2018-11-29

Дата подачи заявки: 2015-02-18

0
0
0
0
Невозможно загрузить содержимое всплывающей подсказки.
Поиск по товарам