Pergunta

Quando, em qualquer computador faz as abstratos (letras na tela) atender a real (passagem de corrente elétrica através de circuitos na memória e processadores). Como foi que a evolução aconteça?

Eu estou falando mais profundo do que assembler aqui, eu acho. Talvez um nível mais profundo do que instruções do processador? Em algum momento, os comandos são na verdade interpretado por hardware, mas eu não entendo de onde / como isso acontece.

Eu não ir para a universidade, então não fazer um curso de CS ou qualquer coisa. Como muitos, eu sou um hobby virou "pro". Como resultado, há muitas peças do quebra-cabeça eu acho que estou em falta. Eu sei um pouco C ++, e entender o conceito de ponteiros etc (embora eu não usei-os com raiva muito), no entanto Eu só nunca trabalhou em um nível elevado. Eu não estou certo de saber essas coisas kind've vai me ajudar ou não, mas com certeza interessante.

Foi útil?

Solução

Um processador opera o que é conhecido como um ciclo fetch-decode-execute. instruções de código de máquina são bastante baixo nível (ou seja, eles não fazem tudo o que muito em uma única instrução). Por exemplo, a adição de dois números teria uma sequência de instruções com a semântica como:

  • Coloque um ponteiro para o endereço do operando 1 no registrador 1
  • Coloque o valor armazenado no endereço armazenado no registo 1 no registrador 2
  • Coloque um ponteiro para o endereço do operando 2 no registrador 1
  • Coloque o valor armazenado no endereço indicado no registo 1 no registrador 3
  • Adicionar o conteúdo do registrador 2 e registrar 3 e armazená-lo em registo 4
  • Coloque um ponteiro para o destino no registrador 1
  • armazenar o conteúdo do registo 4 no endereço especificado no registro 1

Dentro do processador é um conjunto especial de memória rápida conhecido como um 'Register File', que contém a memória que usa o processador para armazenar dados que está trabalhando no momento. O arquivo de registro tem vários registos, que são identificados de forma exclusiva. Instruções normalmente trabalham nos registos, especialmente em arquiteturas RISC; enquanto isso nem sempre é o caso, é uma abstração bom o suficiente para o momento.

Normalmente, um processador tem para carregar ou armazenar dados em um registro para fazer qualquer coisa com ele. Operações como trabalho aritmética nos registos, tendo os operandos de dois registros e colocando o resultado em um terço (para o benefício da galeria de amendoim, eu Have usou um 6502 - não vamos confundir a questão, - ). O processador tem instruções especiais para carregar ou armazenar dados de registros na memória principal da máquina.

Um processador tem um registo especial chamado de 'contador de programa' que armazena o endereço da próxima operação a ser executada. Assim, a sequência para a execução de uma instrução vai mais ou menos como:

  • Obter a instrução armazenada no endereço atual no contador de programa.
  • Decode a instrução, escolher distante a operação real, que registra que ele usa, o 'modo de endereçamento' (como ele funciona onde obter ou armazenar dados) e alguns outros bits e bobs.
  • Executar a instrução.

executar a instrução vai alterar os valores em vários registos. Por exemplo, uma instrução de 'carga' irá copiar um valor em um registrador. Uma aritmética ou lógica (AND, OR, XOR) terá dois valores e calcular um terço. Um salto ou ramo de instrução vai alterar o endereço no balcão programa para o processador começa a buscar instruções de um local diferente.

O processador pode ter registros especiais. Um exemplo de tal é o contador de programa descrito acima. Outro típico é uma condição bandeiras registo. Isto terá vários bits com significados especiais. Por exemplo, pode ter uma bandeira que está definido se o resultado da última operação aritmética era zero. Isso é útil para operações condicionais. Você pode comparar dois números. Se forem iguais, a bandeira 'zero' é definido. O processador pode ter uma instrução condicional que só é executado se este sinalizador está definido.

