RU2805768C2 - Уменьшение зависимости от синхронизации в пометке сбора мусора - Google Patents

Уменьшение зависимости от синхронизации в пометке сбора мусора Download PDF

Info

Publication number
RU2805768C2
RU2805768C2 RU2021125981A RU2021125981A RU2805768C2 RU 2805768 C2 RU2805768 C2 RU 2805768C2 RU 2021125981 A RU2021125981 A RU 2021125981A RU 2021125981 A RU2021125981 A RU 2021125981A RU 2805768 C2 RU2805768 C2 RU 2805768C2
Authority
RU
Russia
Prior art keywords
pointer
garbage collection
address
memory
cas
Prior art date
Application number
RU2021125981A
Other languages
English (en)
Other versions
RU2021125981A (ru
Inventor
Маони Чжан СТЕФЕНС
Патрик Генри ДАССАД
Original Assignee
МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи filed Critical МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи
Publication of RU2021125981A publication Critical patent/RU2021125981A/ru
Application granted granted Critical
Publication of RU2805768C2 publication Critical patent/RU2805768C2/ru

Links

Images

Abstract

Очистка памяти специально приспосабливается, чтобы устранять некоторые инструкции синхронизации, ускоряя одновременный сбор мусора, в то же время сохраняя целостность данных и доступность. Сбор мусора высвобождает объекты, которые больше не используются, или другие неиспользуемые области памяти. Указатели разделяются на адресные фрагменты, хранящие адресные значения, и фрагменты для сбора мусора, имеющие специальный бит. Код пометки выполняет запись только во фрагменты для сбора мусора, устанавливая специальный бит в качестве метки ссылки, кандидата на перераспределение и т.д. Модифицирующие потоки могут одновременно изменять весь указатель, чтобы обновлять адрес, но изменение не вызывает неправильные очистки или отказ операций, таких как перераспределение. Скорость исполнения увеличивается посредством устранения некоторых инструкций синхронизации в сборщике мусора и использования других атомарных записей взамен. Модификаторы работают в адресных пространствах пользователя или ядра. Сборщик мусора может заключать в себе разделенные на части указатели и их использование, чтобы устранять ошибки среды исполнения посредством кода, который ожидает ссылки, которые должны быть в канонической не разделенной на части форме. 3 н. и 17 з.п. ф-лы, 12 ил.

Description

Уровень техники
[0001] В компьютерном программировании сбор мусора (GC) помогает обеспечивать автоматическую организацию памяти. Рассматриваемый "мусор" является пространством памяти, которое было выделено программе для использования, больше не нужно этой программе, но все еще является недоступным для использования другими программами. Сборщик мусора пытается идентифицировать такие области памяти, с тем чтобы они могли быть высвобождены для последующего повторного распределения.
[0002] Сбор мусора может освобождать программистов от необходимости вручную освобождать объекты данных, которые больше не используются, таким образом, делая программирование легче. Сбор мусора может также помогать предотвращать некоторые ошибки среды исполнения, тем самым, усиливая информационную безопасность, улучшая целостность и доступность данных. Многие языки программирования либо требуют сбора мусора, либо иначе предоставляют возможность сбора мусора в качестве опции. Некоторые среды разработки программного обеспечения предоставляют возможность как сбора мусора, так и ручной организации памяти в заданной программе.
[0003] Эффективная реализация сбора мусора может иметь высокий приоритет, поскольку сборщики мусора могут работать часто или в непредсказуемые моменты времени, или то и другое, и могут значительно замедлять исполнение пользовательской программы. Действительно, большинство, если не все, сборщики мусора иногда используют подход "останови мир", который предотвращает запуск пользовательских программ в то же самое время, что и сборщика мусора. Однако, простое уменьшение интервала времени, затрачиваемого на сбор мусора, может также уменьшать объем высвобожденной памяти и, таким образом, мешает выполнению пользовательской программы другими способами, например, увеличивая время, затрачивая на замену данных между энергозависимыми и энергонезависимыми запоминающими устройствами.
Сущность изобретения
[0004] Как изложено в данном документе, некоторые инструментальные средства высвобождения памяти и процессы являются специально приспособленными для улучшения функциональности организации памяти вычислительной системы. Специальное приспосабливание снижает или устраняет использование некоторых относительно медленных инструкций синхронизации, таких как инструкции сравнения и замены. Одновременный сбор мусора может выполняться ощутимо быстрее, без повышенного риска для целостности и доступности данных, которые все еще используются.
[0005] Некоторые варианты осуществления для сбора мусора, которые представляются в данном документе, устраняют зависимость от CAS-инструкций процессора для пометки сбора мусора. Устраненные CAS-инструкции могут включать в себя одну или более инструкций сравнения и замены или инструкций сравнения и установки. Некоторые варианты осуществления включают в себя цифровую память, имеющую адресуемые блоки, например, байты, при этом каждый адресуемый блок является индивидуально адресуемым с помощью соответствующего адресного значения. Один или более указателей находятся в памяти, при этом каждый указатель находится, по меньшей мере, в двух соседних адресуемых блоках. Каждый указатель имеет адресный фрагмент, который хранит адресное значение, и фрагмент для сбора мусора, который является отличным от адресного фрагмента. Процессор находится в функциональной связи с памятью. Процессор имеет набор инструкций, который включает в себя, по меньшей мере, одну инструкцию записи, которая при исполнении атомарно записывает значение, по меньшей мере, в один адресуемый блок. Инструкция записи отличается от какой-либо CAS-инструкции. Т.е., чтобы подчеркнуть устранение CAS-инструкций, CAS-инструкция не считается "инструкцией записи", когда эта фраза используется в данном документе, даже если исполнение CAS-инструкции может включать в себя запись значения.
[0006] Рассматриваемые варианты осуществления также включают в себя модифицирующий поток, который при исполнении изменяет, по меньшей мере, одно или более адресных значений одного или более соответствующих указателей. В целом, исполнение модифицирующего потока будет выполнять некоторую полезную операцию как часть пользовательской программы (или как часть ядра), но природа этой работы не является центральной для понимания концепций данного документа. Модифицирующий поток является наиболее уместным здесь относительно своего потенциального взаимодействия со сборщиком мусора, и, в частности, относительно того, как сборщик мусора и модифицирующий поток (или модифицирующие потоки) взаимодействуют через адресные значения во время их одновременного исполнения.
[0007] Рассматриваемые варианты осуществления также включают в себя сборщик мусора, который работает одновременно с модифицирующим потоком во время фазы пометки сбора мусора. Когда используется здесь, "одновременный" означает "по меньшей мере, перекрывающийся по времени" - полная одновременность допускается, но не требуется, для совпадения по времени. Сборщик мусора использует инструкцию записи, чтобы автоматически устанавливать бит метки ссылки в фрагменте для сбора мусора указателя, в качестве указателя того, что адресный фрагмент указателя идентифицировал область памяти, которая была неизвестной в качестве доступной для высвобождения при прошлой проверке. В действии сбор мусора включает в себя фазу пометки. Продолжая согласно концепциям данного документа, фаза пометки сохраняет целостность адресных значений, записанных модифицирующим потоком, и выполняет это без зависимости от CAS-инструкций, даже если модифицирующий поток и сборщик мусора работают одновременно друг с другом.
[0008] Некоторые варианты осуществления или окружения вариантов осуществления, представленные в данном документе, предусматривают или используют действия, которые помечают области памяти в вычислительной системе во время сбора мусора. Эти действия могут включать в себя прием сборщиком мусора местоположений одного или более указателей, которые находятся в цифровой памяти вычислительной системы, при этом каждый указатель имеет адресный фрагмент, который хранит адресное значение, и фрагмент для сбора мусора, который отличается от адресного фрагмента. Эти действия могут также включать в себя модифицирующий поток, одновременно исполняющийся со сборщиком мусора и имеющий доступ, по меньшей мере, к адресному фрагменту, по меньшей мере, одного из указателей. Эти действия могут также включать в себя то, что сборщик мусора использует неCAS-инструкцию записи для пометки области памяти, атомарно устанавливая бит метки ссылки в фрагменте для сбора мусора указателя, чей адрес идентифицирует область памяти, без упомянутой устанавливающей перезаписи адреса. Эти действия могут также включать в себя устранение обработки в качестве высвобождаемой памяти любой области памяти, которая все еще используется, по меньшей мере, одним потоком пользовательского пространства, например, устранение ложноотрицательных значений при определении того, находится ли область памяти все еще в использовании. Соответственно, эти действия могут выполнять фазу пометки сбора мусора независимо от CAS-инструкций.
[0009] Другие технические механизмы, структуры и действия, имеющие отношение к концепциям согласно настоящему документу, также станут очевидны специалистам в области техники. Данные примеры являются просто иллюстративными. Это краткое изложение сущности изобретения не имеет намерением ни идентифицировать ключевые признаки или важнейшие признаки заявляемого изобретения, ни использоваться для ограничения объема заявляемого изобретения. Скорее, данное краткое изложение сущности изобретения предусмотрена для введения - в упрощенной форме - некоторых концепции, которые дополнительно описываются ниже в подробном описании. Изобретение определено в формуле изобретения, и в тех случаях, когда это краткое изложение сущности изобретения конфликтует с формулой изобретения, формула изобретения должна превалировать.
Краткое описание чертежей
[0010] Более подробное описание будет дано со ссылкой на присоединенные чертежи. Эти чертежи иллюстрируют только выборочные аспекты и, таким образом, полностью не определяют область действия или рамки изобретения.
[0011] Фиг. 1 - блок-схема, иллюстрирующая компьютерную систему в целом, а также иллюстрирующая сконфигурированный носитель хранения информации в целом;
[0012] Фиг. 2 - блок-схема, иллюстрирующая аспекты улучшенной вычислительной системы, которая включает в себя избегающую CAS функциональность сбора мусора;
[0013] Фиг. 3 - блок-схема, иллюстрирующая аспекты состояния памяти в различные моменты времени во время сбора мусора;
[0014] Фиг. 4 - схема, иллюстрирующая одновременное исполнение потока для сбора мусора и модифицирующего потока;
[0015] Фиг. 5 и 6 - схемы, иллюстрирующие изменение адреса во время фазы пометки сбора мусора;
[0016] Фиг. 7 - схема, иллюстрирующая идентификацию конкретных битов и конкретных фрагментов в 64-битном указателе;
[0017] Фиг. 8 - блок-схема, иллюстрирующая аспекты процессоров и, в частности, аспекты наборы инструкций процессора;
[0018] Фиг. 9 - блок-схема, иллюстрирующая аспекты циклов сбора мусора;
[0019] Фиг. 10 - блок-схема, иллюстрирующая аспекты состояния памяти относительно сбора мусора;
[0020] Фиг. 11 - блок-схема последовательности операций, иллюстрирующая некоторые процессы сбора мусора; и
[0021] Фиг. 12 - блок-схема последовательности операций, дополнительно иллюстрирующая этапы в некоторых процессах сбора мусора или других процессах организации памяти.
Подробное описание изобретения
[0022] Обзор
[0023] Многие инновации распространяются за пределы их первоисточника, но понимание первоисточников инноваций может помогать более полно оценивать инновацию. В настоящем случае, некоторые идеи, представленные в данном документе, были обусловлены технической проблемой сокращения времени, затрачиваемого при выполнении сбора мусора в состоянии "останови мир", в то же время все еще обеспечивая адекватную высвобождению памяти для пользовательских потоков. Проблема ведет к рассмотрению возможных технических изменений в характеристиках, таких как частота/триггеры сбора мусора, одновременность сбора мусора с исполнением пользовательского потока, создание сборщика мусора и обработка плавающего мусора, и алгоритмы очистки в сравнении со сжатием. Но для настоящих целей, фокус является более узким. Изобретатели задумали технические изменения, которые могут уменьшать зависимость кода сборщика мусора от некоторых относительно дорогостоящих инструкций синхронизации (например, сравнения и замены, сравнения и установки) во время фазы пометки сбора мусора, и делают это без нарушения целостности изменений адреса, которые одновременно выполняются за пределами кода для сбора мусора. Другие технические проблемы, устраняемые инновациями, изучаемыми здесь, также будут очевидны специалисту из обсуждения, предоставленного ниже.
[0024] Хотя сбор мусора для реализаций языка программирования Java® (товарный знак компании Oracle America, Inc.) был мотивирующим примером, инструменты и технические способы, описываемые в данном документе, не ограничиваются использованием в поддержке этого языка. Варианты осуществления могут также или альтернативно поддерживать сбор мусора для памяти, которая была выделена с помощью программ, разработанных с помощью других языков. Аналогично, хотя сбор мусора для объектов был мотивирующим примером, и объекты используются в некоторых примерах, описываемых в данном документе, варианты осуществления могут также или альтернативно поддерживать сбор мусора для других структур данных, включающих в себя структуры данных, которые выделяются в программах, которые не следуют парадигме объектно-ориентированного программирования. Специалист подтвердит, что сбор мусора иногда используется для очистки памяти от элементов, отличных от объектов языка объектно-ориентированного программирования, например, некоторые реализации FORTRAN имеют сборщик мусора, как делают многие языки для начинающих, такие как BASIC и Logo.
[0025] Некоторые варианты осуществления хранят информацию в виртуальном адресном пространстве программы и используют эту информацию для обнаружения того, может ли элемент быть перемещен в операции сжатия. Это может обеспечивать ускорение сбора мусора до 15% или более, в некоторых системах.
[0026] Некоторые варианты осуществления, описанные в данном документе, могут рассматриваться некоторыми людьми в более широком контексте. Например, такие понятия как адресация, одновременность, память, высвобождения и использование могут считаться связанными с конкретным вариантом осуществления. Однако, из наличия широкого контекста не следует, что исключительные права необходимы в данном случае для абстрактных идей; это не так. Скорее, настоящее изобретение фокусируется на предоставлении должным образом конкретных вариантов осуществления, чьи технические результаты полностью или частично решают отдельные технические проблемы, например, как безопасно уменьшить задержки исполнения программы, вызванные инструкциями синхронизации. Другие сконфигурированные носители хранения информации, системы и способы, подразумевающие адресацию, параллельность, память, высвобождению или использование, находятся за пределами объема настоящего раскрытия. Соответственно, неопределенность, собственно, абстрактность, отсутствие технического характера и сопровождающие проблемы доказательства также устраняются при правильном понимании настоящего изобретения.
[0027] Более обобщенно, специалисту должно быть понятно, что не каждая часть этого раскрытия, или какие-либо отдельные детали в нем, обязательно требуются, чтобы удовлетворять законным критериям, таким как реализация возможностей, написанное описание или оптимальный режим. Также, варианты осуществления не ограничиваются отдельными языками программирования, инструментальными средствами, контекстами, идентификаторами, полями, свойствами, файлами, структурами данных, заметками или другими вариантами реализации, описываемыми в данном документе. Любой очевидный конфликт с какой-либо другим раскрытием патента, даже от владельца настоящих инноваций, не имеет роли в интерпретации формулы изобретения, представленной в этом раскрытии патента.
[0028] Технический характер
[0029] Технический характер вариантов осуществления, описанных в данном документе, будет понятен обычному специалисту в области техники, а также будет понятен несколькими способами для широкого диапазона внимательных читателей. Некоторые варианты осуществления обращаются к техническим действиям, таким как распределение памяти, обновления адреса памяти, перераспределение памяти после использования и выбор или исключение отдельных видов инструкций процессора, которые все являются действиями, глубоко укоренившимися в вычислительной технологии. В частности, "память" означает цифровую память, хранящую биты, а "процессор" означает интегральную схему или другую схему, которая обрабатывает биты, таким образом, чисто умственные процессы исключаются. Некоторые варианты осуществления улучшают функционирование вычислительных систем, сокращая время, затрачиваемое на очистку памяти, без увеличения, тем самым, риска для данных, хранящихся в памяти. Хотя сбор данных широко реализовывался с помощью инструкций сравнения и замены, некоторые варианты осуществления, преподаваемые в данном документе, предоставляют альтернативу, таким образом, предоставляя возможность выполнения параллельного безопасного сбора мусора на вычислительных системах, чья процессорная архитектура не имеет инструкций сравнения и замены. Другие преимущества, основанные на технических характеристиках концепций, также будут очевидны специалисту из предоставленного описания.
[0030] Сокращения, аббревиатуры и названия
[0031] Некоторые сокращения, аббревиатуры и названия определяются ниже. Другие определяются где-либо еще в данном документе или не требуют определения здесь для того, чтобы быть понятными специалисту.
[0032] ALU: арифметико-логический блок
[0033] API: прикладной программный интерфейс, он же интерфейс прикладного программирования
[0034] BIOS: базовая система ввода/вывода
[0035] CD: компакт-диск
[0036] CPU: центральный процессор
[0037] DVD: цифровой универсальный диск или цифровой видеодиск
[0038] FPGA: программируемая пользователем вентильная матрица
[0039] FPU: процессор с плавающей запятой
[0040] GPU: графический процессор
[0041] GUI: графический пользовательский интерфейс
[0042] ID: идентификатор
[0043] OS: операционная система
[0044] RAM: оперативное запоминающее устройство
[0045] ROM: постоянное запоминающее устройство
[0046] Некоторая дополнительная терминология
[0047] Ссылка выполняется в данном документе на примерные варианты осуществления, такие как иллюстрированные на чертежах, и особый язык используется в данном документе для их описания. Но изменения и дополнительные модификации признаков, иллюстрированных в данном документе, и дополнительные технические применения абстрактных принципов, иллюстрированных посредством отдельных вариантов осуществления в данном документе, которые должны быть понятны специалисту в соответствующей области(ях) техники, имеющему в распоряжении данное раскрытие, будут рассматриваться в рамках формулы изобретения.
[0048] Значение терминов разъясняется в этом раскрытии, таким образом, формула должна читаться с пристальным вниманием к этим разъяснениям. Даны конкретные примеры, но специалисты в соответствующей области(ях) техники поймут, что другие примеры могут также попадать в рамки значения используемых терминов и в рамки одного или более пунктов формулы изобретения. Термины необязательно должны иметь то же значение здесь, которое они имеют при обычном использовании (в частности, при нетехническом использовании), или при использовании для отдельной отрасли, или в отдельном словаре или наборе словарей. Ссылочные номера могут быть использованы с различными формулировками, чтобы помогать показывать широту термина. Пропуск ссылочного номера в данном участке текста необязательно означает, что содержимое чертежа не обсуждается в тексте. Изобретатели утверждают и осуществляют право на специальную и выбранную лексикографию. Приведенные термины определяются явно, но термин может также быть определен косвенно без использования кавычек. Термины могут быть определены, либо явно, либо косвенно, здесь в подробном описании и/или где-нибудь еще в досье заявки.
[0049] Когда используется в данном документе, "компьютерная система" может включать в себя, например, один или более серверов, материнских плат, узлов обработки, переносных компьютеров, планшетов, персональных компьютеров (портативных или нет), персональных цифровых помощников, смартфонов, умных часов, умных браслетов, сотовых или мобильных телефонов, других мобильных устройств, имеющих, по меньшей мере, процессор и память, систем видеоигр, систем дополненной реальности, систем голографической проекции, телевизоров, носимых вычислительных систем и/или другое устройство(а), предусматривающие один или более процессоров, управляемых, по меньшей мере, частично посредством инструкций. Инструкции могут быть в форме микропрограммного обеспечения или другого программного обеспечения в памяти и/или специализированной схемы.
[0050] "Многопоточная" компьютерная система - это компьютерная система, которая поддерживает многочисленные потоки исполнения. Термин "поток" следует понимать как включающий в себя какой-либо код, приспособленный или подверженный планированию (и возможно синхронизации), а в некоторых системах может также быть известен под другим именем, таким как "задача", "процесс", "сопрограмма" или даже "обработчик прерывания", например. В других системах "процесс" и "поток" имеют отличные друг от друга значения, например, процесс может содержать один или более потоков. В данной системе потоки могут работать параллельно, последовательно или в сочетании параллельного исполнения (например, многопроцессорная обработка) и последовательного исполнения (например, в квантах машинного времени). В частности, потоки могут работать "одновременно" означает, что их исполнение перекрывается, по меньшей мере, частично, например, они могут, каждый, осуществлять доступ к одному и тому же местоположению в памяти другого ресурса способом, который требует синхронизации или другого механизма, чтобы предотвращать вред от другого порядка доступов, который может случиться.
[0051] "Процессор" является блоком поточной обработки, таким как ядро в одновременной многопоточной реализации. Процессор включает в себя аппаратные средства. Данная микросхема может содержать один или более процессоров. Процессоры могут быть общего назначения, или они могут быть приспособлены для особых задач, таких как векторная обработка, обработка графики, обработка сигналов, арифметическая обработка с плавающей запятой, шифрование, обработка ввода/вывода и т.д.
[0052] "Ядра" включают в себя операционные системы, гипервизоры, виртуальные машины, код BIOS и аналогичное программное обеспечение интерфейса с аппаратными средствами.
[0053] "Код" означает процессорные инструкции, данные (которые включают в себя константы, переменные и структуры данных), или и инструкции, и данные. "Код" сам по себе и "программное обеспечение" используются взаимозаменяемо в данном документе. Исполняемый код, интерпретированный код и микропрограммное обеспечение являются некоторыми примерами кода. Код, который должен быть интерпретирован или компилирован для того, чтобы исполняться, называется "исходным кодом".
[0054] "Программа" используется широко в данном документе, чтобы включать в себя приложения, ядра, драйверы, обработчики прерываний, микропрограммное обеспечение, конечные автоматы, библиотеки, службы, компоненты облачной инфраструктуры, промежуточное программное обеспечение и другой код, написанный программистами (которые также называются разработчиками) и/или автоматически сформированный.
[0055] "Подпрограмма" означает функцию, способ, процедуру или другую часть кода, которая может принимать управление непоследовательно посредством вызова и затем возврата, например, через адрес, помещаемый в стек вызовов. Отличные от не имеющих параметров подпрограмм пустого типа, которые ни принимают параметры, ни возвращают значение, подпрограммы также используют стек для приема значения(ий), для возврата значения(ий) или того и другого.
[0056] "Функция" является подпрограммой, которая возвращает значение в точку, откуда она была вызвана.
[0057] "Служба" означает предложение потребляемой программы в облачном вычислительном окружении или другом сетевом окружении или окружении вычислительной системы.
[0058] "Облако" означает объединенные в пул ресурсы для вычисления, хранения и сетевого взаимодействия, которые являются гибко доступными для измеренной службы по запросу. Облако может быть частным (например, локальным), публичным, общественным или гибридным, и облачные службы могут быть предложены в форме инфраструктуры как услуги, платформы как услуги, программного обеспечения как услуги, или другой службы. Пока не заявлено другое, любое обсуждение считывания из файла или записи в файл включает в себя считывание/запись локального файла или считывание/запись по сети, которая может быть облачной сетью или другой сетью, или выполнение того и другого (локальное и сетевое чтение/запись).
[0059] Когда используется в данном документе, термин "включает в себя" предоставляет возможность дополнительных элементов (т.е. включает в себя означает "содержит" в смысле патентного права), пока не излагается иное.
[0060] "Оптимизировать" означает усовершенствовать, необязательно улучшать. Например, может быть возможным выполнять дополнительные усовершенствования в программе или алгоритме, который был оптимизирован.
[0061] "Процесс" иногда используется в данном документе в качестве термина из областей вычислительной техники, и в этом техническом смысле охватывает пользователей вычислительных ресурсов, а именно, сопрограммы, программные потоки, задачи, обработчики прерываний, процессы приложения, процессы ядра, процедуры и методы объекта, например. "Процесс" также используется в данном документе в качестве термина в области патентного права, например, при описании пункта формулы изобретения, касающегося процесса, в противоположность пункту формулы, касающемуся системы, или пункту формулы, касающемуся изделия производства (сконфигурированного носителя хранения). Аналогично, "способ" используется в данном документе временами как технический термин в области вычислительной техники (разновидность "подпрограммы"), а также как термин из области патентного права ("процесс"). Специалисты в данной области техники поймут, какое смысловое значение подразумевается в конкретном случае, и также поймут, что данный заявленный процесс или способ (в смысле патентного права) может иногда быть реализован с помощью одного или более процессов или способов (в смысле вычислительной техники).
[0062] "Автоматически" означает с помощью автоматизации (например, вычислительных аппаратных средств общего назначения, сконфигурированных посредством программного обеспечения для конкретных операций и технических результатов, обсуждаемых в данном документе), как противоположность отсутствию автоматизации. В частности, этапы, выполняемые "автоматически", не выполняются вручную на бумаге или в уме человека, хотя они могут быть инициированы человеком или направляться интерактивно человеком. Автоматические этапы выполняются с помощью машины для того, чтобы получать один или более технических результатов, которые не реализуются без технических взаимодействий, обеспечиваемых таким образом.
[0063] Специалист понимает, что технические результаты являются предполагаемой целью технического варианта осуществления. Сам факт, что вычисление подразумевается в варианте осуществления, например, и что некоторые вычисления могут также быть выполнены без технических компонентов (например, с помощью бумаги и карандаша, или даже как ход мыслей), не устраняет наличие технических результатов или изменяет конкретную и техническую природу варианта осуществления. Операции, такие как установка бита, трассировка адресов, считывание или запись байта памяти и исполнение инструкций процессора, каждая, понимаются в данном документе как по определению цифровые. Человеческий ум не может взаимодействовать непосредственно с CPU или другим процессором, или с RAM или с другим цифровым хранилищем, чтобы считывать и записывать необходимые данные и выполнять необходимые операции по цифровым значениям, таким как биты и байты, чтобы выполнять этапы организации памяти, обучаемые в данном документе. Это будет хорошо понятно специалистам в данной области техники с учетом настоящего раскрытия, но другие могут иногда нуждаться в информировании или напоминании фактов.
[0064] Пока не утверждается иное, по меньшей мере, некоторые варианты осуществления также допускают способность работы в масштабе производственных окружений, или в испытательных лабораториях для производственных окружений, когда надлежащим образом располагаются и конфигурируются, как противоположность всего лишь мысленным экспериментам. Для настоящих целей, "работа в масштабе" означает работу, по меньшей мере, в одном из следующих условий: очистка памяти в куче, чей размер равен, по меньшей мере, 1 ГБ (один гигабайт), очистка памяти одновременно, по меньшей мере, с двумя пользовательскими потоками, очистка памяти в системе, чей процессор имеет, по меньшей мере, четыре ядра, или очистка памяти, чьи адреса памяти включают в себя, по меньшей мере, 48 битов.
[0065] "Вычислительным образом" аналогично означает использование вычислительного устройства (процессор плюс память, по меньшей мере) и исключает получение результата посредством просто человеческой мысли или просто отдельного человеческого действия. Например, выполнение арифметических действий с помощью бумаги и карандаша не является выполнением арифметических действий вычислительным образом, как понимается в данном документе. Результаты вычислений являются более быстрыми, более широкими, более глубокими, более точными, более согласующимися, более объемлющими и/или иначе предоставляют технические результаты, которые находятся за рамками отдельной производительности человека. "Вычислительные этапы" являются этапами, выполняемыми вычислительным образом. Ни "автоматически", ни "вычислительным образом" не означает обязательно "немедленно". "Вычислительным образом" и "автоматически" используются взаимозаменяемо в данном документе.
[0066] "С упреждением" означает без непосредственного запроса от пользователя. Действительно, пользователь может даже не понимать, что упреждающий этап посредством варианта осуществления был возможен, до того как результат этапа был представлен пользователю. Кроме тех случаев, когда констатируется иное, любой вычислительный и/или автоматический этап, описанный в данном документе, может также быть выполнен с упреждением.
[0067] Повсюду в этом документе использование необязательных множественных форм означает наличие одного или более указываемых признаков. Например, "процессор(ы)" означает "один или более процессоров" или в равной степени "по меньшей мере один процессор".
[0068] В целях законодательства США и практической деятельности, использование слова "этап" в данном документе, в формуле изобретения или где-либо еще, не предназначается, чтобы ссылаться на средство-плюс-функцию, этап-плюс-функцию или толкование формулы изобретения согласно 35 разделу Свода законов США раздел 112 шестой параграф/раздел 112(f). Любое допущение по отношению к этому результату, таким образом, явно опровергается.
[0069] В целях законодательства США и практической деятельности, формула изобретения не предназначается, чтобы ссылаться на интерпретацию средство-плюс-функция, если она не использует фразу "средство для". Язык формулы изобретения, предназначенный, чтобы интерпретироваться как язык средства-плюс-функции, если предусмотрено, будет явно излагать это изобретение с помощью фразы "средство для". Когда применяется интерпретация средство-плюс-функция, с использованием ли "средство для" и/или посредством толкования, выработанного судебной практикой, для языка формулы, средство, изложенное в спецификации для данного существительного или данного глагола, должно пониматься как связанное с языком формулы изобретения и связанное вместе в данном документе посредством чего-либо из следующего: появление в одном и том же блоке в блок-схеме на чертежах, обозначение одинаковым или аналогичным названием, обозначение одинаковым ссылочным номером, функциональное соотношение, изображенное на каком-либо из чертежей, функциональное соотношение, отмеченное в тексте настоящего раскрытия изобретения. Например, если ограничение пункта формулы изобретения перечисляет "zac-виджет", и это ограничение пункта формулы изобретения стало подверженным интерпретации средство-плюс-функция, тогда, минимум, все структуры, идентифицированные где-либо еще в спецификации в любом блоке чертежа, параграфе или примере, упоминающем "zac-виджет", или связанные вместе каким-либо ссылочным номером, назначенным zac-виджету, будут считаться частью структур, идентифицированных в приложении для zac-виджетов и будут помогать определять набор эквивалентов для структур zac-виджетов.
[0070] Повсюду в этом документе, пока явно не констатируется иное, любая ссылка на этап в процессе предполагает, что этап может быть выполнен непосредственно заинтересованной стороной и/или выполнен опосредованно стороной через механизмы вмешательства и/или объекты вмешательства, и все еще лежит в рамках этапа. Т.е. непосредственное выполнение этапа заинтересованной стороной не требуется, пока непосредственное выполнение не является явно сформулированным требованием. Например, этап, подразумевающий действие рассматриваемой стороны, такое как адресация, оказание помощи, распределение, устранение, проверка, сжатие, сравнение и установка, сравнение и подкачка, создание, определение, исполнение (оно же запуск), удержание, идентификация, игнорирование (например, отбрасывание), реализация, указание, пометка, модификация, изменение, применение логического ИЛИ, выполнение, достижение, считывание, прием, очистка, регистрация, полагание, нахождение, установка, добавление знака, чиста, синхронизация, обработка, использование, запись, обнуление (и адресов, адресуемых, и т.д.) относительно получателя или другого субъекта, может подразумевать вмешивающееся действие, такое как пересылка, копирование, выгрузка, загрузка, кодирование, декодирование, сжатие, распаковка, шифрование, дешифрование, аутентификация, вызов и т.п. некоторой другой стороной, все еще будет пониматься как выполняемый непосредственно рассматриваемой стороной.
[0071] Всякий раз, когда ссылка выполняется на данные или инструкции, понятно, что эти элементы конфигурируют компьютерно-читаемую память и/или компьютерно-читаемый носитель хранения, тем самым, преобразуя его в конкретное изделие, как противоположность просто существованию на бумаге, в уме человека или как простому сигналу, распространяемому по проводу, например. В целях защиты патента в США, память или другой компьютерно-читаемый носитель хранения информации не распространяет сигнал или несущую волну или просто энергию за рамками патентуемого изобретения в интерпретации Бюро по патентам и товарным знакам США (USPTO) в случае по делу Nuijten. Формула изобретения не охватывает сигнал сам по себе или просто энергию в Соединенных Штатах, и любая интерпретация формулы изобретения, которая утверждает иное с учетом настоящего раскрытия изобретения, является необоснованной по форме. Пока явно не констатируется иное, в формуле изобретения, разрешенной за пределами США, формула изобретения не распространяется на сигнал сам по себе или просто энергию.
[0072] Кроме того, несмотря на что-либо явно противоположное в другом месте в данном документе, явное различие должно пониматься между (a) компьютерно-читаемыми носителями данных и компьютерно-читаемой памятью, с одной стороны, и (b) средой передачи данных, также называемой сигнальной средой, с другой стороны. Среда передачи является распространяющимся сигналом или компьютерно-читаемой средой несущей волны. В отличие от этого, компьютерно-читаемые носители хранения и компьютерно-читаемая память не являются распространяющимся сигналом или компьютерно-читаемой средой несущей волны. Пока явно не констатируется иное в формуле изобретения, "компьютерно-читаемый носитель" означает компьютерно-читаемый носитель хранения, а не распространяющийся сигнал сам по себе и не простую энергию.
[0073] "Вариант осуществления" в данном документе является примером. Термин "вариант осуществления" не является взаимозаменяемым с "изобретением". Варианты осуществления могут свободно совместно использовать или заимствовать аспекты, чтобы создавать другие варианты осуществления (при условии, что результат является работоспособным), даже если результирующее сочетание аспектов явно не описывается само по себе в данном документе. Требование, чтобы все до единого разрешенного сочетания были явно и индивидуально описаны, является ненужным для специалиста в области техники, и противоположно политикам, которые признают, что патентные спецификации написаны для читателей, которые являются специалистами в области техники. Формальные комбинационные вычисления и неформальная обычная интуиция о множестве возможных сочетаний, возникающих даже из небольшого числа комбинируемых признаков, будут также указывать, что большое число сочетаний аспектов существует для аспектов, описанных в данном документе. Соответственно, требование явного перечисления всех до единого сочетаний будет противоречить политикам, требующим, чтобы патентные спецификации были краткими, и чтобы читатели были хорошо осведомлены в рассматриваемых технических областях.
[0074] Список ссылочных номеров
[0075] Следующий список предоставляется для удобства и в поддержку чертежей и как часть текста спецификации, который описывает инновации посредством ссылки на множество элементов. Элементы, не перечисленные здесь, могут, тем не менее, быть частью данного варианта осуществления. Для лучшей удобочитаемости текста заданный номер ссылки перечисляется рядом с некоторыми, но не всеми, перечислениями элемента, на который делается ссылка, в тексте. Тот же ссылочный номер может быть использован со ссылкой на другие примеры или другие экземпляры данного элемента. Список ссылочных номеров:
[0076] 100 операционное окружение, также называемое вычислительным окружением; может дополнительно характеризоваться в некоторых ситуациях как окружение разработки или производственное окружение, например
[0077] 102 компьютерная система, также называемая вычислительной системой или системой вычислений
[0078] 104 пользователи
[0079] 106 периферийные устройства
[0080] 108 сеть в целом
[0081] 110 процессор
[0082] 112 компьютерно-читаемый носитель хранения, например, RAM, жесткие диски
[0083] 114 съемный сконфигурированный компьютерно-читаемый носитель хранения
[0084] 116 инструкции, исполняемые с помощью процессора; могут быть на съемных носителях хранения или в другой памяти (энергозависимой или энергонезависимой или той и другой); включают в себя, в частности, CAS-инструкции и неCAS-инструкции, как обсуждается в данном документе
[0085] 118 данные, например, значение(я) данных, сохраненные в местоположении данных
[0086] 120 ядро(а), например, операционная система(ы), BIOS, драйвера устройств
[0087] 122 инструментальные средства, например, антивирусное программное обеспечение, брандмауэеры, программное обеспечение анализатора пакетов, системы обнаружения вмешательства (IDS), системы предотвращения вмешательства (IPS), инструментальные средства разработки программного обеспечения и наборы инструментальных средств, инструментальные средства разработки аппаратных средств и наборы инструментальных средств
[0088] 124 приложения, например, текстовые процессоры, веб-браузеры, электронные таблицы, игры, инструментальные средства электронной почты, веб-приложения
[0089] 126 экраны отображения, также называемые "дисплеями"
[0090] 128 вычислительные аппаратные средства, не ассоциированные в ином случае со ссылочным номером 106, 108, 110, 112, 114
[0091] 200 система, улучшенная посредством функциональности пометки сбора мусора без CAS
[0092] 202 функциональность пометки сбора мусора без CAS в любой форме, описываемой в данном документе
[0093] 204 набор инструкций процессора
[0094] 206 сборщик мусора, также называемый "GC" или "кодом сборщика мусора"
[0095] 208 GC-поток, а именно, поток, который, по меньшей мере, в первую очередь (более 50% инструкций) выделяется для кода сборщика мусора
[0096] 210 модифицирующий поток, а именно, поток, который, по меньшей мере, в первую очередь (более 50% инструкций) выделяется для кода, отличного от кода сборщика мусора; модифицирующий поток часто является пользовательским потоком, но может также быть потоком ядра; "модифицирующий" в термине указывает, что модифицирующий поток может модифицировать (т.е., изменять) адреса, которые используются во время сбора мусора
[0097] 212 барьер считывания, например, код или другой механизм, который гарантирует, что процессор выполнил указанные операции считывания, прежде чем он выполняет операцию считывания, которая позиционируется после барьера считывания; "барьер считывания" может также ссылаться более обобщенно на код, который подвергается действию или полагается на барьер считывания
[0098] 214 адресуемый блок памяти, например, байт или слово, который имеет свой собственный адрес памяти
[0099] 216 указатель; отметим, что конкретное определение "указателя" используется в данном документе, в отличие от других документов, которые используют "указатель" и "адрес" как синонимы; для фиг. 2, фиг. 7 и других описаний, предоставленных в данном документе, "указатель" имеет адресный фрагмент, а также имеет отдельный фрагмент для сбора мусора; "указатель" и "ссылка" используются в данном документе как синонимы
[00100] 218 фрагмент для сбора мусора указателя
[00101] 220 бит метки ссылки или другой специальный бит в разделенном на части указателе, используемый для сбора мусора (GC); бит метки ссылки может быть задан, чтобы указывать, что дальнейшая GC-обработка вызывается, например, он может помечать указатель на объект, который должен быть сжат; одним альтернативным названием для бита 220 метки ссылки в некоторых сжимающих сборщиках мусора является "бит перераспределения потребностей" или "NRB", чтобы указывать проверку перераспределения на последующей стадии GC после пометки
[00102] 222 адресный фрагмент указателя
[00103] 224 адресное значение, например, физический адрес или виртуальный адрес, сохраненный в адресном фрагменте указателя
[00104] 226 фрагмент неупорядоченного массива памяти, часто называемый просто "кучей"
[00105] 228 запись об изменении, выполненном в чем-то в куче; запись не указывает обязательно точное выполненное изменение или точное местоположение, в котором изменение было выполнено, но указывает, что что-то в куче было изменено; изменения также называются "модификациями"
[00106] 230 адресное пространство ядра
[00107] 232 пользовательское (не ядра) адресное пространство
[00108] 234 модуль регистрации, который регистрирует изменения в куче, создавая или обновляя записи 228 об изменении в куче
[00109] 236 код фазы пометки сборщика мусора
[00110] 300 сегмент памяти, например, диапазон, страница, блок или другая область памяти, которая организуется, по меньшей мере, частично посредством сбора мусора
[00111] 302 непрерывная область памяти, которая была распределена, и которая либо используется, либо не известна в качестве высвобождаемой (указано на фиг. 3 знаком ✓) или в ином случае известна в качестве высвобождаемой, поскольку известно, что она больше не должна быть использована программой, которая выделила ее (указано на фиг. 3 знаком X)
[00112] 304 непрерывная область высвобождаемой памяти, получающаяся в результате сжатия
[00113] 400 поток в целом
[00114] 402 фазы и подфазы сбора мусора
[00115] 500 объект, например, структура объектных данных, выделенная в программе, которая реализует парадигму объектно-ориентированного программирования
[00116] 700 бит (т.е. местоположение в памяти, чья емкость равна одной двоичной единице информации)
[00117] 800 аспекты цифровых процессоров
[00118] 802 CAS-инструкции, т.е. инструкции сравнения и замены, инструкции сравнения и установки, или те и другие; могут иметь различные названия, но, тем не менее, функцию в качестве CAS-инструкций; могут быть единичными инструкциями или определенной последовательностью инструкций, которые реализуют CAS-функциональность и имеют стоимость исполнения в циклах, т.е. в пределах плюс-минус 10% распознанной CAS-инструкции
[00119] 804 счетчик циклов процессора; может быть определен посредством ссылки на техническую документацию от поставщика процессора, или посредством независимого испытания или посредством промышленно-признанного эталонного тестирования, например; может быть точным или быть указан как диапазон; может быть указан как среднее значение
[00120] 806 неCAS-инструкции, т.е. инструкции процессора, которые не являются CAS-инструкциями
[00121] 808 инструкция логического ИЛИ
[00122] 810 инструкция для установки конкретного индивидуального бита, который необязательно является старшим битом в адресуемом блоке, содержащем бит
[00123] 812 инструкция для установки старшего бита в адресуемом блоке
[00124] 814 неCAS, но тем не менее атомарная инструкция записи; то, является ли инструкция атомарной в данном случае и, следовательно, классифицируется как инструкция 814, может зависеть от того, выровнены ли блок(и), которые она записывает, по N-байтной границе (например, 32-битной границе или 64-битной границе в данной системе); т.е. один и тот же код операции может возникать в инструкции, которая является атомарной в некоторых записях и неатомарной в других записях
[00125] 900 аспекты циклов сбора мусора
[00126] 902 цикл сбора мусора
[00127] 904 фаза пометки сбора мусора
[00128] 906 фаза чистки для сбора мусора
[00129] 908 фаза сжатия для сбора мусора
[00130] 1000 аспекты состояния памяти относительно сбора мусора
[00131] 1002 состояние области памяти относительно сбора мусора
[00132] 1004 память является достижимой и известна как используемая
[00133] 1006 память является недостижимой
[00134] 1008 память помечается как, по меньшей мере, вероятно используемая
[00135] 1010 память не помечается как, по меньшей мере, вероятно используемая
[00136] 1012 память используется
[00137] 1014 память не используется
[00138] 1016 память является плавающим мусором
[00139] 1100 процессы (они же способы), которые включают в себя этапы, показанные на фиг. 11; также ссылаются на блок-схему последовательности операций на фиг. 11, иллюстрирующую эти процессы
[00140] 1102 прием местоположения указателя, например, из кода, который является трассировкой адресов для оценки достижимости
[00141] 1104 местоположение указателя, например, адрес, по которому указатель находится
[00142] 1106 установка бита пометки ссылки; это предполагается выполнять атомарно, пока явно не заявляется иное
[00143] 1108 использование неCAS-инструкции, т.е. исполнение одной или более неCAS-инструкций и неисполнение какой-либо CAS-инструкции
[00144] 1110 исполнение одновременно
[00145] 1112 выполнение обработки для сбора мусора в дополнение к пометке, например, чистка или сжатие
[00146] 1114 обработка для сбора мусора в дополнение к пометке, например, чистка или сжатие
[00147] 1116 избегание обработки памяти, которая используется, словно она является высвобождаемой, например, избегание добавления используемой памяти в пул памяти, который делается доступным для распределения
[00148] 1118 устранение зависимости от CAS-инструкций во время фазы пометки, т.е. во время фазы пометки либо запуск GC-кода, который не содержит CAS-инструкцию, либо запуск GC-кода, который содержит только CAS-инструкции, которые фактически не исполняются, либо запуск GC-кода, который не исполняет CAS-инструкции для того, чтобы защищать адресную целостность
[00149] 1120 устранение зависимости от CAS-инструкций во время любой фазы или подфазы цикла сбора мусора, т.е. во время всего сбора мусора либо запуск GC-кода, который не содержит CAS-инструкцию, либо запуск GC-кода, который содержит только CAS-инструкции, которые фактически не используются, либо запуск GC-кода, который не исполняет CAS-инструкции для того, чтобы защищать адресную целостность
[00150] 1122 устранение перезаписи адресного фрагмента указателя при установке бита метки ссылки (RMB) в фрагменте для сбора мусора указателя, например, посредством записи только в байт(ы), которые принадлежат фрагменту для сбора мусора
[00151] 1200 процессы (они же способы), которые включают в себя этапы, показанные на фиг. 12 или фиг. 11; также ссылается на блок-схему последовательности операций на фиг. 12 (и на блок-схему последовательности операций на фиг. 11, которую она объединяет), иллюстрирующую эти процессы
[00152] 1202 изменение, по меньшей мере, адресного фрагмента указателя
[00153] 1204 атомарная запись в один или более байтов памяти
[00154] 1206 атомарное считывание из одного или более байтов памяти
[00155] 1208 указание того, что область памяти является неизвестной в качестве высвобождаемой, например, посредством невключения ее в сбор памяти, которая должна быть перераспределена
[00156] 1210 сохранение целостности адресов, записанных модифицирующим потоком, либо посредством их неперезаписи, либо посредством их перезаписи только с теми же соответствующими значениями адресов, по меньшей мере, во время пометки (GC может изменять адреса позже, например, во время сжатия)
[00157] 1212 получение ускорения в исполнении посредством сокращения времени, затрачиваемого каждой операцией, например, времени, затрачиваемого каждой операцией синхронизации или каждой операцией пометки области памяти
[00158] 1214 ускорение в исполнении
[00159] 1216 пребывание в указанном потоке
[00160] 1218 запуск (т.е. исполнение) в указанном адресном пространстве
[00161] 1220 регистрация существования (по меньшей мере) изменения кучи, выполненного во время сбора мусора
[00162] 1222 изменение кучи, выполненное во время сбора мусора
[00163] 1224 идентификация области памяти, которая имеет указанное состояние 1002, или ассоциация указанного состояния 1002 с идентифицированной областью памяти
[00164] 1226 определение объекта, например, посредством объявления объекта и распределения памяти, чтобы хранить значение(я) объекта
[00165] 1228 язык программирования
[00166] 1230 определение того, помечена ли область памяти как ложноположительная относительно высвобождения, например, она помечена как используемая, но фактически не используется
[00167] 1232 ложноположительная относительно высвобождения, т.е. характеризуемая как используемая, но фактически не используемая (ложноотрицательная означает характеризуемая как неиспользуемая, но фактически используемая)
[00168] 1234 создание плавающего мусора
[00169] 1236 обнаружение плавающего мусора
[00170] 1238 обнуление области памяти, в частности, некоторых битов в указателе
[00171] 1240 обработка области памяти, в частности, некоторых битов в памяти, как обнуленных
[00172] 1242 часть с добавлением знака для указателя, например, бит 47 добавления знака в 64-битном указателе дает битам 48-63 то же значение, что и бит 47
[00173] 1244 обработка указателя, как если бы его старший фрагмент имел добавление знака, например, для совместимости с программным обеспечением, которое ожидает такой дополнительный знаковый разряд в 8-байтовых переменных, которые хранят 6-байтовые адресные значения
[00174] 1246 игнорирование значения старшего фрагмента (например, старших байтов) указателя
[00175] 1248 любой этап, обсуждаемый в настоящем раскрытии, которому не был назначен некий другой ссылочный номер
[00176] Операционные окружения
[00177] Со ссылкой на фиг. 1, операционное окружение 100 для варианта осуществления включает в себя, по меньшей мере, одну компьютерную систему 102. Компьютерная система 102 может быть многопроцессорной компьютерной системой или нет. Операционное окружение может включать в себя одну или более машин в данной компьютерной системе, которые могут быть сгруппированы, объединены в сеть с клиент-серверной архитектурой и/или объединены в одноранговую сеть в облаке. Отдельная машина является компьютерной системой, и группа совместно работающих машин также является компьютерной системой. Данная компьютерная система 102 может быть сконфигурирована для конечных пользователей, например, с приложениями, для администраторов, как сервер, как распределенный узел обработки и/или другими способами.
[00178] Пользователи-люди 104 могут взаимодействовать с компьютерной системой 102 с помощью дисплеев, клавиатур и других периферийных устройств 106 посредством набранного текста, касания, голоса, перемещения, компьютерного зрения, жестов и/или других форм I/O (ввода/вывода). Экран 126 может быть съемным периферийным устройством 106 или может быть неотъемлемой частью системы 102. Пользовательский интерфейс может поддерживать взаимодействие между вариантом осуществления и одним или более пользователями-людьми. Пользовательский интерфейс может включать в себя интерфейс командной строки, графический пользовательский интерфейс (GUI), естественный пользовательский интерфейс (NUI), интерфейс голосовых команд и/или другие представления пользовательского интерфейса (UI), которые могут быть представлены в качестве отдельных вариантов или могут быть объединены.
[00179] Разработчики программного обеспечения, тестировщики обеспечения качества и пользователи, выполняющие демонстрации улучшенных отладчиков, каждый, являются отдельным типом пользователя 104, хотя предполагается, что многие пользователи вероятно будут разработчиками программного обеспечения, и многие будут конечными пользователями программ, которые полагаются на сбор мусора для автоматической организации памяти. Автоматизированные агенты, сценарии, программное обеспечение воспроизведения и т.п., действующие от имени одного или более людей, могут также быть пользователями 104, например, чтобы обеспечивать тестирование системы 102, но пользователи являются людьми (не процессами), пока явно не указывается иное. Устройства хранения и/или сетевые устройства могут считаться периферийным оборудованием в некоторых вариантах осуществления и частью системы 102 в других вариантах осуществления, в зависимости от их отделимости от процессора 110. Другие компьютерные системы, непоказанные на фиг. 1, могут взаимодействовать технологическими способами с компьютерной системой 102 или с другим вариантом осуществления системы с помощью одного или более соединений с сетью 108 через оборудование сетевого интерфейса, например.
[00180] Каждая компьютерная система 102 включает в себя, по меньшей мере, один процессор 110. Компьютерная система 102, аналогично другим подходящим системам, также включает в себя один или более компьютерно-читаемых носителей 112 хранения. Носители 112 хранения могут быть различных физических типов. Носители 112 хранения могут быть энергозависимой памятью, энергонезависимой памятью, зафиксированными на месте носителями, съемными носителями, магнитными носителями, оптическими носителями, твердотельными носителями и/или другими типами физических носителей долговременного хранения (как противоположность просто распространяемому сигналу или простой энергии). В частности, сконфигурированный носитель 114 хранения, такой как переносной (т.е., внешний) жесткий диск, CD, DVD, карта памяти или другой съемный энергонезависимый запоминающий носитель, может стать функционально технологической частью компьютерной системы, когда вставляется или иначе устанавливается, делая свое содержимое доступным для взаимодействия и использования посредством процессора 110. Съемный сконфигурированный носитель 114 хранения является примером компьютерно-читаемого носителя 112 хранения. Некоторые другие примеры компьютерно-читаемых носителей 112 хранения включают в себя встроенное RAM, ROM, жесткие дики и другие запоминающие устройства, которые не являются легко снимаемыми пользователями 104. Для соответствия текущим требованиям к патенту США ни компьютерно-читаемый носитель, ни компьютерно-читаемый носитель хранения, ни компьютерно-читаемая память не является сигналом самим по себе или просто энергией по какой-либо формуле изобретения, находящейся на рассмотрении или выданной в Соединенных Штатах.
[00181] Носитель 114 хранения конфигурируется с помощью двоичных инструкций 116, которые являются исполняемыми посредством процессора 110; "исполняемый" используется в широком смысле в данном документе, чтобы включать в себя машинный код, интерпретируемый код, байткод и/или код, который работает на виртуальной машине, например. Носитель 114 хранения также конфигурируется с помощью данных 118, которые создаются, модифицируются, указываются по ссылке и/или иным образом используются для технического результата посредством исполнения инструкций 116. Инструкции 116 и данные 118 конфигурируют память или другой носитель 114 хранения, на котором они находятся; когда эта память или другой компьютерно-читаемый носитель хранения является функциональной частью данной компьютерной системы, инструкции 116 и данные 118 также конфигурируют эту компьютерную систему. В некоторых вариантах осуществления доля данных 118 представляет элементы реального мира, такие как характеристики изделия, запасы материалов, физические измерения, настройки, изображения, показания, цели, объемы и т.д. Такие данные также трансформируются посредством резервного копирования, восстановления, фиксаций изменений, аварийных завершений, переформатирования и/или других технических операций.
[00182] Хотя вариант осуществления может быть описан как реализуемый в качестве инструкций программного обеспечения, исполняемых посредством одного или более процессоров в вычислительном устройстве (например, компьютере общего назначения, сервере или кластере), такое описание не предназначено, чтобы исчерпывать все возможные варианты осуществления. Специалист поймет, что одинаковая или аналогичная функциональность может также часто быть реализована, в целом или частично, непосредственно в аппаратной логике, чтобы предоставлять одинаковые или аналогичные технические результаты. Альтернативно, или в дополнение к программной реализации, техническая функциональность, описанная в данном документе, может быть выполнена, по меньшей мере, частично, посредством одного или более аппаратных логических компонентов. Например, и без исключения других реализаций, вариант осуществления может включать в себя аппаратные логические компоненты 110, 128, такие как программируемые пользователем вентильные матрицы (FPGA), специализированные интегральные схемы (ASIC), стандартные продукты, ориентированные на приложение (ASSP), компоненты системы на кристалле (SOC), сложные программируемые логические устройства (CPLD) и аналогичные компоненты. Компоненты варианта осуществления могут быть сгруппированы во взаимодействующие функциональные модули на основе своих входных данных, выходных данных и/или своих технических результатов, например.
[00183] В дополнение к процессорам 110 (например, CPU, ALU, FPU и/или GPU), памяти/носителям 112 хранения, и дисплеям 126, операционное окружение может также включать в себя другие аппаратные средства 128, такие как аккумуляторные батареи, шины, источники питания, интерфейсные карты проводной и беспроводной сети, например. Существительные "экран" и "дисплей" используются взаимозаменяемо в данном документе. Дисплей 126 может включать в себя один или более сенсорных экранов, экранов, реагирующих на ввод от пера, или планшетов, или экранов, которые работают исключительно для вывода. В некоторых вариантах осуществления периферийные устройства 106, такие как устройства ввода/вывода для пользователя-человека (экран, клавиатура, мышь, планшет, микрофон, динамик, датчик движения и т.д.), будет присутствовать в функциональной связи с одним или более процессорами 110 и памятью. Процессы программного обеспечения могут быть пользователями 104, но пока явно не указывается иное, конечные пользователи являются людьми.
[00184] В некоторых вариантах осуществления система включает в себя множество компьютеров, соединенных сетью 108. Сетевое интерфейсное оборудование 128 может предоставлять доступ к сетям 108, с помощью компонентов, таких как интерфейсная карта сети с коммутацией пакетов, беспроводной приемопередатчик, или интерфейс телефонной сети, например, который может присутствовать в данной компьютерной системе. Однако, вариант осуществления может также передавать технические данные и/или технические инструкции посредством прямого доступа к памяти, съемных энергонезависимых носителей хранения или других подходов к хранению-извлечению информации и/или передаче.
[00185] Специалист поймет, что вышеупомянутые аспекты и другие аспекты, представленные в данном документе под названием "Операционные окружения", могут формировать часть данного варианта осуществления. Эти заголовки документа не предназначаются, чтобы предоставлять строгую классификацию признаков на наборы признаков для варианта осуществления и не для варианта осуществления.
[00186] Один или более элементов показаны в форме штриховой линии на чертежах, или перечислены внутри круглых скобок, чтобы подчеркивать, что они не являются обязательной частью иллюстрированного операционного окружения или всех вариантов осуществления, но могут взаимодействовать с элементами в операционном окружении или некоторыми вариантами осуществления, как обсуждается в данном документе. Из этого не следует, что элементы не в пределах штриховой линии или в форме круглых скобок обязательно требуются, на любом чертеже или в любом варианте осуществления. В частности, фиг. 1 предоставляется для удобства; включение элемента в фиг. 1 не подразумевает, что элемент, или описанное использование элемента, было известно прежде текущих инноваций.
[00187] Более подробно о системах
[00188] Примеры предоставляются в данном документе, чтобы помогать иллюстрировать аспекты технологии, но примеры, предоставленные в этом документе, не описывают все возможные варианты осуществления. Варианты осуществления не ограничиваются конкретными конфигурациями, реализациями, компоновками, отображениями, признаками, группировками, подходами, языками или сценариями, предоставленными в данном документе. Данный вариант осуществления может включать в себя дополнительные или другие технические признаки, механизмы, последовательности, компоненты или структуры данных, например, и может иначе отступать от примеров, предоставленных в данном документе.
[00189] Фиг. 2 иллюстрирует аспекты некоторых архитектур, которые являются подходящими для некоторых вариантов осуществления, преподаваемых в данном документе. Улучшенная система 200 является системой 102, улучшенной посредством добавления функциональности 202 сбора мусора без CAS, как описывается в данном документе. В частности, иллюстрированная улучшенная система 200 включает в себя сборщик 206 мусора, в GC-потоке 208 или барьере 212 считывания, или том и другом, который не полагается на CAS-инструкции из набора 204 инструкций процессора, чтобы выполнять, по меньшей мере, часть цикла сбора мусора. Это предоставляет возможность сборщику 206 мусора работать одновременно с одним или более модифицирующими потоками 210, собирая память для высвобождения, без исполнения служебных данных CAS-инструкций, но также не рискуя целостностью адресных значений 224 в указателях 216. Это совершается, по меньшей мере, частично посредством неCAS-атомарных записей, чтобы устанавливать биты 220 метки ссылки в GC-фрагментах 218 указателя, которые не перекрываются с GC-адресными фрагментами 222. Модифицирующие потоки 210 будут во многих случаях пользовательскими потоками, т.е., потоками, работающими в пользовательском адресном пространстве 232, но те же технические приемы, преподаваемые в данном документе, могут быть применены к сбору мусора, выполняемому по потокам, которые работают в адресном пространстве 230 ядра.
[00190] Фиг. 3-6 иллюстрируют аспекты сбора мусора. Некоторые из этих аспектов являются хорошо знакомыми, или появляются в хорошо знакомых действиях по сбору мусора, но их уместность к концепциям данного документа становится ясной только после того, как специалист понимает инновационный неCAS-сбор мусора.
[00191] Как иллюстрировано на фиг. 3, код для сбора мусора работает по сегментам 300 памяти 112, которые делятся посредством исполнения программы на непрерывные области 302. Данная область 302 может явно использоваться одним или более модифицирующими потоками, как указано символом галочки на фиг. 3, и, следовательно, запрещена для высвобождения. Данная область 302 может также явно не использоваться, и, следовательно, являться высвобождаемой, как указано метками X на фиг. 3. Высвобождаемость области 302 может также быть неопределенной.
[00192] Сбор мусора, в общем, подразумевает трассировку адресов или иное определение состояния использования или неиспользования области памяти и пометку области памяти (или структуры данных, которая представляет области) соответствующим образом. Некоторые сборщики мусора покидают помеченные области в месте, где они обнаруживаются, и тогда программы распределяют память без высвобождаемых областей. Этот подход применяется в так называемых алгоритмах сбора мусора с пометкой с очисткой. Другие сборщики мусора перераспределяют использованные области и или перераспределяют высвобождаемые области, или те и другие, для того, чтобы сжимать другие многочисленные области, которые имеют тот же статус высвобождаемости. Этот подход, известный как пометка со сжатием, часто создает больше высвобождаемых областей 304 по сравнению с подходом с пометкой с очисткой, но имеет большую сложность вследствие требования правильного обновления адресов, чтобы соответствовать результатам сжатия.
[00193] Фиг. 4 иллюстрирует фазы или подфазы 402 сбора мусора и их соотношение с одновременностью, когда существует некоторая одновременность. Простым подходом к сбору мусора является просто приостановка всего кроме сборщика мусора, в то время как сборщик мусора помечает области памяти как используемые или высвобождаемые. Однако, такой полномасштабный подход "останови мир" является неприемлемым в большинстве систем, поскольку он ухудшает производительность пользовательской программы слишком существенно. Соответственно, сборщик мусора может быть спроектирован с целью ограничения какой-либо подфазы 402 "останови мир", предоставляя возможность одновременного исполнения потока 208 для сбора мусора и любого модифицирующего потока(ов) 210. Фаза пометки может быть подразделена на одновременный фрагмент и неодновременный фрагмент. Использование CAS-инструкций имеет тенденцию увеличивать время, затрачиваемое при неодновременной пометке, тогда как использование неCAS-атомарных записей, как преподается в данном документе, имеет тенденцию увеличивать одновременность во время пометки и, следовательно, имеет тенденцию улучшать производительность пользовательского кода, который подвергается сбору мусора.
[00194] Хотя одновременность подразумевает, по меньшей мере, два потока, перекрывающихся в исполнении, по меньшей мере, частично по времени, одновременность не требует, чтобы оба потока всегда стартовали вместе или приостанавливались вместе или прекращались вместе. В общем, когда потоки работают одновременно, существует, по меньшей мере, два ядра процессора. Но даже только с одним процессором проблемы одновременности могут возникать, если помечающий поток 208 выполняет запись в весь указатель, например, выполняет запись в целый 64-битный указатель, например, как [адрес | NRB]. Пока помечающий поток 208 выполняет запись полного ссылочного значения обратно в ссылку 216, помечающий поток может состязаться с модифицирующим потоком, который также модифицирует ссылку. Например, рассмотрим:
uint8_t* ref = *address_of_ref;
*address_of_ref = (ref | NRB);
Эти две строки не являются совокупно атомарными, таким образом, запись может происходить между ними, даже на однопроцессорной машине.
[00195] Фиг. 5 и 6 иллюстрируют изменение адреса во время фазы пометки. На этих двух чертежах области 302 памяти включают в себя три объекта 500, называемые "obj", "a" и "b". Объект obj включает в себя указатель, называемый f0. На фиг. 5 адресный фрагмент для f0 указывает на объект a. Затем адрес изменяется, например, посредством модифицирующего потока, так что адрес f0 указывает на объект b, как показано на фиг. 6.
[00196] К слову, специалист признает, что формулировка, используемая здесь, отражает разделение указателей на GC-фрагмент и адресный фрагмент. Если не существует функционального GC-фрагмента, как происходит в хорошо знакомых системах, тогда указатель и его адрес будут объединены. Кто-то скажет, что "f0 указывает на объект a" вместо того, что "адресный фрагмент f0 указывает на объект a".
[00197] В качестве другого отступления, специалист признает, что хотя фиг. 5 и 6 имеют стрелки, указывающие на один край данного объекта, который подсказывает, что адрес, используемый для идентификации объекта, является адресом первого байта объекта, на практике некоторые реализации объектно-ориентированного программирования используют адреса, которые идентифицируют ненулевое смещение в область 302, распределенную для объекта. Например, адрес может указывать на байт, который следует за предварительно определенной секцией заголовка, содержащей информацию о типе или другие метаданные. Концепции данного документа могут быть применены соответствующим образом специалистом.
[00198] Фиг. 7 иллюстрирует разделение указателя 216 на GC-фрагмент 218 и адресный фрагмент 222, когда указатель имеет 64 бита, и когда 48 битов выделяются для хранения адресного значения, хранимого в указателе. Специалист признает, что хотя фиг. 7 предлагает компоновку, в которой биты уменьшаются непрерывно по старшинству от старшего бита 63 на левом конце до младшего бита 0 на правом конце, концепции данного документа применяются независимо от того, следует ли система формату с порядком следования байтов, начиная со старшего, или формату с порядком следования байтов, начиная с младшего, относительно байтов, или битов в байте, или одного из двух, или того и другого. Специалист также признает, что, когда адресный фрагмент 222 имеет множество адресуемых блоков 214, например, старшие два байта в 64-битном указателе, тогда код 236 фазы пометки может быть любым одним или более из этих блоков 214, например, код 236 может записывать в один из двух старших байтов 64-битного указателя, когда какой-либо из старших 16 битов может быть использован для хранения бита 220 метки ссылки. Более обобщенно, адресный фрагмент 222 может включать в себя один или более адресуемых блоков 214 (например, один или более байтов), а GC-фрагмент 220 может также включать в себя один или более адресуемых блоков 214 (например, один или более байтов), в конкретном варианте осуществления.
[00199] Фиг. 8 иллюстрирует некоторые аспекты 800 процессоров 110, которые имеют отдельную уместность к сбору мусора без CAS. Процессоры могут включать в себя CAS-инструкции 802 и неCAS-инструкции 806. Во многих процессорных архитектурах x86 и Itanium® (марка компании Intel Corporation), например, CAS-инструкции включают в себя инструкцию CMPXCHG. LOCK XCHG является другим примером CAS-инструкции. Инструкции сравнения и замены (и двойного сравнения и замены) были частью последующих архитектур для архитектуры IBM 370 с 1970 года. Они являются просто некоторыми примерами. Однако, не каждая процессорная архитектура поддерживает CAS-инструкции процессора. Архитектуры SPARC 32 и PA-RISC не поддерживают CAS в форме инструкций аппаратных средств.
[00200] НеCAS-инструкции включают в себя, в частности, атомарные инструкции 814 записи. Они являются инструкциями, которые атомарно (по меньшей мере, когда подходящее выравнивание по границе байта используется) выполняют запись в один или более байтов (число записанных байтов зависит от конкретной инструкции и операндов). С подходящим выравниванием некоторые примеры неCAS-атомарных инструкций 814 записи в данной системе могут включать в себя инструкции IA-64 ST (хранение) и инструкции x86 MOV. Они являются просто некоторыми примерами, не имеющими в виду исключение других атомарных инструкций 814 записи.
[00201] Специалист распознает, по меньшей мере, два вида атомарной инструкции. Первым видом являются CAS-инструкции 802, которые некоторые варианты осуществления исключают из использования для пометки. Вторым видом является некоторая другая инструкция 814 записи, которая "исключает какую-либо CAS-инструкцию". Второй вид может называться "обычной записью", означающей запись, которая используется обычно независимо от способностей синхронизации. Второй вид атомарной записи 814 может также быть описан как "какая-либо неCAS-инструкция, которая записывает один или более байтов без разрешения рваных записей".
[00202] Некоторые другие интересующие инструкции включают в себя инструкции 80 логического ИЛИ, инструкции 810 установки бита, например, инструкции x86 BTS (тестирование и установка бита) и инструкции 812, которые устанавливают старший бит адресуемого блока 214.
[00203] Фиг. 9 показывает некоторые конкретные фазы в цикле 902 сбора мусора, включающие в себя фазу 904 пометки, фазу 906 очистки и фазу 908 сжатия. Во время пометки 904 достижимые объекты 500 или другие невысвобождаемые области памяти помечаются, либо на месте, либо в структуре данных, которая представляет их. Во время очистки 906 высвобождаемые объекты очищаются из кучи, например, помещаются в пул для перераспределения. Во время сжатия 908 высвобождаемые области размещаются вместе; это может также рассматриваться как размещение используемых областей вместе. Данный сборщик мусора необязательно выполняет каждую фазу, например, иногда сжатие 908 пропускается.
[00204] Фиг. 10 показывает некоторые примеры состояния 1002 памяти, которые являются уместными для сбора мусора. Область памяти может быть достижимой 1004 и, следовательно, используемой 1012, и может быть помечена 1008 как таковая. Другая область памяти может быть недостижимой 1006 и, таким образом, неиспользуемой 1014. Плавающий мусор 1016 является областью памяти, которая не используется 1014, но все еще специально не идентифицируется как высвобождаемая.
[00205] Некоторые варианты осуществления используют или предоставляют систему 200, которая устраняет зависимость от CAS-инструкций 802 процессора для пометки сбора мусора. Устраненные CAS-инструкции включают в себя одну или более инструкций сравнения и замены или инструкций сравнения и установки. Система включает в себя память 112, имеющую адресуемые блоки 214, при этом каждый адресуемый блок является индивидуально адресуемым с помощью соответствующего адресного значения 224. Один или более указателей 216 находятся в памяти 112, при этом каждый указатель находится, по меньшей мере, в двух адресуемых блоках 214, например, указатели 216, в целом, занимают, по меньшей мере, два байта и могут занимать больше. Каждый указатель 216 имеет адресный фрагмент 222, который хранит адресное значение, и фрагмент 218 для сбора мусора, который является отличным от адресного фрагмента.
[00206] В этих вариантах осуществления процессор 110 находится в функциональной связи с памятью 112. Процессор 110 имеет набор 204 инструкций, который включает в себя, по меньшей мере, одну инструкцию 814 записи. При исполнении эта инструкция 814 записи атомарно записывает значение, по меньшей мере, в один адресуемый блок, например, в фрагмент 218 для сбора мусора указателя 216. Эта инструкция 814 записи исключает какую-либо CAS-инструкцию, т.е. она не является CAS-инструкцией 802, т.е., она является неCAS-инструкцией 806.
[00207] В этих вариантах осуществления исполняется модифицирующий поток 210. При исполнении модифицирующий поток 210 изменяет, по меньшей мере, одно или более адресных значений одного или более соответствующих указателей. В дополнение к изменению адреса модифицирующий поток 210 может также изменять фрагмент 218 для сбора мусора указателя 216, например, посредством записи 64 битов данных в указатель, который хранит 48-битное адресное значение.
[00208] В этих вариантах осуществления сборщик 206 мусора работает одновременно с модифицирующим потоком 210 во время фазы 904 пометки сбора мусора. Сборщик 206 мусора использует инструкцию 814 записи, чтобы атомарно устанавливать бит 220 пометки ссылки в фрагменте 218 для сбора мусора указателя 216, в качестве указания того, что адресный фрагмент 222 указателя идентифицировал область 302 памяти 112, которая не была доступна для высвобождения, когда высвобождаемость была в прошлый раз проверена. Система 200 выполняет фазу 904 пометки сбора мусора, в то же время сохраняя целостность адресных значений 224, которые записаны посредством модифицирующего потока 210, и поступает таким образом независимо от CAS-инструкций 802 для синхронизации, даже если модифицирующий поток 210 и сборщик 206 мусора работают одновременно друг с другом. В некоторых вариантах осуществления бит 220 метки ссылки необязательно используется в целях высвобождения, хотя он может. Он может быть битом, который указывает более поздней (после пометки) фазе GC, что эта ссылка (т.е. указатель) должен подвергаться дополнительной обработке, например, быть перераспределен.
[00209] В некоторых вариантах осуществления инструкция 814 записи, используемая для атомарной установки бита пометки ссылки, имеет средний счетчик 804 циклов процессора, который обозначается как среднее значение записи. Устраненные CAS-инструкции из набора 204 инструкций процессора включают в себя самую быструю устраненную CAS-инструкцию 802, которая имеет средний счетчик 804 циклов процессора, который обозначается здесь как CAS-среднее. В качестве меры эффективности исполнения, полученной посредством использования неCAS-инструкций вместо CAS-инструкций согласно концепциям данного документа, в некоторых системах CAS-среднее, по меньшей мере, вдвое больше среднего значения для записи. В некоторых случаях CAS-среднее, по меньшей мере, втрое больше среднего значения для записи. В некоторых случаях CAS-среднее, по меньшей мере, в пять раз больше среднего значения для записи. Соответственно, некоторые системы могут показывать улучшение эффективности исполнения в несколько процентных пунктов. В зависимости от реализации, исполнение может быть на 5%, 10%, 15% или даже больше, быстрее по сравнению с фазой пометки на основе CAS, или сбора мусора на основе CAS в общем.
[00210] В некоторых вариантах осуществления сборщик 206 мусора включает в себя код 236 фазы пометки, который находится в барьере 212 считывания модифицирующего потока. В некоторых случаях сборщик включает в себя код 236 фазы пометки, который находится в потоке 208 сборщика мусора. В некоторых вариантах осуществления часть сборщика 206 мусора находится в одном или более потоках 208 сборщика мусора, а другая часть сборщика 206 мусора находится в одном или более барьерах 212 считывания модифицирующего потока. Т.е., некоторые GC могут иметь барьер 212 считывания, выполняющий GC-работу, так что некоторая часть GC-работы будет распределена модифицирующим потокам 210.
[00211] В некоторых вариантах осуществления указатель 216 включает в себя, по меньшей мере, 64 бита 700. В некоторых случаях, фрагмент 218 для сбора мусора указателя включает в себя, по меньшей мере, 8 битов, а в некоторых случаях фрагмент 218 для сбора мусора указателя включает в себя, по меньшей мере, 16 битов. Более обобщенно, пока, по меньшей мере, один адресуемый блок 214 не требуется для адресов и может быть использован, чтобы удерживать бит 220 метки ссылки, концепции данного документа могут быть полезно применены. Например, если адресные значения 224 в 32-битной системе нуждаются только в 24 битах, тогда оставшийся байт может быть использован в качестве GC-фрагмента 218.
[00212] В некоторых вариантах осуществления система 200 включает в себя, по меньшей мере, два модифицирующих потока 210, каждый из которых работает одновременно со сборщиком мусора во время фазы пометки для сбора мусора. В некоторых из них два или более модифицирующих потока 210 при исполнении изменяют одно или более адресных значений 224 одного или более соответствующих указателей 216. Специалист признает, что одновременность является возможной даже только с одним модифицирующим потоком, когда поток сборщика мусора также присутствует. Также, проблемы одновременности могут возникать, когда только один процессор присутствует, когда два потока, совместно использующих этот процессор, также совместно осуществляют доступ к указателю 216.
[00213] В некоторых вариантах осуществления модифицирующий поток 210 работает в адресном пространстве 230 ядра. В некоторых случаях, модифицирующий поток 210 работает в пользовательском адресном пространстве 232. В некоторых вариантах осуществления система 200 включает в себя модуль 234 регистрации измененного указателя, который при исполнении записывает соответствующие идентификаторы одного или более указателей 216, когда соответствующий адрес был изменен модифицирующим потоком во время фазы пометки сбора мусора. Модуль регистрации измененного указателя может помогать в идентификации недостижимых непомеченных областей памяти, например, поддерживая обработку, чтобы определять местоположение плавающего мусора. Модуль 234 регистрации измененного указателя может быть реализован в данной системе с помощью барьера записи, чтобы уменьшать влияние очистки памяти для изменения кучи. Модуль 234 регистрации измененного указателя может быть реализован с помощью одного или более из: записи в журнале, битовых карт, диспетчеров виртуальной памяти и кода Win32 API GetWriteWatch(). Специалист будет знать, что одной из целей регистрации является то, что когда изменения кучи обрабатываются позднее, предоставляется возможность устанавливать бит 220 пометки ссылки, если вызывается по обстоятельствам.
[00214] В некоторых вариантах осуществления адресный фрагмент 222 указателя 216 идентифицирует область 302 памяти 112, которая хранила или хранит объект 500, который был определен программой 124, реализованной на языке 1228 объектно-ориентированного программирования.
[00215] Другие варианты осуществления системы также описываются в данном документе, либо непосредственно, либо могут быть получены в качестве версий системы для описанных способов или сконфигурированных сред, сообщаются посредством подробного обсуждения в данном документе для вычислительных аппаратных средств.
[00216] Способы
[00217] Технические способы, показанные на чертежах или иначе раскрытые, будут выполняться автоматически, например, посредством улучшенной системы 200, которая использует разделенные на части указатели 216 и код 236 фазы пометки без CAS, пока не указывается иное. Способы могут также выполняться частично автоматически и частично вручную до степени, до которой действие человека-администратора или другого человека подразумевается, например, путем запуска программы 124, которая, как известно, должна полагаться на сбор мусора в системе 200. Способ, рассматриваемый как инновационный в данном документе, не является полностью ручным. В данном варианте осуществления ноль или более иллюстрированных этапов способа могут повторяться, возможно с другими параметрами или данными для обработки. Этапы в варианте осуществления могут также быть выполнены в другом порядке, чем порядок сверху-вниз, который изложен на фиг. 11 и 12. Этапы могут выполняться последовательно, частично перекрывающимся способом или полностью параллельно. В частности, порядок, в котором блок-схема 1200 последовательности операций обходится, чтобы указывать этапы, выполняемые во время способа, может изменяться от одного выполнения способа к другому выполнению способа. Порядок обхода блок-схемы последовательности операций может также изменяться от одного варианта осуществления способа к другому варианту осуществления способа. Этапы могут также быть пропущены, объединены, переименованы, перегруппированы, выполняться на одной или более машинах, или иначе отступать от иллюстрированной последовательности, при условии, что выполняемый способ является рабочим и соответствует, по меньшей мере, одному пункту формулы изобретения.
[00218] Некоторые варианты осуществления предоставляют или используют процесс сбора мусора, который устраняет зависимость от CAS-инструкций 802 процессора во время фазы 904 пометки. Устраненные CAS-инструкции 802 включают в себя одну или более инструкций сравнения и замены или инструкций сравнения и установки. Процесс выполняется посредством кода 206, 208, исполняющегося в вычислительной системе 200, и процесс включает в себя сборщик 206 мусора, принимающий 1102 местоположения 1104 одного или более указателей 216, которые находятся в цифровой памяти 112 вычислительной системы 200. Каждый интересующий указатель 216 имеет адресный фрагмент 222, который хранит адресное значение 224, и фрагмент 218 для сбора мусора, который является отличным от адресного фрагмента. Модифицирующий поток 210 исполняется 1110 одновременно со сборщиком мусора и имеет доступ, по меньшей мере, к адресному фрагменту, по меньшей мере, одного из указателей. Сборщик мусора использует 1108 неCAS-инструкцию 814 записи, чтобы автоматически устанавливать 1106 бит 220 пометки ссылки в фрагменте для сбора мусора указателя без перезаписи 1122 адресного фрагмента указателя. Установка бита пометки ссылки указывает, что адресный фрагмент указателя одновременно идентифицирует область памяти для последующей обработки сбора мусора, или что адресный фрагмент, по меньшей мере, идентифицировал такую область недавно (поскольку адрес мог быть изменен без ведома для помечающего кода 236). Процесс выполняет фазу 904 пометки сбора мусора, в то же время сохраняя 1210 целостность адресных значений 224, без зависимости 1118 от CAS-инструкций, даже если модифицирующий поток 210 и сборщик 206 мусора исполняются одновременно 1110 друг с другом. Аналогичные улучшения эффективности исполнения и другие оптимизации могут быть получены для всего сборщика 206 мусора в некоторых вариантах осуществления, например, во время фазы 908 сжатия, посредством аналогичной замены манипуляции адресами с помощью CAS-инструкции 802 на неCAS-инструкции 814, которые используют один или более битов 700, которые не нужны, чтобы хранить адресные значения 224, над которыми совершаются манипуляции.
[00219] В некоторых вариантах осуществления, сборщик мусора, использующий 1108 неCAS-инструкцию записи, чтобы атомарно устанавливать 1106 бит пометки ссылки в фрагменте для сбора мусора указателя, включает в себя: атомарное считывание 1206 байтового значения из фрагмента для сбора мусора указателя в переменную, упомянутая переменная обозначается здесь как GCportion; установку 1106 бита пометки ссылки в GCportion; и затем использование 1108 неCAS-инструкции записи, чтобы атомарно записывать 1204 значение из GCportion обратно в фрагмент для сбора мусора указателя 216. В некоторых случаях, как иллюстрировано на фиг. 5 и 6 или в других конфигурациях, модифицирующий поток изменяет 1202, по меньшей мере, адресный фрагмент указателя после упомянутого атомарного считывания 1206 байтового значения и перед упомянутым использованием неCAS-инструкции записи для атомарной записи 1204 значения, и процесс дополнительно включает в себя регистрацию 1220 идентификатора указателя, чтобы поддерживать последующее определение 1114 того, действительно ли измененный указатель фактически требует последующей обработки. Зарегистрированный идентификатор 228 может включать в себя адрес памяти, смещение, идентичность страницы, идентификатор блока или другой сегмент 300 памяти или идентификатор области 302, например. Специалист подтвердит, что модификатор не записывает только адресный фрагмент, а вместо этого записывает весь указатель. Таким образом, формулировка, что модификатор записывает "по меньшей мере" адресный фрагмент, может создавать путаницу, подразумевая GC-фрагмент, который не перезаписан модификатором. Однако, может быть правильно сформулировано, что модификатор изменяет "по меньшей мере" адресный фрагмент, поскольку "изменяет" означает "изменяет значение", и запись модификатора в GC-фрагмент может (случайно и недостоверно) оставлять значение бита метки ссылки (или всего GC-фрагмента) неизменным.
[00220] Действия, которые являются безопасными в сборщике мусора, необязательно являются безопасными в целом. Специалист подтвердит, что может быть существенный риск для целостности данных и доступности посредством наивного подвергания указателей 216, которые используются в данном документе, воздействию какого-либо кода, чей проект и реализация не сообщаются посредством концепций, предоставленных в данном документе. Указатели 216, как преподается в данном документе, делятся физически на GC-фрагмент и адресный фрагмент. GC-код 236 специально приспосабливается, чтобы распознавать такое разделение и устранять вредные перезаписи той или другой части указателя, как обсуждается в данном документе. То же специальное приспосабливание вероятно не должно присутствовать в коде в целом. Таким образом, может быть целесообразно или даже необходимо преобразовывать указатели 216 в формат, который будет принят без ошибки кодом в целом в данной системе. Это преобразование может быть совершено посредством выполнения этапов, таких как один или более этапов 1238-1246, прежде чем управление выполнением переходит от GC-кода 236 к коду в целом (т.е., коду 120, 122, 124 или 210).
[00221] В частности, один или более этапов 1238-1246 могут быть целесообразными или необходимыми в некоторых вариантах осуществления, чтобы безопасно окружать рамки исполнения указателей 216 и кода 236. Такое окружение может быть обеспечено сборщиком 206 мусора, чтобы устранять ошибки среды исполнения, которые будут возникать из некоторой другой части кода, ошибочно устанавливающей бит пометки ссылки для части адресного значения и, таким образом, пытающейся исполнить инструкцию с адресным значением, которое больше наибольшего доступного адресного значения в рассматриваемой системе.
[00222] Соответственно, в некоторых вариантах осуществления процесс дополнительно включает в себя, по меньшей мере, одно из следующих действий, выполняемых перед передачей управления коду в целом (например, коду 120, 122, 124 или 210), который исполняется в вычислительной системе 200: обработка 1240 фрагмента для сбора мусора указателя, как если бы он содержал все нули; обнуление 1238 фрагмента для сбора мусора указателя; обработка 1244 фрагмента для сбора мусора указателя, как если бы он был снабжен знаком согласно старшему биту адресного фрагмента указателя; снабжение знаком 1242 старшего бита адресного фрагмента указателя посредством фрагмента для сбора мусора указателя; или игнорирование 1246 фрагмента для сбора мусора указателя при использовании адресного фрагмента указателя. Специалист подтвердит, что снабжение знаком является одним способом разместить указатель в канонической форме.
[00223] Некоторые варианты осуществления включают в себя код 234, исполняющий в вычислительной системе регистрацию 1220 соответствующих идентификаторов 228 одного или более указателей, каждый из таких соответствующих адресов был изменен 1202 модифицирующим потоком во время фазы 904 пометки сбора мусора. Такая регистрация помогает автоматической идентификации 1114 недостижимых непомеченных областей памяти.
[00224] В некоторых вариантах осуществления модифицирующий поток исполняется 1110 в пользовательском адресном пространстве 232. В некоторых модифицирующий поток выполняется 1110 в адресном пространстве 230 ядра. В некоторых, по меньшей мере, один модифицирующий поток выполняется 1110 в каждом виде адресного пространства 230 и 232.
[00225] Некоторые варианты осуществления могут включать в себя процессор 110, который является более эффективным при записи одного конкретного бита по сравнению с тем, каким он является при записи другого конкретного бита. Например, инструкция 814 записи, которая устанавливает старший бит, может быть более эффективной по сравнению с той же инструкцией, или другой инструкцией, которая устанавливает старший бит. По этой или другим причинам, в некоторых вариантах осуществления сборщик мусора использует 1108 неCAS-инструкцию записи, чтобы атомарно устанавливать 1106 старший бит указателя 216 в качестве бита 220 метки ссылки.
[00226] Сконфигурированные носители хранения
[00227] Некоторые варианты осуществления включают в себя сконфигурированный компьютерно-читаемый носитель 112 хранения информации. Носитель 112 хранения может включать в себя диски (магнитные, оптические или иные), RAM, EEPROM или другие ROM, и/или другую конфигурируемую память, включающую в себя, в частности, компьютерно-читаемые носители (которые не являются просто распространяемыми сигналами). Носитель хранения, который конфигурируется, может быть, в частности, съемным носителем 114 хранения, таким как CD, DVD или флэш-память. Память общего назначения, которая может быть съемной или нет, и может быть энергозависимой или нет, может быть сконфигурирована в вариант осуществления, использующий элементы, такие как разделенные на части указатели 216, код 236 фазы пометки без CAS, и биты 220 метки ссылки, в форме данных 118 и инструкций 116, считанных со съемного носителя 114 хранения и/или другого источника, такого как сетевое соединение, чтобы формировать сконфигурированный носитель хранения. Сконфигурированный носитель 112 хранения является приспособленным для инструктирования компьютерной системе выполнять этапы технического процесса для операций сбора мусора без CAS, как раскрыто в данном документе. Чертежи, таким образом, помогают иллюстрировать варианты осуществления сконфигурированных носителей хранения и варианты осуществления процесса, также как варианты осуществления системы и процесса. В частности, любой из этапов процесса, иллюстрированных на фиг. 11 или 12, или иначе преподаваемых в данном документе, может быть использован для помощи в конфигурировании носителя хранения, чтобы формировать вариант осуществления сконфигурированного носителя хранения.
[00228] Некоторые варианты осуществления предоставляют или используют носитель 114 хранения, сконфигурированный с кодом, который при исполнении одним или более процессорами 110 выполняет процесс сбора мусора, который устраняет зависимость от CAS-инструкций 802 процессора во время фазы 904 пометки в вычислительной системе. Устраненные CAS-инструкции включают в себя одну или более инструкций сравнения и замены или инструкций сравнения и установки. Процесс включает в себя сборщик мусора, принимающий 1102 местоположений одного или более указателей, которые находятся в цифровой памяти вычислительной системы, каждый указатель имеет адресный фрагмент, который хранит адресное значение, и фрагмент для сбора мусора, который отличается от адресного фрагмента; модифицирующий поток, исполняющийся 1110 одновременно со сборщиком мусора и имеющий доступ, по меньшей мере, к адресному фрагменту, по меньшей мере, одного из указателей; сборщик мусора, использующий 1108 неCAS-инструкцию записи, чтобы помечать область памяти посредством атомарной установки 1106 бита метки ссылки в фрагменте для сбора мусора указателя, чей адрес идентифицирует область памяти, без упомянутой настройки, перезаписывающей 1122 адрес; и устранение обработки 1116 в качестве высвобождаемой памяти какой-либо области памяти, которая все еще используется, по меньшей мере, одним потоком пользовательского пространства. Процесс выполняет фазу пометки сбора мусора без зависимости от CAS-инструкций. Когда используется здесь, "доступ" означает доступ на чтение или доступ на запись или то и другое.
[00229] В некоторых вариантах осуществления использование 1108 неCAS-инструкции записи, чтобы атомарно устанавливать бит метки ссылки, включает в себя: атомарное считывание 1206 байтового значения из фрагмента для сбора мусора указателя в переменную, упомянутая переменная обозначается здесь как GCportion; установку 1106 бита метки ссылки в GCportion; и затем использование неCAS-инструкции записи, чтобы атомарно записывать 1204 значение из GCportion обратно в фрагмент для сбора мусора указателя.
[00230] В некоторых вариантах осуществления атомарная установка 1106 бита метки ссылки занимает количество циклов 804 процессора, которое обозначается здесь как счетчик записи, устраненные CAS-инструкции включают в себя наиболее быструю устраненную CAS-инструкцию, которая имеет опубликованный счетчик 804 циклов процессора, который обозначается здесь как CAS-счетчик, и CAS-счетчик, по меньшей мере, в три раза больше счетчика записи.
[00231] В некоторых вариантах осуществления процесс включает в себя создание 1234 области 1016 плавающего мусора памяти во время данного цикла 902 сбора мусора и затем очистку 1114 области плавающего мусора памяти для повторного использования во время последующего цикла сбора мусора.
[00232] В некоторых вариантах осуществления установка 1106 бита метки ссылки включает в себя, по меньшей мере, одно из следующего: исполнение 1110 инструкции 808 процессора, которая выполняет операцию логического ИЛИ, или исполнение 1110 инструкции 812 процессора, которая выполняет операцию, которая устанавливает старший бит адресуемого блока памяти.
[00233] Дополнительные соображения о специальном бите 220
[00234] Специалист подтвердит, что бит 220 метки ссылки может называться по-разному в различных вариантах осуществления, а также, что предназначение и функциональность специального бита могут различаться между вариантами осуществления. Например, одним альтернативным названием для бита 220 метки ссылки в некоторых сборщиках мусора со сжатием является "бит перераспределения потребностей" или "NRB". Это использование не для жизнеспособности как таковой, а скорее для проверки перераспределения, которое является последующей стадией 1114 для GC.
[00235] Другой вариант осуществления может ссылаться на "бит жизнеспособности". "Бит жизнеспособности", являющийся установленным, может означать, что весь объект является действующим (все еще используется 1012). Предположим, что сборщик мусора работает одновременно с модифицирующим потоком во время фазы пометки сбора мусора и использует инструкцию записи, чтобы атомарно устанавливать бит жизнеспособности в фрагменте для сбора мусора указателя. В некоторых вариантах осуществления это будет означать более чем просто жизнеспособность как таковую, поскольку объект должен быть действующим, чтобы любая из ссылок, которые он содержит, имела этот бит вообще. В случае одновременного GC со сжатием это будет означать, что эта ссылка должна быть перераспределена. Т.е., бит будет указывать дополнительную обработку 1114, которая должна быть выполнена во время последующей части GC.
[00236] В некоторых вариантах осуществления бит 220 RMB/NRB/жизнеспособности предоставляет информацию, которая относится к плавающему мусору 1016 и ложноположительным результатам использования. Плавающий мусор является областью X памяти, которая является и недостижимой (т.е. X больше не используется и, следовательно, подтверждает правильность очистки), и непомеченным (т.е., не существует указатель, чей бит жизнеспособности установлен, и чей адрес является адресом области X). Со ссылкой на фиг. 5 и 6, предположим, что указатель f0 содержит адрес объекта a, когда сборщик мусора считывает фрагмент для сбора мусора для f0, и затем модифицирующий поток изменяет f0, таким образом, адрес в f0 является адресом объекта b, и затем сборщик мусора записывает фрагмент сбора мусора для f0 с установленным битом 220. В этом случае, объект a стал плавающим мусором; он будет высвобожден в некоторый момент позже сборщиком мусора, поскольку ничто не указывает на него (предположим, что f0 перед изменением был единственным указателем, указывающим на объект a). Наличие бита 220, установленного в f0, после того как f0 указывает на объект b, является прекрасным, поскольку объект b действительно является достижимым (через f0). Затем ложноположительный результат использования возникает, когда f0 фактически не нуждается в установленном этом бите 220, когда он содержит b.
[00237] В одном сценарии:
// модификатор устанавливает f0 в a
obj.f0=a;
// GC-поток помечает и рассматривает obj.f0
uint8_t* ref=obj.f0;
// GC выясняет, что бит метки ref должен быть установлен для этой ссылки.
// но прежде чем GC может установить его, модификатор изменяет obj.f0.
// модификатор устанавливает f0 в b, который не нуждается в том, чтобы этот бит был установлен
obj.f0=b;
// эта функция устанавливает бит в GC-фрагменте для f0, но нет необходимости в установке
[00238] set_gc_mark_ref_bit (&(obj.f0));
[00239] Плавающий мусор в этом случае будет появляться посредством поддержания a действующим, поскольку obj.f0 указывал (прошедшее время) на него. Предположим, что ничто более уже не указывает на a, таким образом, a может быть очищен, но это не происходит, поскольку obj.f0 указывал на него, и GC уже счел a действующим. Это использование бита 220 отличается от использования бита 220 метки ссылки, описываемого где-то в данном документе, которое существует для ссылок, в том, что плавающий мусор ссылается на объекты. Плавающий мусор может появляться в ранее известных одновременных GC, даже в GC без сжатия. Одним уместным аспектом здесь является то, что некоторые варианты осуществления регистрируют 1220 модификации 1222 в куче, таким образом, GC может впоследствии взглянуть на obj.f0 снова в результате модификации obj.f0. В этот момент GC может распознавать, что obj.f0 не нуждается в бите, и GC может очищать его. В некоторых вариантах осуществления может случаться то, что GC буквально всегда устанавливает этот бит 220 во время фазы пометки, но не очищает его, например, для производительности или по другой причине. Эта ситуация является просто ложноположительным результатом, который не вызывает каких-либо функциональных проблем типа проблем целостности или доступности данных, вызываемых ложноотрицательными результатами.
[00240] Как отмечено где-либо еще в данном документе, в некоторых вариантах осуществления атомарная установка бита 220 включает в себя атомарное считывание байтового значения из GC-фрагмента указателя в однобайтовую переменную GCportion (названную таким образом здесь просто для удобства), установку бита 220 в GCportion с помощью операции логического ИЛИ и затем атомарную запись значения из GCportion обратно в байт GC-фрагмента. Атомарное считывание выполняется как обычное (неCAS) считывание. В некоторых реализациях считывание блока, который поддерживается процессором, такое как считывание 64-битного адреса, выровненного по 64-битной границе, является автоматически атомарным.
[00241] Одной формой записи для представления этой последовательности является:
byte b=VA[idx];
VA[idx] = b | 0×100….0;
где VA обозначает "виртуальный адрес", а idx является индексом в указателе в местоположении байта GC-фрагмента.
Другой формой записи может быть:
VA[idx] = 0×100…0 ;
предполагающая, что VA[idx] был обнулен.
[00242] Другие формы записи также могут быть использованы. Можно использовать такую форму записи как "f0 | 0×100..0" или "f0 | бит метки ссылки" или "set_gc_mark_ref_bit (&(obj.f0));", чтобы указывать, что бит 220 установлен. Можно также использовать более короткую форму записи, где "f0" отдельно означает f0 без установленного бита 220, а f0 с апострофом "f0'" означает f0 с установленным битом 220. В этой форме записи одним набором состояний или интересующих событий является:
obj.f0 == a // Значение для obj.f0 равно a
<determine to mark> // Код фазы пометки определяет, что obj.f0 должен быть помечен
obj.f0=b // Модификатор перезаписывает b вместо a (символ “==” для равенства против “=” для назначения
obj.f0=b’ // Код фазы пометки устанавливает бит метки ссылки в obj.f0
[00243] Однако, при использовании такой формы записи должно быть ясно, какие байт(ы) записываются. Например, когда фаза пометки только устанавливает бит 220 посредством записи единственного байта obj.f0, форма записи obj.f0=b' может быть неправильно интерпретирована как означающая запись 64-битного значения b' в obj.f0, что является неправильным. Чтобы предотвращать неправильное понимание, обсуждение или реализация должны быть конкретными и четкими о том, какой конкретный байт записывается, например, посредством точного определения, что только старший байт указателя записывается при установке бита 220.
[00244] Некоторые дополнительные примеры и соображения
[00245] Предположим, что интересующая ссылка (она же указатель 216) является obj.f0. Тогда одна вероятность для этого obj.f0 является нулевой. В этом случае, код 236 фазы пометки либо не предоставляет obj.f0 для пометки, либо в ином случае код 236 фазы пометки принимает obj.f0, но не помечает obj.f0 и перемещается к следующему указателю, принятому для пометки.
[00246] Другой вероятностью является то, что одновременность не имеет влияния, в том, что модифицирующий поток не перезаписывает obj.f0. Т.е., код фазы пометки считывает obj.f0 в регистр (или другое местоположение), устанавливает бит метки ссылки и использует обычную запись, чтобы атомарно помещать значение [obj.f0 | бит метки ссылки] обратно в obj.f0 без какой-либо промежуточной записи в obj.f0 модификатором. Это приводит в результате к отсутствию плавающего мусора и отсутствию ложноположительного значения. Однако, на практике код фазы пометки не будет знать заранее, будет ли модификатор изменять obj.f0, таким образом, код 236 должен быть спроектирован и реализован для обработки одновременного изменения, например, как иллюстрируется и обсуждается в связи с фиг. 5 и 6. Пока указывается, что модификатор не может работать во время пометки, помечающий код должен ожидать, что может быть запись из модификатора. В частности, какой помечающий код 236 не должен выполнять деструктивную запись во все биты указателя 216. Помечающий код лишь изменяет GC-фрагмент указателя.
[00247] Соответственно, рассмотрим случаи, в которых одновременность имеет влияние. Предположим, что obj.f0 имеет значение a. Далее, код фазы пометки определяет, что obj.f0 должен быть помечен, на основе значения a. Но затем модификатор перезаписывает obj.f0, таким образом, теперь obj.f0 имеет значение b. Затем код фазы пометки помечает b. Т.е., код фазы пометки устанавливает бит метки ссылки в obj.f0 таким образом, что obj.f0 имеет значение [b | бит метки ссылки]. Эта ситуация, в свою очередь, имеет две вероятности: либо b должен быть помечен, либо b не должен быть помечен. Если b должен быть помечен, хорошо, b помечается, таким образом, помеченный b не является ложноположительным значением. Однако, память в a может быть плавающим мусором. Если b не должен быть помечен, хорошо, b помечается, таким образом, помеченный b является ложноположительным значением. Опять же, память в a может быть плавающим мусором (хотя это не код 236 пометки ссылки, который создает плавающий мусор). Одним моментом, который необходимо отметить, является то, что не существуют ложноотрицательные значения - ничто не становится помеченным для высвобождения, что все еще используется.
[00248] Некоторые идеи в данном документе поддерживают, подразумевают или иначе относятся к устранению CAS-инструкций во время фазы пометки для одновременных GC со сжатием. Во время одновременной фазы 904 пометки одновременного GC со сжатием GC помечает ссылочное значение, которое указывает на области 302, которые сжимаются. Это может быть представлено как:
obj.f=obj.f | special_bit
[00249] Поскольку GC-поток 208 работает одновременно с модификатором 210, GC удостоверяется, что записи модификатора не пропали. В некоторых хорошо знакомых GC это подразумевает GC-поток или барьер считывания, исполняющий CAS, которая является дорогостоящей.
[00250] Чтобы понимать некоторые способы уменьшения или устранения этой дорогостоящей операции, отметим, что в 64-битных ссылках не все 64 бита используются для виртуального адреса. Только младшие N битов используются, и N обычно <=48. Некоторые варианты осуществления используют бит 220 в одном из старших байтов в качестве специального бита, в которых GC или барьер считывания могут устанавливать этот бит только вместо попытки перезаписать все 64 бита для этого виртуального адреса. Записи могут быть внесены в журнал или иначе зарегистрированы 1220, чтобы предоставлять возможность обработке 1114 позже обнаруживать, нуждается ли этот специальный бит все еще в установке или нет. Таким образом, GC устраняет CAS во время пометки.
[00251] Некоторые дополнительные сочетания и разновидности
[00252] Любое из этих сочетаний кода, структур данных, логики, компонентов, обменов данными и/или их функциональных эквивалентов может также быть объединено с любой из систем и ее разновидностей, описанных выше. Процесс может включать в себя любые этапы, описанные в данном документе, в любом подмножестве или сочетании или последовательности, которая является функциональной. Каждый вариант может возникать отдельно, или в сочетании с каким-либо одним или более другими вариантами. Каждый вариант может возникать с каким-либо из процессов, и каждый процесс может быть объединен с каким-либо одним или более другими процессами. Каждый процесс или сочетание процессов, включающее в себя варианты, могут быть объединены с каким-либо из сочетаний и вариантов сконфигурированных носителей, описанных выше.
[00253] Заключение
[00254] Вкратце, согласно концепциям, предоставленным в данном документе, высвобождения памяти специально приспосабливается, чтобы устранять некоторые инструкции синхронизации, ускоряя одновременный сбор мусора, в то же время сохраняя целостность и доступность данных. Сбор мусора высвобождает объекты 500, которые больше не используются, или другие неиспользуемые области 302 памяти 112. Указатели 216 делятся на адресные фрагменты 222, хранящие адресные значения 224, и фрагменты 218 для сбора мусора, имеющие специальный бит 220. Код 236 пометки выполняет запись только в фрагменты 218 для сбора мусора, устанавливая специальный бит 220 в качестве метки ссылки, кандидата на перемещение и т.д. Модифицирующие потоки 210 могут одновременно изменять весь указатель 216, чтобы обновлять адрес 224, но изменение не вызывает неправильные высвобождения. Между тем, скорость исполнения повышается посредством устранения CAS (инструкций сравнения и изменения или сравнения и установки) инструкций 802 синхронизации в сборщике 206 мусора. Тем не менее, неCAS-атомарные записи 814 все еще используются вместо этого. Модификаторы 210 работают в пользовательском адресном пространстве 232 или адресном пространстве 230 ядра. Разделенные на части указатели 216 и их использование могут быть заключены в сборщик мусора, использующий код, который выполняет одно или более действий 1238-1246 преобразования, чтобы устранять ошибки среды исполнения обычного кода (120, 122, 124, 210), который ожидает, чтобы ссылки были в канонической неразделенной на части форме.
[00255] Хотя отдельные варианты осуществления явно иллюстрированы и описаны в данном документе в качестве процессов, в качестве сконфигурированных носителей хранения или в качестве систем, будет понятно, что обсуждение одного типа варианта осуществления также, как правило, распространяется на другие типы вариантов осуществления. Например, описания процессов в соединении с фиг. 11 и 12 также помогли описать сконфигурированные носители хранения и помогли описать технические результаты и действие систем и производств, аналогичных обсужденным в соединении с другими чертежами. Из этого не следует, что ограничения из одного варианта осуществления обязательно передаются другому. В частности, процессы необязательно ограничиваются структурами данных и компоновками, представленными во время обсуждения систем или производств, такими как сконфигурированные запоминающие устройства.
[00256] Специалисты поймут, что подробности реализации могут принадлежать к конкретному коду, такому как конкретные API, конкретные области и конкретные образцы программ, и, таким образом, необязательно появляются в каждом варианте осуществления. Специалисты также поймут, что программные идентификаторы и некоторая другая терминология, используемая в обсуждении деталей, являются характерными для реализации и, таким образом, необязательно принадлежат каждому варианту осуществления. Тем не менее, хотя они необязательно требуют представления здесь, такие детали могут помогать некоторым читателям, предоставляя контекст, и/или могут иллюстрировать несколько из многих возможных реализаций технологии, обсуждаемой в данном документе.
[00257] Ссылка в данном документе на вариант осуществления, имеющий некоторый отличительный признак X, и ссылка где-либо еще в данном документе на вариант осуществления, имеющий некоторый отличительный признак Y, не исключают из этого описания варианты осуществления, которые имеют и признак X, и признак Y, пока такое исключение явно не констатируется в данном документе. Все возможные негативные ограничения формулы изобретения находятся в рамках этого изобретения, в том смысле, что любой признак, который излагается как часть варианта осуществления, может также быть явно удален из включения в другой вариант осуществления, даже если это конкретное исключение не представлено в каком-либо примере в данном документе. Термин "вариант осуществления" просто используется в данном документе как более удобная форма "процесса, системы, изделия производства, сконфигурированного компьютерно-читаемого носителя хранения и/или другой пример концепций в данном документе, которые применяются способом, согласующимся с применимым законодательством". Соответственно, данный "вариант осуществления" может включать в себя любое сочетание признаков, описанных в данном документе, предоставленный вариант осуществления согласуется, по меньшей мере, с одним пунктом формулы изобретения.
[00258] Не каждый элемент, показанный на чертежах, должен присутствовать в каждом варианте осуществления Напротив, вариант осуществления может содержать элемент(ы), непоказанные явно на чертежах. Хотя некоторые возможности иллюстрируются здесь в тексте и на чертежах посредством конкретных примеров, варианты осуществления могут отступать от этих примеров. Например, конкретные технические результаты или технические признаки примера могут быть опущены, переименованы, сгруппированы по-другому, повторяться, реализованы в аппаратных средствах и/или программном обеспечении по-другому, или быть смесью результатов или признаков, появляющихся в двух или более примерах. Функциональность, показанная в одном местоположении, может также быть предоставлена в другом местоположении в некоторых вариантах осуществления; специалист признает, что модули функциональности могут быть определены различными способами в данной реализации без обязательного опущения желаемых технических результатов из совокупности взаимодействующих модулей, рассматриваемых как одно целое.
[00259] Ссылка сделана на чертежи по всему описанию посредством ссылочных номеров. Любые видимые несоответствия в формулировке, ассоциативно связанной с данным ссылочным числом, на чертежах или в тексте, должны пониматься как просто расширяющие рамки того, на что ссылается это число. Различные экземпляры данного ссылочного номера могут ссылаться на различные варианты осуществления, даже если используется одинаковый ссылочный номер. Аналогично, данный ссылочный номер может использоваться для ссылки на глагол, существительное и/или соответствующие примеры каждого, например, процессор 110 может обрабатывать 110 инструкции, исполняя их.
[00260] Когда используемые в данном документе упоминания в единственном числе подразумевают один или более указанных объектов или этапов. В частности, в формуле изобретения ссылка на объект, как правило, означает, что присутствует по меньшей мере один такой объект, а ссылка на этап означает, что выполняется по меньшей мере одна реализация этапа.
[00261] Заголовки существуют только ради удобства; информация по данной теме может быть найдена за пределами параграфа, чей заголовок указывает эту тему.
[00262] Все пункты формулы изобретения и реферат, в том виде как они поданы, являются частью описания изобретения.
[00263] В то время как примерные варианты осуществления были показаны на чертежах и описаны выше, обычным специалистам в области техники будет очевидно, что многочисленные модификации могут быть выполнены без отступления от принципов и концепций, изложенных в формуле изобретения, и что такие модификации не обязательно должны охватывать всю абстрактную концепцию. Хотя предмет изобретения описан на языке, характерном для структурных признаков и/или методологических действий, следует понимать, что объем изобретения, определяемый прилагаемой формулой изобретения, необязательно ограничен конкретными техническими признаками или действиями, описанными выше формулы изобретения. Необязательно для каждого средства или аспекта или технического результата, идентифицированного в конкретном определении или примере, присутствовать или быть использованным в каждом варианте осуществления. Скорее, характерные признаки и описанные действия и результаты раскрываются как примеры для рассмотрения при реализации формулы изобретения.
[00264] Все изменения, которые не дотягивают до охвата всей абстрактной идеи, но подпадают под смысловое содержание и диапазон эквивалентности формулы изобретения, должны считаться охватываемыми определяемым ею объемом в полной мере, разрешенной законодательством.

Claims (46)

1. Вычислительная система, выполненная с возможностью автоматической организации памяти посредством сбора мусора, при этом система содержит:
память, имеющую адресуемые блоки, причем каждый адресуемый блок является индивидуально адресуемым с помощью соответствующего адресного значения;
один или более указателей, находящихся в памяти, причем каждый указатель находится в по меньшей мере двух адресуемых блоках и каждый указатель имеет адресную часть, которая хранит адресное значение, и часть, относящуюся к сбору мусора, которая не включает в себя адресную часть;
при этом процессор находится в функциональном взаимодействии с памятью, процессор имеет набор инструкций, причем набор инструкций процессора включает в себя по меньшей мере одну инструкцию записи, которая при ее исполнении атомарно записывает значение в по меньшей мере в один адресуемый блок, при этом инструкция записи исключает любую CAS-инструкцию, причем исключаемые CAS-инструкции включают в себя одну или более инструкций сравнения и замены или инструкций сравнения и установки;
модифицирующий поток, который при его исполнении изменяет по меньшей мере одно или более адресных значений одного или более соответствующих указателей;
сборщик мусора, который работает одновременно с модифицирующим потоком во время фазы пометки сбора мусора и использует инструкцию записи, чтобы атомарно устанавливать бит метки ссылки в части указателя, относящейся к сбору мусора, в качестве указания того, что адресной частью указателя идентифицирована область памяти, которая не была доступной для высвобождения при прошлой проверке.
2. Система по п.1, в которой инструкция записи, используемая для атомарной установки бита метки ссылки, имеет средний счетчик циклов процессора, который обозначается здесь как среднее записи, при этом исключенные CAS-инструкции из набора инструкций процессора включают в себя самую быструю исключенную CAS-инструкцию, которая имеет средний счетчик циклов процессора, который обозначается здесь как CAS-среднее, и при этом CAS-среднее по меньшей мере вдвое больше среднего записи.
3. Система по п.1, в которой сборщик мусора содержит код фазы пометки, который находится в барьере считывания модифицирующего потока.
4. Система по п.1, в которой сборщик мусора содержит код фазы пометки, который находится в потоке сборщика мусора.
5. Система по п.1, при этом:
указатель включает в себя по меньшей мере 64 бита, и часть указателя, относящаяся к сбору мусора, включает в себя по меньшей мере 8 бит; и
система включает в себя по меньшей мере два модифицирующих потока, каждый из которых работает одновременно со сборщиком мусора во время фазы пометки сбора мусора и каждый из которых при исполнении изменяет одно или более адресных значений одного или более соответствующих указателей.
6. Система по п.1, в которой модифицирующий поток работает в адресном пространстве ядра.
7. Система по п.1, при этом система дополнительно содержит модуль регистрации измененного указателя, который при его исполнении регистрирует соответствующие идентификаторы одного или более указателей, соответствующий адрес каждого из которых был изменен модифицирующим потоком во время фазы пометки сбора мусора, в результате чего модуль регистрации измененного указателя содействует идентификации недостижимых непомеченных областей памяти.
8. Система по п.1, при этом адресной частью указателя идентифицирована область памяти, которая хранила или хранит объект, определенный программой, реализованной на объектно-ориентированном языке программирования.
9. Способ автоматической организации памяти посредством сбора мусора, при этом способ выполняется посредством кода, исполняющегося в вычислительной системе, причем способ содержит этапы, на которых:
сборщик мусора принимает местоположения одного или более указателей, которые находятся в цифровой памяти вычислительной системы, причем каждый указатель имеет адресную часть, которая хранит адресное значение, и часть, относящуюся к сбору мусора, которая не включает в себя адресную часть;
модифицирующий поток исполняется одновременно со сборщиком мусора и имеет доступ к, по меньшей мере, адресной части по меньшей мере одного из указателей;
сборщик мусора использует инструкцию записи, не являющуюся CAS-инструкцией (неCAS-инструкцию записи), чтобы атомарно устанавливать бит метки ссылки в части указателя, относящейся к сбору мусора, без перезаписи адресной части указателя, при этом установленный бит метки ссылки указывает, что адресной частью указателя идентифицируется или идентифицирована область памяти для последующей обработки сбора мусора.
10. Способ по п.9, в котором использование сборщиком мусора неCAS-инструкции записи, чтобы атомарно устанавливать бит метки ссылки в части указателя, относящейся к сбору мусора, содержит:
атомарное считывание байтового значения из части указателя, относящейся к сбору мусора, в переменную, каковая переменная обозначается здесь как GCportion;
установку бита метки ссылки в GCportion и затем использование неCAS-инструкции записи, чтобы атомарно записывать значение из GCportion обратно в часть указателя, относящуюся к сбору мусора.
11. Способ по п.10, в котором модифицирующий поток изменяет, по меньшей мере, адресную часть указателя после упомянутого атомарного считывания байтового значения и перед упомянутым использованием неCAS-инструкции записи для атомарной записи значения, при этом способ дополнительно содержит регистрацию идентификатора указателя, чтобы поддерживать последующее определение того, является ли измененный указатель ложноположительным значением высвобождаемой памяти.
12. Способ по п.9, дополнительно содержащий по меньшей мере одно из следующих действий, выполняемых посредством кода, исполняющегося в вычислительной системе:
обработка части указателя, относящейся к сбору мусора, как если бы она содержала все нули;
обнуление части указателя, относящейся к сбору мусора;
обработка части указателя, относящейся к сбору мусора, как если бы она была снабжена знаком согласно старшему биту адресной части указателя;
снабжение знаком старшего бита адресной части указателя посредством части указателя, относящейся к сбору мусора; и
игнорирование части указателя, относящейся к сбору мусора, при использовании адресной части указателя.
13. Способ по п.9, дополнительно содержащий, посредством кода, исполняющегося в вычислительной системе, регистрацию соответствующих идентификаторов одного или более указателей, соответствующий адрес каждого из которых был изменен модифицирующим потоком во время фазы пометки сбора мусора, в результате чего данная регистрация содействует автоматической идентификации недостижимых непомеченных областей памяти.
14. Способ по п.9, в котором модифицирующий поток исполняется в пользовательском адресном пространстве.
15. Способ по п.9, в котором сборщик мусора использует неCAS-инструкцию записи, чтобы атомарно устанавливать старший бит указателя в качестве бита метки ссылки.
16. Машиночитаемый носитель, выполненный с кодом, которым при его исполнении одним или более процессорами вычислительной системы выполняется процесс сбора мусора, содержащий:
прием сборщиком мусора местоположений одного или более указателей, которые находятся в цифровой памяти вычислительной системы, причем каждый указатель имеет адресную часть, которая хранит адресное значение, и часть, относящуюся к сбору мусора, которая не включает в себя адресную часть;
исполнение модифицирующего потока одновременно со сборщиком мусора, причем модифицирующий поток имеет доступ к, по меньшей мере, адресной части по меньшей мере одного из указателей;
использование сборщиком мусора инструкции записи, не являющейся CAS-инструкцией (неCAS-инструкции записи), чтобы помечать область памяти посредством атомарной установки бита метки ссылки в относящейся к сбору мусора части указателя, адрес которого идентифицирует данную область памяти, без перезаписи этой установкой упомянутого адреса;
предотвращение обработки в качестве высвобождаемой памяти любой области памяти, которая все еще используется по меньшей мере одним потоком пользовательского пространства.
17. Машиночитаемый носитель по п.16, при этом использование неCAS-инструкции записи, чтобы атомарно устанавливать бит метки ссылки, содержит:
атомарное считывание байтового значения из части указателя, относящейся к сбору мусора, в переменную, каковая переменная обозначается здесь как GCportion;
установку бита метки ссылки в GCportion; и затем
использование неCAS-инструкции записи, чтобы атомарно записывать значение из GCportion обратно в часть указателя, относящуюся к сбору мусора.
18. Машиночитаемый носитель по п.16, при этом при атомарной установке бита метки ссылки берется число циклов процессора, которое обозначается здесь как счетчик записи, причем устраненные CAS-инструкции включают в себя наиболее быструю устраненную CAS-инструкцию, которая имеет опубликованный счетчик циклов процессора, который обозначается здесь как CAS-счетчик, и CAS-счетчик по меньшей мере в три раза больше счетчика записи.
19. Машиночитаемый носитель по п.16, в котором процесс содержит создание области плавающего мусора памяти во время заданного цикла сбора мусора и затем очистку области плавающего мусора памяти для повторного использования во время последующего цикла сбора мусора.
20. Машиночитаемый носитель по п.16, при этом установка бита метки ссылки содержит по меньшей мере одно из следующего:
исполнение инструкции процессора, которая выполняет операцию логического ИЛИ;
исполнение инструкции процессора, которая выполняет операцию, которая устанавливает старший бит адресуемого блока памяти.
RU2021125981A 2019-02-05 2020-01-22 Уменьшение зависимости от синхронизации в пометке сбора мусора RU2805768C2 (ru)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US16/268,041 2019-02-05

Publications (2)

Publication Number Publication Date
RU2021125981A RU2021125981A (ru) 2023-03-06
RU2805768C2 true RU2805768C2 (ru) 2023-10-24

Family

ID=

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2598594C2 (ru) * 2013-12-23 2016-09-27 Интел Корпорейшн Нечувствительный к задержке буфер транзакции для связи с квитированием
US20170262364A1 (en) * 2016-03-11 2017-09-14 Oracle International Corporation Efficient reference classification and quick memory reuse in a system that supports concurrent garbage collection
US20170344473A1 (en) * 2016-05-27 2017-11-30 Hewlett Packard Enterprise Development Lp Managing objects stored in memory

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2598594C2 (ru) * 2013-12-23 2016-09-27 Интел Корпорейшн Нечувствительный к задержке буфер транзакции для связи с квитированием
US20170262364A1 (en) * 2016-03-11 2017-09-14 Oracle International Corporation Efficient reference classification and quick memory reuse in a system that supports concurrent garbage collection
US20170344473A1 (en) * 2016-05-27 2017-11-30 Hewlett Packard Enterprise Development Lp Managing objects stored in memory

Similar Documents

Publication Publication Date Title
JP7489988B2 (ja) ガベージコレクションのマーキングにおける同期依存の軽減
Ming et al. Straighttaint: Decoupled offline symbolic taint analysis
US20200264866A1 (en) Caching build graphs
RU2565514C2 (ru) Средство функциональной виртуализации для блокировки командной функции многофункциональной команды виртуального процесса
EP4088187B1 (en) Lock-free reading of unitary value sets
JP6995124B2 (ja) トランザクション実行中の保護ストレージ・イベント処理
JP7065860B2 (ja) 保護ストレージ・イベント処理のランタイム・インストルメンテーション
JP2022545012A (ja) メモリー・アパーチャのフラッシュ・オーダーを使用したデーター保存
JP7042277B2 (ja) 保護ストレージ機能の動作を調整する制御の読み込みおよび格納
KR20220113372A (ko) 통합된 참조물 및 2차 객체 표시
US20210294686A1 (en) Fast memory mapped io support by register switch
CN108509460B (zh) 分布式系统中的数据一致性检查
RU2805768C2 (ru) Уменьшение зависимости от синхронизации в пометке сбора мусора
Su et al. LPAH: Illustrating Efficient Live Patching with Alignment Holes in Kernel Data
Yang et al. A RISC-V On-chip Operating System Based on Rust
US20200097576A1 (en) Log marking dependent on log sub-portion
CN116010100A (zh) 区块链系统中的合约调用方法、装置、设备及存储介质