Elementos de hardware e so tware · 2020-03-07 · Objetivos Conhecer a arquitetura básica de...
Transcript of Elementos de hardware e so tware · 2020-03-07 · Objetivos Conhecer a arquitetura básica de...
Objetivos
Conhecer a arquitetura básica de computadores.
Descrever os principais dispositivos de entrada e saída.
Compreender conceitos de sotware utilitário.
3.1 HardwareO hardware do computador é constituído por um conjunto de componentes
interligados: processadores, memória principal, registradores, terminais, im-
pressoras e discos magnéticos, além de outros dispositivos ísicos.
Os componentes ísicos do computador são agrupados em três subsistemas básicos:
• Unidade Central de Processamento (CPU);
• Memória;
• Dispositivos de Entrada e Saída.
3.1.1 Unidade Central de Processamento (CPU)A CPU tem como unção principal unicar todo o sistema, controlando as
unções realizadas em cada unidade uncional. É responsável pela execução
de todos os programas, que obrigatoriamente deverão estar armazenados
na memória principal.
A unidade central de processamento é dividida em dois componentes básicos:
• Unidade de controle (UC);
• Unidade lógica e aritmética (ULA);
A UC é responsável por controlar as atividades de todos os componentes
do computador, mediante a emissão de pulsos elétricos (sinais de con-
trole) gerados por um dispositivo chamado clock . Esse controle pode ser
exercido, por exemplo, sobre a gravação de um dado no disco ou a busca
Elementos de hardware e sotware
01
de uma instrução na memória.
A ULA é responsável pela realização de operações lógicas (testes e compara-
ções) e aritméticas (somas e subtrações).
A velocidade de processamento de uma unidade central de processamento
(CPU) é determinada pelo número de instruções que o processador executa
por unidade de tempo, normalmente em segundos. A unidade de medida é
MIPS (milhões de instruções por segundo).
A transmissão de dados entre o receptor e o transmissor é controlada por um
sinal de controle chamado clock . Este sinal é usado para sincronizar o transmis-
sor com o receptor, isto é, para inormar ao receptor que um dado está sendo
transmitido. É utilizado pela unidade de controle para a execução das instruções.
O clock é um dispositivo localizado na unidade central de processamento,
que gera pulsos elétricos síncronos em um determinado intervalo de tem-
po (sinal de clock ). A quantidade de vezes que este pulso se repete em um
segundo dene a requência do clock . Toda transmissão paralela utiliza um
sistema de clock . Esses sistemas de clock , entretanto, são independentes,
isto é, o sistema de clock usado na transmissão de dados entre o processador
e a memória RAM não é o mesmo usado na transmissão de dados entre o
disco rígido e a placa-mãe, por exemplo.
3.1.2 MemóriasA memória tem por unção armazenar internamente toda inormação que é
manipulada pelo computador: os programas e os dados. A memória pode ser
classicada quanto à sua velocidade (ou tempo) de acesso, capacidade de ar-
mazenamento, custo e volatilidade. Em unção dessas características, pode-se
estabelecer uma hierarquia de tipos de memórias, conorme Figura 3.1.
Registradores
Memória Cache
Memória Principal
Memória Secundária
Menor custoe velocidade
de acesso
Maiorcapacidade de
armazenamento
Figura 3.1: Comparativo dos diversos tipos de memóriaFonte: Adaptado de Machado, 2004
Atualmente os nossosprocessadores conseguem
executar bilhões de instruçõespor segundo!
02
a) Registradores
São dispositivos de alta velocidade, localizados sicamente na unidade central
de processamento, para armazenamento temporário de dados. O número de
registradores varia em unção da arquitetura de cada processador. Existem
registradores de uso especíco (com propósitos especiais) e de uso geral.
Os registradores de uso especíco são:
• Contador de instruções - responsável por armazenar o endereço da pró-
xima instrução que a unidade central de processamento deverá executar.
Toda vez que uma instrução já está sendo processada o endereço da pró-
xima instrução a ser processada é armazenado no contador de instruções;
• Apontador de pilha: responsável por armazenar o endereço de memória
do topo da pilha. Pilha é uma estrutura de dados onde o sistema mantém
inormações sobre tareas que estavam sendo processadas, mas que por
algum motivo tiveram que ser interrompidas;
• Registrador de estado: responsável por armazenar inormações sobre a exe-
cução do programa (status do programa). A cada instrução executada, o re-
gistrador de estado é alterado conorme o resultado gerado pela instrução.
b) Memória cache
É uma memória volátil de alta velocidade. Quando o processador az
reerência a um dado armazenado na memória principal, veriica antes se
este dado não está armazenado na memória cache. Ao encontrar o dado
armazenado na memória cache, o processador não acessa a memória princi-
pal, diminuindo o tempo de processamento.
c) Memória principal
É a memória responsável pelo armazenamento dos programas que estão
sendo executados pela CPU em um certo instante, bem como dos dados
utilizados pelos programas em execução. Para que um programa possa ser
executado pela CPU é necessário que ele seja previamente armazenado na
memória principal. Existem ainda dois tipos de memória: ROM ( read only
memory – memória somente leitura) e RAM ( random access memory – me-
mória de acesso randômico).
Para aumentar o desempenhono uncionamento das memóriascaches é eita a hierarquizaçãoda cache em múltiplos níveis.O nível da cache mais altoé chamado de L1 (Level 1),com baixa capacidade dearmazenamento e com altíssimavelocidade de acesso. O segundonível, L2 (Level 2), possui maiorcapacidade de armazenamento,porém com velocidade deacesso inerior a L1, e assimsucessivamente. Quando a CPUnecessita de uma inormação damemória principal, primeiramenteverifca a cache L1, caso não ache,segue para a cache L2, assimpor diante. Se não encontrar emnenhum dos níveis, busca o dadona memória principal.
03
Quando usamos o termo “memória” para um computador, normalmente
estamos nos reerindo à sua memória RAM. Se um programa que o usuário
pretenda executar não estiver na memória RAM, então ele deve ser transe-
rido de um sistema de memória secundário (como discos rígidos, unidades
de CD-ROM e etc.) para a memória RAM.
A RAM é um tipo de circuito eletrônico de memória que permite a leitura e
a escrita de dados em seu interior. Só que ela é uma memória volátil (como
os registradores e a cache), isto é, cortando-se sua alimentação elétrica, apa-
gamos os dados que estavam nela armazenados.
Já a característica principal da ROM é que o seu conteúdo não é perdido
quando cortamos a sua onte de alimentação e por isso é utilizada para
manter os programas iniciais do computador. Quando ligamos o micro, o
processador não sabe o que azer; ele precisa executar um programa; este
programa necessário para dar o boot é gravado em uma memória ROM,
localizada na placa-mãe do computador.
Um programa armazenado em ROM recebe o nome de frmware. Na me-
mória ROM do micro há basicamente três programas (frmware) principais:
• BIOS (Basic Input/Output System, Sistema básico de Entrada/Saída);
• POST (Power On Sel Test , Autoteste ao Ligar);
• Setup (programa que permite alterar vários itens da conguração
do computador).
A memória principal é composta por unidades de acesso chamadas células,
cada uma capaz de armazenar um determinado número de bits. Cada célula
tem um endereço, conorme Figura 3.2, que é uma reerência à posição da cé-
lula dentro da memória, como o endereço de uma casa. Quando um programa
deseja ler ou escrever um dado em uma célula, deve primeiro especicar qual o
endereço de memória desejado. O endereço da célula a ser acessada ca arma-
zenado em um registrador denominado registrador de endereço de memória.
04
0
1
2
N
Endereços
Células
Instruçãoou Dado
Figura 3.2: Células de memória e seus endereçosFonte: Adaptado de Machado, 2004
O número de células endereçadas na memória principal é limitado pelo ta-
manho do registrador de endereço. No caso de o registrador possuir n bits,
a memória poderá endereçar 2n células.
d) Memória secundária
Memória secundária é um termo genérico para designar diversos compo-
nentes que permitem gravar e ler dados permanentes. O seu acesso é lento,
se comparada com as memórias cache ou principal, porém relativamente
apresentam custo mais baixo e capacidade de armazenamento superior.
Exemplos de memória secundária são as tas magnéticas, discos rígidos
(HDs), CDs, DVDs, etc.
3.1.3 Dispositivos de entrada e saídaPermitem a comunicação entre o computador e o mundo externo. Alguns
dispositivos servem para a comunicação homem-máquina, como teclados,
monitores de vídeo, impressoras, plotters, entre outros. A implementação
de interaces mais amigáveis permite cada vez mais que pessoas sem co-
nhecimento especíco sobre inormática possam utilizar o computador. São
alguns exemplos desses tipos de dispositivos: Scanner , caneta ótica, mouse,
dispositivos sensíveis à voz humana, e etc.
3.1.4 BarramentoA CPU, a memória principal e os dispositivos de E/S são interligados através
de linhas de comunicação denominadas barramentos, barras ou vias. Um
Células de memóriaCélulas de memória são unidadesde acesso da memória principal.
Além das memórias RAM e ROMdescritas no texto, temos aindaa PROM (memória programávelsomente de leitura) que podeser gravada pelo usuário umaúnica vez, a EPROM (memóriaprogramável e apagável somentede leitura) que pode ser gravadaou regravada por meio de umequipamento que ornece asvoltagens adequadas em cadapino (para apagar os dadosdeve-se utilizar raios ultravioletano chip), e por último temos aEEPROM (memória programávele apagável eletronicamentesomente de leitura), que pode sergravada, apagada ou regravadautilizando um equipamento queornece as voltagens adequadasem cada pino.
05
barramento é um conjunto de os paralelos (linhas de comunicação), por
onde traegam inormações, como dados, endereços ou sinais de controle.
Um esquema gráco de um barramento é mostrado na Figura 3.3.
CPU
Memória
Dispositivo E/S
Fluxo de Dados
Fluxo de Controle
UnidadeLógica e
Aritmética
Unidade deControle
Registradores
Figura 3.3: Esquema gráfco dos barramentosFonte: Adaptado de Machado, 2004
O barramento pode ser classicado como unidirecional (transmissão em
um só sentido) ou bidirecional (transmissão em ambos os sentidos). Existem
três tipos de barramentos, que se dierenciam uns dos outros de acordo
com o que transportam:
• Barramento de dados: transmite inormações entre a memória princi-
pal e a unidade central de processamento;
• Barramento de endereços: utilizado pela unidade central de processa-
mento para especicar o endereço da célula de memória que será acessada;
• Barramento de controle: é por onde a unidade central de processamen-
to envia os pulsos de controle relativos às operações de leitura e gravação.
3.1.5 Pipelining O conceito de processamento pipeline é a divisão de uma tarea em uma se-
quência de subtareas. O processador, por meio de suas várias unidades uncio-
nais pipeline, unciona de orma a permitir que, enquanto uma instrução se en-
contra na ase de execução, uma outra instrução possa estar na ase de busca.
A técnica de pipelining pode ser empregada em sistemas com um ou mais
06
processadores, em diversos níveis, e tem sido a técnica de paralelismo mais
utilizada para maior desempenho dos sistemas de computadores.
Podemos azer a comparação de um pipelining com um motor de carro de
quatro tempos e vários cilindros. Enquanto um cilindro está na ase de ali-
mentação, outro está na ase de compressão, outro na de explosão e assim
por diante. Isto aumenta bastante a eciência do motor.
3.2 SoftwareNa Figura 1.4 vimos três camadas/níveis de sotware: aplicativos, utilitários e
sistema operacional. Os sotware ou programas executados pelos usuários
são atualmente chamados, atualmente, de aplicativos. Antigamente se cha-
mavam simplesmente programas. Quase tudo que o usuário consegue azer
utilizando o computador necessita de um aplicativo. Esses programas podem
ser, por exemplo, um editor de textos, uma planilha ou um programa de im-
posto de renda, de controle de estoques ou de contas a receber.
Antigamente havia uma distinção mais nítida entre os aplicativos e os utilitá-
rios, pois havia um personagem a mais no cenário: o operador do computa-
dor. Este executava algumas atividades especícas, como copiar de ta para
disco e vice-versa ou operar as impressoras. Para executar essas atividades o
operador precisava de uma série de programas, como, por exemplo, um pro-
grama para localizar um arquivo no computador. A maioria dos programas
requeridos pelo operador era chamada de utilitários.
Hoje em dia continua a existir um conjunto de programas, utilizados como
interace entre o usuário e o hardware. O termo utilitário é, assim, uma ree-
rência a sotwares relacionados com serviços do sistema operacional, como
os compiladores, linkers, depuradores e outros.
Os sotware aplicativos podem ser identicados como aqueles que estão
mais próximos do usuário comum, como os navegadores, editores de texto,
jogos, etc. Já os sotware utilitários são aqueles que azem a intermediação
entre os aplicativos e o núcleo do sistema operacional, possuindo unções
mais especícas e geralmente mais restritas, como ligadores, depuradores,
compiladores, etc.
Dentre os sotware utilitários podemos destacar alguns que dão apoio à
programação de computadores: tradutores, compiladores, montadores, in-
07
terpretadores, ligadores, carregadores, depuradores. Nas próximas seções
estaremos abordando esses utilitários com mais detalhes.
3.2.1 Tradutores, compiladores e montadoresCom o surgimento das primeiras linguagens de montagem ( Assembly ) e as
linguagens de alto nível, o programador passou a se preocupar menos com
aspectos de hardware e a escrever em uma linguagem mais próxima da
linguagem humana.
Apesar das vantagens proporcionadas pelas linguagens de montagem e de alto
nível, que propiciaram um aumento enorme na produtividade dos programado-
res, os programas não estão prontos para serem executados diretamente pela
CPU. Eles deverão passar por uma etapa de conversão, quando a codicação
do programa é traduzida para código de máquina. É essa a unção do tradutor.
O utilitário “tradutor” tem a unção de converter todo o código onte escrito
em linguagem de alto nível para código de máquina.
O tradutor, pelo tipo de linguagem de programação utilizada, pode ser cha-
mado de montador ou compilador:
Programa fonte Programa objetoTradutor
MontadorLinguagem
de MontagemMódulo objeto
Compilador Módulo objetoLinguagem
de Alto Nível
Figura 3.4: Representação das dierenças entre o tradutor, montador e compiladorFonte: Adaptado de Machado, 2004
3.2.2. InterpretadorAssim é chamado um tradutor que não gera o módulo objeto. A partir de um
programa onte, escrito em linguagem de alto nível, o interpretador, no momen-
to da execução do programa, traduz cada instrução e a executa em seguida.
Sua desvantagem é o tempo gasto na tradução das instruções de um pro-
grama toda vez que este or executado, já que não existe a geração de
um código executável.
A denominação montador ocorrequando é gerado o módulo
objeto (a linguagem de máquina)a partir de uma linguagem de
montagem (assembler ). Adenominação compilador é dada
ao utilitário responsável porgerar, a partir de um programa
escrito em linguagem de altonível (Cobol, C, Delphi, etc.),um programa em linguagem de
máquina (módulo objeto)
08
Alguns exemplos de linguagens interpretadas são o Basic e o Perl.
3.2.3. Linker O linker (ligador) é o utilitário responsável por gerar, a partir de um ou mais
módulos objeto, um único programa executável, conorme Figura 3.5. Sua
unção é resolver todas as reerências simbólicas existentes entre os módulos
- objeto, reservar memória para a execução do programa e determinar uma
região da memória onde o programa será carregado para sua execução.
Módulo objeto
.
.
.
Módulo objeto
Módulo objeto
Linker ProgramaExecutável
Figura 3.5: Representação do papel do linker Fonte: Adaptado de Machado, 2004
Em ambientes multiprogramáveis esse tipo de alocação xa eita pelo linker
é inviável porque neste caso a memória é compartilhada entre diversos pro-
gramas: é pouco provável que no momento em que o sistema carrega um
programa, sua área de memória que oi predeterminada esteja disponível. A
solução para isso é permitir que um programa possa ser executado em qual-
quer região disponível da memória, durante a sua carga (código relocável).
Esse tipo de relocação não é realizado pelo linker, e sim por outro utilitário,
chamado loader, responsável por carregar os programas na memória.
3.2.4. Loader O loader (carregador) é o utilitário responsável por colocar sicamente na memó-
ria principal um programa para sua execução. Pode permitir que um programa
seja carregado em regiões dierentes toda vez que or trazido para a memória.
Quando o loader carrega um programa para memória principal, ele alo-
ca uma área de código, uma área de dados e uma área de pilha. A área
de código armazena o programa executável, a área de dados armazena
as variáveis e constantes utilizadas no programa e a área de pilha armaze-
na os endereços de retorno das unções ou procedimentos chamados du-
Os IDEs (Ambientes Integradosde Desenvolvimento), comoo Dev C++, executam essasunções (de compilador e link ere até a carga do executável)de uma vez, quando vocêaperta o F9. Você não percebequando é executada cada umadelas, embora sejam distintas.Você só consegue ver, na pastaonde você está trabalhando,os programas onte (comterminação “ .c” ou “ .cpp”) e oexecutável (terminação “ .exe”);o módulo objeto intermediário(criado durante a compilação)você não vê mais.
09
rante a execução do programa. O uncionamento do carregador depende
do código gerado pelo linker e, de acordo com este, pode ser classicado
como absoluto ou relocável:
• Loader absoluto - o loader só necessita conhecer o endereço de
memória inicial e o tamanho do módulo para realizar o carregamento.
Então, o loader transere o programa da memória secundária para a me-
mória principal e inicia sua execução;
• Loader relocável - o programa pode ser carregado em qualquer posi-
ção de memória e o loader é responsável pela relocação no momento
do carregamento.
O processo completo de compilação, link-edição e carga de um programa é
mostrado na Figura 3.6.
LigaçãoDinâmica
Tempode Carga
Tempo deExecução
Módulo deCarga
Programa-fonte
Programa-fonte
Compiladorou Montador
Link – edição
Bibliotecado Sistema
Carregador
Biblioteca doSistema Carregada
Dinamicamente
ImagemBinária naMemória
OutrosMódulosObjeto
Figura 3.6: As várias etapas do desenvolvimento e processamento de um programaFonte: Adaptado de Silberschatz, Galvin e Gagne, 2000
10
3.2.5. DepuradorO desenvolvimento de programas está sujeito a erros de lógica, indepen-
dentemente da metodologia ou linguagem utilizadas pelo programador. O
depurador é o utilitário que permite ao usuário acompanhar e controlar a
execução de um programa a m de detectar erros na sua estrutura. O depu-
rador ajuda a detectar os erros, mas não os corrige. O depurador geralmente
oerece ao usuário os seguintes recursos:
• acompanhar a execução de um programa instrução por instrução;
• possibilitar a alteração e a visualização do conteúdo de variáveis;
• colocar pontos de parada dentro do programa, de orma que, durante a
execução, o programa pare nos pontos determinados;
• especicar em orma de envio de mensagem, toda vez que o conteúdo
de uma variável or modicado.
Esses recursos de depuraçãode programas também estãopresentes em IDEs, geralmentena opção Debug.
11
Objetivos
Apresentar os principais dispositivos de hardware.
Conceituar software voltado ao contexto dos sistemas operacionais.
Mostrar a importância do hardware e software em um sistema
computacional.
2.1 Considerações iniciaisNessa aula abordaremos os principais conceitos relacionados a hardware
e software e como estes estão diretamente ligados ao projeto de sistemas
operacionais. Ao longo das aulas será possível entender um pouco mais sobre
os principias dispositivos de hardware, sua forma de funcionamento e os
softwares utilitários usados no contexto dos sistemas operacionais.
2.2 HardwarePodemos dizer que hardware e software são elementos vitais em um sistema
de computação e que um não vive sem o outro. Em um sistema computacio-
nal temos um conjunto de hardware formado por processadores, memória,
barramentos, registradores, monitores de vídeo, mouse, teclado, impressoras,
discos magnéticos, entre outros dispositivos. Estes por sua vez manipulam
dados de forma digital o que torna um sistema computacional confiável na
representação e transmissão de dados.
Um sistema computacional geralmente é formado pela composição de três
subsistemas básicos (também conhecidos como unidades funcionais): pro-
cessadores (UCP), memória principal (RAM) e dispositivos de entrada e saída
(E/S). Estes itens compõem qualquer tipo de computador digital existente
independente de fabricante, marca ou modelo.
2.2.1 ProcessadorO processador ou Unidade Central de Processamento (UCP) tem como função
controlar e executar instruções presentes na memória principal (RAM) através de
Aula – Conceitos de hardware e software
12
operações aritméticas (como somar, subtrair, multiplicar e dividir) e operações
lógicas (comparações, movimentação de dados, etc.).
Um processador é composto por alguns elementos básicos como a Unidade
de Controle (UC), a Unidade Lógica e Aritmética (ULA) e os registradores.
A UC gerencia as atividades de todos os dispositivos do computador, como por
exemplo, a gravação de dados em discos, a busca de instrução em memória,
entre outros. Já a ULA realiza as operações lógicas e aritméticas, conforme
citado nos parágrafos anteriores. Os registradores por sua vez têm a função
de guardar dados temporariamente, servindo como uma memória de alta
velocidade interna do processador, porém com uma capacidade de armaze-
namento reduzida e um custo maior que a memória principal.
A sincronização entre as funções do processador se dá através de um sinal de
clock. Este sinal por sua vez, é gerado através de um pulso cíclico que altera
variáveis de estado do processador.
2.2.2 Arquiteturas RISC e CISCUma CPU em relação ao número de instruções de processamento que pode
reconhecer classifica-se em: CISC e RISC.
2.2.2.1 CISCUm processador CISC reconhece mais de uma centena de instruções. Devido
a esta característica, pode executar de modo direto a maioria das operações
programadas pelos modernos softwares.
Os processadores com arquitetura CISC possuem instruções complexas que
são interpretadas por microprogramas. O núcleo de registradores é pequeno
e qualquer instrução pode referenciar a memória principal.
Os processadores são em sua grande maioria chips CISC. Quanto maior a
quantidade de instruções que um microprocessador é capaz de identificar,
mais lenta é a execução de cada uma delas.
2.2.2.2 RISCUm processador RISC reconhece um número limitado de instruções, sendo que
em contrapartida, estas instruções são otimizadas para que sejam executadas
com mais rapidez.
clock É um circuito oscilador que
tem a função de sincronizar e ditar a medida de velocidade
de transferência de dados entre duas partes essenciais
de um processamento. Em outras palavras, refere-se a
medida de frequência com que as operações são realizadas
(ciclos por segundo).
13
A arquitetura RISC se caracteriza por possuir poucas instruções de máquina,
que são executadas diretamente pelo hardware. Estas instruções, em sua
maioria, não acessam a memória principal, trabalhando com registradores
que neste tipo de processador se apresentam em grande número.
Portanto, a arquitetura RISC reduz o conjunto de instruções ao mínimo indis-
pensável:
As instruções não contempladas (para execução) são executadas como com-
binações das instruções existentes. Com isso, consegue-se desempenho até
50 % a 75 % superior à de um processador CISC.
No Quadro 2.1, podemos observar as principais diferenças entre os proces-
sadores com arquiteturas RISC e CISC.
Quadro 2.1: Arquitetura RISC × arquitetura CISCArquitetura RISC Arquitetura CISC
Poucas instruções Muitas instruções
Instruções executadas pelo hardware Instruções executadas por microcódigo
Instruções com formato fixo Instruções com diversos formatos
Instruções utilizam poucos ciclos de máquina Instruções utilizam múltiplos ciclos
Instruções com poucos modos de endereçamento Instruções com diversos modos de endereçamento
Arquitetura com muitos registradores Arquitetura com poucos registradores
Fonte: Adaptado de Maia, 2007
2.2.3 Memória principalUm computador em seu interior possui vários tipos de memórias. A memória
principal do computador é conhecida como memória RAM (Random Access Memory), ou memória de acesso aleatório. Ela é chamada de memória principal,
pois é utilizada para manter os programas em execução, tanto dos usuários
como do sistema operacional.
A memória é composta por unidades de acesso denominadas de células.
Cada uma das células possui um determinado número de bits. O acesso ao
conteúdo de uma célula se dá pela especificação de um número denominado
de endereço. O endereço nada mais é do que uma referência única que fazemos
a uma célula de memória. Quando um programa deseja fazer operações de
gravação e leitura em uma célula, este deverá antes especificar o endereço
de memória desejado, para então realizar a operação.
14
A quantidade de memória RAM disponível em um computador, exerce um
grande efeito sobre o desempenho do mesmo, uma vez que sem memória
RAM suficiente o sistema passa a utilizar a memória virtual, que é muito mais
lenta que a memória RAM.
Uma questão importante a ser lembrada é que a memória RAM é volátil,
ou seja, todo o conteúdo se apaga quando o computador é desligado ou
reiniciado. Assim, caso tenhamos programas em memória e tivermos uma
queda de energia elétrica, se não tivermos um dispositivo como o no-break
(que garanta a estabilidade de energia), perderemos os dados que estão
nesta memória.
Os chips de memória RAM são vendidos na forma de pentes de memória, com
diferentes velocidades de funcionamento (atualmente na casa dos Gigahertz),
tamanhos (01, 02, 04 GB, etc.) e tipos (DDR, DDR2, DDR3, etc.).
2.2.4 Memória cacheA memória cache pode ser caracterizada como uma memória de alta velo-
cidade, volátil e na grande maioria das vezes com pequena capacidade de
armazenamento. Sua principal função é diminuir a disparidade existente entre
a velocidade na qual o processador executa instruções, bem como a velocidade
com que os dados são lidos e gravados em memória principal.
O tempo de acesso a um dado presente na memória cache é muito menor
que se o mesmo estivesse em memória principal.
A memória cache guarda os dados mais solicitados. Dessa forma, cada vez que
o processador necessita de determinado dado ele verifica se esta informação
encontra-se na memória cache, caso contrário, ele faz uma busca em memória
principal (o que aumenta o tempo de acesso à informação).
A maioria dos processadores atuais apresentam um esquema de memória
cache composto por múltiplos níveis. O funcionamento deste esquema tem
por princípio que quanto menor a capacidade de armazenamento da memória
cache, mais rápido é o acesso a um determinado dado.
Para aumentar o desempenho no funcionamento das memórias caches a
hierarquização em múltiplos níveis torna-se necessária. Nesse esquema, o
nível mais alto de cache é chamado de L1 (Level 1), com baixa capacidade de
armazenamento e com alta velocidade de acesso. O nível L2 (Level 2) possui
maior capacidade de armazenamento, porém velocidade de acesso inferior a L1.
15
2.2.5 Memória secundáriaA memória secundária é utilizada para guardar dados de forma permanente
no computador. Este tipo de armazenamento não necessita de alimentação,
diferentemente da memória principal que necessita estar energizada para
manter suas informações.
O acesso à leitura e gravação de dados na memória secundária é mais lento
se comparado à memória principal, entretanto o custo é baixo e a capacidade
de armazenamento é bastante superior.
Quanto aos tempos de acesso, a memória secundária funciona na ordem de
milissegundos (10-3), enquanto a memória principal trabalha na ordem de
nanossegundos (10-9). Podemos citar como exemplo de memória secundária
os seguintes dispositivos:
• Discos magnéticos (discos rígidos – HD).
• Discos ópticos (CD, DVD, Blu-Ray).
• Memória flash (pen drives).
Na Figura 2.1, é possível visualizar um comparativo entre os diferentes tipos
de dispositivos de armazenamento na relação custo, velocidade e capacidade
de armazenamento.
16
Figura 2.1: Relação entre dispositivos de armazenamentoFonte: CTISM, adaptado de Maia, 2007
2.2.6 Dispositivos de entrada e saídaOs periféricos ou dispositivos de entrada e saída, são componentes de um
computador que permitem expandir as funcionalidades do mesmo. Os mesmos
podem ser divididos em duas categorias principais: os utilizados como memória
secundária e os que servem como interface usuário-máquina. Veremos alguns
exemplos de dispositivos de entrada e saída de dados.
2.2.6.1 Dispositivos de entradaOs dispositivos de entrada ou periféricos de entrada têm a função de codi-
ficar os dados que entram no computador para que os mesmos possam ser
processados pelo computador. São considerados dispositivos de entrada:
• Câmera digital.
• Câmera filmadora.
• Caneta ótica.
• Drive de Blu-Ray.
• Drive de CD/DVD-ROM.
17
• Joystick.
• Leitora de códigos de barra.
• Mesa gráfica.
• Microfone.
• Mouse.
• Pen drive.
• Scanner.
• Teclado.
• Tela sensível ao toque.
2.2.6.2 Dispositivos de saídaOs dispositivos de saída têm a função de decodificar os dados gerados pelos
dispositivos de entrada, para que estes possam ser entendidos pelo usuário.
Em outras palavras, os dispositivos de saída permitem extrair e visualizar
informações que estão no computador.
Abaixo alguns exemplos de dispositivos de saída de dados:
• Caixas de som.
• Drive gravador de Blu-Ray.
• Drive gravador de CD-ROM/DVD-ROM.
• Impressora.
• Monitor de vídeo.
• Pen drive.
• Plotter.
• Projetores digitais.
18
Cabe salientar que existem dispositivos que funcionam tanto como periféricos
de entrada como de saída, nestes casos sendo classificados como dispositivos
de entrada/saída de dados.
Os dispositivos de entrada e saída são responsáveis pela interação da máquina
com o homem. É por meio deles que os dados entram e saem do computador.
2.3 SoftwareO software é responsável por servir como interface entre as necessidades dos
usuários e os dispositivos de hardware. Nos sistemas operacionais encontramos
uma diversidade de softwares com funções diferenciadas, mas que exercem
um papel importante. Veremos agora alguns dos principais utilitários aos
sistemas operacionais.
2.3.1 TradutorOs primeiros programas de computador foram desenvolvidos através de uma
linguagem denominada de “linguagem de máquina”. Além de exigir um
conhecimento extremo por parte do programador era necessário também
conhecer em detalhes o hardware do computador, como os endereços de
memória onde seriam armazenados os programas.
Este cenário mudou quando começaram a surgir as primeiras linguagens
de montagem ou assembly e as linguagens de alto nível. Estas linguagens
facilitaram a construção de programas, documentações e manutenção dos
mesmos.
Apesar das melhorias e facilidades proporcionadas por estas linguagens, o
código fonte gerado por estes utilitários, não permitiam a execução direta
pelo processador. Para isso, estes códigos precisavam da conversão de sua
representação simbólica para a linguagem de máquina. Esta conversão era
realizada por um utilitário chamado de tradutor.
O módulo gerado pelo tradutor é chamado de módulo-objeto. Dependendo
do tipo de programa-fonte, existem dois tipos diferentes de tradutores que
geram módulos-objeto: montador e compilador.
O montador é o utilitário capaz de traduzir um programa-fonte em linguagem
de montagem para um programa-objeto não executável (módulo-objeto).
19
O compilador é o utilitário que tem a função de gerar (dado um programa
escrito em linguagem de alto nível) um programa em linguagem de máquina,
não executável. Como exemplos de linguagens de alto nível estão: C, Pascal,
Cobol, Delphi, Java, entre outros. Os programas fonte, desenvolvidos nestas
linguagens podem ser portados entre computadores de diferentes fabricantes,
desde que existam padrões para a sintaxe da linguagem, permitindo assim o
desenvolvimento de aplicações independentes do equipamento. Na Figura 2.2,
é apresentado um resumo quando as funções de um tradutor, montador e
compilador.
Figura 2.2: Tradutor, montador e compiladorFonte: CTISM, adaptado de Maia, 2007
2.3.2 InterpretadorA função de um interpretador de código pode ser entendida como um tradutor
que não gera módulo-objeto. Durante a execução de um programa, escrito
em uma linguagem de alto nível, o interpretador traduz cada instrução e a
executa imediatamente. São exemplos de linguagens de alto nível do tipo
interpretadas: PHP, Basic, Perl, entre outras.
Nas linguagens interpretadas não existe a geração de um código-objeto, uma
vez que o código fonte escrito pelo desenvolvedor já é o próprio código a ser
interpretado. A desvantagem de tal método é o tempo gasto na tradução das
instruções de um programa toda a vez que este for executado.
2.3.3 LinkerO linker ou editor de ligação tem por objetivo gerar, dado um ou mais módu-
los-objetos, um único programa executável. Entre suas funções básicas estão
a resolução das referências simbólicas existentes entre os módulos e a reserva
de memória para a execução do programa.
20
O linker também é responsável pela tarefa de relocação (determinar a posição
de memória na qual o programa será carregado para execução).
Figura 2.3: Função do linkerFonte: CTISM, adaptado de Maia, 2007
2.3.4 LoaderUm loader tem a função, junto ao sistema operacional, de carregar na memória
principal um programa a fim de que o mesmo possa ser executado. O loader pode ser classificado como do tipo absoluto ou relocável, dependendo do
procedimento de carga utilizado.
Para código executável do tipo absoluto, o loader necessita saber o endereço
de memória inicial e o tamanho do módulo para realizar o carregamento,
dando início ao processo de transferência do programa da memória secundária
para a memória principal.
Quanto ao código relocável, o programa pode ser carregado em qualquer
posição de memória, sendo o loader responsável pela relocação no momento
do carregamento.
2.3.5 DepuradorO desenvolvimento de programas é uma tarefa que exige além de raciocínio
lógico apurado um bom conhecimento da linguagem de programação que se
está utilizando na construção de um determinado programa. Porém, nenhum
destes itens garante que não podemos ter problemas quanto a erros de sintaxe
e lógica na escrita de nossos códigos.
Para auxiliar nesta tarefa de identificação e correção de erros, temos um utilitário
depurador ou debugger. O depurador permite ao programador acompanhar
21
toda a execução de um programa (do início ao fim) permitindo detectar erros
em sua lógica. Este utilitário oferece recursos, tais como:
• Acompanhar a execução de um programa, linha a linha de código.
• Permitir a alteração e visualização do conteúdo de variáveis.
• Definir pontos de parada dentro do programa (conhecidos como break-points), permitindo que durante a execução do programa o mesmo pare
nestes pontos.
22