BR112012032854B1 - método e equipamento para controle de acesso a adaptadores num ambiente computacional - Google Patents

método e equipamento para controle de acesso a adaptadores num ambiente computacional Download PDF

Info

Publication number
BR112012032854B1
BR112012032854B1 BR112012032854-9A BR112012032854A BR112012032854B1 BR 112012032854 B1 BR112012032854 B1 BR 112012032854B1 BR 112012032854 A BR112012032854 A BR 112012032854A BR 112012032854 B1 BR112012032854 B1 BR 112012032854B1
Authority
BR
Brazil
Prior art keywords
adapter
access
function
instruction
configuration
Prior art date
Application number
BR112012032854-9A
Other languages
English (en)
Other versions
BR112012032854A2 (pt
Inventor
Craddock David
Mark Farrell
Thomas Gregg
Beth Glendening
Greiner Dan
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 BR112012032854A2 publication Critical patent/BR112012032854A2/pt
Publication of BR112012032854B1 publication Critical patent/BR112012032854B1/pt

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication
    • G06F21/33User authentication using certificates
    • G06F21/335User authentication using certificates for accessing specific resources, e.g. using Kerberos tickets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/82Protecting input, output or interconnection devices
    • G06F21/85Protecting input, output or interconnection devices interconnection devices, e.g. bus-connected or in-line devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2141Access rights, e.g. capability lists, access control lists, access tables, access matrices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Databases & Information Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)

Abstract

MÉTODO, EQUIPAMENTO, PROGRAMA DE COMPUTADOR E PRODUTO DE PROGRAMA DE COMPUTADOR PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL O acesso a um adaptador de entrada/saída por configuração é controlado. Para cada acesso solicitado ao adaptador, são feitas verificações para determinar se a configuração está autoriza-da a acessar o adaptador. Se não estiver autorizada, então o acesso é negado. Se estiver autorizada, mas o acesso estiver temporariamente bloqueado, a instrução de execução é alterada para indicar isso. Se o acesso for permitido, mas o acesso deva ser bloqueado por outra razão (diferente do bloqueio temporário), 10 então o acesso é negado.

Description