Neste caso, você poderia diminuir um contador em um registro e se fosse zero, uma bandeira condição está definido. A condicional (ramo em zero) pode ser usado para um loop onde você diminuir um contador e sair do loop se o resultado da instrução decréscimo é zero. Em alguns processadores (por exemplo, a família ARM) todas as instruções são condicionais, com um especial 'fazer sempre' condição para instruções não-condicionais.

Alguns exemplos de instruções típicas do processador são:

  • aumentar ou diminuir um registo
  • Load ou armazenar o conteúdo de um registo na memória. Você também pode ter o endereço para carregar ou armazenar compensado pelo conteúdo de outro registo. Isso permite que você facilmente loop sobre uma matriz de dados, incrementando a outro registo.
  • somar, subtrair, multiplicar, op lógicarações para valores de calcular. Estes operandos levar de dois registos e colocar o resultado em um terceiro.
  • Ir para outro local -. Isso move o conteúdo da localização para o contador de programa e começa a buscar instruções do novo local
  • Premir ou valores pop em uma pilha.

Este post stackoverflow tem um exemplo de um pequeno fragmento de código C compilado e a saída de linguagem assembly daquele fragmento. Deve dar-lhe um exemplo do tipo de relação entre uma linguagem de alto nível e a saída de código de máquina que compila a.

A melhor maneira de aprender isto é obter um montador e experimentá-lo. Isto costumava ser muito mais fácil em mais velhos computadores, mais simples como micros da década de 1980 de 8 bits. A coisa mais próxima a este tipo de arquitetura disponíveis estes dias são sistemas embarcados. Você pode obter uma placa de desenvolvimento para um processador incorporado como um Microchip PIC bastante mais barato. Como este tipo de arquitectura tem menos bagagem do que um sistema operacional moderno, há menos i-dotting e t-crossing para chamadas de sistema utilização. Isto tornará mais fácil para o arranque de um programa de linguagem assembly neste tipo de arquitetura; a arquitetura mais simples também é mais fácil de entender.

Outra opção é obter um emulador, como SPIM . Isto irá emular uma CPU e deixá-lo montar e executar programas nele. A vantagem de um emulador como é que eles também terão facilidades para programas únicos de passo (muito parecido com um depurador) e mostrando o conteúdo do arquivo de registro. Isto pode ser útil para obter conhecimento sobre o que está realmente acontecendo.

Outras dicas

Eu gostaria muito sugiro que você leia o livro Código , dá um histórico detalhado de como o computador evoluíram a partir de diferentes sistemas.

É muito envolvente e irá explicar-lhe como as coisas evoluíram a partir do código morse através de uma máquina de adição simples e depois para algum conjunto. Deve dar-lhe uma imagem de como exatamente as instruções da máquina são interpretted e usado pelo hardware de um CPU, memória, etc.

Há realmente mais uma camada abaixo linguagem de máquina que eu descobri recentemente de um amigo. É chamado Microcode.

Veja este artigo da Wikipedia para detalhes: http://en.wikipedia.org/wiki/Microcode

Vamos supor que o mais real é corrente e tensão (se você ir mais fundo, você pode achar que mesmo um elétron é uma abstração). O primeiro passo de abstracção é considerar que uma tensão de + 5V representam um conjunto de bits de '1' e uma tensão de 0 V representa um conjunto de bits para '0'. Com um interruptor, você pode decidir o valor do seu fio.

Com um segundo fio e um segundo switch, você tem dois valores binários. O mais interessante para fazer com eles é combinar seus valores binários com operações tais AND, OR e NOT. Dois conceitos estão envolvidos aqui: transistor para o real e lógica para a abstração. Com isso, é possível realizar a adição, a subtracção e muitas outras operações em suas duas entradas binárias. Você pode adicionar mais fios para representar diferentes do '0' e '1' valores. Indo desta forma, você obter um ALU .

