|
Neste momento estão online 9 visitante(s) e 0 usuário(s) cadastrado(s).
Você é um usuário anônimo. Você pode se cadastrar gratuitamente clicando aqui. |
|
| |
|
|
|
|
| Artigo: Iniciantes em C++ - Parte II |
|
Para quem viu a primeira parte, não pode perder a continuação, onde são abordados os diversos mecanismos do hardware em uma introdução sobre o funcionamento do computador, visando o mais completo entendimento sobre a linguagem de programação C++.
BUS
Um BUS de computador pode ser visto como vários fios em paralelo, veja
figura abaixo. Alguns desses fios transportam sinais de temporização,
outros sinais de controle, outros transportam bits de identificação
do componentes (CPU, memória, controlador de periférico) , e outros
transportam dados.
Os sinais são transmitidos através do bus ajustando a voltagem
em diferentes trilhas (fios) (as tensões são pequenas como 0 e
1 volt). Quando a voltagem é aplicada a uma trilha o efeito se propaga
pela mesma com velocidade próxima à da luz; uma vez que o bus
é alguns centímetros longo, os sinais são detectados quase
instantaneamente por todos os dispositivos. A transmissão de informações
é controlada pelo clock de forma a propiciar a todos os componentes a
reconhecer o sinal e fazer a ação necessária. O clock que
controla o bus pode ter ciclos de até trilhões de hertz por segundo
(Ghz).
Os plugs que conectam componentes ao bus incorporam circuitos sofisticados.
Estes circuitos interpretam as tensões padrões, 0 e 1s que controlam
e endereçam os sinais - assim a memória pode reconhecer um sinal
como "dizendo" alguma coisa como "armazene o dado no endereço
xxx", enquanto uma unidade de disco pode reconhecer uma mensagem como "prepare-se
para escrever no bloco de disco identificado por estes bits de dados".
Além, estes circuitos lhe dão com "arbitragem do bus".
Algumas vezes dois ou mais componentes podem colocar sinais no bus no mesmo
exato momento - o circuito de arbitragem do bus resolve estes conflitos dando
a um componente precedência (o outro componente espera alguns milisegundos
ou microsegundos e então envia os dados novamente).
Periféricos
Há dois importantes grupos de dispositivos de entrada e saída
(I/O). Há dispositivos que proporcionam o armazenamento de dados, como
discos, tapes, pendrivers, e há dispositivos que interfaceiam o computador
com os usuários (teclado, monitor, impressoras, sensores, scaner etc.).
Os dispositivos de armazenamento gravam dados usando o mesmo padrão
de bits usado na memória principal e na CPU. Estes dispositivos manipulam
blocos de milhares de bytes. A transferência de dados é feita em
unidade de "blocos".
Os demais dispositivos de I/O transfere apenas um, ou algumas vezes dois bytes
de dados a cada vez. Seus controladores têm duas partes. Há uma
parte que está conectada ao bus e tem alguns registros de armazenamento
temporário onde os dados são representados como bit padrão.
Uma segunda parte do controlador tem que converter entre a representação
interna de dados e a representação externa. A representação
externa varia - sensores e effectors (usados pelo monitor e para controlar o
maquinário em fábricas) usa níveis de tensões, dispositivos
como um teclado e impressoras podem trabalhar com pulsos cronometrados de corrente,
alguns dispositivos usam flashes de luz.
Discos e Tapes
Muitos microcomputadores têm dois ou três diferentes unidades de
discos de armazenamento. Há um disco que está permanentemente
conectado (disco rígido), alguma forma de disco removível como
os discos floppy e pode haver um drive de CD-ROM.
Discos Ópticos
Discos de CD codificam os dados como bits 0 e 1s em forma de manchas com diferentes
reflectividade. Os dados podem ser lidos por um feixe de laser que pode ser
refletido ou não de acordo com a gravação de cada bit de
dado; a luz refletida é convertida em um pulso de voltagem e daí
os dados registrados 0 e 1s são convertidos novamente no formato utilizado
pelos circuitos do computador.
Discos Magnéticos
A maioria dos discos utiliza gravação magnética. Os discos
podem ser feitos de folhas de plástico (disquetes), ou cerâmica
ou aço (discos rígidos). Suas superfícies são cobertas
por uma fina camada de óxido magnético. Pontos deste óxido
magnético podem ser polarizados magnéticamente. Se uma bobina
de fio devidamente concebida for movida na superfície, os pontos magnetizados
irão induzir diferentes correntes na bobina - permitindo que dados sejam
lidos do disco. Novos dados podem ser gravados movendo-se a bobina através
da superfície com uma corrente suficientemente forte para induzir novos
pontos magnetizados com uma polaridade requerida. Não há limite
para o número de vezes que os dados podem ser regravados em discos magnéticos.
Faixas
Os bits são gravados em "pistas" - estas formam anéis
concêntricos sobre a superfície do disco, veja figura abaixo. Discos
contêm centenas destas pistas. (Numa simples unidade de disco, todas as
pistas mantém o mesmo número de bits; uma vez que as pistas mais
periféricas estão mais distantes, seus bits estão mais
espaçados do que os bits localizados nas pistas mais internas. Discos
mais elaborados podem ser gravados de forma aos bits terem a mesma densidade;
as pistas mais externas então conterão mais bits do que as mais
internas).

