УПРАВЛЕНИЕ ДЕСКРИПТОРОМ ТИПА ДЛЯ ЗАМОРОЖЕННЫХ ОБЪЕКТОВ
TYPE DESCRIPTOR MANAGEMENT FOR FROZEN OBJECTS

Уровень техники
Самый базовый функциональный блок объектно-ориентированного программирования называется "объектом". Вообще говоря, объект имеет ноль или более методов и ноль или более полей-членов. Соответственно, чтобы правильно интерпретироваться вычислительной системой, объект должен принадлежать к определенному типу, понимаемому вычислительной системой. Простые типы включают в себя типы, которые предоставляются самим языком программирования как базовые функциональные блоки для программиста. Примеры простых типов могут включать в себя символ, строку, целое число, число с плавающей запятой, массив и так далее. Языки программирования типично позволяют программистам создавать составные типы, которые представляют собой комбинацию составляющих типов, каковые составляющие типы являются простыми типами или другими составными типами. Такие составные типы могут быть довольно сложными.
Часто выгодно знать тип определенного объекта. Соответственно, в памяти во время выполнения объект часто имеет связанный с ним дескриптор типа. В одном из примеров объект имеет указатель дескриптора типа, который указывает на более полный дескриптор типа. Дескриптор типа может использоваться в различных целях. Для одной из них дескриптор типа для объекта может быть определен, чтобы удостовериться в том, что конкретная операция может быть выполнена объектом, или чтобы определить, что объект принадлежит к тому же или эквивалентному типу, что и другой объект.
Один особый вид объектов называется "замороженным объектом". Экземпляр замороженного объекта - это тот объект, компоновка которого завершается во время компиляции и включается как часть компилируемого образа. Объекты, которые не подвергаются обширному или, возможно, какому-либо изменению во время выполнения, являются, возможно, лучшими кандидатами на замораживание объекта, но любой экземпляр объекта с предварительно инициализированными данными может быть заморожен. Например, программа-календарь может предоставлять ежедневную вдохновляющую цитату, выбранную из 1000 предопределенных цитат. Каждая из этих 1000 предопределенных цитат может быть представлена в виде замороженного объекта строкового типа. Команды внутри модуля могут ссылаться на замороженный объект. Во время выполнения замороженный объект загружается в память вместе со многими или всеми из других частей модуля. Однако нет необходимости заново размещать замороженный объект во время выполнения.
Сущность изобретения
Варианты осуществления, описанные в материалах настоящей заявки, связаны с эффективным использованием дескрипторов типа с замороженными объектами. В одном из вариантов осуществления замороженный объект может в действительности включать в себя несколько дескрипторов типа: первичный дескриптор типа, который является каноническим в соответствии с набором правил канонизации, и дополнительный дескриптор типа, который не идентичен первичному дескриптору типа. Дополнительный дескриптор типа может использоваться для доступа к каноническому дескриптору типа. При выполнении операции, если для выполнения этой операции может использоваться дополнительный дескриптор типа, тогда этот дополнительный дескриптор типа используется для выполнения данной операции. Если для выполнения операции должен использоваться канонический первичный дескриптор типа, то дополнительный дескриптор типа используется для получения доступа к каноническому первичному дескриптору типа. Затем первичный дескриптор типа используется для выполнения операции.
Это краткое изложение сущности изобретения не предназначено для определения ключевых признаков или существенных признаков заявленного изобретения и не предназначено для использования в качестве содействия при определении объема заявленного изобретения.
Краткое описание чертежей
Для того, чтобы описать способ, с помощью которого могут быть получены вышеприведенные и другие преимущества и признаки, более конкретное описание различных вариантов осуществления будет представлено со ссылкой на прилагаемые чертежи. Понимая, что эти чертежи изображают только примерные варианты осуществления и поэтому не должны рассматриваться в качестве ограничения объема изобретения, варианты осуществления будут описываться и объясняться с дополнительной спецификой и подробностью посредством использования сопроводительных чертежей, на которых:
Фиг.1 иллюстрирует вычислительную систему, в которой могут быть реализованы один или более признаков, описанных в материалах настоящей заявки;
Фиг.2 иллюстрирует архитектуру, в которой дескрипторы типа могут использоваться с замороженными объектами;
Фиг.3 иллюстрирует блок-схему последовательности операций способа для выполнения одной или более операций над типом, используя многочисленные дескрипторы типа, соответствующие замороженному объекту;
Фиг.4 иллюстрирует блок-схему последовательности операций примерного способа использования дополнительного дескриптора типа для доступа к каноническому дескриптору типа и
Фиг.5 иллюстрирует блок-схему последовательности операций способа для подготовки к использованию компонента косвенной связи для обеспечения доступа к каноническому дескриптору типа.
Подробное описание
В соответствии с вариантами осуществления, описанными в материалах настоящей заявки, принципы, описанные в материалах настоящей заявки, предоставляют возможность для эффективного использования дескрипторов типа с замороженными объектами. Сначала описываются различные варианты осуществления вычислительной системы, в которой могут применяться принципы, описанные в материалах настоящей заявки. Затем различные варианты осуществления использования дескрипторов типа, используемых с замороженными объектами, будут описаны по отношению к фиг.2-5.
Фиг.1 иллюстрирует вычислительную систему 100. Вычислительные системы в настоящее время все больше и больше принимают широкое разнообразие форм. Вычислительные системы могут, к примеру, быть карманными устройствами, ноутбуками, настольными компьютерами, универсальными ЭВМ, распределенными вычислительными системами или даже устройствами, которые традиционно не считались вычислительной системой. В этом описании и в пунктах формулы изобретения термин "вычислительная система" определяется широко, как включающий любое устройство или систему (или их комбинацию), которая включает в себя по меньшей мере один процессор и память, приспособлен хранить машиноисполняемые команды, которые могут исполняться процессором. Память может принимать любую форму и может зависеть от характера и формы вычислительной системы. Вычислительная система может быть распределенной по сетевой среде и может включать в себя многочисленные, составляющие вычислительные системы.
Как проиллюстрировано на фиг.1, в своей самой базовой конфигурации вычислительная система 100 типично включает в себя по меньшей мере один блок 102 обработки данных и память 104. Память 104 может быть физической системной памятью, которая может быть энергозависимой, энергонезависимой или некоторой комбинацией их обеих. Термин "память" также может использоваться в материалах настоящей заявки для указания на энергонезависимое запоминающее устройство большой емкости, такое как физический носитель данных. Если вычислительная система является распределенной, то обработка, память и/или емкость хранения также могут быть распределенными. Используемый в материалах настоящей заявки термин "модуль" или "компонент" может указывать на программные объекты или процедуры, которые исполняются на вычислительной системе. Разные компоненты, модули, подсистемы и службы (сервисы), описанные в материалах настоящей заявки, могут быть реализованы как объекты и процессы, которые исполняются на вычислительной системе (например, как отдельные потоки).
В описании, следующем ниже, варианты осуществления описываются со ссылкой на действия, которые выполняются одной или более вычислительными системами. Если такие действия осуществляются в программном обеспечении, один или более процессоров ассоциированной вычислительной системы, которая выполняет действие, управляют функционированием вычислительной системы в ответ на исполнение машиноисполняемых команд. Пример такого функционирования включает манипулирование данными. Машиноисполняемые команды (и манипулируемые данные) могут храниться в памяти 104 вычислительной системы 100.
Вычислительная система 100 может также включать в себя каналы 108 связи, которые позволяют вычислительной системе 100 осуществлять связь с другими процессорами сообщений, например, через сеть 110. Каналы 108 связи являются примерами коммуникационных сред. Коммуникационные среды типично воплощают машиночитаемые команды, структуры данных, программные модули или другие данные в модулированном сигнале данных, таком как несущая волна или другой механизм передачи, и включают в себя любые среды доставки информации. В качестве примера, но не ограничения, коммуникационные среды включают в себя проводные среды, такие как проводные сети и прямые проводные соединения, и беспроводные среды, такие как акустические, радио, инфракрасные и другие беспроводные среды. Термин «машиночитаемый носитель», используемый в материалах настоящей заявки, охватывает как носители данных, так и коммуникационные среды.
Варианты осуществления в пределах объема настоящего изобретения также включают машиночитаемые носители для переноса или хранения машиноисполняемых команд или структур данных, хранимых на них. Такие машиночитаемые носители могут быть любыми доступными носителями, к которым можно осуществить доступ с помощью компьютера общего назначения или специального назначения. В качестве примера, а не ограничения, такие машиночитаемые носители могут включать физические носители данных и/или средства памяти, такие как оперативное запоминающее устройство (ОЗУ, RAM), постоянное запоминающее устройство (ПЗУ, ROM), электрически стираемое программируемое постоянное запоминающее устройство (ЭСППЗУ, EEPROM), компакт-диск (CD-ROM) или другой оптический дисковый накопитель, магнитное дисковое запоминающее устройство или другие магнитные запоминающие устройства, или любой другой носитель, который может быть использован, чтобы переносить или хранить требуемые средства программного кода в форме машиноисполняемых команд или структур данных, и к которому можно осуществить доступ через компьютер общего назначения или специального назначения. Когда информация передается или предоставляется через сеть или другое коммуникационное соединение (любое из проводного, беспроводного или комбинации проводного и беспроводного) на компьютер, компьютер по существу рассматривает соединение как машиночитаемый носитель. Таким образом, любое такое соединение вполне можно корректно назвать машиночитаемым носителем. Комбинации вышеприведенного также должны быть также включены в объем понятия «машиночитаемый носитель».
Машиноисполняемые команды содержат, например, команды и данные, которые предписывают компьютеру общего назначения, компьютеру специального назначения или обрабатывающему устройству специального назначения выполнять определенную функцию или группу функций. Хотя изобретение описано на языке, характерном для структурных признаков и/или методологических действий, следует понимать, что изобретение, определенное в прилагаемых пунктах формулы изобретения, необязательно ограничивается специфическими признаками или действиями, описанными в материалах настоящей заявки. Скорее, специфические признаки и действия, описанные в материалах настоящей заявки, раскрываются как примерные формы осуществления пунктов формулы изобретения.
Фиг.2 иллюстрирует архитектуру 200, в которой дескрипторы типа могут эффективно использоваться с замороженными объектами. Как упоминалось ранее, "замороженный объект" - это объект, который размещается во время компиляции и, таким образом, существует как объект в компилируемом выполняемом файле. Соответственно, во время загрузки при подготовке к исполнению замороженный объект загружается в память наряду с потенциально другими частями или, возможно, всеми из других составляющих файла образа. Часто именно статические данные могут быть представлены в виде замороженного объекта. Отметим, что принципы, описанные в материалах настоящей заявки, не ограничиваются использованием замороженных объектов, которые не изменяются при загрузке в память. Однако некоторые варианты осуществления в материалах настоящей заявки уменьшают или исключают необходимость записи представлений замороженных объектов, находящихся в памяти. Это выгодно, так как запись в память может стать причиной того, что части (называемые страницами) памяти, в которые была произведена запись, могут стать "частными" («приватными»). То есть процесс, который записал в эту страницу, вызывает создание частной копии страницы.
Архитектура 200 включает в себя определяющий модуль 210 и ссылочный модуль 220. В данном описании "модули" могут быть исполняемыми образами, загружаемыми в память. Например, со ссылкой на фиг.1 и 2, модули 210 и 220 могут загружаться в память (энергозависимую часть памяти 104) с запоминающего устройства (энергонезависимой части памяти 104).
Определяющий модуль 210 назван "определяющим", так как он содержит первичный дескриптор 211 типа, который соответствует конкретному типу и определяет конкретный тип. В одном из вариантов осуществления первичный дескриптор 211 типа определяет конкретный тип способом, который удовлетворяет набору правил канонизации. Для других типов также могут быть канонизированные дескрипторы типа. Однако, чтобы избежать чрезмерного усложнения фиг.2, проиллюстрированы дескрипторы типа только для одного типа.
Ссылочный модуль 220 назван "ссылочным", так как он содержит замороженный объект 222, который принадлежит к типу, определенному первичным дескриптором типа. Ссылочный модуль 220, таким образом, в некотором смысле косвенно ссылается на первичный дескриптор типа в первичном модуле 210. В частности, ссылочный модуль 222 включает в себя дополнительный дескриптор 221 типа, соответствующий тому же конкретному типу и определяющий тот же конкретный тип, который определен первичным дескриптором 211 типа. Ссылочный модуль 222 также включает в себя достаточную информацию для обеспечения связки 223 между замороженным объектом 222 и дополнительным дескриптором 221 типа.
Дополнительный дескриптор 211 типа не идентичен каноническому первичному дескриптору 221 типа. Например, дополнительный дескриптор 221 типа может не быть каноническим дескриптором типа в том смысле, что он может не подчиняться каждому каноническому правилу в наборе канонических правил, которым подчиняется первичный дескриптор 211 типа. В одном из вариантов осуществления, однако, дополнительный дескриптор 221 типа может по существу являться абсолютно точной копией первичного дескриптора 211 типа, разве что, возможно, с достаточной информацией для различения первичного и дополнительного дескриптора типа друг от друга. В другом варианте осуществления дополнительный дескриптор 221 типа включает в себя такую достаточную информацию, что по меньшей мере одна операция над типом может быть выполнена с дополнительным дескриптором 221 типа, вместо необходимости ссылки на канонический первичный дескриптор 211 типа.
Связка 223 между замороженным объектом 222 и дополнительным дескриптором 221 типа может быть, например, указателем дескриптора типа в самом замороженном объекте. Например, в варианте осуществления, в котором объект начинается с указателя дескриптора типа, замороженный объект может также начинаться с указателя дескриптора типа. Однако вместо указывания на первичный дескриптор типа замороженный объект 222 указывает на дополнительный дескриптор 221 типа. Если бы вместо этого в модуль 220 был включен первичный дескриптор 211 типа, замороженный объект 221 мог бы взамен напрямую указывать на первичный дескриптор 211 типа. Однако во время компиляции ссылочного модуля 220 могло бы не быть достаточной информации для того, чтобы замороженный объект напрямую указывал на первичный дескриптор типа в другом модуле.
Архитектура 200 также включает в себя компонент 230 косвенной связи, посредством которого дополнительный дескриптор 221 типа связывается с первичным дескриптором 211 типа. В одном из вариантов осуществления компонент 230 косвенной связи является адресной таблицей импорта и может даже быть частью самого ссылочного модуля 220. Одна ячейка из адресной таблицы импорта может использоваться как точка косвенной связи между первичным дескриптором 211 типа и дополнительным дескриптором 221 типа. Хотя на фиг.2 проиллюстрирован лишь один тип, компонент косвенной связи может использоваться для многочисленных типов. В одном из вариантов осуществления компонент 230 косвенной связи используется для связывания двух дескрипторов типа, как изложено ниже. Сначала, потенциально во время компиляции, дополнительный дескриптор типа содержит некоторую индикацию того, что дескриптор типа является дополнительным, а не первичным. Это означает, что одно из полей дополнительного дескриптора 221 типа изменяется так, чтобы включать в себя указатель на соответствующую часть компонента 230 косвенной связи, как представлено стрелкой 231. Затем во время выполнения соответствующая часть компонента 230 косвенной связи изменяется так, чтобы включать в себя указатель (представленный стрелкой 232) на соответствующий первичный дескриптор 211 типа. Таким образом, используя указатели в дополнительном дескрипторе 221 типа и компоненте 230 косвенной связи, дополнительный дескриптор 221 типа может использоваться для доступа к первичному дескриптору 211 типа. Кроме того, в той степени, в которой дополнительный дескриптор типа в том же модуле, что и замороженный объект, может использоваться для выполнения операции над типом в отношении замороженного объекта, только один уровень косвенной связи используется для доступа к дополнительному дескриптору типа.
В одном из вариантов осуществления в компонент косвенной связи можно осуществлять запись, возможно, только один раз, без представления в виде частных тех страниц, в которые осуществляется запись. Даже если операция записи представляет частной часть компонента косвенной связи, в которую производится запись, компонент 230 косвенной связи может быть разделен на меньшее число страниц. Соответственно, меньше страниц могут быть сделаны частными по сравнению с ситуацией, в которой схожее число записей должны были быть сделаны в более распространенные указатели дескриптора типа в самом модуле 220.
Среда 200 также включает компонент 240 управления операциями, который выполняет операции над типом. При этом компонент управления операциями определяет, достаточно ли дополнительного дескриптора типа для выполнения операции над типом, или для выполнения операции над типом необходим первичный дескриптор типа. В качестве примера, фиг.3 иллюстрирует блок-схему последовательности операций способа 300 для выполнения одной или более операций над типом, используя многочисленные дескрипторы типа, соответствующие замороженному объекту. Например, если бы замороженный объект был замороженным объектом 222 по фиг.2, многочисленные дескрипторы типа включали бы в себя первичный дескриптор 211 типа и дополнительный дескриптор 221 типа. В одном из вариантов осуществления компонент 240 управления операциями просто может быть приложением, операционной системой или их частью.
Сначала для каждой операции компонент 240 определяет, достаточно ли будет дополнительного дескриптора типа для выполнения операции (этап 301 ветвления). Для одной или более операций над типом может быть определено, что дополнительного дескриптора типа будет достаточно для выполнения операции (Да на этапе 301 ветвления). В этом случае операция выполняется, используя дополнительный дескриптор типа (этап 302). В некоторых случаях операции над типом могут требовать, чтобы между замороженным объектом и дескриптором типа был только один уровень косвенной связи. Указатель из замороженного объекта на дополнительный дескриптор типа представляет этот один уровень косвенной связи в этом случае. Таким образом, эти операции могут выполняться без чрезмерной дополнительной сложности для доступа к первичному дескриптору типа через дополнительную косвенную связь.
Примеры операций над типом, которые могут быть выполнены, используя всего лишь дополнительный дескриптор типа, и которые могут ожидать всего один уровень косвенной связи между объектом и дескриптором типа, включают в себя операцию виртуального вызова или операцию вызова интерфейса. Дополнительно, сравнения типов между двумя объектами могут в некоторых случаях быть сделаны путем сравнения указателей дескрипторов типа в каждом объекте. Если указатели совпадают, тогда независимо от того, указывают ли они оба на первичный дескриптор типа или дополнительный дескриптор типа, они ссылаются на одинаковый тип. В одном из вариантов осуществления значительная часть всех операций над типом, которые выполняются, могут быть выполнены посредством использования всего лишь дополнительного дескриптора типа. Соответственно, эти операции могут быть выполнены вполне эффективно без необходимости даже нахождения первичного дескриптора типа.
Для одной или более других операций может быть определено, что дополнительного дескриптора типа не будет достаточно для выполнения операции (Нет на этапе 301 ветвления). В этом случае дополнительный дескриптор типа используется для доступа к каноническому первичному дескриптору типа (этап 303). Затем первичный дескриптор типа может использоваться для выполнения операции (этап 304). В качестве примера операции над типом, которая может потребовать доступ к первичному дескриптору типа, предположим, что вновь выполняется операция сравнения между двумя объектами. Однако в этом случае, если указатели дескрипторов типа не совпадают и определено, что по меньшей мере один из объектов указывает на дополнительный дескриптор типа, тогда осуществляют доступ к первичному дескриптору типа, соответствующему любым дополнительным дескрипторам типа, и первичные дескрипторы типа используются для проверки совпадения типов. В одном из вариантов осуществления часть операций над типом, которым необходим доступ к первичному дескриптору типа, может быть относительно небольшой по сравнению с частью операций над типом, которые можно завершить, используя всего лишь дополнительный дескриптор типа.
Фиг.4 иллюстрирует блок-схему последовательности операций примерного способа 400 использования дополнительного дескриптора типа для доступа к каноническому дескриптору типа. Существуют другие способы, которые могут применяться для доступа к первичному дескриптору типа из дополнительного дескриптора типа. Однако способ 400 удобен в качестве примера.
Осуществляют доступ к указателю внутри дополнительного дескриптора типа (этап 401). Этот указатель указывает прямо или косвенно на первичный дескриптор типа. Например, в случае фигуры 2, указатель дополнительного дескриптора типа указывает (как представлено стрелкой 231) на подходящую ячейку в компоненте косвенной связи. Затем указатель, находящийся в ячейке компонента косвенной связи (см. стрелку 232), используется для доступа к первичному каноническому дескриптору типа (этап 402).
Таким образом, дескрипторы типа могут эффективно использоваться, даже если многочисленные дескрипторы типа соответствуют одному объекту и даже если первичный дескриптор типа для конкретного объекта располагается вне модуля, в котором размещен замороженный объект. Более того, путем объединения операций записи в компонент косвенной связи, операции записи могут быть более объединенными во время выполнения, таким образом минимизируя и потенциально исключая приватизацию страниц из-за таких операций записи.
Фиг.5 иллюстрирует блок-схему последовательности операций способа 500 для подготовки к использованию компонента косвенной связи для обеспечения доступа к каноническому дескриптору типа. Этот способ 500 может быть выполнен во время загрузки при подготовке к исполнению. Перед выполнением способа, во время компиляции, указатель из замороженного объекта на дополнительный дескриптор типа и указатель из дополнительного дескриптора типа на компонент косвенной связи могут быть уже заданными. Однако, чтобы завершить путь косвенной связи к первичному дескриптору типа, задается указатель из компонента косвенной связи на первичный дескриптор типа.
Для этого определяется тип, который соответствует подходящей ячейке компонента косвенной связи (этап 501). Затем определяется, что этот тип соответствует первичному дескриптору типа (этап 502). В ответ на эту операцию сопоставления компонент косвенной связи затем изменяется так, чтобы включать в себя указатель на канонический дескриптор типа (этап 503). Таким образом, в этом варианте осуществления часть пути косвенной связи создается во время компиляции, а окончательная часть пути косвенной связи создается во время исполнения. Это предоставляет гибкость применения в расположениях первичных дескрипторов типа по отношению к замороженным объектам в других исполняемых модулях. Таким образом, пока где-нибудь в наборе исполняемых модулей есть первичный дескриптор типа, замороженный объект где-либо в наборе может должным образом ссылаться, даже если косвенно, на этот первичный дескриптор типа.
Настоящее изобретение может быть реализовано в других специфических формах без отступления от своего характера или существенных характеристик. Описанные варианты осуществления должны рассматриваться во всех отношениях лишь как иллюстративные, а не ограничительные. Поэтому объем изобретения, скорее, обозначен приложенной формулой изобретения, а не вышеизложенным описанием. Все изменения, которые происходят в пределах значения и диапазона эквивалентности пунктов формулы изобретения, должны быть включены в их объем.