Pergunta

Eu sei um pouco sobre a assembléia, e que há 4 ou 8 ou, de modo geral, registradores de propósito.Como todos os programas em um computador com apenas essa quantidade de registradores, especialmente com multithreading e tudo o mais?

Foi útil?

Solução

A própria threading não afeta o número de registros em uso. Quando um thread é trocado, ele geralmente possui seus registros salvos na memória e o próximo thread a ser executado possui esses registros carregados a partir de seu salvamento anterior.

Um exemplo é um sistema com uma estrutura de bloco de controle de rosca (TCB). Essa estrutura conteria (enquanto o thread não estava em execução), o ponteiro de instruções salvo, o ponteiro da pilha, os registros de propósito geral, os registros de ponto flutuante, as estatísticas de threads e assim por diante. Em suma, tudo o que é necessário para restaurar totalmente o fio do estado em que estava quando foi trocado para que outro tópico seja executado.

E nem tudo o que acontece em um computador é feito nos registros. Os compiladores modernos podem otimizar o código para que os itens de dados mais utilizados sejam mantidos nos registros, mas a grande maioria dos dados é mantida na memória e só é comprada em registros quando necessário.

O melhor livro que já li sobre o assunto é Tanenbaum's "Organização de computador estruturada" que examina os computadores em termos de camadas, desde o nível da lógica digital até o nível do sistema operacional, com cada nível construindo no anterior.

           alt text

Aparte: Meu sonho é um dia escrever um livro assim que cobre tudo, do nível do quark até o Emacs :-)

Outras dicas

As outras variáveis e pilhas de thread são geralmente armazenado no espaço de memória protegido, onde eles podem ser chamados em registos, quando necessário.

Você pode querer verificar para fora o livro Os Elementos de Sistemas de Computação para um bom entendimento de como a CPU do seu computador funciona.O livro é definido como uma série de projetos em que você trabalhar a partir de uma porta NAND para uma CPU, assembler, simples compilador, e em um pequeno sistema operativo.É inestimável para a compreensão de como todos do seu computador peças se encaixam.

Cada vez que um encadeamento (ou um processo) troca, todos os registros são empurrados para a pilha pelo kernel do sistema operacional para uma estrutura de dados geralmente chamada de bloco de controle de processo. Em seguida, quando o thread/processo voltar, os dados do registro são lidos na PCB e apareceram na pilha para os registros.


Também existem registros internos e uma tabela de mapeamento que o X86 possui internamente esse tipo de configuração de uma tabela de registro virtual para preservar a arquitetura do conjunto de instruções do IA32, enquanto possui uma maior flexibilidade para projetar arquiteturas superescalares e algoritmos sofisticados de agendamento de instruções.

Além disso, os conjuntos de instruções geralmente têm um carregar e armazenar Instrução, que é usada em conjunto com ponteiros para a memória, permitindo que os dados sejam armazenados a partir de registros na memória. É de onde vem o termo máquina de lojas de carga, ou seja, um computador que não possui instruções que operam diretamente na memória.

Alguns computadores têm instruções que operam na memória; Alguns são baseados em pilha. Depende dos designers e das restrições que estão sendo colocadas no hardware.

Você precisa perceber que milhares a milhões de instruções de montagem são executadas para coisas simples. Esses registros estão recebendo seus valores trocados com frequência.

É realmente muito interessante a forma como o computador é capaz de utilizar, de modo a poucos registros para realizar tudo o que ele faz.

Ele é muito inteligente e de programação no nível de assembly (normalmente devido à muitíssimo inteligente compiladores) que permitem que tão poucos registros a ser utilizado de forma eficiente.

Se um problema é impossível concluir com apenas alguns registos previstos, o programa irá normalmente "derrame" os seus registos na memória principal pilha.Por lembrar onde na pilha nós colocamos a nossa derramado registra podemos facilmente recuperá-los de volta.

Quando nós funcionamos fora dos registradores nós precisamos simplesmente armazená-los na pilha, o que nos dá LONGE mais espaço do que a maioria de nós precisa para um de nossos programas.

No caso específico de multi-threading, acabamos de salvar todos os nossos registros para a memória, então nós temos uma ardósia limpa para os outros segmentos.

Essa é uma das coisas que o computador de outra forma de armazenamento, especialmente memória RAM, é usada para:para salvar e restaurar os bits de dados e de registros.

Quando um thread é comutada para outra thread pode executar.o primeiro threads estado de registo é guardado em algum lugar (na pilha ou de alguma outra estrutura de dados), e os segundos da linha registrar o estado é restaurado a partir de onde ele foi salvo antes.RAM é rápido o suficiente para que milhares de estes parâmetros podem ocorrer em um segundo, mas tem tempo suficiente de que se está a troca de threads desnecessariamente pode afetar o desempenho.

Outro muito comum a ocorrência de variáveis locais - se uma variável local é usado por um curto periodo de tempo, ele nunca pode existir fora de um registro.no entanto, em muitos casos, uma variável local pode precisar ser salvo a partir do registro de um local de memória para algum outro valor podem ser carregados e manipulados em um registrador.O mesmo acontece para praticamente todas as variáveis, não só locais (mas é muito mais provável que um local para nunca ter uma existência na memória).

Essa é uma pergunta bastante envolvida e a resposta depende da sua arquitetura da CPU.

Nos bons e velhos dias, você estava certo - havia de fato apenas alguns registros de propósito geral. Atualmente, a CPU e o compilador jogam um jogo de "três card-monte"Com seus registros de propósito geral através de técnicas como Registre renomeação.

Embora em arquiteturas simples, é verdade que os registros são copiados para a memória [cache] quando uma troca de contexto acontece, técnicas como Smt "Tolo" o sistema operacional pensando que há mais núcleos do que eles realmente são.

Mas a resposta mais geral à sua pergunta é que os dados são movidos para dentro e fora dos registros muito. E é por isso que muitas das instruções que você vê em um determinado programa de montagem são as instruções "MOV". Os designers de CPU e compiladores gastam muito tempo e dinheiro otimizando seus projetos para que você não esteja transferindo dados da memória principal (lenta) para registros - eles tentam manter os dados em cache o máximo possível. Esse grande número de instruções "MOV" é o motivo pelo qual a latência da memória e a velocidade do barramento são tão cruciais para o desempenho do computador geral.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top