BR112012033815B1 - tradução de endereços de entrada/saída para endereços de memória - Google Patents

tradução de endereços de entrada/saída para endereços de memória Download PDF

Info

Publication number
BR112012033815B1
BR112012033815B1 BR112012033815-3A BR112012033815A BR112012033815B1 BR 112012033815 B1 BR112012033815 B1 BR 112012033815B1 BR 112012033815 A BR112012033815 A BR 112012033815A BR 112012033815 B1 BR112012033815 B1 BR 112012033815B1
Authority
BR
Brazil
Prior art keywords
address
memory
bits
adapter
translation
Prior art date
Application number
BR112012033815-3A
Other languages
English (en)
Other versions
BR112012033815A2 (pt
Inventor
David Craddock
Thomas Gregg
Dan Greiner
Eric Norman Lais
Original Assignee
International Business Machines Corporation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corporation filed Critical International Business Machines Corporation
Publication of BR112012033815A2 publication Critical patent/BR112012033815A2/pt
Publication of BR112012033815B1 publication Critical patent/BR112012033815B1/pt

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/206Memory mapped I/O
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing

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)
  • Bus Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System (AREA)

Abstract

TRADUÇÃO DE ENDEREÇOS DE ENTRADA/SAÍDA PARA ENDEREÇOS DE MEMÓRIA. Um endereço provido em uma solicitação emitida por um adaptador é convertido em um endereço diretamente utilizável no acesso à memória de sistema. O endereço inclui uma pluralidade de bits, em que a pluralidade de bits inclui uma primeira porção de bits e uma segunda porção de bits. A segunda porção de bits é usada para indexação em um ou mais níveis de tabelas de tra-dução de endereço para executar a conversão, enquanto a primeira porção de bits é ignorada para conversão. A primeira porção de bits é utilizada para validar o endereço.

Description