ANTECEDENTES DA INVENÇÃO
[001] Esta invenção se relaciona, de forma geral, ao processamento de entrada/saída (E/S) e, em particular, ao controle de acesso para adaptadores de entrada/saída de um ambiente computacional.
[002] Muitas arquiteturas de sistema usam controle de acesso de adaptadores de entrada/saída para esses adaptadores utilizando mecanismos de tradução de endereço baseados na unidade de processamento central (CPU). Em tais sistemas, é utilizada a entrada/saída mapeada na memória (MMIO), e o hardware sabe, com base no modo em que a memória está configurada, se uma instrução executada por um processador está apontando para a memória real ou se está, na verdade, apontando para a memória em um dos adaptadores. O hardware então é capaz de direcionar-se de acordo.
[003] Alguns sistemas, contudo, podem não utilizar a E/S mapeada na memória.
[004] A Patente dos EUA N° 7.617.340, emitida em 10 de novembro de 2009, de Thomas A. Gregg, “I/O Adapter LPAR Isolation with Assigned Memory Space”, (Isolamento de Adaptador de Partição Lógica E/S com Espaço de Memória Atribuído), descreve um sistema de processamento de dados e um método de isolamento de uma pluralidade de adaptadores E/S no sistema. O sistema de processamento de dados também compreende um conjunto de processadores em comunicação com os adaptadores E/S utilizando um protocolo PCIe. Cada um dos adaptadores E/S possui a respectiva ID (identidade). Numa concretização preferencial os comandos emitidos pelos adaptadores E/S incluem um campo de ID do Solicitante definido, incluindo uma ou mais IDs de Solicitante dos Adaptadores E/S. As IDs dos Solicitantes podem ser usadas como uma entrada para uma CAM que fornece um índice para TVT para identificar um espaço único e independente de memória do sistema para o adaptador E/S.
[005] A Patente dos EUA N° 7.530.071, emitida em 5 de maio de 2009, de Billau et al., “Facilitating Access to Input/Output Resources Via an I/O Partition Shared by Multiple Consumer Partitions” (Facilitando o Acesso a Recursos de Entrada/Saída Via uma Partição de E/S Compartilhada por Partições de Múltiplos Consumidores), descreve pelo menos uma partição firmware de entrada/saída (E/S) fornecida num ambiente particionado para facilitar o acesso a recursos de E/S de propriedade de pelo menos uma partição firmware de E/S, Os recursos E/S de uma partição de firmware E/S são compartilhados por uma ou mais partições diferentes do ambiente, referidas como partições de consumidor. As partições de consumidor usam a partição de firmware para acessar os recursos de E/S. Uma vez que as partições de E/S do firmware são responsáveis por fornecer acesso aos recursos de E/S de propriedade dessas partições, as partições de consumidor são liberadas desta tarefa, reduzindo a complexidade e os custos nas partições do consumidor.
[006] Publicação (de pedido de patente) dos EUA N° 2009/0240849 A1, publicada em 24 de setembro de 2009, de Corneli et al., “System and Method for Distributing Virtual Input/Output Operations Across Multiple Logical Partitions” (Sistema e Método para Distribuição de Operações Virtuais de Entrada/Saída Através de Múltiplas Partições Lógicas), descreve a Ferramenta Virtual de E/S Distribuída que substitui as LPARs dedicadas do servidor VIO mediante a distribuição das funções virtuais de E/S através de vários aplicativos LPARs conectados por um canal de comunicação de alta velocidade. Os dispositivos físicos de E/S são distribuídos através das LPARs disponíveis. A Ferramenta Virtual de E/S Distribuída atribui cada solicitação de E/S a um dispositivo de E/S apropriado. A Ferramenta Virtual de E/S Distribuída monitora cada solicitação de E/S e reatribui dispositivos de E/S quando o desempenho cai num dispositivo específico ou quando um dispositivo não está mais disponível.
BREVE SUMÁRIO
[007] De acordo com um aspecto da presente invenção, o acesso aos adaptadores de E/S é controlado de forma que somente uma configuração autorizada possa acessar um dado adaptador de E/S (e.g., função de adaptador). Num exemplo, ele é controlado naqueles ambientes computacionais que não estão utilizando E/S mapeada na memória.
[008] As deficiências da técnica anterior são superadas e são conseguidas vantagens mediante o fornecimento de um produto programa de computador para controlar o acesso para adaptadores de um ambiente computacional. O produto programa de computador inclui uma mídia de armazenamento de leitura por computador, legível por um circuito de processamento e instruções de armazenamento para execução pelo circuito de processamento para realizar um método. O método inclui, por exemplo, a execução de uma instrução incluindo uma solicitação por uma configuração para acessar um adaptador, sendo o adaptador identificado por um identificador de função alimentado com a solicitação, tal execução incluindo a utilização, pelo processador, o identificador de função para obter uma entrada da tabela de função para o adaptador, entrada de tabela de função que inclui as informações associadas ao adaptador; verificação, baseada nas informações na entrada da tabela de função, se é permitido o acesso da configuração ao adaptador; e permissão de acesso ao adaptador em resposta à determinação de que é permitido à configuração o acesso ao adaptador.
[009] Métodos e sistemas relativos a um ou mais aspectos da presente invenção são também descritos e reivindicados neste documento.
[010] Recursos e vantagens adicionais são alcançados através das técnicas da presente invenção. Outras concretizações e outros aspectos da invenção são descritos em detalhe neste documento e são considerados parte da invenção reivindicada.
BREVE SUMÁRIO DAS VÁRIAS VISÕES DOS DESENHOS
[011] Um ou mais aspectos da presente invenção estão destacados e reivindicados claramente de forma particular como exemplos nas reivindicações na conclusão da especificação. O precedente e outros objetos, recursos e vantagens da invenção estão evidentes na descrição detalhada a seguir, tomada em conjunto com os desenhos anexos nos quais:
[012] A FIG. 1A retrata uma concretização de um ambiente computacional para incorporar e utilizar um ou mais aspectos da presente invenção;
[013] A FIG. 1B retrata uma outra concretização de um ambiente computacional para incorporar e utilizar um ou mais aspectos da presente invenção;
[014] A FIG. 1C retrata um exemplo de um ambiente computacional no qual cada função de adaptador dentre uma pluralidade de funções de adaptador possui a ela associada uma entrada de tabela de função, de acordo com um aspecto da presente invenção;
[015] A FIG. 2A retrata uma concretização de uma entrada de tabela de função utilizada de acordo com um aspecto da presente invenção;
[016] A FIG. 2B retrata uma concretização de um identificador de função utilizado para localizar uma entrada da tabela de função, de acordo com um aspecto da presente invenção;
[017] A FIG. 3A retrata um exemplo de sistema operacional executando uma instrução de carga PCI para acessar uma função PCI particular, de acordo com um aspecto da presente invenção;
[018] A FIG. 3B retrata um exemplo de sistema operacional emitindo uma instrução de armazenamento PCI contra uma função PCI particular, de acordo com um aspecto da presente invenção;
[019] A FIG. 4 retrata uma concretização da lógica para controlar o acesso a uma função de adaptador particular pelo sistema operacional, de acordo com um aspecto da presente invenção;
[020] A FIG. 5A retrata uma concretização de uma instrução Call de Processador Lógico utilizada de acordo com um aspecto da presente invenção;
[021] A FIG. 5B retrata uma concretização de um bloco de solicitação utilizado pela instrução Call do Processador Lógico da FIG. A, de acordo com um aspecto da presente invenção;
[022] A FIG. 5C retrata uma concretização de um bloco de resposta fornecido pela instrução Call do Processador Lógico da FIG. 5A, de acordo com um aspecto da presente invenção;
[023] A FIG. 6 retrata uma concretização da lógica para ativar a função PCI, de acordo com um aspecto da presente invenção;
[024] A FIG. 7A retrata uma concretização da instrução Modificar Controles de Função PCI utilizada de acordo com um aspecto da presente invenção;
[025] A FIG. 7B retrata uma concretização de um campo utilização pela instrução Modificar Controles de Função PCI da FIG. 7A, de acordo com um aspecto da presente invenção;
[026] A FIG. 7C retrata uma concretização de um outro campo utilizado pela instrução Modificar Controles de Função PCI da FIG. 7A, de acordo com um aspecto da presente invenção;
[027] A FIG. 7D retrata uma concretização dos conteúdos de um bloco de informações de função (FIB) utilizados de acordo com um aspecto da presente invenção;
[028] A FIG. 8 retrata uma concretização da visão geral da lógica da instrução Modificar Controles de Função PCI, de acordo com um aspecto da presente invenção;
[029] A FIG. 9A retrata uma concretização de uma instrução de Carga PCI utilizada de acordo com um aspecto da presente invenção;
[030] A FIG. 9B retrata uma concretização de um campo utilizado pela instrução de Carga PCI da FIG. 9A, de acordo com um aspecto da presente invenção;
[031] A FIG. 9C retrata uma concretização de um outro campo utilizado pela instrução de Carga PCI da FIG. 9A, de acordo com um aspecto da presente invenção;
[032] As FIGs. 10A-10B retratam uma concretização da lógica para executar uma operação de Carga PCI, de acordo com um aspecto da presente invenção;
[033] A FIG. 11A retrata uma concretização de uma instrução de Armazenamento PCI utilizada de acordo com um aspecto da presente invenção;
[034] A FIG. 11B retrata uma concretização de um campo utilizado pela instrução de Armazenamento PCI da FIG. 11A, de acordo com um aspecto da presente invenção;
[035] A FIG. 11C retrata uma concretização de um outro campo utilizado pela instrução de Armazenamento PCI da FIG. 11A, de acordo com um aspecto da presente invenção;
[036] As FIGs. 12A-12B retratam uma concretização da lógica para executar uma operação de Armazenamento PCI, de acordo com um aspecto da presente invenção;
[037] A FIG. 13A retrata uma concretização de uma instrução de Bloco de Armazenamento PCI utilizada de acordo com um aspecto da presente invenção;
[038] A FIG. 13B retrata uma concretização de um campo utilizado pela instrução de Bloco de Armazenamento PCI da FIG. 13A, de acordo com um aspecto da presente invenção;
[039] A FIG. 13C retrata uma concretização de um outro campo utilizado pela instrução de Bloco de Armazenamento PCI da FIG. 13A, de acordo com um aspecto da presente invenção;
[040] A FIG. 13D retrata uma concretização de ainda um outro campo utilizado pela instrução de Bloco de Armazenamento PCI da FIG. 13A, de acordo com um aspecto da presente invenção;
[041] As FIGs. 14A-14B retratam uma concretização da lógica para executar uma operação de Bloco de Armazenamento PCI, de acordo com um aspecto da presente invenção;
[042] A FIG. 15 retrata uma concretização de um produto programa de computador incorporando um ou mais aspectos da presente invenção;
[043] A FIG. 16 retrata uma concretização de um sistema de computador hospedeiro para incorporar e utilizar um ou mais aspectos da presente invenção;
[044] A FIG. 17 retrata mais um exemplo de um sistema de computador para incorporar e utilizar um ou mais aspectos da presente invenção;
[045] A FIG. 18 retrata um outro exemplo de um sistema de computador compreendendo uma rede de computadores para incorporar e utilizar um ou mais aspectos da presente invenção;
[046] A FIG. 19 retrata uma concretização de vários elementos de um sistema de computador para incorporar e utilizar um ou mais aspectos da presente invenção;
[047] A FIG. 20A retrata uma concretização da unidade de execução do sistema de computador da FIG. 19 para incorporar e utilizar um ou mais aspectos da presente invenção;
[048] A FIG. 20B retrata uma concretização da unidade de desvio do sistema de computador da FIG. 19 para incorporar e utilizar um ou mais aspectos da presente invenção;
[049] A FIG. 20C retrata uma concretização da unidade de carga/armazenamento do sistema de computador da FIG. 19 para incorporar e utilizar um ou mais aspectos da presente invenção; e
[050] A FIG. 21 retrata uma concretização de um sistema de computador hospedeiro emulado para incorporar e utilizar um ou mais aspectos da presente invenção.
DESCRIÇÃO DETALHADA
[051] De acordo com um aspecto da presente invenção, o acesso a um adaptador por uma configuração é controlado. Em particular, é fornecida uma capacidade de controlar o acesso de forma que somente uma configuração autorizada possa acessar um dado adaptador, tal como uma função de adaptador informada (e.g., uma função PCI). A configuração é, por exemplo, um sistema operacional, um processador, uma partição lógica, um sistema operacional sendo executado numa partição lógica, um convidado paginável em modo armazenamento (e.g., um sistema operacional convidado), etc. O termo sistema operacional, conforme utilizado neste documento, inclui drivers de dispositivo.
[052] Num exemplo na z/Architecture®, um convidado paginável é executado interpretativamente por meio da instrução Execução Interpretativa Inicial (SIE), no nível 2 de interpretação. Por exemplo, o hipervisor de partição lógica (LPAR) executa a instrução SIE para iniciar a partição lógica na memória física, fixa. Se o z/VM® for o sistema operacional nessa partição lógica, ele emite a instrução SIE para executar suas máquinas convidadas (virtuais) no seu armazenamento V=V (virtual). Portanto o hipervisor LPAR usa o nível SIE 1, e o hipervisor z/VM® usa o nível SIE 2.
[053] Além disso, conforme utilizado aqui, o termo adaptador inclui qualquer tipo de adaptador (e.g., adaptador de armazenamento, adaptador de processamento, adaptador de rede de trabalho, adaptador criptográfico adaptador PCI, outros tipos de adaptadores de entrada/saída, etc.). Numa concretização, um adaptador inclui uma função de adaptador. Entretanto, em outras concretizações, um adaptador pode incluir uma pluralidade de funções de adaptador. Um ou mais aspectos da presente invenção são aplicáveis quer o adaptador inclua uma função adaptador ou uma pluralidade de funções de adaptador. Numa concretização, caso o adaptador inclua uma pluralidade de funções de adaptador, então a capacidade de controle aqui mencionada se aplica a cada função de adaptador, de acordo com um aspecto da presente invenção. Nos exemplos aqui apresentados, o adaptador é utilizado intercambiavelmente com função adaptador (e.g., função PCI) salvo observação em contrário.
[054] Ademais, o termo firmware, utilizado mais adiante, inclui, e.g., o microcódigo, milicódigo ou o macrocódigo do processador. Inclui, por exemplo, as instruções em nível de hardware e/ou as estruturas de dados utilizadas na implementação de código de máquina de nível mais alto. Numa concretização, inclui, por exemplo, o código proprietário que é tipicamente fornecido como microcódigo que inclui softwares confiáveis ou microcódigos específicos ao hardware básico e controla o acesso ao sistema operacional ao hardware do sistema.
[055] Uma concretização de um ambiente computacional para incorporar ou utilizar um ou mais aspectos da presente invenção está descrita com referência à FIG. 1A. Num exemplo, um ambiente computacional 100 é um servidor de Sistema z® fornecido pela International Business Machines Corporation. O Sistema z® é baseado na z/Architecture® fornecida pela International Business Machines Corporation. Os detalhes referentes à z/Architecture® estão descritos numa publicação da IBM® intitulada “z/Architecture Principles of Operation” (Princípios de Operação da z- Architecture), publicação da IBM N° SA22-7832-07, fevereiro de 2009. A IBM®, o Sistema z® e a z/Architecture® são marcas registradas da International Business Machines Corporation, de Armonk, Nova York. Outros nomes aqui utilizados podem ser marcas registradas ou nomes de produtos da International Business Machines Corporation ou de outras empresas.
[056] Num exemplo, o ambiente computacional 100 inclui uma ou mais unidades de processamento central (CPUs) 102 acopladas a um sistema de memória 104 (também chamado memória principal) através de um controlador de memória 106. Para acessar a memória de sistema 104, a unidade de processamento central 102 emite uma solicitação escrita ou de leitura que inclui um endereço utilizado para acessar a memória do sistema. O endereço incluído na solicitação é tipicamente não utilizável diretamente para acessar a memória do sistema, e portanto, é traduzido para um endereço diretamente utilizável para acessar a memória do 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, utilizando-se, por exemplo, tradução dinâmica de endereços (DAT).
[057] A solicitação, inclusive o endereço (traduzido, se necessário), é recebida pelo controlador de memória 106. Num exemplo, o controlador de memória 106 se compõe de hardware e é utilizado para mediar o acesso à memória do sistema e para manter a consistência da memória. Essa mediação é realizada para as solicitações recebidas das CPUs 102, bem como para as solicitações recebidas de um ou mais adaptadores 110. Similarmente às unidades de processamento central, os adaptadores emitem solicitações à memória do sistema 104 para obter acesso à memória do sistema.
[058] Num exemplo, o adaptador 110 é um adaptador Interconexão de Componentes Periféricos (PCI) ou Interconexão de Componentes Periféricos Expressa (PCIe) que inclui uma ou mais funções PCI. A função PCI emite uma solicitação que é encaminhada para um hub de entrada/saída 112 (e.g., um hub PCI) por um ou mais switches (e.g., switches PCIe) 114. Num exemplo, o hub de entrada/saída se compõe de hardware, inclusive uma ou mais máquinas de estado, e está acoplado ao controlador de memória 106 através de um barramento para memória E/S 120.
[059] O hub de entrada/saída inclui, por exemplo, um complexo raiz 116 que recebe a solicitação de um switch. A solicitação inclui um endereço de entrada/saída que é fornecido a uma unidade de tradução e proteção de endereço 118 que acessa as informações usadas para a solicitação. Como exemplos, a solicitação pode incluir um endereço de entrada/saída utilizado para realizar uma operação de acesso direto à memória (DMA) ou para solicitar Interrupção Sinalizada por Mensagens (MSI). A unidade de tradução e proteção de endereço 118 acessa as informações utilizadas para a solicitação DMA ou MSI. Como um exemplo particular, para uma operação DMA, as informações podem ser obtidas para traduzir o endereço. O endereço traduzido é então encaminhado ao controlador de memória para acessar a memória do sistema.
[060] Num exemplo, a informação utilizada para a solicitação DMA ou MSI emitida por um adaptador é obtida de uma entrada de tabela de dispositivo de uma tabela de dispositivo localizada no hub E/S (e.g., na unidade de tradução e proteção do endereço). A entrada da tabela de dispositivo inclui informações para o adaptador, e cada adaptador possui pelo menos uma entrada de tabela de dispositivo associada a ele. Por exemplo, existe uma entrada da tabela de dispositivo por espaço de endereçamento atribuído ao adaptador. Para uma solicitação emitida de um adaptador uma entrada da tabela de dispositivo é alocada utilizando uma ID solicitante fornecida na solicitação.
[061] Numa concretização adicional de um ambiente computacional, além, ou em vez, de uma ou mais CPUS 102, é acoplado um complexo de processamento central ao controlador de memória 106, conforme mostrado na FIG. 1B. Neste modelo, um complexo de processamento central 150 inclui, por exemplo, uma ou mais partições ou zonas 152 (e.g., partições lógicas LP1 - LPn), um ou mais processadores centrais (e.g., CP1-CPn) 154, e um hipervisor 156 (e.g., um gerenciador de partição lógica), cada um deles descrito abaixo.
[062] Cada partição lógica 152 é capaz de funcionar como um sistema separado, isto é, cada partição lógica pode ser zerada de forma independente, carregada inicialmente com um sistema operacional ou um hipervisor (como o z/VM®, fornecido pela International Business Machines Corporation, Armonk, Nova York), se desejado, e operar com programas diferentes. Um sistema operacional, um hipervisor, ou um programa aplicativo rodando numa partição lógica parece ter acesso a um sistema integral e completo, mas apenas uma parte dele está disponível. A combinação de hardware e Código Interno Licenciado (também chamado de microcódigo ou milicódigo) impede que um programa numa partição lógica interferira com o programa numa partição lógica diferente. Isso permite que várias partições lógicas diferentes operem em processador físico único ou múltiplo em modo fração de tempo. Neste exemplo particular, cada partição lógica possui um sistema operacional residente 158, que pode diferir para uma ou mais partições lógicas. Numa concretização, o sistema operacional 158 é o z/OS® ou o sistema operacional zLinus, oferecido pela International Business Machines Corporation, Armonk, Nova York. z/OS® e z/VM® são marcas registradas da International Business Machines Corporation, Armonk, Nova York.
[063] Os processadores centrais 154 são recursos físicos processadores que são alocados às partições lógicas. Por exemplo, uma partição lógica 152 inclui um ou mais processadores lógicos, cada qual representando o todo de uma parte do recurso físico processador 154 alocado à partição. O recurso processador fundamental tanto pode ser dedicado àquela partição ou compartilhado com outra partição.
[064] As partições lógicas 152 são gerenciadas por um hipervisor 156 implementado por firmware rodando nos processadores 154. Tanto as partições lógicas 152 como o hipervisor 156 compreendem um ou mais programas residentes na respectiva parte da central de armazenamento associada com os processadores centrais. Um exemplo do hipervisor 156 é o Processor Resource/Systems Manager (PR/SM) da International Business Machines Corporation, Armonk, Nova York.
[065] Embora, neste exemplo, seja descrito um complexo de processamento central com partições lógicas, um ou mais aspectos da presente invenção podem ser incorporados e utilizados em quaisquer outras unidades processadoras, incluindo unidades de processamento de processador único ou multiprocessadoras que não sejam particionadas, dentre outras. O complexo de processamento central aqui descrito é somente um exemplo.
[066] Conforme descrito acima, um adaptador pode incluir uma ou mais funções de adaptador. Mais detalhes relativos às funções do adaptador estão descritos com referência à FIG. 1C. Conforme mostrado na FIG. 1C, cada função do adaptador 180 está acoplada a um hub E/S 112 por meio de um ou mais switches PCI 114. O hub E/S está acoplado às partições lógicas 152 por meio do barramento para memória E/S 120. Neste exemplo, o controlador de memória não é mostrado, mas pode ser utilizado. O hub E/S pode ser acoplado às partições lógicas diretamente ou por meio de um controlador de memória.
[067] Cada função do adaptador 180 possui uma entrada de tabela de função 182 a ela associada que inclui informações relativas a sua função de adaptador associada. Por exemplo, como mostrado na FIG. 2A, a entrada da tabela de função 182 possui uma pluralidade de campos incluindo, por exemplo:
[068] Número de Zona 202: Este campo inclui um valor que é utilizado num ambiente de partição lógica para designar uma zona ou partição lógica. O valor deste campo indica qual zona (e.g., sistema operacional dentro da zona) possui ou tem acesso à função do adaptador associado a essa entrada da tabela de função.
[069] Numa concretização adicional, o numero de zona pode ser utilizado para identificar a configuração independentemente de ser um ambiente de partição lógica. Por exemplo, pode ser um identificador de sistema operacional ou um identificador de outra configuração.
[070] Identificador de Convidado 204: Este campo é utilizado quando o sistema está em modo de armazenamento paginável para identificar um convidado que tem permissão para acessar essa função de adaptador;
[071] Indicador de Status 206: Este fornece uma indicação se a própria entrada da tabela de função é válida, se a função está ativada, e/ou se a função está em estado de erro, etc.;
[072] Tipo de Função 208: Este fornece uma indicação do tipo da função do adaptador (e.g., uma função por adaptador; múltiplas funções por adaptador, etc.);
[073] ID do Solicitante (RID) 210: Este é um identificador da função adaptador e pode incluir, por exemplo, um número de barramento, número de dispositivo e número de função. Este campo é utilizado, por exemplo, para acessos do espaço de configuração da função adaptador.
[074] Conforme mostrado na FIG. 3A, a função adaptador inclui armazenamento 300, que possui uma pluralidade de espaços de endereçamento, incluindo, por exemplo: um espaço de configuração (e.g., espaço de configuração PCI para uma função PCI); um espaço E/S (e.g., espaço PCI E/S); e um ou mais espaços de memória (e.g., espaço de memória PCI).
[075] O espaço de configuração pode ser acessado mediante a especificação do espaço de configuração numa instrução emitida pela configuração à função adaptador. Também especificados na instrução estão um deslocamento no espaço de configuração e um identificador de função utilizado para localizar a entrada da tabela de função apropriada que inclua o RID. O firmware recebe a instrução e determina que ela é para o espaço de configuração. Portanto, ele utiliza o RID para gerar uma solicitação para o hub E/S, e o hub E/S cria uma solicitação para acessar o adaptador. A localização do adaptador é baseada no RID, e o deslocamento especifica um desvio no espaço de configuração do adaptador. Por exemplo, o deslocamento especifica um número de registro no espaço de configuração.
[076] Registro de Endereço Base (1 a n) 212: Pode haver um ou mais registros de endereço base e cada um é utilizado para indicar o endereço base de um espaço de endereçamento E/S ou um espaço de memória dentro da função adaptador. É utilizado para acessos ao espaço de memória e/ou espaço E/S da função adaptador.
[077] Por exemplo, o deslocamento fornecido numa instrução para acessar a função adaptador é adicionado ao valor no registro de endereço base associado ao espaço de endereçamento designado na instrução para obter o endereço a ser utilizado para acessar a função adaptador. O identificador do endereço fornecido na instrução identifica o espaço de endereçamento na função adaptador a ser acessado e o BAR correspondente a ser utilizado;
[078] Índice da Tabela de Dispositivo (1 a n) 214 (FIG. 2A): Pode haver um ou mais índices de tabela de dispositivo, e cada índice é um índice na tabela de dispositivo para localizar uma entrada de tabela de dispositivo (DTE). Há uma ou mais entradas de tabela de dispositivo por função adaptador, e cada entrada inclui informações associadas à função adaptador, incluindo informações utilizadas para processar solicitações da função adaptador (e.g., solicitações DMA, solicitações MSI) e informações relativas a solicitações à função adaptador (e.g., instruções PCI). Cada entrada de tabela de dispositivo está associada a um espaço de endereçamento dentro da memória do sistema atribuída à função adaptador. A informação incluída na DTE pode depender das operações suportadas ou ativadas para a função adaptador (descrita mais detalhadamente abaixo); e
[079] Informação de Roteamento Interno 216: Essa informação é utilizada para realizar um roteamento específico ao adaptador. Inclui, por exemplo, informação de endereçamento de nó, de chip processador e de hub.
[080] A entrada da tabela de função pode incluir mais ou menos informações ou informações diferentes. As informações incluídas podem depender das operações suportadas ou ativadas para a função adaptador (descritas mais detalhadamente abaixo).
[081] Para acessar uma determinada entrada da tabela de função para uma dada função do adaptador, é utilizado um identificador de função 184 (FIG. 1C). Por exemplo, um ou mais bits do identificador de função são utilizados como um índice na tabela de função para localizar uma entrada específica da tabela de função. Há um identificador de função 184 para cada função do adaptador. Num exemplo particular, o identificador de função inclui uma pluralidade de parâmetros. Conforme mostrado na FIG. 2B, o identificador de função 184 inclui, por exemplo, um identificador de ativação 252 indicando se o identificador está ativado; um número de função 254 que identifica a função (este é um identificador estático e pode ser utilizado para indexar na tabela de função); e um número de instância 256 especificando a instância particular deste identificador de função.
[082] Como descrito acima, as funções do adaptador podem emitir solicitações, tais como solicitações de acesso à memória, de interrupção, etc. Além disso, uma configuração pode emitir solicitações para uma função do adaptador. De acordo com um aspecto da presente invenção, essas solicitações de configuração são via instruções específicas, que acessam o adaptador ou modificam parâmetros de controle associados com o adaptador. Exemplos de instruções incluem Carga PCI, Armazenamento PCI, e Modificar Controles de Função PCI, para mencionar algumas. Essas instruções são específicas para arquitetura de infraestrutura E/S (e.g., PCI).
[083] Num exemplo, conforme mostrado na FIG. 3A, um sistema operacional sendo executado numa CPU 310 emite uma instrução de carga 312 (e.g., Carga PCI) para acessar um dos espaços de endereçamento do armazenamento da função 300. Pode haver múltiplas funções do adaptador dentro de um sistema e somente um sistema operacional pode ter permissão de acesso a um dado adaptador. Quando um sistema operacional emite uma instrução de Carga PCI, as restrições de acesso são executadas, por exemplo, pelo firmware para garantir que o sistema operacional que está emitindo a instrução tem permissão de acessar o espaço de endereçamento dentro da função do adaptador.
[084] Em outro exemplo, o sistema operacional sendo executado na CPU 310 emite uma instrução de armazenamento 314 (e.g., Armazenamento PCI), que também acessa um dos espaços de endereçamento. Há outras instruções de adaptador que também precisam ser controladas de forma que o sistema operacional (ou outra configuração) acesse somente a função do adaptador a ele designada.
[085] Uma concretização do controle de acesso de um sistema operacional a uma função do adaptador está descrita com relação à FIG. 4. Embora este exemplo descreva acesso do sistema operacional, pode ser utilizada também por outras configurações.
[086] Com referência à FIG. 4, inicialmente é estabelecida uma política pelo administrador do sistema ou cliente que associa cada função PCI a uma configuração particular (e.g., um sistema operacional particular, uma partição lógica particular, etc.) que tem permissão para acessar a função do adaptador, PASSO 400. Essa política é, por exemplo, reconfigurável e é mantida num conjunto de dados de configuração de E/S localizado na memória de segurança.
[087] No momento da inicialização, o firmware (i.e., firmware confiável) percorre o barramento da infraestrutura de E/S para determinar quais funções do adaptador estão incluídas (e.g. conexão) na infraestrutura, PASSO 402. O firmware não considerará o adaptador como parte da infraestrutura caso o adaptador, como identificado pelos seus dados vitais de produto, não seja suportado pela plataforma. Durante o percurso do barramento, o firmware realiza uma determinada quantidade de configurações, PASSO 403. Essa configuração inclui a inicialização dos switches PCIe 114 com informações de encaminhamento (e.g, números de barramento e informações de endereço) que permitirão o encaminhamento bem-sucedido de pacotes de e para as funções do adaptador. Neste momento, os espaços de configuração dos adaptadores suportados são também inicializados com as informações do BAR e das IDs dos respectivos solicitantes, consistentes com as informações de encaminhamento configuradas nos switches. Subsequentemente, é criada uma entrada de tabela de função para cada função do adaptador suportada e essa entrada de tabela de função é populada com algumas informações, PASSO 404. Por exemplo, o firmware coloca a informação de BAR previamente configurada e a ID do solicitante na entrada da tabela de função. Com base na política, é estabelecido um número de zona em cada entrada da tabela de função que indica qual partição lógica e, portanto, qual sistema operacional, possui acesso à função do adaptador correspondente à entrada da tabela de função. Em outra concretização, na qual o ambiente computacional não é particionado logicamente, o número da zona pode ser substituído por outro indicador, diferente da partição lógica, que especifique um sistema operacional. Outros indicadores podem também ser usados para outros tipos de configuração.
[088] Depois disso, o sistema operacional emite uma consulta para determinar quais as funções do adaptador a que tem acesso (e.g., as atribuídas e as que possam ser atribuídas), PASSO 406. Em resposta a essa consulta, o firmware devolve uma lista de uma ou mais funções do adaptador. Como exemplo, o firmware escaneia a tabela de função procurando por todas as entradas da tabela de função com número de zona que combine com o número de zona do sistema operacional solicitante; e retorna uma lista de funções de adaptador que combinam com os números de zona. (Em outra concretização, pode ser retornada uma lista parcial). Para cada função do adaptador incluída na lista, é fornecido um identificador de função na lista.
[089] Em algum momento, o sistema operacional tenta acessar uma função do adaptador (e.g., consultar uma função do adaptador; acessar um espaço de endereçamento da função; ou configurar ou modificar uma entrada da tabela de dispositivo para a função do adaptador; etc.), mediante, por exemplo, uma instrução, PASSO 408. O sistema operacional especifica na instrução a função do adaptador que acessará através do identificador de função. O firmware então utiliza esse identificador de função para localizar a entrada da tabela de função correspondente à função do adaptador, PASSO 410. O número da zona na entrada da tabela de função é comparada com o número da zona em que o sistema operacional reside, CONSULTA 412. Se não combinar, o acesso é então negado (e.g., a execução da instrução é impedida), PASSO 414. Entretanto, se eles se combinarem, é feita uma verificação adicional, num exemplo, se o acesso deveria ser bloqueado por um motivo diferente, CONSULTA 416. Por exemplo, o status armazenado na entrada da tabela de função é utilizado para determinar se o sistema operacional emitiu uma instrução que deve ser bloqueada enquanto o firmware executa operações privilegiadas que impactam a função do adaptador, tais como recuperação, download do firmware, etc.
[090] Se houver uma indicação de que o acesso deveria ser bloqueado, é feita uma determinação adicional para verificar se o bloqueio é temporário, CONSULTA 418, isto é, se a função do adaptador está apenas temporariamente indisponível conforme indicado, por exemplo, pelo status na entrada da tabela de função, caso em que a instrução pode ser completada com um sinal de ocupado, PASSO 420, e pode ser tentada novamente. Se, no entanto, a função do adaptador não está apenas bloqueada temporariamente, o acesso é então negado, PASSO 422.
[091] Voltando à CONSULTA 416, se o acesso não deve ser bloqueado, ele é então permitido, PASSO 424. Por exemplo, a instrução tem permissão para ser executada. Isso conclui o processamento.
[092] Além do acima mencionado, em outro exemplo, se for determinado que o número da zona na entrada da tabela de função combina com o número da zona do sistema operacional, pode ser realizada uma validação adicional para permitir o acesso direto de um convidado (e.g., MV convidada) a um adaptador que o convidado possua. Neste exemplo, é efetuada uma verificação para conferir se o convidado tem acesso ao adaptador. Por exemplo, a entrada da tabela de função é verificada quanto à ID do convidado. Se estiver armazenada na entrada, o processamento continua; se não, a solicitação é negada.
[093] A capacidade de controle de acesso acima é empregada para instruções emitidas para a função do adaptador pela configuração, como Carga PCI, Armazenamento PCI, Bloco de Armazenamento PCI, Modificar Controles de Função PCI e várias instruções call do processador lógico CLP utilizadas, por exemplo, para consultar ou ativar/desativar a função do adaptador. Neste exemplo, as instruções são instruções PCI, uma vez que as funções do adaptador são funções PCI do adaptador. Entretanto, em outros exemplos, outras instruções específicas de arquitetura de E/S podem ser utilizadas dependendo da arquitetura das funções do adaptador.
[094] Detalhes adicionais relativos a algumas das instruções estão descritas abaixo. Para se utilizar uma função PCI, ela deve estar ativada. Por exemplo, o sistema operacional que deseja utilizar uma função PCI realiza uma consulta para determinar as funções elegíveis para uso (com base na configuração de E/S), e seleciona uma daquelas funções para ativação. Num modelo, a função é ativada utilizando um comando de função PCI determinado de uma instrução Call de Processador Lógico. Uma concretização dessa instrução está retratada na FIG. 5A. Como mostrado num dos exemplos, uma instrução Call de Processador Lógico 500 inclui um código de operação 502 indicando que é uma instrução Call de Processador Lógico; e a indicação para um comando 504. Num exemplo, essa indicação é um endereço de um bloco de solicitação que descreve o comando a ser realizado. Uma concretização desse bloco de solicitação está retratado na FIG. 5B.
[095] Conforme mostrado na FIG. 5B, num exemplo, o bloco de solicitação 520 inclui um número de parâmetros, como um campo de extensão 522, indicando a extensão do bloco de solicitação; um campo de comando 524 indicando a função de comando PCI estabelecida; um identificador de função PCI 526, que é o indicador a ser fornecido tanto para ativar ou desativar a função; um código de operação 528, que é utilizado para designar tanto uma operação de ativação ou de desativação; e um número de espaços de endereçamento de DMA (DMAAS) 530, que indica o número solicitado de espaços de endereçamento a ser associado com a função PCI particular. Mais, menos ou diferentes informações podem ser incluídas em outras concretizações. Por exemplo, num ambiente virtual no qual a instrução é emitida por um hospedeiro de um convidado de modo de armazenamento paginável, é fornecida uma identidade de convidado. São possíveis também outras variações.
[096] Em resposta à emissão e ao processamento da instrução Call do Processador Lógico, um bloco de resposta é retornado e a informação incluída no bloco de resposta depende da operação a ser realizada. Uma concretização do bloco de resposta está retradada na FIG. 5C. Num exemplo, o bloco de resposta 550 inclui um campo de extensão 552 indicando a extensão do bloco de resposta; um código de resposta 554 indicando o status do comando; e um identificador da função PCI 556 que identifica a função PCI. Em resposta ao comando de ativar, o identificador da função PCI é um identificador ativado da função PCI. Além disso, mediante a conclusão da operação de desabilitação, o identificador da função PCI é um identificador geral que pode ser ativado por uma função ativadora no futuro.
[097] Uma concretização da lógica para ativar uma função PCI está descrita com relação à FIG. 6. Num exemplo, essa lógica é iniciada em resposta à emissão de uma instrução do Processador Lógico Call na qual o comando está configurado para o comando de função PCI determinado e o código de operação está configurado para a função de ativação. Essa lógica é executada, por exemplo, por um processador em resposta ao sistema operacional ou a um driver de dispositivo do sistema operacional autorizado a executar essa lógica emitindo a instrução. Em outra concretização, a lógica pode ser executada sem o uso da instrução Call do Processador Lógico.
[098] Com referência à FIG. 6, inicialmente é feita uma determinação para verificar se o identificador fornecido no bloco de solicitação Call do Processador Lógico é um identificador válido, CONSULTA 600, isto é, se o identificador aponta para uma entrada válida na tabela de função ou se está fora da faixa das entradas válidas (e.g., se a parte do número da função do identificador designa uma função instalada). Se o identificador não for conhecido, então é fornecido um código de resposta correspondente indicando que o identificador não é reconhecido PASSO 602. Entretanto, se o identificador for conhecido, é feita então uma consulta adicional para saber se o identificador está ativado, CONSULTA 604. Essa determinação é feita pela verificação do indicador ativado no identificador da função PCI. Se a indicação for determinada como identificador desativado, é devolvido um código de resposta indicando isso, PASSO 606.
[099] Entretanto, se o identificador for conhecido e não estiver ativado (i.e., válido para ativação), é feita uma determinação adicional para verificar se o número solicitado de espaços de endereçamento a ser atribuído à função PCI é maior do que o valor máximo, CONSULTA 608. Para fazer essa determinação, o número de espaços de endereçamento DMA conforme especificado no bloco de solicitação é comparado com o valor máximo (fornecido, num exemplo, com base na política). Se o número de espaços de endereçamento for maior do que o valor máximo, é fornecido um código de resposta indicando um valor inválido para os espaços de endereçamento DMA, PASSO 610. De outra forma, é feita uma determinação para verificar se o numero de espaços de endereçamento está disponível, CONSULTA 612. Essa determinação é feita pela verificação se há entradas disponíveis na tabela de dispositivo para o número solicitado de espaços de endereçamento. Se o número de espaços de endereçamento solicitado não estiver disponível, é retornado então um código de resposta indicando que não há recursos suficientes, PASSO 614. Do contrário, o processamento continua para ativar a função PCI.
[100] O identificador fornecido é utilizado para localizar uma entrada na tabela de função, PASSO 616. Por exemplo, um ou mais bits designados do identificador são utilizados como um índice na tabela de função para localizar uma entrada particular da tabela de função. Em resposta à localização da entrada da tabela de função apropriada, é feita uma determinação para verificar se a função está ativada, CONSULTA 618. Essa determinação é feita pela verificação do indicador de ativação na entrada da tabela de função. Se a função já estiver ativada (i.e., o indicador estiver ajustado para um), é então retornado um código de resposta indicando que a função PCI já está no estado solicitado, PASSO 620.
[101] Se a função ainda não estiver ativada, então o processamento continua para verificar se a função está em estado de erro permanente, CONSULTA 622. Se o indicador de estado de erro permanente na entrada da tabela de função indicar que ela está em estado de erro permanente, então é retornado um código de resposta indicando isso, PASSO 624. Entretanto, se a função não estiver em estado de erro permanente, é feita uma determinação para verificar se foi iniciada uma recuperação do erro para a função, CONSULTA 626. Se o indicador de recuperação iniciada na entrada da tabela de função estiver ajustado, então é fornecido o código de resposta indicando que a recuperação foi iniciada, PASSO 628. De outra forma, uma consulta adicional é feita para verificar se a função PCI está ocupada, CONSULTA 630. Novamente, se a verificação do indicador de ocupado na entrada da tabela de função indicar que a função PCI está ocupada, então é fornecida essa indicação, PASSO 632. Entretanto, se a função PCI não estiver em estado de erro permanente, a recuperação não for iniciada e não estiver ocupada, então é feita mais uma consulta para saber se o sistema operacional tem permissão para ativar essa função PCI, PASSO 634.
[102] Num exemplo, a verificação de permissão inclui a validação do número da zona na FTE para o do sistema operacional que está emitindo a instrução. Se não forem iguais, então o sistema operacional não recebe permissão. Se forem iguais, então é verificado um indicador da permissão na entrada da tabela de função. Se não houver permissão com base no indicador de permissão na entrada da tabela de função, então é fornecido um código de resposta indicando uma ação não autorizada, PASSO 636. Entretanto, se todos os testes forem bem-sucedidos, é feita uma determinação adicional para saber se há DTEs disponíveis para esta função PCI, CONSULTA 638. Como exemplos, a determinação da disponibilidade das DTEs pode ser baseada nas DTEs que não estiverem no momento ativadas no hub de E/S. Adicionalmente, pode ser aplicada uma política limitar o número de DTEs disponíveis para um dado sistema operacional ou uma partição lógica. Pode ser atribuída qualquer DTE disponível que esteja acessível ao adaptador. Se não houver DTEs disponíveis, é então retornado um código de resposta indicando que uma ou mais das DTEs solicitadas estão indisponíveis, PASSO 640.
[103] Se as DTEs estiverem disponíveis, então o número de DTEs correspondente ao número de espaços de endereçamento solicitado é atribuído e ativado, PASSO 642. Num exemplo, a ativação inclui definir o indicador de ativação em cada DTE a ser ativada. Além disso, a ativação inclui, neste modelo, a instalação da memória de conteúdo endereçável (CAM) para fornecer um índice para cada DTE. Por exemplo, para cada DTE, é carregada uma entrada na CAM com o índice, e a CAM facilita a localização de uma DTE.
[104] Ademais, as DTEs são associadas com a entrada da tabela de função, PASSO 644. Isso compreende, por exemplo, a inclusão de cada índice de DTE na entrada da tabela de função. A função é então marcada como ativada mediante a configuração do indicador de ativação na entrada da tabela de função, PASSO 646. Além disso o bit ativado no identificador é determinado, e o número da instância é atualizado, PASSO 648. Esse identificador ativado é então devolvido, PASSO 650, permitindo a utilização do adaptador PCI. Por exemplo, em resposta à ativação da função podem ser realizados o registro para traduções de endereços e interrupções, as operações DMA podem ser realizadas pela função PCI, e/ou instruções de carga, armazenamento e bloco de armazenamento podem ser emitidas para a função.
[105] Conforme indicado acima, após ativar a função, vários parâmetros operacionais são determinados na DTE e/ou FTE por meio da instrução Modificar Controles da Função PCI. Um exemplo da instrução Modificar Controles da Função PCI é descrito em referência às FIGs. 7A-7D.
[106] Com referência à FIG. 7A, uma instrução Modificar Controles da Função PCI 700 inclui, por exemplo, um código de operação 702 indicando a instrução Modificar Controles da Função PCI; um primeiro campo 704 especificando uma localização na qual várias informações são incluídas com relação à função do adaptador para a qual os parâmetros operacionais estão sendo estabelecidos; e um segundo campo 706 especificando uma localização da qual um bloco de informações de função PCI é buscado. Os conteúdos das locações designadas pelos Campos 1 e 2 são descritas em mais detalhes abaixo.
[107] Numa concretização, o Campo 1 designa um registro geral que inclui várias informações. Como mostrado na FIG. 7B, os conteúdos do registro incluem, por exemplo, um identificador de função 710 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çamento 712 designando um espaço de endereçamento na memória do sistema associada à função do adaptador designada pelo identificador de função; um controle operacional 714 que especifica o operação a ser executada para a função do adaptador; e o status 716 que fornece o status referente à instrução quando a instrução se completa com um código predefinido.
[108] Num exemplo, conforme mostrado na FIG. 7C, o Campo 2 designa um endereço lógico 720 de um bloco de informação de função PCI (FIB), que inclui informações relativas a uma função de adaptador associada. O bloco de informação de função é utilizado, de acordo com um aspecto da presente invenção, para atualizar uma entrada de tabela de dispositivo e/ou entrada de tabela de função (ou outra localização) associada à função do adaptador. A informação é armazenada no FIB durante a inicialização e/ou configuração do adaptador, e/ou em resposta a um evento particular.
[109] Na FIG. 7D estão descritos mais detalhes relativos ao bloco de informação de função. Numa concretização, um bloco de informação de função 750 inclui os seguintes campos: Formato 751: Este campo especifica o formato do FIB.
[110] Controle de Interceptação 751: Este campo é utilizado para indicar se a execução de instruções específicas por um convidado através do modo paginável de convidado resulta em interceptação de instrução;
[111] Indicação de Erro 754: Este campo inclui indicação de estado de erro para interrupções de acesso direto à memória e do adaptador. Quando o bit é definido (e.g., 1), um ou mais erros foram detectados durante a execução de interrupção do acesso direto à memória ou adaptador para a função do adaptador;
[112] Bloqueio de Carga/Armazenamento 756: Este campo indica se as operações de carga/armazenamento estão bloqueadas;
[113] Validação da Função PCI 758: Este campo inclui um controle de ativação para a função do adaptador. Quando o bit é estabelecido (e.g., 1), a função do adaptador é considerada como ativada para operações de E/S;
[114] Espaço de Endereçamento Registrado 760: Este campo inclui um controle de ativação do acesso direto à memória para uma função do adaptador. Quando o campo é determinado (e.g., 1) o acesso direto à memória é ativado;
[115] Tamanho da Página 761: Este campo indica o tamanho da página ou outra unidade de memória a ser acessada pelo acesso de memória DMA;
[116] Endereço Base PCI (PBA) 762: Este campo é um endereço base para um espaço de endereçamento na memória do sistema atribuído à função do adaptador. Representa o endereço virtual mais baixo que a função do adaptador tem permissão de utilizar para acesso direto à memória para o espaço de endereçamento DMA especificado;
[117] Limite de Endereço PCI (PAL) 764: Este campo representa o endereço virtual mais alto que a função do adaptador tem permissão de acesso dentro do espaço de endereçamento especificado;
[118] Apontador de Tradução de Endereço de Entrada/Saída (IOAT) 766: O apontador de tradução de endereço de entrada/saída designa a primeira de quaisquer tabelas de tradução utilizadas pela tradução de um endereço virtual PCI, ou pode designar diretamente designar o endereço absoluto de um frame de armazenamento que é o resultado da tradução;
[119] Subclasse de Interrupção (ISC) 768: Este campo inclui a subclasse de interrupção utilizada para apresentar interrupções do adaptador para a função do adaptador;
[120] Número de Interrupções (NOI) 770: Este campo designa o número de códigos de interrupção distintos aceitos por uma função do adaptador. Este campo também define o tamanho, em bits, do bit do vetor de interrupção do adaptador designado por um endereço do bit do vetor de interrupção do adaptador e pelos campos de deslocamento do bit do vetor de interrupção do adaptador;
[121] Endereço Vetor de Bit de Interrupção do Adaptador (AIBV) 772: Este campo especifica o endereço do vetor do bit de interrupção do adaptador para a função do adaptador. Este vetor é utilizado no processamento de interrupção;
[122] Deslocamento do Vetor do bit de Interrupção do Adaptador 774: Este campo especifica o deslocamento do primeiro vetor do bit de interrupção do adaptador para a função do adaptador;
[123] Endereço do Bit do Sumário de Interrupção do Adaptador (AISB) 776: Este campo fornece um endereço designando o bit do sumário de interrupção do adaptador, que é utilizado opcionalmente em processamento ininterrupto;
[124] Deslocamento do Bit do Sumário de Interrupção do Adaptador 778: Este campo fornece o deslocamento do bit do sumário de interrupção do adaptador;
[125] Endereço do Bloco de Medição de Função (FMB) 780: Este campo fornece um endereço do bloco de medição de função utilizado para recolher medições relativas à função do adaptador;
[126] Chave do Bloco de Medição de Função 782: Este campo inclui uma chave de acesso para acessar o bloco de medição de função;
[127] Controle de Notificação do Bit do Sumário 784: Este campo indica se existe um bit de vetor de sumário sendo utilizado;
[128] Token de Autorização de Instrução 786: Este campo é utilizado para determinar se um convidado paginável em modo armazenamento (e.g., V=convidado V) está autorizado a executar instruções PCI sem a intervenção do hospedeiro; e
[129] Formato de Tradução de Endereço 787: Este campo indica um formato selecionado para tradução de endereço do nível mais alta da tabela de tradução a ser utilizado na tradução (e.g., tabela de segmento, 3a região, etc.).
[130] A informação no bloco de informação da função é obtida durante a configuração, a inicialização, e/ou a ocorrência de um evento particular.
[131] O bloco de informação da função designado na instrução Modificar Controles da Função PCI é utilizado, de acordo com um aspecto da presente invenção, para modificar uma entrada da tabela de dispositivo selecionada, uma entrada da tabela de função e/ou outros controles de firmware associados com a função do adaptador designada na instrução. Mediante a modificação da entrada da tabela de dispositivo, da entrada da tabela de função e/ou de outros controles de firmware, determinados serviços são fornecidos para o adaptador. Esses serviços incluem, por exemplo, interrupções do adaptador; traduções de endereço; zerar estado de erro; retornar bloqueio de carga/armazenamento; configurar parâmetros de medição de função; e configurar controle de interceptação.
[132] Uma concretização da lógica associada à instrução Modificar Controles da Função PCI está descrita na FIG. 8. Num exemplo, a instrução é emitida por um sistema operacional (ou por outra configuração) e executada pelo processador (e.g. firmware) executando o sistema operacional. Nesse exemplo, a instrução e as funções do adaptador são baseadas em PCI. Entretanto, em outros exemplos, podem ser utilizadas uma arquitetura de adaptador diferente e as correspondentes instruções.
[133] Num exemplo, o sistema operacional fornece os seguintes operandos para a instrução (e.g., em um ou mais registros designados pela instrução): o identificador da função PCI; o identificador do espaço de endereçamento DMA, o controle da operação; e o endereço do bloco de informação da função.
[134] Com referência à FIG. 8, inicialmente, é feita uma determinação para saber se o recurso que permite a instrução Modificar Controles da Função PCI está instalado, CONSULTA 800. Essa determinação pode ser feita, por exemplo, verificando um indicador armazenado num bloco de controle. Se o recurso não estiver instalado, é fornecida uma condição de exceção, PASSO 802. De outra forma, é feita uma determinação para saber se a instrução foi emitida por um convidado paginável em modo armazenamento (ou outro convidado), CONSULTA 804. Se foi, o sistema operacional hospedeiro emulará a operação para aquele convidado, PASSO 806.
[135] Por outro lado, é feita uma determinação para saber se um ou mais operandos estão alinhados, CONSULTA 808. Por exemplo, é feita uma determinação para saber se o endereço do bloco de informação da função está num limite de palavra dupla. Num modelo, isso é opcional. Se os operandos não estiverem alinhados, é fornecida uma condição de exceção, PASSO 810.
[136] De outro modo, é feita uma determinação para verificar se o bloco de informação da função está acessível, CONSULTA 812. Se não estiver, é fornecida então uma condição de exceção, PASSO 814. Caso contrário, é feita uma determinação para verificar se o identificador fornecido nos operandos da instrução Modificar Controles da Função PCI está ativado, CONSULTA 816. Num exemplo, essa determinação é feita pela verificação de um indicador de ativação no identificador. Se o identificador não estiver ativado, é fornecida então uma condição de exceção, PASSO 818.
[137] Se o identificador estiver ativado, então o identificador é utilizado para localizar uma entrada na tabela de função, PASSO 820, isto é, pelo menos uma parte do identificador é utilizado como índice na tabela de função para localizar a entrada da tabela de função correspondente à função do adaptador para a qual os parâmetros operacionais devem ser estabelecidos.
[138] É feita uma determinação para saber se a entrada da tabela de função foi encontrada, CONSULTA 822. Se não foi, é fornecida uma condição de exceção, PASSO 824. Caso contrário, é feita uma determinação para saber se o sistema operacional está autorizado, CONSULTA 826. Num exemplo, isso inclui validar o número da zona na FTE para aquele do sistema operacional que está emitindo a instrução. Se eles não forem iguais, então o sistema operacional não está autorizado. Se eles forem iguais, então é feita uma determinação adicional para saber se a configuração que está emitindo a instrução é um convidado. Se for, é fornecida uma condição de exceção (e.g., uma interceptação do hospedeiro), PASSO 828. Essa consulta pode ser ignorada se a configuração não for um convidado ou podem ser verificadas outras autorizações, se assim for designado.
[139] É feita então uma determinação para saber se a função está ativada, CONSULTA 830. Num exemplo, essa determinação é feita pela verificação de um indicador de ativação na entrada da tabela de função. Se não estiver ativado, então é fornecida uma condição de exceção, PASSO 832.
[140] Se a função estiver ativada, então é feita uma determinação para saber se a recuperação está ativa, CONSULTA 834. Se a recuperação estiver ativa conforme determinado pelo indicador de recuperação na entrada da tabela de função, então é fornecida uma condição de exceção, 836. Entretanto, se a recuperação não estiver ativa, é feita uma determinação adicional para saber se a função está ocupada, 838. Essa determinação é feita pela verificação do indicador de ocupado na entrada da tabela de função. Se a função estiver ocupada, então é fornecida uma condição de ocupada, PASSO 840. Com a condição de ocupada, a instrução pode ser repetida, em vez de ser derrubada.
[141] Se a função não estiver ocupada, é feita uma verificação adicional para saber se o formato do bloco de informação da função é válido, CONSULTA 842. Por exemplo, o campo formato do FIB é verificado para determinar se esse formato é suportado pelo sistema. Se for inválido, então é fornecida uma condição de exceção, PASSO 844. Se o formato do bloco de informação da função for válido, é feita então uma determinação adicional para saber se o controle operacional especificado nos operandos da instrução é válido, CONSULTA 846, isto é, se o controle operacional é um dos controles operacionais especificados para esta instrução. Se for inválido, é fornecida uma condição de exceção, PASSO 848. Entretanto, se o controle operacional for válido, então o processamento continua com o controle operacional específico sendo determinado.
[142] Várias operações podem ser especificadas incluindo, por exemplo, registrar/não registrar traduções de endereços; registrar/não registrar interrupções do adaptador; configurar controle de interceptação; zerar estado de erro; retornar indicador de bloqueio de carga/armazenamento, etc. Para cada uma dessas operações, os parâmetros operacionais relativos à operação são copiados do FIB para a DTE e/ou FTE (ou outra localização).
[143] Subsequente à inicialização, um convidado pode executar uma instrução de Carga PCI, Armazenamento PCI e Bloco de Armazenamento PCI, cada uma descrita abaixo.
[144] Fazendo referência inicialmente à FIG. 9A, retratamos uma concretização de uma instrução de Carga PCI. Conforme mostrado, a instrução de Carga PCI 900 inclui, por exemplo, um código de operação 902 indicando a instrução de Carga PCI; um primeiro campo 904 especificando a localização na qual os dados trazidos de uma função adaptador serão carregados; e um segundo campo 906 especificando a localização na qual estão incluídas várias informações relativas à função adaptador da qual os dados devem ser carregados. Os conteúdos das localizações designadas pelos Campos 1 e 2 estão descritas mais abaixo.
[145] Num exemplo, o Campo 1 designa um registro geral e, conforme retratado na FIG. 9B, os conteúdos 904 desse registro incluem uma faixa contígua de um ou mais bytes carregados da localização da função adaptador especificada na instrução. Em outro exemplo, os dados são carregados nas posições de byte mais à direita do registro.
[146] Numa concretização, o Campo 2 designa um par de registros gerais que incluem várias informações. Conforme mostrado na FIG. 9C, os conteúdos dos registros incluem, por exemplo:
[147] Identificador Ativado 910: Este campo é um identificador de função ativado da função adaptador do qual os dados devem ser carregados;
[148] Espaço de Endereçamento 912: Este campo identifica o espaço de endereçamento dentro da função adaptador do qual os dados devem ser carregados;
[149] Deslocamento Dentro do Espaço de Endereçamento 914: Este campo especifica o deslocamento dentro do espaço de endereçamento do qual os dados devem ser carregados;
[150] Campo Extensão 916: Este campo especifica a extensão da operação de carga (e.g., o número de bytes a ser carregado); e
[151] Campo Status 918: Este campo fornece um código de status aplicável quando a instrução se completa com uma condição de código predefinida.
[152] Numa concretização, os bytes carregados da função adaptador devem estar contidos dentro de um limite integral no espaço de endereçamento PCI designado da função adaptador. Quando o espaço de endereçamento designa um espaço de endereçamento de memória, o tamanho do limite integral é, por exemplo, duas palavras. Quando o espaço de endereçamento designa um espaço de endereçamento E/S ou um espaço de endereçamento de configuração, o tamanho do limite integral é, por exemplo, uma palavra.
[153] Uma concretização da lógica associada a uma instrução de Carga PCI está descrita com referência às FIGs. 10A-10B. Num exemplo, a instrução é emitida por um sistema operacional (ou outra configuração) e executada pelo processador (e.g., firmware) executando o sistema operacional. Nos exemplos aqui contidos, as instruções e as funções do adaptador são baseadas em PCI. Entretanto, em outros exemplos, podem ser usadas uma arquitetura diferente de adaptador e as instruções correspondentes.
[154] Para emitir a instrução, o sistema operacional fornece os seguintes operandos para a instrução (e.g.; em um ou mais registros designados pela instrução): o identificador da função PCI, o espaço de endereçamento PCI (PCIAS), o deslocamento no espaço de endereçamento PCI, e a extensão dos dados a serem carregados. Mediante à conclusão bem sucedida da Instrução de Carga PCI, os dados são carregados no local (e.g., registro) designado pela instrução.
[155] Com referência à FIG. 10A, inicialmente é feita uma determinação para verificar se o recurso que permite a instrução de Carga PCI está instalado, CONSULTA 1000. Essa determinação é feita, por exemplo, pela verificação de um indicador armazenado, como um bloco de controle. Se o recurso não estiver instalado, é fornecida uma condição de exceção, PASSO 1002. De outra forma, é feita uma determinação para verificar se os operandos estão alinhados, CONSULTA 1004. Por exemplo, se determinados operandos precisam ser em pares de registros par/ímpar, é feita uma verificação se esses requisitos estão atendidos. Se os operandos não estiverem alinhados, é então fornecida uma exceção, PASSO 1006. Por outro lado, se o recurso estiver instalado e os operandos estiverem alinhados, é preciso determinar se o identificador fornecido nos operandos da instrução de Carga PCI está ativado, CONSULTA 1008. Num exemplo, esta determinação é feita pela verificação de um indicador de ativação no identificador. Se o identificador não estiver ativado, é fornecida uma condição de exceção, PASSO 1010.
[156] Se o identificador estiver ativado, então ele é usado para localizar uma entrada de tabela de função, PASSO 1012. Pelo menos uma parte do identificador é utilizada como índice dentro da tabela de função para localizar a entrada da tabela de função correspondente à função adaptador da qual os dados devem ser carregados.
[157] Em seguida, é feita uma determinação para saber se o sistema operacional está autorizado, CONSULTA 1014. Num exemplo, isso inclui validar o número da zona na FTE para aquele do sistema operacional que está emitindo a instrução. Se eles não forem iguais, então o sistema operacional não está autorizado. Se eles forem iguais, então é feita uma determinação adicional para saber se a configuração que está emitindo a instrução é um convidado. Se for, é fornecida uma condição de exceção, PASSO 1016. Essa consulta pode ser ignorada se a configuração não for um convidado ou podem ser verificadas outras autorizações, se assim for designado.
[158] É feita então uma determinação para verificar se a função está ativada, CONSULTA 1018. Num exemplo, esta determinação é feita pela verificação do indicador de ativação na entrada da tabela de função. Se não estiver ativado, é fornecida então uma condição de exceção, PASSO 1020.
[159] Se a função estiver ativada, verifica-se então se o espaço de endereçamento é válido, CONSULTA 1022. Por exemplo, o espaço de endereçamento especificado é um espaço de endereçamento designado da função adaptador e adequado para esta instrução. Caso o espaço de endereçamento seja inválido, então é fornecida uma condição de exceção, PASSO 1024. De outra forma, verifica-se se a carga/armazenamento está bloqueado, CONSULTA 1026. Num exemplo, essa determinação é feita pela verificação do indicador de status na entrada da tabela de função. Se carga/armazenamento estiver bloqueado, então é fornecida uma condição de exceção, PASSO 1028.
[160] Entretanto, caso carga/armazenamento não esteja bloqueado, verifica-se se a recuperação está ativa, CONSULTA 1030. Num exemplo, essa determinação é feita pela verificação do indicador de recuperação iniciada na entrada da tabela de função. Se a recuperação estiver ativa, então é fornecida uma condição de exceção, PASSO 1032. Do contrário, é feita uma verificação se a função está ocupada, CONSULTA 1034. Essa determinação é feita pela verificação do indicador de ocupado na entrada da tabela de função. Se a função estiver ocupada, é fornecida uma condição de ocupado, PASSO 1036. Com a condição de ocupado, a instrução pode ser repetida, em vez de ser derrubada.
[161] Se a função não estiver ocupada, então é feita uma verificação adicional se o deslocamento especificado na instrução é válido, CONSULTA 1038, isto é, se o deslocamento está em combinação com a extensão da operação dentro da base e extensão do espaço de endereçamento, conforme especificado na entrada da tabela de função. Caso não esteja, é fornecida uma condição de exceção, PASSO 1040. Entretanto, se o deslocamento for válido, é feita uma verificação se a extensão é válida, CONSULTA 1042, isto é, levando em conta o tipo de espaço de endereçamento, o deslocamento dentro do espaço de endereçamento, e o tamanho do limite integral, a extensão é válida. Caso não seja, é fornecida uma condição de exceção, PASSO 1044. De outra forma, o processamento continua com a instrução de carga. (Numa concretização, o firmware realiza as verificações acima.)
[162] Continuando com a FIG. 10B, é feita uma verificação pelo firmware se a carga é para um espaço de endereçamento de configuração da função adaptador, CONSULTA 1050, isto é, com base na configuração da memória da função adaptador, se o espaço de endereçamento especificado fornecido na instrução está no espaço de configuração. Se estiver, o firmware realiza vários processamentos para fornecer a solicitação a um hub acoplado à função adaptador; o hub então encaminha a solicitação para a função, PASSO 1052.
[163] Por exemplo, o firmware obtém a ID do solicitante da entrada da tabela de função indicada pelo identificador de função fornecida nos operandos da instrução. Além disso, o firmware determina, com base nas informações da entrada da tabela de função (e.g., as informações de encaminhamento interno), o hub que receberá esta solicitação. Isso quer dizer que um ambiente pode possuir um ou mais hubs e o firmware determina o hub acoplado à função adaptador. Em seguida encaminha a solicitação ao hub. O hub gera um pacote de solicitação de leitura de configuração, que sai pelo barramento PCI para a função adaptador identificada pela RID na entrada da tabela de função. A solicitação de leitura de configuração inclui o RID e o deslocamento (i.e., endereço dos dados) que são utilizados para buscar os dados, como descrito abaixo.
[164] Voltando à CONSULTA 1050, se o espaço de endereçamento designado não for um espaço de configuração, então o firmware realiza mais uma vez vários processamentos para fornecer a solicitação ao hub, PASSO 1054. O firmware usa o identificador para selecionar uma entrada da tabela de função e, a partir dessa entrada, obtém informações para localizar o hub adequado. Também calcula um endereço dos dados que será utilizado na operação de carga. Esse endereço é calculado adicionando o endereço inicial BAR (com o BAR associado ao identificador de espaço de endereçamento fornecido na instrução) obtido da entrada da tabela de função ao deslocamento fornecido na instrução. O endereço dos dados assim calculado é fornecido ao hub. O hub então pega o endereço e o inclui num pacote de solicitação, como um pacote de solicitação de leitura DMA, que passa do barramento PCI para a função adaptador.
[165] Em resposta ao recebimento da solicitação através do PASSO 1052 ou do PASSO 1054, a função adaptador busca os dados solicitados da localização especificada (i.e., o endereço dos dados) e devolve aqueles dados em resposta à solicitação, PASSO 1056. A resposta é encaminhada da função adaptador para o hub E/S. Ao receber a resposta, o hub a encaminha ao processador inicial. O processador inicial pega então os dados do pacote de resposta e os carrega no local designado especificado na instrução (e.g., campo 1). A operação de Carga PCI é então concluída com uma indicação de sucesso (e.g., estabelecendo um código de condição zero).
[166] Além da instrução de carga que recupera dados de uma função adaptador e os armazena num local designado, outra instrução que pode ser executada é a instrução de armazenamento. A instrução de armazenamento armazena dados num local especificado na função adaptador. Uma concretização da instrução de Armazenamento PCI está descrita em referência à FIG. 11A. Conforme mostrado, uma instrução de Armazenamento PCI 1100 inclui, por exemplo, um código de operação 1102 indicando a instrução de Armazenamento PCI; um primeiro campo 1104 especificando o local que inclui os dados a serem armazenados na função adaptador; e um segundo campo 1106 especificando a localização na qual várias informações são incluídas relativas à função adaptador na qual os dados deverão ser armazenados. Os conteúdos das localizações designadas pelos Campos 1 e 2 são descritas mais abaixo.
[167] Num exemplo, o Campo 1 designa um registro geral e, conforme retratado na FIG. 11B, os conteúdos 1104 desse registro incluem uma faixa contígua de um ou mais bytes de dados a serem armazenados na localização da função adaptador especificada. Em outro exemplo, os dados nas posições de byte mais à direita do registro são armazenados.
[168] Numa concretização, o Campo 2 designa um par de registros gerais que incluem várias informações. Conforme mostrado na FIG. 11B, os conteúdos dos registros incluem, por exemplo: Identificador Ativado 1110: Este campo é um identificador de função ativado da função adaptador no qual os dados devem ser armazenados; Espaço de Endereçamento 1112: Este campo identifica o espaço de endereçamento dentro da função adaptador para o qual os dados devem ser armazenados; Deslocamento Dentro do Espaço de Endereçamento 1114: Este campo especifica o deslocamento dentro do espaço de endereçamento para o qual os dados devem ser armazenados; Campo Extensão 1116: Este campo especifica a extensão da operação de armazenamento (e.g., o número de bytes a ser armazenado); e Campo Status 1118: Este campo fornece um código de status aplicável quando a instrução se completa com uma condição de código predefinida.
[169] Uma concretização da lógica associada a uma instrução de Armazenamento PCI está descrita em referência às FIGs. 12A-12B. Num exemplo, a instrução é emitida por um sistema operacional, e executada pelo processador (e.g., firmware) executando o sistema operacional.
[170] Para emitir a instrução, o sistema operacional fornece os seguintes operandos à instrução (e.g., em um ou mais registros designados pela instrução): o identificador da função PCI, o espaço de endereçamento PCI (PCIAS), o deslocamento no espaço do endereçamento PCI, a extensão dos dados a serem armazenados e um ponteiro para os dados a serem armazenados. Mediante a conclusão bem sucedida da instrução do Armazenamento PCI, os dados são armazenados no local designado pela instrução.
[171] Com referência à FIG. 12A, inicialmente, é feita uma verificação se o recurso que permite a instrução de Armazenamento PCI está instalado, CONSULTA 1200. Essa determinação é feita, por exemplo, pela verificação de um indicador armazenado, tal como um bloco de controle. Se o recurso não estiver instalado, é fornecida uma condição de exceção, PASSO 1202. Por outro lado, é feita uma verificação se os operandos estão alinhados, CONSULTA 1204. Por exemplo, se determinados operandos precisam ser em pares de registros par/ímpar, é feita uma verificação se esses requisitos estão atendidos. Se os operandos não estiverem alinhados, é então fornecida uma exceção, PASSO 1206. Por outro lado, se o recurso estiver instalado e os operandos estiverem alinhados, é preciso determinar se o identificador fornecido nos operandos da instrução de Armazenamento PCI está ativado, CONSULTA 1208. Num exemplo, esta determinação é feita pela verificação de um indicador de ativação no identificador. Se o identificador não estiver ativado, é fornecida uma condição de exceção, PASSO 1210.
[172] Se o identificador estiver ativado, então ele é usado para localizar uma entrada de tabela de função, PASSO 1212. Pelo menos uma parte do identificador é utilizada como índice dentro da tabela de função para localizar a entrada da tabela de função correspondente à função adaptador na qual os dados devem ser armazenados.
[173] Em seguida, é feita uma determinação para saber se o sistema operacional está autorizado, CONSULTA 1214. Num exemplo, isso inclui validar o número da zona na FTE para aquele do sistema operacional que está emitindo a instrução. Se eles não forem iguais, então o sistema operacional não está autorizado. Se eles forem iguais, então é feita uma determinação adicional para saber se a configuração que está emitindo a instrução é um convidado. Se for, é fornecida uma condição de exceção, PASSO 1216. Essa consulta pode ser ignorada se a configuração não for um convidado ou podem ser verificadas outras autorizações, se assim for designado.
[174] É feita então uma determinação para verificar se a função está ativada, CONSULTA 1218. Num exemplo, esta determinação é feita pela verificação do indicador de ativação na entrada da tabela de função. Se não estiver ativado, é fornecida então uma condição de exceção, PASSO 1220.
[175] Se a função estiver ativada, verifica-se então se o espaço de endereçamento é válido, CONSULTA 1222. Por exemplo, o espaço de endereçamento especificado é um espaço de endereçamento designado da função adaptador e adequado para esta instrução. Caso o espaço de endereçamento seja inválido, então é fornecida uma condição de exceção, PASSO 1224. De outra forma, verifica-se se a carga/armazenamento está bloqueada, CONSULTA 1226. Num exemplo, essa determinação é feita pela verificação do indicador de status na entrada da tabela de função. Se carga/armazenamento estiver bloqueada, então é fornecida uma condição de exceção, PASSO 1228.
[176] Entretanto, caso carga/armazenamento não esteja bloqueada, verifica-se se a recuperação está ativa, CONSULTA 1230. Num exemplo, essa determinação é feita pela verificação do indicador de recuperação iniciada na entrada da tabela de função. Se a recuperação estiver ativa, então é fornecida uma condição de exceção, PASSO 1232. Do contrário, é feita uma verificação se a função está ocupada, CONSULTA 1234. Essa determinação é feita pela verificação do indicador de ocupado na entrada da tabela de função. Se a função estiver ocupada, é fornecida uma condição de ocupado, PASSO 1236. Com a condição de ocupado, a instrução pode ser repetida, em vez de ser derrubada.
[177] Se a função não estiver ocupada, então é feita uma verificação adicional se o deslocamento especificado na instrução é válido, CONSULTA 1238, isto é, se o deslocamento está em combinação com a extensão da operação dentro da base e extensão do espaço de endereçamento, conforme especificado na entrada da tabela de função. Caso não esteja, é fornecida uma condição de exceção, PASSO 1240. Entretanto, se o deslocamento for válido, é feita uma verificação se a extensão é válida, CONSULTA 1242, isto é, levando em conta o tipo de espaço de endereçamento, o deslocamento dentro do espaço de endereçamento, e o tamanho do limite integral a extensão é válida. Caso não seja, é fornecida uma condição de exceção, PASSO 1244. De outra forma, o processamento continua com a instrução de armazenamento. (Numa concretização, o firmware realiza as verificações acima.)
[178] Continuando com a FIG. 12B, é feita uma verificação pelo firmware se o armazenamento é para um espaço de endereçamento de configuração da função adaptador, CONSULTA 1250, isto é, com base na configuração da memória da função adaptador, se o espaço de endereçamento especificado fornecido na instrução é o espaço de configuração. Se for, o firmware realiza vários processamentos para fornecer a solicitação a um hub acoplado à função adaptador; o hub então encaminha a solicitação para a função, PASSO 1252.
[179] Por exemplo, o firmware obtém a ID do solicitante da entrada da tabela de função indicada pelo identificador de função fornecida nos operandos da instrução. Além disso, o firmware determina, com base nas informações da entrada da tabela de função (e.g., as informações de encaminhamento interno), que hub receberá esta solicitação. Isso quer dizer que um ambiente pode possuir um ou mais hubs e o firmware determina o hub acoplado à função adaptador. Em seguida encaminha a solicitação ao hub. O hub gera um pacote de solicitação de escrita de configuração, que sai pelo barramento PCI para a função adaptador identificada pela RID na entrada da tabela de função. A solicitação de escrita de configuração inclui o RID e o deslocamento (i.e., endereço dos dados) que são utilizados para armazenar os dados, como descrito abaixo.
[180] Voltando à CONSULTA 1250, se o espaço de endereçamento designado não for um espaço de configuração, então o firmware realiza mais uma vez vários processamentos para fornecer a solicitação ao hub, PASSO 1254. O firmware usa o identificador para selecionar uma entrada da tabela de função e, a partir dessa entrada, obtém informações para localizar o hub adequado. Também calcula um endereço dos dados que será utilizado na operação de armazenamento. Esse endereço é calculado adicionando o endereço inicial BAR obtido da entrada da tabela de função ao deslocamento fornecido na instrução. Os dados de endereço assim calculados são fornecidos ao hub. O hub então pega o endereço e o inclui num pacote de solicitação, tal como um pacote de solicitação de escrita DMA, que passa do barramento PCI para a função adaptador.
[181] Em resposta ao recebimento da solicitação através do PASSO 1252 ou do PASSO 1254, a função adaptador armazena os dados solicitados na locação especificada (i.e., o endereço dos dados), PASSO 1256. A operação de Armazenamento PCI é concluída com uma indicação de sucesso (e.g., estabelecendo um código de condição zero).
[182] Além das instruções de carga e armazenamento, que tipicamente carregam ou armazenam o máximo de, e.g., 8 bytes, outra instrução que pode ser executada é a instrução de bloco de armazenamento. A instrução de bloco de armazenamento armazena blocos maiores de dados (e.g., 16, 32, 64, 128 ou 256 bytes) num local especificado na função adaptador; o tamanho dos blocos não são necessariamente limitados a potências de dois. Num exemplo, o local especificado é num espaço de memória da função adaptador (não em espaço E/S ou de configuração).
[183] Uma concretização de uma instrução de Bloco de Armazenamento PCI está descrita em referência à FIG. 13A. Conforme mostrado, uma instrução de Bloco de Armazenamento PCI 1300 inclui, por exemplo, um código de operação 1302 indicando a instrução de Bloco de Armazenamento PCI; um primeiro campo 1304 especificando a localização na qual várias informações relativas à função adaptador a qual os dados devem ser armazenados estão incluídas; um segundo campo 1306 especificando a localização que inclui um deslocamento dentro do espaço de endereçamento especificado no qual os dados devem ser armazenados; e um terceiro campo 1308 especificando a localização que inclui um endereço na memória do sistema dos dados a serem armazenados na função adaptador. Os conteúdos das localizações designadas nos Campos 1, 2 e 3 estão descritos mais abaixo.
[184] Numa configuração, o Campo 1 designa um registro geral que inclui várias informações. Conforme mostrado na FIG. 13B, os conteúdos do registro incluem, por exemplo: Identificador Ativado 1310: Este campo é um identificador de função ativado da função adaptador no qual os dados devem ser armazenados; Espaço de Endereçamento 1312: Este campo identifica o espaço de endereçamento dentro da função adaptador no qual os dados devem ser armazenados; Campo Extensão 1314: Este campo especifica a extensão da operação de armazenamento (e.g., o número de bytes a ser armazenado); e Campo Status 1316: Este campo fornece um código de status aplicável quando a instrução se completa com uma condição de código predefinida.
[185] Num exemplo, o Campo 2 designa um registro geral, e conforme retratado na FIG. 13C, os conteúdos do registro incluem um valor (e.g., 64-bit número inteiro sem sinal) que especifica o deslocamento dentro do espaço de endereçamento especificado no qual os dados devem ser armazenados.
[186] Num exemplo, o Campo 3, conforme retratado na FIG. 13D, inclui um endereço lógico na memória do sistema do primeiro byte de dados 1322 a ser armazenado na função adaptador.
[187] Uma concretização da lógica associada a uma instrução de Bloco de Armazenamento PCI está descrita em referência às FIGs. 14A-14B. Num exemplo, a instrução é emitida por um sistema operacional, e executada pelo processador (e.g., firmware) executando o sistema operacional.
[188] Para emitir a instrução, o sistema operacional fornece os seguintes operandos à instrução (e.g., em um ou mais registros designados pela instrução): o identificador da função PCI, o espaço de endereçamento PCI (PCIAS), o deslocamento no espaço do endereçamento PCI, a extensão dos dados a serem armazenados e um apontador para os dados a serem armazenados. O operando apontador pode incluir um registro e um deslocamento assinalado ou não. Mediante a conclusão bem sucedida da instrução do Bloco de Armazenamento PCI, os dados são armazenados no local do adaptador designado pela instrução.
[189] Com referência à FIG. 14A, inicialmente, é feita uma verificação se o recurso que permite a instrução de Bloco de Armazenamento PCI está instalado, CONSULTA 1400. Essa determinação é feita, por exemplo, pela verificação de um indicador armazenado, tal como um bloco de controle. Se o recurso não estiver instalado, é fornecida uma condição de exceção, PASSO 1402. Por outro lado, se o recurso estiver instalado, é feita uma verificação se o identificador fornecido nos operandos da instrução do Bloco de Armazenamento PCI está ativado, CONSULTA 1404. Num exemplo, esta determinação é feita pela verificação de um indicador de ativação no identificador. Se o identificador não estiver ativado, é fornecida uma condição de exceção, PASSO 1406.
[190] Se o identificador estiver ativado, então ele é usado para localizar uma entrada de tabela de função, PASSO 1412. Pelo menos uma parte do identificador é utilizada como índice dentro da tabela de função para localizar a entrada da tabela de função correspondente à função adaptador na qual os dados devem ser armazenados. Em seguida, é feita uma determinação para saber se o sistema operacional está autorizado, CONSULTA 1414. Num exemplo, isso inclui validar o número da zona na FTE para aquele do sistema operacional que está emitindo a instrução. Se eles não forem iguais, então o sistema operacional não está autorizado. Se eles forem iguais, então é feita uma determinação adicional para saber se a configuração que está emitindo a instrução é um convidado. Se for, é fornecida uma condição de exceção, PASSO 1416. Essa consulta pode ser ignorada se a configuração não for um convidado ou podem ser verificadas outras autorizações, se assim for designado.
[191] É feita então uma determinação para verificar se a função está ativada, CONSULTA 1418. Num exemplo, esta determinação é feita pela verificação do indicador de ativação na entrada da tabela de função. Se não estiver ativado, é fornecida então uma condição de exceção, PASSO 1420.
[192] Se a função estiver ativada, verifica-se então se o espaço de endereçamento é válido, CONSULTA 1422. Por exemplo, o espaço de endereçamento especificado é um espaço de endereçamento designado da função adaptador e adequado para esta instrução (i.e., um espaço de memória). Caso o espaço de endereçamento seja inválido, então é fornecida uma condição de exceção, PASSO 1424. De outra forma, verifica-se se a carga/armazenamento está bloqueado, CONSULTA 1426. Em outro exemplo, essa determinação é feita pela verificação do indicador de status na entrada da tabela de função. Se carga/armazenamento estiver bloqueado, então é fornecida uma condição de exceção, PASSO 1428.
[193] Entretanto, caso carga/armazenamento não esteja bloqueado, verifica-se se a recuperação está ativa, CONSULTA 1430. Num exemplo, essa determinação é feita pela verificação do indicador de recuperação iniciada na entrada da tabela de função. Se a recuperação estiver ativa, então é fornecida uma condição de exceção, PASSO 1432. Do contrário, é feita uma verificação se a função está ocupada, CONSULTA 1434. Essa determinação é feita pela verificação do indicador de ocupado na entrada da tabela de função. Se a função estiver ocupada, é fornecida uma condição de ocupado, PASSO 1436. Com a condição de ocupado, a instrução pode ser repetida, em vez de ser derrubada.
[194] Se a função não estiver ocupada, então é feita uma verificação adicional se o deslocamento especificado na instrução é válido, CONSULTA 1438, isto é, se o deslocamento está em combinação com a extensão da operação dentro da base e extensão do espaço de endereçamento, conforme especificado na entrada da tabela de função. Caso não esteja, é fornecida uma condição de exceção, PASSO 1440. Entretanto, se o deslocamento for válido, é feita uma verificação se a extensão é válida, CONSULTA 1442, isto é, levando em conta o tipo de espaço de endereçamento, o deslocamento dentro do espaço de endereçamento, e o tamanho do limite integral, a extensão é válida. Caso não seja, é fornecida uma condição de exceção, PASSO 1444. De outra forma, o processamento continua com a instrução de bloco de armazenamento. (Numa concretização, o firmware realiza as verificações acima.)
[195] Continuando com a FIG. 14B, é feita uma verificação pelo firmware se o local que inclui os dados a serem armazenados está acessível, CONSULTA 1450, Caso não esteja, é fornecida uma condição de exceção, PASSO 1452 Se estiver, então o firmware realiza vários processamentos para fornecer a solicitação a um hub acoplado à função adaptador; o hub então encaminha a solicitação para a função, PASSO 1454.
[196] Por exemplo, o firmware usa o identificador para selecionar uma entrada da tabela de função e, a partir dessa entrada, obtém informações para localizar o hub adequado. Também calcula um endereço dos dados que será utilizado na operação de bloco de armazenamento. Esse endereço é calculado adicionando o endereço inicial BAR (com o BAR sendo identificado pelo identificador de espaço de endereçamento) obtido da entrada da tabela de função ao deslocamento fornecido na instrução. Os dados de endereço assim calculados são fornecidos ao hub. Além disso, os dados referenciados pelo endereço fornecido na instrução são trazidos da memória do sistema e fornecidos ao hub E/S. O hub então pega o endereço e o inclui num pacote de solicitação, tal como um pacote de solicitação de escrita DMA, que passa do barramento PCI para a função adaptador.
[197] Em resposta ao recebimento da solicitação, a função adaptador armazena os dados solicitados na locação especificada (i.e., o endereço dos dados), PASSO 1456. A operação de Bloco de Armazenamento PCI é concluída com uma indicação de sucesso (e.g., estabelecendo um código de condição zero).
[198] A capacidade de controle de acesso por uma configuração para uma função adaptador particular foi descrita em detalhe acima. Cada função adaptador possui uma entrada de tabela de função a ela associada e localizada dentro da entrada da tabela de função existe uma indicação de quais as configurações (e.g., sistemas operacionais, partições lógicas, convidados, etc) que têm permissão para acessar a função adaptador correspondente à entrada da tabela. Isso é determinado pela política, que é reconfigurável. A política é executada pelo firmware quando a configuração emite instruções para a função adaptador. A execução da instrução é modificada (e.g., por uma indicação) quando a função adaptador está sob controle de um firmware privilegiado (e.g., em recuperação). O acesso é impedido enquanto o adaptador está sendo submetido à manutenção do sistema ou por outros motivos designados.
[199] É concedido acesso direto de uma configuração ao adaptador sem necessidade de uso de partições de E/S separadas. É fornecido isolamento estrito entre as partições, ao mesmo tempo em que é fornecido um acesso de latência extremamente baixa aos adaptadores. Não é necessária nenhuma comunicação entre as partições para controlar o acesso aos adaptadores. Provê controle sem a utilização de tabelas de página para instruções específicas do adaptador.
[200] Na concretização aqui descrita, os adaptadores são adaptadores PCI. PCI, conforme utilizado neste documento, se refere a qualquer adaptador implementado de acordo com uma especificação baseada em PCI conforme definição do PCI-SIG Peripheral Component Interconnect Special Interest Group (Grupo PCI-SIG, grupo de interesse especial que supervisiona o padrão PCI), incluindo, mas sem restrição a, PCI ou PCIe. Num exemplo particular, a Interconexão de Componentes Periféricos Expressa (PCIe) é um padrão de nível de componente de interconexão que define um protocolo de comunicação bidirecional para transações entre adaptadores de E/S e sistemas hospedeiros. As comunicações PCIe são encapsuladas em pacotes de acordo com o padrão PCIe para transmissão num barramento PCIe. As transações originadas de adaptadores de E/S e terminadas em sistemas hospedeiros são chamadas de transações upbound (de subida). Transações originadas de sistemas hospedeiros e terminadas em adaptadores de E/S são chamadas de transações downbound (de descida). A topologia PCIe é baseada em links unidirecionais ponto a ponto dispostos em pares (e.g., um link upbound, um link downbound) para formar o barramento PCIe. O padrão PCI é mantido e publicado pelo PCI-SIG.
[201] Como poderá ser reconhecido pelos especialistas, aspectos da presente invenção podem ser concretizados como um sistema, um método ou um produto programa de computador. Dessa forma, aspectos da presente invenção podem ter a forma de uma concretização inteiramente hardware, uma concretização inteiramente software (incluindo firmware, software residente, microcódigo, etc.) ou uma concretização combinando aspectos de software e de hardware que podem ser chamados neste documento de “circuito”, “módulo” ou “sistema”. Além disso, aspectos da presente invenção podem ter forma de um produto programa de computador incorporado em uma ou mais mídias de leitura em computador, com código de programa de leitura em computador incorporado nele.
[202] Qualquer combinação de uma ou mais mídias de leitura em computador pode ser utilizada. A mídia de leitura em computador pode ser uma mídia de armazenamento. A mídia de armazenamento de leitura em computador pode ser, por exemplo, mas sem limitação a, um sistema, aparelho ou dispositivo eletrônico, magnético, ótico, eletromagnético, infravermelho ou semicondutor, ou qualquer combinação adequada dos citados. Exemplos mais específicos (uma lista não exaustiva) de mídias de armazenamento de leitura em computador incluem: conexão elétrica possuindo um ou mais cabos, disquete de computador portátil, disco rígido, memória de acesso aleatório (RAM), memória somente de leitura (ROM), memória somente de leitura programável e apagável (EPROM ou memória Flash), fibra ótica, disco compacto portátil de memória somente de leitura (CD-ROM), dispositivo de armazenamento ótico, ou qualquer combinação adequada dos antecedentes. No contexto deste documento, a mídia de armazenamento de leitura em computador pode ser qualquer mídia tangível que contenha ou armazene um programa para uso por ou em conexão a um sistema, aparelho ou dispositivo de execução de instrução.
[203] Com referência agora à FIG. 15, num exemplo, um produto programa de computador 1500 inclui uma ou mais mídias de armazenamento de leitura em computador 1502 para armazenar meios ou lógica de código de programa de leitura em computador 1504 para fornecer e facilitar um ou mais aspectos da presente invenção.
[204] O código de programa incorporado numa mídia de leitura em computador pode ser transmitido usando um meio apropriado, incluindo, sem limitação a, sem fio, com fio, cabo de fibra ótica, RF, etc., ou qualquer combinação deles.
[205] 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, inclusive linguagem de programação orientada a objeto, tais como Java, Smalltalk, C++ ou semelhantes, e linguagens de programação convencionais procedurais, tais como a linguagem de programação “C”, assembler ou linguagens de programação similares. O código de programa pode executar inteiramente no computador do usuário, parcialmente no computador do usuário, como um pacote de software autônomo, parcialmente no computador do usuário e parcialmente num computador remoto ou inteiramente num computador remoto ou servidor. No último cenário, o computador remoto pode estar conectado ao computador do usuário através de qualquer tipo de rede, inclusive uma rede local (LAN) ou uma rede ampla (WAN), ou a conexão pode ser feita com um computador externo (por exemplo, pela Internet, utilizando um Provedor de Serviços de Internet).
[206] São descritos aqui aspectos da presente invenção com referência a ilustrações em fluxogramas e/ou diagramas de blocos de métodos, aparelhos (sistemas) e produtos programa de computador de acordo com concretizações da invenção. Fica entendido que cada bloco da ilustração dos fluxogramas e/ou dos diagramas de blocos, e combinações de blocos nas ilustrações dos fluxogramas e/ou diagramas de blocos podem ser implementados por instruções de programa de computador. As instruções do programa de computador podem ser fornecidas para um processador de um computador de propósito geral, computador de propósito especial, ou outro dispositivo programável de processamento de dados para produzir uma máquina, de modo que as instruções, executadas via processador do computador ou outro dispositivo programável de processamento de dados, crie meios para implementar as funções/ações especificadas no fluxograma e/ou diagrama de blocos ou blocos. Essas instruções de programa de computador podem também ser armazenadas numa mídia de leitura em computador que pode direcionar o computador, outros sistemas programáveis de processamento de dados, ou outros dispositivos para funcionar de um modo particular, de tal forma que as instruções armazenadas na mídia de leitura em computador produzam um artigo de manufatura incluindo instruções que implementem a função/ação especificada no fluxograma e/ou diagrama de blocos ou blocos.
[207] As instruções de programa de computador podem também ser carregadas para um computador, outros sistemas programáveis de processamento de dados, ou outros dispositivos para executar uma série de passos operacionais a serem realizados no computador, em outros sistemas programáveis de processamento de dados ou outros dispositivos para produzir um processo implementado no computador tal que as instruções executadas no computador ou em outros sistemas programáveis de processamento de dados forneçam processos para implementação das funções/ações especificadas no fluxograma e/ou diagrama de bloco ou blocos.
[208] Os fluxogramas e os diagramas de bloco nas figuras ilustram a arquitetura, funcionalidade e operação das possíveis implementações de sistemas, métodos e produtos programa de computador de acordo com várias concretizações da presente invenção. A este respeito, cada bloco no fluxograma ou diagramas de blocos pode representar um módulo, segmento, ou parte do código, que compreende uma ou mais instruções executáveis para implementação da função(ões) lógica(s) especificada(s). Deve-se notar também que, em algumas concretizações alternativas, as funções observadas no bloco podem ocorrer fora da ordem indicada nas figuras. Por exemplo, dois blocos mostrados em sucessão podem, de fato, ser executados mais concorrentemente, ou os blocos podem, às vezes, ser executados na ordem reversa, dependendo da funcionalidade envolvida. Deve-se também notar que cada ilustração do bloco dos diagramas de blocos e/ou dos fluxogramas, bem como combinações de blocos na ilustração dos diagramas de bloco e/ou fluxogramas, podem ser implementados por sistemas de propósito especial baseados em hardware que realizam as funções ou ações especificadas, ou combinações de hardware de propósito especial e instruções de computador.
[209] Além do exposto acima, um ou mais aspectos da presente invenção podem ser providenciados, oferecidos, distribuídos, gerenciados, fornecidos, etc., por um provedor de serviço que ofereça gerenciamento de ambientes do cliente. Por exemplo, o provedor de serviço pode criar, manter, suportar, etc., código de computador e/ou uma infraestrutura computacional que execute um ou mais aspectos da presente invenção para um ou mais clientes. Em contrapartida, o provedor de serviço poderá ser pago pelo cliente mediante assinatura e/ou uma taxa contratada, por exemplo. Além disso, ou alternativamente, o provedor de serviço poderá ser pago mediante a venda de conteúdo de propaganda para terceiros.
[210] Num aspecto da presente invenção, pode ser disponibilizado um aplicativo para realizar um ou mais aspectos da presente invenção. Como exemplo, a disponibilização de um aplicativo compreende o fornecimento de infraestrutura computacional operável para realizar um ou mais aspectos da presente invenção.
[211] Como um aspecto adicional da presente invenção, pode ser disponibilizada uma estrutura computacional compreendendo a integração de um código de leitura em computador num sistema de computador, na qual o código em combinação com o sistema de computador seja capaz de executar um ou mais aspectos da presente invenção.
[212] Ainda como um outro aspecto da presente invenção, pode ser fornecido um processo para integração da infraestrutura computacional compreendendo a integração de código de leitura em computador com um sistema de computador. O sistema de computador engloba uma mídia de leitura em computador, na qual a mídia de computador compreende um ou mais aspectos da presente invenção. O código em combinação com o sistema de computador é capaz de realizar um ou mais aspectos da presente invenção.
[213] Ademais, mais, menos ou diferentes informações podem ser incluídas nas entradas da tabela de função, nas entradas da tabela de dispositivo, e/ou no identificador de função que não sejam originadas do escopo da presente invenção. Além disso, embora sejam descritas tabelas, pode ser utilizada qualquer estrutura de dados e o termo tabela deve incluir todas essas estruturas de dados. Mais ainda, outras instruções podem ser controladas por um ou mais aspectos da presente invenção. São possíveis muitas outras variações.
[214] 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 pode ser usado que inclua pelo menos dois processadores acoplados direta ou indiretamente aos elementos de memória através de um barramento de sistema. Os elementos de memória incluem, por exemplo, a memória local empregada durante a real execução do código do programa, armazenamento em massa, e memória cache que fornece armazenamento temporário de pelo menos alguns códigos de programa a fim de reduzir o número de vezes que o código tem que ser recuperado da armazenagem em massa durante a execução.
[215] Dispositivos de Entrada/Saída ou E/S (inclusive, mas sem limitação a, teclados, visores, dispositivos indicadores, dispositivos de armazenamento de acesso direto-DASD, fitas, CDs, DVDs, pen drives e outras mídias de memória, etc.) podem ser acoplados ao sistema quer diretamente ou com a intervenção de controladores de E/S. Adaptadores de rede podem também ser acoplados ao sistema para permitir que o processamento de dados se acople a outros sistemas de processamento de dados ou a impressoras remotas ou a dispositivos de armazenamento mediante a intervenção de redes públicas ou privadas. Modems, modems a cabo e cartões Ethernet são apenas alguns dos tipos disponíveis de adaptadores de rede.
[216] Com referência à FIG. 16, são retratados componentes representativos de um sistema de Computador Hospedeiro 5000 para implementar um ou mais aspectos da presente invenção. O representante do computador hospedeiro 5000 compreende uma ou mais CPUs 5001 em comunicação com a memória do computador (i.e., armazenamento central) 5002, bem como interfaces de E/S para armazenar dispositivos de mídia 5011 e redes 5010 para comunicação com outros computadores ou redes de área de armazenamento (SAN) e similares. A CPU 5001 é compatível com uma arquitetura que possui configuração de instrução arquitetada e funcionalidade arquitetada. A CPU 5001 pode possuir tradução dinâmica de endereço (DAT) 5003 para transformação de endereços de programa (endereços virtuais) em endereços reais de memória. Uma DAT tipicamente inclui um buffer de tradução lookaside (TLB) 5007 para salvar traduções de modo que os últimos acessos aos blocos de memória do computador 5002 não precisem de atraso da tradução do endereço. Tipicamente, uma cache 5009 é empregada entre a memória do computador 5002 e o processador 5001. A cache 5009 pode ter uma grande cache hierárquica disponível para mais de uma CPU e caches menores, mais rápidas (níveis mais baixos) entre a cache maior e cada CPU. Em algumas implementações, as caches de nível mais baixo são divididas para fornecer caches de nível baixo para busca de instrução e acessos de dados. Numa concretização, uma instrução e trazida da memória 5002 por uma unidade de instrução de busca 5004 via uma cache 5009. A instrução é decodificada numa unidade de decodificação de instrução 5006 e enviada (com outras instruções em algumas concretizações) para a unidade ou as unidades de execução de instrução 5008. Tipicamente, são utilizadas várias unidades de execução 5008, por exemplo, unidade de execução aritmética, unidade de execução de ponto flutuante e unidade de execução de instrução de ramificação. A instrução é executada pela unidade de execução, acessando operandos dos registros da instrução especificada ou da memória, conforme a necessidade. Se um operando precisa ser acessado (carregado ou armazenado) da memória 5002, uma unidade de carga/armazenamento 5005 tipicamente indica o acesso sob controle da instrução que está 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.
[217] Conforme observado, um sistema de computador inclui informações em armazenamento local (ou primário), bem como endereçamento, proteção, e gravação de referência e alteração. Alguns aspectos de endereçamento incluem o formato de endereços, o conceito de espaços de endereçamento, os vários tipos de endereço, e o modo no qual um tipo de endereço é traduzido para outro tipo de endereço. Alguns dos armazenamentos primários incluem locais de armazenamento atribuídos permanentemente. O armazenamento primário fornece ao sistema armazenamento de dados diretamente endereçáveis de acesso rápido. Tanto os dados como os programas devem ser carregados em armazenamento primário (a partir de dispositivos de entrada) antes que possam ser processados.
[218] O armazenamento primário pode incluir um ou mais armazenamentos menores, de buffer de acesso mais rápido, às vezes chamados caches. Uma cache é, de forma geral, associada fisicamente a uma CPU ou a um processador E/S. Os efeitos, exceto no desempenho, da construção física e utilização de mídia de armazenamento diferente geralmente não são observáveis pelo programa.
[219] Caches separadas podem ser mantidas para instruções e para operandos de dados. Informações dentro de uma cache são mantidas em bytes contíguos num limite integral chamado bloco de cache ou linha de cache (ou linha, para encurtar). Um modelo pode fornecer uma instrução de ATRIBUTO DE EXTRAÇÃO DE CACHE que devolve o tamanho da linha de cache em bytes. Um modelo pode também fornecer DADOS DE PRÉ-BUSCA e instruções de DADOS DE PRÉ-BUSCA RELATIVAMENTE LONGOS que efetuam a pré-busca de armazenamento nos dados ou cache de instrução ou a liberação de dados da cache.
[220] O armazenamento é visualizado como uma longa cadeia horizontal de bits. Para a maioria das operações, os acessos ao armazenamento se processa numa sequência da esquerda para a direita. A cadeia de bits é subdividida em unidades de oito bits. A unidade de oito bits é chamada byte, que é bloco básico de construção de todos os formatos de informação. Cada locação de byte em armazenamento é identificada por um único número inteiro não negativo, que é o endereço da localização daquele byte ou, simplesmente, o endereço do byte. Localizações de bytes adjacentes possuem endereços consecutivos, começando com 0 à esquerda e continuando em sequência da esquerda para a direita. Endereços são números inteiros binários sem sinal e são 24, 31 ou 64 bits.
[221] A informação é transmitida entre o armazenamento e a CPU ou um subsistema de canal de um byte, ou um grupo de bytes, de cada vez. Salvo especificação em contrário, por exemplo, no z/Architecture®, um grupo de bytes em armazenamento está endereçado pelo byte mais à esquerda do grupo. O número de bytes no grupo é especificado implícita ou explicitamente pela operação a ser executada. Quando utilizada numa operação de CPU, um grupo de bytes é chamado de campo. Dentro de cada grupo de bytes, por exemplo no z/Architecture®, os bits são numerados numa sequência da esquerda para a direita. No z/Architecture®, os bits mais à esquerda são às vezes chamados de bits de “ordem superior” e os bits mais à direita são os bits de “ordem inferior”. Os números de bits, entretanto, não são endereços de armazenamento. Somente os bytes podem ser endereçados. Para operar com bits individuais de um byte em armazenamento, o byte é acessado por inteiro. Os bits num byte são numerados de 0 a 7, da esquerda para a direita (e.g., no z/Architecture®). Os bits num endereço podem ser numerados 8-31 ou 40-63 para 24 endereços bit, ou 1-31 ou 33-63 para 31 endereços bit; eles são numerados 0-63 para 64 endereços bit. Dentro de qualquer outro formato de extensão fixa de múltiplos bytes, os bits que compõem o formato são numerados consecutivamente iniciando em 0. Para fins de detecção de erros, e de preferência para correção, podem ser transmitidos um ou mais bits de verificação 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 controlados diretamente pelo programa. As capacidades de armazenamento são expressas em número de bytes. Quando a extensão de um campo de operando de armazenamento é sugerida pelo código de operação de uma instrução, o campo é dito como possuindo extensão fixa, que pode ser de um, dois, quatro, oito ou dezesseis bytes. Campos maiores podem ser sugeridos por algumas instruções. Quando a extensão de um campo de operando de armazenamento não é sugerida, mas determinada explicitamente, diz-se que o campo possui extensão variável. Operandos de extensão variável podem variar em extensão por incrementos de um byte (ou com algumas instruções, em múltiplos de dois bytes ou outros múltiplos). Quando a informação é colocada em armazenamento, apenas os conteúdos dessas locações de bytes são substituídos e incluídos no campo designado, ainda que a largura do caminho físico para armazenamento possa ser maior do que a extensão do campo sendo armazenado.
[222] Certas unidades de informação devem estar em armazenamento em faixa integral. Chama-se integral a faixa para uma unidade de informação quando o seu endereço de armazenamento é um múltiplo da extensão da unidade em bytes. Nomes especiais foram dados aos campos de 2, 4, 8 e 16 bytes em faixa integral. Meia-palavra é um grupo de dois bytes consecutivos numa faixa de dois bytes e é o bloco de construção de instruções básico. Palavra é um grupo de quatro bytes consecutivos numa faixa de quatro bytes. A palavra dupla é um grupo de oito bytes consecutivos numa faixa de oito bytes. A palavra quádrupla é um grupo de 16 bytes consecutivos numa faixa de 16 bytes. Quando os endereços de armazenamento designam meias-palavras, palavras, palavras duplas e palavras quádruplas, a representação binária do endereço contém um, dois, três ou quatro bits zero mais à direita, respectivamente. As instruções devem estar em limites integrais de 2 bytes. Os operandos de armazenamento da maioria das instruções não possuem requisitos de alinhamento de limite.
[223] Em dispositivos que implementam caches separadas para instruções e operandos de dados, pode ser experimentada uma demora significativa se o programa armazena numa linha de cache da qual as instruções são buscadas subsequentemente, independentemente se o armazenamento altera as instruções buscadas subsequentemente.
[224] Numa concretização, a invenção pode ser realizada por software (às vezes referido como código interno licenciado, firmware, microcódigo, milicódigo, picocódigo e similares, qualquer deles é consistente com a presente invenção). Com referência à FIG. 16, o código de programa de software que concretiza a presente invenção é tipicamente acessado pelo processador 5001 do sistema hospedeiro 5000 a partir de dispositivos de mídia de armazenamento de longa duração 5011, tais como unidade de CD-ROM, disco de fita ou disco rígido. O código de programa de software pode ser concretizado em qualquer das variedades de mídias conhecidas para sistemas de processamento de dados, tais como disquete, disco rígido ou CD-ROM. O código pode ser distribuído nessa mídia, ou pode ser distribuído a usuários a partir da memória do computador 5002 ou armazenamento de um sistema de computador numa rede 5010 para outros sistemas de computador para utilização por usuários desses outros sistemas.
[225] O código de programa de software inclui um sistema operacional que controla a função e a interação de vários componentes de computador e um ou mais programas aplicativos. O código de programa é normalmente paginado a partir de um dispositivo de mídia de armazenamento 5011 para armazenamento de computador de velocidade relativamente superior 5002 em que esteja disponível para processamento pelo processador 5001. As técnicas e métodos para concretizar o código de programa de software na memória, na mídia física e/ou no código do software distribuidor via redes são bem conhecidos e não serão mais discutidos neste documento. O código de programa, quando criado e armazenado em mídia tangível (incluindo, mas sem se limitar a, módulos de memória eletrônica (RAM), memória flash, Discos Compactos (CDs), DVDs, Fita Magnética e similares), é sempre referenciado como um “produto programa de computador”. A mídia do produto programa de computador é tipicamente legível por um circuito processador, de preferência num sistema de computador para execução pelo circuito processador.
[226] A FIG. 17 ilustra a representação de uma estação de trabalho ou sistema de hardware servidor onde a presente invenção pode ser executada. O sistema 5020 da FIG. 17 compreende um sistema representativo de computador base 5021, como um computador pessoal, uma estação de trabalho ou um servidor, incluindo os dispositivos periféricos opcionais. O sistema de computador base 5021 inclui um ou mais processadores 5026 e um barramento empregado para conectar e ativar 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 à memória 5025 e ao armazenamento de longo prazo 5027 que pode incluir um disco rígido (inclusive qualquer mídia magnética, CD, DVD e memória flash, por exemplo) ou um drive de fita. O sistema 5021 pode também incluir um adaptador de interface de usuário, que conecta o microprocessador 5026 pelo barramento para um ou mais dispositivos de interface, tais como teclado 5024, mouse 5023, impressora/scanner 5030 e/ou outros dispositivos de interface, que pode ser qualquer dispositivo de interface de usuário, como tela sensível ao toque, plataforma de entrada digitalizada, etc. O barramento também conecta um dispositivo de vídeo 5022, como uma tela LCD ou um monitor, ao microprocessador através de um adaptador de vídeo.
[227] 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, protocolo “token ring”, Ethernet ou modems. Alternativamente, o sistema 5021 pode se comunicar utilizando uma interface sem fio, como um cartão CDPD (pacote de dados digital e celular). O sistema 5021 pode estar associado com outros computadores numa rede local (LAN) ou numa rede ampla (WAN), ou o sistema 5021 pode ser um cliente num arranjo cliente/servidor com outro computador, etc. Todas essas configurações, bem como os hardware e software de comunicação apropriados, são conhecidas dos especialistas.
[228] A FIG. 18 ilustra uma rede de processamento de dados 5040 na qual a presente invenção pode ser utilizada. A rede de processamento de dados 5040 pode incluir uma pluralidade de redes individuais, tais como rede sem fio e rede com fio, cada uma podendo incluir uma pluralidade de estações de trabalho individuais 5041, 5042, 5043, 5044. Além disso, como os especialistas poderão notar, uma ou mais LANs podem ser incluídas, e cada LAN pode compreender uma pluralidade de estações de trabalho inteligentes acopladas a um processador hospedeiro.
[229] Ainda com referência à FIG. 18, as redes podem também incluir computadores mainframe ou servidores, como computador intermediário (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 intermediário 5046 serve como ponto de entrada em cada rede individual. A máquina intermediária (gateway) é necessária quando se conecta um protocolo de rede a outro. A máquina intermediária 5046 pode ser acoplada de forma preferencial a outra rede (por exemplo, Internet 5047) por meio de um link de comunicação. A máquina intermediária 5046 pode também ser acoplada diretamente a uma ou mais estações de trabalho 5041, 5042, 5043, 5044 utilizando um link de comunicação. O computador intermediário pode ser implementado utilizando um servidor de Sistema IBM eServer™ do Sistema z® fornecido pela International Business Machines Corporation.
[230] Com referência ao mesmo tempo à FIG. 17 e à FIG. 18, o código de programação do software que pode concretizar a presente invenção pode ser acessado pelo processador 5026 do sistema 5020 a partir de uma mídia de armazenamento de longa duração 5027, como uma unidade de CD-ROM ou um disco rígido. O código de programa de software pode ser concretizado em qualquer das variedades de mídias conhecidas para sistemas de processamento de dados, tais como disquete, disco rígido ou CD-ROM. O código pode ser distribuído nessa mídia, ou pode ser distribuído a usuários 5050, 5051 a partir da memória ou armazenamento de um sistema de computador numa rede para outros sistemas de computador para utilização por usuários desses outros sistemas.
[231] Alternativamente, o código de programação pode ser incorporado à memória 5025, e acessado pelo processador 5026 utilizando o barramento do processador. Esse código de programação inclui um sistema operacional que controla a função e interação de vários componentes do computador e ou mais programas aplicativos 5032. O código de programa é normalmente paginado da mídia de armazenamento 5027 para a memória de alta velocidade 5025 onde fica disponível para processamento pelo processador 5026. As técnicas e métodos para incorporação do código de programação de software na memória, em mídia física, e/ou código de distribuição de software via redes são bem conhecidos e não serão mais discutidos neste documento. O código de programa, quando criado e armazenado em mídia tangível (incluindo, mas sem se limitar a, módulos de memória eletrônica (RAM), memória flash, Discos Compactos (CDs), DVDs, Fita Magnética e similares), é sempre referenciado como um “produto programa de computador”. A mídia do produto programa de computador é tipicamente legível por um circuito processador, de preferência num sistema de computador para execução pelo circuito processador.
[232] A cache que está mais prontamente disponível para o processador (normalmente mais rápida e menor do que outras caches no processador) é a cache mais inferior (L1 ou nível 1) e o armazenamento primário (memória principal) é a cache de nível mais alto (L3 se houver 3 níveis). A cache de nível mais inferior é com frequência dividida em cache de instrução (I-Cache) armazenando as instruções da máquina a serem executadas e em cache de dados (D-Cache) armazenando operandos de dados.
[233] Com referência à FIG. 19, uma exemplificação de concretização do processador está retratada para o processador 5026. Tipicamente um ou mais níveis de cache 5053 são empregados para fazer buffer nos blocos de memória a fim de aperfeiçoar o desempenho do processador. A cache 5053 são linhas de cache de armazenamento de buffer de alta velocidade de dados de memória possíveis de serem utilizados. As linhas de cache típicas são de 64, 128 ou 256 bytes de dados de memória. Caches separadas são empregadas com frequência mais para armazenar instruções do que para armazenar dados. A coerência da cache (sincronização de cópias de linhas em memória e as caches) é fornecida frequentemente por vários algoritmos snooping bem conhecidos nesta especialidade. Normalmente se refere à cache como o armazenamento da memória principal 5025 de um sistema processador. Num sistema processador que possui 4 níveis de cache 5053, o armazenamento primário 5025 é algumas vezes chamado de cache nível 5 (L5), uma vez que é geralmente mais rápido e armazena somente uma parte do armazenamento não volátil (DASD - Dispositivo de Armazenamento de Acesso Direto, fita, etc.) que está disponível no sistema de computador. O armazenamento primário 5025 armazena páginas de dados paginadas dentro e fora do armazenamento primário 5025 pelo sistema operacional.
[234] Um contador do programa (contador de instruções) 5061 mantém a trilha do endereço da instrução atual a ser executada. Um contador de programa num processador z/Architecture® é de 64 bits e pode ser cortado para 31 ou 24 bits para suportar limites de endereçamento anteriores. O contador de programa tipicamente é incorporado à PSW (palavra de estado do programa) de um computador de forma que ele continue durante a alternância do contexto. Assim, um programa em execução, possuindo um valor de contador de programa, pode ser interrompido, por exemplo, pelo sistema operacional (alternância do contexto de ambiente de programa para ambiente do sistema operacional). A PSW do programa mantém o valor do contador do programa enquanto o programa não está ativo, e o contador de programa (na PSW) do sistema operacional é utilizado enquanto o programa operacional está executando. De forma típica, o contador de programa é incrementado por um valor igual ao número de bytes da instrução atual. As instruções RISC (simplificadas) são tipicamente de extensão fixa enquanto as instruções CISC (complexas) são tipicamente de extensão variável. As instruções do z/Architecture®, da IBM, são instruções CISC com uma extensão de 2, 4 ou 6 bytes. O contador de programa 5061 é modificado ou por uma operação de alternância de contexto ou por uma operação de desvios tomados (branch taken) de uma instrução de desvio (branch instruction), por exemplo. Num contexto de operação de alternância, o valor atual do contador de programa é salvo na palavra de estado 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. É realizada uma operação de desvios tomados a fim de permitir ao programa tomar decisões ou fazer loops dentro do programa mediante a carga do resultado da instrução de desvio no contador do programa 5061.
[235] Tipicamente, uma unidade de busca de instrução 5055 é empregada para buscar instruções em nome do processador 5026. A unidade de busca traz ou “as próximas instruções da sequência”, instruções de destino das instruções de desvios tomados, ou as primeiras instruções de um programa seguinte à alternância de contexto. As unidades de busca de instrução modernas com utilizam com frequência técnicas de pré-busca para especular instruções de pré-busca com base na similaridade que as instruções pré-buscadas poderiam ser utilizadas. Por exemplo, uma unidade de busca pode buscar 16 bytes de instrução que inclui a instrução sequencial seguinte e bytes adicionais de instruções sequenciais mais adiante.
[236] As instruções buscadas são então executadas pelo processador 5026. Numa concretização, as instruções buscadas são passadas para uma unidade de despacho 5056 da unidade de busca. A unidade de despacho decodifica a(s) instrução(ões) e encaminha as informações sobre ela(s) para as unidades apropriadas 5057, 5058, 5060. Uma unidade de execução 5057 receberá tipicamente informações sobre instruções aritméticas decodificadas da unidade de busca de instrução 5055 e realizará operações aritméticas em operandos de acordo com o código de operação da instrução. Os operandos são fornecidos para a unidade de execução 5057 de preferência ou da memória 5025, dos registros arquitetados 5059 ou de um campo imediato da instrução sendo executada. Os resultados da execução, quando armazenados, são armazenados ou na memória 5025, nos registros 5059 ou em outros hardwares de máquina (tais como registro de controle, registros PSW e similares).
[237] Um processador 5026 possui tipicamente uma ou mais unidades 5057, 5058, 5060 para executar a função da instrução. Com referência à FIG. 20A, a unidade de execução 5057 pode se comunicar com registros gerais arquitetados 5059, unidade de decodificação/despacho 5056, unidade de armazenamento de carga 5060, e outras 5065 unidades processadoras por meio de interface lógica 5071. A unidade de execução 5057 pode empregar vários circuitos de registro 5067, 5068, 5069 para guardar informações sobre as quais a unidade lógica e aritmética (ALU) 5066 vai trabalhar. A ALU realiza operações aritméticas, tais como soma, subtração, multiplicação e divisão, bem como funções lógicas, tais como e, ou e ou-exclusivo (XOR), rotação e mobilidade. A ALU suporta, preferencialmente, operações especializadas que são dependentes de desenho. Outros circuitos podem fornecer outros recursos 5072, inclusive códigos de condição e recuperação do suporte lógico, por exemplo. Tipicamente, o resultado de uma operação ALU é guardado num circuito de registro de saída 5070 que pode encaminhar o resultado para uma variedade de outras funções de processamento. Há vários arranjos de unidades de processador, a presente descrição pretende apenas fornecer uma representação compreensível de uma concretização.
[238] Uma instrução ADD (soma), por exemplo, seria executada numa unidade de execução 5057 que possuísse funcionalidade aritmética e lógica, enquanto que uma instrução de ponto flutuante, por exemplo, seria executada numa unidade de ponto flutuante com capacidade especializada em ponto flutuante. De preferência, a unidade de execução opera com operandos identificados por uma instrução pela realização de uma função de código de operação definida nos operandos. Por exemplo, uma instrução ADD pode ser executada pela unidade de execução 5057 em operandos encontrados em dois registros 5059 identificados pelos campos de registro da instrução.
[239] A unidade de execução 5057 realiza a adição aritmética de dois operandos e armazena o resultado num terceiro operando, em que o terceiro operando pode ser um terceiro registro ou um dos dois registros fonte. A unidade de execução, de preferência, utiliza uma Unidade Lógica e Aritmética (ALU) 5066 que é capaz de realizar uma variedade de funções lógicas, como Mobilidade, Rotação, E, Ou e XOR, bem como uma variedade de funções algébricas, inclusive adição, subtração, multiplicação, divisão. Algumas ALUs 5066 são desenhadas 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. O z/Architecture® da IBM é Big Endian. Os campos sinalizados podem ser na forma sinal-magnitude, complemento de 1 ou complemento de 2, dependendo da arquitetura. Um número complemento de 2 é vantajoso na medida em que a ALU não precisa desenhar uma capacidade de subtração, uma vez que um valor negativo ou positivo no complemento de 2 requer somente a adição dentro da ALU. Os números são comumente descritos em shorthand (formato taquigráfico), onde um campo de 12 bits define um endereço de um bloco de 4.096 byte e é descrito em geral como bloco 4 Kbyte (Kilobyte), por exemplo.
[240] Com referência à FIG. 20B, a informação de instrução de desvio para executar uma instrução de desvio é tipicamente enviada para uma unidade de desvio 5058 que, com frequência, emprega um algoritmo de previsão de desvio, como uma tabela de história de desvio 5082 para prever o resultado do desvio antes da conclusão de outras operações condicionais. Será buscado o destino da instrução de desvio atual e executado especulativamente antes da conclusão das operações condicionais. Quando as operações condicionais forem completadas as instruções de desvio executadas especulativamente também serão completadas ou descartadas com base nas condições da operação condicional e do resultado especulado. Uma instrução de desvio típica poderá testar códigos e desvio de condição para um endereço de destino se os códigos de condição combinarem com o requisito de desvio da instrução de desvio, pode ser calculado um endereço de destino com base em vários números incluindo os encontrados nos campos de registro ou num campo imediato da instrução, por exemplo. A unidade de desvio 5058 pode utilizar uma ALU 5074 que possua uma pluralidade de circuitos de registro de entrada 5075, 5076, 5077 e um circuito de registro de saída 5080. A unidade de desvio 5058 pode se comunicar com registros gerais 5059, unidade de despacho-decodificação 5056 ou outros circuitos 5073, por exemplo.
[241] A execução de um grupo de instruções pode ser interrompida por uma variedade de razões, inclusive por uma alternância de contexto iniciada por um sistema operacional, uma exceção ou um erro de programa causando a alternância de contexto, um sinal de interrupção E/S causando uma alternância de contexto ou atividade multissegmento de uma pluralidade de programas (num ambiente multissegmento), por exemplo. De preferência, uma ação de alternância de contexto salva informação de estado sobre um programa em execução no momento e depois carrega informação de estado sobre um outro programa que está sendo chamado. A informação de estado pode ser salva em registros de hardware ou na memória, por exemplo. A informação de estado compreende, preferencialmente, um valor de contador de programa apontando para a próxima instrução a ser executada, códigos de condição, informação de tradução de memória e conteúdo de registro arquitetado. A atividade de alternância de contexto pode ser praticada em circuitos de hardware, programas aplicativos, programas de sistema operacional ou código firmware (microcódigo, picocódigo ou código interno licenciado (LIC)) sozinhos ou em combinação.
[242] O processador acessa operandos de acordo com métodos de instrução definidos. A instrução pode fornecer um operando imediato utilizando o valor de uma parte da instrução, pode fornecer um ou mais campos de registro apontando explicitamente para ou registros de propósito geral ou registros de propósito especial (registros de ponto de flutuação, por exemplo). A instrução pode utilizar registros implícitos identificados como operandos por um campo de código de operação. A instrução pode utilizar locações de memória para operandos. A locação de memória para um operando pode ser fornecida por um registro, um campo imediato, ou uma combinação de registros e campo imediato, conforme exemplificado pelo recurso de deslocamento longo do z/Architecture® em que a instrução define um registro base, um registro de índice e um campo imediato (campo de deslocamento) que são adicionados em conjunto para fornecer o endereço do operando na memória, por exemplo. A locação aqui mencionada implica tipicamente uma locação na memória principal (armazenamento primário) salvo se indicado de outra forma.
[243] Com referência à FIG. 20C, um processador acessa o armazenamento utilizando uma unidade de carga/armazenamento 5060. A unidade de carga/armazenamento 5060 pode realizar uma operação de carga obtendo o endereço do operando de destino na memória 5053 e carregando o operando num registro 5059 ou em outra locação de memória 5053, ou pode realizar uma operação de armazenamento obtendo o endereço do operando de destino na memória 5053 e armazenando os dados obtidos de um registro 5059 ou de outra locação de memória 5053 na locação do operando de destino na memória 5053. A unidade de carga/armazenamento 5060 pode ser especulativa e pode acessar a memória numa sequência que está fora da ordem em relação à sequência de instrução, entretanto, a unidade de carga/armazenamento 5060 deve manter a aparência para os programas cujas instruções sejam executadas em ordem. A unidade de carga/armazenamento 5060 pode se comunicar com registros gerais 5059, unidade de decodificação/despacho 5056, interface cache/memória 5053 ou outros elementos 5083 e compreende vários circuitos de registro, ALUs 5085 e lógica de controle 5090 para calcular os endereços de armazenamento e fornecer o sequenciamento pipeline para manter as operações em ordem. Algumas operações podem estar fora de ordem, mas a unidade de carga/armazenamento fornece a funcionalidade de fazer com que as operações fora de ordem apareçam no programa como sendo realizadas em ordem, como é bem conhecido pelos especialistas.
[244] De preferência, os endereços que um programa aplicativo “vê” são em geral chamados endereços virtuais. Os endereços virtuais são algumas vezes chamados “endereços lógicos” e “endereços efetivos”. Esses endereços virtuais são virtuais na medida em que são redirecionados para locações físicas de memória por uma ou uma variedade de tecnologias de tradução dinâmica de endereços (DAT), incluindo, sem limitação a, pré-fixar simplesmente um endereço virtual com um valor de deslocamento, traduzir o endereço virtual por meio de uma ou mais tabelas de tradução, tabelas de tradução essas compreendendo, de preferência, pelo menos, uma tabela de segmento e uma tabela de página sozinhas ou em combinação, preferencialmente a tabela de segmento possuindo uma entrada apontando para a tabela de página. No z/Architecture®, é fornecida uma hierarquia de tradução 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. O desempenho da tradução do endereço é com frequência aperfeiçoado pela utilização de um buffer de tradução lookaside (TLB) que compreende entradas mapeando um endereço virtual para uma locação de memória física associada. As entradas são criadas quando a DAT traduz um endereço virtual utilizando as tabelas de tradução. O uso subsequente do endereço virtual pode então utilizar a entrada do TLB rápido em vez dos acessos da tabela de tradução sequencial lenta. O conteúdo do TLB pode ser gerenciado por uma variedade de algoritmos de substituição incluindo LRU (Menos Usado Recentemente).
[245] No caso em que o processador pertence a um sistema multiprocessador, cada processador tem responsabilidade de manter recursos compartilhados, tais como E/S, caches, TLBs e memória, integrados para coerência. Tipicamente, as tecnologias snoopingserão utilizadas na manutenção da coerência de cache. Num ambiente snooping, cada linha de cache pode ser marcada como estando em qualquer estado compartilhado, estado exclusivo, estado modificado, estado inválido e similares a fim de facilitar o compartilhamento.
[246] As unidades E/S 5054 (FIG. 19) fornecem ao processador os meios para se anexar aos dispositivos periféricos incluindo fita, disco, impressoras, vídeos, e estações de trabalho, por exemplo. As unidades E/S são frequentemente apresentadas ao programa de computador por drivers de software. Em mainframes, tais como o Sistema z® da IBM, adaptadores de canal e adaptadores de sistema aberto são unidades E/S do mainframe que fornece as comunicações entre o sistema operacional e os dispositivos periféricos.
[247] Além disso, outros tipos de ambientes computacionais podem se beneficiar de um ou mais aspectos da presente invenção. Como exemplo, um ambiente pode incluir um emulador (e.g., software ou outros mecanismos de emulação), no qual uma arquitetura particular (incluindo, por exemplo, instrução de execução, funções arquitetadas, tais como tradução de endereço, e registros arquitetados) ou um subconjunto dela é emulado (e.g., num sistema de computador nativo com processador e memória). Nesse ambiente, uma ou mais funções de emulação do emulador podem implantar um ou mais aspectos da presente invenção, mesmo que o computador executando a emulação tenha arquitetura diferente das capacidades sendo emuladas. Como exemplo, no modo emulação, a instrução ou a operação específica sendo emulada é decodificada, e é construída uma função de emulação apropriada para implementar a instrução ou operação individual.
[248] Num ambiente de emulação, um computador hospedeiro inclui, por exemplo, memória para armazenar instruções e dados, unidade de busca de instruções para buscar instruções da memória e para, opcionalmente, fornecer a retenção local para a instrução buscada; unidade de decodificação de instrução para receber a instrução buscada e para determinar o tipo de instruções que foram buscadas; e unidade de execução de instrução para executar as instruções. A execução pode incluir carregamento de dados num registro da memória; armazenando os dados de volta na memória a partir de um registro; ou realização de algum tipo de operação lógica ou aritmética, como determinado pela unidade de decodificação. Num exemplo, cada unidade está implementada em software. Por exemplo, as operações sendo executadas pelas unidades são implementadas como uma ou mais sub-rotinas dentro do software emulador.
[249] Mais particularmente, num mainframe, instruções arquitetadas de máquina são utilizadas pelos programadores, usualmente hoje programadores de “C”, com frequência por meio de um aplicativo compilador. Essas instruções armazenadas na mídia de armazenamento podem ser executadas originariamente num Servidor IBM z/Architecture®, ou alternativamente em máquinas executando outras arquiteturas. Podem ser emuladas nos servidores mainframe IBM® existentes ou futuros e em outras máquinas da IBM® (e.g., servidores Power Systems e System x®). Podem ser executadas em máquinas que rodam Linux numa ampla variedade de máquinas usando hardware fabricado pela IBM®, Intel®, AMD™, e outros. Além da execução nesse hardware no z/Architecture®, o Linux pode ser utilizado assim como máquinas que usam emulação por TurboHercules (www.turbohercules.com/), Hercules (www.hercules-390.org/) ou FSI (Fundamental Software, Inc.) (www.funsoft.com/), em que a execução geralmente é em modo de emulação. No modo emulação, o software de emulação é executado por um processador nativo para emular a arquitetura de um processador emulado.
[250] O processador nativo tipicamente executa o software de emulação compreendendo ou firmware ou sistema operacional nativo para realizar a emulação do processador emulado. O software de emulação é responsável por buscar e executar instruções da arquitetura do processador emulado. O software de emulação mantém um contador de programa emulado para manter o rastreamento dos limites da instrução. O software de emulação pode buscar uma ou mais instruções de máquina emulada de cada vez e convertê-las para um grupo correspondente de instruções de máquinas de origem para execução pelo processador de origem. Essas instruções convertidas podem ser armazenadas de forma que pode ser conseguida uma conversão mais rápida. Não obstante, o software de emulação deve manter as regras de arquitetura da arquitetura do processador emulado de forma a assegurar a correta operação dos sistemas operacionais e aplicativos escritos para o processador emulado. Além disso, o software de emulação deve prover recursos identificados pela arquitetura do processador emulado, incluindo, sem limitação a, registros de controle, registros de propósito geral, registros de ponto flutuante, função de tradução dinâmica de endereços incluindo tabelas de segmento e tabelas de página, por exemplo, mecanismos de interrupção, mecanismos de alternância de contexto, relógios TOD e interfaces arquitetadas para subsistemas E/S de forma que um sistema operacional ou um programa aplicativo designados para rodar no processador emulado possam rodar no processador de origem que possui o software de emulação.
[251] Uma instrução específica sendo emulada é decodificada, e uma sub-rotina é convocada para realizar a função da instrução individual. Uma função do software de emulação emulando uma função de um processador emulado é implementada, por exemplo, numa sub-rotina ou num driver “C”, ou algum outro método de fornecimento de driver para o hardware específico, conforme poderá ser feito pelos especialistas, após o entendimento da descrição da concretização preferencial. Várias patentes de emulação de software e de hardware incluindo, mas sem limitação a, Carta-Patente dos EUA N° 5.551.013, intitulado "Multiprocessor for Hardware Emulation’” (Multiprocessador para Emulação de Hardware), de Beausoleil et al.; e Carta- Patente dos EUA N° 6.009.261, intitulado "Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor”(Pré- processamento de Rotinas de Destino Armazenadas Emulando Instruções Incompatíveis num Processador de Destino), de Scalzi et al; e Carta-Patente dos EUA N° 5.574.873, intitulado "Decoding Guest Instruction on Directly Access Emulation Routines that Emulate the Guest Instructions” (Decodificando Instrução Convidada nas Rotinas de Emulação de Acesso Direto que Emulam Instruções Convidadas), de Davidian et al; e Carta-Patente dos EUA N° 6.308.255, intitulado "Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System” (Barramentos e Circuitos Integrados de Multiprocessamento Simétrico Utilizados para Suporte de Coprocessador Permitindo que um Código não Nativo seja Executado num Sistema), de Gorishek et al; e Carta-Patente dos EUA n° 6.463.582, intitulado "Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method” (Tradutor Dinâmico de Código de Otimização de Objeto para Emulação de Arquitetura e Método de Tradução Dinâmica de Código de Otimização de Objeto), de Lethin et al; e Carta-Patente dos EUA N° 5.790.825, intitulado "Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions”(Método para Emulação de Instruções Convidadas num Computador Hospedeiro através da Recompilação Dinâmica de Instruções Hospedeiras), de Eric Traut; e muitas outras, disponíveis para os especialistas, ilustram uma variedade de maneiras conhecidas de obter emulação de um formato de instrução arquitetada para uma máquina diferente para uma máquina de destino.
[252] Na FIG. 21, temos um exemplo de um sistema de computador hospedeiro emulado 5092 que emula um sistema de computador hospedeiro 5000’ de uma arquitetura hospedeira. No sistema de computador hospedeiro emulado 5092, o processador hospedeiro (CPU) 5091 é um processador hospedeiro emulado (ou processador hospedeiro virtual) e compreende um processador hospedeiro 5093 que possui arquitetura do conjunto de instruções de origem diferente da do processador 5091 do computador hospedeiro 5000’. O sistema de computador hospedeiro emulado 5092 possui memória 5094 acessível ao processador de emulação 5093. Na concretização exemplificada, a memória 5094 é particionada em uma parte de memória de computador hospedeiro 5096 e em uma parte de rotinas de emulação 5097. A memória do computador hospedeiro 5096 está disponível para programas do computador hospedeiro emulado 5092 de acordo com a arquitetura do computador hospedeiro. O processador de emulação 5093 executa instruções de origem de um conjunto de instruções arquitetadas de uma arquitetura diferente daquela do processador emulado 5091, as instruções de origem sendo obtidas da memória de rotinas de emulação 5097, e podem acessar uma instrução hospedeira para execução a partir de um programa na memória do computador hospedeiro 5096 mediante a utilização de uma ou mais instruções obtidas numa rotina de sequência &acesso/decodificação que pode decodificar as instruções hospedeiras acessadas para determinar uma rotina de execução de instrução de origem para emulação da função da instrução hospedeira acessada. Outros recursos que estão definidos para a arquitetura do sistema de computador hospedeiro 5000’ podem ser emulados por rotinas de recursos arquitetados, incluindo recursos como registros de propósito geral, registros de controle, tradução dinâmica de endereço e suporte de subsistema E/S e cache de processamento, como exemplo. As rotinas de emulação podem também tirar vantagem 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 aperfeiçoar o desempenho das rotinas de emulação. Hardware especial e máquinas de redução de carga podem ser também fornecidas para auxiliar o processador 5093 na emulação da função do computador hospedeiro 5000’.
[253] A terminologia aqui utilizada serve ao propósito apenas de descrever concretizações particulares e não pretende ser limitadora da invenção. Conforme utilizado neste documento, as formas “um”, “uma” e “o”, “a” incluem também as formas plurais, salvo se o contexto claramente indicar o contrário. Fica entendido ainda que os termos “compreende” e/ou “compreendendo”, quando utilizados nesta especificação, determinam a presença de certas características, números inteiros, passos, operações, elementos, e/ou componentes, mas não excluem a presença ou adição de uma ou mais outras características, inteiros, passos, operações, elementos componentes e/ou grupos delas.
[254] As estruturas, materiais, ações e equivalentes de todos os modos ou passos mais os elementos de função correspondentes nas reivindicações abaixo, se houver, pretendem incluir qualquer estrutura, material ou ação para o desempenho da função em combinação com outros elementos reivindicados conforme especificamente reivindicados. A descrição da presente invenção está sendo apresentada com o propósito de ilustração e de descrição, mas não pretende ser exaustiva ou limitada à invenção na forma revelada. Muitas modificações e variações serão evidentes para os especialistas no assunto sem partir do escopo da invenção. A concretização foi escolhida e descrita a fim de melhor explicar os princípios da invenção e as aplicações práticas, e para permitir que outros versados na matéria apreendam a invenção para várias concretizações com várias modificações conforme adequadas ao uso particular contemplado.

Claims (10)

1. EQUIPAMENTO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, caracterizado por: memória (104); processador (102) em comunicação com a memória(104), onde o equipamento (100) é configurado de modo a realizar um método que compreende a execução, por um processador (102) acoplado a um adaptador (110), de uma instrução, tal instrução compreendendo uma solicitação feita por uma configuração para acessar o adaptador (110), sendo o adaptador (110) identificado por um identificador de função (184) fornecido com a solicitação, e a execução compreendendo utilizar o identificador de função (184) para selecionar de uma tabela de função uma entrada da tabela de função particular para o adaptador (110) especificado pelo identificador de função (184), dita entrada da tabela de função estando armazenada na memória (104) associada ao processador (102) incluindo informação para determinar se a configuração possui permissão para acessar o adaptador (110); e determinar, através do processador (102), baseado em informação da entrada da tabela de função se a configuração possui permissão de acesso ao adaptador (110), onde a determinação compreende a comparação de um ou mais atributos de configuração solicitando acesso ao adaptador (110) para um ou mais atributos selecionados da entrada da tabela de função para determinar se a configuração tem permissão para acessar o adaptador (110), e permitir o acesso ao adaptador (110), baseado na determinação de que a configuração tem permissão para acessar o adaptador (110).
2. EQUIPAMENTO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 1, caracterizado por: a determinação compreender a comparação de um número de zona (202) na entrada da tabela de função (182) com o número de zona da configuração, em que a configuração possui acesso permitido mediante a resposta da comparação indicar igualdade.
3. EQUIPAMENTO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 1, caracterizado por: a configuração compreender um convidado, e a determinação compreender a verificação na entrada da tabela de função de um identificador do convidado (204), em que o convidado possui permissão de acesso, em resposta ao identificador estar na entrada da tabela de função.
4. EQUIPAMENTO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 1, caracterizado por: o método compreender ainda a determinação para saber se o acesso deve ser bloqueado por um ou mais motivos diferentes da verificação da permissão, tal determinação utilizando a informação de estado da entrada da tabela de função (182), em que o acesso é permitido em resposta à determinação de que ele não deve ser bloqueado.
5. EQUIPAMENTO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 4, caracterizado por: ser determinado que o acesso deva ser bloqueado, e, o método mencionado compreenda ainda decisão sobre se o acesso deve ser bloqueado temporariamente; e fornecimento de um indicador de ocupado para a configuração mediante a determinação de que o acesso deve ser bloqueado temporariamente.
6. EQUIPAMENTO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 1, caracterizado por: o método compreender ainda determinação de uma pluralidade de adaptadores (110) disponíveis para o ambiente computacional; criação de uma entrada da tabela de função (182) para cada adaptador (110) da pluralidade de adaptadores (110); determinação de quais adaptadores (110) dentre a pluralidade de adaptadores (110) estão acessíveis à configuração; e indicação na entrada da tabela de função de cada adaptador (110) que está acessível às informações de configuração relativas à configuração.
7. EQUIPAMENTO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 1, caracterizado por: A instrução ser baseada na arquitetura do adaptador (110).
8. MÉTODO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL caracterizado pelas etapas de: execução, por um processador (102) acoplado a um adaptador (110), de uma instrução, tal instrução compreendendo uma solicitação feita por uma configuração para acessar o adaptador (110), sendo o adaptador (110) identificado por um identificador de função (184) fornecido com a solicitação, e a execução compreendendo utilizar o identificador de função (184) para selecionar de uma tabela de função uma entrada da tabela de função particular para o adaptador (110) especificado pelo identificador de função (184), dita entrada da tabela de função estando armazenada na memória (104) associada ao processador (102) incluindo informação para determinar se a configuração possui permissão para acessar o adaptador (110); e determinar, através do processador (102), baseado em informação da entrada da tabela de função se a configuração possui permissão de acesso ao adaptador (110), onde a determinação compreende a comparação de um ou mais atributos de configuração solicitando acesso ao adaptador (110) para um ou mais atributos selecionados da entrada da tabela de função para determinar se a configuração tem permissão para acessar o adaptador (110), e permitir o acesso ao adaptador (110), baseado na determinação de que a configuração tem permissão para acessar o adaptador (110).
9. MÉTODO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 8, caracterizado por: a determinação compreender a comparação de um número de zona (202) na entrada da tabela de função (182) com o número de zona da configuração, em que a configuração possui acesso permitido mediante a resposta da comparação indicar igualdade.
10. MÉTODO PARA CONTROLE DE ACESSO A ADAPTADORES NUM AMBIENTE COMPUTACIONAL, de acordo com a reivindicação 8, caracterizado por: determinação para saber se o acesso deve ser bloqueado por um ou mais motivos diferentes da verificação da permissão, tal determinação utilizando a informação de estado da entrada da tabela de função, em que o acesso é permitido em resposta à determinação de que ele não deve ser bloqueado.
BR112012032854-9A 2010-06-23 2010-11-08 método e equipamento para controle de acesso a adaptadores num ambiente computacional BR112012032854B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/821,184 US8626970B2 (en) 2010-06-23 2010-06-23 Controlling access by a configuration to an adapter function
US12/821,184 2010-06-23
PCT/EP2010/067041 WO2011160720A1 (en) 2010-06-23 2010-11-08 Controlling access by a configuration to an adapter function

Publications (2)

Publication Number Publication Date
BR112012032854A2 BR112012032854A2 (pt) 2018-02-27
BR112012032854B1 true BR112012032854B1 (pt) 2021-05-11

Family

ID=43806959

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112012032854-9A BR112012032854B1 (pt) 2010-06-23 2010-11-08 método e equipamento para controle de acesso a adaptadores num ambiente computacional

Country Status (9)

Country Link
US (1) US8626970B2 (pt)
EP (1) EP2430536B1 (pt)
JP (1) JP5629373B2 (pt)
CN (1) CN102906701B (pt)
BR (1) BR112012032854B1 (pt)
HK (1) HK1180803A1 (pt)
NO (1) NO2430536T3 (pt)
PL (1) PL2430536T3 (pt)
WO (1) WO2011160720A1 (pt)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US8510599B2 (en) * 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US9448847B2 (en) 2011-07-15 2016-09-20 Throughputer, Inc. Concurrent program execution optimization
FR2989800B1 (fr) * 2012-04-18 2014-11-21 Schneider Electric Ind Sas Systeme de gestion d'applications securisees et non securisees sur un meme microcontroleur
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9513906B2 (en) * 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
KR101558673B1 (ko) 2013-11-18 2015-10-12 자동차부품연구원 차량용 obd 단자 어댑터
US10089129B2 (en) * 2014-06-30 2018-10-02 International Business Machines Corporation Supporting flexible deployment and migration of virtual servers via unique function identifiers
US10248468B2 (en) 2016-01-11 2019-04-02 International Business Machines Corporation Using hypervisor for PCI device memory mapping
JP6619690B2 (ja) * 2016-05-19 2019-12-11 日本電信電話株式会社 処理装置、アクセス制御システム、アクセス制御方法およびアクセス制御プログラム
US10338135B2 (en) 2016-09-28 2019-07-02 Amazon Technologies, Inc. Extracting debug information from FPGAs in multi-tenant environments
US11099894B2 (en) 2016-09-28 2021-08-24 Amazon Technologies, Inc. Intermediate host integrated circuit between virtual machine instance and customer programmable logic
US10250572B2 (en) 2016-09-29 2019-04-02 Amazon Technologies, Inc. Logic repository service using encrypted configuration data
US10282330B2 (en) * 2016-09-29 2019-05-07 Amazon Technologies, Inc. Configurable logic platform with multiple reconfigurable regions
US10162921B2 (en) 2016-09-29 2018-12-25 Amazon Technologies, Inc. Logic repository service
US10423438B2 (en) 2016-09-30 2019-09-24 Amazon Technologies, Inc. Virtual machines controlling separate subsets of programmable hardware
US10642492B2 (en) 2016-09-30 2020-05-05 Amazon Technologies, Inc. Controlling access to previously-stored logic in a reconfigurable logic device
US11115293B2 (en) 2016-11-17 2021-09-07 Amazon Technologies, Inc. Networked programmable logic service provider
FR3060145B1 (fr) * 2016-12-09 2020-06-26 Etablissements Georges Renault Procede de gestion de fonctionnalites optionnelles dans un systeme de vissage, systeme, concentrateur et produit programme d'ordinateur correspondant.
LU100069B1 (en) * 2017-02-10 2018-09-27 Univ Luxembourg Improved computing apparatus
WO2019005857A1 (en) * 2017-06-28 2019-01-03 Apple Inc. LAW ENFORCEMENT SYSTEM
US10445279B1 (en) 2018-07-19 2019-10-15 Mellanox Technologies, Ltd. Automatic PCIe operating mode configuration
US10503682B1 (en) * 2018-12-19 2019-12-10 Mellanox Technologies, Ltd. Accessing PCIe configuration data through network

Family Cites Families (205)

* 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
US4271468A (en) 1979-11-06 1981-06-02 International Business Machines Corp. Multiprocessor mechanism for handling channel interrupts
AU7804381A (en) 1981-10-13 1983-05-05 International Business Machines Corp. Method and apparatus for measurements of channel operation
US5053952A (en) 1987-06-05 1991-10-01 Wisc Technologies, Inc. Stack-memory-based writable instruction set computer having a single data bus
US5282274A (en) 1990-05-24 1994-01-25 International Business Machines Corporation Translation of multiple virtual pages upon a TLB miss
US5170472A (en) 1991-03-28 1992-12-08 International Business Machines Corp. Dynamically changing a system i/o configuration definition
US5465355A (en) 1991-09-04 1995-11-07 International Business Machines Corporation Establishing and restoring paths in a data processing I/O system
JPH05165715A (ja) 1991-12-12 1993-07-02 Nec Corp 情報処理装置
JPH0821015B2 (ja) 1992-01-20 1996-03-04 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータならびにそのシステム再構成化装置および方法
US5617554A (en) 1992-02-10 1997-04-01 Intel Corporation Physical address size selection and page size selection in an address translator
US5600805A (en) 1992-06-15 1997-02-04 International Business Machines Corporation Pass-through for I/O channel subsystem call instructions for accessing shared resources in a computer system having a plurality of operating systems
US5265240A (en) 1992-07-24 1993-11-23 International Business Machines Corporation Channel measurement method and means
US5465332A (en) 1992-09-21 1995-11-07 International Business Machines Corporation Selectable 8/16 bit DMA channels for "ISA" bus
JP2500101B2 (ja) 1992-12-18 1996-05-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 共用変数の値を更新する方法
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
BR9508189A (pt) 1994-06-28 1997-08-12 Intel Corp Conversor de protocolo de interrupção de pci para isa e mecanismo de seleção
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
US5586268A (en) 1995-03-03 1996-12-17 Advanced System Products, Inc. Multiple peripheral adapter device driver architecture
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
US5671365A (en) 1995-10-20 1997-09-23 Symbios Logic Inc. I/O system for reducing main processor overhead in initiating I/O requests and servicing I/O completion events
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
US5995745A (en) 1996-12-23 1999-11-30 Yodaiken; Victor J. Adding real-time support to general purpose operating systems
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
US6272257B1 (en) 1997-04-30 2001-08-07 Canon Kabushiki Kaisha Decoder of variable length codes
US5923858A (en) * 1997-05-01 1999-07-13 Cirrus Logic, Inc. Method and apparatus to interface a peripheral device operating in an internal clock domain to a PCI bus operating in a PCI clock domain
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
US6460094B1 (en) 1998-07-08 2002-10-01 Microsoft Corporation Peripheral device configured to detect the type of interface to which it is connected and configuring itself accordingly
US6615305B1 (en) 1998-08-27 2003-09-02 Intel Corporation Interrupt pacing in data transfer unit
US20020147969A1 (en) 1998-10-21 2002-10-10 Richard A. Lethin 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
US6397350B1 (en) 1999-02-19 2002-05-28 International Business Machines Corporation Method of providing direct data processing access using a queued direct input-output device
US6519645B2 (en) 1999-02-19 2003-02-11 International Business Machine Corporation Method and apparatus for providing configuration information using a queued direct input-output device
US6349380B1 (en) 1999-03-12 2002-02-19 Intel Corporation Linear address extension and mapping to physical memory using 4 and 8 byte page table entries in a 32-bit microprocessor
US6557035B1 (en) 1999-03-30 2003-04-29 International Business Machines Corporation Rules-based method of and system for optimizing server hardware capacity and performance
US6330656B1 (en) 1999-03-31 2001-12-11 International Business Machines Corporation PCI slot control apparatus with dynamic configuration for partitioned systems
US6578191B1 (en) 1999-05-17 2003-06-10 International Business Machines Corporation Method and apparatus for dynamic generation of adapters
US6330647B1 (en) 1999-08-31 2001-12-11 Micron Technology, Inc. Memory bandwidth allocation based on access count priority scheme
US6772097B1 (en) 1999-09-30 2004-08-03 Intel Corporation Retrieving I/O processor performance monitor data
US6493741B1 (en) 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
US6970992B2 (en) 1999-10-04 2005-11-29 Intel Corporation Apparatus to map virtual pages to disparate-sized, non-contiguous real pages and methods relating thereto
US6651126B1 (en) 1999-10-29 2003-11-18 Texas Instruments Incorporated Snapshot arbiter mechanism
US6529978B1 (en) 2000-02-23 2003-03-04 International Business Machines Corporation Computer input/output (I/O) interface with dynamic I/O adaptor processor bindings
US6963940B1 (en) 2000-03-30 2005-11-08 International Business Machines Corporation Measuring utilization of individual components of channels
US6581130B1 (en) 2000-04-04 2003-06-17 Hewlett Packard Development Company, L.P. Dynamic remapping of address registers for address translation between multiple busses
US6629175B1 (en) 2000-04-14 2003-09-30 International Business Machines Corporation Efficient adapter context switching
US6772264B1 (en) 2000-05-22 2004-08-03 International Business Machines Corporation Enabling a docking station for ISA adapters
US6715011B1 (en) 2000-05-31 2004-03-30 International Business Machines Corporation PCI/PCI-X bus bridge with performance monitor
US6654818B1 (en) 2000-06-22 2003-11-25 International Business Machines Corporation DMA access authorization for 64-bit I/O adapters on PCI bus
US6611883B1 (en) 2000-11-16 2003-08-26 Sun Microsystems, Inc. Method and apparatus for implementing PCI DMA speculative prefetching in a message passing queue oriented bus system
US6704831B1 (en) 2000-11-16 2004-03-09 Sun Microsystems, Inc. Method and apparatus for converting address information between PCI bus protocol and a message-passing queue-oriented bus protocol
US6658521B1 (en) 2000-12-22 2003-12-02 International Business Machines Corporation Method and apparatus for address translation on PCI bus over infiniband network
US6721839B1 (en) 2000-12-27 2004-04-13 International Business Machines Corporation Method of mapping multiple address spaces into single PCI bus
JP4346850B2 (ja) * 2001-01-23 2009-10-21 インターナショナル・ビジネス・マシーンズ・コーポレーション Osイメージごとに論理分割された論理分割データ処理システム
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
US6880021B2 (en) 2001-09-28 2005-04-12 International Business Machines Corporation Intelligent interrupt with hypervisor collaboration
US20040025166A1 (en) 2002-02-02 2004-02-05 International Business Machines Corporation Server computer and a method for accessing resources from virtual machines of a server computer via a fibre channel
US6901537B2 (en) 2002-02-27 2005-05-31 International Business Machines Corporation Method and apparatus for preventing the propagation of input/output errors in a logical partitioned data processing system
US6907510B2 (en) 2002-04-01 2005-06-14 Intel Corporation Mapping of interconnect configuration space
US7302692B2 (en) 2002-05-31 2007-11-27 International Business Machines Corporation Locally providing globally consistent information to communications layers
US7299266B2 (en) 2002-09-05 2007-11-20 International Business Machines Corporation Memory management offload for RDMA enabled network adapters
US7197585B2 (en) 2002-09-30 2007-03-27 International Business Machines Corporation Method and apparatus for managing the execution of a broadcast instruction on a guest processor
US7054972B2 (en) 2002-12-13 2006-05-30 Lsi Logic Corporation Apparatus and method for dynamically enabling and disabling interrupt coalescing in data processing system
US7065598B2 (en) 2002-12-20 2006-06-20 Intel Corporation Method, system, and article of manufacture for adjusting interrupt levels
KR100449807B1 (ko) 2002-12-20 2004-09-22 한국전자통신연구원 호스트 버스 인터페이스를 갖는 데이터 전송 프로토콜제어 시스템
US20040139304A1 (en) 2003-01-09 2004-07-15 International Business Machines Corporation High speed virtual instruction execution mechanism
US20040139305A1 (en) 2003-01-09 2004-07-15 International Business Machines Corporation Hardware-enabled instruction tracing
US7073002B2 (en) 2003-03-13 2006-07-04 International Business Machines Corporation Apparatus and method for controlling resource transfers using locks in a logically partitioned computer system
US7107382B2 (en) 2003-04-03 2006-09-12 Emulex Design & Manufacturing Corporation Virtual peripheral component interconnect multiple-function device
US7139940B2 (en) 2003-04-10 2006-11-21 International Business Machines Corporation Method and apparatus for reporting global errors on heterogeneous partitioned systems
US7281075B2 (en) 2003-04-24 2007-10-09 International Business Machines Corporation Virtualization of a global interrupt queue
US7130949B2 (en) 2003-05-12 2006-10-31 International Business Machines Corporation Managing input/output interruptions in non-dedicated interruption hardware environments
US7290070B2 (en) 2003-05-12 2007-10-30 International Business Machines Corporation Multiple logical input/output subsystem facility
US7174550B2 (en) 2003-05-12 2007-02-06 International Business Machines Corporation Sharing communications adapters across a plurality of input/output subsystem images
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
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
US7000036B2 (en) 2003-05-12 2006-02-14 International Business Machines Corporation Extended input/output measurement facilities
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
US7130938B2 (en) 2003-05-12 2006-10-31 International Business Machines Corporation Method, system and program products for identifying communications adapters of a computing environment
US7134052B2 (en) 2003-05-15 2006-11-07 International Business Machines Corporation Autonomic recovery from hardware errors in an input/output fabric
US6931460B2 (en) 2003-05-19 2005-08-16 Emulex Design & Manufacturing Corporation Dynamically self-adjusting polling mechanism
US7420931B2 (en) 2003-06-05 2008-09-02 Nvidia Corporation Using TCP/IP offload to accelerate packet filtering
US7613109B2 (en) 2003-06-05 2009-11-03 Nvidia Corporation Processing data for a TCP connection using an offload unit
EP1489491A1 (en) 2003-06-19 2004-12-22 Texas Instruments Incorporated Dynamically changing the semantic of an instruction
US7013358B2 (en) 2003-08-09 2006-03-14 Texas Instruments Incorporated System for signaling serialized interrupts using message signaled interrupts
US7979548B2 (en) 2003-09-30 2011-07-12 International Business Machines Corporation Hardware enforcement of logical partitioning of a channel adapter's resources in a system area network
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
US7530071B2 (en) 2004-04-22 2009-05-05 International Business Machines Corporation Facilitating access to input/output resources via an I/O partition shared by multiple consumer partitions
US7209994B1 (en) 2004-05-11 2007-04-24 Advanced Micro Devices, Inc. Processor that maintains virtual interrupt state and injects virtual interrupts into virtual machine guests
US20050289271A1 (en) 2004-06-29 2005-12-29 Martinez Alberto J Circuitry to selectively produce MSI signals
US20060005083A1 (en) 2004-06-30 2006-01-05 International Business Machines Corporation Performance count tracing
US7496706B2 (en) 2004-06-30 2009-02-24 Intel Corporation Message signaled interrupt redirection table
US7418572B2 (en) 2004-08-18 2008-08-26 International Business Machines Corporation Pretranslating input/output buffers in environments with multiple page sizes
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
US7444493B2 (en) 2004-09-30 2008-10-28 Intel Corporation Address translation for input/output devices using hierarchical translation tables
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
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
US7260664B2 (en) 2005-02-25 2007-08-21 International Business Machines Corporation Interrupt mechanism on an IO adapter that supports virtualization
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
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
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
US7260663B2 (en) 2005-04-07 2007-08-21 International Business Machines Corporation System and method for presenting interrupts
US7200704B2 (en) 2005-04-07 2007-04-03 International Business Machines Corporation Virtualization of an I/O adapter port using enablement and activation functions
US7478178B2 (en) 2005-04-22 2009-01-13 Sun Microsystems, Inc. Virtualization for device sharing
US7502872B2 (en) 2005-05-23 2009-03-10 International Bsuiness Machines Corporation Method for out of user space block mode I/O directly between an application instance and an I/O adapter
US7225287B2 (en) 2005-06-01 2007-05-29 Microsoft Corporation Scalable DMA remapping on a computer bus
US7516252B2 (en) 2005-06-08 2009-04-07 Intel Corporation Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment
US20060288130A1 (en) 2005-06-21 2006-12-21 Rajesh Madukkarumukumana Address window support for direct memory access translation
US7631097B2 (en) 2005-07-21 2009-12-08 National Instruments Corporation Method and apparatus for optimizing the responsiveness and throughput of a system performing packetized data transfers using a transfer count mark
US8028154B2 (en) 2005-07-29 2011-09-27 Broadcom Corporation Method and system for reducing instruction storage space for a processor integrated in a network adapter chip
US7546487B2 (en) 2005-09-15 2009-06-09 Intel Corporation OS and firmware coordinated error handling using transparent firmware intercept and firmware services
US20070073955A1 (en) 2005-09-29 2007-03-29 Joseph Murray Multi-function PCI device
US7882489B2 (en) 2005-11-22 2011-02-01 International Business Machines Corporation Integrated code generation for adapter-specific property template
US7475183B2 (en) 2005-12-12 2009-01-06 Microsoft Corporation Large page optimizations in a virtual machine environment
US20070136554A1 (en) 2005-12-12 2007-06-14 Giora Biran Memory operations in a virtualized system
US7398343B1 (en) 2006-01-03 2008-07-08 Emc Corporation Interrupt processing system
US7328296B1 (en) 2006-01-03 2008-02-05 Emc Corporation Interrupt processing system
US7673116B2 (en) 2006-01-17 2010-03-02 Advanced Micro Devices, Inc. Input/output memory management unit that implements memory attributes based on translation data
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)
US7548999B2 (en) 2006-01-17 2009-06-16 Advanced Micro Devices, Inc. Chained hybrid input/output memory management unit
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)
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
JP2008090375A (ja) 2006-09-29 2008-04-17 Hitachi Ltd 割込み制御システム、およびこれを利用した記憶制御システム
US9135951B2 (en) 2006-10-10 2015-09-15 Qualcomm Incorporated System and method for dynamic audio buffer management
US7587575B2 (en) 2006-10-17 2009-09-08 International Business Machines Corporation Communicating with a memory registration enabled adapter using cached address translations
US20080091868A1 (en) 2006-10-17 2008-04-17 Shay Mizrachi Method and System for Delayed Completion Coalescing
US20080098197A1 (en) 2006-10-20 2008-04-24 International Business Machines Corporation Method and System For Address Translation With Memory Windows
JP2008123298A (ja) 2006-11-13 2008-05-29 Canon Inc 情報処理方法及びシステム
US7849287B2 (en) 2006-11-13 2010-12-07 Advanced Micro Devices, Inc. Efficiently controlling special memory mapped system accesses
US7624235B2 (en) 2006-11-30 2009-11-24 Apple Inc. Cache used both as cache and staging buffer
US7529860B2 (en) 2006-12-19 2009-05-05 International Business Machines Corporation System and method for configuring an endpoint based on specified valid combinations of functions
US7984454B2 (en) 2006-12-19 2011-07-19 International Business Machines Corporation Migration of single root stateless virtual functions
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
US7617345B2 (en) 2007-07-02 2009-11-10 International Business Machines Corporation Prioritization of interrupts in a storage controller based on interrupt control directives received from hosts
US20090024823A1 (en) 2007-07-20 2009-01-22 Wenjeng Ko Overlayed separate dma mapping of adapters
US8127296B2 (en) 2007-09-06 2012-02-28 Dell Products L.P. Virtual machine migration between processors having VM migration registers controlled by firmware to modify the reporting of common processor feature sets to support the migration
US8762999B2 (en) 2007-09-27 2014-06-24 Oracle America, Inc. Guest-initiated resource allocation request based on comparison of host hardware information and projected workload requirement
US8141094B2 (en) 2007-12-03 2012-03-20 International Business Machines Corporation Distribution of resources for I/O virtualized (IOV) adapters and management of the adapters through an IOV management partition via user selection of compatible virtual functions
US7913030B2 (en) 2007-12-28 2011-03-22 Sandisk Il Ltd. Storage device with transaction logging capability
US8151083B2 (en) 2008-01-11 2012-04-03 International Business Machines Corporation Dynamic address translation with frame management
US8037221B2 (en) 2008-01-16 2011-10-11 International Business Machines Corporation Dynamic allocation of DMA buffers in input/output adaptors
US7996628B2 (en) 2008-02-14 2011-08-09 International Business Machines Corporation Cross adapter shared address translation tables
US8332846B2 (en) 2008-02-28 2012-12-11 Sony Mobile Communications Ab Selective exposure to USB device functionality for a virtual machine by filtering descriptors
US20090276774A1 (en) 2008-05-01 2009-11-05 Junji Kinoshita Access control for virtual machines in an information system
US7743189B2 (en) 2008-05-05 2010-06-22 International Business Machines Corporation PCI function south-side data management
US8032680B2 (en) 2008-06-27 2011-10-04 Microsoft Corporation Lazy handling of end of interrupt messages in a virtualized environment
US8359408B2 (en) 2008-06-30 2013-01-22 Intel Corporation Enabling functional dependency in a multi-function device
US9262357B2 (en) 2008-09-29 2016-02-16 International Business Machines Corporation Associating process priority with I/O queuing
US8645596B2 (en) 2008-12-30 2014-02-04 Intel Corporation Interrupt techniques
US8321615B2 (en) 2009-12-18 2012-11-27 Intel Corporation Source core interrupt steering
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8504754B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Identification of types of sources of adapter interruptions
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification

