Расширение блока стековых регистров с помощью теневых регистров
Иллюстрации
Показать всеИзобретения относятся к процессорам. Техническим результатом является повышение производительности. Способ управления системой блоков теневых регистров содержит этапы: выделяют первой процедуре один или более многопортовых регистров из блока физических регистров, которому соответствует часть логического стека регистров, сохраняют данные, ассоциативно связанные с первой процедурой, в выделенных многопортовых регистрах; выборочно сохраняют данные, ассоциативно связанные с первой процедурой, из одного или более многопортовых регистров в один или более регистров первого блока теневых регистров системы блоков теневых регистров, причем один или более регистров имеет независимые порты чтения/записи данных, и освобождают соответствующие выделенные многопортовые регистры для выделения второй процедуре; сохраняют данные, ассоциативно связанные с первой процедурой из первого блока теневых регистров во второй блок теневых регистров; сохраняют по меньшей мере часть данных, ассоциативно связанных с первой процедурой, из конкретного регистра второго блока теневых регистров в поддерживающее запоминающее устройство, и впоследствии извлекают упомянутую часть данных, ассоциативно связанных с первой процедурой, из поддерживающего запоминающего устройства в конкретный регистр второго блока теневых регистров; извлекают данные из второго блока теневых регистров в один или более регистров первого блока теневых регистров; и до продолжения приведения в исполнение первой процедуры, восстанавливают данные, ассоциативно связанные с первой процедурой, из одного или более регистров в один или более многопортовых регистров, и повторно выделяют один или более многопортовых регистров первой процедуре. 2 н. и 13 з.п. ф-лы, 5 ил.
Реферат
УРОВЕНЬ ТЕХНИКИ
Настоящее изобретение относится, в общем, к области техники процессоров, а в частности к увеличению фактического размера блока стековых регистров с помощью теневых регистров.
RISC-процессоры характеризуются относительно небольшим набором команд, причем каждая команда выполняет одну команду, такую как арифметическая, логическая операция или операция загрузки/сохранения. Арифметические и логические команды получают свои операнды из и записывают результаты в один или более регистров общего назначения (GPR). GPR - это архитектурные регистры. Т.е. они содержат дискретные ячейки памяти, явно указанные в архитектуре набора команд, и напрямую адресуются посредством команд.
GPR зачастую реализуются в аппаратных средствах как массив высокоскоростных многопортовых регистров, каждый из которых имеет ширину слова, заданную посредством набора команд (к примеру, 32 или 64 бита). Этот массив физических регистров упоминается как блок физических регистров. В реализации регистров с прямым отображением число регистров в блоке физических регистров точно совпадает с числом архитектурных GPR, и каждый логический идентификатор GPR назначается конкретному аппаратному регистру. Для более высокой производительности, а также для того, чтобы поддерживать суперскалярные конвейеры, многие современные процессоры разделяют логические идентификаторы GPR из физических регистров в блоке физических регистров. Переименование регистров, буферы восстановления последовательности и т.п. - это методики, известные в данной области техники, для отделения логических идентификаторов GPR от физических регистров. Будь то напрямую назначенные или переименованные, управление блоком физических регистров во множестве программных процедур является сложной задачей разработки и зачастую "узким местом" по производительности.
Большая часть современного программного обеспечения является модульной по природе. Т.е. одна процедура может "вызывать" или передавать управление в другую процедуру (по-другому упоминаемую как функция, подпрограмма, подмодуль и т.п.). Вызываемая процедура может, в свою очередь, вызывать другую процедуру и т.д., что приводит к вложенности процедур, часто до значительной глубины. В ходе приведения в исполнение посредством процессора, каждой процедуре (также упоминаемой в ходе приведения в исполнение как контекст) выделяются определенные ресурсы процессора, в том числе определенное число GPR. Число GPR, выделяемых процедуре, может быть предварительно определено посредством анализа компилятором команд в процедуре и может варьироваться от нескольких GPR до полного архитектурного набора GPR. Когда первая процедура вызывает вторую процедуру (также называемую контекстным переключателем), первая, или вызывающая, процедура становится неактивной, тогда как второй, или вызываемой процедуре, выделяются отдельные ресурсы, в том числе собственный набор GPR, и начинается ее приведение в исполнение. Когда вторая процедура завершает приведение в исполнение, ее ресурсы освобождаются, ресурсы повторно выделяются вызывающей процедуре (при необходимости), и вызывающая процедура возобновляет приведение в исполнение. Часть ресурсов, выделенных вызывающей процедуре, необязательно может оставаться доступной для вызываемой процедуры, например, регистры, используемые для того, чтобы передавать параметры вызова и возвращаемые значения между процедурами.
В некоторых процессорах предшествующего уровня техники, например, Intel i-960, контекстный переключатель, или новая процедура, предлагает процессору сохранить все содержимое блока физических регистров в памяти, делая весь блок физических регистров доступным для новой процедуры. Когда вызываемая процедура завершает приведение в исполнение и возвращает управление своей вызывающей процедуре, ранее сохраненные значения регистров повторно сохраняются в блоке физических регистров, и приведение в исполнение вызывающей процедуры продолжается. Содержимое блока физических регистров сохраняется в "поддерживающем запоминающем устройстве", таком как системное запоминающее устройство (RAM). Чтобы уменьшить влияние на производительность нескольких обращений к памяти вне микросхемы для каждого контекстного переключателя, когда поддерживающее устройство содержит RAM вне микросхемы, процессор может предоставлять один или более блоков кэш-регистров, которые могут содержать фактические регистры или альтернативно могут содержать внутреннюю кэш-память, для сохранения содержимого блока физических регистров. Тем не менее, весь блок физических регистров должен быть сохранен/извлечен за один раз, нанося удар по производительности, даже в случае хранилища кэшированных регистров.
Методика, используемая многими современными процессорами, такими как Intel Itanium, которая устраняет необходимость сохранять и извлекать блок физических регистров сразу, известна как архитектура блока стековых регистров. В архитектуре блока стековых регистров высокоуровневый контроллер процесса рассматривает блок физических регистров как логический стек бесконечной глубины. Этот логически бесконечный стек реализован в блоке физических регистров посредством пошагового выделения регистров процедурам по мере того, как они вызываются, и сохранения содержимого ранее выделенных регистров при необходимости.
Фиг.1 иллюстрирует функциональную блок-схему характерной реализации архитектуры блока стековых регистров. Блок 1 физических регистров содержит массив высокоскоростных многопортовых физических регистров, при этом массив включает в себя, по меньшей мере, столько регистров, сколько GPR в архитектуре набора команд. Например, блок 1 физических регистров может содержать 128 регистров, начиная от физического регистра 0 (PR0) внизу до физического регистра 127 (PR127) наверху. Логические указатели реализуют управление стеком: указатель вершины стека и указатель сохранения/восстановления.
Первоначально оба указателя задаются равными PR0. По мере того как процедуры вызываются и регистры выделяются им, указатель вершины стека перемещается вверх. Когда все или практически все доступные физические регистры выделены, и новая вызываемая процедура требует больше регистров, чем число невыделенных регистров, оставшихся в блоке 1 физических регистров, указатель вершины стека "оборачивается" и начинает выделение регистров снизу блока 1 физических регистров, начиная с PR0. Тем не менее, прежде чем это осуществляется, доступное число регистров снизу блока 1 физических регистров должно иметь свое содержимое сохраненным в поддерживающем запоминающем устройстве 3, например системной памяти (RAM).
Механизм 2 сохранения регистров прерывает процессор и приводит в исполнение команды, требуемые для того, чтобы выполнять операции считывания регистров и сохранения в памяти, чтобы сохранять содержимое самых последних выделенных регистров внизу блока 1 физических регистров в поддерживающее запоминающее устройство 3. Механизм 2 сохранения регистров увеличивает указатель сохранения/восстановления, указывающий то, что регистры ниже указателя доступны для выделения новым вызываемым процедурам. Когда механизм 2 сохранения регистров завершает операцию сохранения регистров и отказывается от управления процессором, контроллер процессора выделяет регистры следующей процедуре и увеличивает указатель вершины стека, заворачивая его и увеличивая его мимо регистров, содержимое которых сохранено в поддерживающее запоминающее устройство 3, поскольку эти регистры повторно выделяются и используются посредством вызываемой процедуры.
Аналогично, по мере того как вызываемая процедура завершает приведение в исполнение и возвращает управления вызывающей процедуре, стек выталкивается, и регистры, выделенные вызываемой процедуре, освобождаются или делаются доступными для выделения другим процедурам. Если все данные, ассоциативно связанные с вызывающей процедурой, еще не находятся в блоке 1 физических регистров, т.е. если один или более регистров вызывающей процедуры повторно выделен, механизм 2 сохранения регистров повторно прерывает процессор, извлекает содержимое самых последних сохраненных регистров из поддерживающего запоминающего устройства 3, восстанавливает данные в блок 1 физических регистров, выделяет регистры вызывающей процедуре и увеличивает индикатор сохранения/восстановления, чтобы указать то, что регистры выделены и содержат допустимые данные.
Система блоков стековых регистров предоставляет оптимальную производительность при объемном блоке 1 физических регистров, при относительно небольшой глубине вложенности процедур и/или при относительно небольшом числе регистров, выделенных каждой процедуре. При этих условиях указатель вершины стека просто перемещается вверх и вниз посредством блока 1 физических регистров, выделяя и освобождая регистры для процедур при необходимости, без задержки. Тем не менее, по мере того как глубина вложенности процедур возрастает и/или одна или более процедур требуют большого числа регистров, процессор испытывает многочисленные прерывания от механизма 2 сохранения регистров для того, чтобы сохранять данные и восстанавливать их в регистры в блоке 1 физических регистров, поскольку физические регистры освобождаются и повторно выделяются вызывающим процедурам.
Один способ того, чтобы повысить производительность системы блоков стековых регистров, состоит в том, чтобы просто увеличить размер блока 1 физических регистров. Хотя это предоставляет более высокую производительность, регистры в блоке 1 физических регистров обычно являются высокоскоростными многопортовыми регистрами с произвольным доступом. Каждый регистр может включать в себя, к примеру, три-пять портов чтения и записи. Более того, для гибкости в распределении операций и выделении регистров, порт считывания каждого физического регистра должен направляться в каждую ступень канала приведения в исполнение из каждого конвейера, и ступень канала обратной записи должна быть соединена с портом записи каждого регистра в блоке физических регистров. Таким образом, увеличение размера блока 1 физических регистров является затратным в отношении счетчика вентилей и сложности сети соединений, при сопутствующем возрастании сложности тестирования и проверки и потребления энергии. В любое данное время только одна процедура приводится в исполнение, обычно осуществляя доступ только к небольшому поднабору регистров в блоке 1 физических регистров. Таким образом, увеличение размера блока 1 физических регистров приводит к существенным затратам при низкой эффективности использования дорогого оборудования.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
В одном или более вариантов осуществления один или более блоков теневых регистров помещаются между блоком физических регистров, содержащим множество многопортовых регистров и поддерживающим запоминающим устройством в архитектуре блоков стековых регистров. Блоки теневых регистров содержат двухпортовые регистры и соединены последовательно, формируя цепочку, идущую от каждого многопортового регистра в блоке физических регистров. Данные в многопортовых регистрах, выделенных неактивным процедурам, сохраняются в соответствующих двухпортовых регистрах в первом блоке теневых регистров. Данные затем могут быть сдвинуты во второй двухпортовый регистр во втором блоке теневых регистров, поскольку более новые данные, ассоциативно связанные с другой неактивной процедурой, сохраняются из многопортового регистра в двухпортовый регистр в первом блоке теневых регистров. Цепочка блоков теневых регистров может иметь произвольную глубину. Механизм сохранения регистров при необходимости сохраняет и восстанавливает данные из поддерживающего запоминающего устройства (такого как RAM вне микросхемы) для последнего блока теневых регистров в цепочке. По мере того, как процедуры повторно активируются, данные сдвигаются посредством цепочки блоков теневых регистров в направлении многопортовых регистров блока физических регистров.
Один вариант осуществления относится к способу управления системой блоков теневых регистров, имеющей один или более блоков теневых регистров. Один или более многопортовых регистров из блока многопортовых регистров выделяются первой процедуре, и данные, ассоциативно связанные с первой процедурой, сохраняются в выделенных многопортовых регистрах. Данные, ассоциативно связанные с первой процедурой, выборочно сохраняются из одного или более многопортовых регистров в один или более первых двухпортовых регистров, и соответствующие выделенные многопортовые регистры освобождаются для выделения второй процедуре. До продолжения приведения в исполнение первой процедуры данные, ассоциативно связанные с первой процедурой, восстанавливаются из двухпортовых регистров в многопортовые регистры, и регистры повторно выделяются первой процедуре.
Другой вариант осуществления относится к процессору, реализующему архитектуру набора команд, задающую множество регистров общего назначения. Процессор включает в себя блок физических регистров, содержащий, по меньшей мере, столько многопортовых регистров, сколько регистров общего назначения, заданных в архитектуре набора команд процессора, при этом регистры динамически выделяются программным процедурам. Процессор также включает в себя механизм сохранения регистров, выполненный с возможностью выборочно сохранять данные из многопортовых регистров, выделяемых неактивным процедурам, и восстанавливать данные в многопортовые регистры до того, как процедуры становятся активными. Процессор дополнительно включает в себя первый блок теневых регистров, содержащий такое же число двухпортовых регистров, что и число многопортовых регистров в блоке физических регистров. Первый порт каждого двухпортового регистра непосредственно соединен с соответствующим многопортовым регистром и выполнен с возможностью хранить данные, сохраненные из многопортовых регистров, выделенных неактивным процедурам, под управлением механизма сохранения регистров.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Фиг.1 - это блок-схема блока стековых регистров предшествующего уровня техники.
Фиг.2 - это функциональная блок-схема процессора.
Фиг.3 - это функциональная блок-схема блока стековых регистров, включающего в себя множество блоков теневых регистров.
Фиг.4 - это блок-схема последовательности операций способа управления архитектурой блока стековых регистров.
Фиг.5 - блок-схема последовательности операций варианта осуществления изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯ
Фиг.2 иллюстрирует функциональную блок-схему процессора 10. Процессор 10 приводит в исполнение команды в конвейере 12 приведения в исполнение команд согласно управляющей логике 14. Конвейер 12 может иметь суперскалярную архитектуру с несколькими параллельными конвейерами, такими как 12a и 12b. Каждый конвейер 12a, 12b включает в себя различные регистры или защелки 16, организованные в ступенях канала, и один или более арифметико-логических устройств (ALU) 18. Конвейеры 12a, 12b извлекают команды из кэша команд (I-кэша или I$) 20, причем адресация памяти и разрешения управляются посредством командного буфера быстрого преобразования адреса (ITLB) 22.
Доступ к данным осуществляется из кэша данных (D-кэша или D$) 24, причем адресация памяти и разрешения управляются посредством буфера быстрого преобразования адреса (TLB) 26. В различных вариантах осуществления ITLB 22 может содержать копию части TLB 26. Альтернативно, ITLB 22 и TLB 26 могут быть интегрированы. Аналогично, в различных вариантах осуществления процессора 10 I-кэш 20 и D-кэш 24 могут быть интегрированы или объединены. Промахи в I-кэше 20 и/или D-кэше 24 вызывают доступ в основную (вне микросхемы) память 36 под управлением интерфейса 34 памяти.
Регистры или защелки 16 ступеней канала и ALU 18 могут считывать операнды и/или записывать результаты в регистры в блоке 28 физических регистров. Блок 28 физических регистров управляется посредством механизма 30 сохранения регистров, который также управляет одним или более блоков 32 теневых регистров. Данные передаются между одним блоком 32 теневых регистров и основной памятью 36 посредством интерфейса 34 памяти. Работа блока 28 физических регистров, механизма 30 сохранения регистров и блоков 32 теневых регистров подробнее описана ниже.
Процессор 10 может включать в себя интерфейс 38 ввода/вывода (I/O), управляющий доступом к различным периферийным устройствам 40, 42. Специалисты в данной области техники должны признавать, что возможно множество вариантов процессора 10. Например, процессор 10 может включать в себя кэш второго уровня (L2) для I- и D-кэшей. Помимо этого, один или более функциональных блоков, проиллюстрированных в процессоре 10, могут быть опущены из конкретного варианта осуществления.
Фиг.3 иллюстрирует функциональную блок-схему архитектуры блоков стековых регистров процессора 10. Логически бесконечный стек регистров реализован в блоке 28 физических регистров, который включает в себя, по меньшей мере, столько многопортовых физических регистров, сколько GPR задает архитектура набора команд процессора; один или более блоков 32 теневых регистров, каждый из которых содержит такое же число двухпортовых регистров, сколько блок 28 физических регистров содержит многопортовых регистров; и поддерживающее запоминающее устройство 36 очень большого размера. При использовании в данном документе многопортовый регистр - это ячейка хранения, имеющая три или более независимых порта чтения/записи данных. Двухпортовый регистр - это ячейка хранения, имеющая два независимых порта чтения/записи данных. Регистры в блоке 28 физических регистров являются многопортовыми, поскольку данные записываются и считываются из регистров посредством нескольких ступеней конвейера, ALU и т.п. Фактически, именно сложность, кремниевая зона и сложность сети соединений большого числа многопортовых регистров с произвольным доступом делает простое расширение блока 28 физических регистров затратным подходом к снижению задержек, связанных с сохранением их содержимого в поддерживающее запоминающее устройство 36.
Каждый многопортовый регистр в блоке 28 физических регистров напрямую соединен с первым портом соответствующего двухпортового регистра в блоке 32-1 теневых 1 регистров. Как показано на фиг.3, второй порт каждого двухпортового регистра в блоке 32-1 теневых 1 регистров напрямую соединен с первым портом соответствующего двухпортового регистра в блоке 32-2 теневых 2 регистров. Ко второму порту двухпортовых регистров в блоке 32-2 теневых 2 регистров осуществляется доступ посредством механизма 30 сохранения регистров. Хотя фиг.3 иллюстрирует блоки 32-1, 32-2 теневых регистров, специалисты в данной области техники должны легко признавать, что число последовательно соединенных блоков 32-1, 32-2 теневых регистров может варьироваться от одного до любого требуемого числа. Набор регистров, включающий в себя блок 28 физических регистров и все последовательно соединенные блоки 32 теневых регистров, упоминается в данном документе как система блоков теневых регистров.
Указатель вершины стека и указатель сохранения/восстановления управляют доступностью многопортовых регистров в блоке 28 физических регистров, а также, в некоторых вариантах осуществления, сохранением данных и восстановлением данных из последнего блока 32-2 теневых регистров. Оба указателя поддерживаются посредством механизма 30 сохранения регистров. В одном варианте осуществления оба указателя инициализируются на вершине блоков регистров. Поскольку многопортовые регистры в блоке 28 физических регистров выделяются новым вызываемым процедурам, указатель вершины стека увеличивается на число выделенных многопортовых регистров. Регистры в или ниже указателя вершины стека (и выше позиции указателя сохранения/восстановления) выделяются процедурам и могут содержать программные данные, а регистры выше указателя вершины стека (и в или ниже позиции указателя сохранения/восстановления) свободны для выделения новым процедурам. Эта взаимосвязь сохраняется даже после того, как указатели "оборачиваются" вокруг блоков регистров. Когда регистры вершины стека и сохранения/восстановления указывают на одну позицию с блоками регистров, блок 28 физических регистров полон.
По мере того, как процедура завершает, приведение в исполнение и возвращает управление в вызывающую процедуру, указатель вершины стека уменьшается на число регистров, которые выделены выполненной процедуре. Регистры ниже указателя вершины стека (и над позицией указателя сохранения/восстановления) содержат данные, ассоциативно связанные с текущей активной процедурой, и, возможно, данные, ассоциативно связанные с одной или более процедур, которые являются неактивными, вызывающих другие процедуры, но повторно активируются, когда вызываемая процедура завершает приведение в исполнение.
Когда процедура вызвана и запрашивает выделение большего числа многопортовых регистров, чем число невыделенных многопортовых регистров, оставшихся в блоке 28 физических регистров, механизм 30 сохранения регистров сохраняет данные, ассоциативно связанные с неактивными процедурами, т.е. данные, сохраненные в многопортовых регистрах, которые выделены неактивным процедурам (возможно, включающим в себя вызывающую процедуру), и блока 28 физических регистров в соответствующие двухпортовые регистры в блоке 32-1 теневых 1 регистров. Эта операция упоминается в данном документе как "вытеснение" данных. Поскольку каждый многопортовый регистр в блоке 28 физических регистров непосредственно соединен с соответствующим двухпортовым регистром в блоке 32-1 теневых 1 регистров, данные, ассоциативно связанные со всеми неактивными процедурами, могут быть сохранены из блока 28 физических регистров в блок 32-1 теневых 1 регистров за один цикл согласно одному варианту осуществления.
Тем не менее, считывание большого числа многопортовых регистров и запись того же большого числа двухпортовых регистров в одном цикле может приводить к нежелательному "выбросу" мощности. Как следствие, в другом варианте осуществления может быть использован более поэтапный подход к сохранению многопортовых регистров. Например, каждый раз, когда предварительно определенное число многопортовых регистров, сохраняющих данные, становится неактивным (т.е. их ассоциативно связанная процедура(ы) становится неактивной посредством вызывания другой процедуры), данные могут передаваться в двухпортовые регистры. Предварительно определенное число регистров, которые должны быть сохранены одновременно, т.е. "уровень модульности" операций сохранения данных многопортовых регистров, может быть приспособлено так, как требуется для конкретных реализаций, и/или может быть переменным, например, посредством записи значения в конфигурационный регистр.
По мере того, как вызываемые процедуры завершают приведение в исполнение и их вызывающая процедура повторно активируется, указатель вершины стека перемещается вниз, освобождая многопортовые регистры, ассоциативно связанные с завершенной вызываемой процедурой. По мере того, как указатель вершины стека достигает позиции указателя сохранения/восстановления, данные восстанавливаются до ранее освобожденных многопортовых регистров в блоке 28 физических регистров из блока 32-1 теневых 1 регистров. Эта операция упоминается в данном документе как "наполнение" данных. Кроме того, прямое соединение между каждым многопортовым или двухпортовыми регистрами дает возможность восстановления множества многопортовых регистров в одном цикле. Число регистров, восстанавливаемых за один раз, может быть предварительно определенным значением, а в некоторых вариантах осуществления может быть переменным. Когда данные восстановлены, указатель сохранения/восстановления перемещается вниз соответствующим образом.
Как показано на фиг.3, система блоков теневых регистров может включать в себя более одного блока 32-1, 32-2 теневых регистров. Поскольку данные вытесняются из блока 28 физических регистров в блок 32-1 теневых 1 регистров, соответствующие регистры в блоке 32-1 теневых 1 регистров могут содержать сохраненные данные. В этом случае каждый раз, когда данные вытесняются из многопортового регистра в блоке 28 физических регистров в двухпортовый регистр блока 32-1 теневых 1 регистров, сохраненные данные в двухпортовом регистре сдвигаются в соответствующий двухпортовый регистр блока 32-2 теневых 2 регистров. Поскольку многопортовые регистры, теневые 1 двухпортовые регистры и теневые 2 двухпортовые регистры непосредственно соединены с выделенными портами чтения/записи, множество операций вытеснения регистров может выполняться в одном цикле.
Когда данные наполняются или восстанавливаются в один или более многопортовых регистров блока 28 физических регистров из соответствующих двухпортовых регистров блока 32-1 теневых 1 регистров, если сохраненные данные размещаются в соответствующих двухпортовых регистрах блока 32-2 теневых 2 регистров, они восстанавливаются в теневые 1 двухпортовые регистры как часть операции наполнения. Специалисты в данной области техники должны легко признавать, что блоки 32 теневых регистров могут быть вложены до любой требуемой или желательной глубины в данной реализации, к примеру, от 1 до n, где n - это любое положительное целое число.
Механизм 30 сохранения регистров вытесняет или сохраняет данные из n-го существующего блока теневых регистров (к примеру, блока 32-2 теневых 2 регистров в системе блоков теневых регистров, показанной на фиг.3) в поддерживающее запоминающее устройство 36, такое как RAM вне микросхемы. В отличие от промежуточных блоков теневых регистров, порты чтения/записи в расчете на регистр которых непосредственно соединены с другими регистрами, механизм 30 сохранения регистров имеет произвольный доступ на чтение/запись ко второму порту регистров в n-ном блоке теневых регистров. В одном варианте осуществления механизм 30 сохранения регистров сохраняет данные из регистров в n-м блоке 32-n теневых регистров по мере того, как они вытесняются из системы блоков теневых регистров, т.е. данные "выталкиваются" из регистра посредством данных в (n-1)-м блоке теневых регистров по мере того, как данные вытесняются из одного или более многопортовых регистров в блоке 28 физических регистров.
Базовая операция системы блоков теневых регистров показана в примере ниже. Рассмотрим систему блоков теневых регистров по фиг.3, но для краткости каждый блок регистров содержит только четыре регистра. Первоначально первая процедура (P1) запрашивает и ей выделяется два многопортовых регистра в блоке физических регистров (PRF) 28. Указатель вершины стека (инициализированный наверху PRF 28) увеличивается дважды и помещается наверху зоны "допустимых данных" PRF 28, которая является зоной PRF 28 в или ниже указателя вершины стека и выше указателя сохранения/восстановления. Поскольку данные не вытеснены из PRF 28, указатель сохранения/восстановления не изменяет свою первоначальную позицию наверху блоков регистров. P1 записывает данные A и B в два выделенных многопортовых регистра.
Таблица 1 | |
Процедура P1 вызывает вторую процедуру (P2), которая запрашивает три многопортовых физических регистра. Прежде чем три многопортовых регистра могут быть выделены P2, по меньшей мере, часть данных, ассоциативно связанных с неактивной в данный момент процедурой P1, должна быть вытолкнута из двухпортовых регистров блока теневых 1 регистров (S1RF) 32-1. Указатель сохранения/восстановления увеличивается, чтобы указать операцию сохранения (вытеснения) из PRF 28. P2 далее сохраняет данные C-E, и указатель вершины стека оборачивается. Поскольку нет регистров выше указателя вершины стека, но ниже указателя сохранения/восстановления, нет свободного пространства в PRF.
Таблица 2 | |
Процедура P2 вызывает третью процедуру (P3), которая запрашивает два физических регистра. Данные вытесняются из двух многопортовых регистров PRF 28 в S1RF 32-1, и регистр сохранения/восстановления увеличивается дважды. P3 выделяется два многопортовых регистра, указатель вершины стека увеличивается дважды, и P3 сохраняет данные F и G.
Таблица 3 | |
Процедура P3 вызывает четвертую процедуру (P4), которая запрашивает три физических регистра. Данные вытесняются из двух многопортовых регистров PRF 28 в три соответствующих двухпортовых регистра S1RF 32-1. Это инструктирует данным из одного двухпортового регистра S1RF 32-1 вытесняться в соответствующий двухпортовый регистр блока теневых 2 регистров (S2RF) 32-2. Указатель сохранения/восстановления увеличивается три раза (и оборачивается).
P4 сохраняет данные H-J, и указатель вершины стека увеличивается в три раза (и оборачивается).
Таблица 4 | |
Процедура P4 вызывает пятую процедуру (P5), которая запрашивает три физических регистра. Поскольку запрошено больше многопортовых регистров, чем свободных регистров в S2RF 32-2, механизм 30 сохранения регистров должен вытеснить данные, по меньшей мере, что из одного двухпортового регистра S2RF 32-2 в поддерживающее запоминающее устройство 36. После этой операции сохранения данные вытесняются из трех регистров PRF 28 со следующими результатами.
Таблица 5 | |
Шестая процедура (P6) запрашивает два регистра, вызывая больше вытеснений из блока стековых регистров в поддерживающее запоминающее устройство 36.
Таблица 6 | |
В показанном варианте осуществления данные, вытесненные из S2RF 32-2 в BS 36, сохраняются в логическом стеке или структуре данных LIFO. Тем не менее, настоящее изобретение не ограничено такой структурой. В общем, механизм 30 сохранения регистров может сохранять вытесненные данные в BS 36 в любой форме или структуре, до тех пор, пока он отслеживает данные, и может наполнять систему блоков теневых регистров сохраненными данными в обратном порядке тому, в котором они вытеснены.
После этого процедура P6 завершает приведение в исполнение и возвращает управление вызывающей процедуре P5. Многопортовые регистры PRF 28, содержащие данные O и N, ассоциативно связанные с P6, освобождаются посредством уменьшения указателя вершины стека два раза. Это инструктирует данным, сохраненным в соответствующих позициях S1RF 32-1 и S2RF 32-2, наполняться. Это, в свою очередь, инструктирует механизму 30 сохранения регистров заполнять соответствующие позиции S2RF 32-2 данными от BS 36, начиная с позиции указателя сохранения/восстановления и уменьшая для каждого наполненного регистра. После данной операции наполнения регистров указатель вершины стека и указатель сохранения/восстановления снова адресует один объект в системе блоков теневых регистров, указывая то, что PRF 28 заполнен.
Таблица 7 | |
По мере того, как процедуры завершаются и возвращают управление в вызывающие процедуры, многопортовые регистры в PRF 28 освобождаются, и данные наполняются из S1RF 32-1 в PRF 28, из S2RF 32-2 в S1RF 32-1 и из BS 36 в S2RF 32-2. После возврата каждой вызываемой процедуры состояние системы блоков теневых регистров будет в обратном порядке тому, что показан выше (к примеру, таблицы 4, 3, 2 и 1).
Для эффективной работы механизм 30 сохранения регистров отслеживает содержимое системы блоков теневых регистров. Например, в операциях вытеснения, показанных в таблицах 2, 3 и 4, механизм 30 сохранения регистров не должен вытеснять данные из n-го блока 32 теневых регистров в поддерживающее запоминающее устройство 36. Тем не менее, в операциях вытеснения, показанных в таблицах 5 и 6, он должен. В одном варианте осуществления механизм 30 сохранения регистров поддерживает глобальный указатель дна стека посредством подсчета числа вытеснений данных из блока 28 физических регистров и уменьшения на наполнения данных. Посредством деления этого показателя по модулю на размер блока регистров механизм 30 сохранения регистров может легко обнаружить "конец" цепочки данных, вытесняемой из блока 28 физических регистров.
В другом варианте осуществления механизм 30 сохранения регистров может определять требуемые операции из числа выделяемых регистров, позиции указателя сохранения/восстановления, а также того, заполнен или нет предшествующий блок регистров в цепочке. В этом варианте осуществления бит состояния FULL ассоциативно связывается с каждым блоком регистров (к примеру, PRF 28, S1RF 32-1, S2RF 32-2, ..., SnRF 32-n). Бит задается каждый раз, когда соответствующий блок регистров полный, и сбрасывается, когда блок регистров имеет свободные регистры, доступные для того, чтобы сохранять новые данные. Например, в таблице 2 блок 32-1 теневых 1 регистров неполный. Таким образом, механизм 30 сохранения регистров знает, что вытеснение в поддерживающее запоминающее устройство 36 не требуется для следующего выделения регистров, поскольку процедуре не может быть выделено больше, чем количество регистров в блоке 28 физических регистров.
В варианте осуществления вышеприведенного примера данные вытесняются из блока 28 физических регистров только при необходимости. Т.е., когда вызываемая процедура запрашивает три регистра и блок 28 физических регистров полный, только три регистра вытесняются в блок 32-1 теневых 1 регистров (и дополнительно посредством системы блоков теневых регистров при необходимости). Когда система блоков теневых регистров полная (т.е. блок 28 физических регистров и блоки 32 теневых регистров полные), выталкивание в поддерживающее запоминающее устройство 36 требуется для каждого нового выделения регистров. Это накладывает задержку, ассоциативно связанную с доступом к RAM вне микросхемы для каждого вызова и возврата процедуры, когда внутренняя система блоков стековых регистров полная. Хотя этот способ системы управления системой блоков теневых регистров является полнофункциональным и предоставляет корректные результаты, он может быть субоптимальным.
В другом варианте осуществления каждый раз, когда недостаточное количество невыделенных многопортовых регистров имеется в блоке 28 физических регистров, чтобы удовлетворять процедуре выделения регистров вызываемой процедуры, все данные, ассоциативно связанные с неактивными процедурами, могут быть вытеснены совместно в блок 32-1 теневых 1 регистров (и далее, как требуется, вниз по цепочке блоков 32 теневых регистров). Если n-ный блок теневых регистров содержит допустимые данные, механизм 30 сохранения регистров, возможно, должен вытеснить данные в поддерживающее запоминающее устройство 36, накладывая задержку на обращение к памяти по вызову процедуры. Тем не менее, значительное пустое пространство должно оставаться в блоке 28 физических регистров, и впоследствии вызываемым процедурам сразу могут выделяться многопортовые регистры.
В другом варианте осуществления, в котором совместное вытеснение может приводить к нежелательному выбросу мощности, данные могут вытесняться из блока 28 физических регистров каждый раз, когда предварительно определенное число многопортовых регистров в блоке 28 физических регистров содержит данные, ассоциативно связанные с неактивными процедурами. Это предварительно определенное число может быть фиксированным или может задаваться пользователем, к примеру, посредством записи значения в конфигурационный регистр. В этом варианте осуществления, хотя выделение многопортовых регистров в блоке 28 физических регистров новой вызываемой процедуре и сопутствующая деа