Agora é hora de incluir o tempo. Se você quiser vários resultados de sua ALU, você tem que fornecer uma entrada de dados de cada vez, necessitando, assim, um relógio e uma unidade de controle para operações de sequenciamento. Você também precisa de memória para armazenar os valores de entrada e resultados, e dispositivos de entrada e saída para comandar e observando. Indo desta forma, você obter um Arquitetura de von Neumann , que é a base de quase todas as arquiteturas de computadores .

nível de abstração seguida é quando você decidir, com eletrônica apropriadas, que este bit especial na memória irá estimular que pixel específico da tela LCD.

Você pode achar Código de Charles Petzold uma leitura interessante:
http://www.amazon.co. uk / Code-Language-DV-Undefined-Charles-Petzold / dp / 0735611319

A premissa da sua pergunta é incorreta. Não há divisão. Software é introduzido e guardado eletronicamente. É apenas que o software é apresentada a você em um Inglês como língua de modo que os seres humanos podem segui-lo facilmente.

Assim, por exemplo, quando você entra em "Alterar a minha tela do desktop para verde", através do teclado, que vai diretamente no metal eletronicamente (leia como teclado / mouse / touchscreen) de trabalho. É justo que você vê-lo como texto Inglês em sua tela. Tome um passo adiante, o texto inserido é em linguagem de alto nível, que são convertidos em código de máquina para que CPU pode executar lógica nele. O código de máquina está em formato electrónico também. Por exemplo, o texto vai ser convertido em opcodes etc, mas os opcodes são em formato electrónico e CPU pode processar aqueles.

A linha inferior é que tudo dentro do seu computador é em formato electrónico a partir do momento em que é introduzido. É ou no seu disco rígido ou memória (transistores, etc). É justo que você vê-lo em texto na tela.

Mais uma vez, não há divisão. Software salvos na memória (transistores etc) ou disco rígido já está lá eletronicamente. Hardware (lógica duro - portões) é necessário para executar o software (o que você quer hardware a ver com o seu software). Você não pode entrar qualquer coisa no computador em forma não eletrônica.

Espero que este sentimento marcas.

Bem, o ponto real em que você se encontra com hardware depende do que você está fazendo, é claro. Mas para ter o seu (excelente) exemplo de "exibição de texto":

De abstrato ao hardware:

  • usuário digita as letras em seu processador de texto (wp)
  • software wp primeiras lojas as letras na memória como parte do documento que está sendo editado
  • software wp, então, diz a biblioteca de interface de usuário que usa que quer exibir o texto a ser editado em uma janela (isso acontece continuamente, é claro). A biblioteca UI será dependente do sistema (a API do Windows em MS Windows, X Windows ou QT etc. no Linux, AWT / Swing em Java etc.)
  • A biblioteca UI vai passar os dados através de mais algumas camadas de abstração. Em particular, ele irá executar rasterization (converter as informações "mostrar um A" na grade de pixels que representa um A)
  • Eventualmente, as informações serão passadas para o driver da placa gráfica dispositivo. Este é o lugar onde nós nos encontramos hardware "real" :-). Normalmente, o cartão gráfico expõe "memória de vídeo", de memória ou seja, no cartão que o CPU pode escrever para. O driver da placa gráfica (que é executado na CPU) vai escrever os pixels para um à memória de vídeo.
  • circuitos A placa gráfica irá ler a memória de vídeo e converter os dados lá em um sinal de vídeo que sai do conector de vídeo no cartão e ao monitor.
  • O monitor irá mostrar o que parece esperançosamente como um A: -)

Esta explicação não pode ser demasiado acadêmica, mas isto é como eu entendo (não ir para a universidade quer).

A primeira etapa envolve Boole de álgebra que se mostrou no século 19'th que qualquer operação matemática pode ser expressa através de uma série de símbolos e algumas operadoras associadas. Assim, a base 10 aritmética com a + comum, -, *, / operadores pode ser expressa em utilizar apenas dois símbolos (0, 1 / verdade, falsos) e os operadores de lógica (AND, OR, etc.) que conduz à lógica Booleana que é a fundação matemática da computação digital.