Blocos ou setores
As pistas são uma unidade de armazenamento muito grande - elas podem
conter dezenas de centenas de bits. Armazenamento em pistas é normalmente
dividido em "blocos" ou setores. Num dado momento, programadores podem
selecionar o tamanho dos blocos. Um programador pode inquerir sobre algumas
pistas livres no disco e então definir os blocos a serem gravados. Atualmente
o sistema operacional é quem controla a gravação nas pistas
e blocos. O tamanho dos blocos é normalmente de 512 bytes a 4096 bytes
(ou até mais).
Os blocos de bytes escritos no disco normalmente contêm os próprios
bytes que se deseja gravar e alguns bytes a mais adicionados pelo circuito de
controle do disco. Estes bytes de controle são totalmente manipulados
pelo circuito de controle do disco. Eles provêem informações
acerca do disco usados para identifocar os blocos e incluir informações
extras de checagem , que podem ser usadas quando for feita a leitura dos dados,
para verificar que os dados são os mesmo que foram gravados.
O controlador do disco pode identificar os blocos pelo número do bloco
e da pista, veja figura abaixo, ou pode numerar todos os blocos sequencialmente.
Se o disco apresentado na figura abaixo utilizar numeração sequancial,
a pista 1 pode conter os blocos 16, 17, ...

