Processando Instruções
A unidade de busca é encarregada de carregar as instruções da memória. Primeiro ela vai verificar se a instrução requisitada pelo processador está no cache de instrução L1. Caso não esteja, ela vai para a memória cache L2. Se a instrução também não estiver lá, então ela tem que carregar diretamente da lenta memória RAM do sistema.Quando você liga seu computador todos os caches estão vazios, é claro, mas na medida em que o computador começa a carregar o sistema operacional, o processador começa a processar as primeiras instruções carregadas do disco rígido, fazendo com que o controlador de cache comece a carregar os caches e começar o espetáculo.
Depois que a unidade de busca pegou a instrução requisitada pelo processador para ser processada, ela a envia para a unidade de decodificação.
A unidade de decodificação irá então verificar o que aquela instrução específica faz. Ela faz isso através de consulta à memória ROM que existe dentro do processador, chamada microcódigo. Cada instrução que um determinado processador compreende possui seu próprio microcódigo. O microcódigo vai “ensinar” ao processador o que fazer. É como um guia passo-a-passo para cada instrução. Se a instrução carregada é, por exemplo, somar a+b, seu microcódigo dirá à unidade de decodificação que são necessários dois parâmetros, a e b. A unidade de decodificação vai então requisitar que a unidade de busca pegue a informação presente nas duas posições de memória seguintes, que seja compatível com os valores para a e b. Depois que a unidade de decodificação “traduziu” a instrução e coletou todas as informações necessárias para executar a instrução, ela irá passar todas as informações e o “guia passo-a-passo” sobre como executar aquela instrução para a unidade de execução.
A unidade de execução irá então finalmente executar a instrução. Em processadores modernos você encontrará mais de uma unidade de execução trabalhando em paralelo. Isso é feito para aumentar o desempenho do processador. Por exemplo, um processador com seis unidades de execução é capaz de executar seis instruções em paralelo, então, na teoria, ele pode alcançar o mesmo desempenho que seis processadores dotados de apenas uma unidade de execução. Esse tipo de arquitetura é chamado de arquitetura superescalar.
Normalmente processadores modernos não possuem diversas unidades de execução idênticas; eles têm unidades de execução especializadas em um tipo de instruções. O melhor exemplo é a unidade de ponto flutuante (FPU, Float Point Unit, também chamada “co-processador matemático”), que é encarregada de executar instruções matemáticas complexas. Geralmente entre a unidade de decodificação e a unidade de execução existe uma unidade (chamada unidade de despacho ou agendamento) encarregada de enviar a instrução para a unidade de execução correta, isto é, caso a instrução seja uma instrução matemática, ela a enviará para a unidade de ponto flutuante e não para uma unidade de execução “genérica”. A propósito, unidades de execução “genéricas” são chamadas ALU (Arithmetic and Logic Unit) ou ULA (Unidade Lógica e Aritmética).
Finalmente, quando o processamento termina, o resultado é enviado para o cache de dados L1. Continuando com nosso exemplo de soma a+b, o resultado será enviado para o cache de dados L1. Esse resultado pode ser então enviado de volta para a memória RAM ou para outro lugar, como a placa de vídeo, por exemplo. Mas isso vai depender da próxima instrução que será processada em seguida (a instrução seguinte pode ser “imprima o resultado na tela”).
Outra função interessante que todos os microprocessadores possuem há muito tempo é chamada de “pipeline”, que é a capacidade de ter várias instruções diferentes em vários estágios do processador ao mesmo tempo.
Depois que a unidade de busca enviou a instrução para a unidade de decodificação, ela ficará ociosa, certo? Então, em vez de ficar fazendo nada, que tal mandar a unidade de busca pegar a próxima instrução? Quando a primeira instrução for para a unidade de execução, a unidade de busca pode enviar a segunda instrução para a unidade de decodificação e pegar a terceira instrução, e por aí vai.
Em um processador moderno com um pipeline de 11 estágios (estágio é outro nome para cada unidade do processador), ele provavelmente terá 11 instruções dentro dele ao mesmo tempo quase o tempo todo. Na verdade, visto que todos os processadores modernos possuem arquitetura superescalar, o número de instruções simultâneas dentro do processador será até maior.
Além disso, em um processador de 11 estágios, uma instrução terá que passar por 11 unidades para que seja completamente executada. Quanto maior o número de estágios, mais tempo uma instrução vai demorar para que seja totalmente executada. Por outro lado, tenha em mente que, por causa desse conceito, várias instruções podem estar rodando ao mesmo tempo dentro do processador. A primeira instrução carregada pelo processador pode demorar 11 passos para sair dele, mas uma vez que estiver fora, a segunda instrução sairá logo depois (e não outros 11 passos depois).
Existem muitos outros truques usados pelos processadores modernos para aumentar o desempenho. Nós explicaremos dois deles, execução fora de ordem (OOO, out-of-order execution) e execução especulativa.
- 2
- 2
Respostas recomendadas
Crie uma conta ou entre para comentar
Você precisa ser um usuário para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar agora