O segundo passo é trabalho de Alan Turing 'que construiu um modelo matemático de um imaginário máquina que poderia processar símbolos. A descrição ingênua de uma máquina de Turing seria qualquer autômato que tem memória (para armazená-lo do estado), opera em uma série de símbolos que representam seu estado e interpreta outra série de símbolos que definem a transição de um estado para outro.

O processador digital moderna é uma implementação de uma máquina de Turing que utiliza álgebra lógica de Boole como a base símbolo e operador (dê uma olhada em How Stuff Works explicação detalhada da lógica de Boole no trabalho ). A razão para isso é que os verdadeiros / estados lógicos falsos podem ser facilmente mapeados em sinais elétricos (+, -) e os seus operadores associados podem ser implementados em circuitos transistor que, dada uma entrada binária (sinal elétrico) pode produzir o resultado de acordo com o Operadores booleanos. Assim, qualquer computador moderno é uma máquina que tem memória armazená-lo de estado (codificado em forma eléctrico / magnético binário) e um conjunto de circuitos que aceitam impulsos eléctricos e operadores (as instruções do processador) e resultados de saída em conformidade com uma velocidade muito rápida.

Assim, cada programa escrito em qualquer linguagem de computador, eventualmente, é traduzido pelo compilador ou tempo de execução em uma série de operações booleanas para o processador para executar

código de máquina, creio eu, é tão baixo nível como se pode ir. Está diretamente entendida pelo processador e executado sem um intérprete. O processador é construída com um certo conjunto de instruções que definem o código de máquina para uma dada arquitetura (x 86, PPC, ARM, etc.).

Tudo a partir de desenho letras na tela para calcular o pi é, em seu nível de base mais, executado em código de máquina. Desenho letras na tela é apenas uma questão de criar um código de máquina que calcula altura de letra, cor e locais de pixel e parcelas-los em uma tela usando um dispositivo de saída de vídeo.

Bem, se você sabe como o processador acessa a memória, então você já sabe a resposta. Memória e outro hardware são acessados ??em (quase) da mesma forma, dependendo wether os usos do processador "memória mapeada IO" ou "IO mapeado IO". No primeiro caso, o processador apenas tenta ler e escrever para um endereço de memória - mas há nenhuma memória lá - em vez disso é algum outro dispositivo de hardware, mas o processador realmente não pode dizer a diferença. O último caso é muito semelhante.

Por outro lado, se você não tem nenhum indício sobre como o processador acessa a memória, você deve olhar para cima o que um "barramento de endereços" e um "barramento de dados" é para você começar.

Você está entendendo errado.

Tudo o que o computador faz, seja ele mostrando letras na tela ou fazer alguma computação, pode ser visto em diferentes (muitos) níveis de abstração, a partir da corrente elétrica para a manipulação de conceitos abstratos como dinheiro em uma conta bancária.

Dito isso, a construção do circuito para um microprocessador simples não é tão difícil, uma ULA, alguns registos e alguma lógica de controle. Altera tem isso como tutoriais avançados para a placa de arranque Cyclone II, mas não posso encontrá-lo na web.

Aqui é o negócio real. Meu ponto de partida. Tudo requer energia para funcionar. O On / Off é definido dentro de um limite. por exemplo, se entre 3 e 5 v é em seguida, se menos 3 volts seu fora. A morse conceito código. Eu estou trabalhando em um termômetro assim que eu preciso para fazer ou comprar um sensor. Então eu preciso calibrá-lo. Traduzir os sinais a partir do sinal ou sem sinal de intensidade do sinal para uma temperatura. Este é onde estou agora.

Isto não é fácil de responder em uma frase. Leia um livro sobre arquitetura de computadores, aprender um pouco de montagem e tenho certeza que você vai entender como isso acontece.

Quando entramos qualquer tecla ou dar qualquer comando, em seguida, pequenas ondas elétricas se tornaram devidas por prensagem de chave é na verdade nós completar o circuito

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