Also Published As

Publication number Publication date
WO2011160720A1 (en) 2011-12-29
JP5629373B2 (ja) 2014-11-19
CN102906701B (zh) 2016-03-02
BR112012032854A2 (pt) 2018-02-27
US8626970B2 (en) 2014-01-07
EP2430536A1 (en) 2012-03-21
NO2430536T3 (pt) 2018-09-15
HK1180803A1 (zh) 2013-10-25
JP2013538379A (ja) 2013-10-10
CN102906701A (zh) 2013-01-30
EP2430536B1 (en) 2018-04-18
US20110320652A1 (en) 2011-12-29
PL2430536T3 (pl) 2018-08-31

Similar Documents

Publication Publication Date Title
BR112012032854B1 (pt) método e equipamento para controle de acesso a adaptadores num ambiente computacional
JP5731642B2 (ja) アダプタのアドレス・スペースへのゲスト・アクセスのための方法、システム、およびコンピュータ・プログラム
US8631222B2 (en) Translation of input/output addresses to memory addresses
AU2010355800B2 (en) Runtime determination of translation formats for adapter functions
JP5669938B2 (ja) コンピューティング環境のアダプタを使用可能にするための方法、システム、およびコンピュータ・プログラム
BR112012033821B1 (pt) método de gerenciamento de requisições de interrupção em um ambiente computacional
US20110320772A1 (en) Controlling the selectively setting of operational parameters for an adapter
US8621112B2 (en) Discovery by operating system of information relating to adapter functions accessible to the operating system
US8566480B2 (en) Load instruction for communicating with adapters
BR112012033279B1 (pt) método para fornecer interrupções aos convidados de um ambiente de computação e sistema
KR20130048732A (ko) 어댑터 인터럽션 요청들이 처리되는 레이트를 컨트롤하는 방법
KR101464899B1 (ko) 어댑터와 통신하기 위한 저장/저장 차단 명령

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]
B06A Patent application procedure suspended [chapter 6.1 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: 10 (DEZ) ANOS CONTADOS A PARTIR DE 11/05/2021, OBSERVADAS AS CONDICOES LEGAIS.