PT2585925E - Determinação durante tempo de execução de formatos de tradução para funções de adaptador - Google Patents
Determinação durante tempo de execução de formatos de tradução para funções de adaptador Download PDFInfo
- Publication number
- PT2585925E PT2585925E PT107758179T PT10775817T PT2585925E PT 2585925 E PT2585925 E PT 2585925E PT 107758179 T PT107758179 T PT 107758179T PT 10775817 T PT10775817 T PT 10775817T PT 2585925 E PT2585925 E PT 2585925E
- Authority
- PT
- Portugal
- Prior art keywords
- address
- translation
- format
- adapter
- memory
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
- Bus Control (AREA)
Description
ΡΕ2585925 - 1 -
DESCRIÇÃO "DETERMINAÇÃO DURANTE TEMPO DE EXECUÇÃO DE FORMATOS DE TRADUÇÃO PARA FUNÇÕES DE ADAPTADOR"
ANTECEDENTES
Esta invenção refere-se, em geral, ao acesso à memória de sistema num ambiente de computação, e em especifica, a facilitar o fornecimento de um endereço utilizável no acesso à memória de sistema. A memória de sistema é acessível através de solicitações de leitura e escrita. Estas solicitações podem ser provenientes de vários componentes de um ambiente de computação, incluindo unidades centrais de processamento, assim como adaptadores. Cada solicitação inclui um endereço que deve ser utilizado para aceder à memória de sistema. Em alguns casos, contudo, este endereço nao tem uma correspondência um-para-um com uma localização física na memória de sistema. Portanto, é realizada tradução de endereços. A tradução de endereços é utilizada para traduzir um endereço que é fornecido de uma forma não diretamente utilizável no acesso à memória de sistema para uma outra forma que é diretamente utilizada no acesso a uma localização física na memória de sistema. Por exemplo, um - 2- ΡΕ2585925 endereço virtual incluído numa solicitação fornecida por uma unidade central de processamento é traduzido para um endereço real ou absoluto na memória de sistema. Como mais um exemplo, um endereço de Interligação de Componentes Periféricos (Peripheral Component Interconnect - PCI), fornecido numa solicitação de um adaptador pode ser traduzido para um endereço absoluto na memória de sistema. A Publicação dos E.U.A. N° 2007/0136554 Al, publicada em 14 Junho, 2007, Biran et al., "Memory Operations in a Virtualized System", representa um método, aparelho e sistema implementados por computador para partilhar um adaptador de entrada/saída entre uma pluralidade de instâncias de sistema operativo num servidor anfitrião. É alocada e associada memória virtual com uma instância de sistema operativo. A memória virtual é traduzida para um ou mais endereços reais, em que esse um ou mais endereços reais não requer mais nenhuma tradução. O adaptador de entrada/saída é exposto a esse um ou mais endereços reais. A instância de sistema operativo é fornecida com esse um ou mais endereços reais para aceder à memória virtual relacionada com a instância de sistema operativo. Podem ser realizadas tradução de endereços e proteção pelo adaptador de entrada/saída ou pela instância de sistema operativo.
Na Publicação dos E.U.A. N° 2008/0091915 Al, publicada em 17 de Abril, 2008, Moertl et al., “Apparatus and Method for Communicating With a Memory Registation -3- ΡΕ2585925
Enabled Adapter Using Cached Address Translations", um aparelho e método para comunicação com um adaptador com registo de memória ativado, tal como um adaptador de canal anfitrião Infiniband™, são fornecidos. Com o aparelho e método, os serviços de drivers dos dispositivos podem ser invocados por um drivers de dispositivo para inicializar entradas de tradução de endereços numa estrutura de dados de tradução de endereços de um complexo de raiz. Um endereço de uma estrutura de dados do buffer de dados do drivers do dispositivo e modificadores de registo podem ser passados pelo drivers do dispositivo para os serviços de drivers do dispositivo. Os serviços de drivers do dispositivo podem criar entradas de estrutura de dados de tradução de endereços na estrutura de dados de tradução de endereços relacionada com as entradas de tradução de endereços de complexo de raiz e registo de memória (Memory Registation - MR) numa estrutura de dados de tradução de endereços de MR do adaptador. A estrutura de dados de tradução de endereços de MR pode então ser utilizada com operações de entrada/saída para contornar a estrutura de dados de tradução de endereços relacionada com o complexo de raiz. A Patente dos E.U.A. N° 7 493 425, atribuída em 17 de Fevereiro, 2009, Arndt et al., "Method, System and Program for Differentiating Between Virtual Hosts on Bus Transactions and Associating Allowable Memory Access for an Input/Output Adapter that Supports Virtualization" descreve um método, sistema e programa de computador que permite a -4- ΡΕ2585925 uma Imagem de Sistema num Servidor Virtual de Imagem de Sistema manter isolamento em relação a outras imagens de sistema enquanto expõe diretamente uma parte, ou toda, da sua Memória de Sistema associada para um Adaptador PCI partilhado sem a necessidade de cada operação de 1/0 ser analisada e verificada por um componente com a confiança do gestor de LPAR. US 2007/0168643A1 divulga tradução de endereços de DMA numa unidade de gestão de memória de 1/0 e compreende uma tabela de dispositivos com apontadores para diferentes tabelas incluindo tabelas de páginas de 1/0 e uma tabela de mapeamento de interrupções.
BREVE SUMÁRIO
As deficiências da técnica anterior são superadas e vantagens adicionais são fornecidas através do fornecimento de um método, de acordo com a reivindicação 1, e correspondente sistema e produto de programa de computador para facilitar o acesso à memória.
DESCRIÇÃO BREVE DAS DIVERSAS VISTAS DOS DESENHOS
Um ou mais aspetos da presente invenção são especificamente salientados e distintamente reivindicados como exemplo nas reivindicações no final da especificação. Os anteriores e outros objetos, drivers e vantagens da invenção são evidentes a partir da seguinte descrição -5- ΡΕ2585925 detalhada tomada em conjunto com os desenhos acompanhantes nos quais: A FIG. 1 representa uma forma de realização de um ambiente de computação para incorporar e utilizar um ou mais aspetos da presente invenção; A FIG. 2 representa uma forma de realização de mais detalhes sobre a memória de sistema e do hub de 1/0 da FIG. 1, de acordo com um aspeto da presente invenção; A FIG. 3A representa uma forma de realização de uma vista geral da lógica para registar um espaço de endereçamento DMA (Direct Memory Access - Acesso Direto à Memória) para um adaptador, de acordo com um aspeto da presente invenção; A FIG. 3B representa um exemplo da lógica para selecionar um formato de tradução, de acordo com um aspeto da presente invenção; A FIG. 3C representa uma forma de realização de vários detalhes do registo do espaço de endereçamento DMA para o adaptador, de acordo com um aspeto da presente invenção; A FIG. 4 representa uma forma de realização da lógica para processar uma operação de DMA, de acordo com um aspeto da presente invenção; -6- ΡΕ2585925 A FIG. 5Α representa um exemplo dos níveis de tradução empregues quando um endereço inteiro é utilizado para indexar em tabelas de tradução de endereços para traduzir o endereço e para aceder à página; A FIG. 5B representa um exemplo dos níveis de tradução empregues quando uma parte do endereço é ignorada quando se indexa nas tabelas de tradução de endereços, de acordo com um aspeto da presente invenção; A FIG. 5C representa exemplos de vários formatos compatíveis com CPU DAT utilizáveis em conformidade com um ou mais aspetos da presente invenção; A FIG. 5D representa exemplos de vários formatos de tradução de endereços estendidos de 1/0 utilizáveis em conformidade com um ou mais aspetos da presente invenção; A FIG. 6A representa uma forma de realização de uma instrução Modificar Controlos de Função PCI utilizada de acordo com um aspeto da presente invenção; A FIG. 6B representa uma forma de realização de um campo utilizado pela instrução Modificar Controlos de Função PCI da FIG. 6A, de acordo com um aspeto da presente invenção; A FIG. 6C mostra uma forma de realização de um outro campo utilizado pela instrução Modificar Controlos de -7- ΡΕ2585925
Função PCI da FIG. 6A, de acordo com um aspeto da presente invenção; A FIG. 6D representa uma forma de realização dos conteúdos de um bloco de informação de função (Function Information Block - FIB) utilizado de acordo com um aspeto da presente invenção; A FIG. 7 representa uma forma de realização de uma visão geral da lógica da instrução Modificar Controlos de Função PCI, de acordo com um aspeto da presente invenção; A FIG. 8 representa uma forma de realização da lógica associada a uma operação de registo de parâmetros de tradução de endereços de 1/0 que pode ser especificada por meio da instrução Modificar Controlos de Função PCI, em conformidade com um aspeto da presente invenção; A FIG. 9 representa uma forma de realização da lógica associada a uma operação de cancelamento de registo de parâmetros de tradução de endereços de 1/0 que podem ser especificados pela instrução Modificar Controlos de Função PCI, de acordo com um aspeto da presente invenção; A FIG. 10 representa uma forma de realização de um produto de programa de computador que incorpora um ou mais aspetos da presente invenção; -8- ΡΕ2585925 A FIG. 11 representa uma forma de realização de um sistema de computação anfitrião para incorporar e utilizar um ou mais aspetos da presente invenção; A FIG. 12 representa um exemplo adicional de um sistema de computação para incorporar e utilizar um ou mais aspetos da presente invenção; A FIG. 13 representa um outro exemplo de um sistema de computação compreendendo uma rede de computadores para incorporar e utilizar um ou mais aspetos da presente invenção; A FIG. 14 representa uma forma de realização de vários elementos de um sistema de computação para incorporar e utilizar um ou mais aspetos da presente invenção; A FIG. 15A representa uma forma de realização da unidade de execução do sistema de computação da FIG. 14 para incorporar e utilizar um ou mais aspetos da presente invenção; A FIG. 15B mostra uma forma de realização da unidade de ramificação do sistema de computação da FIG. 14 para incorporar e utilizar um ou mais aspetos da presente invenção; A FIG. 15C representa uma forma de realizaçao da -9- ΡΕ2585925 unidade de carga/armazenamento do sistema de computação da FIG. 14 para incorporar e utilizar um ou mais aspetos da presente invenção; e A FIG. 16 representa uma forma de realização de um sistema de computação anfitrião emulado para incorporar e utilizar um ou mais aspetos da presente invenção.
DESCRIÇÃO DETALHADA
De acordo com um aspeto da presente invenção, é fornecida uma capacidade para facilitar o acesso à memória, habilitando uma determinação em tempo de execução (por exemplo, o tempo de tradução de endereços) da qual o formato de tradução foi previamente aprovado para utilização no fornecimento de um endereço utilizável no acesso direto à memória de sistema. Num exemplo, um endereço inicial é fornecido por uma função de um adaptador (aqui referido como um endereço de entrada/saida (Input/Output - 1/0)) e um formato de tradução registado para a função é utilizado para fornecer um endereço, com base no endereço fornecido inicialmente, que é utilizável no acesso à memória de sistema. 0 formato de tradução pode indicar um tipo de tabela(s) de tradução a ser(em) utilizada(s), que nenhumas tabelas de tradução deverão ser obtidas, ou que a tradução pode ser ignorada, como exemplos.
Uma forma de realizaçao de um ambiente de - 10- ΡΕ2585925 computação para incorporar e utilizar um ou mais aspetos da presente invenção é descrito com referência à FIG. 1. Num exemplo, um ambiente de computação 100 é um servidor System z® fornecido pela International Business Machines Corporation. O System z® baseia-se na z/Architecture® fornecida pela International Business Machines Corporation. Os detalhes referentes à z/Architecture® são descritos numa publicação IBM® intitulada "z/Architecture Principies of Operation", Publicação IBM N° SA22-7832-07, Fevereiro de 2009. IBM®, System z® e z/Architecture® são marcas comerciais registadas da International Business Machines Corporation, Armonk, Nova Iorque. Outros nomes utilizados aqui podem ser marcas comerciais registadas, marcas comerciais ou nomes de produtos da International Business Machines Corporation ou de outras empresas.
Num exemplo, o ambiente de computação 100 inclui uma ou mais unidades centrais de processamento (Central Processing Units - CPUs) 102 acopladas a uma memória de sistema 104 (também conhecida por memória principal) por meio de um controlador de memória 106. Para aceder à memória de sistema 104, uma unidade central de processamento 102 emite uma solicitação de leitura ou escrita que inclui um endereço utilizado para aceder à memória de sistema . 0 endereço incluído na solicitação tipicamente não é diretamente utilizável para aceder à memória de sistema, e portanto é traduzido para um endereço que pode ser utilizado diretamente no acesso à memória de sistema. O endereço é traduzido através de um mecanismo de - 11 - ΡΕ2585925 tradução (XLATE) 108. Por exemplo, o endereço é traduzido a partir de um endereço virtual para um endereço real ou absoluto utilizando, por exemplo, tradução de endereços dinâmica (Dynamic Address Translation - DAT). A solicitação, incluindo o endereço traduzido, é recebida pelo controlador de memória 106. Num exemplo, o controlador de memória 106 é compreendido por hardware e é utilizado para arbitrar o acesso à memória de sistema e para manter a consistência da memória. Esta arbitragem é realizada para solicitações recebidas dos CPUs 102, bem como para as solicitações recebidas de um ou mais adaptadores 110. Tal como as unidades centrais de processamento, os adaptadores emitem solicitações para a memória de sistema 104 para obter acesso à memória de sistema.
Num exemplo, o adaptador 110 é um adaptador Interligação de Componentes Periféricos (Peripheral
Component Interconnect - PCI) ou PCI Express (PCIe) que inclui uma ou mais funções PCI. A função PCI emite uma solicitação que requer acesso à memória de sistema. A solicitação é encaminhada para um concentrador (hub) de entrada/saida 112 (por exemplo, um hub PCI) através de um ou mais comutadores (por exemplo, comutadores PCIe) 114. Num exemplo, o hub de entrada/saida é compreendido por hardware, incluindo uma ou mais máquinas de estado.
Tal como aqui utilizado, o termo adaptador inclui - 12- ΡΕ2585925 qualquer tipo de adaptador (por exemplo, um adaptador de armazenamento, adaptador de rede, adaptador de processamento, adaptador PCI, adaptador criptográfico, outro tipo de adaptadores de entrada/saída, etc.). Numa forma de realização, o adaptador inclui uma função de adaptador. No entanto, em outras formas de realização, um adaptador pode incluir uma pluralidade de funções do adaptador. Um ou mais aspetos da presente invenção são aplicáveis se um adaptador incluir uma função de adaptador ou uma pluralidade de funções de adaptador. Além disso, nos exemplos aqui apresentados, o adaptador é utilizado de forma intercambiável com uma função de adaptação (por exemplo, função PCI), a menos que seja indicado de outra maneira. 0 hub de entrada/saida inclui, por exemplo, um complexo de raiz 116 que recebe a solicitação de um comutador. A solicitação inclui um endereço de entrada/saida que pode precisar de ser traduzido, e por conseguinte, o complexo de raiz fornece o endereço a uma unidade de tradução de endereços e de proteção 118. Esta unidade é por exemplo, uma unidade de hardware utilizada para traduzir, se necessário, o endereço de 1/0 para um endereço utilizável diretamente para aceder à memória de sistema 104, tal como descrito em mais detalhe abaixo. A solicitação iniciada a partir do adaptador, incluindo o endereço (endereço traduzido ou inicial, se a tradução não for necessária), é fornecida ao controlador de - 13 - ΡΕ2585925 memória 106 através de, por exemplo, um bus de I/O-para-memória 120. O controlador de memória realiza a sua arbitragem e encaminha a solicitação com o endereço para a memória de sistema no momento apropriado.
Detalhes adicionais sobre a memória de sistema e o hub de entrada/saida são descritos com referência à FIG. 2. Nesta forma de realização, o controlador de memória não é mostrado. No entanto, o hub de I/O pode ser acoplado à memória de sistema diretamente ou através de um controlador de memória. Num exemplo, a memória de sistema 104 inclui um ou mais espaços de endereçamento 200. Um espaço de endereçamento é uma parte especifica de memória de sistema que foi atribuída a um determinado componente do ambiente de computação, tal como um adaptador específico. Num exemplo, o espaço de endereçamento é acessível por acesso direto à memória (Direct Memory Access - DMA) iniciado pelo adaptador, e portanto, o espaço de endereçamento é referido nos presentes exemplos como um espaço de endereçamento DMA. No entanto, noutros exemplos, o acesso direto à memória não é utilizado para aceder ao espaço de endereçamento.
Além disso, num exemplo, a memória de sistema 104 inclui tabelas de tradução de endereços 202 utilizadas para traduzir um endereço a partir de um que não é diretamente utilizável para aceder à memória de sistema para outro que é diretamente utilizável. Numa forma de realização, existe uma ou mais tabelas de tradução de endereços atribuídas a um espaço de endereçamento DMA, e essas uma ou mais tabelas - 14- ΡΕ2585925 de tradução de endereços são configuradas com base, por exemplo, na dimensão do espaço de endereçamento ao qual foram atribuídas, na dimensão das próprias tabelas de tradução de endereços, e/ou na dimensão da página (ou outra unidade de memória), a ser acedida.
Num exemplo, existe uma hierarquia de tabelas de tradução de endereços. Por exemplo, tal como mostrado na FIG. 2, existe uma tabela de primeiro nível 202a (por exemplo, uma tabela de segmentos) apontada por um apontador IOAT 218 (descrito abaixo), e uma segunda tabela de nível inferior 202b (por exemplo, uma tabela de páginas) apontada por uma entrada da tabela de primeiro nível 206a. Um ou mais bits de um endereço recebido 204 são utilizados para indexar na tabela 202a para localizar uma determinada entrada 206a, o que indica um determinada tabela de nível inferior 202b. Então, um ou mais bits do endereço 204 são utilizados para localizar uma entrada específica 206b nessa tabela. Neste exemplo, esta entrada fornece o endereço utilizado para localizar a página correta e bits adicionais no endereço 204 são utilizados para localizar uma determinada localização 208 na página para realizar uma transferência de dados. Ou seja, o endereço na entrada 206b e bits selecionados do endereço recebido PCI 204 são utilizados para fornecer o endereço diretamente utilizável para aceder à memória de sistema. Por exemplo, o endereço diretamente utilizável é formado a partir de uma concatenação de bits de ordem superior do endereço na entrada 206b (por exemplo, os bits 63:12, num exemplo de - 15- ΡΕ2585925 uma página de 4k) e os bits de ordem inferior selecionados a partir do endereço PCI recebido (por exemplo, os bits 11:0 para uma página de 4k).
Num exemplo, é um sistema operativo que atribui um espaço de endereçamento DMA a um determinado adaptador. Esta atribuição é realizada através de um processo de registo, que provoca uma inicialização (através de, por exemplo, software confiável), de uma entrada da tabela de dispositivos 210 para esse adaptador. A entrada da tabela de dispositivos está localizada numa tabela de dispositivos 211 localizada no hub de I/O 112. Por exemplo, a tabela de dispositivos 211 está localizada dentro da unidade de tradução de endereços e proteção do hub de I/O.
Num exemplo, a entrada da tabela de dispositivos (Device Table Entry - DTE) 210 inclui um certo número de campos, tais como os seguintes:
Formato 212: Este campo inclui uma pluralidade de bits para indicar vária informação, incluindo, por exemplo, o formato de tradução de endereços de uma tabela de nivel superior das tabelas de tradução de endereços. O formato de tradução de endereços indica o nivel da tabela (por exemplo, no exemplo acima, a tabela de primeiro nível), bem como um formato de tradução de endereços selecionado (também conhecido como um formato de tradução) a ser utilizado no fornecimento de um endereço diretamente utilizável no acesso à memória de sistema (por exemplo, - 16- ΡΕ2585925 compatível com CPU DAT, endereço estendido de 1/0, contorno, sem pesquisa, etc.);
Tamanho da Página 213: Este campo indica a dimensão de uma página (ou outra unidade de memória) a ser acedida;
Endereço base PCI 214 e limite PCI 216: Estes valores fornecem um intervalo utilizado para definir um espaço de endereçamento DMA e verificar se um endereço recebido (por exemplo, um endereço PCI) é válido; e
Apontador IOAT (Input/Output Address Translation - Tradução de Endereços de Entrada/Saída) 218: Este campo inclui um apontador para o nível mais elevado da tabela de tradução de endereços utilizada para o espaço de endereçamento DMA.
Noutras formas de realização, a DTE pode incluir mais, menos ou informação diferente.
Numa forma de realização, a entrada da tabela de dispositivos a ser utilizada numa tradução específica está localizada usando um identificador solicitante (Requestor Identifier - RID), localizado numa solicitação emitida por uma função PCI 220 relacionada com um adaptador (e/ou por uma parte do endereço). O identificador solicitante (por exemplo, um valor de 16 bits, especificando, por exemplo, um número de bus, número de dispositivo e número de função) - 17- ΡΕ2585925 está incluído na solicitação, bem como o endereço de 1/0 (por exemplo, um endereço PCIe de 64 bits) a ser utilizado para aceder à memória de sistema. A solicitação, incluindo o RID e o endereço de 1/0 é fornecida para, por exemplo, uma memória de conteúdo endereçável (Contents Addressable Memory - CAM) 230 através de, por exemplo, um comutador 114, que é utilizado para fornecer um valor de indice. Por exemplo, a CAM inclui múltiplas entradas, com cada entrada correspondendo a um índice na tabela de dispositivos. Cada entrada CAM inclui o valor de um RID. Se, por exemplo, o RID recebido corresponde ao valor contido numa entrada na CAM, o índice da tabela de dispositivos correspondente é utilizado para localizar a entrada da tabela de dispositivos. Isto é, a saída da CAM é utilizada para índice da tabela de dispositivos 211 para localizar a entrada da tabela de dispositivos 210. Se não existir correspondência, o pacote recebido é descartado sem ser realizado acesso à memória de sistema. (Noutras formas de realização, uma CAM ou outra pesquisa não é necessária e o RID é utilizado como índice.)
Subsequentemente, campos dentro da entrada da tabela de dispositivos são usados para garantir a validade do endereço e a configuração das tabelas de tradução de endereços. Por exemplo, o endereço de entrada na solicitação é verificado pelo hardware do hub de I/O (por exemplo, a unidade de tradução de endereços e de proteção) para garantir que está dentro dos limites definidos pelo Endereço base PCI 214 e limite PCI 216 armazenados na - 18- ΡΕ2585925 entrada da tabela de dispositivos localizada utilizando o RID da solicitação que forneceu o endereço. Isto assegura que o endereço está dentro do intervalo anteriormente registado e para o qual as tabelas de tradução de endereços são validamente configuradas.
Numa forma de realização, para se obter um endereço de memória de sistema (isto é, um endereço diretamente utilizável para aceder à memória de sistema), inicialmente, um processo de registo é realizado. Este processo de registo regista um espaço de endereçamento especifico, e portanto, as tabelas de tradução de endereços associadas, com um solicitante especifico, tal como uma função de adaptador especifica. Um exemplo de uma vista geral deste processo de registo é descrito com referência à FIG. 3A.
Com referência à FIG. 3A, inicialmente, um sistema operativo em execução dentro de uma das unidades centrais de processamento acopladas à memória de sistema determina a dimensão e localização do espaço de endereçamento a que o adaptador deve aceder, ETAPA 300. Num exemplo, a dimensão do espaço de endereçamento é determinado pelo endereço base PCI e limite PCI definidos pelo sistema operativo. O sistema operativo determina a base e o limite utilizando um ou mais critérios. Por exemplo, se o sistema operativo desejar ter endereços PCI mapeados diretamente para endereços virtuais de CPU, então a base e o limite são definidos como tal. Num outro - 19- ΡΕ2585925 exemplo, se for desejaado isolamento adicional entre adaptadores e/ou imagens do sistema operativo, então os endereços sendo utilizados são selecionados para fornecer espaços de endereçamento não sobrepostos e disjuntos. A localização também é especificada pelo sistema operativo, e é baseada, por exemplo, nas caracteristicas do adaptador.
Além disso, como parte do processo de registo, é feita uma determinação sobre qual formato de tradução de endereços deve ser registado para a função de adaptador, ETAPA 302. Ou seja, é feita uma determinação sobre qual formato deverá ser utilizado para fornecer endereços para a função de adaptador que são diretamente utilizáveis no acesso à memória de sistema.
De acordo com um aspeto da presente invenção, uma pluralidade de formatos de tradução de endereços está disponível e a partir dessa pluralidade de formatos, o sistema operativo seleciona um formato para a função de adaptador. Esta seleção é baseada, por exemplo, na configuração dos espaços de endereçamento, no tipo de adaptador, etc. Vários formatos possíveis incluem: a) Um formato de contorno em que a tradução de endereços é ignorada. Este formato pode ser utilizado quando o adaptador para o qual o registo está a ser realizado é um adaptador confiável. Um adaptador é considerado um adaptador confiável, se, por exemplo, o desenho de hardware do adaptador for suficientemente -20- ΡΕ2585925 robusto e protegido que os endereços não possam ser corrompidos. Por exemplo, um adaptador concebido internamente que forneça os seus próprios mecanismos de tradução e de proteção, ou um adaptador que seja gerido por firmware confiável pode ser considerado um adaptador confiável.
Tal como aqui utilizado, o firmware inclui, por exemplo, o microcódigo, milicódigo e/ou macrocódigo do processador. Inclui, por exemplo, as instruções de nivel de hardware e/ou estruturas de dados usadas em implementação de código de máquina de nivel superior. Numa forma de realização, inclui, por exemplo, código proprietário que é tipicamente entregue como microcódigo que inclui software ou microcódigo confiável especifico ao hardware subjacente e controla o acesso do sistema operativo ao hardware do sistema.
Com o acoplamento nativo de adaptadores de 1/0 por exemplo no System z®, é empregue Tradução de Endereços de I/0 (tradução de endereços de 1/0 - I0AT) para fornecer proteção e isolamento do acesso DMA à memória de sistema pelo adaptador. No entanto, existem classes de adaptadores que não precisam deste nivel extra de proteção, incluindo os descritos acima. Assim, para esses adaptadores, o formato de hypass pode ser selecionado; b) Um formato sem pesquisa no qual um endereço incluído numa solicitação inicial do adaptador é utilizável -21 - ΡΕ2585925 sem pesquisar qualquer tabela de tradução. Este formato pode ser selecionado quando a memória é contígua, a dimensão da página é conhecida, e o endereço é para uma área restrita (por exemplo, uma página de 4k ou de 1M) em que nenhuma procura quaisquer tabelas de tradução da memória de sistema é necessária. 0 endereço de acesso utilizável para aceder à memória de sistema (ou seja, o endereço resultante quando o formato sem pesquisa é selecionado) é derivado a partir do endereço do apontador IOAT. Por exemplo, para uma dimensão de página de 4k, os bits de ordem inferior do endereço PCI (por exemplo, os bits 11:00) são concatenados com os 52 bits superiores do apontador IOAT para obter um endereço resultante utilizável para aceder à memória de sistema; c) Um formato compatível com CPU DAT no qual as tabelas de tradução utilizadas para traduzir os endereços de I/O são compatíveis com as tabelas de tradução utilizadas para traduções CPU DAT. Ou seja, as tabelas de tradução de endereços devem ser utilizadas que são semelhantes e compatíveis com o que já está a ser utilizado para tradução de endereços dinâmica de CPU. Isto
proporciona facilidade de utilização para os sistemas operativos que estão familiarizados com a utilização destes tipos de tabelas; permite a partilha das tabelas entre o CPU e o adaptador de I/O; e proporciona determinadas eficiências do sistema operativo (por exemplo, z/Vif) na gestão dos espaços DMA dos seus clientes pagináveis. Existem vários formatos compatíveis com CPU DAT -22- ΡΕ2585925 disponíveis, tal como descrito em maior detalhe abaixo com referência à FIG. 5C; d) Um formato de tradução de endereços estendido de 1/0 em que as tabelas de tradução de endereços estendidas são utilizadas para as traduções de endereços de 1/0. Com este formato, as tabelas de tradução de endereços são dedicadas a operações de 1/0 e podem ser maiores em dimensão do que as normalmente utilizadas na tradução de endereços de CPU. Por exemplo, pode haver tabelas de 1M ou tabelas de páginas ainda maiores e/ou outras tabelas de tradução. Além disso, as dimensões dos diferentes níveis de tabelas de tradução, incluinda tabelas de páginas, podem ser diferentes umas das outras, e podem diferir das próprias páginas. Aumentar as dimensões tradicionais reduz as transações do bus e ajuda a melhorar o caching de traduções de 1/0. A dimensão da tabela de páginas e outras tabelas de tradução, bem como a dimensão da página, irá determinar quantos níveis de tradução são necessários. Exemplos de diferentes formatos de tradução de endereços estendidos de 1/0 são descritos em maior detalhe abaixo com referência à FIG. 5D.
Uma forma de realização do processo realizado pelo sistema de operação para selecionar um formato de tradução de endereços a partir de uma pluralidade de formatos de tradução de endereços disponíveis a ser utilizada para a função de adaptador para a qual o registo está a ser realizado é descrita com referência à FIG. 3B. -23 - ΡΕ2585925
Num exemplo, para fazer esta seleção, o sistema operativo considera as suas estruturas internas, como quer a memória endereçada, tipo de adaptador, etc.
Com referência à FIG. 3B, inicialmente, no presente exemplo, é feita uma determinação para saber se o adaptador para o qual o registo está a ser realizado é um adaptador confiável, PESQUISA 310. Esta determinação é feita, por exemplo, verificando uma indicação numa estrutura de dados (por exemplo, armazenada na memória). Se o sistema operativo decidir que o adaptador é um adaptador confiável, então uma nova determinação é feita para saber se a tradução deve ser ignorada, ETAPA 312. Por exemplo, o sistema operativo determina com base, por exemplo, num indicador armazenado, se o bypass é aceitável. Se o sistema operativo decidir que a tradução deve ser ignorada, então o formato de bypass é selecionado, ETAPA 313, e o endereço fornecido pelo solicitante é diretamente utilizável para aceder à memória de sistema.
Voltando à PESQUISA 310, se no entanto o adaptador não for um adaptador confiável, ou se o bypass não deve ser selecionado, PESQUISA 312, então uma nova determinação é feita para saber se o formato sem pesquisa deve ser selecionado, PESQUISA 314. Para esta seleção, o sistema operativo considera, por exemplo, se a memória é contígua, e a dimensão da página (ou outra unidade de memória). Se a configuração permite um formato sem pesquisa, então assumindo que quaisquer verificações de -24- ΡΕ2585925 validade estão passadas, um formato sem pesquisa é selecionado, ETAPA 316. Portanto, o endereço resultante da solicitação PCI é derivado diretamente a partir do endereço do apontador IOAT.
Voltando à PESQUISA 314, se o formato sem pesquisa não for selecionado, uma nova determinação é feita para saber se a solicitação deve usar tabelas de tradução de endereços com compatibilidade CPU DAT, PESQUISA 318. Mais uma vez, o sistema operativo considera as suas estruturas e endereçabilidade para decidir se quer um formato compatível com CPU DAT. Se este for o formato desejado, e assumindo que todas as verificações de validação estão passadas, então um formato compatível com CPU DAT é selecionado, ETAPA 320. Em concreto, neste exemplo, um formato compatível com CPU DAT é selecionado a partir de um ou mais formatos disponíveis, os quais são descritos abaixo.
No entanto, se a compatibilidade com CPU DAT não for selecionada, então uma nova determinação é feita para saber se um formato de tradução de endereços estendido de I/O é desejado, PESQUISA 322. Isto é, uma vez mais, decidido com base nas estruturas a serem usadas e no endereçamento de memória, como exemplos. Se um formato de tradução de endereços estendido de I/O for desejado, então assumindo que quaisquer verificações de validade estão passadas, um formato de tradução de endereços estendido de I/O é selecionado, ETAPA 324. Em concrteo, neste exemplo, -25- ΡΕ2585925 um formato de tradução de endereços estendido de 1/0 é selecionado a partir de um ou mais formatos disponíveis, tal como descrito abaixo.
Se, no entanto, é respondido não a todas as pesquisas, então um formato específico é selecionado pelo sistema operativo em nome do solicitante, ETAPA 326. Por exemplo, um formato padrão pode ser selecionado. Este formato padrão pode ser um formato compatível com CPU DAT ou um formato de tradução de endereços estendido de 1/0, ou mesmo outro formato, como tabelas de tradução de endereços que são criadas apenas para 1/0, mas estão mais estreitamente relacionadas com tabelas de formato CPU DAT. Existem muitas possibilidades. Além disso, embora neste exemplo as pesquisas da FIG. 3B estejam numa determinada ordem, noutros exemplos, estas podem estar em ordens diferentes.
Voltando à FIG. 3A, subsequentemente, assumindo que são necessárias tabelas de tradução de endereços, uma ou mais tabelas de tradução de endereços são criadas para cobrir esse espaço de endereçamento DMA, ETAPA 304. Num exemplo, a criação inclui a construção das tabelas e a colocação dos endereços apropriados dentro das entradas da tabela. Como um exemplo, uma das tabelas de tradução é uma tabela de páginas 4k com 512 entradas de 64 bits, e cada entrada inclui um endereço de página de 4k compatível com o espaço de endereçamento atribuído. -26- ΡΕ2585925
Depois disso, o espaço de endereçamento DMA é registado para o adaptador, ETAPA 306, como descrito em maior detalhe com referência à FIG. 3C. Neste exemplo, supõe-se que existe uma função PCI por adaptador, e portanto, um ID do solicitante por adaptador. Esta lógica é realizada, por exemplo, por uma unidade central de processamento ligada à memória de sistema, que responde a uma solicitação do sistema operativo.
Com referência à FIG. 3C, inicialmente, numa forma de realização, uma entrada da tabela de dispositivos disponível é selecionada que deve corresponder ao ID do solicitante do adaptador, ETAPA 350. Isto é, o ID do solicitante irá ser utilizado para localizar uma entrada da tabela de dispositivos.
Além disso, o endereço base PCI e o limite PCI são armazenados na entrada da tabela de dispositivos, ETAPA 352. Além disso, o formato da tabela de tradução de endereços de nível mais elevado é armazenado no campo de formato da entrada da tabela de dispositivos, ETAPA 354. Por exemplo, o campo de formato inclui uma pluralidade de bits, e um ou mais destes bits indica o formato da tabela de nível mais elevado e o formato de tradução de endereços selecionado (por exemplo, nível de segmento, compatível como CPU DAT) . Numa outra forma de realização, um ou mais bits indicam o nível mais elevado, e um ou mais outros bits indicam o formato de tradução determinado (por exemplo, bypass, sem pesquisa, um formato específico compatível com -27- ΡΕ2585925 CPU DAT, um formato de tradução de endereços estendido específico de 1/0, etc).
Adicionalmente, o apontador de tradução de endereços de entrada/saída (Input/Output Address Translation - IOAT) utilizado para apontar para a tabela de tradução de endereços de nível mais elevado (ou página, no caso de sem pesquisa), se houver, é armazenado na entrada da tabela de dispositivos, ETAPA 356. Isto conclui o processo de registo.
Recetivo a realizar o registo, um espaço de endereçamento DMA e correspondentes tabelas de tradução de endereços, se existirem, estão prontos para utilização, bem como uma entrada da tabela de dispositivos. Os detalhes sobre o processamento de uma solicitação emitida por um solicitante, tal como uma função de adaptador, para aceder à memória de sistema são descritos com referência à FIG. 4. 0 processamento descrito abaixo é realizado pelo hub de 1/0. Num exemplo, é a unidade de tradução de endereços e de proteção do hub de 1/0 que realiza a lógica.
Numa forma de realização, inicialmente, uma solicitação de DMA é recebida no hub de entrada/saída, ETAPA 400 . Por exemplo, uma função PCI emite uma solicitação que é encaminhada para o hub PCI através, por exemplo, de um comutador PCI. Usando o ID solicitante na solicitação, a entrada da tabela de dispositivos apropriada é localizada, ETAPA 402. Depois disso, é feita uma determinação para saber se a entrada da tabela de -28- ΡΕ2585925 dispositivos é válida, PESQUISA 404. Num exemplo, a validade é determinada pela verificação de um bit de validade na própria entrada. Este bit é definido, por exemplo, em resposta à execução de uma solicitação de função de ativação pelo sistema operativo. Se ativado, o bit é definido como, por exemplo, um (ou seja, válido), caso contrário, ele permanece a zero (ou seja, inválido). Num outro exemplo, o bit pode ser definido quando o processo de registo está completo.
Se a entrada na tabela de dispositivos for inválida, um erro é apresentado, ETAPA 405. Caso contrário, uma nova determinação é feita para saber se o endereço PCI fornecido na solicitação é menor do que o endereço base PCI armazenado na entrada da tabela de dispositivos, PESQUISA 406. Se for, então o endereço está fora de um intervalo válido e um erro é fornecido, ETAPA 407. No entanto, se o endereço PCI for maior ou igual ao endereço base, então uma outra determinação é feita para saber se o endereço PCI é maior do que o valor limite de PCI na entrada da tabela de dispositivos, PESQUISA 408. Se o endereço PCI for maior do que o limite, então uma vez mais, um erro é apresentado uma vez que o endereço está fora do intervalo válido, ETAPA 409. No entanto, se o endereço estiver dentro de um intervalo válido, então o processamento continua.
Num exemplo, uma determinação é feita para saber se o formato de tradução de endereços especificado na entrada da tabela de dispositivos indica tradução bypass, -29- ΡΕ2585925 PESQUISA 410. Se assim for, então o endereço é passado diretamente para o controlador de memória através do bus de I/O para aceder à memória sem qualquer procura de entradas de tradução. O hub de I/O continua o processamento para permitir uma procura/armazenamento dos dados no endereço, ETAPA 426.
Voltando à PESQUISA 410, se o formato não indicar bypass, então uma outra investigação é feita para saber se o formato indica a capacidade de aceder diretamente à memória com base no apontador IOAT sem necessidade de qualquer procura de tabelas de tradução de endereços, PESQUISA 412. Se nenhuma pesquisa for indicada, então o endereço resultante é derivado a partir do apontador IOAT e não é necessária qualquer procura de tabelas de tradução de endereços da memória de sistema, ETAPA 414. O endereço resultante é enviado para o controlador de memória e utilizado para localizar a página e uma entrada especifica na página. Por exemplo, se a dimensão da página for de 4k, então os bits 11:00 são utilizados como um deslocamento do apontador IOAT. O hub de I/O continua o processamento para permitir uma procura/armazenamento dos dados nessa entrada da página, ETAPA 426.
Voltando à PESQUISA 412, por outro lado, se for necessária a utilização de tabelas de tradução, então o formato fornecido na entrada da tabela de dispositivos é utilizado para determinar o tipo de tabela de tradução (por exemplo, uma tradução de endereços compatível com CPU DAT -30- ΡΕ2585925 ou uma tradução de endereços estendida de 1/0) e para determinar os bits de endereços PCI no endereço a ser utilizado para tradução de endereços, ETAPA 416. Por exemplo, se o formato indicar um formato de tradução de endereços estendido de 1/0 com páginas de 4k e tabelas de tradução de endereços de 4k, que são descritas abaixo, e se a tabela de nivel superior for uma tabela de primeiro nível com páginas de 4k, então os bits 29:21 do endereço são utilizados para indexar na tabela de primeiro nível; os bits 20:12 são utilizados para indexar na tabela de páginas, e os bits 11:00 são utilizados para indexar na página. Os bits utilizados dependerão de quantos bits são necessários para indexar na página ou tabela de dada dimensão. Por exemplo, para uma página de 4k com endereçamento ao nível de byte, 12 bits são utilizados para endereçar 4096 bytes; e para uma tabela de páginas de 4k com 512 entradas, 8 bytes cada, 9 bits são utilizados para endereçar 512 entradas, etc.
Em seguida, o hub PCI procura a entrada da tabela de tradução de endereços apropriada, ETAPA 418. Por exemplo, inicialmente, a tabela de tradução de nível mais elevado é localizada utilizando o apontador IOAT da entrada da tabela de dispositivos. Então, bits do endereço (aqueles após os bits de ordem elevada utilizados para validade e não tradução, por exemplo, os bits 29:21 no exemplo acima) são utilizados para localizar a entrada específica dentro dessa tabela. -31 - ΡΕ2585925
Uma determinação é então feita com base, por exemplo, no formato fornecido na entrada da tabela de dispositivos, se a entrada de tradução de endereços localizada tem um formato correto, PESQUISA 420. Por exemplo, o formato na entrada da tabela de dispositivos é comparado com um formato indicado na entrada de tradução de endereços. Se for igual, então o formato na entrada da tabela de dispositivos é válido. Se não, é indicado um erro, ETAPA 422; caso contrário, o processamento continua com uma determinação para saber se esta é a última tabela a ser processada, PESQUISA 424. Ou seja, uma determinação é feita para saber se existem outras tabelas de tradução de endereços necessárias para obter o endereço real ou absoluto, ou se a entrada da tabela de nível mais baixo foi localizada. Esta determinação é feita com base no formato e dimensão fornecidos das tabelas que já foram processadas. Se não for a última tabela, então o processamento continua com a ETAPA 418. Caso contrário, o hub de I/O continua o processamento para habilitar uma procura ou armazenamento dos dados no endereço traduzido, ETAPA 426. Por exemplo, o hub de 1/0 encaminha o endereço determinado, o qual é determinado com base no endereço inicial e no formato de tradução selecionado, para o controlador de memória (ou para a memória diretamente), que o utiliza para procurar e/ou armazenar dados de/para a memória DMA.
Detalhes adicionais sobre a utilização de tabelas de tradução e de formatos de tradução diferentes são descritos com referência às FIGs. 5A-5D. Num exemplo, tal -32- ΡΕ2585925 como mostrado com referência às FIGs. 5A-5B, o número de níveis de tradução, e portanto, o número de procuras necessário para realizar a tradução são reduzidas, por exemplo, ignorando os bits de ordem superior de um endereço durante a tradução e utilizando apenas os bits de ordem inferior para atravessar as tabelas de tradução. A designação de bits de ordem superior e bits de ordem inferior baseia-se, por exemplo, na dimensão do espaço de endereçamento DMA atribuído ao adaptador. A utilização de um endereço parcial versus o endereço completo é mostrado adicionalmente nos exemplos seguintes.
Com referência inicialmente à FIG. 5A, um exemplo é representado no qual o endereço completo é utilizado na tradução de endereços/acesso à memória. Com esta técnica anterior, são necessários seis níveis de tabelas de tradução, incluindo a tabela de páginas. 0 início da tabela de nível mais elevado (ou seja, o nível 5 da tabela neste exemplo) é apontado por um apontador IOAT, e então bits do endereço PCI são utilizados para localizar uma entrada na tabela. Cada entrada da tabela de tradução aponta para o início de uma tabela de tradução de nível inferior ou para uma página (por exemplo, uma entrada na tabela de nível 5 aponta para o início de uma tabela de nível 4, etc.)
Neste exemplo, o espaço de endereçamento DMA (DMA Address Space - DMAAS) é de 6M em dimensão, e cada tabela é de 4k bytes com um máximo de 512 entradas de 8 bytes (exceto a tabela de nível 5, que suporta apenas 128 -33- ΡΕ2585925 entradas com base na dimensão do endereço) . 0 endereço é, por exemplo, de 64 bits: FFFF C000 0009 C600 . O início da tabela de nível 5 é apontado pelo apontador IOAT e os bits 63:57 do endereço PCI são utilizados para indexar na tabela de nível 5 para localizar o início da tabela de nível 4; os bits 56:48 do endereço PCI são utilizados para indexar na tabela de nível 4 para localizar o início da tabela de nível 3; os bits 47:39 são utilizados para indexar na tabela de nível 3 para localizar o início da tabela de nível 2; os bits 38:30 são utilizados para indexar a tabela de nível 2 para localizar o início da tabela de nível 1; os bits 29:21 são utilizados para indexar a tabela de nível 1 para localizar o início da tabela de páginas; os bits 20:12 são utilizados para indexar na tabela de páginas para localizar o início da página; e os bits 11:0 são utilizados para localizar a entrada na página de 4k. Assim, neste exemplo, todos os bits de endereço são utilizados para tradução/acesso.
Isto está em contraste com o exemplo na FIG. 5B, em que o espaço de endereçamento tem a mesma dimensão (por exemplo 6M) e o endereço é a mesmo, mas a técnica de tradução ignora alguns dos bits de endereço durante a tradução Neste exemplo, os bits 63:30 do endereço são ignorados para tradução. O apontador IOAT aponta para o início da tabela de nível 1 e os bits 29:21 do endereço PCI são utilizados para indexar na tabela de nível 1 para localizar o início da tabela de páginas; os bits 20:12 são utilizados para indexar na tabela de páginas apropriada -34- ΡΕ2585925 para localizar o início da página; e os bits 11:0 são utilizados para indexar na página de 4k.
Tal como mostrado, a tabela de nível 1 500 inclui três entradas 502, cada uma fornecendo um endereço para uma das três tabelas de páginas 504. O número de tabelas de páginas necessário, e portanto o número de tabelas de outros níveis depende, por exemplo, da dimensão do espaço de endereçamento DMA, da dimensão das tabelas de tradução, e/ou da dimensão das páginas. Neste exemplo, o espaço de endereçamento DMA é de 6M, e cada tabela de páginas é de 4k, tendo até 512 entradas. Portanto, cada tabela de páginas pode mapear até 2M de memória (4k * 512 entradas). Assim, três tabelas de páginas são necessárias para o espaço de endereçamento de 6M. A tabela de nível 1 é capaz de manter as três entradas, uma para cada tabela de páginas, e assim não são necessários mais níveis de tabelas de tradução de endereços neste exemplo.
Além disso, conforme descrito acima, diferentes formatos das tabelas de tradução de endereços podem ser utilizados para tradução de endereços, e podem existir variações entre os formatos. Por exemplo, podem existir vários formatos compatíveis com CPU DAT, exemplos dos quais são descritos com referência à FIG. 5C. Tal como mostrado, um formato compatível com CPU DAT é um formato compatível com CPU DAT com página de 4k 550, e outro é um formato compatível com CPU DAT com página de 1M 552, como exemplos. O número de bits mostrado é o número de bits de endereço -35- ΡΕ2585925 utilizado para indexar nessa página ou tabela (ou de outro modo localizar uma entrada na referida página ou tabela). Por exemplo, 12 bits 554 de um endereço PCI são utilizados como um deslocamento de byte numa página de 4k 556; 8 bits 558 são utilizados como um índice numa tabela de páginas 560; 11 bits 562 são utilizados como um índice numa tabela de segmentos 564, etc. Localizada sob a tabela de tradução de endereços indicada está a dimensão máxima do espaço de endereçamento suportado por esta tabela de tradução de endereços. Por exemplo, a tabela de páginas 560 suporta um espaço de endereçamento DMA de 1M; a tabela de segmentos 564 suporta um espaço de endereçamento DMA de 2G, etc. Nesta figura, bem como na FIG. 5D, K = kilobytes, M = megabytes, G= gigabytes, T = terabytes, P = petabytes e E = exabytes.
Tal como representado, à medida que a dimensão da página aumenta, o número de níveis das tabelas de tradução diminui. Por exemplo, para a página de 4k 556, uma tabela de páginas é necessária, mas não é necessária para a página de 1M. Outros exemplos e variações são possíveis. Vários exemplos de formatos de tradução de endereços estendidos de I/O são representados na FIG. 5D. Por exemplo, os seguintes formatos são mostrados: uma tabela de tradução de endereços de 4k com páginas de 4k 570; tabelas de tradução de endereços de 1M com páginas de 4k 572; e tabelas de tradução de endereços de 1M com páginas de 1M 574. Tal como acontece com os formatos -36- ΡΕ2585925 compatíveis com CPU DAT, o número de bits listados são os bits utilizados para localizar uma entrada na tabela especifica. Por exemplo, no número de referência 576, os 12 bits são um deslocamento na página de 4k. Do mesmo modo, no número de referência 578, os 9 bits são utilizados para indexar numa tabela de páginas de 1/0. Esta tabela de páginas de 1/0 permite um espaço de endereçamento DMA que tenha uma dimensão de 2M. Existem muitos outros exemplos.
Numa implementação especifica, para realizar o registo de um espaço de endereçamento DMA para o adaptador, uma instrução referida como uma instrução Modificar Controlos de Função PCI (Modify PCI Function Controls -MPFC), é utilizada. Por exemplo, o sistema operativo determina qual o formato de tradução de endereços que pretende utilizar, constrói as tabelas de tradução de endereços para esse formato, e em seguida emite a instrução MPFC com esse formato incluído como um operando da instrução. Num exemplo, o formato e outros operandos da instrução são incluídos num bloco de informação de função (descrito abaixo), que é um operando da instrução. 0 bloco de informação de função é depois utilizado para atualizar a DTE, e numa forma de realização, opcionalmente uma entrada da tabela de funções (Function Table Entry - FTE), que inclui parâmetros operacionais do adaptador.
Uma forma de realização dos detalhes relacionados com esta instrução, e especificamente o processo de registo, são descritos com referência às FIGs. 6A-9. Com -37- ΡΕ2585925 referência à FIG. 6A, uma instrução Modificar Controlos de Função PCI 600 inclui, por exemplo, um código de operação (op code) 602 indicando a instrução Modificar Controlos de Função PCI; um primeiro campo 604 especificando uma localização em que estão incluídas vária informação sobre a função de adaptador para a qual os parâmetros operacionais estão a ser estabelecidos; e um segundo campo 606 especificando uma localização a partir da qual um bloco de informação de função (Function Information Block - FIB) PCI é procurado. Os conteúdos das localizações designadas por Campos 1 e 2 encontram-se descritos abaixo.
Numa forma de realização, o Campo 1 designa um registo geral que inclui uma variedade de informação. Tal como mostrado na FIG. 6B, os conteúdos do registo incluem, por exemplo, um identificador (handle) de função 610, que identifica a handle da função de adaptador em nome da qual a instrução de modificação está a ser realizada; um espaço de endereçamento 612 designando um espaço de endereçamento na memória de sistema relacionado com a função de adaptador designada pela handle de função; um controlo de operação 614 que especifica a operação a ser realizada para a função de adaptador; e o estado 616 que fornece o estado em relação à instrução quando a instrução termina com um código predefinido.
Numa forma de realização, a handle de função inclui por exemplo um indicador de ativação indicando se a handle foi ativada, um número de função que identifica uma -38- ΡΕ2585925 função de adaptador (este é um identificador estático e pode ser utilizado para indexar numa tabela de funções); e um número de instância especificando a instância especifica desta handle de função. Existe uma handle de função para cada função de adaptador, e é utilizada para localizar uma entrada da tabela de funções (Function Table Entry - FTE) dentro da tabela de funções. Cada entrada da tabela de funções inclui parâmetros operacionais e/ou outra informação relacionada com a sua função de adaptador. Como um exemplo, uma entrada da tabela de funções inclui: Número de Instância: Este campo indica uma instância especifica da handle da função de adaptador relacionada com a entrada da tabela de funções; índice l...n da Entrada da Tabela de Dispositivos (Device Table Entry - DTE) : Podem existir um ou mais índices da tabela de dispositivos, e cada índice é um índice para uma tabela de dispositivos para localizar uma entrada da tabela de dispositivos (DTE). Existe uma ou mais entradas da tabela de dispositivos por função de adaptador, e cada entrada inclui informação associada à sua função de adaptador, incluindo informação utilizada para processar solicitações da função de adaptador (por exemplo, solicitações DMA, solicitações MSI) e informação referente a solicitações relacionadas com a função de adaptador (por exemplo, instruções PCI). Cada entrada da tabela de dispositivos está associada com um espaço de endereçamento na memória de sistema atribuída à função de adaptador. Uma -39- ΡΕ2585925 função de adaptador pode ter um ou mais espaços de endereçamento dentro da memória de sistema atribuída à função de adaptador.
Indicador de Ocupação: Este campo indica se a função de adaptador está ocupada;
Indicador de Estado de Erro Permanente: Este campo indica se a função de adaptador está num estado de erro permanente;
Indicador de Início de Recuperação: Este campo indica se a recuperação foi iniciada para a função de adaptador;
Indicador de Permissão: Este campo indica se o sistema operativo tentando controlar a função de adaptador tem autoridade para fazê-lo;
Indicador de Ativação: Este campo indica se a função de adaptador está ativa (por exemplo, 1 = ativa, 0 = inativa);
Identificador de Solicitante (Requestor
Identifier - RID) : Este é um identificador da função de adaptador, e inclui, por exemplo, um número de bus, um número de dispositivo e um número de função.
Num exemplo este campo é utilizado para os -40- ΡΕ2585925 acessos de um espaço de configuração da função de adaptador. (A memória de um adaptador pode ser definida como espaços de endereçamento, incluindo, por exemplo, um espaço de configuração, um espaço de 1/0 e/ou um ou mais espaços de memória.) Num exemplo, o espaço de configuração pode ser acedido através da especificação do espaço de configuração numa instrução emitida pelo sistema operativo (ou outra configuração) para a função de adaptador. Especificado na instrução está um deslocamento no espaço de configuração e uma handle de função utilizada para localizar a entrada da tabela de funções apropriada que inclui o RID. 0 firmware recebe a instrução e determina que é para um espaço de configuração. Portanto, utiliza o RID para gerar uma solicitação para o hub de I/O, e o hub de I/0 cria uma solicitação de acesso ao adaptador. A localização da função de adaptador é baseada no RID, e o deslocamento especifica um deslocamento no espaço de configuração da função de adaptador.
Registo de Endereço Base (Base Address Register -BAR) (1 a n): Este campo inclui uma pluralidade de números inteiros sem sinal, designados como BAR0-BARn, que estão associados com a função de adaptador originalmente especificada, e cujos valores são também armazenados nos registos de endereço base associados com a função de adaptador. Cada BAR especifica o endereço inicial de um espaço de memória ou espaço de 1/0 no interior da função de adaptador, e indica também o tipo de espaço de endereçamento, ou seja, se se trata de um espaço de memória -41 - ΡΕ2585925 de 64 ou 32 bits, ou um espaço de 1/0 de 32 bits, como exemplos;
Num exemplo, é utilizado para acessos ao espaço de memória e/ou ao espaço de 1/0 da função de adaptador. Por exemplo, um deslocamento fornecido numa instrução para aceder à função de adaptador é adicionado ao valor no registo de endereço base associado ao espaço de endereçamento indicado na instrução para obter o endereço a ser utilizado para aceder à função de adaptador. 0 identificador de espaço de endereçamento fornecido na instrução identifica o espaço de endereçamento dentro da função de adaptador a ser acedido e o BAR correspondente a ser utilizado;
Dimensão l...n: Este campo inclui uma pluralidade de números inteiros sem sinal, designados como DIMENSÃOo-DIMENSÃOn. 0 valor de um campo Dimensão, quando diferente de zero, representa a dimensão de cada espaço de endereçamento com cada entrada correspondendo a um BAR previamente descrito.
Detalhes adicionais sobre BAR e Dimensão são descritos abaixo. 1. Quando um BAR não é implementado para uma função de adaptador, o campo BAR e o seu campo dimensão correspondente são ambos armazenados como zeros. -42- ΡΕ2585925 2. Quando um campo BAR representa ou um espaço de endereçamento de 1/0 ou um espaço de endereçamento de memória de 32 bits, o campo dimensão correspondente é diferente de zero e representa a dimensão do espaço de endereçamento. 3. Quando um campo BAR representa um espaço de endereçamento de memória de 64 bits, a. 0 campo BARn representa os bits menos significativos do endereço. b. 0 próximo campo BARn+i consecutivo representa os bits de endereço mais significativos. c. 0 campo DIMENSÃOn correspondente é diferente de zero e representa a dimensão do espaço de endereçamento. d. 0 campo DIMENSÃOn+1 correspondente não é significativo e é armazenado como zero.
Informação de Encaminhamento Interno: Esta informação é utilizada para realizar encaminhamento especifico para o adaptador. Inclui, por exemplo, o nó, o chip do processador, e informação de endereçamento do hub, como exemplos.
Indicação do Estado: Fornece uma indicação sobre, por exemplo, se as operações de carga/armazenamento estão bloqueadas ou se o adaptador está em estado de erro, bem -43- ΡΕ2585925 como outras indicações.
Num exemplo, o indicador de ocupaçao, o indicador de estado de erro permanente, e o indicador de inicio de recuperação são definidos com base na monitorização realizada pelo firmware. Além disso, o indicador de permissão é definido, por exemplo, com base na política, e a informação de BAR é baseada em informação de configuração descoberta durante um bus walk do processador (por exemplo, firmware do processador). Outros campos podem ser definidos com base na configuração, inicialização e/ou eventos. Noutras formas de realização, a entrada da tabela de funções pode incluir mais, menos ou informação diferente. A informação incluída pode depender das operações suportadas ou ativadas para a função de adaptador.
Com referência à FIG. 6C, num exemplo, o Campo 2 designa um endereço lógico 620 de um bloco de informação de função (Function Information Block - FIB) PCI, que inclui informação sobre a função de adaptador associada. O bloco de informação de função é utilizado para atualizar uma entrada da tabela de dispositivos e/ou entrada da tabela de funções (ou outra localização) relacionada com a função de adaptador. A informação é armazenada no FIB durante a inicialização e/ou configuração do adaptador, e/ou sensível a eventos específicos.
Detalhes adicionais sobre um bloco de informação de função (FIB) são descritos com referência à FIG. 6D. -44- ΡΕ2585925
Numa forma de realização, um bloco de informação de função 650 inclui os seguintes campos:
Formato 651: Este campo especifica o formato do FIB.
Controlo de Interceção 652: Este campo é utilizado para indicar se a execução por um convidado (guest) de instruções específicas por um guest em modo paginável resulta em interceção de instruções;
Indicação de Erro 654: Este campo inclui a indicação de estado de erro para acesso direto à memória e interrupções do adaptador. Quando o bit é definido (ou seja, 1), um ou mais erros foram detetados durante a realização de acesso direto à memória ou interrupção do adaptador para a função de adaptador;
Carga/Armazenamento Bloqueado 656: Este campo indica se as operações de carga/armazenamento estão bloqueadas;
Função PCI Válida 658: Este campo inclui um controlo de ativação para a função de adaptador. Quando o bit é definido (ou seja, 1), a função de adaptador é considerada como estando ativa para operações de I/O;
Espaço de Endereçamento Registado 660: Este campo inclui um controlo de ativação de acesso direto à memória -45- ΡΕ2585925 para uma função de adaptador. Quando o campo é definido (ou seja, 1) o acesso direto à memória é ativado;
Dimensão da Página 661: Este campo indica a dimensão da página ou outra unidade de memória a ser acedida por um acesso de memória DMA;
Endereço Base PCI (PCI Base Address - PBA) 662 : Este campo é um endereço base para um espaço de endereçamento na memória de sistema atribuído para a função de adaptador. Representa o menor endereço virtual que uma função de adaptador pode utilizar para acesso direto à memória para o espaço de endereçamento DMA especificado;
Limite Endereço PCI (PCI Address Limit - PAL) 664: Este campo representa o maior endereço virtual que uma função de adaptador pode utilizar para acesso no espaço de endereçamento DMA especificado;
Apontador de Tradução de Endereços de
Entrada/Saída (Input/Output Address Translation Pointer -IOAT) 666: 0 apontador de tradução de endereços de entrada/saída designa a primeira de quaisquer tabelas de tradução utilizadas por uma tradução de endereços virtuais PCI, ou pode designar diretamente o endereço absoluto de uma trama de armazenamento que é o resultado da tradução;
Subclasse de Interrupção (Interrupt Subclass -ISC) 668: Este campo inclui a subclasse de interrupção -46- ΡΕ2585925 utilizada para apresentar interrupções de adaptador para a função de adaptador; Número de Interrupções (Number of Interruptions -NOI) 670: Este campo designa o número de códigos de interrupção distintos aceites para uma função de adaptador. Este campo também define a dimensão, em bits, do vetor de bit de interrupção de adaptador designado por um campo de deslocamento de endereço de vetor de bit de interrupção de adaptador e um campo de deslocamento de vetor de bit de interrupção de adaptador;
Endereço de Vetor de Bit de Interrupção de Adaptador (Adapter Interruption Bit Vector - AIBV) 672: Este campo especifica um endereço do vetor de bit de interrupção de adaptador para a função de adaptador. Este vetor é utilizado no processamento de interrupções;
Deslocamento de Vetor de Bit de Interrupção de Adaptador 674: Este campo especifica o deslocamento do primeiro bit de vetor de bit de interrupção de adaptador para a função de adaptador;
Endereço de Bit de Sumário de Interrupção de Adaptador (Adapter Interruption Summary Bit Address - AISB) 676: Este campo fornece um endereço que designa o bit de sumário de interrupção de adaptador, que é opcionalmente utilizado no processamento de interrupções; -47 - ΡΕ2585925
Deslocamento de Bit de Sumário de Interrupção de Adaptador 678: Este campo fornece o deslocamento no vetor de bit de sumário de interrupção de adaptador;
Endereço de Bloco de Medição de Função (Function Measurement Block - FMB) 680: Este campo fornece um endereço de um bloco de medição de função utilizado para coletar medições a respeito da função de adaptador;
Chave de Bloco de Medição de Função 682: Este campo inclui uma chave de acesso para aceder ao bloco de medição de função;
Controlo de Notificação de Bit de Sumário 684: Este campo indica se existe um vetor de bit de sumário a ser utilizado; Símbolo (Token) de Autorização de Instrução 686: Este campo é utilizado para determinar se um convidado de modo de armazenamento paginável está autorizado a executar instruções PCI sem intervenção do anfitrião.
Num exemplo, na z/Architecture®, um convidado paginável é interpretativamente executado através da instrução Início de Execução Interpretativa (Start Interpretive Execution - SIE), no nível 2 de interpretação. Por exemplo, o hipervisor de partição lógica (Logical Partition - LPAR) executa a instrução SIE para iniciar a partição lógica na memória fixa, física. Se z/VM® for o -48- ΡΕ2585925 sistema operativo nessa partição lógica, ele emite a instrução SIE para executar as suas máquinas hóspedes (virtuais) no seu armazenamento V = V (virtual). Portanto, o hipervisor de LPAR utiliza SIE de nível 1, e o hipervisor de z/VM® utiliza SIE de nível 2; e
Formato de Tradução de Endereços 687: Este campo indica um formato selecionado para tradução de endereços da tabela de tradução de nivel mais elevado a ser utilizada na tradução (por exemplo, uma indicação da tabela de nível mais elevado (por exemplo, tabela de segmentos, 3a região, etc) e uma indicação do formato selecionado (por exemplo, compatível com CPU DAT, formato de tradução de endereços estendido de 1/0, um formato de bypass, um formato sem pesquisa). 0 bloco de informação de função designado na instrução Modificar Controlos de Função PCI é utilizado para modificar uma entrada da tabela de dispositivos selecionada, uma entrada da tabela de funções e/ou outros controlos de firmware associados à função de adaptador designada na instrução. Ao modificar a entrada da tabela de dispositivos, a entrada da tabela de funções e/ou outros controlos de firmware, alguns serviços são fornecidos para o adaptador. Estes serviços incluem, por exemplo, interrupções de adaptador; traduções de endereços; reinicialização do estado de erro; reinicialização de carga/armazenamento bloqueada; definição dos parâmetros de medição de função; e definição de controlo de interceção. -49- ΡΕ2585925
Uma forma de realização da lógica associada à instrução Modificar Controlos de Função PCI é descrita com referência à FIG. 7. Num exemplo, a instrução é emitida por um sistema operativo (ou outra configuração) e executada pelo processador (por exemplo, firmware) que executa o sistema operativo. Nos presentes exemplos, a instrução e as funções de adaptador são baseadas em PCI. Contudo, noutros exemplos, pode ser utilizada uma arquitetura de adaptador diferente e instruções correspondentes.
Num exemplo, o sistema operativo fornece os seguintes operandos para a instrução (por exemplo, num ou mais registos designados pela instrução): a handle da função PCI; o identificador de espaço de endereçamento DMA; um controlo de operação; e um endereço do bloco de informação de função.
Com referência à FIG. 7, numa primeira fase é feita uma determinação para saber se uma facilidade permitindo uma instrução Modificar Controlos de Função PCI está instalada, PESQUISA 700. Esta determinação é feita, por exemplo, através da verificação de um indicador armazenado em, por exemplo, um bloco de controlo. Se a facilidade não estiver instalada, uma condição de exceção é fornecida, ETAPA 702. Caso contrário, uma determinação é feita para saber se a instrução foi emitida por um convidado de modo de armazenamento paginável (ou outro convidado), PESQUISA 704. Se sim, o sistema operativo anfitrião irá emular a operação para esse convidado, ETAPA -50- ΡΕ2585925 706 .
Caso contrário, é feita uma determinação para saber se um ou mais dos operandos estão alinhados, PESQUISA 708. Por exemplo, é feita uma determinação para saber se o endereço do bloco de informação de função está num limite de palavra dupla. Num exemplo, isto é opcional. Se os operandos não estão alinhados, então uma condição de exceção é fornecida, ETAPA 710. Caso contrário, é feita uma determinação para saber se o bloco de informação de função está acessível, PESQUISA 712. Se não, então uma condição de exceção é fornecida, ETAPA 714. Caso contrário, é feita uma determinação para saber se a handle fornecida nos operandos da instrução Modificar Controlos de Função PCI está ativada, PESQUISA 716. Num exemplo, esta determinação é feita através da verificação de um indicador de ativação na handle. Se o identificador não está ativado, então uma condição de exceção é fornecida, ETAPA 718.
Se a handle estiver ativada, então a handle é utilizada para localizar uma entrada da tabela de funções, ETAPA 720. Isto é, pelo menos, uma parte da handle é utilizada como um índice para a tabela de funções para localizar a entrada da tabela de funções correspondendo à função de adaptador para a qual os parâmetros operacionais devem ser estabelecidos.
Uma determinação é feita para saber se a entrada da tabela de funções foi encontrada, PESQUISA 722. Se não, -51 - ΡΕ2585925 então uma condição de exceção é fornecida, ETAPA 724. Caso contrário, se a configuração emitindo a instrução é um convidado, é feita uma determinação para saber se a função está configurada para utilização por um convidado, PESQUISA 726. Se não estiver autorizada para tal utilização, então uma condição de exceção é fornecida, ETAPA 728. Esta pesquisa pode ser ignorada se a configuração não for um convidado ou outras autorizações podem ser verificadas, se designadas.
Uma determinação é então feita para saber se a função está ativada, PESQUISA 730. Num exemplo, esta determinação é feita através da verificação de um indicador de ativação na entrada da tabela de funções. Se não estiver ativada, então uma condição de exceção é fornecida, ETAPA 732 .
Se a função estiver ativada, então é feita uma determinação para saber se a recuperação está ativada, PESQUISA 734. Se a recuperação estiver ativada, conforme determinado por um indicador de recuperação na entrada da tabela de funções, então uma condição de exceção é fornecida, ETAPA 736. No entanto, se a recuperação não estiver ativada, uma nova determinação é feita para saber se a função está ocupada, PESQUISA 738. Esta determinação é feita verificando o indicador de ocupação na entrada da tabela de funções. Se a função estiver ocupada, então uma condição de ocupação é fornecida, ETAPA 740. Com a condição de ocupação, a instrução pode ser repetida, em vez de ser -52- ΡΕ2585925 descartada.
Se a função não estiver ocupada, então uma nova determinação é feita para saber se o formato do bloco de informação de função é válido, PESQUISA 742. Por exemplo, o campo de formato do FIB é verificado para determinar se este formato é suportado pelo sistema. Se for inválido, então uma condição de exceção é fornecida, ETAPA 744. Se o formato do bloco de informação de função for válido, então uma nova determinação é feita para saber se o controlo de operação especificado nos operandos da instrução é válido, PESQUISA 746. Ou seja, se o controlo de operação é um dos controlos de operação especificados para esta instrução. Se for inválido, então uma condição de exceção é fornecida, ETAPA 748. No entanto, se o controlo de operação for válido, então o processamento continua com o controlo de operação especifico sendo especificado.
Um controlo de operação que pode ser especificado é uma operação de registo de parâmetros de tradução de 1/0 utilizada no controlo das traduções de endereços para um adaptador. Com esta operação, os parâmetros de função PCI relevantes para a tradução de endereços de 1/0 são definidos na DTE, FTE e/ou outra localização a partir dos parâmetros apropriados do FIB, que é um operando para a instrução. Estes parâmetros incluem, por exemplo, o endereço base PCI, o limite de endereço PCI (também conhecido por limite PCI ou limite); o formato de tradução de endereços; a dimensão da página; e o apontador de -53 - ΡΕ2585925 traduçao de endereços de 1/0, que sao operandos para esta operação. Existem também operandos implícitos, incluindo um endereço DMA inicial (Starting DMA - SDMA) e um endereço DMA final (Ending DMA - EDMA) , que são armazenados numa localização acessível ao processador que executa a instrução.
Uma forma de realização da lógica para estabelecer os parâmetros operacionais para tradução de endereços de 1/0 é descrita com referência à FIG. 8. Inicialmente, é feita uma determinação para saber se o endereço base PCI no FIB é maior do que o limite PCI no FIB, PESQUISA 800. Se a comparação do endereço base e o limite indicar que o endereço base é maior do que o limite, então uma condição de exceção é reconhecida, ETAPA 802. No entanto, se o endereço base for inferior ou igual ao limite, então uma nova determinação é feita para saber se o formato de tradução de endereços e a dimensão de página são válidos, PESQUISA 804. Se eles forem inválidos, então uma condição de exceção é fornecida, ETAPA 806. No entanto, se forem válidos, então uma nova determinação é feita para saber se a dimensão do espaço de endereçamento (com base no endereço base e no limite) excede a capacidade de tradução, PESQUISA 808. Num exemplo, a dimensão do espaço de endereçamento é comparada com a capacidade máxima possível de tradução de endereços com base no formato da tabela de nível superior. Por exemplo, se a tabela de nível superior for uma tabela de segmentos compatível com DAT, a capacidade máxima de tradução é 2 Gbytes. -54- ΡΕ2585925
Se a dimensão do espaço de endereçamento exceder a capacidade de tradução, então uma condição de exceção é fornecida, ETAPA 810. Caso contrário, uma nova determinação é feita para saber se o endereço base é menor do que o endereço inicial DMA, PESQUISA 812. Se assim for, então uma condição de exceção é fornecida, ETAPA 814. Caso contrário, uma outra determinação é feita para saber se o limite de endereço é maior que o endereço final DMA, PESQUISA 816. Se sim, então uma condição de exceção é fornecida, ETAPA 818. Num exemplo, o endereço inicial DMA e o endereço DMA final são baseados numa política global do sistema. A partir daí, é feita uma determinação para saber se recursos suficientes, se forem necessários, estão disponíveis para realizar uma tradução de endereços de I/O, PESQUISA 820. Se não, então uma condição de exceção é fornecida, ETAPA 822. Caso contrário, uma nova determinação é feita para saber se os parâmetros de tradução de endereços de 1/0 já foram registados na FTE e DTE, PESQUISA 824. Isto é determinado através da verificação dos valores dos parâmetros na FTE/DTE. Por exemplo, se os valores da FTE/DTE forem zero ou outro valor definido, então o registo não foi realizado. Para localizar a FTE, a handle fornecida na instrução é utilizada, e para localizar a DTE, um índice de dispositivo na FTE é utilizado.
Se a função de adaptador já foi registada para tradução de endereços, então uma condição de exceção é fornecida, ETAPA 826. Se não, então é feita uma -55- ΡΕ2585925 determinação para saber se o espaço de endereçamento DMA que é especificado é válido (isto é, se é um espaço de endereçamento para o qual uma DTE tenha sido ativada) , PESQUISA 828. Se não, então uma condição de exceção é fornecida, ETAPA 830. Se todas as verificações forem bem sucedidas, então os parâmetros de tradução são colocados na entrada da tabela de dispositivos, e opcionalmente, na entrada da tabela de funções correspondente (ou outra localização designado), ETAPA 832. Por exemplo, os parâmetros relevantes de função PCI relevantes para a tradução de endereços de I/O são copiados a partir do bloco de informação de função e colocados na DTE/FTE. Estes parâmetros incluem, por exemplo, o endereço base PCI, o limite de endereço PCI, o formato de tradução, a dimensão da página, e o apontador de tradução de endereços de I/O. Esta operação permite acessos DMA ao espaço de endereçamento DMA determinado. Permite que a tradução de endereços de I/O para a função de adaptador.
Um outro controlo de operação que pode ser especificado pela instrução Modificar Controlos de Função PCI é uma operação de cancelamento do registo de parâmetros de tradução de endereços de I/O, um exemplo da qual é descrito com referência à FIG. 9. Com esta operação, os parâmetros de função relevantes para tradução de endereços de I/O são reinicializados para zeros. Esta operação desativa os acessos DMA ao espaço de endereçamento DMA determinado e provoca uma limpeza das entradas do buffer de lookaside de tradução de I/O para esse espaço de -56- ΡΕ2585925 endereçamento DMA. Ela desativa a tradução de endereços.
Com referência à FIG. 9, numa forma de realização, é feita uma determinação para saber se os parâmetros de tradução de endereços de 1/0 não estão registados, PESQUISA 900. Num exemplo, esta determinação é feita através da verificação dos valores dos parâmetros apropriados na FTE ou DTE. Se esses campos forem zero ou algum valor especificado, não estão registados. Portanto, uma condição de exceção é fornecida, ETAPA 902. Se eles estiverem registados, então é feita uma determinação para saber se o espaço de endereçamento DMA é válido, PESQUISA 904. Se for inválido, então uma condição de exceção é fornecida, ETAPA 906. Se o espaço de endereçamento DMA for válido, então os parâmetros de tradução na entrada da tabela de dispositivos e opcionalmente na entrada da tabela de funções correspondente são apagados, ETAPA 908.
Descrita em detalhe acima está uma capacidade para ter vários formatos de tradução disponíveis e ser capaz de determinar, em tempo de execução, qual o formato de tradução a partir dos vários formatos de tradução que deve ser utilizado para uma função específica (por exemplo, uma função PCI) . 0 formato de tradução determinado é pré-registado para a função na entrada da tabela de dispositivos para aquela função. Em seguida, durante o processamento de uma solicitação, o endereço fornecido na solicitação é traduzido, se necessário, pela unidade de tradução de endereços, com base no formato de tradução pré- -57- ΡΕ2585925 registado.
Nas formas de realização descritas aqui, os adaptadores são adaptadores PCI. PCI, tal como é aqui utilizado, refere-se a todas os adaptadores implementados de acordo com uma especificação baseada em PCI, tal como definido pelo Grupo de Interesse Especial de Interligação de Componentes Periféricos (Peripheral Component Interconnect Special Interest Group - PCI-SIG) (www.pcisig.com/home), incluindo, mas não estando limitada a PCI ou PCIe. Num exemplo especifico, a Interligação Expresso de Componente Periférica (Peripheral Component Interconnect Express - PCIe) é um padrão de interligação ao nivel da componente que define um protocolo de comunicação bidirecional para transações entre adaptadores de 1/0 e sistemas anfitriões. As comunicações PCIe são encapsuladas em pacotes de acordo com a norma PCIe para transmissão num bus PCIe. As transações originárias de adaptadores de 1/0 e terminando em sistemas anfitriões são referidas como transações upbound. As transações originárias de sistemas anfitriões e terminando em adaptadores de 1/0 são chamadas de transações downbound. A topologia PCIe baseia-se em ligações unidirecionais ponto-a-ponto que são emparelhadas (por exemplo, uma ligação upbound, uma ligação downbound) para formar o bus PCIe. A norma PCIe é mantida e publicada pelo PCI-SIG.
Como será apreciado por um perito na técnica, os aspetos da presente invenção podem ser incorporados como um -58- ΡΕ2585925 sistema, método ou produto de programa de computador. Assim, aspetos da presente invenção podem tomar a forma de uma forma de realização totalmente em hardware, uma forma de realização totalmente em software (incluindo firmware, software residente, microcódigo, etc) ou uma forma de realização combinando aspetos de software e de hardware que podem todos eles ser geralmente referidos aqui como um "circuito", "módulo" ou "sistema". Além disso, os aspetos da presente invenção podem tomar a forma de um produto de programa de computador incorporado em um ou mais suportes legíveis por computador, tendo código de programa legível por computador incorporado nele.
Qualquer combinação de um ou mais suportes legíveis por computador pode ser utilizada. Um suporte legível por computador pode ser um suporte de armazenamento legível por computador. Um suporte de armazenamento legível por computador pode ser, por exemplo, mas não estando limitado, um sistema, aparelho, ou dispositivo eletrónico, magnético, ótico, electromagnético, de infravermelhos ou de semicondutores, ou qualquer combinação adequada destes materiais. Exemplos específicos adicionais (uma lista não exaustiva) do suporte de armazenamento legível por computador incluem o seguinte: uma ligação elétrica com um ou mais fios, uma disquete de computador portátil, um disco rígido, uma memória de acesso aleatório (Random Access Memory - RAM), uma memória só de leitura (Read-Only Memory - ROM), uma memória só de leitura programável apagável (Erasable Programmable Read-Only Memory - EPROM ou memória -59- ΡΕ2585925
Flash), uma fibra ótica, um disco compacto portátil com memória só de leitura (Compact Disc Read-Only Memory - CD-ROM) , um dispositivo de armazenamento ótico, um dispositivo de armazenamento magnético, ou qualquer combinação adequada dos anteriores. No contexto deste documento, um suporte de armazenamento legível por computador pode ser um qualquer suporte material, que pode conter ou armazenar um programa para utilização ou em ligação com um sistema, aparelho, ou dispositivo de execução de instruções.
Com referência agora à FIG. 10, num exemplo, um produto de programa de computador 1000 inclui, por exemplo, um ou mais suportes de armazenamento legíveis por computador 1002 para armazenar meios ou lógica de código de programa legível por computador 1004 neles para fornecer e facilitar um ou mais aspetos da presente invenção. O código de programa incorporado num suporte legível por computador pode ser transmitido através de um suporte adequado, incluindo, mas não estando limitado a uma rede sem fios, com fios, cabo de fibra ótica, RF, etc, ou qualquer combinação adequada dos anteriores. 0 código de programa de computador para realizar operações para aspetos da presente invenção pode ser escrito em qualquer combinação de uma ou mais linguagens de programação, incluindo uma linguagem de programação orientada a objetos, tal como Java, Smalltalk, C++ ou semelhante, e linguagens de programação convencionais -60- ΡΕ2585925 procedimentais, tais como a linguagem de programação "C", assembler ou linguagens de programação similares. O código de programa pode executar inteiramente no computador do utilizador, parcialmente no computador do utilizador, como um pacote de software independente, parcialmente no computador do utilizador e parcialmente num computador remoto ou inteiramente no computador ou servidor remoto. Neste último cenário, o computador remoto pode ser ligado ao computador do utilizador através de qualquer tipo de rede, incluindo uma rede de área local (Local Area Network - LAN) ou uma rede de área ampla (Wide Area Network - WAN) , ou a ligação pode ser feita para um computador externo (por exemplo, através da Internet utilizando um Provedor de Serviços de Internet).
Os aspetos da presente invenção são aqui descritos com referência às figuras de fluxogramas e/ou diagramas de blocos de métodos, aparelhos (sistemas) e produtos de programa de computador de acordo com as formas de realização da invenção. Será compreendido que cada bloco das figuras de fluxogramas e/ou diagramas de blocos, e combinações de blocos nas figuras de fluxogramas e/ou diagramas de blocos, podem ser implementados por instruções de programa de computador. Estas instruções de programa de computador podem ser fornecidas a um processador de um computador de utilização geral, computador de objetivo especial, ou qualquer outro aparelho de processamento de dados programável para produzir uma máquina, de tal modo que as instruções que executam por meio do processador do -61 - ΡΕ2585925 computador ou outro aparelho de processamento de dados programável, criam meios para implementar as funções/atos especificados no fluxograma e/ou bloco de diagrama de bloco ou blocos.
Estas instruções de programa de computador podem também ser armazenadas num suporte legível por computador que pode dar ordens a um computador, outro aparelho de processamento de dados programável, ou outros dispositivos para funcionar de uma forma específica, de tal modo que as instruções armazenadas no suporte legível por computador produzem um artigo de fabrico incluindo instruções que implementa a função/ato especificada no fluxograma e/ou bloco de diagrama de bloco ou blocos.
As instruções de programa do computador podem também ser carregadas num computador, outro aparelho de processamento de dados programável, ou outros dispositivos para fazer com que uma série de etapas operacionais sejam executadas no computador ou outro aparelho programável outros dispositivos para produzir um processo implementado por computador de tal forma que as instruções que executam no computador ou outro equipamento programável fornecem processos para implementar as funções/atos especificados no fluxograma e/ou bloco de diagrama de bloco ou blocos.
Os fluxogramas e diagramas de blocos nas figuras representam a arquitetura, funcionalidade e operação de possíveis implementações de sistemas, métodos e produtos de -62- ΡΕ2585925 programa de computador de acordo com várias formas de realização da presente invenção. A este respeito, cada bloco nos fluxogramas ou diagramas de blocos pode representar um módulo, segmento, ou parte de código, o qual compreende uma ou mais instruções executáveis para implementar a(s) função(ões) lógica(s) especificada(s). Também deve ser notado que, em algumas implementações alternativas, as funções verificadas no bloco podem ocorrer fora da ordem denotada nas figuras. Por exemplo, dois blocos mostrados em sucessão podem, na verdade, ser executados substancialmente de forma concorrente, ou os blocos podem por vezes ser executados por ordem inversa, dependendo da funcionalidade envolvida. Também deverá ser notado que cada bloco dos diagramas de blocos e/ou figuras de fluxogramas, e combinações de blocos nos diagramas de blocos e/ou figuras de fluxogramas, podem ser implementados por sistemas baseados em hardware para fins específicos que desempenham as funções ou atos especificados, ou combinações de hardware de propósito específico e instruções de computador.
Além do acima exposto, um ou mais aspetos da presente invenção podem ser fornecidos, oferecidos, implantados, geridos, mantidos, etc. por um provedor de serviços que ofereça gestão de ambientes de clientes. Por exemplo, o provedor de serviços pode criar, manter, suportar, etc. código de computador e/ou uma infraestrutura informática que execute um ou mais aspetos da presente invenção, para um ou mais clientes. Em troca, o provedor de -63 - ΡΕ2585925 serviços pode receber pagamento do cliente no âmbito de um contrato de subscrição e/ou taxa, como exemplos.
Adicionalmente ou alternativamente, o provedor de serviços pode receber pagamento com a venda de conteúdos publicitários para uma ou mais terceiras partes.
Num aspeto da presente invenção, uma aplicação pode ser implantada para a realização de um ou mais aspetos da presente invenção. Como um exemplo, a implantação de uma aplicação compreende o fornecimento de uma infraestrutura informática operável para realizar um ou mais aspetos da presente invenção.
Como um outro aspeto da presente invenção, uma infraestrutura de computação pode ser implantada compreendendo a integração de código legível por computador num sistema de computação, em que o código em combinação com o sistema de computação é capaz de realizar um ou mais aspetos da presente invenção.
Ainda como outro aspeto da presente invenção, um processo para a integração da infraestrutura compreendendo a integração de código legível por computador num sistema de computação pode ser fornecido. 0 sistema de computação inclui um suporte legível por computador, em que o suporte de computação compreende um ou mais aspetos da presente invenção. 0 código em combinação com o sistema de computação é capaz de realizar um ou mais aspetos da -64- ΡΕ2585925 presente invenção.
Embora várias formas de realização sejam descritas acima, estas são apenas exemplos. Por exemplo, ambientes de computação de outras arquiteturas podem incorporar e utilizar um ou mais aspetos da presente invenção. Como exemplos, servidores diferentes dos servidores System Z®, tais como servidores Power Systems ou outros servidores propostos pela International Business Machines Corporation, ou servidores de outras companhias podem incluir, utilizar e/ou beneficiar de um ou mais aspetos da presente invenção. Além disso, embora no exemplo aqui, os adaptadores e o hub PCI sejam considerados uma parte do servidor, noutras formas de realização, eles não têm de ser necessariamente considerados uma parte do servidor, mas podem simplesmente ser considerados como estando acoplados à memória de sistema e/ou a outros componentes de um ambiente de computação. 0 ambiente de computação não precisa de ser um servidor. Além disso, embora as tabelas de tradução sejam descritas, qualquer estrutura de dados pode ser utilizada e o termo tabela deve incluir todas essas estruturas de dados. Ainda para além disso, embora os adaptadores sejam baseados em PCI, um ou mais aspetos da presente invenção são utilizáveis com outros adaptadores ou outros componentes de 1/0. Um adaptador e um adaptador PCI são apenas alguns exemplos. Além disso, espaços de endereçamento e tabelas de endereços de dimensão diferente podem ser utilizados sem nos afastarmos do espirito da presente invenção. Mais ainda, -65- ΡΕ2585925 outros tipos de endereços podem ser traduzidos utilizando um ou mais aspetos da presente invenção. Mais ainda, podem ser utilizados outros tipos de formatos de tradução. Além disso, a DTE pode ter mais, menos ou informação diferente. Muitas outras variações são possíveis.
Além disso, outros tipos de ambientes de computação podem beneficiar de um ou mais aspetos da presente invenção. Como um exemplo, um sistema de processamento de dados apropriado para armazenar e/ou executar código de programa é utilizável pois inclui, pelo menos, dois processadores acoplados direta ou indiretamente, a elementos de memória através de um bus de sistema. Os elementos de memória incluem, por exemplo, memória local empregue durante a execução efetiva do código de programa, armazenamento em massa, e memória cache, que permite armazenamento temporário de pelo menos algum código de programa, a fim de reduzir o número de vezes que o código tem de ser recuperado a partir do armazenamento em massa durante a execução.
Dispositivos de entrada/saída (input/output) ou dispositivos de 1/0 (incluindo, mas não estando limitados a teclados, monitores, dispositivos apontadores, DASD, fita (tape), CDs, DVDs, pen drives e outros suportes de memória, etc.) podem ser acoplados ao sistema diretamente ou através de controladores de 1/0 intervenientes. Os adaptadores de rede podem também ser acoplados ao sistema para permitir que o sistema de processamento de dados seja acoplado a -66- ΡΕ2585925 outros sistemas de processamento de dados ou impressoras ou dispositivos de armazenamento remotos através de redes públicas ou privadas intervenientes. Modems, modems de cabo e placas Ethernet são apenas alguns dos tipos disponíveis de adaptadores de rede.
Com referência à FIG. 11, os componentes representativos de um sistema de Computador Anfitrião 5000 para implementar um ou mais aspetos da presente invenção são representados. O computador anfitrião representativo 5000 compreende um ou mais CPUs 5001 em comunicação com a memória do computador (isto é, o armazenamento central) 5002, bem como as interfaces de I/O para os dispositivos de suporte de armazenamento 5011 e redes 5010 para comunicar com outros computadores ou SANs e semelhantes. O CPU 5001 é compatível com uma arquitetura tendo um conjunto arquitetado de instruções e uma funcionalidade arquitetada. O CPU 5001 pode ter tradução de endereços dinâmica (Dynamic Address Translation - DAT) 5003 para transformar endereços de programa (endereços virtuais) em endereços reais de memória. Uma DAT geralmente inclui um lookaside buffer de tradução (Translation Lookaside Buffer - TLB) 5007 para fazer cache de traduções para que mais tarde os acessos ao bloco de memória de computador 5002 não requeiram o atraso da tradução de endereços. Normalmente, uma cache 5009 é empregue entre a memória de computador 5002 e o processador 5001. A cache 5009 pode ser hierárquica havendo uma grande cache disponível para mais de um CPU e caches mais pequenas, mais rápidas (nível inferior) entre a grande -67- ΡΕ2585925 cache e cada CPU. Em algumas implementações, as caches de nível mais baixo são divididas para fornecer caches separadas de nível inferior para pesquisa de instruções e acessos de dados. Numa forma de realização, uma instrução é pesquisada a partir da memória 5002 por uma unidade de pesquisa de instruções 5004 através de uma cache 5009. A instrução é descodificada numa unidade de descodificação de instruções 5006 e entregue (com outras instruções em algumas formas de realização) à unidade ou unidades de execução de instruções 5008. Normalmente, diversas unidades de execução 5008 são empregues, por exemplo uma unidade de execução aritmética, uma unidade de execução de ponto flutuante e uma unidade de execução de instruções ramificada. A instrução é executada pela unidade de execução, acedendo a operandos a partir de registos especificados por instruções ou memória, conforme necessário. Se um operando deve ser acedido (carregado ou armazenado) a partir da memória 5002, uma unidade de carga/armazenamento 5005 normalmente lida com o acesso sob controlo da instrução sendo executada. As instruções podem ser executadas em circuitos de hardware ou em microcódigo interno (firmware) ou por uma combinação de ambos.
Como se observa, um sistema de computação inclui informação no armazenamento local (ou principal), bem como endereçamento, proteção e gravação de referências e de alterações. Alguns aspetos do endereçamento incluem o formato dos endereços, o conceito de espaços de endereçamento, os vários tipos de endereços, e a maneira -68- ΡΕ2585925 pela qual um tipo de endereço é traduzido para um outro tipo de endereço. Uma parte do armazenamento principal inclui locais de armazenamento atribuídos de forma permanente. 0 armazenamento principal fornece ao sistema armazenamento de dados de acesso rápido diretamente endereçável. Tanto os dados como os programas devem ser carregados no armazenamento principal (a partir de dispositivos de entrada), antes de poderem ser processados. 0 armazenamento principal pode incluir um ou mais armazenamentos de buffer, mais pequenos, de acesso mais rápido, por vezes chamados de caches. Uma cache é tipicamente associada fisicamente com um CPU ou um processador de 1/0. Os efeitos, exceto no desempenho, da construção física e utilização de suportes de armazenamento distintos geralmente não são observáveis pelo programa.
Caches separadas podem ser mantidas para instruções e para operandos de dados. A informação dentro de uma cache é mantida em bytes contíguos num limite integrante chamado bloco de cache ou linha de cache (ou linha, para abreviar) . Um modelo pode fornecer uma instrução EXTRAIR ATRIBUTO DE CACHE que retorna a dimensão de uma linha de cache em bytes. Um modelo também pode fornecer instruções de PRÉ-PESQUISAR DADOS e PRÉ-PESQUISAR DADOS RELATIVAMENTE LONGOS que afetam a pré-pesquisa de armazenamento na cache de dados ou instruções ou a disponibilização de dados a partir da cache. -69- ΡΕ2585925 0 armazenamento é visto como uma longa sequência horizontal de bits. Para a maioria das operações, os acessos ao armazenamento prosseguem numa sequência da esquerda para a direita. A sequência de bits é subdividida em unidades de oito bits. Uma unidade de oito bits é chamada um byte, que é o bloco de construção básico de todos os formatos de informação. Cada localização de byte no armazenamento é identificada por um inteiro não negativo único, que é o endereço dessa localização de byte ou, simplesmente, o endereço do byte. As localizações de byte adjacentes têm endereços consecutivos, começando com 0 na esquerda e prosseguindo em sequência da esquerda para a direita. Os endereços são inteiros binários sem sinal e têm 24, 31 ou 64 bits. A informação é transmitida entre o armazenamento e um CPU ou um subsistema de canal de um byte, ou um grupo de bytes, de cada vez. Salvo indicação em contrário, por exemplo, na z/Architecture®, um grupo de bytes no armazenamento é endereçado pelo byte mais à esquerda do grupo. 0 número de bytes no grupo está ou implícito ou explicitamente especificado pela operação a ser realizada. Quando utilizado numa operação de CPU, um grupo de bytes é chamado um campo. Dentro de cada grupo de bytes, por exemplo, na z/Architecture®, os bits são numerados em sequência da esquerda para a direita. Nas z/Architecture®, os bits mais à esquerda são por vezes referidos como os bits de "ordem superior" e os bits mais à direita como os bits de "ordem inferior". Os números de bit não são -70- ΡΕ2585925 endereços de armazenamento, no entanto. Só bytes podem ser endereçados. Para operar em bits individuais de um byte em armazenamento, o byte completo é acedido. Os bits num byte são numerados de 0 a 7, a partir da esquerda para a direita (por exemplo, na z/Architecture®) . Os bits de um endereço podem ser numerados 8-31 ou 40-63 para endereços de 24 bits, ou 1-31 ou 33-63 para endereços de 31 bits; são numerados 0-63 para endereços de 64 bits. Dentro de qualquer outro formato de comprimento fixo de vários bytes, os bits que compõem o formato são numerados consecutivamente a partir de 0. Para fins de deteção de erros, e de preferência, para a correção, um ou mais bits de verificação podem ser transmitidos com cada byte ou com um grupo de bytes. Esses bits de verificação são gerados automaticamente pelo equipamento e não podem ser controlados diretamente pelo programa. As capacidades de armazenamento são expressas em número de bytes. Quando o comprimento de um campo de operando-armazenamento está implícito pelo código de operação de uma instrução, é dito que o campo tem um comprimento fixo, que pode ser de um, dois, quatro, oito ou dezasseis bytes. Campos maiores podem estar implícitos para algumas instruções. Quando o comprimento de um campo de operando-armazenamento não está implícito mas é expressamente referido, é dito que o campo tem um comprimento variável. Os operandos de comprimento variável podem variar em comprimento em incrementos de um byte (ou com algumas instruções, em múltiplos de dois bytes ou outros múltiplos). Quando a informação é colocada em armazenamento, os conteúdos de apenas aquelas localizações -71 - ΡΕ2585925 de byte são substituídos que estão incluídos no campo designado, muito embora a largura do caminho físico para o armazenamento possa ser maior do que o comprimento do campo a ser armazenado.
Algumas unidades de informação devem estar num limite integrante no armazenamento. Um limite é chamado integrante para uma unidade de informação quando o seu endereço de armazenamento é um múltiplo do comprimento da unidade em bytes. Nomes especiais são dados aos campos de 2, 4, 8 e 16 bytes num limite integrante. Uma meia-palavra é um grupo de dois bytes consecutivos num limite de dois bytes e é o bloco de construção básico das instruções. Uma palavra é um grupo de quatro bytes consecutivos num limite de quatro bytes. Uma palavra dupla é um grupo de oito bytes consecutivos num limite de oito bytes. Uma palavra quádrupla é um grupo de 16 bytes consecutivos num limite de 16 bytes. Quando o armazenamento endereça meias-palavras, palavras, palavras duplas e palavras quádruplas, a representação binária do endereço contém um, dois, três, quatro bits a zero mais à direita, respetivamente. As instruções devem estar em limites integrantes de dois bytes. Os operandos de armazenamento da maioria das instruções não têm requisitos de alinhamento de limite.
Em dispositivos que implementam caches separadas para instruções e operandos de dados, um atraso significativo pode ser experimentado se o programa armazena numa linha de cache a partir da qual as instruções são -72- ΡΕ2585925 subsequentemente pesquisadas, independentemente do armazenamento alterar as instruções que são subsequentemente pesquisadas.
Numa forma de realização, a invenção pode ser praticada por software (por vezes referido como códiqo interno licenciado, firmware, microcódiqo, milicódigo, picocódigo e semelhantes, qualquer um dos quais seria consistente com a presente invenção). Com referência à FIG. 11, o código de programa de software que incorpora a presente invenção é normalmente acedido pelo processador 5001 do sistema anfitrião 5000 a partir de dispositivos de de suporte de armazenamento de longo termo 5011, tais como uma unidade de CD-ROM, unidade de fita ou disco rígido. O código de programa de software pode ser incorporado em qualquer um de uma variedade de suportes conhecidos para utilização com um sistema de processamento de dados, tal como uma disquete, um disco rígido ou um CD-ROM. O código pode ser distribuído em tais suportes , ou pode ser distribuído aos utilizadores a partir da memória de computador 5002 ou armazenamento de um sistema de computação através de uma rede 5010 para outros sistemas de computação para utilização por outros utilizadores de tais outros sistemas. O código de programa de software inclui um sistema operativo que controla a função e interação dos vários componentes do computador e um ou mais programas aplicativos. O código de programa é normalmente paginado a -73- ΡΕ2585925 partir do dispositivo de suporte de armazenamento 5011 para o armazenamento de computador com relativamente mais velocidade 5002 onde se encontra disponivel para processamento pelo processador 5001. As técnicas e os métodos para incorporar o código de programa de software na memória, em suportes fisicos e/ou distribuir código de software através de redes são bem conhecidos e não irão ser mais discutidos aqui. O código de programa, quando criado e armazenado num suporte material (incluindo, mas não estando limitado a módulos eletrónicos de memória (RAM), memória flash, discos compactos (CDs), DVDs, fitas magnéticas e semelhantes é muitas vezes referido como um "produto de programa de computador". O suporte do produto de programa de computador é tipicamente legível por um circuito de processamento, de preferência num sistema de computação para execução pelo circuito de processamento. A FIG. 12 representa um sistema de hardware de estação de trabalho ou servidor representativo no qual a presente invenção pode ser praticada. O sistema 5020 da FIG. 12 compreende um sistema de computação base representativo 5021, tal como um computador pessoal, uma estação de trabalho ou um servidor, incluindo dispositivos periféricos opcionais. O sistema de computação base 5021 inclui um ou mais processadores 5026 e um bus empregue para ligar e permitir a comunicação entre o(s) processador(es) 5026 e os outros componentes do sistema 5021 de acordo com técnicas conhecidas. O bus liga o processador 5026 à memória 5025 e ao armazenamento de longo termo 5027, que -74- ΡΕ2585925 pode incluir um disco rigido (incluindo qualquer suporte magnético, CD, DVD e memória flash, por exemplo) ou uma unidade de fita, por exemplo. 0 sistema 5021 pode incluir também um adaptador de interface de utilizador, que liga o microprocessador 5026 através do bus a um ou mais dispositivos de interface, tais como um teclado 5024, um rato 5023, uma impressora/scarmer 5030 e/ou outros dispositivos de interface, que podem ser qualquer dispositivo de interface de utilizador, tal como um ecrã sensível ao toque, um tapete (pad) de entrada digitalizada, etc. O bus também liga um dispositivo de visualização 5022, tal como um ecrã ou monitor LCD, para o microprocessador 5026 através de um adaptador de visualização. O sistema 5021 pode comunicar com outros computadores ou redes de computadores através de um adaptador de rede capaz de comunicar 5028 com uma rede 5029. Os adaptadores de rede exemplificativos são canais de comunicação, Token Ring, Ethernet ou modems. Alternativamente, o sistema 5021 pode comunicar através de uma interface sem fios, tal como um cartão CDPD (cellular digital packet data - pacote de dados em tecnologia celular digital). O sistema 5021 pode ser associado com quaisquer outros computadores numa rede de área local (Local Area Network - LAN) ou uma rede de área ampla (Wide Area Network - WAN) , ou o sistema 5021 pode ser um cliente num arranjo de cliente/servidor com outro computador, etc. Todas estas configurações, bem como o hardware e o software de comunicações apropriado, são conhecidos na técnica. -75- ΡΕ2585925 A FIG. 13 representa uma rede de processamento de dados 5040 na qual a presente invenção pode ser praticada. A rede de processamento de dados 5040 pode incluir uma pluralidade de redes individuais, tais como uma rede sem fios e uma rede com fios, cada uma das quais pode incluir uma pluralidade de estações de trabalho individuais 5041, 5042, 5043, 5044. Além disso, como os peritos na técnica apreciarão, uma ou mais LANs podem ser incluídas, onde uma LAN pode compreender uma pluralidade de estações de trabalho inteligentes acopladas a um processador anfitrião.
Ainda com referência à FIG. 13, as redes também podem incluir computadores mainframe ou servidores, tais como um computador gateway (cliente servidor 5046) ou servidor aplicacional (servidor remoto 5048 que pode aceder a um repositório de dados e também pode ser acedido diretamente a partir de uma estação de trabalho 5045). Um computador gateway 5046 serve como um ponto de entrada em cada rede individual. Uma gateway é necessária ao ligar um protocolo de rede a outro. A gateway 5046 pode ser preferencialmente acoplada a uma outra rede (a Internet 5047, por exemplo) por meio de uma ligação de comunicações. A gateway 5046 também pode ser diretamente acoplada a uma ou mais estações de trabalho 5041, 5042, 5043, 5044, utilizando uma ligação de comunicações. O computador gateway pode ser implementado utilizando um servidor IBM eServer™ System z®, disponibilizado pela International Business Machines Corporation.
Com referência simultaneamente à FIG. 12 e FIG. -76- ΡΕ2585925 13, o código de programação de software que pode incorporar a presente invenção pode ser acedido pelo processador 5026 do sistema 5020 a partir do suporte de armazenamento de longo termo 5027, tal como uma unidade de CD-ROM ou disco rígido. O código de software de programação pode ser incorporado em qualquer um de uma variedade de suportes conhecidos para utilização com um sistema de processamento de dados, tal como uma disquete, um disco rígido ou um CD-ROM. 0 código pode ser distribuído em tais suportes, ou pode ser distribuído aos utilizadores 5050, 5051 a partir da memória ou do armazenamento de um sistema de computação através de uma rede para outros sistemas de computação para utilização por utilizadores de tais outros sistemas.
Em alternativa, o código de programação pode ser incorporado na memória 5025, e acedido pelo processador 5026 utilizando o bus do processador. Tal código de programação inclui um sistema operativo que controla a função e interação dos vários componentes do computador e um ou mais programas aplicativos 5032. O código de programa é normalmente paginado a partir dos suportes de armazenamento 5027 para a memória de alta velocidade 5025, onde está disponível para processamento pelo processador 5026. As técnicas e métodos para incorporar o código de programação de software na memória, em suportes físicos e/ou para distribuir código de software através de redes são bem conhecidos e não irão ser mais discutidos aqui. O código de programa, quando criado e armazenado num suporte material (incluindo, mas não estando limitado a módulos -77 - ΡΕ2585925 eletrónicos de memória (RAM), memória flash, discos compactos (CDs), DVDs, fitas magnéticas e semelhantes é muitas vezes referido como um "produto de programa de computador". 0 suporte de produto de programa de computador é tipicamente legível por um circuito de processamento, de preferência num sistema de computação para execução pelo circuito de processamento. A cache que está mais prontamente disponível para o processador (normalmente mais rápida e menor do que as outras caches do processador) é a cache mais baixa (LI ou nível um) e o armazenamento principal (memória principal) é a cache de nível mais elevado (L3 se existirem 3 níveis). A cache de nível mais baixo é frequentemente dividida numa cache de instruções (I-Cache) mantendo instruções de máquina a serem executadas e uma cache de dados (D-Cache) mantendo operandos de dados.
Com referência à FIG. 14, uma forma de realização exemplificativa de um processador é descrita para o processador 5026. Tipicamente um ou mais níveis da cache 5053 são utilizados para armazenar blocos de memória, a fim de melhorar o desempenho do processador. A cache 5053 é um buffer de alta velocidade mantendo linhas de cache de dados de memória que são suscetíveis de ser utilizados. As linhas de cache típicas têm 64, 128 ou 256 bytes de dados de memória. As caches separadas são frequentemente utilizadas para armazenar em cache instruções do que para armazenar dados. A coerência de cache (sincronização de cópias de -78- ΡΕ2585925 linhas na memória e nas caches) é muitas vezes fornecida por vários algoritmos de “snoop" bem conhecidos na técnica. 0 armazenamento de memória principal 5025 de um sistema de processador é muitas vezes referido como uma cache. Num sistema de processador tendo 4 níveis de cache 5053, a memória principal 5025 é por vezes referida como a cache de nível 5 (L5), uma vez que é geralmente mais rápida e só mantém uma parte da memória não-volátil (DASD, fita, etc.) que está disponível a um sistema de computação. O armazenamento principal 5025 armazena em cache páginas de dados paginadas dentro e fora do armazenamento principal 5025 pelo sistema operativo.
Um contador de programa (contador de instruções) 5061 mantém o controlo do endereço da instrução atual a ser executada. Um contador de programa num processador da z/Architecture® tem 64 bits e pode ser truncado para 31 ou 24 bits para suportar os limites de endereçamento anteriores. Um contador de programa é normalmente incorporado numa PSW (Program Status Word - Palavra de Estado de Programa) de um computador, de modo a que persista durante a comutação de contextos. Assim, um programa em curso, tendo um valor de contador de programa, pode ser interrompido, por exemplo, pelo sistema operativo (comutação de contexto do ambiente do programa para o ambiente do sistema operativo). A PSW do programa mantém o valor de contador de programa enquanto o programa não estiver ativo, e o contador de programa (na PSW) do sistema operativo é utilizado enquanto o sistema operativo está em -79- ΡΕ2585925 execução. Tipicamente, o contador de programa é incrementado por um valor igual ao número de bytes da instrução corrente. As instruções RISC (Reduced Instruction Set Computing - Conjunto Reduzido de Instruções de Computação) têm normalmente um comprimento fixo, enquanto as instruções CISC (Complex Instruction Set Computing -Conjunto Complexo de Instruções de Computação) têm normalmente dimensão variável. As instruções da IBM z/Architecture® são instruções CISC, tendo um comprimento de 2, 4 ou 6 bytes. 0 contador de programa 5061 é modificado ou por uma operação de comutação de contexto ou de por uma operação retirada de ramificação de uma instrução de ramificação, por exemplo. Numa operação de comutação de contexto, o valor de contador de programa atual é guardado na palavra de estado de programa, juntamente com outra informação de estado sobre o programa que está a ser executado (tal como códigos de condição), e um novo valor de contador de programa é carregado apontando para uma instrução de um novo módulo de programa a ser executado. Uma operação retirada de ramificação é realizada a fim de permitir ao programa tomar decisões ou entrar em ciclo dentro do programa através do carregamento do resultado da instrução de ramificação no contador de programa 5061.
Normalmente, uma unidade de pesquisa de instruções 5055 é utilizada para pesquisar instruções em nome do processador 5026. A unidade de pesquisa ou pesquisa "próximas instruções sequenciais", instruções de destino -80- ΡΕ2585925 das instruções retiradas de ramificação ou primeiras instruções de um programa depois de uma comutação de contexto. As unidades de pesquisa de Instruções Modernas muitas vezes empregam técnicas de pré-pesquisa para especulativamente pré-procurar instruções baseadas na probabilidade das instruções pré-pesquisadas poderem ser utilizadas. Por exemplo, uma unidade de pesquisa pode pesquisar 16 bytes de instrução que inclui a próxima instrução sequencial e bytes adicionais de mais instruções sequenciais.
As instruções pesquisadas são então executadas pelo processador 5026. Numa forma de realização, a(s) instrução(ões) pesquisada(s) são passadas para uma unidade de envio 5056 da unidade de pesquisa. A unidade de envio descodifica a(s) instrução(ões) e encaminha a informação sobre a(s) instrução(ões) descodificada(s) para unidades apropriadas 5057, 5058, 5060. Uma unidade de execução 5057 irá tipicamente receber informação sobre instruções aritméticas descodificadas a partir da unidade de pesquisa de instruções 5055 e irá realizar operações aritméticas em operandos de acordo com o código de operação (opcode) da instrução. Os operandos são fornecidos à unidade de execução 5057, de preferência ou a partir da memória 5025, registos arquitetados 5059 ou a partir de um campo imediato da instrução a ser executada. Os resultados da execução, quando armazenados, são armazenados ou na memória 5025, registos 5059 ou em outro hardware da máquina (tais como registos de controlo, registos PSW e afins). -81 - ΡΕ2585925
Um processador 5026 tipicamente tem uma ou mais unidades 5057, 5058, 5060 para executar a função da instrução. Com referência à FIG. 15A, uma unidade de execução 5057 pode comunicar com registos gerais arguitetados 5059, uma unidade de descodificação/envio 5056, uma unidade de carga armazenamento 5060, e outras unidades de processador 5065 por meio de uma lógica de interface 5071. Uma unidade de execução 5057 pode empregar vários circuitos de registo 5067, 5068, 5069 para manter informação sobre a gual a unidade aritmética lógica (Arithmetic Logic Unit - ALU) 5066 irá operar. A ALU realiza operações aritméticas tais como somar, subtrair, multiplicar e dividir, bem como funções lógicas, tais como AND, OR e OU-exclusivo (XOR), rotação e deslocamento. De preferência, a ALU suporta operações especializadas que são dependentes do design. Outros circuitos podem fornecer outras facilidades arquitetadas 5072, incluindo códigos de condição e lógica de suporte à recuperação, por exemplo. Tipicamente, o resultado de uma operação ALU é mantido num circuito de registo de saída 5070 que pode encaminhar o resultado para uma variedade de outras funções de processamento. Existem muitos arranjos de unidades de processador, a presente descrição destina-se apenas a proporcionar uma compreensão representativa de uma forma de realização.
Uma instrução ADICIONAR, por exemplo, seria executada numa unidade de execução 5057 tendo funcionalidade aritmética e lógica, enquanto uma instrução -82- ΡΕ2585925 de ponto flutuante, por exemplo, seria executada numa execução de ponto flutuante com capacidade especializada de ponto flutuante. De preferência, uma unidade de execução opera em operandos identificados por uma instrução realizando uma função definida pelo código de operação (opcode) nos operandos. Por exemplo, uma instrução ADICIONAR pode ser executada por uma unidade de execução 5057 em operandos encontrados em dois registos 5059 identificados por campos de registo da instrução. A unidade de execução 5057 realiza a adição aritmética sobre dois operandos e armazena o resultado num terceiro operando em que o terceiro operando pode ser um terceiro registo ou um dos dois registos de origem. A unidade de execução de preferência utiliza uma Unidade Aritmética Lógica (Arithmetic Logic Unit - ALU) 5066 que é capaz de realizar uma variedade de funções lógicas tais como Deslocamento, Rotação, E (AND), OU (OR) e OU-EXCLUSIVO (XOR), bem como uma variedade de funções algébricas incluindo qualquer uma das funções adicionar, subtrair, multiplicar , dividir. Algumas ALUs 5066 são concebidas para operações escalares e algumas para ponto flutuante. Os dados podem ser Big Endian (onde o byte menos significativo está no endereço de byte mais elevado) ou Little Endian (onde o byte menos significativo está no endereço de byte mais baixo), dependendo da arquitetura. A IBM z/Architecture® é Big Endian. Os campos com sinal podem ser sinal e magnitude, complemento de 1 ou complemento de 2, dependendo da arquitetura. Um número de complemento de 2 é -83- ΡΕ2585925 vantajoso pelo facto da ALU não necessitar de conceber uma capacidade de subtrair uma vez que ou um valor negativo ou um valor positivo como complemento de 2 requer apenas uma adição dentro da ALU. Os números são normalmente descritos na forma resumida, onde um campo de 12 bits define um endereço de um bloco de 4096 bytes e é vulgarmente descrito como um bloco de 4 Kbyte (Kilo-byte), por exemplo.
Com referência à FIG. 15B, a informação de instrução de ramificação para execução de uma instrução de ramificação é tipicamente enviada para uma unidade de ramificação 5058 que muitas vezes emprega um algoritmo de predição de ramificações, tal como uma tabela de histórico de ramificação 5082 para prever o resultado da ramificação antes de outras operações condicionais estarem terminadas. O de destino da instrução de ramificação atual será pesquisado e especulativamente executado antes das operações condicionais estarem terminadas. Quando as operações condicionais estiverem terminadas as instruções de ramificação especulativamente executadas são ou concluídas ou descartadas com base nas condições da operação condicional e do resultado especulado. Uma instrução de ramificação típica pode testar códigos de condição e ramificar para um endereço de destino se os códigos de condição cumprirem o requisito de ramificação da instrução de ramificação, um endereço de destino pode ser calculado com base em vários números, incluindo os encontrados nos campos de registo ou um campo imediato da instrução por exemplo. A unidade de ramificação 5058 pode -84- ΡΕ2585925 empregar uma ALU 5074 tendo uma pluralidade de circuitos de registo de entrada 5075, 5076, 5077 e um circuito de registo de saída 5080. A unidade de ramificação 5058 pode comunicar com os registos gerais 5059, a unidade de descodificação e envio 5056 ou outros circuitos 5073, por exemplo. A execução de um grupo de instruções pode ser interrompida por uma variedade de razões, incluindo uma comutação de contexto iniciada por um sistema operativo, um erro ou exceção de programa provocando uma comutação de contexto, um sinal de interrupção de I/O provocando uma comutação de contexto ou uma atividade de multitratamento de uma pluralidade de programas (num ambiente multitratamento), por exemplo. De preferência, uma ação de comutação de contexto guarda informação de estado sobre um
programa atualmente em execução e em seguida carrega a informação de estado sobre outro programa que está a ser invocado. A informação de estado pode ser guardada em registos de hardware ou na memória, por exemplo. A informação de estado de preferência compreende um valor de contador de programa aponta para uma próxima instrução a ser executada, códigos de condição, tradução de informação da memória e conteúdo de registo arquitetado. Uma atividade de comutação de contexto pode ser exercida por circuitos de hardware, programas aplicativos, programas de sistemas operativos ou código de firmware (microcódigo, picocódigo ou código interno licenciado (Licensed Internai Code LIC)) isoladamente ou em combinação. -85- ΡΕ2585925
Um processador acede a operandos de acordo com os métodos definidos nas instruções. A instrução pode fornecer um operando imediato utilizando o valor de uma parte da instrução, pode fornecer um ou mais campos de registo que apontam explicitamente ou para registos de propósito geral ou para registos de propósito especifico (registos de ponto flutuante, por exemplo). A instrução pode utilizar registos implícitos identificados por um campo opcode como operandos. A instrução pode utilizar localizações de memória para operandos. Uma localização de memória de um operando pode ser fornecida por um registo, um campo imediato, ou uma combinação de registos e um campo imediato tal como exemplificado pela facilidade de deslocamento longo da z/Architecture®, em que a instrução define um registo base, um registo de índice e um campo imediato (campo de deslocamento), que são adicionados em conjunto para fornecer o endereço do operando na memória, por exemplo. A localização aqui normalmente implica uma localização na memória principal (armazenamento principal), salvo indicação em contrário.
Com referência à FIG. 15C, um processador acede ao armazenamento utilizando uma unidade de carga/armazenamento 5060. A unidade de carga/armazenamento 5060 pode realizar uma operação de carga através da obtenção do endereço do operando de destino na memória 5053 e carregando o operando num registo 5059 ou outra localização da memória 5053, ou pode realizar uma operação de armazenamento, mediante a obtenção do endereço do -86- ΡΕ2585925 operando de destino na memória 5053 e armazenando os dados obtidos a partir de um registo 5059 ou outra localização da memória 5053 na localização do operando de destino na memória 5053. A unidade de carga/armazenamento 5060 pode ser especulativa e pode aceder à memória numa sequência que está fora de ordem em relação à sequência de instruções, no entanto a unidade de carga/armazenamento 5060 deve manter a aparência aos programas de que as instruções foram executadas por ordem. A unidade de carga/armazenamento 5060 pode comunicar com os registos gerais 5059, unidade de descodificação e envio 5056, interface de cache/memória 5053 ou outros elementos 5083 e compreende vários circuitos de registo, ALUs 5085 e lógica de controlo 5090 para calcular endereços de armazenamento e fornecer uma sequenciação em série para manter as operações por ordem. Algumas operações podem estar fora de ordem, mas a unidade de carga/armazenamento fornece a funcionalidade de fazer com que as operações fora de ordem pareçam ao programa como tendo sido realizadas por ordem, como é bem conhecido na técnica.
De preferência, os endereços que um programa aplicativo "vê" são muitas vezes referidos como endereços virtuais. Os endereços virtuais são algumas vezes referidos como "endereços lógicos" e "endereços efetivos". Estes endereços virtuais são virtuais no sentido em que eles são redirecionados para a localização de memória física por uma de uma variedade de tecnologias de tradução de endereços dinâmica (Dynamic Address Translation - DAT), incluindo, -87- ΡΕ2585925 mas não estando limitadas a simplesmente prefixar um endereço virtual com um valor de deslocamento, a traduzir o endereço virtual através de uma ou mais tabelas de tradução, as tabelas de tradução compreendendo de preferência pelo menos uma tabela de segmentos e uma tabela de páginas isoladamente ou em combinação, de preferência, a tabela de segmentos tendo uma entrada que aponta para a tabela de páginas. Na z/Architecture®, uma hierarquia de tradução é fornecida incluindo uma primeira tabela de região, uma segunda tabela de região, uma terceira tabela de região, uma tabela de segmentos e uma tabela de páginas opcional. 0 desempenho da tradução de endereços é muitas vezes melhorado através da utilização de um buffer lookaside de tradução (Translation Lookaside Buffer - TLB) que compreende entradas mapeando um endereço virtual para uma localização de memória física associada. As entradas são criadas quando a DAT traduz um endereço virtual utilizando as tabelas de tradução. Uma utilização subsequente do endereço virtual pode então utilizar a entrada da TLB rápida em vez dos acessos sequenciais lentos à tabela de tradução. 0 conteúdo do TLB pode ser gerido por uma variedade de algoritmos de substituição, incluindo LRU {Least Recently Used - Utilizado com Menos Frequência).
No caso em que o processador é um processador de um sistema multiprocessador, cada processador tem a responsabilidade de manter recursos partilhados, tais como 1/0, caches, TLBs e memória, interligados por uma questão de coerência. Normalmente, tecnologias "snoop" serão -88- ΡΕ2585925 utilizadas na manutenção da coerência da cache. Num ambiente de snoop, cada linha de cache pode ser marcada como estando em qualquer um de um estado partilhado, um estado exclusivo, um estado alterado, um estado inválido e semelhantes, a fim de facilitar a partilha.
As unidades de 1/0 5054 (FIG. 14) fornecem ao processador meios para acoplar a dispositivos periféricos, incluindo fita, disco, impressoras, monitores e redes, por exemplo. As unidades de I/O são frequentemente apresentadas ao proqrama de computador por drivers de software. Nos computadores mainframe, tais como o System Z® da IBM®, os adaptadores de canal e os adaptadores de sistemas abertos são unidades de 1/0 do computador mainframe que fornecem as comunicações entre o sistema operativo e os dispositivos periféricos.
Além disso, outros tipos de ambientes de computação podem beneficiar de um ou mais aspetos da presente invenção. Como um exemplo, um ambiente pode incluir um emulador (por exemplo, software ou outros mecanismos de emulação), em que uma arquitetura especifica (incluindo, por exemplo, a execução de instruções, funções arquitetadas, tais como a tradução de endereços, e registos arquitetados) ou um subconjunto dela é emulada (por exemplo, num sistema de computação nativo tendo um processador e memória) . Num tal ambiente, uma ou mais funções de emulação do emulador podem implementar um ou mais aspetos da presente invenção, mesmo que um computador -89- ΡΕ2585925 executando o emulador possa ter uma arquitetura diferente das capacidades a serem emuladas. Como um exemplo, no modo de emulação, a instrução ou operação específica a ser emulada é descodificada, e uma função de emulação apropriada é construída para implementar a instrução ou operação individual.
Num ambiente de emulação, um computador anfitrião inclui, por exemplo, uma memória para armazenar instruções e dados; uma unidade de pesquisa de instruções para pesquisar instruções a partir da memória e opcionalmente, proporcionar armazenamento local para a instrução pesquisada; uma unidade de descodificação de instruções para receber as instruções pesquisadas e para determinar o tipo de instruções que foram pesquisadas; e uma unidade de execução de instruções para executar as instruções. A execução pode incluir o carregamento de dados num registo a partir da memória; o armazenamento de dados de volta para a memória a partir de um registo; ou a realização de algum tipo de operação aritmética ou lógica, conforme determinado pela unidade de descodificação. Num exemplo, cada unidade é implementada em software. Por exemplo, as operações sendo realizadas pelas unidades são implementadas como uma ou mais subrotinas no software emulador.
Mais especificamente, num computador mainframe, as instruções de máquina arquitetadas são utilizadas por programadores, geralmente hoje programadores "C", muitas vezes por meio de um aplicativo compilador. Estas -90- ΡΕ2585925 instruções armazenadas no suporte de armazenamento podem ser executadas nativamente num servidor IBPÍ® z/Arquitecture®, ou alternativamente em máquinas que executam outras arquiteturas. Elas podem ser emuladas nos servidores mainframe IBM® atuais e futuros e em outras máquinas da IBM® (por exemplo, servidores Power Systems e servidores System x®) . Elas podem ser executadas em máquinas correndo Linux numa ampla variedade de máquinas que utilizam hardware fabricado pela IBM®, Intel®, AMD™, e outros. Para além da execução nesse hardware numa z/ Arquitecture®, pode ser utilizado Linux, bem como as máquinas que utilizam emulação por Hercules (ver www.hercules-390.org), ou FSI (Fundamental Software, Inc) (ver www.funsoft.com), onde geralmente a execução está em modo de emulação. Em modo de emulação, o software de emulação é executado por um processador nativo para emular a arquitetura de um processador emulado. 0 processador nativo tipicamente executa software de emulação compreendendo ou firmware ou um sistema operativo nativo para realizar emulação do processador emulado. 0 software de emulação é responsável por pesquisar e executar instruções da arquitetura do processador emulado. 0 software de emulação mantém um contador de programa emulado para controlar os limites das instruções. 0 software de emulação pode pesquisar uma ou mais instruções de máquina emuladas de cada vez e traduzir uma ou mais das instruções de máquina emuladas para um grupo correspondente de instruções de máquina nativas para -91 - ΡΕ2585925 execução pelo processador nativo. Estas instruções traduzidas podem estar em cache de modo a que uma tradução mais rápida possa ser conseguida. Apesar disso, o software de emulação deve manter as regras de arquitetura da arquitetura do processador emulado de forma a assegurar que os sistemas operativos e aplicações escritos para o processador emulado funcionam corretamente. Além disso, o software de emulação deve fornecer recursos identificados pela arquitetura do processador emulado, incluindo, mas não estando limitado a registos de controlo, registos de propósito geral, registos de ponto flutuante, função de tradução de endereços dinâmica, incluindo tabelas de segmentos e tabelas de páginas por exemplo, mecanismos de interrupção, mecanismos de comutação de contexto, relógios de Hora do Dia (Time of Day TOD) e interfaces arquitetadas para subsistemas de I / 0 tal que um sistema operativo ou um programa aplicativo concebido para correr no processador emulado possa ser executado no processador nativo tendo o software de emulação.
Uma instrução especifica sendo emulada é descodificada, e uma subrotina é chamada a realizar a função da instrução individual. Uma função do software de emulação emulando uma função de um processador emulado é implementada, por exemplo, numa subrotina ou driver “C", ou qualquer outro método de fornecimento de um driver para o hardware especifico conforme estará dentro da especialização das pessoas na técnica após compreenderem a descrição da forma de realização preferida. Várias patentes -92- ΡΕ2585925 de emulação de software e hardware incluindo, mas não estando limitadas à Carta Patente dos E.U.A. N° 5 551 013, intitulada “Multiprocessor for Hardware Emulation", por Beausoleil et al.; e à Carta Patente dos E.U.A. N° 6 009 261, intitulada "Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor", por Scalzi et al; e à Carta Patente dos E.U.A. N° 5 574 873, intitulada “Decoding Guest Instruction to
Directly Access Emulation Routines that Emulate the Guest Instructions”, por Davidian et al, e à Carta Patente dos E.U.A. N° 6 308 255, intitulada "Symmetrical
Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System", por Gorishek et al, e à Carta Patente dos E.U.A. N° 6 463 582, intitulada "Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method", por Lethin et al, e à Carta Patente dos E.U.A. N° 5 790 825, intitulada "Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions", por Eric Traut; e muitas outras, representam uma variedade de formas conhecidas para atingir a emulação de um formato de instrução arquitetado para uma máquina diferente para uma máquina de destino disponível para os que são peritos na técnica.
Na FIG. 16, um exemplo de um sistema de computação anfitrião emulado 5092 é fornecido que emula um sistema de computação anfitrião 5000' de uma arquitetura -93- ΡΕ2585925 anfitriã. No sistema de computação anfitrião emulado 5092, o processador anfitrião (CPU) 5091 é um processador anfitrião emulado (ou processador anfitrião virtual), e compreende um processador de emulação 5093 tendo um conjunto de instruções nativas diferente do que o do processador 5091 do computador anfitrião 5000'. O sistema de computação anfitrião emulado 5092 tem a memória 5094 acessível ao processador de emulação 5093. Na forma de realização exemplificativa, a memória 5094 é dividida numa parte de memória de um computador anfitrião 5096 e numa parte de rotinas de emulação 5097. A memória do computador anfitrião 5096 está disponível para os programas do computador anfitrião emulado 5092 de acordo com a arquitetura do computador anfitrião. O processador de emulação 5093 executa instruções nativas de um conjunto de instruções arquitetado de uma arquitetura diferente da do processador emulado 5091, as instruções nativas obtidas a partir de da memória de rotinas de emulação 5097, e pode aceder a uma instrução anfitriã para a execução a partir de um programa na memória do computador anfitrião 5096 empregando uma ou mais instruções, obtidas numa rotina de sequência & acesso/descodificação que pode descodificar a(s) instrução(ões) anfitriã(s) acedida(s) para determinar uma rotina de execução de instrução nativa para emular o funcionamento da instrução anfitriã acedida. Outras facilidades que são definidas para a arquitetura do sistema de computação anfitrião 5000' podem ser emuladas por rotinas de facilidades arquitetadas, incluindo facilidades tais como registos de propósito geral, registos de -94- ΡΕ2585925 controlo, tradução de endereços dinâmica e suporte do subsistema de 1/0 e cache do processador, por exemplo. As rotinas de emulação também podem tirar proveito das funções disponíveis no processador de emulação 5093 (tais como registos gerais e tradução dinâmica de endereços virtuais) para melhorar o desempenho das rotinas de emulação. Pode também ser fornecido hardware especial e motores de desvio de carga (off-load) para auxiliar o processador 5093 na emulação do funcionamento do computador anfitrião 5000. A terminologia aqui utilizada é para o propósito de descrever formas de realização específicas e não tem a intenção de ser uma limitação da invenção. Tal como aqui utilizadas, as formas singulares "um", "uma" e "o" e "a" pretendem também incluir as formas plurais, a menos que o contexto indique claramente o contrário. Será adicionalmente compreendido que os termos "compreende" e/ou "compreendendo", quando utilizados na presente memória descritiva, especificam a presença de funcionalidades indicadas, inteiros, etapas, operações, elementos e/ou componentes, mas não excluem a presença ou a adição de uma ou mais outras funcionalidades, inteiros, etapas, operações, elementos, componentes e/ou grupos da mesma.
Lisboa, 12 de Novembro de 2013
Claims (3)
- ΡΕ2585925 - 1 - REIVINDICAÇÕES 1. Um método para facilitar o acesso à memória, compreendendo as etapas de: responsivo à execução de uma instrução Modificar Controlos de Função PCI (Modify PCI Function Controls - MPFC) que especifica uma handle para localizar um adaptador, um apontador para a localização de uma ou mais tabelas de tradução e um campo de formato que indica um formato de tradução selecionado de uma pluralidade de formatos de tradução disponíveis, estabelecendo um formato de tradução para o formato de tradução selecionado, associado através da handle, com um adaptador; responsivo à receção de uma solicitação a partir do adaptador, obtendo em tempo de execução uma indicação do formato de tradução estabelecido pela instrução MPFC para ser utilizado no fornecimento de um endereço utilizável no acesso à memória, o referido formato de tradução sendo pré-registado para o adaptador, a solicitação tendo um endereço inicial para ser utilizado no fornecimento do endereço utilizável no acesso à memória; e determinar o endereço de acesso direto à memória (Direct Memory Access - DMA) utilizável no acesso à -2- ΡΕ2585925 memória com base no formato de tradução obtido e no endereço inicial, o endereço inicial sendo gerado pelo adaptador; e armazenar ou pesquisar dados sobre o adaptador no endereço DMA. 2. 0 método da reivindicação 1, em que a pluralidade de formatos de tradução disponíveis inclui um ou mais dos seguintes formatos: um formato selecionado compatível com tradução de endereços dinâmica numa unidade central de processamento (CPU DAT), um formato escolhido de tradução de endereços de entrada/saída (1/0) estendido que utiliza uma ou mais tabelas de tradução de endereços estendidas, um formato de contorno (bypass) em que a tradução de endereços é ignorada, ou um formato sem pesquisa em que nenhuma tabela de tradução de endereços é pesquisada. 3. 0 método da reivindicação 2, em que a obtenção obtém uma indicação de que o formato de tradução é o formato de bypass, e em que a determinação determina que o endereço utilizável no acesso à memória é o endereço inicial, responsivo ao formato de tradução sendo o formato de bypass. 4. 0 método da reivindicação 3, em que o formato de bypass é selecionado com base no adaptador sendo um adaptador confiável. -3- ΡΕ2585925 5. 0 método da reivindicação 2, em que a obtenção obtém uma indicação de que o formato de tradução é o formato sem pesquisa, e em que a determinação determina o endereço utilizável no acesso à memória utilizando o endereço inicial e um apontador para uma tabela de tradução de endereços de nível mais elevado para ser utilizada na determinação do endereço. 6. 0 método da reivindicação 2, em que a obtenção obtém uma indicação de que o formato de tradução é o formato selecionado compatível com CPU DAT, e em que a determinação determina o endereço utilizando o endereço inicial e uma ou mais tabelas de tradução compatíveis com CPU DAT. 7. 0 método da reivindicação 6, em que o formato compatível com CPU DAT compreende um de um formato de 4k compatível com CPU DAT ou um formato de 1M compatível com CPU DAT. 8. 0 método da reivindicação 2, em que a obtenção obtém uma indicação de que o formato da tradução é o formato escolhido de tradução de endereços estendido de 1/0, e em que a determinação determina o endereço utilizando o endereço inicial e uma ou mais tabelas de tradução de 1/0. 9. 0 método da reivindicação 8, em que o formato escolhido de tradução de endereços estendido de 1/0 compreende um de um formato com tabelas de tradução de -4- ΡΕ2585925 endereços com 4k com páginas de 4k, um formato com tabelas de tradução de endereços com 1M com páginas de 4k, ou um formato com tabelas de tradução de endereços com 1M com páginas com 1M. 10.0 método da reivindicação 1, em que a obtenção compreende a verificação de um indicador de formato numa entrada da tabela de dispositivos associada com o adaptador para obter a indicaçao do formato de tradução a ser utilizado • 11.0 método da reivindicação 1, em que a definição compreende indicar numa entrada da tabela de dispositivos associada com o adaptador o formato de tradução selecionado. 12.0 método da reivindicação 1, em que o formato de tradução registado para o adaptador é diferente de um outro formato de tradução registado para um outro adaptador.
- 13. Um sistema compreendendo meios adaptados para levar a cabo todas as etapas do método de acordo com qualquer reivindicação precedente do método.
- 14. Um programa de computador compreendendo instruções especialmente adaptadas para levar a cabo as etapas do método de acordo com qualquer reivindicação precedente do método, quando o referido programa de -5- ΡΕ2585925 computador é executado num dispositivo de processamento de dados. Lisboa, 12 de Novembro de 2013
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/821,171 US8650337B2 (en) | 2010-06-23 | 2010-06-23 | Runtime determination of translation formats for adapter functions |
Publications (1)
Publication Number | Publication Date |
---|---|
PT2585925E true PT2585925E (pt) | 2013-11-19 |
Family
ID=43782903
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PT107758179T PT2585925E (pt) | 2010-06-23 | 2010-11-08 | Determinação durante tempo de execução de formatos de tradução para funções de adaptador |
Country Status (13)
Country | Link |
---|---|
US (1) | US8650337B2 (pt) |
EP (1) | EP2585925B1 (pt) |
JP (1) | JP5731641B2 (pt) |
KR (1) | KR101464897B1 (pt) |
CN (1) | CN102947808B (pt) |
AU (1) | AU2010355800B2 (pt) |
CA (1) | CA2800630C (pt) |
IL (1) | IL223588B (pt) |
PT (1) | PT2585925E (pt) |
RU (1) | RU2556418C2 (pt) |
SG (1) | SG186104A1 (pt) |
WO (1) | WO2011160709A1 (pt) |
ZA (1) | ZA201209700B (pt) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8635430B2 (en) | 2010-06-23 | 2014-01-21 | International Business Machines Corporation | Translation of input/output addresses to memory addresses |
US8572635B2 (en) | 2010-06-23 | 2013-10-29 | International Business Machines Corporation | Converting a message signaled interruption into an I/O adapter event notification |
US8615645B2 (en) * | 2010-06-23 | 2013-12-24 | International Business Machines Corporation | Controlling the selectively setting of operational parameters for an adapter |
US8468284B2 (en) | 2010-06-23 | 2013-06-18 | International Business Machines Corporation | Converting a message signaled interruption into an I/O adapter event notification to a guest operating system |
US8510599B2 (en) * | 2010-06-23 | 2013-08-13 | International Business Machines Corporation | Managing processing associated with hardware events |
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2012103253A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Multilevel conversion table cache for translating guest instructions to native instructions |
WO2012103367A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
US9355040B2 (en) | 2012-10-08 | 2016-05-31 | International Business Machines Corporation | Adjunct component to provide full virtualization using paravirtualized hypervisors |
US9348757B2 (en) | 2012-10-08 | 2016-05-24 | International Business Machines Corporation | System supporting multiple partitions with differing translation formats |
US9355032B2 (en) | 2012-10-08 | 2016-05-31 | International Business Machines Corporation | Supporting multiple types of guests by a hypervisor |
US9740624B2 (en) | 2012-10-08 | 2017-08-22 | International Business Machines Corporation | Selectable address translation mechanisms within a partition |
US9600419B2 (en) | 2012-10-08 | 2017-03-21 | International Business Machines Corporation | Selectable address translation mechanisms |
US9280488B2 (en) | 2012-10-08 | 2016-03-08 | International Business Machines Corporation | Asymmetric co-existent address translation structure formats |
CN109358948B (zh) | 2013-03-15 | 2022-03-25 | 英特尔公司 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
WO2014151652A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
US20150261688A1 (en) * | 2014-03-14 | 2015-09-17 | International Business Machines Corporation | Extended page table for i/o address translation |
US9678892B2 (en) * | 2015-09-01 | 2017-06-13 | International Business Machines Corporation | Flexible I/O DMA address allocation in virtualized systems |
US10095620B2 (en) * | 2016-06-29 | 2018-10-09 | International Business Machines Corporation | Computer system including synchronous input/output and hardware assisted purge of address translation cache entries of synchronous input/output transactions |
US11442760B2 (en) * | 2016-07-01 | 2022-09-13 | Intel Corporation | Aperture access processors, methods, systems, and instructions |
US10140214B2 (en) | 2016-08-29 | 2018-11-27 | Red Hat Israel, Ltd. | Hypervisor translation bypass by host IOMMU with virtual machine migration support |
US10387325B2 (en) | 2017-11-28 | 2019-08-20 | International Business Machines Corporation | Dynamic address translation for a virtual machine |
JP6607332B1 (ja) * | 2019-05-15 | 2019-11-20 | 富士通クライアントコンピューティング株式会社 | 中継装置、プログラム、及び情報処理システム |
CN114124688B (zh) * | 2020-08-11 | 2024-02-20 | 中国电信股份有限公司 | 配置方法及系统、计算机可存储介质 |
Family Cites Families (191)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5242031A (en) * | 1975-09-29 | 1977-04-01 | Hitachi Ltd | Information processing unit |
US4028668A (en) | 1975-12-22 | 1977-06-07 | Honeywell Information Systems, Inc. | Apparatus for selectively addressing sections and locations in a device controller's memory |
US4323963A (en) | 1979-07-13 | 1982-04-06 | Rca Corporation | Hardware interpretive mode microprocessor |
AU7804381A (en) | 1981-10-13 | 1983-05-05 | International Business Machines Corp. | Method and apparatus for measurements of channel operation |
US5053952A (en) | 1987-06-05 | 1991-10-01 | Wisc Technologies, Inc. | Stack-memory-based writable instruction set computer having a single data bus |
JPH0195347A (ja) * | 1987-10-08 | 1989-04-13 | Nec Corp | アドレス変換方式 |
US5282274A (en) | 1990-05-24 | 1994-01-25 | International Business Machines Corporation | Translation of multiple virtual pages upon a TLB miss |
US5170472A (en) | 1991-03-28 | 1992-12-08 | International Business Machines Corp. | Dynamically changing a system i/o configuration definition |
US5465355A (en) | 1991-09-04 | 1995-11-07 | International Business Machines Corporation | Establishing and restoring paths in a data processing I/O system |
JPH05165715A (ja) | 1991-12-12 | 1993-07-02 | Nec Corp | 情報処理装置 |
JPH0821015B2 (ja) | 1992-01-20 | 1996-03-04 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータならびにそのシステム再構成化装置および方法 |
US5617554A (en) | 1992-02-10 | 1997-04-01 | Intel Corporation | Physical address size selection and page size selection in an address translator |
US5600805A (en) | 1992-06-15 | 1997-02-04 | International Business Machines Corporation | Pass-through for I/O channel subsystem call instructions for accessing shared resources in a computer system having a plurality of operating systems |
US5265240A (en) | 1992-07-24 | 1993-11-23 | International Business Machines Corporation | Channel measurement method and means |
US5465332A (en) | 1992-09-21 | 1995-11-07 | International Business Machines Corporation | Selectable 8/16 bit DMA channels for "ISA" bus |
JP2500101B2 (ja) | 1992-12-18 | 1996-05-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 共用変数の値を更新する方法 |
AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US5535352A (en) | 1994-03-24 | 1996-07-09 | Hewlett-Packard Company | Access hints for input/output address translation mechanisms |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
DE19580707C2 (de) | 1994-06-28 | 2003-10-30 | Intel Corp | PCI-ZU-ISA-Interrupt-Protokoll-Konverter und -Auswahlmechanismus |
US5748950A (en) | 1994-09-20 | 1998-05-05 | Intel Corporation | Method and apparatus for providing an optimized compare-and-branch instruction |
US5901312A (en) | 1994-12-13 | 1999-05-04 | Microsoft Corporation | Providing application programs with unmediated access to a contested hardware resource |
US5802590A (en) | 1994-12-13 | 1998-09-01 | Microsoft Corporation | Method and system for providing secure access to computer resources |
JPH08263424A (ja) | 1995-03-20 | 1996-10-11 | Fujitsu Ltd | コンピュータ装置 |
EP0747872B1 (en) * | 1995-06-07 | 1999-03-03 | International Business Machines Corporation | Video processor with addressing mode control |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
US5960213A (en) | 1995-12-18 | 1999-09-28 | 3D Labs Inc. Ltd | Dynamically reconfigurable multi-function PCI adapter device |
US5974440A (en) | 1996-03-25 | 1999-10-26 | Texas Instruments Incorporated | Microprocessor with circuits, systems, and methods for interrupt handling during virtual task operation |
US5819053A (en) | 1996-06-05 | 1998-10-06 | Compaq Computer Corporation | Computer system bus performance monitoring |
US5983332A (en) * | 1996-07-01 | 1999-11-09 | Sun Microsystems, Inc. | Asynchronous transfer mode (ATM) segmentation and reassembly unit virtual address translation unit architecture |
US5761448A (en) | 1996-08-30 | 1998-06-02 | Ncr Corporation | Physical-to-logical bus mapping scheme for computer systems having multiple PCI bus configuration |
US5838960A (en) | 1996-09-26 | 1998-11-17 | Bay Networks, Inc. | Apparatus for performing an atomic add instructions |
US5826084A (en) | 1997-03-25 | 1998-10-20 | Texas Instruments Incorporated | Microprocessor with circuits, systems, and methods for selectively bypassing external interrupts past the monitor program during virtual program operation |
US6195674B1 (en) | 1997-04-30 | 2001-02-27 | Canon Kabushiki Kaisha | Fast DCT apparatus |
KR100263672B1 (ko) | 1997-05-08 | 2000-09-01 | 김영환 | 가변적인 페이지 크기를 지원하는 어드레스 변환장치 |
US5914730A (en) | 1997-09-09 | 1999-06-22 | Compaq Computer Corp. | System and method for invalidating and updating individual GART table entries for accelerated graphics port transaction requests |
US6067595A (en) | 1997-09-23 | 2000-05-23 | Icore Technologies, Inc. | Method and apparatus for enabling high-performance intelligent I/O subsystems using multi-port memories |
US5864703A (en) | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6078970A (en) | 1997-10-15 | 2000-06-20 | International Business Machines Corporation | System for determining adapter interrupt status where interrupt is sent to host after operating status stored in register is shadowed to host memory |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6023736A (en) | 1997-12-19 | 2000-02-08 | International Business Machines Corporation | System for dynamically configuring I/O device adapters where a function configuration register contains ready/not ready flags corresponding to each I/O device adapter |
US6021458A (en) | 1998-01-21 | 2000-02-01 | Intel Corporation | Method and apparatus for handling multiple level-triggered and edge-triggered interrupts |
US6223299B1 (en) | 1998-05-04 | 2001-04-24 | International Business Machines Corporation | Enhanced error handling for I/O load/store operations to a PCI device via bad parity or zero byte enables |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US6615305B1 (en) | 1998-08-27 | 2003-09-02 | Intel Corporation | Interrupt pacing in data transfer unit |
US6463582B1 (en) | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6408347B1 (en) | 1998-12-10 | 2002-06-18 | Cisco Technology, Inc. | Integrated multi-function adapters using standard interfaces through single a access point |
US6519645B2 (en) | 1999-02-19 | 2003-02-11 | International Business Machine Corporation | Method and apparatus for providing configuration information using a queued direct input-output device |
US6349380B1 (en) | 1999-03-12 | 2002-02-19 | Intel Corporation | Linear address extension and mapping to physical memory using 4 and 8 byte page table entries in a 32-bit microprocessor |
US6557035B1 (en) | 1999-03-30 | 2003-04-29 | International Business Machines Corporation | Rules-based method of and system for optimizing server hardware capacity and performance |
US6330656B1 (en) | 1999-03-31 | 2001-12-11 | International Business Machines Corporation | PCI slot control apparatus with dynamic configuration for partitioned systems |
US6578191B1 (en) | 1999-05-17 | 2003-06-10 | International Business Machines Corporation | Method and apparatus for dynamic generation of adapters |
US6330647B1 (en) | 1999-08-31 | 2001-12-11 | Micron Technology, Inc. | Memory bandwidth allocation based on access count priority scheme |
US6772097B1 (en) | 1999-09-30 | 2004-08-03 | Intel Corporation | Retrieving I/O processor performance monitor data |
US6493741B1 (en) | 1999-10-01 | 2002-12-10 | Compaq Information Technologies Group, L.P. | Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit |
US6970992B2 (en) | 1999-10-04 | 2005-11-29 | Intel Corporation | Apparatus to map virtual pages to disparate-sized, non-contiguous real pages and methods relating thereto |
US6651126B1 (en) | 1999-10-29 | 2003-11-18 | Texas Instruments Incorporated | Snapshot arbiter mechanism |
US7509391B1 (en) | 1999-11-23 | 2009-03-24 | Texas Instruments Incorporated | Unified memory management system for multi processor heterogeneous architecture |
US6529978B1 (en) | 2000-02-23 | 2003-03-04 | International Business Machines Corporation | Computer input/output (I/O) interface with dynamic I/O adaptor processor bindings |
US6963940B1 (en) | 2000-03-30 | 2005-11-08 | International Business Machines Corporation | Measuring utilization of individual components of channels |
US6581130B1 (en) | 2000-04-04 | 2003-06-17 | Hewlett Packard Development Company, L.P. | Dynamic remapping of address registers for address translation between multiple busses |
US6629175B1 (en) | 2000-04-14 | 2003-09-30 | International Business Machines Corporation | Efficient adapter context switching |
US6772264B1 (en) | 2000-05-22 | 2004-08-03 | International Business Machines Corporation | Enabling a docking station for ISA adapters |
US6715011B1 (en) | 2000-05-31 | 2004-03-30 | International Business Machines Corporation | PCI/PCI-X bus bridge with performance monitor |
US6654818B1 (en) | 2000-06-22 | 2003-11-25 | International Business Machines Corporation | DMA access authorization for 64-bit I/O adapters on PCI bus |
US6611883B1 (en) | 2000-11-16 | 2003-08-26 | Sun Microsystems, Inc. | Method and apparatus for implementing PCI DMA speculative prefetching in a message passing queue oriented bus system |
US6704831B1 (en) * | 2000-11-16 | 2004-03-09 | Sun Microsystems, Inc. | Method and apparatus for converting address information between PCI bus protocol and a message-passing queue-oriented bus protocol |
US6658521B1 (en) | 2000-12-22 | 2003-12-02 | International Business Machines Corporation | Method and apparatus for address translation on PCI bus over infiniband network |
US6721839B1 (en) | 2000-12-27 | 2004-04-13 | International Business Machines Corporation | Method of mapping multiple address spaces into single PCI bus |
TW499795B (en) | 2001-03-19 | 2002-08-21 | Realtek Semiconductor Corp | PCI extended function interface and the PCI device using the same |
US6792492B1 (en) | 2001-04-11 | 2004-09-14 | Novell, Inc. | System and method of lowering overhead and latency needed to service operating system interrupts |
US6820164B2 (en) | 2001-04-17 | 2004-11-16 | International Business Machines Corporation | Peripheral component interconnect bus detection in logically partitioned computer system involving authorizing guest operating system to conduct configuration input-output operation with functions of pci devices |
US20020161907A1 (en) * | 2001-04-25 | 2002-10-31 | Avery Moon | Adaptive multi-protocol communications system |
US6968446B1 (en) | 2001-08-09 | 2005-11-22 | Advanced Micro Devices, Inc. | Flags handling for system call instructions |
US6842870B2 (en) | 2001-09-20 | 2005-01-11 | International Business Machines Corporation | Method and apparatus for filtering error logs in a logically partitioned data processing system |
US6801993B2 (en) | 2001-09-28 | 2004-10-05 | International Business Machines Corporation | Table offset for shortening translation tables from their beginnings |
US20040025166A1 (en) | 2002-02-02 | 2004-02-05 | International Business Machines Corporation | Server computer and a method for accessing resources from virtual machines of a server computer via a fibre channel |
US6901537B2 (en) | 2002-02-27 | 2005-05-31 | International Business Machines Corporation | Method and apparatus for preventing the propagation of input/output errors in a logical partitioned data processing system |
US6907510B2 (en) | 2002-04-01 | 2005-06-14 | Intel Corporation | Mapping of interconnect configuration space |
US7302692B2 (en) | 2002-05-31 | 2007-11-27 | International Business Machines Corporation | Locally providing globally consistent information to communications layers |
US7299266B2 (en) | 2002-09-05 | 2007-11-20 | International Business Machines Corporation | Memory management offload for RDMA enabled network adapters |
US7197585B2 (en) * | 2002-09-30 | 2007-03-27 | International Business Machines Corporation | Method and apparatus for managing the execution of a broadcast instruction on a guest processor |
US7054972B2 (en) | 2002-12-13 | 2006-05-30 | Lsi Logic Corporation | Apparatus and method for dynamically enabling and disabling interrupt coalescing in data processing system |
US7065598B2 (en) | 2002-12-20 | 2006-06-20 | Intel Corporation | Method, system, and article of manufacture for adjusting interrupt levels |
US20040139305A1 (en) * | 2003-01-09 | 2004-07-15 | International Business Machines Corporation | Hardware-enabled instruction tracing |
US20040139304A1 (en) | 2003-01-09 | 2004-07-15 | International Business Machines Corporation | High speed virtual instruction execution mechanism |
US7073002B2 (en) | 2003-03-13 | 2006-07-04 | International Business Machines Corporation | Apparatus and method for controlling resource transfers using locks in a logically partitioned computer system |
US7107382B2 (en) | 2003-04-03 | 2006-09-12 | Emulex Design & Manufacturing Corporation | Virtual peripheral component interconnect multiple-function device |
US7139940B2 (en) | 2003-04-10 | 2006-11-21 | International Business Machines Corporation | Method and apparatus for reporting global errors on heterogeneous partitioned systems |
US7281075B2 (en) | 2003-04-24 | 2007-10-09 | International Business Machines Corporation | Virtualization of a global interrupt queue |
US7139892B2 (en) * | 2003-05-02 | 2006-11-21 | Microsoft Corporation | Implementation of memory access control using optimizations |
US7130949B2 (en) | 2003-05-12 | 2006-10-31 | International Business Machines Corporation | Managing input/output interruptions in non-dedicated interruption hardware environments |
US7000036B2 (en) | 2003-05-12 | 2006-02-14 | International Business Machines Corporation | Extended input/output measurement facilities |
US7290070B2 (en) | 2003-05-12 | 2007-10-30 | International Business Machines Corporation | Multiple logical input/output subsystem facility |
US7127599B2 (en) | 2003-05-12 | 2006-10-24 | International Business Machines Corporation | Managing configurations of input/output system images of an input/output subsystem, wherein a configuration is modified without restarting the input/output subsystem to effect a modification |
US6996638B2 (en) | 2003-05-12 | 2006-02-07 | International Business Machines Corporation | Method, system and program products for enhancing input/output processing for operating system images of a computing environment |
US7177961B2 (en) | 2003-05-12 | 2007-02-13 | International Business Machines Corporation | Managing access, by operating system images of a computing environment, of input/output resources of the computing environment |
US7174550B2 (en) | 2003-05-12 | 2007-02-06 | International Business Machines Corporation | Sharing communications adapters across a plurality of input/output subsystem images |
US7130938B2 (en) | 2003-05-12 | 2006-10-31 | International Business Machines Corporation | Method, system and program products for identifying communications adapters of a computing environment |
US7134052B2 (en) | 2003-05-15 | 2006-11-07 | International Business Machines Corporation | Autonomic recovery from hardware errors in an input/output fabric |
US6931460B2 (en) | 2003-05-19 | 2005-08-16 | Emulex Design & Manufacturing Corporation | Dynamically self-adjusting polling mechanism |
US7420931B2 (en) | 2003-06-05 | 2008-09-02 | Nvidia Corporation | Using TCP/IP offload to accelerate packet filtering |
US7613109B2 (en) | 2003-06-05 | 2009-11-03 | Nvidia Corporation | Processing data for a TCP connection using an offload unit |
EP1489491A1 (en) | 2003-06-19 | 2004-12-22 | Texas Instruments Incorporated | Dynamically changing the semantic of an instruction |
US7013358B2 (en) | 2003-08-09 | 2006-03-14 | Texas Instruments Incorporated | System for signaling serialized interrupts using message signaled interrupts |
US7979548B2 (en) | 2003-09-30 | 2011-07-12 | International Business Machines Corporation | Hardware enforcement of logical partitioning of a channel adapter's resources in a system area network |
US7146482B2 (en) | 2003-11-25 | 2006-12-05 | International Business Machines Corporation | Memory mapped input/output emulation |
US7552436B2 (en) | 2003-11-25 | 2009-06-23 | International Business Machines | Memory mapped input/output virtualization |
US7277968B2 (en) | 2004-01-23 | 2007-10-02 | International Business Machines Corporation | Managing sets of input/output communications subadapters of an input/output subsystem |
US7107384B1 (en) | 2004-03-01 | 2006-09-12 | Pericom Semiconductor Corp. | Dynamic PCI-bus pre-fetch with separate counters for commands of commands of different data-transfer lengths |
US7530071B2 (en) | 2004-04-22 | 2009-05-05 | International Business Machines Corporation | Facilitating access to input/output resources via an I/O partition shared by multiple consumer partitions |
US7209994B1 (en) | 2004-05-11 | 2007-04-24 | Advanced Micro Devices, Inc. | Processor that maintains virtual interrupt state and injects virtual interrupts into virtual machine guests |
US20050289271A1 (en) | 2004-06-29 | 2005-12-29 | Martinez Alberto J | Circuitry to selectively produce MSI signals |
US20060005083A1 (en) | 2004-06-30 | 2006-01-05 | International Business Machines Corporation | Performance count tracing |
US7418572B2 (en) | 2004-08-18 | 2008-08-26 | International Business Machines Corporation | Pretranslating input/output buffers in environments with multiple page sizes |
US7334107B2 (en) | 2004-09-30 | 2008-02-19 | Intel Corporation | Caching support for direct memory access address translation |
US7444493B2 (en) * | 2004-09-30 | 2008-10-28 | Intel Corporation | Address translation for input/output devices using hierarchical translation tables |
US7340582B2 (en) | 2004-09-30 | 2008-03-04 | Intel Corporation | Fault processing for direct memory access address translation |
US7373446B2 (en) | 2004-11-05 | 2008-05-13 | Microsoft Corporation | Method and system for dynamically patching an operating system's interrupt mechanism |
US7296120B2 (en) | 2004-11-18 | 2007-11-13 | International Business Machines Corporation | Mechanism that provides efficient multi-word load atomicity |
US7188346B2 (en) | 2004-11-29 | 2007-03-06 | International Business Machines Corporation | Method, system and program product for correlating data between operating environments |
US7284112B2 (en) | 2005-01-14 | 2007-10-16 | International Business Machines Corporation | Multiple page size address translation incorporating page size prediction |
US7562366B2 (en) | 2005-02-03 | 2009-07-14 | Solarflare Communications, Inc. | Transmit completion event batching |
US7886086B2 (en) | 2005-02-03 | 2011-02-08 | International Business Machines Corporation | Method and apparatus for restricting input/output device peer-to-peer operations in a data processing system to improve reliability, availability, and serviceability |
US7493425B2 (en) | 2005-02-25 | 2009-02-17 | International Business Machines Corporation | Method, system and program product for differentiating between virtual hosts on bus transactions and associating allowable memory access for an input/output adapter that supports virtualization |
US7464191B2 (en) | 2005-02-25 | 2008-12-09 | International Business Machines Corporation | System and method for host initialization for an adapter that supports virtualization |
US7260664B2 (en) * | 2005-02-25 | 2007-08-21 | International Business Machines Corporation | Interrupt mechanism on an IO adapter that supports virtualization |
US20060195617A1 (en) | 2005-02-25 | 2006-08-31 | International Business Machines Corporation | Method and system for native virtualization on a partially trusted adapter using adapter bus, device and function number for identification |
US7475166B2 (en) | 2005-02-28 | 2009-01-06 | International Business Machines Corporation | Method and system for fully trusted adapter validation of addresses referenced in a virtual host transfer request |
US7567567B2 (en) | 2005-04-05 | 2009-07-28 | Sun Microsystems, Inc. | Network system including packet classification for partitioned resources |
US7260663B2 (en) | 2005-04-07 | 2007-08-21 | International Business Machines Corporation | System and method for presenting interrupts |
US7200704B2 (en) | 2005-04-07 | 2007-04-03 | International Business Machines Corporation | Virtualization of an I/O adapter port using enablement and activation functions |
US7478178B2 (en) * | 2005-04-22 | 2009-01-13 | Sun Microsystems, Inc. | Virtualization for device sharing |
US7502872B2 (en) | 2005-05-23 | 2009-03-10 | International Bsuiness Machines Corporation | Method for out of user space block mode I/O directly between an application instance and an I/O adapter |
US7225287B2 (en) | 2005-06-01 | 2007-05-29 | Microsoft Corporation | Scalable DMA remapping on a computer bus |
US20060288130A1 (en) | 2005-06-21 | 2006-12-21 | Rajesh Madukkarumukumana | Address window support for direct memory access translation |
US7631097B2 (en) | 2005-07-21 | 2009-12-08 | National Instruments Corporation | Method and apparatus for optimizing the responsiveness and throughput of a system performing packetized data transfers using a transfer count mark |
US8028154B2 (en) | 2005-07-29 | 2011-09-27 | Broadcom Corporation | Method and system for reducing instruction storage space for a processor integrated in a network adapter chip |
US7546487B2 (en) | 2005-09-15 | 2009-06-09 | Intel Corporation | OS and firmware coordinated error handling using transparent firmware intercept and firmware services |
US20070073955A1 (en) | 2005-09-29 | 2007-03-29 | Joseph Murray | Multi-function PCI device |
US7882489B2 (en) | 2005-11-22 | 2011-02-01 | International Business Machines Corporation | Integrated code generation for adapter-specific property template |
US7475183B2 (en) | 2005-12-12 | 2009-01-06 | Microsoft Corporation | Large page optimizations in a virtual machine environment |
US20070136554A1 (en) | 2005-12-12 | 2007-06-14 | Giora Biran | Memory operations in a virtualized system |
US7398343B1 (en) | 2006-01-03 | 2008-07-08 | Emc Corporation | Interrupt processing system |
US7673116B2 (en) | 2006-01-17 | 2010-03-02 | Advanced Micro Devices, Inc. | Input/output memory management unit that implements memory attributes based on translation data |
US7548999B2 (en) | 2006-01-17 | 2009-06-16 | Advanced Micro Devices, Inc. | Chained hybrid input/output memory management unit |
US7653803B2 (en) | 2006-01-17 | 2010-01-26 | Globalfoundries Inc. | Address translation for input/output (I/O) devices and interrupt remapping for I/O devices in an I/O memory management unit (IOMMU) |
US7849232B2 (en) | 2006-02-17 | 2010-12-07 | Intel-Ne, Inc. | Method and apparatus for using a single multi-function adapter with different operating systems |
US7739422B2 (en) | 2006-03-21 | 2010-06-15 | International Business Machines Corporation | Method to improve system DMA mapping while substantially reducing memory fragmentation |
US7412589B2 (en) | 2006-03-31 | 2008-08-12 | International Business Machines Corporation | Method to detect a stalled instruction stream and serialize micro-operation execution |
US8621120B2 (en) | 2006-04-17 | 2013-12-31 | International Business Machines Corporation | Stalling of DMA operations in order to do memory migration using a migration in progress bit in the translation control entry mechanism |
US7613847B2 (en) | 2006-05-16 | 2009-11-03 | Hewlett-Packard Development Company, L.P. | Partially virtualizing an I/O device for use by virtual machines |
US7954099B2 (en) | 2006-05-17 | 2011-05-31 | International Business Machines Corporation | Demultiplexing grouped events into virtual event queues while in two levels of virtualization |
JP4961833B2 (ja) | 2006-05-19 | 2012-06-27 | 日本電気株式会社 | クラスタシステム、負荷分散方法、最適化クライアントプログラム、及び調停サーバプログラム |
TW200801952A (en) | 2006-06-02 | 2008-01-01 | Via Tech Inc | Method for setting up a peripheral component interconnect express (PCIE) |
US7487341B2 (en) * | 2006-06-29 | 2009-02-03 | Intel Corporation | Handling address translations and exceptions of a heterogeneous resource of a processor using another processor resource |
US7546398B2 (en) | 2006-08-01 | 2009-06-09 | International Business Machines Corporation | System and method for distributing virtual input/output operations across multiple logical partitions |
US7496707B2 (en) | 2006-08-22 | 2009-02-24 | International Business Machines Corporation | Dynamically scalable queues for performance driven PCI express memory traffic |
US8725914B2 (en) | 2006-08-28 | 2014-05-13 | International Business Machines Corporation | Message signaled interrupt management for a computer input/output fabric incorporating platform independent interrupt manager |
US7627723B1 (en) | 2006-09-21 | 2009-12-01 | Nvidia Corporation | Atomic memory operators in a parallel processor |
US20080126652A1 (en) | 2006-09-27 | 2008-05-29 | Intel Corporation | Managing Interrupts in a Partitioned Platform |
US7552298B2 (en) | 2006-09-28 | 2009-06-23 | Broadcom Corporation | Method and system for deferred pinning of host memory for stateful network interfaces |
US9135951B2 (en) | 2006-10-10 | 2015-09-15 | Qualcomm Incorporated | System and method for dynamic audio buffer management |
US20080091868A1 (en) | 2006-10-17 | 2008-04-17 | Shay Mizrachi | Method and System for Delayed Completion Coalescing |
US7506084B2 (en) * | 2006-10-17 | 2009-03-17 | International Business Machines Corporation | Method for communicating with an I/O adapter using cached address translations |
US7587575B2 (en) | 2006-10-17 | 2009-09-08 | International Business Machines Corporation | Communicating with a memory registration enabled adapter using cached address translations |
US20080098197A1 (en) * | 2006-10-20 | 2008-04-24 | International Business Machines Corporation | Method and System For Address Translation With Memory Windows |
US7849287B2 (en) | 2006-11-13 | 2010-12-07 | Advanced Micro Devices, Inc. | Efficiently controlling special memory mapped system accesses |
JP2008123298A (ja) | 2006-11-13 | 2008-05-29 | Canon Inc | 情報処理方法及びシステム |
US7624235B2 (en) | 2006-11-30 | 2009-11-24 | Apple Inc. | Cache used both as cache and staging buffer |
US7529860B2 (en) | 2006-12-19 | 2009-05-05 | International Business Machines Corporation | System and method for configuring an endpoint based on specified valid combinations of functions |
US7984454B2 (en) * | 2006-12-19 | 2011-07-19 | International Business Machines Corporation | Migration of single root stateless virtual functions |
US20080168208A1 (en) | 2007-01-09 | 2008-07-10 | International Business Machines Corporation | I/O Adapter LPAR Isolation In A Hypertransport Environment With Assigned Memory Space Indexing a TVT Via Unit IDs |
US7617340B2 (en) | 2007-01-09 | 2009-11-10 | International Business Machines Corporation | I/O adapter LPAR isolation with assigned memory space |
JP5119686B2 (ja) | 2007-03-06 | 2013-01-16 | 日本電気株式会社 | 情報処理装置および設定方法 |
EP2075696A3 (en) | 2007-05-10 | 2010-01-27 | Texas Instruments Incorporated | Interrupt- related circuits, systems and processes |
US7617345B2 (en) | 2007-07-02 | 2009-11-10 | International Business Machines Corporation | Prioritization of interrupts in a storage controller based on interrupt control directives received from hosts |
US20090024823A1 (en) | 2007-07-20 | 2009-01-22 | Wenjeng Ko | Overlayed separate dma mapping of adapters |
US8127296B2 (en) | 2007-09-06 | 2012-02-28 | Dell Products L.P. | Virtual machine migration between processors having VM migration registers controlled by firmware to modify the reporting of common processor feature sets to support the migration |
US8762999B2 (en) | 2007-09-27 | 2014-06-24 | Oracle America, Inc. | Guest-initiated resource allocation request based on comparison of host hardware information and projected workload requirement |
US8141094B2 (en) * | 2007-12-03 | 2012-03-20 | International Business Machines Corporation | Distribution of resources for I/O virtualized (IOV) adapters and management of the adapters through an IOV management partition via user selection of compatible virtual functions |
US7913030B2 (en) | 2007-12-28 | 2011-03-22 | Sandisk Il Ltd. | Storage device with transaction logging capability |
US8151083B2 (en) | 2008-01-11 | 2012-04-03 | International Business Machines Corporation | Dynamic address translation with frame management |
US8037221B2 (en) | 2008-01-16 | 2011-10-11 | International Business Machines Corporation | Dynamic allocation of DMA buffers in input/output adaptors |
US7996628B2 (en) | 2008-02-14 | 2011-08-09 | International Business Machines Corporation | Cross adapter shared address translation tables |
US8332846B2 (en) | 2008-02-28 | 2012-12-11 | Sony Mobile Communications Ab | Selective exposure to USB device functionality for a virtual machine by filtering descriptors |
US20090276774A1 (en) | 2008-05-01 | 2009-11-05 | Junji Kinoshita | Access control for virtual machines in an information system |
US7743189B2 (en) * | 2008-05-05 | 2010-06-22 | International Business Machines Corporation | PCI function south-side data management |
US8032680B2 (en) | 2008-06-27 | 2011-10-04 | Microsoft Corporation | Lazy handling of end of interrupt messages in a virtualized environment |
US8359408B2 (en) | 2008-06-30 | 2013-01-22 | Intel Corporation | Enabling functional dependency in a multi-function device |
US8635430B2 (en) | 2010-06-23 | 2014-01-21 | International Business Machines Corporation | Translation of input/output addresses to memory addresses |
-
2010
- 2010-06-23 US US12/821,171 patent/US8650337B2/en active Active
- 2010-11-08 WO PCT/EP2010/067025 patent/WO2011160709A1/en active Application Filing
- 2010-11-08 RU RU2012150098/08A patent/RU2556418C2/ru not_active IP Right Cessation
- 2010-11-08 EP EP10775817.9A patent/EP2585925B1/en active Active
- 2010-11-08 CA CA2800630A patent/CA2800630C/en active Active
- 2010-11-08 CN CN201080066950.4A patent/CN102947808B/zh active Active
- 2010-11-08 JP JP2013515722A patent/JP5731641B2/ja active Active
- 2010-11-08 SG SG2012087870A patent/SG186104A1/en unknown
- 2010-11-08 AU AU2010355800A patent/AU2010355800B2/en active Active
- 2010-11-08 KR KR1020137000269A patent/KR101464897B1/ko active IP Right Grant
- 2010-11-08 PT PT107758179T patent/PT2585925E/pt unknown
-
2012
- 2012-12-12 IL IL223588A patent/IL223588B/en active IP Right Grant
- 2012-12-20 ZA ZA2012/09700A patent/ZA201209700B/en unknown
Also Published As
Publication number | Publication date |
---|---|
AU2010355800B2 (en) | 2014-04-17 |
CN102947808B (zh) | 2015-12-02 |
JP5731641B2 (ja) | 2015-06-10 |
SG186104A1 (en) | 2013-01-30 |
CA2800630C (en) | 2018-09-04 |
US20110320756A1 (en) | 2011-12-29 |
AU2010355800A1 (en) | 2012-12-20 |
KR101464897B1 (ko) | 2014-11-24 |
RU2556418C2 (ru) | 2015-07-10 |
RU2012150098A (ru) | 2014-05-27 |
US8650337B2 (en) | 2014-02-11 |
KR20130032353A (ko) | 2013-04-01 |
CN102947808A (zh) | 2013-02-27 |
ZA201209700B (en) | 2014-05-28 |
IL223588B (en) | 2018-02-28 |
EP2585925A1 (en) | 2013-05-01 |
EP2585925B1 (en) | 2013-10-16 |
WO2011160709A1 (en) | 2011-12-29 |
CA2800630A1 (en) | 2011-12-29 |
JP2013533544A (ja) | 2013-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
PT2585925E (pt) | Determinação durante tempo de execução de formatos de tradução para funções de adaptador | |
US9626298B2 (en) | Translation of input/output addresses to memory addresses | |
EP2430552B1 (en) | Multiple address spaces per adapter | |
EP2430557B1 (en) | Resizing address spaces concurrent to accessing the address spaces | |
EP2433212B1 (en) | Method for executing an instruction for selectively modifying adapter function parameters; computer system and computer program product for the same | |
CA2800632C (en) | Enable/disable adapters of a computing environment | |
BR112012033821B1 (pt) | método de gerenciamento de requisições de interrupção em um ambiente computacional | |
BR112012032857B1 (pt) | método e equipamento para carregar dados de um adaptador | |
BR112012033818B1 (pt) | método para execução dentro de um circuito de processamento e sistema de computador para executar uma instrução |