Antecedentes
[0001] A presente invenção refere-se, em geral, à tradução de endereços em um ambiente computacional e, em particular, à tradução de um endereço de entrada/saida em um endereço de memória utilizável para acessar a memória de sistema do ambiente.
[0002] A memória de sistema é acessível por solicitações de leitura e gravação. Essas solicitações podem vir de vários componentes de um ambiente computacional, incluindo unidades de processamento central, bem como adaptadores. Cada solicitação inclui um endereço que deve ser usado para acessar a memória de sistema. Esse endereço, no entanto, normalmente não possui uma correspondência um- para-um com uma localização fisica na memória de sistema. Portanto, a tradução do endereço é realizada.
[0003] A tradução de endereços é usada para traduzir um endereço, que é fornecido de uma forma que não é utilizável diretamente no acesso à memória de sistema, em outra forma que é diretamente utilizável no acesso a uma localização fisica na memória de sistema. Por exemplo, um endereço virtual incluido em uma solicitação fornecida por uma unidade de processamento central é traduzido em um endereço real ou absoluto na memória de sistema. Como um exemplo adicional, um endereço de Interconexão de Componentes Periféricos (PCI) fornecido em uma solicitação de um adaptador pode ser traduzido para um endereço absoluto na memória de sistema.
[0004] A Publicação dos Estados Unidos N°. 2008/0168208 Al, publicada em 10 de julho de 2008, Gregg, "I/O Adapter LPAR Isolation in a Hypertransport Environment With Assigned Memory Space Indexing A TV! Via Units Ids"descreve um sistema de processamento de dados e método de isolamento de uma pluralidade de adaptadores de E/S no sistema. 0 sistema de processamento de dados também compreende um conjunto de processadores, uma ponte anfitriã e um barramento de sistema que conecta o conjunto de processadores e a ponte do host. Cada um dos adaptadores de E/S possui um respectivo ID e envia comandos para a ponte anfitriã que inclui um ou mais dos IDs dos adaptadores de E/S. Na concretização preferida, esses IDs são IDs de unidade definidos por HyperTransport, e os comandos emitidos pelos Adaptadores de E/S incluem um campo do ID de Unidade que contém um ou mais IDs de Unidade de Adaptadores de E/S. Os IDs de Unidade são usados para indexar um TVT para identificar espaços de memória de sistema únicos e independentes.
[0005] A Publicação dos Estados Unidos N° . 2009/0182966 Al, publicada em 16 de julho de 2009, Greiner et al., "Dynamic Address Translation with Frame Management"revela uma função de gerenciamento de quadros definida para uma arquitetura de máquina de um sistema de computador. Em uma concretização, é obtida uma instrução de gerenciamento de quadros que identifica um primeiro e segundo registro geral. O primeiro registro geral contém um campo de gerenciamento de quadros com um campo chave com bits de proteção de acesso e uma indicação de tamanho de bloco. Se a indicação de tamanho de bloco indicar um bloco grande, então, um endereço de operando de um bloco de dados grande é obtido do segundo registro geral. O bloco de dados grande tem uma pluralidade de pequenos blocos, cada um dos quais é associado a uma chave de armazenamento correspondente que possui uma pluralidade de bits de proteção de acesso de chave de armazenamento. Se a indicação do tamanho do bloco indicar um bloco grande, os bits de proteção de acesso de chave de armazenamento de cada chave de armazenamento correspondente de cada bloco pequeno dentro do bloco grande são configurados com os bits de proteção de acesso do campo chave.
Breve Sumário
[0006] As deficiências dao estado da técnica são superadas e vantagens adicionais são proporcionadas através da provisão de um produto de programa de computador para traduzir endereços em um ambiente computacional. O produto do programa de computador inclui um meio de armazenamento legivel por computador legivel por um circuito de processamento e armazenando instruções para execução pelo circuito de processamento para realização de um método. O método inclui, por exemplo, a obtenção de um endereço de um adaptador a ser traduzido, o endereço compreendendo uma pluralidade de bits, a pluralidade de bits compreendendo uma primeira porção de bits e uma segunda porção de bits; recebimento de um valor de intervalo de endereços que indica um intervalo de endereços permitidos; validação do endereço usando pelo menos a primeira porção de bits e o intervalo de endereço recebido; e conversão do endereço em um endereço de memória utilizável no acesso à memória do ambiente computacional, a conversão ignorando a primeira porção de bits e usando a segunda porção de bits para obter informações de endereço de um ou mais niveis de tabelas de tradução de endereços para realizar a conversão.
[0007] Os métodos e sistemas relacionados a um ou mais aspectos da presente invenção são também descritos e reivindicados aqui.
[0008] Caracteristicas e vantagens adicionais são obtidas através das técnicas da presente invenção. Outras concretizações e aspectos da invenção são descritos em detalhes aqui e são considerados parte da invenção reivindicada.
Breve Descrição das Várias Vistas dos Desenhos
[0009] Um ou mais aspectos da presente invenção são particularmente destacados e distintamente reivindicados como exemplos nas reivindicações ao final da especificação. O que precede e outros objetivos, caracteristicas e vantagens da invenção são evidentes a partir da descrição detalhada a seguir, considerada em conjunto com os desenhos anexos, nos quais: A Figura 1 representa uma concretização de um ambiente computacional para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 2 representa uma concretização de outros detalhes da memória de sistema e do hub (hub) E/S da Figura 1 de acordo com um aspecto da presente invenção; A Figura 3A representa uma concretização de uma visão geral da lógica para registrar um espaço de endereço DMA (Acesso Direto à Memória) para um adaptador de acordo com um aspecto da presente invenção; A Figura 3B representa uma concretização de vários detalhes de registro do espaço de endereço DMA para o adaptador de acordo com um aspecto da presente invenção; A Figura 4 representa uma concretização da lógica para processar uma operação DMA de acordo com um aspecto da presente invenção; A Figura 5A representa um exemplo dos niveis de tradução empregados quando um endereço inteiro é usado para indexação em tabelas de tradução de endereços para traduzir o endereço e acessar a página; A Figura 5B representa um exemplo de niveis de tradução empregados quando uma parte do endereço é ignorada quando da indexação em tabelas de tradução de endereços de acordo com um aspecto da presente invenção; A Figura 5C representa exemplos de vários formatos compatíveis com DAT de CPU utilizáveis de acordo com um ou mais aspectos da presente invenção; A Figura 5D representa exemplos de vários formatos de tradução de endereços estendidos E/S utilizáveis de acordo com um ou mais aspectos da presente invenção; A Figura 6A representa uma concretização de uma instrução Modificar Controles da Função PCI usada de acordo com um aspecto da presente invenção; A Figura 6B representa uma concretização de um campo usado pela instrução Modificar Controles da Função PCI da Figura 6A de acordo com um aspecto da presente invenção; A Figura 6C representa uma concretização de outro campo usado pela instrução Modificar Controles da Função PCI da Figura 6A de acordo com um aspecto da presente invenção; A Figura 6D representa uma concretização dos conteúdos de um bloco de informações de função (FIB) utilizado de acordo com um aspecto da presente invenção; A Figura 7 representa uma concretização de uma visão geral da lógica da instrução Modificar Controles da Função PCI de acordo com um aspecto da presente invenção; A Figura 8 representa uma concretização da lógica associada uma operação de parâmetros de tradução de endereços E/S de registro que pode ser especificada pela instrução Modificar Controles da Função PCI de acordo com um aspecto da presente invenção; A Figura 9 representa uma concretização da lógica associada a uma operação de parâmetros de tradução de endereços E/S não registada que pode ser especificada pela instrução Modificar Controles da Função PCI, de acordo com um aspecto da presente invenção; A Figura 10 representa uma concretização de um produto de programa de computador que incorpora um ou mais aspectos da presente invenção; A Figura 11 representa uma concretização de um sistema de computador host para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 12 representa um exemplo adicional de um sistema de computador para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 13 representa um exemplo adicional de um sistema de computador compreendendo uma rede de computador para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 14 representa uma concretização de vários elementos de um sistema de computador para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 15A representa uma concretização da unidade de execução do sistema de computador da Figura 14 para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 15B representa uma concretização da unidade de ramificação do sistema de computador da Figura 14 para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 15C representa uma concretização da unidade de carregamento/armazenamento do sistema de computador da Figura 14 para incorporar e utilizar um ou mais aspectos da presente invenção; e A Figura 16 representa uma concretização de um sistema de computador host emulado para incorporar e utilizar um ou mais aspectos da presente invenção.
Descrição Detalhada
[0010] De acordo com um aspecto da presente invenção, é proporcionada uma capacidade para traduzir endereços em um ambiente computacional. Em um exemplo, os endereços que estão sendo traduzidos são endereços fornecidos por um adaptador (aqui referidos como endereços de entrada/saida (E/S)) que devem ser traduzidos para endereços utilizáveis para acessar a memória de sistema. Para realizar a tradução de endereços, são utilizados vários niveis de tradução de endereços e o número de niveis é baseado, por exemplo, em um tamanho do espaço de endereço de memória atribuído ao adaptador, um tamanho de uma ou mais tabelas de tradução de endereços usadas na tradução e/ou um tamanho da página (ou outra unidade de memória) a ser acessada.
[0011] O endereço que está sendo traduzido inclui uma pluralidade de bits e, em uma concretização, apenas uma parte desses bits é usada para indexação em tabelas de tradução de endereços para obter o endereço traduzido. Os outros bits são ignorados para tradução. Por exemplo, o endereço inclui bits de alta ordem e bits de baixa ordem (com base no tamanho do espaço de endereço atribuído). Neste exemplo, os bits de ordem baixa são usados para indexação nas tabelas de tradução de endereços, incluindo a tabela de páginas, e para indexação na própria página. Os bits de alta ordem (independentemente do valor, isto é, zero ou diferente de zero) são ignorados para tradução e não são utilizados para indexação nas tabelas de tradução de endereços. Isso reduz o número de niveis de tabelas de tradução de endereços usadas para a tradução. (A indicação de bits de baixa e alta ordem é independente de como os bits são numerados.)
[0012] Em um exemplo, a tradução é realizada ao mesmo tempo em que fornece proteção adequada para um servidor de classe corporativa, tal como um servidor System z'6'. Como exemplo, um endereço completo (por exemplo, o endereço inteiro de 64 bits) é usado no acesso à memória; no entanto, apenas uma parte do endereço é usada para tradução. Outra parte do endereço, que é ignorada para tradução, é usada para validação (por exemplo, uma verificação de intervalo), juntamente com pelo menos uma parte do endereço usado para tradução. Usando apenas uma parte do endereço para tradução, as pesquisas de tradução de endereços são minimizadas. Isso é realizado através da execução de vários niveis de tradução com base, por exemplo, no tamanho do espaço de endereço DMA registrado para acesso pelo adaptador, em vez do tamanho do endereço em si.
[0013] Uma concretização de um ambiente computacional para incorporar e utilizar um ou mais aspectos da presente invenção é descrita com referência à Figura 1. Em um exemplo, um ambiente computacional 100 é um servidor System z® fornecido pela International Business Machines Corporation. O System z® é baseado na z/Architecture® fornecida pela International Business Machines Corporation. Os detalhes relativos a z/Architecture® são descritos em uma publicação IBM® intitulada "z/Architecture Principles of Operation", Publicação IBM N° . SA22-7832-07, fevereiro de 2009. IBM®, System z® e z/Architecture® são marcas registradas da International Business Machines Corporation, Armonk, Nova York. Outros nomes aqui utilizados podem ser marcas registradas, marcas ou nomes de produtos da International Business Machines Corporation ou de outras empresas.
[0014] Em um exemplo, o ambiente computacional 100 inclui uma ou mais unidades de processamento central (CPUs) 102 acopladas a uma memória de sistema 104 (ou seja, memória principal) através de um controlador de memória 106. Para acessar a memória de sistema 104, uma unidade de processamento central 102 emite uma solicitação de leitura ou gravação que inclui um endereço usado para acessar a memória de sistema. O endereço incluido na solicitação geralmente não é diretamente utilizável para acessar a memória de sistema e, portanto, é traduzido para um endereço que é diretamente utilizável para acessar a memória de sistema. O endereço é traduzido através de um mecanismo de tradução (XLATE) 108. Por exemplo, o endereço é traduzido de um endereço virtual para um endereço real ou absoluto usando, por exemplo, tradução dinâmica de endereços (DAT).
[0015] A solicitação, incluindo o endereço traduzido, é recebida pelo controlador de memória 106. Em um exemplo, o controlador de memória 106 é constituído por hardware e é usado para arbitrar o acesso à memória de sistema e para manter a consistência da memória. Essa arbitragem é realizada para solicitações recebidas das CPUs 102, bem como para solicitação recebidas de um ou mais adaptadores 110. Como as unidades de processamento central, os adaptadores emitem solicitações à memória de sistema 104 para obter acesso à memória de sistema.
[0016] Em um exemplo, o adaptador 110 é um adaptador de Interconexão de Componentes Periféricos (PCI) ou PCI Express (PCIe) que inclui uma ou mais funções PCI. Uma função PCI emite uma solicitação que requer acesso à memória de sistema. A solicitação é encaminhada para um hub de entrada/saida 112 (por exemplo, um hub PCI) através de um ou mais comutadores (por exemplo, comutadores PCIe) 114. Em um exemplo, o hub de entrada/saida é composto por hardware, incluindo uma ou mais máquinas de estado.
[0017] Tal como aqui utilizado, o termo adaptador inclui qualquer tipo de adaptador (por exemplo, adaptador de armazenamento, adaptador de rede, adaptador de processamento, adaptador PCI, adaptador criptográfico, outros tipos de adaptadores de entrada/saida, etc.). Em uma concretização, um adaptador inclui uma função do adaptador. No entanto, em outras concretizações, um adaptador pode incluir uma pluralidade de funções do adaptador. Um ou mais aspectos da presente invenção são aplicáveis se um adaptador inclui uma função do adaptador ou uma pluralidade de funções do adaptador. Além disso, nos exemplos aqui apresentados, o adaptador é usado de forma intercambiável com a função do adaptador (por exemplo, a função PCI), a menos que indicado de outra forma.
[0018] O hub de entrada/saida inclui, por exemplo, um complexo raiz 116 que recebe a solicitação de um comutador. A solicitação inclui um endereço de entrada/saida a ser traduzido e, portanto, o complexo raiz fornece o endereço a uma unidade de tradução e proteção de endereço 118. Esta unidade é, por exemplo, uma unidade de hardware que traduz o endereço E/S para um endereço diretamente utilizável para acessar a memória de sistema 104, conforme descrito em detalhes adicionais abaixo.
[0019] A solicitação iniciada a partir do adaptador, incluindo o endereço traduzido, é fornecida ao controlador de memória 106 através de, por exemplo, um barramento E/S para memória 120. O controlador de memória executa sua arbitragem e encaminha a solicitação com o endereço traduzido para a memória de sistema no momento apropriado.
[0020] Mais detalhes sobre a memória de sistema e o hub de entrada/saida são descritos com referência à Figura 2. Nesta concretização, o controlador de memória não é mostrado. No entanto, o hub de E/S pode ser acoplado à memória de sistema diretamente ou através de um controlador de memória. Em um exemplo, a memória de sistema 104 inclui uma ou mais espaços de endereço 200. Um espaço de endereço é uma porção particular de memória de sistema que foi atribuida a um componente particular do ambiente computacional, tal como um adaptador particular. Em um exemplo, o espaço de endereço é acessível por acesso direto à memória (DMA) iniciado pelo adaptador e, portanto, o espaço de endereço é referido nos exemplos deste documento como um espaço de endereço DMA. No entanto, em outros exemplos, o acesso direto à memória não é usado para acessar o espaço de endereço.
[0021] Além disso, em um exemplo, a memória de sistema 104 inclui tabelas de tradução de endereços 202 usadas para traduzir um endereço de um que não é utilizável diretamente para acessar a memória de sistema para um que seja diretamente utilizável. Em uma concretização, existem uma ou mais tabelas de tradução de endereços atribuídas a um espaço de endereço DMA, e tais uma ou mais tabelas de tradução de endereços são configuradas com base, por exemplo, no tamanho do espaço de endereço ao qual é atribuida, no tamanho das tabelas de tradução de endereços em si e/ou no tamanho da página (ou outra unidade de memória).
[0022] Em um exemplo, existe uma hierarquia de tabelas de tradução de endereços. Por exemplo, como mostrado na Figura 2, há uma tabela de primeiro nivel 202a (por exemplo, uma tabela de segmento) destacada por um ponteiro IOAT 218 (descrito abaixo) e uma segunda tabela de nivel inferior 202b (por exemplo, uma tabela de página) apontada por uma entrada 206a da tabela de primeiro nivel. Um ou mais bits de um endereço recebido 204 são usados para indexação na tabela 202a para localizar uma entrada particular 206a, que indica uma tabela de nivel inferior particular 202b. Então, um ou mais outros bits de endereço 204 são usados para localizar uma entrada particular 206b nessa tabela. Neste exemplo, essa entrada fornece o endereço usado para localizar a página correta, e bits adicionais no endereço 204 são usados para localizar um local particular 208 na página para executar uma transferência de dados. Ou seja, o endereço na entrada 206b e os bits selecionados do endereço PCI recebido 204 são usados para fornecer o endereço diretamente utilizável para acessar a memória de sistema. Por exemplo, o endereço diretamente utilizável é formado a partir de uma concatenação de bits de alta ordem do endereço na entrada 206b (por exemplo, bits 63:12, em um exemplo de página de 4k) e bits de baixa ordem selecionados do endereço PCI recebido (por exemplo, bits 11:0 para uma página de 4k).
[0023] Em um exemplo, é um sistema operacional que atribui um espaço de endereço DMA a um adaptador particular. Essa tarefa é realizada por meio de um processo de registro, que provoca uma inicialização (através, por exemplo, de software confiável) de uma entrada da tabela de dispositivo 210 para esse adaptador. A entrada da tabela de dispositivo é localizada em uma tabela de dispositivo 211 localizada no hub E/S 112. Por exemplo, a tabela de dispositivo 211 é localizada dentro da unidade de tradução e proteção de endereços do hub de E/S. Em um exemplo, a entrada da tabela de dispositivo 210 inclui uma série de campos, tais como: Formato 212: este campo inclui uma pluralidade de bits para indicar várias informações, incluindo, por exemplo, o formato de tradução de endereço (incluindo o nivel) de uma tabela de nivel superior das tabelas de tradução de endereços (por exemplo, no exemplo acima, a tabela de primeiro nivel); Tamanho da Página 213: este campo indica o tamanho de uma página (ou outra unidade de memória) a ser acessada; Endereço base PCI 214 e Limite de PCI 216: estes valores fornecem um intervalo usado para definir um espaço de endereço DMA e verificar se um endereço recebido (por exemplo, endereço PCI) é válido; e Ponteiro IOAT (Tradução de Endereço de Entrada/Saida) 218: este campo inclui um ponteiro para o nivel mais alto de tabela de tradução de endereços usada para o espaço de endereço DMA.
[0024] Em outras concretizações, a DTE pode incluir mais, menos ou informações diferentes.
[0025] Em uma concretização, a entrada da tabela de dispositivo a ser usada em uma tradução particular é localizada usando um identificador de solicitação (RID) localizado em uma solicitação emitida por uma função PCI 220 associada a um adaptador (e/ou por uma porção do endereço). O ID do requerente (por exemplo, um valor de 16 bits que especifica, por exemplo, um número de barramento, número de dispositivo e número de função) está incluido na solicitação, bem como o endereço E/S (por exemplo, um endereço PCIe de 64 bits) a ser usado para acessar a memória de sistema. A solicitação, incluindo o endereço E/S e RID, é fornecida, por exemplo, a uma memória endereçável de conteúdo (CAM) 230 através de, por exemplo, um comutador 114, que é usado para fornecer um valor de indice. Por exemplo, a CAM inclui entradas múltiplas, cada entrada correspondendo a um indice na tabela de dispositivo. Cada entrada CAM inclui o valor de um RID. Se, por exemplo, o RID recebido corresponder ao valor contido em uma entrada na CAM, o indice da tabela de dispositivo correspondente é usado para localizar a entrada da tabela de dispositivo. Ou seja, a saida da CAM é usada para indexação na tabela de dispositivo 211 para localizar a entrada da tabela de dispositivo 210. Se não houver correspondência, o pacote recebido é descartado sem o acesso à memória de sistema ser executado. (Em outras concretizações, uma CAM ou outra pesquisa não é necessária e o RID é usado como indice.)
[0026] Subsequentemente, os campos dentro da entrada da tabela de dispositivo 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 E/S (por exemplo, a unidade de proteção e tradução de endereços) para garantir que ele esteja dentro dos limites definidos pelo endereço base PCI 214 e limite PCI 216 armazenados na entrada da tabela de dispositivo localizada usando o RID da solicitação que forneceu o endereço. Isso garante que o endereço esteja dentro do intervalo previamente registrado e para qual tabelas de tradução de endereço estejam configuradas de forma válida.
[0027] De acordo com um aspecto da presente invenção, em uma concretização, para traduzir um endereço E/S (isto é, um endereço fornecido por um adaptador ou outro componente de um subsistema E/S) para um endereço de memória de sistema (isto é, um endereço diretamente utilizável para acessar a memória de sistema), inicialmente, um processo de registro é executado. Este processo de registro registra um espaço de endereço particular com um requisitante especifico, tal como uma função do adaptador ou adaptador especifico. Um exemplo de uma visão geral deste processo de registro é descrito com referência à Figura 3A.
[0028] Inicialmente, um sistema operacional que é executado dentro de uma das unidades de processamento central acopladas à memória de sistema determina um tamanho e localização do espaço de endereço que o adaptador deve acessar, ETAPA 300. Em um exemplo, o tamanho do espaço de endereço é determinado pelo endereço base PCI e limite PCI definidos pelo sistema operacional. O sistema operacional determina a base e o limite usando um ou mais critérios. Por exemplo, se o sistema operacional deseja que os endereços PCI sejam mapeados diretamente para os endereços virtuais da CPU, então, a base e o limite são definidos dessa forma. Em um exemplo adicional, se o isolamento adicional entre adaptadores e/ou imagens do sistema operacional for desejado, então os endereços sendo usados são selecionados para fornecer espaços de endereço não-sobrepostos e disjuntos. A localização também é especificada pelo sistema operacional e é baseada, por exemplo, nas características do adaptador.
[0029] Posteriormente, uma ou mais tabelas de tradução de endereço são criadas para cobrir aquele espaço de endereço DMA, ETAPA 302. Como exemplos, as tabelas podem ser compatíveis com tabelas de tradução de endereços da CPU ou um formato único pode ser fornecido o qual é suportado pelo hub de entrada/saida. Em um exemplo, a criação inclui a construção das tabelas e a colocação dos endereços apropriados dentro das entradas da tabela. Como exemplo, uma das tabelas de tradução é uma tabela de página de 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ço atribuído.
[0030] Posteriormente, o espaço de endereço DMA é registrado para o adaptador, ETAPA 304, como descrito em maiores detalhes com referência à Figura 3B. Neste exemplo, presume-se que exista uma função PCI por adaptador e, portanto, um ID de requerente por adaptador. Essa lógica é realizada, por exemplo, por uma unidade de processamento central acoplada à memória de sistema, respondendo a uma solicitação do sistema operacional.
[0031] Inicialmente, em uma concretização, uma entrada da tabela de dispositivo disponível é selecionada, a qual deve corresponder ao ID do requerente do adaptador, ETAPA 310. Ou seja, o ID do requerente será usado para localizar uma entrada da tabela de dispositivo.
[0032] Além disso, o endereço base PCI e o limite PCI são armazenados na entrada da tabela de dispositivo, ETAPA 312. Além disso, o formato da tabela de tradução de endereços de nível mais alto também é armazenado na entrada da tabela de dispositivo (por exemplo, campo de formato) ETAPA 314, bem como o ponteiro de tradução de endereço de entrada/saida (IOAT) usado para apontar para a tabela de tradução de endereços de nível mais alto, ETAPA 316. Isso completa o processo de registro.
[0033] A resposta ao registro de execução, um espaço de endereço DMA e tabelas de tradução de endereços correspondentes estão prontos para uso, bem como uma entrada da tabela de dispositivo. Os detalhes relativos ao processamento de uma solicitação emitida por um requerente, tal como um adaptador, para acessar a memória de sistema são descritos com referência à Figura 4. O processamento descrito abaixo é realizado pelo hub de E/S. Em um exemplo, é a unidade de tradução e proteção de endereços que executa a lógica. Em uma concretização, inicialmente, uma solicitação DMA é recebida no hub de entrada/saida, ETAPA 400. Por exemplo, uma função PCI emite uma solicitação que é encaminhada ao hub PCI através de, por exemplo, um comutador PCI. Usando o ID do requerente na solicitação, a entrada adequada de tabela de dispositivo é localizada, ETAPA 402. Posteriormente, determina-se se a entrada da tabela de dispositivo é válida, CONSULTA 404. Em um exemplo, a validade é determinada pela verificação de um bit de validade na própria entrada. Este bit é configurado, por exemplo, em resposta à execução de uma solicitação de função de habilitação pelo sistema operacional. Se habilitado, o bit é configurado para, por exemplo, um (isto é, válido); caso contrário, permanece em zero (ou seja, inválido) . Em um exemplo adicional, o bit pode ser configurado quando o processo de registro estiver completo.
[0034] Se a entrada da tabela de dispositivo for inválida, um erro é apresentado, ETAPA 405. Caso contrário, é feita uma determinação adicional quanto a se o endereço PCI fornecido na solicitação é menor do que o endereço base PCI armazenado na entrada da tabela de dispositivo, CONSULTA 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, outra determinação é feita se o endereço PCI for maior do que o valor limite PCI na entrada da tabela de dispositivo, CONSULTA 408. Se o endereço PCI for maior do que o limite, então, mais uma vez, um erro é apresentado uma vez que o endereço está fora do intervalo válido, ETAPA 409. No entanto, se endereço estiver dentro de um intervalo válido, então, o processamento continua.
[0035] Em um exemplo, o formato fornecido na entrada da tabela de dispositivo é usado para determinar os bits de endereço PCI no endereço a ser usado para tradução de endereços, ETAPA 410. Por exemplo, se o formato indicar que a tabela de nivel superior é uma tabela de primeiro nivel com páginas de 4k, então, os bits 29:21 do endereço são usados para indexação na tabela de primeiro nivel; os bits 20:12 são usados para indexação na tabela de páginas; e os bits 11:0 são usados para indexação na página de 4k. Os bits utilizados dependem de quantos bits são necessários para indexação em página ou tabela de determinado tamanho. Por exemplo, para uma página de 4k com endereçamento de nivel de byte, 12 bits são usados para endereçar 4096 bytes; e para uma tabela de página de 4k com 512 entradas, 8 bytes cada, 9 bits são usados para endereçar 512 entradas etc.
[0036] Em seguida, o hub PCI pesquisa e carrega a entrada da tabela de tradução de endereços apropriada, ETAPA 412. Por exemplo, inicialmente, a tabela de tradução de nivel mais alto é localizada usando o ponteiro IOAT da entrada da tabela de dispositivo. Em seguida, os bits do endereço (aqueles após os bits de alta ordem usados para validade e não tradução, por exemplo, bits 29:21 no exemplo acima) são usados para localizar a entrada particular dentro dessa tabela.
[0037] Determina-se, então, com base, por exemplo, no formato fornecido na entrada da tabela de dispositivo, se a entrada de tradução de endereço localizada tem um formato correto, CONSULTA 414. Por exemplo, o formato na entrada da tabela de dispositivo é comparado com um formato indicado na entrada de tradução de endereços. Se igual, então, o formato na entrada da tabela de dispositivo é válido. Caso contrário, um erro é fornecido, ETAPA 415; caso contrário, o processamento continua determinando-se se esta é a última tabela a ser processada, CONSULTA 416. Ou seja, determina- se se existem outras tabelas de tradução de endereços necessárias para obter o endereço real ou absoluto ou se o a entrada da tabela de nivel mais baixo foi localizada. Essa determinação é feita com base no formato e tamanho fornecidos das tabelas já processadas. Se não for a última tabela, o processamento continua com a ETAPA 412. Caso contrário, o hub de E/S continua o processamento para permitir uma pesquisa e carregamento ou armazenamento dos dados no endereço traduzido, ETAPA 418. Em um exemplo, o hub de E/S encaminha o endereço traduzido para o controlador de memória, que usa o endereço para pesquisar e carregar ou armazenar dados na localização DMA designada pelo endereço traduzido.
[0038] Conforme descrito acima, de acordo com um aspecto da presente invenção, o número de niveis de tradução e, portanto, o número de buscas necessário para realizar a tradução é reduzido. Isto é alcançado, por exemplo, ignorando os bits de alta ordem de um endereço durante a tradução e usando apenas os bits de baixa ordem para percorrer as tabelas de tradução, que se baseiam, por exemplo, no tamanho do espaço de endereço DMA atribuído ao adaptador. O uso de um endereço parcial versuso endereço completo é mostrado nos exemplos a seguir.
[0039] Referindo-se inicialmente à Figura 5A, um exemplo é apresentado em que o endereço inteiro é usado 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. O início da tabela de nível mais alto (por exemplo, a tabela de nível 5 neste exemplo) é apontado por um ponteiro IOAT e, então, bits do endereço PCI são usados 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.)
[0040] Neste exemplo, o espaço de endereço DMA (DMAAS) tem tamanho de 6M e cada tabela possui 4k bytes com um máximo de 512 entradas de 8 bytes (exceto a tabela de nível 5 que possui 128 entradas com base no tamanho do endereço). O endereço tem, por exemplo, 64 bits: FFFF C000 0009 C600. O início da tabela de nível 5 é apontado pelo ponteiro IOAT e os bits 63:57 do endereço PCI são usados para indexação 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 usados para indexação na tabela de nível 4 para localizar o início da tabela de nível 3; os bits 47:39 são usados para indexação na tabela de nível 3 para localizar o início da tabela de nível 2; os bits 38:30 são usados para indexação na tabela de nível 2 para localizar o início da tabela de nível 1; os bits 29:21 são usados para indexação na tabela de nível 1 para localizar o início da tabela de páginas; os bits 20:12 são usados para indexação na tabela de páginas para localizar o inicio da página; e os bits 11:0 são usados para localizar a entrada na página de 4k. Dessa forma, neste exemplo, todos os bits de endereço são usados para tradução/acesso.
[0041] Isto contrasta com o exemplo na Figura 5B, em que o espaço de endereço é do mesmo tamanho (por exemplo, 6M) e o endereço é o 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 ponteiro IOAT aponta para o inicio da tabela de nivel 1 e os bits 29:21 do endereço PCI são usados para indexação na tabela de nivel 1 para localizar o inicio da tabela de página; os bits 20:12 são usados para indexação na tabela de página apropriada para localizar o inicio da página; e os bits 11:0 são usados para indexação na página de 4k.
[0042] Como mostrado, a tabela de nivel 1 500 inclui três entradas 502, cada uma fornecendo um endereço para uma das três tabelas de página 504. O número de tabelas de página necessário e, portanto, o número de outras tabelas de nivel, dependem, por exemplo, do tamanho do espaço de endereçamento DMA, do tamanho das tabelas de tradução e/ou do tamanho das páginas. Neste exemplo, o espaço de endereço DMA é de 6M, e cada tabela de página é de 4k, com até 512 entradas. Portanto, cada tabela de página pode mapear até 2M de memória (4k x 512 entradas). Dessa forma, são necessárias três tabelas de página para o espaço de endereço de 6M. A tabela de nivel 1 pode conter as três entradas, uma para cada tabela de página e, portanto, não são necessários mais niveis de tabelas de tradução de endereços, neste exemplo.
[0043] Em uma concretização adicional, pode haver diferentes formatos de tabelas de tradução de endereços usados para tradução de endereços, e pode haver variações dentro dos formatos. Dessa forma, existem variações nos bits usados para indexar em uma determinada tabela ou página. Alguns desses exemplos são descritos com referência às Figuras 5C e 5D.
[0044] Por exemplo, um formato é um formato compatível com DAT de CPU, em que as tabelas de tradução são compatíveis com tabelas de tradução usadas para traduções DAT da CPU. Pode haver vários formatos compatíveis com DAT de CPU, exemplos dos quais são descritos com referência à Figura 5C. Como mostrado, um formato compatível com DAT de CPU é um formato compatível com DAT de CPU de página de 4k 550, e outro é um formato compatível com DAT de CPU de página de 1M 552, como exemplos. O número de bits mostrado é o número de bits de endereço usados para indexação naquela página ou tabela (ou localização de uma entrada nessa página ou tabela). Por exemplo, 12 bits 554 de um endereço PCI são usados como um deslocamento (offset) de bytes em uma página de 4k 556; 8 bits 558 são usados como um indice em uma tabela de página 560; 11 bits 562 são usados como um indice em uma tabela de segmentos 564 etc. Localizado sob a tabela de tradução de endereços designada é o tamanho máximo do espaço de endereço suportado por essa tabela de tradução de endereços. Por exemplo, a tabela de página 560 suporta um espaço de endereço DMA de 1M; a tabela de segmentos 564 suporta um espaço de endereçamento DMA de 2G etc. Nesta figura, bem como na Figura 5D, K = kilobytes, M = megabytes, G = gigabytes, T = terabytes, P = petabytes e E = exabytes.
[0045] Conforme ilustrado, conforme o tamanho da página aumenta, o número de níveis de tabelas de tradução diminui. Por exemplo, para página de 4k 556, uma tabela de página é necessária, mas não é necessária para a página de 1M. Outros exemplos e variações são possíveis.
[0046] Outro formato de tradução de endereços é um formato de tradução de endereço estendido E/S, em que as tabelas de tradução de endereço estendido são usadas. Vários exemplos de formatos de tradução de endereço estendido E/S são representados na Figura 5D. Por exemplo, os seguintes formatos são mostrados: uma tabela de tradução de endereço 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 compatíveis com DAT de CPU, o número de bits listados são os bits usados para localizar uma entrada na tabela específica. Por exemplo, no número de referência 576, os 12 bits são um deslocamento na página de 4k. Da mesma forma, no número de referência 578, os 9 bits são usados para indexação em uma tabela de página E/S. Esta tabela de página E/S permite um espaço de endereço DMA com um tamanho de 2M. Existem muitos outros exemplos.
[0047] Em uma implementação particular, para executar o registro de um espaço de endereço DMA para o adaptador, é utilizada uma instrução referida como uma instrução Modificar Controles da Função PCI (MPFC). Por exemplo, o sistema operacional determina qual formato de tradução de endereços deseja usar, cria as tabelas de tradução de endereços para esse formato e, então, emite a instrução MPFC com esse formato incluído como um operando da instrução. Em um exemplo, o formato e outros operandos da instrução são incluídos em um bloco de informações de função (descrito abaixo), que é um operando da instrução. 0 bloco de informações de função é, então, usado para atualizar o DTE e, em uma concretização, opcionalmente, uma entrada da tabela de funções (FTE) que inclui parâmetros operacionais do adaptador.
[0048] Uma concretização dos detalhes relacionados a esta instrução e, particularmente, o processo de registro, são descritos com referência às Figuras 6A-9. Referindo-se à Figura 6A, uma instrução Modificar Controles da Função PCI 600 inclui, por exemplo, um código de operação (opcode) 602 que indica a instrução Modificar Controles da Função PCI; um primeiro campo 604 que especifica um local em que são incluídas várias informações sobre a função do adaptador para a qual os parâmetros operacionais estão sendo estabelecidos; e um segundo campo 606 especificando um local a partir do qual um bloco de informações de função PCI (FIB) é pesquisado e carregado. O conteúdo dos locais designados pelos Campos 1 e 2 é ainda descrito abaixo.
[0049] Em uma concretização, o Campo 1 designa um registro geral que inclui várias informações. Como mostrado na Figura 6B, o conteúdo do registo inclui, por exemplo, um identificador de função 610 que identifica o identificador da função do adaptador em nome do qual a instrução de modificação está sendo realizada; um espaço de endereço 612 que designa um espaço de endereço na memória de sistema associado à função do adaptador designada pelo identificador de função; um controle de operação 614 que especifica a operação a ser realizada para a função do adaptador; e status 616 que provê status em relação à instrução quando a instrução é concluída com um código predefinido.
[0050] Em uma concretização, o identificador de função inclui, por exemplo, um indicador de habilitação que indica se o identificador está habilitado, um número de função que identifica uma função do adaptador (este é um identificador estático e pode ser usado para indexar em uma tabela de funções); e um número de instância especificando a instância particular desse identificador de função. Existe um identificador de função para cada função do adaptador e é usado para localizar uma entrada da tabela de funções (FTE) dentro da tabela de funções. Cada entrada da tabela de funções inclui parâmetros operacionais e/ou outras informações associadas à sua função do adaptador. Como um exemplo, uma entrada da tabela de funções inclui: Número de instância: este campo indica uma instância especifica do identificador de função do adaptador associado à entrada da tabela de funções; índice de Entrada da tabela de Dispositivo (DTE) l...n: pode haver um ou mais índices de tabela de dispositivo e cada índice é um índice em uma tabela de dispositivo para localizar uma entrada da tabela de dispositivo (DTE). Existem uma ou mais entradas de tabela de dispositivo por função do adaptador, e cada entrada inclui informações associadas à sua função do adaptador, incluindo informações usadas para processar solicitações da função do adaptador (por exemplo, solicitações DMA, solicitações MSI) e informações relacionadas a solicitações associadas à função do adaptador (por exemplo, instruções PCI). Cada entrada da tabela de dispositivo é associada a um espaço de endereço dentro da memória de sistema atribuída à função do adaptador. Uma função do adaptador pode ter um ou mais espaços de endereço dentro da memória de sistema atribuída à função do adaptador.
[0051] Indicador de Ocupado: este campo indica se a função do adaptador está ocupada; Indicador de Estado de Erro Permanente: este campo indica se a função do adaptador está em estado de erro permanente; Indicador de Recuperação Iniciada: este campo indica se a recuperação foi iniciada para a função do adaptador; Indicador de Permissão: este campo indica se o sistema operacional tentando controlar a função do adaptador tem autoridade para fazê-lo; Indicador de Ativação: este campo indica se a função do adaptador está ativada (por exemplo, l=ativada, 0=desativada); Identificador do Requerente (RID) : este é um identificador da função do adaptador e inclui, por exemplo, um número de barramento, um número de dispositivo e um número de função.
[0052] Em um exemplo, este campo é usado para acessos de um espaço de configuração da função do adaptador. (A memória de um adaptador pode ser definida como espaços de endereço, incluindo, por exemplo, um espaço de configuração, um espaço E/S e/ou um ou mais espaços de memória.) Em um exemplo, o espaço de configuração pode ser acessado especificando o espaço de configuração em uma instrução emitida pelo sistema operacional (ou outra configuração) para a função do adaptador. É especificado na instrução um deslocamento no espaço de configuração e um identificador de função usado para localizar a entrada da tabela de funções adequada que inclui o RID. O firmware recebe a instrução e determina que é para um espaço de configuração. Portanto, ele usa o RID para gerar uma solicitação para o hub de E/S, e o hub de E/S cria uma solicitação para acessar o adaptador. A localização da função do adaptador é baseada no RID e o deslocamento especifica um deslocamento no espaço de configuração da função do adaptador.
[0053] Tal como aqui utilizado, o firmware inclui, por exemplo, o microcódigo, o milicódigo e/ou o macrocódigo do processador. Inclui, por exemplo, as instruções de nivel de hardware e/ou estruturas de dados usadas na implementação do código de máquina de nivel superior. Em uma concretização, inclui, por exemplo, código proprietário que é normalmente entregue como microcódigo que inclui software confiável ou microcódigo especifico para o hardware subjacente e controla o acesso do sistema operacional ao hardware do sistema.
[0054] O Registro de Endereço Base (BAR) (1 an): este campo inclui uma pluralidade de números inteiros não assinados, designados como BARo - BARn, que são associados à função do adaptador originalmente especificada e cujos valores também são armazenados nos registros de endereço base associados à função do adaptador. Cada BAR especifica o endereço inicial de um espaço de memória ou espaço E/S dentro da função do adaptador, e também indica o tipo de espaço de endereço, ou seja, se é um espaço de memória de 64 ou 32 bits ou um espaço E/S de 32 bits, como exemplos;
[0055] Em um exemplo, é usado para acessos ao espaço de memória e/ou espaço E/S da função do adaptador. Por exemplo, um deslocamento fornecido em uma instrução para acessar a função do adaptador é adicionado ao valor no registro de endereço base associado ao espaço de endereço designado na instrução para obter o endereço a ser usado para acessar a função do adaptador. O identificador de espaço de endereço fornecido na instrução identifica o espaço de endereço dentro da função do adaptador a ser acessada e o BAR correspondente a ser usado;
[0056] Tamanho l....n: este campo inclui uma pluralidade de números inteiros não assinados, designados como SIZEo-SIZEn. O valor de um campo de Tamanho, quando diferente de zero, representa o tamanho de cada espaço de endereço com cada entrada correspondente a um BAR descrito anteriormente.
[0057] Mais detalhes sobre BAR e Tamanho são descritos abaixo. 1. Quando um BAR não é implementado para uma função do adaptador, o campo BAR e seu campo de tamanho correspondente são ambos armazenados como zero. 2. Quando um campo BAR representa um espaço de endereço E/S ou um espaço de endereço de memória de 32 bits, o campo de tamanho correspondente é diferente de zero e representa o tamanho do espaço de endereço. 3 . Quando um campo BAR representa um espaço de endereço de memória de 64 bits, a. O campo BARn representa os bits de endereço menos significativos. b. O campo BARn+i consecutivo seguinte representa os bits de endereço mais significativos. c. O campo SIZEn correspondente é diferente de zero e representa o tamanho do espaço de endereço. d. O campo SIZEn+i correspondente não é significativo e é armazenado como zero.
[0058] Informações de Roteamento Interno: esta informação é usada para executar roteamento particular para o adaptador. Inclui, por exemplo, nó, chip do processador e as informações de endereçamento do hub, por exemplo.
[0059] Indicação de Status: provê uma indicação, por exemplo, de se as operações de carregamento/armazenamento estão bloqueadas ou o adaptador está no estado de erro, bem como outras indicações.
[0060] Em um exemplo, o indicador de ocupado, o indicador de estado de erro permanente e o indicador de recuperação iniciada são definidos com base no monitoramento realizado 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ções de configuração descobertas durante uma movimentação de barramento pelo processador (por exemplo, firmware do processador). Outros campos podem ser definidos com base na configuração, inicialização e/ou eventos. Em outras concretizações, a entrada da tabela de funções pode incluir mais, menos informações ou informações diferentes. As informações incluídas podem depender das operações suportadas ou habilitadas para a função do adaptador.
[0061] Com referência à Figura 6C, em um exemplo, o Campo 2 designa um endereço lógico 620 de um bloco de informações de função PCI (FIB), que inclui informações sobre uma função do adaptador associada. O bloco de informações de função é usado para atualizar uma entrada da tabela de dispositivo e/ou entrada da tabela de funções (ou outra localização) associada à função do adaptador. As informações são armazenadas no FIB durante a inicialização e/ou a configuração do adaptador e/ou em resposta a eventos específicos.
[0062] Mais detalhes sobre um bloco de informações de função (FIB) são descritos com referência à Figura 6D. Em uma concretização, um bloco de informações de função 650 inclui os seguintes campos: Formato 651: este campo especifica o formato do FIB. Controle de Interceptação 652: este campo é usado para indicar se a execução de convidado de instruções especificas por um convidado em modo paginável resulta em interceptaçã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 é configurado (por exemplo, 1), um ou mais erros foram detectados ao executar o acesso direto à memória ou a interrupção do adaptador para a função do adaptador; Bloqueio de Carregamento/Armazenamento 656: este campo indica se as operações de carregamento/armazenamento estão bloqueadas; Função PCI Válida 658: este campo inclui um controle de ativação para a função do adaptador. Quando o bit é configurado (por exemplo, 1), a função do adaptador é considerada habilitada para operações E/S; Espaço de Endereços Registrado 660: este campo inclui um controle direto de ativação de acesso à memória para uma função do adaptador. Quando o campo é configurado (por exemplo, 1), o acesso direto à memória é habilitado; Tamanho da Página 661: este campo indica o tamanho da página ou outra unidade de memória a ser acessada por um acesso à memória DMA; Endereço Base PCI (PBA) 662: este campo é um endereço base para um espaço de endereços na memória do sistema atribuído à função do adaptador. Representa o endereço virtual mais baixo que uma função do adaptador pode usar para acesso direto a memória para o espaço de endereço DMA especificado; Limite de Endereço PCI (PAL) 664: este campo representa o endereço virtual mais alto que uma função do adaptador pode acessar dentro do espaço de endereço DMA especificado; Ponteiro de Tradução de Endereço de Entrada/Saida (IOAT) 666: 0 ponteiro de tradução de endereço de entrada/saida designa a primeira de todas as tabelas de tradução usadas por uma tradução de endereço virtual PCI ou pode designar diretamente o endereço absoluto de um quadro de armazenamento que é o resultado da tradução; Subclasse de Interrupção (ISC) 668: este campo inclui a subclasse de interrupção usada para apresentar interrupções do adaptador para a função do adaptador; Número de Interrupções (NOI) 670: este campo designa o número de códigos de interrupção distintos aceitos para uma função do adaptador. Este campo também define o tamanho, em bits, do vetor de bits de interrupção de adaptador designado por um endereço de vetor de bits de interrupção de adaptador e campos de deslocamento de vetor de bits de interrupção de adaptador; Endereço do Vetor dos Bits de Interrupção de Adaptador (AIBV) 672: este campo especifica um endereço do vetor de bits de interrupção de adaptador para a função do adaptador. Este vetor é usado no processamento de interrupção; Deslocamento do Vetor dos Bits de Interrupção de Adaptador 674: este campo especifica o deslocamento do primeiro bit do vetor de bits de interrupção de adaptador para a função do adaptador; Endereço de Bits de Resumo de Interrupção de Adaptador (AISB) 676: este campo fornece um endereço que designa o bit de resumo de interrupção de adaptador, que é opcionalmente usado no processamento de interrupção; Deslocamento de Bit de Resumo de Interrupção de Adaptador 678: este campo fornece o deslocamento no vetor de bits de resumo de interrupção de adaptador; Endereço do Bloco de Medição da Função (FMB) 680: este campo fornece um endereço de um bloco de medição de função usado para coletar medições em relação à função do adaptador; Chave de Bloqueio de Medição de Função 682: este campo inclui uma chave de acesso para acessar o bloco de medição de função; Controle de Notificação de Bits de Resumo 684: este campo indica se existe um vetor de bits de resumo que está sendo usado; Token de Autorização de Instrução 686: este campo é usado para determinar se um convidado do modo de armazenamento paginável está autorizado a executar instruções PCI sem intervenção do host; e Em um exemplo, na z/Architecture®, um convidado paginável é executado de forma interpretativa através da instrução Iniciar Execução Interpretativa (SIE), no nivel 2 de interpretação. Por exemplo, o hipervisor de partição lógica (LPA) executa a instrução SIE para iniciar a partição lógica em memória fisica e fixa. Se z/VM® for o sistema operacional nessa partição lógica, ele emite a instrução SIE para executar as máquinas de seus convidados (virtuais) no seu armazenamento V=V (virtual). Portanto, o hipervisor LPAR usa SIE de nivel 1 e o hipervisor z/VM® usa SIE de nivel 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 nível mais alto para ser usado na tradução (por exemplo, uma indicação de tabela de nível mais alto (tabela de segmentos, 3a região etc.).
[0063] O bloco de informações de função designado na instrução Modificar Controles da Função PCI é usado para modificar uma entrada da tabela de dispositivo selecionada, uma entrada da tabela de funções e/ou outros controles de firmware associados à função do adaptador designada nas instruções. Ao modificar a entrada da tabela de dispositivo, a entrada da tabela de funções e/ou outros controles de firmware, alguns serviços são fornecidos para o adaptador. Esses serviços incluem, por exemplo, interrupções do adaptador; traduções de endereços; redefinição de estado de erro; redefinição de carregamento/armazenamento bloqueado; definição de parâmetros de medição de função; e definição de controle de interceptação.
[0064] Uma concretização da lógica associada à instrução Modificar Controles da Função PCI é descrita com referência à Figura 7. Em um exemplo, a instrução é emitida por um sistema operacional (ou outra configuração) e executada pelo processador (por exemplo, firmware) executando o sistema operacional. Nos exemplos aqui apresentados, a instrução e as funções de adaptador são baseadas em PCI. No entanto, em outros exemplos, uma arquitetura de adaptador diferente e instruções correspondentes podem ser usadas.
[0065] Em um exemplo, o sistema operacional fornece os seguintes operandos à instrução (por exemplo, em um ou mais registros designados pelas instruções): o identificador de função PCI; o identificador de espaço de endereço DMA; um controle de operação; e um endereço do bloco de informações de função.
[0066] Referindo-se à Figura 7, inicialmente, determina-se se a facilidade que permite uma instrução Modificar Controles da Função PCI está instalada, CONSULTA 700. Essa determinação é feita, por exemplo, por verificação de um indicador armazenado, por exemplo, em um bloco de controle. Se a facilidade não estiver instalada, uma condição de exceção é fornecida, ETAPA 702. Caso contrário, determina- se se a instrução foi emitida por um convidado do modo de armazenamento paginável (ou outro convidado), CONSULTA 704. Se positivo, o sistema de operação host irá emular a operação para aquele convidado, ETAPA 706.
[0067] Caso contrário, determina-se se um ou mais dos operandos estão alinhados, CONSULTA 708. Por exemplo, determina-se se o endereço do bloco de informações de função está em um limite de palavra dupla. Em um exemplo, isso é opcional. Se os operandos não estiverem alinhados, uma condição de exceção é fornecida, ETAPA 710. Caso contrário, determina-se se o bloco de informações de função está acessível, CONSULTA 712. Caso negativo, uma condição de exceção é fornecida, ETAPA 714. Caso contrário, determina- se se o identificador fornecido nos operandos da instrução Modificar Controles da Função PCI está habilitado, CONSULTA 716. Em um exemplo, essa determinação é feita verificando um indicador de habilitação no identificador. Se o identificador não estiver habilitado, então, uma condição de exceção é fornecida, ETAPA 718.
[0068] Se o identificador estiver habilitado, então, o identificador é usado para localizar uma entrada da tabela de funções, ETAPA 720. Ou seja, pelo menos uma porção do identificador é usada como um indice na tabela de funções para localizar a entrada da tabela de funções correspondente à função do adaptador para a qual os parâmetros operacionais devem ser estabelecidos.
[0069] Determina-se se a entrada da tabela de funções foi encontrada, CONSULTA 722. Caso negativo, uma condição de exceção é fornecida, ETAPA 724. Caso contrário, se a configuração que emite a instrução for um convidado, CONSULTA 726, então, uma condição de exceção (por exemplo, interceptação para o host) é fornecida, ETAPA 728. Esta consulta pode ser ignorada se a configuração não for um convidado, ou outras autorizações podem ser verificadas, se designadas.
[0070] Determina-se, então, se a função está habilitada, CONSULTA 730. Em um exemplo, essa determinação é feita verificando um indicador de ativação na entrada da tabela de funções. Se não estiver habilitada, uma condição de exceção é fornecida, ETAPA 732.
[0071] Se a função estiver habilitada, então, determina-se se a recuperação está ativa, CONSULTA 734. Se a recuperação estiver ativa, conforme determinado por um indicador de recuperação na entrada da tabela de funções, é fornecida uma condição de exceção, ETAPA 736. No entanto, se a recuperação não estiver ativa, então, uma determinação adicional é feita para saber a se a função está ocupada, CONSULTA 738. Essa determinação é feita verificando o indicador de ocupado na entrada da tabela de funções. Se a função estiver ocupada, então, uma condição de ocupado é fornecida, ETAPA 740. Com a condição de ocupado, a instrução pode ser tentada novamente, em vez de abortada.
[0072] Se a função não estiver ocupada, então, determina-se ainda se o formato de bloco de informações de função é válido, CONSULTA 742. Por exemplo, o campo de formato do FIB é verificado para determinar se esse formato é suportado pelo sistema. Se for inválido, então, uma condição de exceção é fornecida, ETAPA 744. Se o formato de bloco de informações de função for válido, então, uma determinação adicional é feita para saber se o controle de operação especificado nos operandos da instrução é válido, CONSULTA 746. É, o controle de operação é um dos controles 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 controle de operação for válido, então, o processamento continua com o controle de operação especifico sendo especificado.
[0073] Um controle de operação que pode ser especificado é uma operação de parâmetros de tradução de endereço E/S de registro usada no controle de traduções de endereços para um adaptador. Com esta operação, os parâmetros da função PCI relevantes para a tradução de endereços E/S são definidos no DTE, FTE e/ou em outro local a partir dos parâmetros apropriados do FIB, que é um operando para a instrução. Esses parâmetros incluem, por exemplo, o endereço base PCI; o limite de endereço PCI (ou seja, limite ou limite PCI); o formato de tradução de endereços; o tamanho da página; e o ponteiro de tradução de endereços E/S, que são operandos para esta operação. Existem também operandos implícitos, incluindo um endereço DMA inicial (SDMA) e um endereço DMA final (EDMA), que são armazenados em um local acessível ao processador que executa as instruções.
[0074] Uma concretização da lógica para estabelecer os parâmetros operacionais para a tradução de endereços E/S é descrita com referência à Figura 8. Inicialmente, determina-se se o endereço base PCI no FIB é maior que o limite PCI no FIB, CONSULTA 800. Se a comparação do endereço base e do 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 menor ou igual ao limite, então, será feita uma determinação adicional sobre se o formato de tradução de endereços e o tamanho da página são válidos, CONSULTA 804. Se eles forem inválidos, então, uma condição de exceção é fornecida, ETAPA 806. No entanto, se eles forem válidos, então, uma determinação adicional é feita sobre se o tamanho do espaço de endereço (com base no endereço base e no limite) excede a capacidade de tradução, CONSULTA 808. Em um exemplo, o tamanho do espaço de endereço é comparado à capacidade máxima possível de tradução de endereços com base no formato da tabela de nivel superior. Por exemplo, se a tabela de nivel superior for uma tabela de segmento compatível com DAT, a capacidade de tradução máxima é de 2 Gbytes.
[0075] Se o tamanho do espaço de endereço exceder a capacidade de conversão, então, uma condição de exceção é fornecida, ETAPA 810. Caso contrário, é feita uma determinação adicional sobre se o endereço base é menor do que o endereço DMA inicial, CONSULTA 812. Se positivo, então, uma condição de exceção é fornecida, ETAPA 814. Caso contrário, outra determinação é feita sobre se o limite de endereço é maior do que o endereço DMA final, CONSULTA 816. Se positivo, então, uma condição de exceção é fornecida, ETAPA 818. Em um exemplo, o endereço DMA inicial e o endereço DMA final são baseados em uma politica do sistema.
[0076] Posteriormente, determina-se se recursos suficientes, se necessário, estão disponíveis para executar uma tradução de endereços E/S, CONSULTA 820. Se negativo, é fornecida uma condição de exceção, ETAPA 822. Caso contrário, é feita uma determinação adicional sobre se os parâmetros de tradução de endereços E/S já foram registrados no FTE e DTE, CONSULTA 824. Isso é determinado pela verificação dos valores dos parâmetros no FTE/DTE. Por exemplo, se os valores no FTE/DTE forem zero ou outro valor definido, então, o registro não foi realizado. Para localizar o FTE, o identificador fornecido na instrução é usado e, para localizar o DTE, é usado um indice de dispositivo no FTE.
[0077] Se a função do adaptador já tiver sido registrada para tradução de endereços, então, uma condição de exceção é fornecida, ETAPA 826. Se não, é feita uma determinação sobre se o espaço de endereço DMA especificado é válido (isto é, é um espaço de endereço para o qual um DTE foi ativado), CONSULTA 828. Se não, é fornecida uma condição de exceção, 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 dispositivo e, opcionalmente, na entrada da tabela de funções correspondente (ou outro local designado), ETAPA 832. Por exemplo, os parâmetros da função PCI relevantes para a tradução de endereços E/S são copiados do bloco de informações de função e colocados no DTE/FTE. Esses parâmetros incluem, por exemplo, o endereço base PCI, o limite de endereço PCI, o formato de tradução, o tamanho da página e o ponteiro da tradução de endereços E/S. Esta operação permite acessos DMA ao espaço de endereço DMA especificado. Permite a tradução de endereços E/S para a função do adaptador.
[0078] Outro controle de operação que pode ser especificado pela instrução Modificar Controles da Função PCI é uma operação de parâmetros de tradução de endereços E/S não registrados, um exemplo do qual é descrito com referência à Figura 9. Com esta operação, os parâmetros de função relevantes para a tradução de endereços E/S são restaurados para zero. Esta operação desativa os acessos DMA para o espaço de endereço DMA especificado e causa uma purga de entradas memória tampão à parte de tradução E/S para esse espaço de endereço DMA. Desabilita a tradução de endereços.
[0079] Com referência à Figura 9, em uma concretização, determina-se se os parâmetros de tradução de endereços E/S não estão registrados, CONSULTA 900. Em um exemplo, essa determinação é feita verificando os valores dos parâmetros apropriados no FTE ou DTE. Se esses campos forem zero ou algum valor especificado, eles não estão registrados. Portanto, uma condição de exceção é fornecida, ETAPA 902. Se eles estiverem registrados, então, determina- se se o espaço de endereço DMA é válido, CONSULTA 904. Se for inválido, então, uma condição de exceção é fornecida, ETAPA 906. Se o espaço de endereço DMA for válido, então, os parâmetros de tradução na entrada da tabela de dispositivo e, opcionalmente, na entrada da tabela de funções correspondente são apagados, ETAPA 908.
[0080] A descrição detalhada acima é um mecanismo eficiente para traduzir um endereço de entrada/saida fornecido por um adaptador em um endereço de memória de sistema. Em um exemplo, o endereço PCI completo (por exemplo, o endereço inteiro de 64 bits) é usado no acesso à memória; no entanto, as pesquisas de tradução de endereços são minimizadas usando apenas uma parte do endereço para tradução. Embora o uso do endereço completo forneça proteção adicional, o uso de, por exemplo, apenas os bits de ordem inferior para tradução permite uma tradução mais eficiente por meio de menos niveis de pesquisa de tradução. Isso permite a flexibilidade do sistema operacional no uso de endereços que podem coexistir ou serem os mesmos que os endereços virtuais do sistema operacional. Além disso, permite que tabelas de tradução de endereços da CPU sejam compartilhadas por adaptadores, permitindo que as E/S reduzam o número de tabelas que precisam ser escaneadas. Além disso, é fornecida proteção adicional ao permitir que diferentes adaptadores e/ou sistemas operacionais usem intervalos de espaço de endereço disjuntos.
[0081] Nas concretizações aqui descritas, os adaptadores são adaptadores PCI. PCI, como aqui utilizado, refere-se a quaisquer adaptadores implementados de acordo com uma especificação baseada em PCI, conforme definido pelo Grupo de Interesse Especial de Interconexão de Componentes Periféricos (PCI-SIG), incluindo, sem limitação, PCI ou PCIe. Em um exemplo especifico, a Interconexão de Componentes Periféricos Expressa (PCIe) é um padrão de interconexão de nivel de componente que define um protocolo de comunicação bidirecional para transações entre adaptadores de E/S e sistemas hosts. As comunicações PCIe são encapsuladas em pacotes de acordo com o padrão PCIe para transmissão em um barramento PCIe. As transações originadas em adaptadores de E/S e que terminam em sistemas hosts são referidas como transações ascendentes. As transações originadas em sistemas hosts e que terminam em adaptadores de E/S são referidas como transações descendentes. A topologia PCIe é baseada em links unidirecionais ponto a ponto que são emparelhados (por exemplo, um link ascendente, um link descendente) para formar o barramento PCIe. O padrão PCIe é mantido e publicado pelo PCI-SIG.
[0082] Como será apreciado por um versado na técnica, aspectos da presente invenção podem ser incorporados como um sistema, método ou produto de programa de computador. Consequentemente, aspectos da presente invenção podem assumir a forma de uma concretização inteiramente de hardware, uma concretização inteiramente de software (incluindo firmware, software residente, microcódigo etc.) ou uma concretização combinando aspectos de software e hardware que podem ser geralmente referidos aqui como um "circuito", "módulo" ou "sistema". Além disso, aspectos da presente invenção podem assumir a forma de um produto de programa de computador incorporado em um ou mais meios legiveis por computador tendo um código de programa legivel por computador nele incorporado.
[0083] Qualquer combinação de um ou mais meios legiveis por computador pode ser utilizada. O meio legivel por computador pode ser um meio de armazenamento legivel por computador. Um meio de armazenamento legivel por computador pode ser, por exemplo, mas não limitado, a um sistema, aparelho ou dispositivo eletrônico, magnético, eletromagnético, infravermelho ou semicondutor, ou qualquer combinação adequada desses. Exemplos mais específicos (lista não exaustiva) do meio de armazenamento legivel por computador incluem o seguinte: uma conexão elétrica com um ou mais fios, um disco flexivel de computador portátil, um disco rigido, uma memória de acesso aleatório (RAM), uma memória somente de leitura (ROM), uma memória somente de leitura programável apagável (memória EPROM ou Flash), uma fibra óptica, uma memória somente de leitura de disco compacto portátil (CD-ROM), um dispositivo de armazenamento óptico, um dispositivo de armazenamento magnético ou qualquer combinação desses. No contexto deste documento, um meio de armazenamento legivel por computador pode ser qualquer meio tangivel que possa conter ou armazenar um programa para uso por ou em conexão com um sistema, aparelho ou dispositivo de execução de instruções.
[0084] Referindo-se agora à Figura 10, em um exemplo, um produto de programa de computador 1000 inclui, por exemplo, um ou mais meios de armazenamento legiveis por computador 1002 para armazenar neles lógica ou meios de código de programa legiveis por computador 1004 para fornecer e facilitar um ou mais aspectos da presente invenção.
[0085] O código de programa incorporado em um meio legivel por computador pode ser transmitido utilizando um meio apropriado, incluindo, mas sem limitação, sem fio, a cabo, cabo de fibra óptica, RF etc., ou qualquer combinação adequada desses.
[0086] O código de programa de computador para realizar operações para aspectos 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 similar, e linguagens de programação processuais convencionais, tais como a linguagem de programação "C", a linguagem assemblyou linguagens de programação similares. O código do programa pode ser executado inteiramente no computador do usuário, parcialmente no computador do usuário, como um pacote de software autônomo, parcialmente no computador do usuário e parcialmente em um computador remoto ou inteiramente no computador ou servidor remoto. No último cenário, o computador remoto pode ser conectado ao computador do usuário através de qualquer tipo de rede, incluindo uma rede de área local (LAN) ou uma rede de área ampla (WAN) , ou a conexão pode ser feita em um computador externo (por exemplo, através da Internet usando um provedor de serviços de Internet) .
[0087] Aspectos da presente invenção são aqui descritos com referência a ilustrações de fluxograma e/ou diagramas de blocos de métodos, aparelhos (sistemas) e produtos de programa de computador de acordo com as concretizações da invenção. Deve-se entender que cada bloco das ilustrações de fluxograma e/ou diagramas de blocos, e combinações de blocos nas ilustrações de fluxograma e/ou diagramas de bloco, pode ser implementado por instruções de programa de computador. Essas instruções de programa de computador podem ser fornecidas a um processador de um computador de propósito geral, computador de propósito especial ou outro aparelho de processamento de dados programável para produzir uma máquina, de modo que as instruções, que são executadas através do processador do computador ou outro aparelho de processamento de dados programável, criam meios para implementar as funções/ações especificadas no fluxograma e/ou bloco ou blocos do diagrama de blocos.
[0088] Essas instruções de programa de computador também podem ser armazenadas em um meio legivel por computador que pode direcionar um computador, outro aparelho de processamento de dados programável ou outros dispositivos a funcionarem de maneira particular, de modo que as instruções armazenadas no meio legivel por computador produzam um artigo de fabricação incluindo instruções que implementam a função/ação especificada no fluxograma e/ou blocos ou bloco do diagrama de blocos.
[0089] As instruções de programa de computador também podem ser carregadas em um computador, que não um aparelho de processamento de dados programável, ou outros dispositivos para fazer com que uma série de etapas operacionais sejam executadas no computador, outros aparelhos programáveis ou outros dispositivos para produzir um processo implementado por computador, de tal modo que as instruções que são executadas no computador ou outro aparelho programável forneçam processos para implementar as funções/ações especificadas no fluxograma e/ou blocos ou bloco do diagrama de blocos.
[0090] O fluxograma e os diagramas de blocos nas figuras ilustram a arquitetura, a funcionalidade e a operação de possíveis implementações de sistemas, métodos e produtos de programas de computador de acordo com várias concretizações da presente invenção. Neste sentido, cada bloco no fluxograma ou diagramas de bloco pode representar um módulo, segmento ou parte de código, que compreende uma ou mais instruções executáveis para implementar a(s) função(ões) lógica(s) especificada(s). Deve-se também notar que, em algumas implementações alternativas, as funções observadas no bloco podem ocorrer fora da ordem observada nas figuras. Por exemplo, dois blocos mostrados em sucessão podem, de fato, ser executados substancialmente ao mesmo tempo, ou os blocos podem, às vezes, ser executados na ordem inversa, dependendo da funcionalidade envolvida. Deve-se também notar que cada bloco dos diagramas de bloco e/ou ilustração de fluxograma, e combinações de blocos nos diagramas de bloco e/ou ilustração de fluxograma, podem ser implementados por sistemas baseados em hardware de aplicação específica que executem as funções ou ações especificadas, ou combinações de instruções de computador e hardware de aplicação específica.
[0091] Adicionalmente ao acima, um ou mais aspectos da presente invenção podem ser providos, fornecidos, implantados, gerenciados, atendidos etc. por um provedor de serviços que oferece gerenciamento de ambientes de clientes. Por exemplo, o provedor de serviços pode criar, manter, suportar etc. código de computador e/ou uma infraestrutura de computador que executa um ou mais aspectos da presente invenção para um ou mais clientes. Em contrapartida, o provedor de serviços pode receber o pagamento do cliente sob uma assinatura e/ou contrato, como exemplos. Adicionalmente ou alternativamente, o provedor de serviços pode receber pagamento da venda de conteúdo publicitário a um ou mais terceiros.
[0092] Em um aspecto da presente invenção, um aplicativo pode ser implantado para realizar um ou mais aspectos da presente invenção. Como um exemplo, a implantação de um aplicativo compreende fornecer infraestrutura de computador operável para executar um ou mais aspectos da presente invenção.
[0093] Como um aspecto adicional da presente invenção, uma infraestrutura computacional pode ser implantada compreendendo a integração de código legível por computador em um sistema computacional, no qual o código, em combinação com o sistema computacional, é capaz de realizar um ou mais aspectos da presente invenção.
[0094] Ainda como um aspecto adicional da presente invenção, um processo para integrar infraestrutura computacional compreendendo a integração de código legível por computador em um sistema de computador pode ser fornecido. 0 sistema de computador compreende um meio legivel por computador, no qual o meio de computador compreende um ou mais aspectos da presente invenção. 0 código, em combinação com o sistema de computador, é capaz de realizar um ou mais aspectos da presente invenção.
[0095] Embora várias concretizações sejam descritas acima, elas são apenas exemplos. Por exemplo, ambientes computacionais de outras arquiteturas podem incorporar e utilizar um ou mais aspectos da presente invenção. Como exemplos, servidores que não sejam servidores System z®, tais como servidores Power Systems ou outros servidores fornecidos pela International Business Machines Corporation ou servidores de outras empresas, podem incluir usar e/ou se beneficiar de um ou mais aspectos da presente invenção. Além disso, embora no exemplo aqui apresentado, os adaptadores e o hub PCI sejam considerados parte do servidor, em outras concretizações, eles não precisam ser necessariamente considerados parte do servidor, mas podem simplesmente ser considerados acoplados à memória de sistema e/ou a outros componentes de um ambiente computacional. O ambiente computacional não precisa ser um servidor. Além disso, embora os adaptadores sejam baseados em PCI, um ou mais aspectos da presente invenção são utilizáveis com outros adaptadores ou outros componentes E/S. Adaptador e adaptador PCI são apenas exemplos. Além disso, outros tamanhos de espaços de endereço, tabelas de endereço e/ou páginas podem ser usados sem se afastar da presente invenção. Além disso, a DTE pode incluir mais, menos ou informações diferentes. Ainda, outros tipos de endereços podem ser traduzidos usando um ou mais aspectos da presente invenção. Muitas outras variações são possíveis.
[0096] Além disso, outros tipos de ambientes computacionais podem se beneficiar de um ou mais aspectos da presente invenção. Como exemplo, um sistema de processamento de dados adequado para armazenar e/ou executar código de programa é utilizável, o qual inclui pelo menos dois processadores acoplados direta ou indiretamente a elementos de memória através de um barramento de sistema. Os elementos de memória incluem, por exemplo, memória local empregada durante a execução real do código do programa, armazenamento em massa e memória cache que fornecem armazenamento temporário de pelo menos algum código de programa para reduzir o número de vezes que o código deve ser recuperado do armazenamento em massa durante a execução.
[0097] Os dispositivos de entrada/saida ou E/S (incluindo, sem limitação, teclados, telas, dispositivos indicadores, DASD, fita, CDs, DVDs, pendrives e outros meios de memória etc.) podem ser acoplados ao sistema diretamente ou através de controladores de E/S intermediários. Os adaptadores de rede também podem ser acoplados ao sistema para permitir que o sistema de processamento de dados seja acoplado a outros sistemas de processamento de dados ou impressoras remotas ou dispositivos de armazenamento através de redes públicas ou privadas intermediárias. Modems, modems a cabo e placas Ethernet são apenas alguns dos tipos disponíveis de adaptadores de rede.
[0098] Em referência à Figura 11, componentes representativos de um sistema de computador host 5000 para implementar uma ou mais concretizações são retratados. O computador host representativo 5000 compreende uma ou mais CPUs 5001 em comunicação com a memória de computador (isto é, armazenamento central) 5002, bem como interfaces E/S para dispositivos de meios de armazenamento 5011 e redes 5010 para comunicação com outros computadores ou SANs e semelhantes. A CPU 5001 é compatível com uma arquitetura tendo uma instrução de arquitetura configurada e funcionalidade de arquitetura. A CPU 5001 pode ter tradução dinâmica de endereço (DAT) 5003 para transformar endereços de programa (endereços virtuais) em endereços reais de memória. Uma DAT tipicamente inclui um translation lookaside buffer (TLB) 5007 para traduções temporárias de modo que acessos posteriores ao bloco de memória de computador 5002 não necessitem de adiamento da tradução de endereço. Tipicamente, uma memória cache 5009 é empregada entre a memória de computador 5002 e o processador 5001. A memória cache 5009 pode ser hierárquica tendo uma memória cache ampla disponível para mais de uma CPU, e memórias cache menores, mais rápidas (nivel inferior) entre a memória cache grande e cada CPU. Em algumas implementações, as memórias cache de nivel inferior são divididas para fornecer memórias cache de nivel baixo separadas para acessos de dados e pesquisa e carregamento de instrução. Em uma concretização, uma instrução é pesquisada e carregada da memória 5002 por uma unidade de busca de instrução 5004 através de uma memória cache 5009. A instrução é decodificada em uma unidade de decodificação de instrução 5006 e despachada (com outras instruções em algumas concretizações) para a unidade ou unidades de execução de instrução 5008. Tipicamente, várias unidades de execução 5008 são empregadas, 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ção de ramificação. A instrução é executada pela unidade de execução, acessando operandos de registros especificados de instrução ou memória conforme necessário. Se um operando tiver que ser acessado (carregado ou armazenado) da memória 5002, uma unidade de carregamento/armazenamento 5005 tipicamente gerencia o acesso sob controle 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.
[0099] Como observado, um sistema de computador inclui informações em armazenamento local (ou principal), bem como endereçamento, proteção, e registro de referência e alteração. Alguns aspectos de endereçamento incluem o formato de endereços, o conceito de espaços de endereço, os vários tipos de endereços e a forma com que um tipo de endereço é traduzido para outro tipo de endereço. Parte do armazenamento principal inclui locais de armazenamento permanentemente atribuídos. O armazenamento principal provê ao sistema o 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 serem processados.
[0100] O armazenamento principal pode incluir um ou mais armazenamentos de memória temporária de acesso rápido menores, algumas vezes, chamados de memória cache. Uma memória cache é tipicamente fisicamente associada com uma CPU ou um processador E/S. Os efeitos, exceto de desempenho, da construção fisica e utilização de meios de armazenamento distintos não são geralmente observáveis pelo programa.
[0101] Memórias cache separadas podem ser mantidas para instruções e para operandos de dados. As informações dentro de uma memória cache são mantidas em bytes contíguos em uma fronteira integral chamada de um bloco de memória cache ou linha de memória cache (ou linha, abreviado) . Um modelo pode fornecer uma instrução EXTRACT CACHE ATTRIBUTE que retorna o tamanho de uma linha de memória cache em bytes. Um modelo pode também fornecer instruções PREFETCH DATA e PREFETCH DATA RELATIVE LONG que realizam a pré-busca e carregamento de armazenamento na memória cache de dados ou instrução ou a liberação de dados da memória cache.
[0102] O armazenamento é visualizado como uma cadeia horizontal longa de bits. Para a maioria das operações, os acessos a armazenamento prosseguem em uma sequência da esquerda para a direita. A cadeia de bits é subdividida em unidades de oito bits. Uma unidade de oito bits é chamada de byte, que é o bloco de construção básico de todos os formatos de informações. Cada local de byte no armazenamento é identificado por um número inteiro não negativo único, que é o endereço daquele local de byte ou, simplesmente, o endereço de byte. Os locais de byte adjacentes possuem endereços consecutivos, iniciando com 0 na esquerda e prosseguindo em uma sequência da esquerda para a direita. Endereços são números inteiros binários não assinados e são de 24, 31 ou 64 bits.
[0103] As informações são transmitidas entre o armazenamento e uma CPU ou um subsistema de canal de um byte, ou um grupo de bytes, de uma 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. O número de bytes no grupo é implicado ou explicitamente especificado pela operação a ser executada. Quando usado em uma operação de CPU, um grupo de bytes é chamado de campo. Dentro de cada grupo de bytes, por exemplo, na z/Architecture®, os bits são numerados em uma sequência da esquerda para a direita. Na z/Architecture®, os bits mais à esquerda são geralmente referidos como os bits de "ordem superior" e os bits mais à direita como os bits de "ordem inferior". Os números de bits não são endereços de armazenamento, no entanto. Somente bytes podem ser endereçados. Para operar em bits individuais de um byte no armazenamento, todo o byte é acessado. Os bits em um byte são numerados de 0 a 7, da esquerda para a direita (por exemplo, na z/Architecture®) . Os bits em um endereço podem ser numerados de 8-31 ou 40-63 para endereços de 24 bits, ou de 1-31 ou 33-63 para endereços de 31 bits; eles são numerados de 0-63 para endereços de 64 bits. Dentro de qualquer outro formato de comprimento fixo de vários bytes, os bits que fazem o formato são consecutivamente numerados iniciando em 0. Para fins de detecção de erro e, preferivelmente, para correção, um ou mais bits de verificação podem ser transmitidos com cada byte ou com um grupo de bytes. Tais bits de verificação são gerados automaticamente pela máquina e não podem ser diretamente controlados pelo programa. As capacidades de armazenamento são expressas em número de bytes. Quando o comprimento de um campo de operando de armazenamento é implicado pelo código de operação de uma instrução, o campo é dito ter um comprimento fixo, que pode ser de um, dois, quatro, oito ou dezesseis bytes. Campos maiores podem ser implicados para algumas instruções. Quando o comprimento de um campo de operando de armazenamento não é implicado, mas é explicitamente definido, o campo é dito ter um comprimento variável. Operandos com comprimento variável podem variar em comprimento por incrementos de um byte (ou com algumas instruções, em múltiplos de dois bytes ou outros múltiplos) . Quando as informações são colocadas no armazenamento, os conteúdos somente daqueles locais de bytes são substituídos, os quais são incluídos no campo designado, ainda que a largura do percurso fisico para armazenamento possa ser maior do que o comprimento do campo sendo armazenado.
[0104] Determinadas unidades de informações devem estar em uma fronteira integral no armazenamento. Uma fronteira é chamada de integral para uma unidade de informação quando 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 em uma fronteira integral. Uma meia palavra é um grupo de dois bytes consecutivos em uma fronteira de dois bytes e é o bloco de construção básico de instruções. Uma palavra é um grupo de quatro bytes consecutivos em uma fronteira de quatro bytes. Uma palavra dupla é um grupo de oito bytes consecutivos em uma fronteira de oito bytes. Uma palavra quadrangular é um grupo de 16 bytes consecutivos em uma fronteira de 16 bytes. Quando endereços de armazenamento designam meias palavras, palavras, palavra duplas e palavras quadrangulares, a representação binária do endereço contém um, dois, três ou quatro bits zero mais à direita, respectivamente. Instruções devem estar em fronteiras integrais de dois bytes. Os operandos de armazenamento da maior parte das instruções não possuem requerimentos de alinhamento de fronteira.
[0105] Em dispositivos que implementam memórias cache separadas para operandos de dados e instruções, um atraso significativo pode ser experimentado se o programa estiver armazenado em uma linha de memória cache da qual instruções são subsequentemente pesquisadas e carregadas, independentemente de se o armazenamento altera as instruções que são subsequentemente buscadas e carregadas.
[0106] Em uma concretização, a invenção pode ser praticada por software (geralmente referente a código interno licenciado, firmware, microcódigo, milicódigo, pico- código e semelhantes, qualquer um dos quais deve ser consistente com uma ou mais concretizações). Em referência à Figura 11, o código de programa de software que incorpora um ou mais aspectos pode ser acessado pelo processador 5001 do sistema host 5000 a partir de dispositivos de meios de armazenamento de longo prazo 5011, tais como uma unidade de CD-ROM, unidade de fita ou unidade de disco rigido. O código de programa de software pode ser implementado em qualquer uma de uma variedade de midias conhecidas para utilização com um sistema de processamento de dados, tal como um disco flexivel, disco rigido ou CD-ROM. O código pode ser distribuído em tais midias ou pode ser distribuído para usuários a partir da memória de computador 5002 ou armazenamento de um sistema de computador em uma rede 5010 para outros sistemas de computador para utilização pelos usuários desses outros sistemas.
[0107] O código de programa de software inclui um sistema operacional que controla a função e a interação dos vários componentes de computador e um ou mais programas de aplicativo. O código de programa é normalmente paginado a partir do dispositivo de meio de armazenamento 5011 para o armazenamento de computador de velocidade relativamente superior 5002, onde está disponível para processamento pelo processador 5001. As técnicas e métodos para incorporação de código de programa de software na memória, em meios fisicos, e/ou distribuição de código de software através de redes são bem conhecidos e não serão mais discutidos neste documento. 0 código de programa, quando criado e armazenado em um meio tangivel (incluindo, mas sem limitação, módulos de memória eletrônica (RAM), memória flash, Discos Compactos (CDs), DVDs, Fita Magnética e semelhantes) é geralmente referido como um "produto de programa de computador". 0 meio de produto de programa de computador é tipicamente legivel por um circuito de processamento preferivelmente em um sistema de computador para execução pelo circuito de processamento.
[0108] A Figura 12 ilustra uma estação de trabalho ou sistema de hardware de servidor representativo, em que a presente invenção pode ser praticada. O sistema 5020 da Figura 12 compreende um sistema de computador base representativo 5021, tal como um computador pessoal, uma estação de trabalho ou um servidor, incluindo dispositivos periféricos opcionais. O sistema de computador base 5021 inclui um ou mais processadores 5026 e um barramento empregado para conectar 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 barramento conecta o processador 5026 a memória 5025 e ao armazenamento de longo prazo 5027, que pode incluir um disco rigido (incluindo qualquer um de meio magnético, CD, DVD e Memória Flash, por exemplo) ou uma unidade de fita, por exemplo. O sistema 5021 deve também incluir um adaptador de interface de usuário, que conecta o microprocessador 5026, através do barramento, a um ou mais dispositivos de interface, tais como um teclado 5024, um mouse 5023, uma impressora/scanner 5030 e/ou outros dispositivos de interface, que podem ser qualquer dispositivo de interface de usuário, tal como uma tela sensivel ao toque, teclado de entrada digitalizada etc. O barramento também conecta um dispositivo de exibição 5022, tal como um monitor ou tela LCD, ao microprocessador 5026 através de um adaptador de exibição.
[0109] O sistema 5021 pode se comunicar com outros computadores ou redes de computadores por meio de um adaptador de rede capaz de se comunicar 5028 com uma rede 5029. Exemplos de adaptadores de rede são canais de comunicação, token ring, Ethernet ou modems. Alternativamente, o sistema 5021 pode se comunicar usando uma interface sem fio, tal como um cartão de CDPD (dados de pacote digital de celular) . O sistema 5021 pode ser associado com tais outros computadores em uma Rede de Área Local (LAN) ou uma Rede de Longa Distância (WAN), ou o sistema 5021 pode ser um cliente em um arranjo cliente/servidor com outro computador etc. Todas essas configurações, bem como hardware e software de comunicação apropriados, são conhecidos na técnica.
[0110] A Figura 13 ilustra uma rede de processamento de dados 5040, em que 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 fio e uma rede a cabo, cada uma das quais pode incluir uma pluralidade de estações de trabalho individuais 5041, 5042, 5043, 5044. Adicionalmente, como será entendido por aqueles versados na técnica, uma ou mais LANs podem ser incluídas, em que uma LAN pode compreender uma pluralidade de estações de trabalho inteligentes acopladas a um processador host.
[0111] Ainda em referência à Figura 13, as redes podem também incluir computadores ou servidores mainframe, tais como um computador gateway (servidor cliente 5046) ou servidor de aplicativo (servidor remoto 5048 que pode acessar um repositório de dados e pode também ser acessado diretamente de uma estação de trabalho 5045). Um computador gateway 5046 serve como um ponto de entrada em cada rede individual. Um gateway é necessário ao conectar um protocolo de rede a outro. O gateway 5046 pode ser preferivelmente acoplado à outra rede (a Internet 5047, por exemplo) por meio de um link de comunicação. O gateway 5046 pode também ser diretamente acoplado a uma ou mais estações de trabalho 5041, 5042, 5043, 5044 usando um link de comunicação. O computador gateway pode ser implementado utilizando um servidor IBM eServer™ System z® fornecido pela International Business Machines Corporation.
[0112] Em referência simultaneamente à Figura 12 e à Figura 13, o código de programação de software que pode incorporar a presente invenção pode ser acessado pelo processador 5026 do sistema 5020 a partir do meio de armazenamento de longo prazo 5027, tal como uma unidade de CD-ROM ou disco rigido. O código de programação de software pode ser incorporado em qualquer um de uma variedade de meios conhecidos para utilização com um sistema de processamento de dados, tal como um disco flexivel, disco rigido ou CD- ROM. O código pode ser distribuído em tais meios ou pode ser distribuído para usuários 5050, 5051 a partir da memória ou armazenamento de um sistema de computador em uma rede para outros sistemas de computador para utilização por usuários de tais outros sistemas.
[0113] Alternativamente, o código de programação pode ser incorporado na memória 5025 e acessado pelo processador 5026 usando o barramento do processador. Tal código de programação inclui um sistema operacional que controla a função e interação dos vários componentes de computador e um ou mais programas de aplicativo 5032. O código de programa é normalmente paginado a partir do meio 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 incorporação de código de programação de software na memória, em meio fisico, e/ou distribuição de código de software através de redes são bem conhecidos e não serão mais discutidos neste documento. O código de programa, quando criado e armazenado em um meio tangivel (incluindo, mas sem limitação, módulos de memória eletrônica (RAM), memória flash, Discos Compactos (CDs), DVDs, Fita Magnética e semelhantes) é geralmente referido como um "produto de programa de computador". O meio de produto de programa de computador é tipicamente legivel por um circuito de processamento preferivelmente em um sistema de computador para execução pelo circuito de processamento.
[0114] A memória cache que está mais prontamente disponível para o processador (normalmente mais rápida e menor do que outras memórias cache do processador) é a memória cache mais inferior (LI ou nivel um) e o armazenamento principal (memória principal) é a memória cache de nivel mais alto (L3 se forem 3 niveis) . A memória cache de nivel mais baixo é geralmente dividida em uma memória cache de instrução (I-Cache) portando instruções de máquina a serem executadas e uma memória cache de dados (D- Cache) portando operandos de dados.
[0115] Em referência à Figura 14, uma concretização de processador exemplificativa é apresentada para o processador 5026. Tipicamente, um ou mais niveis de memória cache 5053 são empregados a blocos de memória temporária a fim de melhorar o desempenho do processador. A memória cache 5053 é uma memória temporária de alta velocidade portando linhas de memória cache de dados de memória que são prováveis de serem usados. Linhas de memória cache tipicas têm 64, 128 ou 256 bytes de dados de memória. Memórias cache separadas são geralmente empregadas para instruções de cache em vez de para dados de cache. A coerência de memória cache (sincronização de cópias de linhas na memória e memórias cache) é geralmente provida por vários algoritmos "snoop"bem conhecidos na técnica. O armazenamento de memória principal 5025 de um sistema de processador é geralmente referido como uma memória cache. Em um sistema de processador tendo 4 niveis de memória cache 5053, o armazenamento principal 5025 é geralmente referido como a memória cache de nivel 5 (L5) uma vez que é tipicamente mais rápida e somente porta a porção do armazenamento não volátil (DASD, fita etc.) que é disponível a um sistema de computador. O armazenamento principal 5025 "cacheia"páginas de dados paginadas dentro e fora do armazenamento principal 5025 pelo sistema operacional.
[0116] Um contador de programa (contador de instrução) 5061 mantém o rastreamento do endereço da instrução atual a ser executada. Um contador de programa em um processador de z/Architecture® é de 64 bits e pode ser truncado para 31 ou 24 bits para suportar limites de endereçamentos anteriores. Um contador de programa é tipicamente incorporado em uma PSW (Palavra de Status de Programa) de um computador, tal que persista durante a comutação de contexto. Dessa forma, um programa em progresso, tendo um valor de contador de programa, pode ser interrompido, por exemplo, pelo sistema operacional (comutação de contexto do ambiente de programa para o ambiente de sistema operacional). A PSW do programa mantém o valor de contador de programa enquanto o programa não está ativo, e o contador de programa (na PSW) do sistema operacional é usado enquanto o sistema operacional está em execução. Tipicamente, o contador de programa é incrementado por uma quantidade igual ao número de bytes da instrução atual. Instruções RISC (Computação de Conjunto Reduzido de Instruções) são tipicamente de comprimento fixo enquanto instruções CISC (Computação de Conjunto Complexo de Instruções) são tipicamente de comprimento variável. Instruções da z/Architecture® da IBM são instruções CISC tendo um comprimento de 2, 4 ou 6 bytes. 0 contador de programa 5061 é modificado por uma operação de comutação de contexto ou uma operação de tomada de ramificação de instrução de ramificação, por exemplo. Em uma operação de comutação de contexto, o valor de contador de programa atual é salvo na palavra de status de programa junto com outras informações de estado sobre o programa sendo executado (tais 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 de tomada de ramificação é executada a fim de permitir que o programa tome decisões ou permitir um loop dentro do programa carregando-se o resultado da instrução de ramificação no contador de programa 5061.
[0117] Tipicamente, uma unidade de busca de instrução 5055 é empregada para pesquisar e carregar instruções em nome do processador 5026. A unidade de pesquisa e carregamento pesquisa e carrega as ‘"próximas instruções sequenciais", instruções alvo de instruções de tomada de ramificação, ou as primeiras instruções de um programa após uma comutação de contexto. Unidades de pesquisa e carregamento de Instrução Moderna geralmente empregam técnicas de pré-busca e carregamento para especulativamente pesquisar e carregar instruções com base na probabilidade de as instruções pré-buscadas e carregadas serem usadas. Por exemplo, uma unidade de pesquisa e carregamento pode pesquisar e carregar 16 bytes de instrução que incluem a próxima instrução sequencial e bytes adicionais de instruções sequenciais adicionais.
[0118] As instruções buscadas são, então, executadas pelo processador 5026. Em uma concretização, as instruções buscadas são passadas para uma unidade de envio 5056 da unidade de pesquisa e carregamento. A unidade de envio decodifica as instruções e encaminha informações sobre as instruções decodificadas para as unidades adequadas 5057, 5058, 5060. Uma unidade de execução 5057 irá tipicamente receber informações sobre instruções aritméticas decodificadas da unidade de busca de instrução 5055 e irá executar operações aritméticas em operandos de acordo com o código de operação da instrução. Operandos são fornecidos à unidade de execução 5057 preferivelmente a partir da memória 5025, registros de arquitetura 5059 ou de um campo imediato da instrução sendo executada. Os resultados da execução, quando armazenados, são armazenados na memória 5025, nos registros 5059 ou em outros hardwares de máquina (tais como registros de controle, registros de PSW e semelhantes) .
[0119] Um processador 5026 tipicamente tem uma ou mais unidades 5057, 5058, 5060 para execução da função da instrução. Em referência à Figura 15A, uma unidade de execução 5057 pode se comunicar com registros gerais de arquitetura 5059, uma unidade de decodificação/envio 5056, uma unidade de armazenamento de carga 5060, e outras unidades de processador 5065 por meio de lógica de interface 5071. Uma unidade de execução 5057 pode empregar vários circuitos de registro 5067, 5068, 5069 para manter informações que a unidade lógica aritmética (ALU) 5066 irá operar. A ALU executa operações aritméticas, tais como adição, subtração, multiplicação e divisão, bem como função lógica, tal como e, OU e OU-exclusivo (XOR), girar e trocar. Preferivelmente, a ALU suporta operações especializadas que são dependentes de projeto. Outros circuitos podem fornecer outras facilidades de arquitetura 5072 incluindo códigos de condição e lógica de suporte de recuperação, por exemplo. Tipicamente, o resultado de uma operação de ALU é mantido em um circuito de registro de saida 5070 que pode encaminhar o resultado a uma variedade de outras funções de processamento. Existem vários arranjos de unidades de processador, a presente descrição é somente destinada a fornecer um entendimento representativo de uma concretização.
[0120] Uma instrução ADD, por exemplo, seria executada em uma unidade de execução 5057 tendo funcionalidade lógica e aritmética enquanto uma instrução de ponto flutuante, por exemplo, seria executada em uma execução de ponto flutuante tendo capacidade de ponto flutuante especializada. Preferivelmente, uma unidade de execução opera em operandos identificados por uma instrução executando uma função definida por código de operação nos operandos. Por exemplo, uma instrução ADD pode ser executada por uma unidade de execução 5057 em operandos encontrados em dois registros 5059 identificados por campos de registro da instrução.
[0121] A unidade de execução 5057 executa a adição aritmética em dois operandos e armazena o resultado em um terceiro operando, em que o terceiro operando pode ser um terceiro registro ou um dos dois registros fonte. A unidade de execução preferivelmente utiliza uma Unidade Lógica Aritmética (ALU) 5066 que é capaz de executar uma variedade de funções lógicas, tais como Deslocar, Girar, E, OU e XOR, bem como uma variedade de funções algébricas, incluindo qualquer uma de adição, subtração, multiplicação, divisão. Algumas ALUs 5066 são concebidas para operações escalares e algumas para ponto flutuante. Os dados podem ser Big Endian (em que o byte menos significativo está no endereço de byte mais alto) ou Little Endian (em que o byte menos significativo está no endereço de byte mais baixo) dependendo da arquitetura. A z/Architecture® da IBM é Big Endian. Campos assinados podem ser sinal e dimensão, complemento de 1 ou complemento de 2 dependendo da arquitetura. Um número complemento de 2 é vantajoso em que a ALU não precisa projetar uma capacidade subtração, uma vez que tanto um valor negativo ou um valor positivo no complemento de 2 requer somente uma adição dentro da ALU. Os números são comumente descritos de forma abreviada, em que um campo de 12 bits define um endereço de um bloco de 4.096 bytes e é comumente descrito como um bloco de 4 Kbytes (Kilo-byte), por exemplo.
[0122] Em referência à Figura 15B, informações de instrução de ramificação para execução de uma instrução de ramificação são tipicamente enviadas para uma unidade de ramificação 5058 que geralmente emprega um algoritmo de previsão de ramificação, tal como uma tabela de histórico de ramificação 5082 para prever o resultado da ramificação antes de outras operações condicionais serem concluídas. O alvo da instrução de ramificação atual será pesquisado e carregado e especulativamente executado antes de as operações condicionais serem concluídas. Quando as operações condicionais são concluídas, as instruções de ramificação especulativamente executadas são concluídas ou descartadas com base nas condições da operação condicional e no resultado especulado. Uma instrução de ramificação típica pode testar códigos de condição e ramificar para um endereço alvo se os códigos de condição atenderem ao requerimento de ramificação da instrução de ramificação, um endereço alvo pode ser calculado com base em vários números incluindo aqueles encontrados nos campos de registro ou um campo imediato da instrução, por exemplo. A unidade de ramificação 5058 pode empregar uma ALU 5074 tendo uma pluralidade de circuitos de registro de entrada 5075, 5076, 5077 e um circuito de registro de saída 5080. A unidade de ramificação 5058 pode se comunicar com registros gerais 5059, decodificar a unidade de envio 5056 ou outros circuitos 5073, por exemplo.
[0123] 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 operacional, uma exceção ou erro de programa causando uma comutação de contexto, um sinal de interrupção de E/S causando uma comutação de contexto ou atividade multissegmentada de uma pluralidade de programas (em um ambiente multissegmentado) , por exemplo. Preferivelmente, uma ação de comutação de contexto salva informações de estado sobre um programa atualmente em execução e, então, carrega informações de estado sobre outro programa sendo invocado. Informações de estado podem ser salvas em registros de hardware ou na memória, por exemplo. Informações de estado preferivelmente compreendem um valor de contador de programa apontando para uma instrução seguinte a ser executada, códigos de condição, informações de tradução de memória e conteúdo de registro de arquitetura. Uma atividade de comutação de contexto pode ser exercida por circuitos de hardware, programas de aplicativo, programas de sistema operacional ou código de firmware (microcódigo, pico-código ou código interno licenciado (LIC)) sozinho ou em combinação.
[0124] Um processador acessa operandos de acordo com métodos de instrução definidos. A instrução pode fornecer um operando imediato usando o valor de uma porção da instrução, pode fornecer um ou mais campos de registro explicitamente apontando para registros de propósito geral ou registros de propósito especial (registros de ponto flutuante, por exemplo). A instrução pode utilizar registros implicados identificados por um campo de código de operação como operandos. A instrução pode utilizar locais de memória para operandos. Um local de memória de um operando pode ser fornecido por um registro, um campo imediato ou uma combinação de registros e campo imediato como exemplificado pela facilidade de deslocamento longo da z/Architecture®, em que a instrução define um registro base, um registro de indice e um campo imediato (campo de deslocamento) que são adicionados juntos para fornecer o endereço do operando na memória, por exemplo. Local, neste documento, tipicamente implica um local na memória principal (armazenamento principal) salvo indicação em contrário.
[0125] Em referência à Figura 15C, um processador acessa o armazenamento usando uma unidade de carregamento/ armazenamento 5060. A unidade de carregamento/ armazenamento 5060 pode executar uma operação de carregamento pela obtenção do endereço do operando alvo na memória 5053 e pelo carregamento do operando em um registro 5059 ou outro local de memória 5053, ou pode executar uma operação de armazenamento obtendo o endereço do operando alvo na memória 5053 e armazenando os dados obtidos de um registro 5059 ou outro local de memória 5053 no local de operando alvo na memória 5053. A unidade de carregamento/ armazenamento 5060 pode ser especulativa e pode acessar a memória em uma sequência que esteja fora da ordem em relação à sequência de instrução, no entanto, a unidade de carregamento/ armazenamento 5060 deve manter a aparência para programas cujas instruções foram executadas na ordem. Uma unidade de carregamento/ armazenamento 5060 pode se comunicar com registros gerais 5059, unidade de decodificação/envio 5056, interface de memória/ memória cache 5053 ou outros elementos 5083 e compreende vários circuitos de registro, ALUs 5085 e lógica de controle 5090 para calcular endereços de armazenamento e para fornecer sequenciamento para manter as operações na ordem. Algumas operações podem estar fora da ordem, mas a unidade de carregamento/armazenamento provê funcionalidade para fazer as operações fora da ordem aparecerem para o programa como tendo sido executadas na ordem, como é bem conhecido na técnica.
[0126] Preferivelmente, endereços que um programa de aplicativo "visualiza" são geralmente referidos como endereços virtuais. Endereços virtuais são geralmente referidos como "endereços lógicos" e "endereços efetivos". Esses endereços virtuais são virtuais porque eles são redirecionados para o local de memória fisica por uma de uma variedade de tecnologias de tradução dinâmica de endereço (DAT) incluindo, mas sem limitação, simplesmente prefixação de um endereço virtual com um valor de compensação, tradução do endereço virtual através de uma ou mais tabelas de tradução, as tabelas de tradução preferivelmente compreendendo pelo menos uma tabela de segmento e uma tabela de página sozinha ou em combinação, preferivelmente, a tabela de segmento tendo uma entrada apontando para a tabela de página. 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 segmento e uma tabela de página opcional. 0 desempenho da tradução de endereço é geralmente melhorado utilizando uma memória tampão à parte de tradução (TLB) que compreende mapeamento de entradas de um endereço virtual para uma memória local fisica associada. As entradas são criadas quando a DAT traduz um endereço virtual usando as tabelas de tradução. A utilização subsequente do endereço virtual pode, então, utilizar a entrada do TLB rápido em vez dos acessos de tabela de tradução sequencial lentos. 0 conteúdo de TLB pode ser gerenciado por uma variedade de algoritmos de substituição incluindo LRU (Menos Utilizados Recentemente).
[0127] No caso em que o processador é um processador de um sistema de multiprocessador, cada processador tem a responsabilidade de manter recursos compartilhados, tais como E/S, memórias cache, TLBs e memória, bloqueados por coerência. Tipicamente, tecnologias '"snoop"serão utilizadas na manutenção da coerência da memória cache. Em um ambiente snoop, cada linha de memória cache pode ser marcada como estando em qualquer um de um estado compartilhado, um estado exclusivo, um estado alterado, um estado inválido e semelhantes a fim de facilitar o compartilhamento.
[0128] Unidades de E/S 5054 (Figura 21) proveem o processador com meios de conexão a dispositivos periféricos incluindo fita, disco, impressoras, telas e redes, por exemplo. Unidades de E/S são geralmente apresentadas ao programa de computador por unidades de software. Em mainframes, tais como o System z® da IBM®, adaptadores de canal e adaptadores de sistemas abertos são unidades de E/S do mainframe que proveem a comunicação entre o sistema operacional e dispositivos periféricos.
[0129] Além disso, outros tipos de ambientes computacionais podem se beneficiar de um ou mais aspectos 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 particular (incluindo, por exemplo, execução de instrução, funções de arquitetura, tais como tradução de endereço e registros de arquitetura) ou um subconjunto da mesma é emulado (por exemplo, em um sistema de computador nativo tendo um processador e memória). Em tal ambiente, uma ou mais funções de emulação do emulador podem implementar um ou mais aspectos da presente invenção, ainda que um computador executando o emulador possa ter uma arquitetura diferente do que as capacidades sendo emuladas. Como exemplo, no modo de emulação, a instrução ou operação especifica sendo emulada é decodificada, e uma função de emulação apropriada é construída para implementar a instrução ou operação individual.
[0130] Em um ambiente de emulação, um computador host inclui, por exemplo, uma memória para armazenar instruções e dados; uma unidade de busca de instrução para pesquisar e carregar instruções da memória e para, opcionalmente, fornecer memória temporária local para a instrução pesquisada e carregada; uma unidade de decodificação de instrução para receber as instruções pesquisadas e carregadas e para determinar o tipo de instruções que foram pesquisadas e carregadas; e uma unidade de execução de instrução para executar as instruções. A execução pode incluir o carregamento de dados em um registro da memória; armazenamento de dados de volta para a memória a partir de um registro; ou execução de algum tipo de operação lógica ou aritmética, como determinado pela unidade de decodificação. Em um exemplo, cada unidade é implementada em software. Por exemplo, as operações sendo executadas pelas unidades são implementadas como uma ou mais sub-rotinas dentro de software emulador.
[0131] Mais particularmente, em um mainframe, instruções de máquina de arquitetura são usadas por programadores, geralmente programadores "C" atuais, geralmente por meio de um aplicativo compilador. Essas instruções armazenadas no meio de armazenamento podem ser executadas de forma nativa em um Servidor de z/Architecture® IBM®, ou alternativamente em máquinas executando outras arquiteturas. Elas podem ser emuladas nos servidores mainframe IBM® existentes e futuros e em outras máquinas da IBM® (por exemplo, servidores Power System e servidores System x®). Elas podem ser executadas em máquinas rodando Linux em uma ampla variedade de máquinas usando hardware fabricado por IBM®, Intel®, AMD™ e outros. Além da execução naquele hardware sob a Z/Architecture®, Linux pode ser usado e também máquinas que utilizam emulação por Hercules (ver eee.hercules-90.org) ou ESI (Fundamental Software, Inc) (ver www.funsoft.com), em que geralmente a execução está em um modo de emulação. No modo de emulação, o software de emulação é executado por um processador nativo para emular a arquitetura de um processador emulado.
[0132] O processador nativo tipicamente executa software de emulação compreendendo firmware ou um sistema operacional nativo para executar emulação do processador emulado. O software de emulação é responsável por pesquisa e carregamento e execução de instruções da arquitetura de processador emulada. O software de emulação mantém um contador de programa emulado para manter o rastreamento de fronteiras de instrução. O software de emulação pode pesquisar e carregar uma ou mais instruções de máquina emuladas de uma vez e converter a uma ou mais instruções de máquina emuladas em um grupo de instruções de máquina nativas correspondentes para execução pelo processador nativo. Essas instruções convertidas podem ser armazenadas em cache, tal que uma conversão mais rápida possa ser realizada. Não obstante, o software de emulação deve manter as regras de arquitetura da arquitetura de processador emulado, de modo a garantir que os sistemas operacionais e aplicativos gravados no processador emulado operem corretamente. Além disso, o software de emulação deve prover recursos identificados pela arquitetura de processador emulado incluindo, mas sem limitação, registros de controle, registros de propósito geral, registros de ponto flutuante, função de tradução dinâmica de endereço incluindo tabelas de segmento e tabelas de página, por exemplo, mecanismos de interrupção, mecanismos de comutação de contexto, relógios de Hora do Dia (TOD) e interfaces de arquitetura para subsistemas E/S, tal que um sistema operacional ou um programa de aplicativo concebido para rodar no processador emulado possa ser rodado no processador nativo tendo o software de emulação.
[0133] Uma instrução especifica sendo emulada é decodificada, e uma sub-rotina é chamada para executar a função da instrução individual. Uma função de software de emulação emulando uma função de um processador emulado é implementada, por exemplo, em uma unidade ou sub-rotina "C", ou algum outro método de provisão de uma unidade para o hardware especifico conforme estará dentro da habilidade daqueles versados na técnica após compreensão da descrição da concretização preferida. Várias patentes de emulação de software e hardware incluindo, mas sem limitação, Carta- Patente dos Estados Unidos N° . 5.551.013, intitulada "Multiprocessador for Hardware Emulation", de Beausoleil et al. ; e Carta-Patente dos Estados Unidos N° . 6.009.261, intitulada "Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor", de Scalzi et al; e Carta-Patente dos Estados Unidos N° . 5.574.873, intitulada "Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions", de Davidian et al; e Carta-Patente dos Estados Unidos N° . 6.308.255, intitulada "Symmetrical Multiprocessing Bus and Chipset Used for Coprocessador Support Allowing Non-Native Code to Run in a System", de Gorishek et al; e Carta-Patente dos Estados Unidos N° . 6.463.582, intitulada "Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method", de Lethin et al; e Carta- Patente dos Estados Unidos N°. 5.790.825, intitulada "Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions", de Eric Traut, e muitas outras, ilustram uma variedade de formas conhecidas de conseguir a emulação de um formato de instrução com arquitetura para uma máquina diferente para uma máquina alvo disponível para aqueles versados na técnica.
[0134] Na Figura 16, um exemplo de um sistema de computador host emulado 5092 é fornecido, o qual emula um sistema de computador host 5000' de uma arquitetura hospedeira. No sistema de computador host emulado 5092, o processador host (CPU) 5091 é um processador host emulado (ou processador host virtual) e compreende um processador de emulação 5093 tendo uma arquitetura de conjunto de instruções nativas diferente do processador 5091 do computador host 5000'. O sistema de computador host emulado 5092 tem memória 5094 acessível ao processador de emulação 5093. No exemplo de concretização, a memória 5094 é dividida em uma porção de memória de computador host 5096 e uma porção de rotinas de emulação 5097. A memória de computador host 5096 é disponível a programas do computador host emulado 5092 de acordo com a arquitetura de computador host. O processador de emulação 5093 executa instruções nativas de um conjunto de instruções de arquitetura de uma arquitetura diferente daquela do processador emulado 5091, as instruções nativas obtidas de memória de rotinas de emulação 5097, e pode acessar uma instrução hospedeira para execução de um programa na memória de computador host 5096 empregando uma ou mais instrução(ões) obtida(s) em uma rotina de sequência & acesso/decodificação que pode decodificar a instrução(ões) hospedeira(s) acessada (s) para determinar uma rotina de execução de instrução nativa para emulação da função da instrução hospedeira acessada. Outras facilidades que são definidas para a arquitetura do sistema de computador host 5000' podem ser emuladas por rotinas de facilidades de arquitetura, incluindo tais facilidades como registros de propósito geral, registros de controle, tradução dinâmica de endereço e suporte de subsistema de E/S e memória cache de processador, por exemplo. As rotinas de emulação podem também obter vantagens de funções disponíveis no processador de emulação 5093 (tais como registros gerais e tradução dinâmica de endereços virtuais) para melhorar o desempenho das rotinas de emulação. Mecanismos especiais de descarregamento e hardware podem também ser fornecidos para auxiliar o processador 5093 na emulação da função do computador host 5000 ' .
[0135] A terminologia aqui utilizada tem a finalidade apenas de descrever concretizações particulares e não se destina a limitar a invenção. Tal como aqui utilizado, as formas singulares "um", "uma", "o" e "a" se destinam a incluir também as formas plurais, a menos que o contexto indique claramente o contrário. Será ainda entendido que os termos "compreende" e/ou "compreendendo", quando usados nesta invenção, especificam a presença de caracteristicas, números inteiros, etapas, operações, elementos e/ou componentes declarados, mas não impedem a presença ou adição de uma ou mais caracteristicas, números inteiros, etapas, operações, elementos, componentes e/ou grupos dos mesmos.
[0136] As estruturas, materiais, ações e equivalentes correspondentes de todos os meios ou etapas mais os elementos de função nas reivindicações abaixo, se houver, são destinados a incluir qualquer estrutura, material ou ação para executar a função em combinação com outros elementos reivindicados como especificamente reivindicados. A descrição da presente invenção foi apresentada para fins de ilustração e descrição, mas não se destina a ser exaustiva ou limitada à invenção na forma divulgada. Muitas modificações e variações serão evidentes para os versados na técnica sem se afastar do escopo da invenção. A concretização foi escolhida e descrita de modo a melhor explicar os princípios da invenção e a aplicação prática, e permitir que outros versados na técnica compreendam a invenção para várias concretizações com várias modificações que são adequadas para o uso particular contemplado.

Claims (7)

1. Método para tradução de endereços de um ambiente de computação compreendendo: obter um endereço a partir de um adaptador (110) a ser traduzido para um endereço de memória diretamente utilizável no acesso à memória do sistema do ambiente de computação, o endereço compreendendo uma pluralidade de bits, a pluralidade de bits compreendendo uma primeira porção de bits e uma segunda porção de bits; receber um valor de intervalo de endereço que indica um intervalo de endereços permitidos, em que o intervalo é definido por um endereço base (214) e um limite (216) localizados em uma entrada da tabela de dispositivo (210) associada ao adaptador (110), a entrada da tabela de dispositivo (210) localizada por um identificador de solicitante localizado em uma solicitação emitida pelo adaptador (110); validar o endereço obtido a partir do adaptador (110) utilizando, pelo menos, a primeira porção de bits e o intervalo de endereço recebido; e converter o endereço obtido a partir do adaptador (110) para o endereço de memória diretamente utilizável na memória de sistema acessível do ambiente de computação, o método caracterizado pelo fato de que a conversão ignora a primeira porção de bits e usa a segunda porção de bits para obter informações sobre o endereço de um ou mais niveis de tabelas de tradução de endereços para realizar a conversão.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a primeira porção de bits compreende bits de alta ordem do endereço e a segunda porção de bits compreende bits de ordem inferior do endereço, os bits de baixa ordem determinados com base numa dimensão de um espaço de endereço atribuido que inclui o endereço de memória.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que um certo número de niveis de tabelas de tradução de endereços é baseado em pelo menos um de um tamanho de um espaço de endereço atribuido, que inclui o endereço de memória, o tamanho de uma ou mais tabelas de tradução de endereços para ser usada na conversão, e um tamanho da unidade de memória acessada pelo endereço de memória.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a conversão compreende selecionar uma tabela de tradução de endereços a ser usada para converter o endereço, a seleção usando um ponteiro em uma entrada de tabela de dispositivo (210) usada na conversão.
5. Método, de acordo com a reivindicação 4, caracterizado pelo fato de que o método compreende ainda a localização da entrada de tabela de dispositivo (210), a localização usando, pelo menos, um de um identificador solicitador do adaptador (110) que emite uma solicitação que inclui o endereço a ser traduzido, ou uma porção do endereço.
6. Método, de acordo com a reivindicação 4, caracterizado pelo fato de que o método compreende ainda a determinação de um formato da tabela de tradução de endereços selecionado, a determinação utilizando um campo de formato da entrada de tabela de dispositivo (210) .
7. Sistema de computador caracterizado pelo fato de que compreende os meios adaptados para a realização de todas as etapas do método, conforme definido em qualquer uma das reivindicações 1 a 6.
BR112012033815-3A 2010-06-23 2010-11-08 tradução de endereços de entrada/saída para endereços de memória BR112012033815B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/821,170 2010-06-23
US12/821,170 US8635430B2 (en) 2010-06-23 2010-06-23 Translation of input/output addresses to memory addresses
PCT/EP2010/067043 WO2011160722A1 (en) 2010-06-23 2010-11-08 Translation of input/output addresses to memory addresses

Publications (2)

Publication Number Publication Date
BR112012033815A2 BR112012033815A2 (pt) 2018-04-17
BR112012033815B1 true BR112012033815B1 (pt) 2020-11-03

Family

ID=43805638

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112012033815-3A BR112012033815B1 (pt) 2010-06-23 2010-11-08 tradução de endereços de entrada/saída para endereços de memória

Country Status (20)

Country Link
US (3) US8635430B2 (pt)
EP (1) EP2430555B1 (pt)
JP (1) JP5636097B2 (pt)
KR (1) KR101455544B1 (pt)
CN (1) CN102906719B (pt)
AU (1) AU2010355813B2 (pt)
BR (1) BR112012033815B1 (pt)
CA (1) CA2800636C (pt)
DK (1) DK2430555T3 (pt)
ES (1) ES2428822T3 (pt)
HK (1) HK1180793A1 (pt)
HR (1) HRP20130820T1 (pt)
MX (1) MX2012014859A (pt)
PL (1) PL2430555T3 (pt)
PT (1) PT2430555E (pt)
RU (1) RU2547705C2 (pt)
SG (1) SG186098A1 (pt)
SI (1) SI2430555T1 (pt)
WO (1) WO2011160722A1 (pt)
ZA (1) ZA201209649B (pt)

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8549182B2 (en) 2010-06-23 2013-10-01 International Business Machines Corporation Store/store block instructions for communicating with adapters
US8650337B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US8510599B2 (en) * 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8650335B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Measurement facility for adapter functions
US9195623B2 (en) 2010-06-23 2015-11-24 International Business Machines Corporation Multiple address spaces per adapter with address translation
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
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
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8621112B2 (en) 2010-06-23 2013-12-31 International Business Machines Corporation Discovery by operating system of information relating to adapter functions accessible to the operating system
US8566480B2 (en) 2010-06-23 2013-10-22 International Business Machines Corporation Load instruction for communicating with adapters
US8626970B2 (en) 2010-06-23 2014-01-07 International Business Machines Corporation Controlling access by a configuration to an adapter function
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US9213661B2 (en) 2010-06-23 2015-12-15 International Business Machines Corporation Enable/disable adapters of a computing environment
US8639858B2 (en) 2010-06-23 2014-01-28 International Business Machines Corporation Resizing address spaces concurrent to accessing the address spaces
US9104327B2 (en) * 2011-05-17 2015-08-11 Sandisk Technologies Inc. Fast translation indicator to reduce secondary address table checks in a memory device
US20130132061A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Just-in-time static translation system for emulated computing environments
US9355146B2 (en) 2012-06-29 2016-05-31 International Business Machines Corporation Efficient partitioned joins in a database with column-major layout
US9355032B2 (en) 2012-10-08 2016-05-31 International Business Machines Corporation Supporting multiple types of guests by a hypervisor
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
US9355040B2 (en) 2012-10-08 2016-05-31 International Business Machines Corporation Adjunct component to provide full virtualization using paravirtualized hypervisors
US9740624B2 (en) 2012-10-08 2017-08-22 International Business Machines Corporation Selectable address translation mechanisms within a partition
US9348757B2 (en) 2012-10-08 2016-05-24 International Business Machines Corporation System supporting multiple partitions with differing translation formats
US9647838B2 (en) * 2013-01-25 2017-05-09 Ralph John Hilla Restructuring the computer and its association with the internet
US8806098B1 (en) * 2013-03-15 2014-08-12 Avalanche Technology, Inc. Multi root shared peripheral component interconnect express (PCIe) end point
US9619387B2 (en) * 2014-02-21 2017-04-11 Arm Limited Invalidating stored address translations
US20150261701A1 (en) * 2014-03-14 2015-09-17 International Business Machines Corporation Device table in system memory
US9465768B2 (en) * 2014-03-14 2016-10-11 International Business Machines Corporation PCI function measurement block enhancements
US9715449B2 (en) * 2014-03-31 2017-07-25 International Business Machines Corporation Hierarchical translation structures providing separate translations for instruction fetches and data accesses
US9824021B2 (en) 2014-03-31 2017-11-21 International Business Machines Corporation Address translation structures to provide separate translations for instruction fetches and data accesses
US9734083B2 (en) 2014-03-31 2017-08-15 International Business Machines Corporation Separate memory address translations for instruction fetches and data accesses
US10248567B2 (en) 2014-06-16 2019-04-02 Hewlett-Packard Development Company, L.P. Cache coherency for direct memory access operations
US9952980B2 (en) 2015-05-18 2018-04-24 Red Hat Israel, Ltd. Deferring registration for DMA operations
US10055136B2 (en) 2015-07-29 2018-08-21 Red Hat Israel, Ltd. Maintaining guest input/output tables in swappable memory
CN105141429A (zh) * 2015-09-01 2015-12-09 武汉沃思财务外包服务有限公司 用户验证方法、装置和服务器
US10593421B2 (en) * 2015-12-01 2020-03-17 Cnex Labs, Inc. Method and apparatus for logically removing defective pages in non-volatile memory storage device
US10114743B2 (en) * 2016-04-06 2018-10-30 Sandisk Technologies Inc. Memory erase management
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
JP2018041204A (ja) * 2016-09-06 2018-03-15 東芝メモリ株式会社 メモリ装置及び情報処理システム
US10120813B2 (en) * 2017-03-08 2018-11-06 Arm Limited Address translation
JP2018206084A (ja) * 2017-06-05 2018-12-27 株式会社東芝 データベース管理システムおよびデータベース管理方法
US10387325B2 (en) 2017-11-28 2019-08-20 International Business Machines Corporation Dynamic address translation for a virtual machine
KR102651408B1 (ko) * 2018-02-20 2024-03-26 삼성전자주식회사 스토리지 디바이스 및 스토리지 디바이스의 동작 방법
US10997066B2 (en) 2018-02-20 2021-05-04 Samsung Electronics Co., Ltd. Storage devices that support cached physical address verification and methods of operating same
WO2019177608A1 (en) * 2018-03-15 2019-09-19 Hewlett-Packard Development Company, L.P. Address verification for direct memory access requests
RU2714219C1 (ru) 2018-09-14 2020-02-13 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования передачи операций ввода/вывода
RU2731321C2 (ru) 2018-09-14 2020-09-01 Общество С Ограниченной Ответственностью "Яндекс" Способ определения потенциальной неисправности запоминающего устройства
RU2718215C2 (ru) 2018-09-14 2020-03-31 Общество С Ограниченной Ответственностью "Яндекс" Система обработки данных и способ обнаружения затора в системе обработки данных
RU2721235C2 (ru) 2018-10-09 2020-05-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для маршрутизации и выполнения транзакций
RU2714602C1 (ru) 2018-10-09 2020-02-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки данных
RU2711348C1 (ru) 2018-10-15 2020-01-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки запросов в распределенной базе данных
CN112970037B (zh) * 2018-11-06 2024-02-02 创惟科技股份有限公司 用于实施神经网络应用的多芯片系统、适用于多芯片系统的数据处理方法、和非暂时性计算机可读介质
RU2714373C1 (ru) 2018-12-13 2020-02-14 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования выполнения операций ввода/вывода
US11030144B2 (en) * 2018-12-14 2021-06-08 Texas Instruments Incorporated Peripheral component interconnect (PCI) backplane connectivity system on chip (SoC)
RU2749649C2 (ru) 2018-12-21 2021-06-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования обработки операций ввода/вывода
RU2720951C1 (ru) 2018-12-29 2020-05-15 Общество С Ограниченной Ответственностью "Яндекс" Способ и распределенная компьютерная система для обработки данных
RU2746042C1 (ru) 2019-02-06 2021-04-06 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для передачи сообщения
US11204752B1 (en) * 2019-06-11 2021-12-21 American Megatrends International, Llc Intelligent migration of firmware configuration settings
US11860792B2 (en) * 2021-05-04 2024-01-02 Red Hat, Inc. Memory access handling for peripheral component interconnect devices
CN117056157B (zh) * 2023-10-11 2024-01-23 沐曦集成电路(上海)有限公司 一种寄存器层次化验证方法、存储介质和电子设备

Family Cites Families (248)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3976979A (en) 1974-01-02 1976-08-24 Honeywell Information Systems, Inc. Coupler for providing data transfer between host and remote data processing units
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
EP0090804A1 (en) 1981-10-13 1983-10-12 International Business Machines Corporation Method and apparatus for measurements of channel operation
JPS5981724A (ja) 1982-11-02 1984-05-11 Hitachi Electronics Eng Co Ltd Dma制御装置アドレス空間の拡張方法
JPS6273347A (ja) * 1985-09-27 1987-04-04 Hitachi Ltd アドレス変換装置
JPS6279557A (ja) 1985-10-03 1987-04-11 Fujitsu Ltd 直接メモリアクセス方式
US5053952A (en) 1987-06-05 1991-10-01 Wisc Technologies, Inc. Stack-memory-based writable instruction set computer having a single data bus
JPH0250744A (ja) * 1988-08-12 1990-02-20 Nec Corp アドレス変換方式
JPH0282343A (ja) 1988-09-20 1990-03-22 Hitachi Ltd マルチプロセッサシステムの割込処理方式
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
JPH0553973A (ja) 1991-08-28 1993-03-05 Matsushita Electric Ind Co Ltd 情報処理システム
US5465355A (en) 1991-09-04 1995-11-07 International Business Machines Corporation Establishing and restoring paths in a data processing I/O system
JP2664827B2 (ja) 1991-10-07 1997-10-22 日本電信電話株式会社 実時間情報転送制御方法
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
US5418956A (en) * 1992-02-26 1995-05-23 Microsoft Corporation Method and system for avoiding selector loads
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 インターナショナル・ビジネス・マシーンズ・コーポレイション 共用変数の値を更新する方法
WO1994027215A1 (en) 1993-05-07 1994-11-24 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
KR100306636B1 (ko) 1994-06-28 2001-11-30 피터 엔. 데트킨 Pci-isa인터럽트프로토콜컨버터및선택메카니즘
US5748950A (en) 1994-09-20 1998-05-05 Intel Corporation Method and apparatus for providing an optimized compare-and-branch instruction
US5802590A (en) 1994-12-13 1998-09-01 Microsoft Corporation Method and system for providing secure access to computer resources
US5901312A (en) 1994-12-13 1999-05-04 Microsoft Corporation Providing application programs with unmediated access to a contested hardware resource
WO1996023260A1 (de) * 1995-01-27 1996-08-01 Gmd - Forschungszentrum Informationstechnik Gmbh Verfahren zum betreiben einer adressumsetzvorrichtung
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
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
US6507898B1 (en) 1997-04-30 2003-01-14 Canon Kabushiki Kaisha Reconfigurable data cache controller
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
JP2000293476A (ja) 1999-04-09 2000-10-20 Nec Corp Pciデバイスへのリソース割当方式及びその方法
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
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
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
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
US6938138B2 (en) * 2001-01-11 2005-08-30 International Business Machines Corporation Method and apparatus for managing access to memory
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
US20040049603A1 (en) 2002-09-05 2004-03-11 International Business Machines Corporation iSCSI driver to adapter interface protocol
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
KR100449807B1 (ko) 2002-12-20 2004-09-22 한국전자통신연구원 호스트 버스 인터페이스를 갖는 데이터 전송 프로토콜제어 시스템
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
JP4256693B2 (ja) 2003-02-18 2009-04-22 株式会社日立製作所 計算機システム、i/oデバイス及びi/oデバイスの仮想共有方法
JP2004248985A (ja) 2003-02-21 2004-09-09 Air Water Inc 注射器およびそれに用いるパッキン
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
US7010633B2 (en) 2003-04-10 2006-03-07 International Business Machines Corporation Apparatus, system and method for controlling access to facilities based on usage classes
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
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
US7130949B2 (en) 2003-05-12 2006-10-31 International Business Machines Corporation Managing input/output interruptions in non-dedicated interruption hardware environments
US7174550B2 (en) 2003-05-12 2007-02-06 International Business Machines Corporation Sharing communications adapters across a plurality of input/output subsystem images
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
US7000036B2 (en) 2003-05-12 2006-02-14 International Business Machines Corporation Extended input/output measurement facilities
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
US8417852B2 (en) 2003-06-05 2013-04-09 Nvidia Corporation Uploading TCP frame data to user buffers and buffers in system memory
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
JP2005122640A (ja) 2003-10-20 2005-05-12 Hitachi Ltd サーバシステム及びi/oスロット共有方法。
US7552436B2 (en) 2003-11-25 2009-06-23 International Business Machines Memory mapped input/output virtualization
US7146482B2 (en) 2003-11-25 2006-12-05 International Business Machines Corporation Memory mapped input/output emulation
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
JP2005309553A (ja) 2004-04-19 2005-11-04 Hitachi Ltd 計算機
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
US7941799B2 (en) 2004-05-27 2011-05-10 International Business Machines Corporation Interpreting I/O operation requests from pageable guests without host intervention
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
JP4788124B2 (ja) 2004-09-16 2011-10-05 株式会社日立製作所 データ処理システム
TWI252397B (en) 2004-09-17 2006-04-01 Ind Tech Res Inst Method and apparatus of built-in self-diagnosis and repair in a memory with syndrome identification
US7334107B2 (en) 2004-09-30 2008-02-19 Intel Corporation Caching support for direct memory access address translation
US7340582B2 (en) 2004-09-30 2008-03-04 Intel Corporation Fault processing 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
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
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
US7562366B2 (en) 2005-02-03 2009-07-14 Solarflare Communications, Inc. Transmit completion event batching
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
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
US7260664B2 (en) 2005-02-25 2007-08-21 International Business Machines Corporation Interrupt mechanism on an IO 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
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
US7200704B2 (en) 2005-04-07 2007-04-03 International Business Machines Corporation Virtualization of an I/O adapter port using enablement and activation functions
US7260663B2 (en) 2005-04-07 2007-08-21 International Business Machines Corporation System and method for presenting interrupts
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
US7657662B2 (en) 2005-08-31 2010-02-02 International Business Machines Corporation Processing user space operations directly between an application instance and an I/O adapter
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
JP5100996B2 (ja) 2005-10-13 2012-12-19 ヤマシンフィルタ株式会社 濾過装置
US7882489B2 (en) 2005-11-22 2011-02-01 International Business Machines Corporation Integrated code generation for adapter-specific property template
US20070136554A1 (en) 2005-12-12 2007-06-14 Giora Biran Memory operations in a virtualized system
US7475183B2 (en) 2005-12-12 2009-01-06 Microsoft Corporation Large page optimizations in a virtual machine environment
US7398343B1 (en) 2006-01-03 2008-07-08 Emc Corporation Interrupt processing system
US7548999B2 (en) 2006-01-17 2009-06-16 Advanced Micro Devices, Inc. Chained hybrid input/output memory management unit
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
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)
US7571307B2 (en) 2006-07-26 2009-08-04 International Business Machines Corporation Capacity upgrade on-demand for I/O adapters
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
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
US7984454B2 (en) 2006-12-19 2011-07-19 International Business Machines Corporation Migration of single root stateless virtual functions
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
US7617340B2 (en) 2007-01-09 2009-11-10 International Business Machines Corporation I/O adapter LPAR isolation with assigned memory space
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
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
JP5018252B2 (ja) 2007-06-06 2012-09-05 株式会社日立製作所 デバイス割り当て変更方法
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
US8250254B2 (en) * 2007-07-31 2012-08-21 Intel Corporation Offloading input/output (I/O) virtualization operations to a processor
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
US7689734B2 (en) 2007-12-18 2010-03-30 International Business Machines Corporation Method for toggling non-adjacent channel identifiers during DMA double buffering operations
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
US8677098B2 (en) * 2008-01-11 2014-03-18 International Business Machines Corporation Dynamic address translation with fetch protection
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
JP2009249108A (ja) 2008-04-04 2009-10-29 Mitsubishi Electric Building Techno Service Co Ltd エレベーター押ボタン一体型位置表示器
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
CN101634975B (zh) 2009-08-20 2011-09-14 广东威创视讯科技股份有限公司 一种实现dma数据传输的方法及装置
JP5266590B2 (ja) 2009-09-18 2013-08-21 株式会社日立製作所 計算機システムの管理方法、計算機システム及びプログラム
US8850166B2 (en) 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US20110314263A1 (en) 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
US8914619B2 (en) 2010-06-22 2014-12-16 International Business Machines Corporation High-word facility for extending the number of general purpose registers available to instructions
US8683108B2 (en) 2010-06-23 2014-03-25 International Business Machines Corporation Connected input/output hub management
US8745292B2 (en) 2010-06-23 2014-06-03 International Business Machines Corporation System and method for routing I/O expansion requests and responses in a PCIE architecture
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
US8645606B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Upbound input/output expansion request and response processing in a PCIe architecture
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8639858B2 (en) 2010-06-23 2014-01-28 International Business Machines Corporation Resizing address spaces concurrent to accessing the address spaces
US8504754B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Identification of types of sources of adapter interruptions
US8478922B2 (en) 2010-06-23 2013-07-02 International Business Machines Corporation Controlling a rate at which adapter interruption requests are processed
US8417911B2 (en) 2010-06-23 2013-04-09 International Business Machines Corporation Associating input/output device requests with memory associated with a logical partition
US8566480B2 (en) 2010-06-23 2013-10-22 International Business Machines Corporation Load instruction for communicating with adapters
US8677180B2 (en) 2010-06-23 2014-03-18 International Business Machines Corporation Switch failover control in a multiprocessor computer system
US8549182B2 (en) 2010-06-23 2013-10-01 International Business Machines Corporation Store/store block instructions for communicating with adapters
US8656228B2 (en) 2010-06-23 2014-02-18 International Business Machines Corporation Memory error isolation and recovery in a multiprocessor computer system
US8650335B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Measurement facility for adapter functions
US9213661B2 (en) 2010-06-23 2015-12-15 International Business Machines Corporation Enable/disable adapters of a computing environment
US8918573B2 (en) 2010-06-23 2014-12-23 International Business Machines Corporation Input/output (I/O) expansion response processing in a peripheral component interconnect express (PCIe) environment
US9195623B2 (en) 2010-06-23 2015-11-24 International Business Machines Corporation Multiple address spaces per adapter with address translation
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US9342352B2 (en) 2010-06-23 2016-05-17 International Business Machines Corporation Guest access to address spaces of adapter
US8510599B2 (en) 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8650337B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US8615622B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Non-standard I/O adapters in a standardized I/O architecture
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8626970B2 (en) 2010-06-23 2014-01-07 International Business Machines Corporation Controlling access by a configuration to an adapter function
US8645767B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Scalable I/O adapter function level error detection, isolation, and reporting
US8621112B2 (en) 2010-06-23 2013-12-31 International Business Machines Corporation Discovery by operating system of information relating to adapter functions accessible to the operating system
US8505032B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Operating system notification of actions to be taken responsive to adapter events
US9851969B2 (en) 2010-06-24 2017-12-26 International Business Machines Corporation Function virtualization facility for function query of a processor

Also Published As

Publication number Publication date
US20140129796A1 (en) 2014-05-08
CA2800636C (en) 2018-03-13
ES2428822T3 (es) 2013-11-11
AU2010355813A1 (en) 2012-12-20
US20130067194A1 (en) 2013-03-14
JP2013537658A (ja) 2013-10-03
PL2430555T3 (pl) 2013-11-29
RU2012147515A (ru) 2014-05-20
ZA201209649B (en) 2014-05-28
US20110320758A1 (en) 2011-12-29
BR112012033815A2 (pt) 2018-04-17
DK2430555T3 (da) 2013-09-30
US8635430B2 (en) 2014-01-21
PT2430555E (pt) 2013-10-03
CN102906719A (zh) 2013-01-30
RU2547705C2 (ru) 2015-04-10
WO2011160722A1 (en) 2011-12-29
KR101455544B1 (ko) 2014-10-27
CA2800636A1 (en) 2011-12-29
EP2430555A1 (en) 2012-03-21
HRP20130820T1 (en) 2013-10-11
KR20130048762A (ko) 2013-05-10
JP5636097B2 (ja) 2014-12-03
SG186098A1 (en) 2013-01-30
HK1180793A1 (en) 2013-10-25
US9626298B2 (en) 2017-04-18
CN102906719B (zh) 2015-07-08
MX2012014859A (es) 2013-02-01
AU2010355813B2 (en) 2014-05-22
US8631222B2 (en) 2014-01-14
SI2430555T1 (sl) 2013-10-30
EP2430555B1 (en) 2013-08-28

Similar Documents

Publication Publication Date Title
BR112012033815B1 (pt) tradução de endereços de entrada/saída para endereços de memória
AU2010355800B2 (en) Runtime determination of translation formats for adapter functions
JP5607825B2 (ja) コンピューティング環境のシステム・メモリの管理を容易にする方法、システム、コンピュータ・プログラム
JP5629373B2 (ja) コンピューティング環境においてアダプタへのアクセスを制御する方法、プログラム、および、コンピュータ・システム
BR112012033821B1 (pt) método de gerenciamento de requisições de interrupção em um ambiente computacional
BR112012033279B1 (pt) método para fornecer interrupções aos convidados de um ambiente de computação e sistema
EP2430557A1 (en) Resizing address spaces concurrent to accessing the address spaces
BR112012033818B1 (pt) método para execução dentro de um circuito de processamento e sistema de computador para executar uma instrução
JP2013534666A (ja) アダプタのアドレス・スペースへのゲスト・アクセスのための方法、システム、およびコンピュータ・プログラム
BR112012032857B1 (pt) método e equipamento para carregar dados de um adaptador
AU2010355805A1 (en) Enable/disable adapters of a computing environment

Legal Events

Date Code Title Description
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 08/11/2010, OBSERVADAS AS CONDICOES LEGAIS.