"Buscando" por Faixas
Antes que os dados sejam gravados ou lidos nos blocos, o mecanismo de leitura/escrita
deve ser movido para a faixa correta. O mecanismo de leitura/escrita contém
a bibina que detecta ou induz magnetismo. O mecanismo é movido por um
motor de passo que o alinha fielmente à pista específica. Os movimentos
do dispositivo de leitura/escrita são, em comparação com
os demais dispositivos computador, relativamente lentos - o dispositivo pode
gastar centésimos de segundos para se ajustar a posição
correta. (A operação de mover a cabeça para a faixa específica
é chamada "Busca", detalhes da performance do disco geralmente
incluem o tempo médio de busca). Uma vez que a cabeça esteja alinhada
na faixa requerida ainda é necessário alinhar o bloco requerido
á cabeça de leitura/escrita (o controlador de disco lê as
informações de controle dos blocos a medida que eles passam pela
cabeça e por isso sabe quando o bloco requerido está chegando).Quando
o bloco alinha com a cabeça de leitura/escrita os bits 0/1 gravados podem
ser lidos e copiados para onde eles forem necessários.
Cache de Memória do Disco
O circuito de leitura no disco remonta os bits em bytes. Estes então
transferem os bytes através do bus para a memória principal (
ou, em alguns casos, para os registros da CPU). Os discos têm suas próprias
memórias cache. Novamente, elas são locais de armazenamento "escondidas"
onde normalmente o acesso aos dados podem ser feito rapidamente. Um disco deve
ter memória cache suficiente para conter alguns blocos de disco (isto
é centenas de bytes). Além de serem enviados através do
bus para a memória, todos os bytes de um bloco que está sendo
lido podem ser armazenados no cache de memória local do disco. Se um
programa requer ao disco que sejam lidos dados que estejam armazenados no cache,
a unidade de disco não necessita procurar por esses dados. Os dados requeridos
podem ser lidos do cache e enviados para a memória principal.
Comumente, discos rígidos têm diversos discos montados em um único
eixo central. Há cabeças de leitura/escrita para cada disco. Dados
podem ser gravados em ambos os lados de cada disco. As cabeças de leitura/escrita
são montadas no mesmo mecanismo de motor de passo e movem-se juntas entre
os discos, veja figura abaixo.
Um controlador de um disco é bem elaborado, veja próxima figura.
O controlador deve conter alguns registradores (similares aos registros da CPU)
e circuito para realizar adições simples em números binários.
(A memória cache mostrada é opcional ; atualmente muitos controladores
de discos não têm esta memória cache). Um registro ou grupo
de registros irá conter o endereço do disco ou "número
do bloco" do bloco de dados que deve ser transferido. Outro registro contém
um contador de bytes; este é inicializado com o tamanho do bloco e decrementado
a medida que cada byte é transferido. O controlador de disco para de
ler bits quando este contador chega a zero. O controlador também terá
alguns registros especiais usados para agrupar bits em bytes antes de serem
transferidos pelo bus. Ainda, outro registro contém o endereço
da localização do próximo byte a ser lido no disco ou a
ser escrito.
Erros podem ocorrer durante a transferência de dados. A superfície
magnetizada pode estar danificada. O processo de leitura pode falhar em recuperar
os dados. O circuito no disco pode detectar isto, mas necessita de uma forma
para passar esta informação para o programa que necessita dos
dados. Aí onde entra os registros Flags (sinalizadores) localizados no
controlador. Se algo de errado acontece, bits são setados nos registradores
flags para identificar o erro. Um programa que realiza a transferência
do disco irá checar o conteúdo dos registradores flags quando
a transferência estiver completa e tentará alguma ação
de recuperação se a transferência de dados foi erronea.
Este circuito elaborado permite ao controlador trabalhar com muita autonomia.
A próxima figura ilustra os passos na transferência de dados envolvendo
discos e controladores.
O processo de transferência de dados irá iniciar com a CPU enviando
uma requisição através do bus para o controlador do disco,
com a requisição a unidade de disco irá carregar seu número
de bloco e iniciará a busca do track apropriado para posterior leitura
ou escrita. (passo 1 na Figura a seguir).
O posicionamento da cabeça de leitura/escrita pode levar um centésimo
de segundo (passo 2
na Figura a seguir). Durante este tempo, a CPU pode executar dezenas ou centenas
de instruções. Idealmente, a CPU deve estar apta a executar outras
tarefas, tal como processar dados que ela leu anteriormente. Há algum
tempo, programadores eram responsáveis por tentar organizar a transferência
de dados de forma que a CPU esteja trabalhando num bloco de dados enquanto o
próximo bloco é lido. Atualmente, isto é responsabilidade
do Sistema Operacional.
Quando o disco encontra o bloco, ele informa a CPU que irá responder
provendo detalhes de onde os dados serão armazenados na memória
RAM (passos 3 e 4 na Figura a seguir).
Acesso Direto a Memória
O controlador de disco irá então transferir sucessivos bytes
lidos do disco para sucessivas localizações na memória
RAM. Uma transferência realizada desta forma é chamada de "Acesso
Direto a memória.
A transferência de dados, passo 5 na figura acima, irá levar um
pequeno tempo (embora muito menos que no processo de busca). Novamente, a CPU
deve estar apta para realizar outra tarefa.
Quando a transferência estive completa, o controlador de disco irá enviar outro sinal para a
CPU, (passo 6).
Arquivos de dados no disco são formados por blocos. Por exemplo, um arquivo de texto com 20.000 caracteres estará contido em 24 blocos de 512 bytes. (O último bloco pode conter apenas alguns caracteres do arquivo, o restante do bloco seria preenchido apenas com espaço ou caracteres aleatórios). Programadores não escolhem os blocos usados por seus arquivos. O sistema operacional é responsável pela escolha de cada bloco usado por cada arquivo, e por gravar informações para futuras referências.
A figura 1.14 ilustra um esquema simples usado para alocação de blocos. Este esquema foi usado algumas vezes para pequenos discos nos primeiros computadores pessoais (final da década de 1970 e início da década de 1980). Todos os sistemas modernos usam esquemas mais sofisticados mas a essencia é a mesma.
Arquivos de Diretório
Como mostrado na Figura 1.14, uns poucos blocos do disco são reservados para servir como "arquivos de diretório". Os dados nestes blocos formam uma tabela de entradas com cada entrada especificando o nome de um arquivo, tamanho do arquivo (em bytes ), e alguns registros de quais blocos estão alocados. O esquema de alocação mostrado na Figura 1.14 usa um grupo de blocos continuos para formar cada arquivo individual. Isto torna fácil o registro de detalhes dos blocos alocados, o diretório precisa apenas registrar o tamanho do arquivo e o número do primeiro bloco.
Além disso as tabelas de entrada descrevem os arquivos alocados, a estrutura do diretório pode conter um registro de quais blocos foram alocados e quais ficaram livres. Um esquema simples usa um mapa com um bit para cada bloco; o bit é selecionado se o bloco é alocado.
Outros dispositivos de Entrada e Saída
Um teclado e uma impressora são representativos de dispositivos periféricos simples de Entrada/Saída (I/O). Tais dispositivos transferem um simples caracter de dado, codificado como um padrão de 8 bits, para/do computador. Quando uma tecla é precionada no teclada, circuitos internos do mesmo identificam qual tecla foi precionada e portanto identifica o padrão de bit apropirado a ser enviado para o computador. Quando uma impressora recebe um padrão de bits do computador, seus circuitos trabalha para imprimir o caractere apropriado.
A Figura 1.15 mostra, de forma simplificada, a estrutura geral de um controlador para um desses simples dispositivos de I/O. O controlador terá um registrador de 1 bit para um flag de leitura. Este flag é selecionado quando o controlador está pronto para transferir dados. Deve existir um registrador de dados de 8 bits (ou registrador "buffer) que irá armazenar o byte de dados que será transferido. O controlador irá incorporar quaisquer circuitos necessário para converter o bit padrão em tensões de saída/pulsos de luzes/... O controlador deve ser conectado ao dispositivo por algum cabo. Deve existir pelo menos dois fios; se houver apenas dois fios, os bits de dados serão transferidos serialmente. Muitos computadores pessoais têm controladores para "porta paralela"; estes têm um gruo de 9 ou mais fios que podem transportar uma voltagem de referência e oito sinais de voltagem
(e assim podem eficientimente transmitir todos os bits de um byte ao mesmo tempo).
Uma simples aproximação de como manipular entrada de dados de tais dispositivos é ilustrada na figura 1.16. O mecanismo ilustrado usa um loop de espera - o código do programa faz a CPU esperar até que os dados sejam carregados do dispositivo. O código do programa pode ser:
O loop "repita" pode ser codificado usanto três instruções. A primeira irá enviar uma mensagem através do bus requisitando a leitura do status do dispositivo. A instrução pode causar a espera da CPU até que o sinal seja replicado e recebido do dispositivo. A segunda instrução irá testar o status do dado obtido. A terceira instrução será um jump condicional retornando ao início do loop. O loop corresponde às imagens 1 e 2 da figura 1.16; estas duas imagens simplesmente mostram a permuta de sinais causada pela execução da instrução.
Quando uma tecla é precionada no teclado (imagem 3 na Figure 1.16) o hardware do teclado identifica a tecla e envia um código ASCII como uma següência de pulsos de tensão. Estes pulsos são interpretados pelo controlador que monta o bit padrão correto no registrador de dados do controlador.Quanto todos os 8 bits são obtidos, o controlador irá selecionar o flag pronto.
A próxima requisição perguntando ao dispositivo seu status irá obter um 1 como réplica (passo 4). O programa pode continuar com uma solicitação de leitura de registro de dados que irá copiar o conteúdo do registrador de dados do dispositivo para o registrador da CPU. Se o caractere for armazenado na memória, outra sequencia de instruções deve ser executada para determinar o endereço da memória e então copiar os bits da cpu para a memória.
Um loop de espera como este é de fácil codificação, mas faz muito mal uso do poder da CPU. A CPU gastaria todo seu tempo esperando pela entrada de caracteres (a maioria dos usuários digita muitos poucos caracteres por segundo). Há outras abordagens para organizar entrada desses dispositivos de baixa velocidade. Estas abordagens alternativas são consideravelmente mais complexas. Elas confiam que o dispositivo envia um sinal de interrupção ao mesmo tempo em que selecionam seu flag de pronto. O programa que está rodando na CPU de maneira a ir executanto outra tarefa; quando o sinal de interrupção é recebido esta outra tarefa é temporiariamente suspensa enquanto o caractere é lido.
Dispositivos Visuais
Displays visuais usados por computadores para saída tem uma array de elementos de dados, um elemento para cada pixel na tela. Se a tela é preta e branco, um único bit de dados será suficiente para cada pixel. Os pixels de telas coloridas requerem pelo meno um byte cada. A memória usada por dispositivos visuais pode ser parte da memória principal do computador, ou pode ser uma unidade de memória separada. Programas obtêm informação mostrada em uma tela fixando os dados apropriados na memória usada pelo display visual. Programas podem acessar os elementos de dados para cada pixel. Fixar pixels individuais é muito trabalhoso. Normalmente, o sistema operacional do computador irá ajudar provendo rotinas que podem ser usadas para desenhar linhas, cores em retângulos, e mostrar imagens de letras e dígitos.
Relógios
Há muitos outros dispositivos de entrada e saída que podem ser ligados ao computador. Computadores têm numerosos dispositivos de temporização. Aparte desde temporizadores de alta freqüência que controlam as operaçõe internas da CPU e do bus, existem relógios que registram a hora do dia e, possivelmente, servem como uma forma de relógio de alarme. O relógio que registra o tempo do dia irá trabalhar a cerca de 60 vezes por segundo; a cada giro do relógio, um contador será incrementado. Um relógio de alarme envia um sinal quando um período de tempo passa.
Conversores Analógico Digital
Conversores Analógico Digital transformam voltagens externas (dados analógicos) em bits padrões que representam números (dados digitais). Conversores analógico digital permitem que computadores trabalhem com todo tipo de entrada. A tensão de entrada pode vir de um sistema detector de luminosidade (permitindo que a intensidade da luz seja medida), ou de um termoacoplador (medição de temperatura), um transdutor de pressão, ou qualquer outro dispositivo que gere tensão. Isto permite aos computadores monitorar diferentes dispositivos – tudo desde sinais no nervos de rãns a fluxo de neutrons em um reator nuclear. Dispositivos de controle Joystick podem incorporar simples formas de conversores analógico digital. (Controladores para mouse são mais simples. O movimento da bola que se encontra no mouse, embaixo do mesmo, causa o movimento de rodas que estão acopladas a sensores dentro do mouse. Em cada revolução completa, estas rodas enviam um único pulso de voltagem ao controlador do mouse. Este conta os pulsos e armazena-os em seus registradores de dados; a CPU pode ler estes registradores de dados e encontrar como o mouse se movimentou nas direções x e y desde a última checagem.)
O controlador para conversores analógico digital pode ser similar aquele apresentado na Figura 1.15, exceto que o registrador de dados terá mais bits. Um registrador de dados de um byte pode representar apenas números na gama de 0 a 255; normalmente uma precisão de uma parte em 250 é insuficiente.Registradores de dados com maiores capacidades são usados, por exemplo 12 bits para medições que necessitam de precisão de uma parte em 4.000, ou 16 bits para uma precisão de uma parte em 30.000. Em um registrador de 12 bits, o valor 0 irá codificar a entrada mínima, obviamente, enquanto 4.095 pode representar o limite superior da gama de medição. As partes externas da interface do conversor analógico digital permitem diferentes gamas de medição, por exemplo 0 a 1 volt, 0 a 5 volts, -5 a 5 volts. Uma unidade analógico digital irá inclusive ter diversas entradas; instruções vindas da CPU irão direcionar o controlador a selecionar uma entrada em particular para a medição.
Conversores Digitais Analógico
Um conversor digital analógico é um dispositivo de saída equivalente ao conversor analógico digital, porém fazendo a função inversa. Um conversor desse tipo tem um registrador de dados que pode ser carregado com algum número binário pela CPU. Os conversores digital analógico converte números em voltagem. A voltagem pode ser usada para controlar a potência de um motor, por exemplo. Usando conversores analógico digital para entrada e digital analógico para a saída, um programa de computador pode fazer coisas como monitorar temperaturas em um reator de uma planta química e controlar o calor de forma que a temperatura se mantenha na gama necessária.
Relés
Freqüentemente, há a necessidade de um computador para monitorar, ou possivelmente controlar, dispositivos simples de dois estados - fechaduras (abrir ou fechar), valvulas (abrir ou fechar), controle de ligar e desligar lâmpadas etc. Há várias formas de dispositivos de entrada onde o registrador de dados tem cada bit ligado de forma a indicar o estado de um dos dispositivos monitorados. Similarmente, no correspondente dispositivo de saída, a CPU pode conter um registrador de dados com um dispositivo controlado para ligar ou desligar. Uma mudança no estado de um bit no registrador de controle faz com que os atuadores abram ou fechem o correspondente dispositivo físico.
Veja a parte I deste tutorial aqui.
|
|
Postado em Friday, February 27 @ 17:40:05 BRT por teixeiramg |
|
|
|
|
| |
|
| Ainda não é Cadastrado? Você pode se cadastrar clicando aqui. Como usuário cadastrado você tem algumas vantagens como escolher o Tema do site (template) e enviar comentários com seu nome. |
|
| |
|
|
|
| Classificação de notícias |
|
|
| |
|
|
|
|
Tópicos relacionados
 |
|
|
|
|
| Desculpe, comentários não estão disponíveis para esta notícia. |
|
|
|
|
|