OUTB parece ser um encapsulamento de função para apenas um comando de montagem da mesma designação usada para se comunicar com periféricos mapeados por porta, como a máquina de escrever em sistemas compatíveis com PC IBM, que usam o intervalo de endereço de E/S 0x60-0x6f. Neste artigo, discutiremos o uso da função outb () C enquanto estiver usando o Ubuntu 20.04 Sistema operacional Linux. Para entender o funcionamento da função outb (), você precisa dar uma olhada na E/S pós-mapeada primeiro.”
O que é E/S mapeada por porta?
E/S mapeadas de memória e mapeadas por porta são as duas maneiras comuns pelas quais os chips de computador vinculam para dispositivos externos. No entanto, todas as abordagens parecem equivalentes quando se trata da periferia. A E/S mapeada por porta é acessível através de um conjunto específico de comandos da CPU e um espaço de endereço distinto e especializado. Os comandos de entrada e saída podem ser vistos nos processadores de computador Intel.
Para dar aos dispositivos de E/S um espaço de endereço diferente do armazenamento comum, um pino adicional “E/S” foi adicionado ao ponto de acesso da CPU ou um ônibus inteiro foi reservado para a E/S. É uma técnica de comunicação da CPU para periférica que é empregada quando comandos exclusivos são necessários porque o processador deve se comunicar com o RAM e os periféricos. Isso é frequentemente referido como E/S isolado, já que o endereço para E/S é separado daquele para armazenamento primário. A maneira alternativa e mais popular atualmente é a E/S mapeada pela memória, na qual não são necessários comandos extras, pois tudo compartilha o mesmo espaço de endereço. Mapped para a memória E/S é acessível quase da mesma maneira que a memória do programa e/ou a memória do usuário, pois é atraída para o mesmo espaço de endereço.
As operações de entrada e saída de porta de baixo nível são tratadas por esse grupo de métodos POSIX. Os métodos B-Suffix são procedimentos de largura de byte, os métodos W-Suffix são procedimentos de largura das palavras e os métodos _p-sufixo atrasam até que a E/S seja concluída. As operações de saída* executam a saída de porta, enquanto os processos in* fazem entrada de porta. Embora eles ainda possam ser usados no modo de usuário, eles geralmente são projetados para uso central interno.
#incluirPrecisamos usar O, O2 ou um compilador equivalente. Como os métodos são especificados como macros embutidas, as referências problemáticas do tempo de conexão podem resultar se a otimização não for ativada. Para instruir o kernel a permitir que o programa de modo de usuário use as portas de E/S em questão, você pode usar os comandos ioperm (2) ou, opcionalmente, os comandos iopl (2). Se você não executar isso, o programa terá uma falha de segmentação. Funções específicas de hardware como outb () e companheiros, em contraste com a maioria dos sistemas de DOS, o parâmetro de valor é fornecido primeiro e o parâmetro da porta segue.
Exemplo
Vamos dar uma olhada no uso da função outb () no programa C. Este programa será uma pequena demonstração de como podemos usá -lo em qualquer código do programa C sem olhar para sua saída, i.e., Na maioria das vezes, não será produzido da maneira que queremos. Então, precisamos criar um arquivo C em nosso sistema operacional Linux primeiro. Abra o terminal do shell através do uso de "Ctrl+Alt+T".
Depois disso, use as instruções de toque do Linux junto com o nome de um arquivo “outb.C ”a ser criado com o“.Extensão C ”no final. Este arquivo pode ser encontrado no diretório de trabalho atual do seu sistema Linux, i i.e., "lar". Abra o File Explorer e toque duas vezes no arquivo para abri -lo.
O arquivo vazio seria aberto na sua tela. Escreva o código C CELOW mostrado da função outb () e pressione o botão Salvar para salvá-lo. Iniciamos este código C com o uso de alguns cabeçalhos principais de C. Em primeiro lugar, adicionamos a “configuração.H ”Cabeçalho para configurar o código C. O “sys/io.H ”é o cabeçalho principal necessário para o uso e execução da função outb () no programa C. Então, nós adicionamos isso também. Depois disso, o SYS/IOCTL.H e Linux/Parport.h cabeçalho foi utilizado para o uso de informações relacionadas à porta. O stdio padrão.h e stdlib.Os cabeçalhos H são usados para usar a entrada e saída padrão no programa.
A inicialização da variável ADDR lançou a função principal (). A função iOporM () é usada para definir os bits de permissão de acesso à porta e passar o resultado para o resultado variável. A função outb () está aqui para executar a saída da porta. Você pode executar este programa em seu sistema com o compilador GCC.
Conclusão
Quanto aos benefícios e desvantagens, a troca de informações e os ônibus pode fazer com que o acesso à memória seja lento, pois os dispositivos periféricos operam mais lentamente do que RAM. A flexibilidade de E/S oferecida por plataformas mapeadas de memória, por outro lado, reduz a quantidade de lógica interna necessária para o processador, permitindo a implementação de CPUs mais rápidas, mais baratas e com eficiência de energia. Paralelamente aos sistemas RISC, a lógica é diminuir a complexidade para obter um sistema mais focado e confiável, que é útil para dispositivos incorporados, por exemplo. Este guia tem um dos exemplos básicos para demonstrar a idéia de função outb na linguagem C.