Buscar

Exercícios com Resolução - Introdução a Sistemas de Computação Digital

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 1
EA869 - Introdução a Sistemas de Computação Digital 
Lista de Exercícios Preparatórios para a Prova 1 (com Gabarito) 
Questão 1 
a) Explique por que existem problemas claramente definidos que não podem ser resolvidos por 
qualquer computador, independente de tempo e quantidade de memória disponíveis. 
Mesmo restrito ao conjunto dos problemas claramente definidos, está demonstrado teoricamente 
que existem problemas para os quais não é possível obter um algoritmo (número finito de 
procedimentos finitos) que leve à solução, sendo portanto problemas não-computáveis. 
 
b) Defina problemas computacionalmente tratáveis. 
São problemas computáveis para os quais existe um algoritmo de solução cuja complexidade 
(temporal e espacial) é polinomial ou menor. 
 
c) Dado um problema e dois algoritmos (A e B) propostos para sua solução, explique por que as 
complexidades dos algoritmos A e B podem ser diferentes e relacione estas duas complexidades à 
complexidade intrínseca do problema. 
Podem existir diferentes algoritmos que levam à mesma solução de um dado problema, de modo 
que suas complexidades podem diferir. Ex: algoritmos para multiplicação apresentados em aula. 
A complexidade dos algoritmos A e B vai ser sempre maior ou igual à complexidade intrínseca 
do problema. 
 
d) Numere de 1 a 8 os termos a seguir, de acordo com a seqüência de passos que levam à resolução de 
um problema usando computador. 
( 6 ) programa em linguagem de máquina ( 2 ) elaboração do algoritmo 
( 1 ) definição do problema ( 4 ) programa em linguagem de alto nível 
( 3 ) definição da linguagem de alto nível ( 8 ) execução 
( 5 ) compilação + montagem ( 7 ) carregamento na memória 
 
e) Use o conceito de máquina virtual para explicar por que os computadores são considerados 
máquinas de propósito geral. 
Dependendo dos recursos alocados pelo software que se encontra em execução, o mesmo 
hardware pode realizar diferentes tarefas de processamento de informação, se comportando, sob 
a perspectiva do usuário, como uma máquina de escrever virtual, uma televisão virtual, uma 
calculadora virtual, etc. Se o mesmo hardware é capaz de executar diferentes tarefas via 
software, então se justifica a denominação de máquina de propósito geral. 
 
f) Descreva a função da memória cache e explique por que o princípio da localidade de referência é 
usado para justificar o uso da memória cache. 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 2
A memória cache se posiciona entre a memória principal e o processador, é mais rápida que a 
memória principal e com menos capacidade, por ser mais cara. A transferência entre ela e o 
processador é feita palavra-a-palavra, e entre ela e a memória principal é feita bloco-a-bloco. 
Sua função é acelerar a velocidade média de acesso à memória, e isso é garantido pelo princípio da 
localidade de referência, que afirma que é alta a probabilidade de que a próxima palavra de 
memória a ser lida ou escrita está no mesmo bloco da palavra que está sendo processada. Sendo 
assim, ocorrem em média muitas transferências palavra-a-palavra a cada transferência bloco-a-
bloco. 
Obs: Existe memória cache também para a memória secundária, denominada cache de disco. 
 
Questão 2 
Seja a seguinte expressão aritmética: 
A = (A*B) − C 
Para cada item a seguir, escreva um programa em linguagem simbólica que calcule o valor de A sem 
alterar os conteúdos de B e C. 
a) uma máquina de 3 endereços, com o seguinte repertório de instruções (observe que R não precisa 
ser necessariamente diferente de S1 e S2, e não há registradores auxiliares): 
ADD S1, S2, R R ← (S1) + (S2) 
SUB S1, S2, R R ← (S1) − (S2) MUL A, B, A 
DIV S1, S2, R R ← (S1) / (S2) SUB A, C, A 
MUL S1, S2, R R ← (S1) * (S2) 
 
b) uma máquina de 2 endereços, com um único registrador auxiliar TMP e o seguinte repertório de 
instruções: 
 
ADD S1, S2 S2 ← (S1) + (S2) MOV B, TMP 
SUB S1, S2 S2 ← (S1) − (S2) MUL A, TMP 
DIV S1, S2 S2 ← (S1) / (S2) MOV C, A 
MUL S1, S2 S2 ← (S1) * (S2) SUB TMP, A 
MOV S1, S2 S2 ← (S1) 
 
c) uma máquina de 1 endereço, com o seguinte repertório de instruções (não há registradores 
auxiliares): 
ADD S Acc ← (Acc) + (S) 
SUB S Acc ← (Acc) − (S) LDA A 
DIV S Acc ← (Acc) / (S) MUL B 
MUL S Acc ← (Acc) * (S) SUB C 
STA S S ← (Acc) STA A 
LDA S Acc ← (S) 
 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 3
Questão 3 
Utilizando os diagramas fornecidos (inclua, caso necessário, novos diagramas), mostre a execução da 
instrução a seguir, indicando ao lado de cada diagrama as microoperações em cada pulso de relógio. 
Suponha que a UAL contém um circuito combinacional para adição, mas não para subtração. O 
conteúdo do registrador TMP pode ser incrementado e pode também ser complementado. 
SUB,I end Acc ← (Acc) − ((end)) 
formato da instrução SUB,I 
 end 
 
UCP
UCUAL
Memória
Acc
RDM
TMP
PC
RI
Rg
REM
1
23
 
 
 
1. REM ← (PC) 
2. RDM ← ((REM)) 
 PC ← (PC) + 1 
3. RI ← (RDM) 
UCP
UCUAL
Memória
Acc
RDM
TMP
PC
RI
Rg
REM
4
5
6
 
 
 
4. REM ← (PC) 
5. RDM ← ((REM)) 
 PC ← (PC) + 1 
6. Rg ← (RDM) 
UCP
UCUAL
Memória
Acc
RDM
TMP
PC
RI
Rg
REM
7
8
9
 
 
 
 
7. REM ← (Rg) 
8. RDM ← ((REM)) 
9. Rg ← (RDM) 
UCP
UCUAL
Memória
Acc
RDM
TMP
PC
RI
Rg
REM
10
11
12
 
10. REM ← (Rg) 
11. RDM ← ((REM)) 
12. TMP ← (RDM) 
13. TMP ← (TMP) 
14. TMP ← (TMP) + 1 
15. Σ ← (Acc) + (TMP) 
16. Acc ← (Σ) 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 4
Questão 4 
No computador hipotético da figura Q4, apenas a memória está especificada como tendo 256 palavras 
de 12 bits. Sabe-se também que todas as instruções são de 1 palavra, contendo o código de operação e 
o endereço de um operando, conforme o seguinte formato: 
C.O. end 
a) Complete a descrição técnica desse computador indicando: 
• largura dos barramentos e conexões na figura (no de bits); 
• tamanho dos registradores na figura (no de bits); 
• número máximo de instruções que a máquina suportaria: 24 = 16 . Justifique. 
A palavra de instrução vai ter 12 bits. Como existem 256 palavras na memória principal, 
são necessários 8 bits para o campo de endereço, sobrando 4 bits para o código de 
operação. Veja barramentos associados ao registrador RI na figura Q4. 
 
b) Para o mesmo computador da figura, assuma, a partir de agora, que podem existir instruções com 
dois operandos, formadas por duas palavras como segue 
C.O. end1 
 end2 
Contando apenas com os registradores existentes, mostre todos os passos para busca e execução da 
instrução 
ADD end1,end2 end2 ← (end1) + (end2) 
indicando, para cada pulso de relógio, as microoperações e microcomandos correspondentes. 
Pulso Microoperações Microcomandos 
1 REM ← (PC) TPC 
2 RDM ← ((REM)) E, R/ W 
 PC ← (PC) + 1 IPC 
3 RI ← (RDM) TB, TRB 
 
4 REM ← (RI.end) TRI 
5 RDM ← ((REM)) E, R/ W 
6 Acc ← (RDM) TRB, WA 
 
7 REM ← (PC) TPC 
8 RDM ← ((REM)) E, R/ W 
 PC ← (PC) + 1 IPC 
9 RI ← (RDM) TB, TRB 
 
10 REM ← (RI.end) TRI 
11 RDM ← ((REM)) E, R/ W 
12 TMP ← (RDM) TRB, W 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 5
13 Σ ← (Acc) + (TMP) R, Rε 
14 Acc ← (Σ) Wε 
(opcional) REM ← (RI.end) TRI 
15 RDM ← (Acc) TBR, RA 
16 (REM) ← (RDM) E 
 
 
Especificação dos sinais de controle:Z: zera o registrador TMP C: complementa o conteúdo do registrador TMP 
I: incrementa o conteúdo do registrador TMP R: lê do registrador TMP 
W: escreve no registrador TMP WA: escreve do barramento no registrador Acc 
RA: lê do registrador Acc para o barramento Wε: escreve da saída do somador no registrador Acc 
Rε: lê do registrador Acc para a entrada do somador TB: transferência do barramento 
TRI: transferência do RI TPC: transferência do PC 
IPC: incrementa PC TBR: transferência do barramento para o registrador 
TRB: transferência do registrador para o barramento R/ W : leitura da memória / escrita na memória 
E: habilita 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura Q4 – Computador hipotético 
PC 
REM 
MEMÓRIA 
RAM 
256 × 12 
RDM
RI 
E 
R/W 
TRB 
TBR 
IPC 
TPC
TRI 
TB 
Rε
Wε 
RA 
WA 
W
R
I
C
Z
E 
R/W 
TRB 
TBR 
IPC 
TPC 
TRI 
TB 
TMP 
I 
C 
Z 
W
R
Acc 
Wε 
Rε 
WA 
RA 
Σ
CONTROLADOR 
8 
8 
8 
8 
8 
4 
12
12
12
12
12 
12 
12
12
12 
12
12 
12 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 6
Questão 5 
Embora os processos físicos envolvidos sejam distintos, tanto um scanner quanto uma máquina 
fotográfica digital têm a função básica de digitalizar uma imagem. Utilizando os conceitos de pixel, 
resolução e número de cores por pixel, explique como gerar um arquivo apenas com valores binários 
que corresponda a uma dada imagem processada pelo scanner ou pela máquina fotográfica. Apresente 
o procedimento para se calcular o tamanho em bytes do arquivo binário resultante. Calcule o tamanho 
do arquivo sabendo-se que: 
• a resolução é 1280 × 1024 pixels; 
• o número de cores distintas é 512. 
Para digitalizar uma imagem é necessário realizar dois processos de quantização. 
Primeiramente, divide-se a imagem em um número finito de pixels, arranjados uniformemente 
em linhas e colunas. Em seguida, é necessário supor que cada pixel pode indicar uma dentre um 
conjunto finito de cores. A resolução da imagem está associada com a quantidade de linhas e 
colunas utilizadas, formando uma matriz de pixels. Esta matriz de pixels pode ser convertida em 
um vetor de pixels, empilhando uma a uma suas linhas (ou suas colunas). Como cada cor deve 
possuir um código binário associado, então o número de bits por pixel deve ser suficiente para 
que haja um único código binário por cor. 
Com os dados numéricos da questão, o número de pixels será de 1.310.720 e o número de bits por 
pixels deve ser no mínimo 9. Sendo assim, o vetor de bits correspondente à imagem digitalizada e 
a ser armazenado na memória do computador terá dimensão de 11.796.480 bits, ou seja, 
1.474.560 bytes. 
A interpretação da seqüência de bits precisa levar em conta o número de bits por pixel e a 
política de empilhamento das linhas (ou colunas) da matriz de pixels. Normalmente, arquivos 
correspondentes a imagens vão conter um cabeçalho descrevendo as dimensões envolvidas e 
serão armazenados após a aplicação de algum processo de compactação de informação. 
Dependendo do processo de compactação, resultam arquivos JPG, GIF, BMP, TIF, etc. 
 
Questão 6 
Sabendo que um sistema operacional multi-usuário é basicamente um sistema que aceita 
multiprogramação (uma única UCP executando vários programas) e que compartilha recursos 
computacionais entre vários usuários (além de compartilhar a UCP, todos os arquivos dos usuários 
podem estar armazenados em um mesmo disco rígido), explique como a existência de um sistema 
operacional multi-usuário pode reduzir o custo de uma empresa com computadores, mesmo sabendo 
que a multiprogramação requer máquinas com grande quantidade de recursos computacionais, portanto 
mais caras. 
Compartilhar recursos entre vários usuários implica amortizar o custo de aquisição dos 
recursos, além de reduzir drasticamente os custos de manutenção e gerenciamento. Se a máquina 
é 10 vezes mais cara que uma outra que atenda cada usuário individualmente, então se ela tiver 
capacidade de suprir recursos para mais de 10 usuários simultaneamente haverá uma redução 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 7
do custo de uma empresa com computadores. É lógico que muitos outros fatores devem ser 
levados em conta na hora de especificar o parque computacional de uma empresa, como por 
exemplo a diversidade de usos a que se destinam as máquinas, mas o tipo de raciocínio acima 
representa um dos fatores a serem considerados. 
 
Questão 7 
Em 2003, jornais e revistas dedicaram muita atenção ao 50o aniversário da descoberta da estrutura 
química do DNA. Embora James D. Watson e Francis Crick mereçam todo o reconhecimento, não 
houve menção do feito de um outro experimento científico que também completou 50 anos e que 
também causou grande impacto na ciência. Em 1953, Enrico Fermi e dois de seus colegas do 
Laboratório Científico Los Alamos (onde foi descoberta a bomba atômica), John Pasta e Stanislaw 
Ulam, inventaram o conceito de um ‘experimento de computador’. De repente, o computador se 
transformou em uma nova forma de exercer ciência, por realizar uma função semelhante àquela do 
microscópio e outros equipamentos que ampliam a capacidade sensorial humana, ao revelar 
peculiaridades de fenômenos que jamais seriam perceptíveis por meio de procedimentos tradicionais de 
experimentação em laboratório. Fermi e seus colegas introduziram a simulação computacional como 
uma forma eficaz de se buscar uma maior compreensão do conceito de entropia, e desde então 
inúmeros experimentos científicos e tecnológicos têm sido realizados usando simulação 
computacional. Pergunta: O que está por trás do poder da simulação computacional? 
A simulação computacional é possível devido a dois fatores: 
• o computador é uma máquina de propósito geral, podendo virtualmente sintetizar inúmeros 
fenômenos, com maior ou menor grau de precisão; 
• os princípios da computação analógica permitem utilizar um sistema para fornecer 
informações sobre um outro sistema, por analogias que podem ser estabelecidas entre 
ambos. 
Sendo assim, caso se queira prever o comportamento de algum dispositivo físico sujeito a 
algumas leis da natureza, basta tomar, em um computador, variáveis numéricas que expressem 
os atributos deste dispositivo físico e submetê-las a equacionamentos matemáticos que descrevam 
as leis da natureza que devem governar a evolução do fenômeno físico. Com isso, o mundo 
abstrato criado em computador vai reproduzir, por analogia, o fenômeno físico que estaria 
ocorrendo em um experimento de laboratório. Também aqui há muitas outras questões 
envolvidas, mas a essência dos processos envolvidos está evidenciada acima. 
 
Questão 8 
Considere um problema para o qual foram elaborados 3 algoritmos de solução: A, B e C. A 
complexidade temporal dos algoritmos é dada por: 
A: nnf 20)(1 = B: 
2
2 )( nnf = C: nnnf 23 log4)( = 
onde n é o tamanho do problema. 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 8
• Quais são as complexidades temporais assintóticas (big-Oh) dos três algoritmos? Qual é o melhor 
algoritmo neste caso? 
A: )(nO B: )( 2nO C: )(log)log( 22
nnOounnO 
O melhor algoritmo vai ser aquele que apresenta a menor complexidade para n → ∞. Neste caso, 
o algoritmo A é o melhor. 
• Determine os intervalos de valores de n em que cada um deles é melhor que os outros dois 
(Sugestão: use valores de n que sejam potências de 2). 
n 2 4 8 16 32 64 
A 40 80 160 320 640 1280 
B 4 16 64 256 1024 4096 
C 8 32 96 256 6401536 
 
B AC
2 16 32 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0 0.5 1 1.5 2 2.5 3
-10
0
10
20
30
40
50
60
0 5 10 15 20 25 30 35 40
0
200
400
600
800
1000
1200
1400
1600
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 9
Questão 9 
O que é um problema NP e o que significa dizer que frente ao aumento do tamanho de um problema 
NP é necessário direcionar esforços no sentido de objetivos mais factíveis? 
Um problema NP é um problema computável mas não-deterministicamente polinomial. A 
melhor solução até então conhecida está associada a algoritmos de complexidade exponencial ou 
até superior. No entanto, não se sabe se existem algoritmos de solução menos complexos, capazes 
de resolver o problema em tempo polinomial ou até inferior. Embora se esteja mencionando 
apenas tempo de processamento, deve ser considerado também o uso de memória nesta análise. 
Repare que, quando se fala em algoritmos de solução está se referindo a algoritmos exatos, ou 
seja, algoritmos que garantem a obtenção da solução ótima. 
Frente ao aumento do tamanho de um problema NP, obter a sua solução usando computador 
passa a ser impossível caso se recorra aos algoritmos exatos existentes. No entanto, para muitos 
problemas NP, dentre eles parte significativa dos problemas de grande interesse prático nos dias 
de hoje, já existem algoritmos de aproximação, ou seja, algoritmos de solução que não garantem 
a obtenção da solução ótima. Logo, na ausência de factibilidade dos algoritmos exatos, se 
justifica o investimento nos algoritmos de aproximação, os quais podem até fornecer a solução 
ótima ou ao menos uma boa solução aproximada (com desempenho próximo do ótimo). Os 
algoritmos de aproximação geralmente estão baseados em heurísticas e meta-heurísticas, as 
quais podem ser concebidas de acordo com as peculiaridades de cada problema. Exemplos: 
algoritmos evolutivos, busca tabu, simulated annealing, etc. 
 
Questão 10 
Descreva como surgiu o sistema operacional UNIX, o qual foi o primeiro sistema operacional 
desenvolvido quase que totalmente em linguagem de alto nível (linguagem C) e cuja versão para PCs é 
denominada Linux. 
Todos os pontos fortes e fracos do UNIX podem ser diretamente relacionados com a história do 
seu desenvolvimento, que teve início em meados dos anos 60 com a criação de um projeto 
conjunto entre Massachusetts Institute of Technology (MIT), General Electric e Bell Labs (mais 
especificamente Bell Telephone Laboratories, companhia controlada pela AT&T) para o 
desenvolvimento de um sistema operacional com compartilhamento de tempo. Este sistema 
operacional foi denominado MULTICS (MULTiplexed Information and Computing Service), 
não tendo o sucesso esperado, principalmente porque o projeto era muito ambicioso para a 
época e, além disso, o sistema operacional foi escrito em uma linguagem muito “pesada”, com 
compilador ineficiente. A equipe da Bell Labs abandonou o projeto em 1969. Mas Ken 
Thompson, um dos membros desta equipe e conhecedor do potencial do MULTICS, sentiu a 
necessidade de desenvolver por conta própria um sistema operacional com os mesmos 
propósitos, mas de uma forma bem mais simples e utilizando linguagem assembly (linguagem de 
montagem). Como o sistema desenvolvido por Thompson funcionou muito bem, ele começou a 
atrair a atenção de seus colegas da Bell Labs, sendo que um deles, Brian Kernighan, chamou-o 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 10
de UNICS (UNiplexed Information and Computing Service), parodiando MULTICS. Esta 
denominação pegou, sendo, mais tarde, reduzida definitivamente para UNIX. Conforme o 
sistema UNIX ia sendo transportado para arquiteturas de computador cada vez mais poderosas, 
ficou evidente que era preciso eliminar a necessidade de se reescrever todo o sistema operacional 
em linguagem assembly para cada nova máquina. Esta foi uma visão inovadora, pois até então a 
linguagem assembly era considerada indispensável para garantir funcionalidade efetiva e acesso 
irrestrito ao hardware. Depois de uma tentativa sem muito sucesso de reescrever o UNIX em 
uma linguagem de alto nível desenvolvida pelo próprio Ken Thompson (denominada linguagem 
B), foi seu colega Dennis Ritchie quem projetou uma linguagem especificamente voltada para a 
implementação de um sistema operacional, a qual ele denominou linguagem C. A linguagem C é 
uma linguagem de alto nível, mas apenas o suficiente para manter a portabilidade junto a várias 
arquiteturas de computador. Uma vez implementado o compilador C, Ritchie e Thompson 
reescreveram a maior parte do UNIX em C (RITCHIE & THOMPSON, 1974). Uma vez controlada 
pela AT&T, monopólio da área de telecomunicações, a Bell Labs não tinha permissão para 
operar comercialmente na área de computação. Sendo assim, a Bell Labs não impunha muitos 
obstáculos para licenciar o UNIX, o que motivou muitas universidades a solicitarem cópias deste 
sistema operacional. Com isso, grandes conhecedores de computação puderam fazer uso do 
UNIX e também contribuir para o seu desenvolvimento. 
Bibliografia citada: RITCHIE, D.M. & THOMPSON, K. The UNIX Timesharing System. Commun. 
of the ACM, vol. 17, pp. 365-375, 1974. 
 
Questão 11 
Descreva em poucas palavras o sistema operacional Linux. 
O LINUX é um sistema operacional gerado a partir de um “clone” do UNIX. Ele foi 
originalmente concebido para rodar em computadores pessoais médios dotados de processadores 
Intel, como 386, 486 e Pentium. O LINUX é uma implementação da especificação POSIX, com 
extensões SYSV e BSD (estas são versões do UNIX), o que garante a semelhança entre os dois 
sistemas, embora o código tenha origens distintas. O autor original do núcleo (kernel) do LINUX 
foi Linus Torvalds, sendo que este sistema foi mantido e estendido por muitos voluntários ao 
redor do mundo. Ele é protegido por uma licença GPL (GNU Public License), de modo que 
qualquer pessoa pode copiar, alterar e distribuir o LINUX, sem no entanto poder impor 
qualquer restrição em relação à sua distribuição futura, devendo manter sempre o código 
disponível gratuitamente. Embora este cenário permita uma rápida evolução do sistema 
operacional, com uma tendência de suportar cada vez mais tipos de arquiteturas de computador, 
a diversidade de versões e potencialidades pode ser um forte empecilho para a sua disseminação. 
Além disso, é evidente que o mercado já ‘profissionalizou’ o Linux e hoje existe um custo para 
aquisição destas versões ‘profissionais’ do Linux, embora boa parte do custo esteja associada a 
garantias de manutenção por parte do fornecedor. 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 11
Questão 12 
A seguir, estão apresentadas as várias fases de duas propostas distintas de solução (ainda existem 
outras) via algoritmos de aproximação para o problema do caixeiro viajante, um dos mais importantes 
e mais conhecidos problemas NP-completos dentro da computação. O objetivo é partir de uma cidade, 
passar uma única vez por todas as demais cidades e retornar à cidade de partida com um percurso de 
extensão mínima. As duas propostas de solução são semelhantes no aspecto de não garantirem a 
obtenção da solução ótima. O que existe notadamente de diferente entre as duas propostas de solução, 
sabendo que uma delas emprega um algoritmo evolutivo e a outra uma rede neural auto-organizável? 
A primeira proposta de solução interpreta o problema como a busca da melhor permutação de 
índice das cidades. Foi aplicado um algoritmo evolutivo, o qual vai gradualmente melhorando a 
qualidade da solução aolongo do tempo. A segunda proposta interpreta o problema como um 
problema de atração entre os pontos do anel (que variam de quantidade ao longo do tempo, 
igualando o número de cidades ao final) e as cidades, resultando num problema de auto-
organização. Repare que, embora pudessem ser os mesmos, o número de cidades e as posições 
das cidades são diferentes em cada caso, o que não prejudica a comparação qualitativa. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0 20 40 60 80 1000 
10 
20 
30 
40 
50 
60 
70 
80 
90 
100 
Melhor indivíduo na população inicial
0 20 40 60 80 100 0
10
20
30
40
50
60
70
80
90
100
Melhor indivíduo após 500 gerações 
0 20 40 60 80 1000 
10 
20 
30 
40 
50 
60 
70 
80 
90 
100 
Melhor indivíduo após 2000 gerações
0 20 40 60 80 100 0
10
20
30
40
50
60
70
80
90
100
Melhor indivíduo após 4000 gerações 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 12
Complementação da Tabela 3.5 
Livro-texto, pg. 99, cap. 3 
(Obs: As operações de multiplicação e divisão foram feitas com soma e subtração, 
respectivamente. Um código diferente seria produzido com o uso de shift. Esta é a 
razão de terem sobrado palavras da micromemória.) 
 
 
 Endereço na 
Micromemória 
Microoperações da 
Microinstrução 
Sinais de 
Controle 
 
0 
REM ← (PC) + 0 
RDM ← ((REM)) 
MPC ← (MPC) + 1 
1, 15 
16 
19, 23 
 
 
 
Busca 
1 
PC ← (PC) + 1 
RI ← (RDM) 
MPC ← (MPC) + (RI.co) 
1, 5, 10 
18 
22, 23 
2 MPC ← 0 + 11 7, 9, 10, 24 
3 MPC ← 0 + 13 7, 8, 10, 24 
4 MPC ← 0 + 15 7, 8, 9, 10, 24 
5 MPC ← 0 + 17 6, 10, 24 
6 MPC ← 0 + 19 6, 9, 10, 24 
7 MPC ← 0 + 36 5, 8, 24 
8 MPC ← 0 + 53 5, 6, 8, 10, 24 
9 MPC ← 0 + 54 5, 6, 8, 9, 24 
 
 
 
Mapea– 
 
 
mento 
10 MPC ← 0 + 57 5, 6, 7, 10, 24 
 
11 
REM ← 0 + (RI.end) 
RDM ← ((REM)) 
MPC ← (MPC) + 1 
6, 15 
16 
19, 23 
 
 
LOAD 
12 Acc ← 0 + (RDM) 
MPC ← 0 + 0 
7, 11 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 13
13 REM ← 0 + (RI.end) 
MPC ← (MPC) + 1 
6, 15 
19, 23 
 
 
STORE 14 RDM ← (Acc) + 0 
(REM) ← (RDM) 
MPC ← 0 + 0 
2, 14 
17 
 
15 REM ← 0 + (RI.end) 
RDM ← ((REM)) 
MPC ← (MPC) + 1 
6, 15 
16 
19, 23 
 
 
ADD 
16 Acc ← (Acc) + (RDM) 
MPC ← 0 + 0 
2, 7, 11 
 
17 REM ← 0 + (RI.end) 
RDM ← ((REM)) 
MPC ← (MPC) + 1 
6, 15 
16 
19, 23 
 
 
SUB 
18 Acc ← (Acc) – (RDM) 
MPC ← 0 + 0 
2, 7, 8, 11 
 
 
19 
REM ← 0 + (RI.end) 
RDM ← ((REM)) 
MPC ← (MPC) + 1 
6, 15 
16 
19, 23 
20 R2 ← (RDM) 
MPC ← (MPC) + 1 
7, 13 
19, 23 
21 R1 ← 0 + 0 
MPC ← (MPC) + 1 
12 
19, 23 
22 MPC ← (MPC) + TESTZERO 20, 23 
23 MPC ← 0 + 26 6, 7, 9, 24 
24 R1 ← (R1) + (R2) 
MPC ← (MPC) + 1 
3, 4, 12 
19, 23 
25 Acc ← (Acc) – 1 
MPC ← 0 + 22 
2, 5, 8, 11 
6, 8, 9, 24 
 
 
 
 
 
 
 
 
MUL 
 
26 Acc ← (R1) 
MPC ← 0 + 0 
3, 11 
 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 14
. 
. 
. 
. 
. 
. 
. 
. 
. 
36 REM ← 0 + (RI.end) 
RDM ← ((REM)) 
MPC ← (MPC) + 1 
6, 15 
16 
19, 23 
37 R2 ← (RDM) 
MPC ← (MPC) + 1 
7, 13 
19, 23 
38 R1 ← 0 – 1 
MPC ← (MPC) + 1 
5, 8, 12 
19, 23 
39 MPC ← (MPC) + TESTNEG 21, 23 
40 MPC ← 0 + 43 5, 7, 9, 10, 24 
41 R1 ← (R1) + 1 
MPC ← (MPC) + 1 
3, 5, 12 
19, 23 
42 Acc ← (Acc) – (R2) 
MPC ← 0 + 39 
2, 4, 11 
5, 8, 9, 10, 24 
 
 
 
 
 
 
 
 
DIV 
43 Acc ← (R1) 
MPC ← 0 + 0 
3, 11 
 
 . 
. 
. 
. 
. 
. 
. 
. 
. 
JUMP 53 PC ← 0 + (RI.end) 
MPC ← 0 + 0 
6, 10 
 
54 MPC ← (MPC) + TESTZERO 20, 23 
55 PC ← 0 + (RI.end) 
MPC ← 0 + 0 
6, 10 
 
 
 
JZ 
56 MPC ← 0 + 0 
57 MPC ← (MPC) + TESTNEG 21, 23 
58 PC ← 0 + (RI.end) 
MPC ← 0 + 0 
6, 10 
 
 
 
JN 
59 MPC ← 0 + 0 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 15
Exercícios – Capítulo 4: Modos de 
Endereçamento 
• a máquina possui os seguintes modos de endereçamento: 
‰ REGISTRADOR DIRETO 
‰ REGISTRADOR INDIRETO 
‰ ABSOLUTO DIRETO 
‰ IMEDIATO 
e também 8 registradores (R0 a R7). 
• instruções disponíveis para manipulação de registradores e posições de memória: 
‰ MOV R1, R2 R2 ← (R1) 
‰ MOV end, R1 R1 ← (end) 
‰ MOV R1, end end ← (R1) 
‰ MOV #opr, R1 R1 ← opr (pode ser dado ou endereço) 
‰ INCR R1 R1 ← (R1) + 1 
‰ DCR R1 R1 ← (R1) − 1 
 
 
Questão 2 
(a) auto-incremento 
MOV A, (R3)+ (R3) ← (A) 
R3 ← (R3) + 1 
MOV A, (R3) 
INCR R3 
 
(b) autodecremento 
MOV B, −(R5) R5 ← (R5) − 1 
(R5) ← (B) 
DCR R5 
MOV B, (R5) 
 
 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 16
Questão 3 
(a) POP R1 SP ← (SP) − 1 
R1 ← ((SP)) 
R2 ≡ SP 
DCR R2 
MOV (R2), R1 
 
 
(b) PUSH R1 (SP) ← (R1) 
SP ← (SP) + 1 
R2 ≡ SP 
MOV R1, (R2) 
INCR R2 
 
 
Questão 4 
MOV R1, P(R2) 
n = no. de bits em R2 
(P) ⊕ (R2) ← (R1) R3 ≡ P 
MOV R3, R4 
MUL 321L
n
0001# , R4 
ADD R2, R4 
MOV R1, (R4) 
 
 
Questão 5 
MOV R1, RX(R2) (R2) + (RX) ← (R1) R3 ≡ RX 
MOV R2, R4 
ADD R3, R4 
MOV R1, (R4) 
 
 
 
 
 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 17
Questão 6 
• indexado indireto pré-indexado 
MOV R1, ( RX(R2) ) ( (R2) + (RX) ) ← (R1) R3 ≡ RX 
MOV R2, R4 
ADD R3, R4 
MOV (R4), R5 
MOV R1, (R5) 
 
• indexado indireto pós-indexado 
MOV R1, RX((R2)) ((R2)) + (RX) ← (R1) R3 ≡ RX 
MOV (R2), R4 
ADD R3, R4 
MOV R1, (R4) 
 
 
Questão 7 
MOV R1, R2(RB) (RB) + (R2) ← (R1) R3 ≡ RB 
MOV R2, R4 
ADD R3, R4 
MOV R1, (R4) 
 
Questão 8 
MOV R1, RX(RB) (RB) + (RX) ← (R1) R2 ≡ RB 
R3 ≡ RX 
MOV R2, R4 
ADD R3, R4 
MOV R1, (R4) 
 
 
 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 18
Questão 9 
• registrador direto: armazenagem temporária de dados. 
• registrador indireto: implementação de ponteiros (armazena endereço, só 
conhecido em fase de execução, de uma área de dados da memória − acesso 
aleatório e indireto); viabiliza aritmética de ponteiros. 
• absoluto direto: acesso aleatório e direto à memória. 
• absoluto indireto: implementação de ponteiros (armazena endereço, só conhecido 
em fase de execução, de uma área de dados da memória − acesso aleatório e 
indireto); viabiliza aritmética de ponteiros, embora de forma menos eficiente que 
no modo registrador indireto. 
• imediato: operações envolvendo constantes e não variáveis. 
• relativo: acesso à memória relativo ao valor atual do PC. O deslocamento pode ser 
positivo ou negativo. Seu uso permite a produção de código relocável. 
• auto-incremento / autodecremento: acesso seqüencial e indireto aos elementos da 
memória (forma variante do modo por registrador indireto). 
• por pilha: armazenamento temporário, para posterior recuperação, do conteúdo de 
registradores e posições de memória. Possui um registrador auxiliar denominado 
Apontador de Pilha (stack pointer - SP), que sempre aponta para o topo da pilha 
(primeira posição livre). Usa sempre o modo de endereçamento por registradorindireto, sendo que o incremento e decremento de SP é implícito. 
• paginado: viabiliza a divisão do espaço de endereçamento em páginas (blocos de 
memória de tamanho fixo). O endereço efetivo é formado pela concatenação do 
número da página (que se encontra no Registrador de Página) e do deslocamento 
dentro da página (valor obtido do campo de endereço), que certamente terá um 
número reduzido de bits. Com a paginação da memória e o uso de tabela de 
páginas, um programa não precisa ocupar páginas contíguas da memória principal, 
e também não é necessário que todas as páginas do programa estejam ao mesmo 
tempo na memória durante sua execução. 
• indexado: muito útil para acesso aleatório a elementos de vetores e matrizes, 
utilizando os conceitos de endereço-base e deslocamento (positivo ou negativo), 
sendo que o endereço-base está no campo de endereço da instrução (requer muitos 
bits para referenciar toda a memória) e o deslocamento encontra-se em um 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 19
registrador indexador. Ambos são somados para a produção do endereço efetivo. 
Possui os modos direto, indireto pré-indexado e indireto pós-indexado. 
• baseado: mesmo princípio de operação do indexado, com a diferença de que agora 
o endereço-base está em um registrador de base e o deslocamento encontra-se no 
campo de endereço da instrução (não requer muitos bits), o que leva a usos 
distintos de acordo com o que já se conhece em tempo de programação e em 
tempo de execução. Muito utilizado pelo sistema operacional para gerenciamento 
de memória 
• baseado e indexado: é o mais versátil dos modos de endereçamento. 
Exemplo: Somando nelem elementos de um vetor carregado na memória (a partir da 
posição endvetor) e armazenamento do resultado no endereço endresult: 
 MOV #nelem, R0 
 MOV #endvetor, R1 
 MOV #0, endresult 
loop: ADD (R1)+, endresult 
 DCR R0 
 JNZ loop 
 STOP 
 
Modos de endereçamento (Exercício sem gabarito) 
Considere a seguinte instrução em uma máquina fictícia de dois endereços (EE = endereço efetivo): 
MOV EE1, EE2 EE2 ← (EE1) 
Supondo que o formato da instrução nesta máquina é dado por: 
 
C.O. modo1 
campo de endereçamento 1 
///////////////////////// modo2 
campo de endereçamento 2 
e sabendo-se que esta máquina admite os seguintes modos de endereçamento (n é um número inteiro 
com sinal): 
modo de endereçamento código binário notação endereço efetivo 
por registrador direto 0001 R R 
por registrador indireto 0010 (R) (R) 
absoluto direto 0011 end end 
absoluto indireto 0100 (end) (end) 
baseado 0101 n(RB) (RB)+n 
relativo 0110 n(PC) (PC)+n * 
autoincremento (pós-incremento) 0111 (R)+ (R) 
autodecremento (pré-decremento) 1000 
−(R) (R)−1 
indexado direto 1001 RIX(n) (RIX)+n 
(*) neste caso, o conteúdo de PC corresponde ao endereço de memória do início da próxima instrução 
faça: 
EA869 – Prof. Von Zuben 
DCA/FEEC/Unicamp 
Lista de Exercícios 1 (com gabarito) 20
• apresente a seguir a notação, em linguagem de montagem, das instruções presentes nas posições de 
memória de 100 a 111 e os endereços efetivos (em código decimal) correspondentes aos 
respectivos campos de endereçamento. 
 
 Notação em linguagem de montagem EE1 EE2 
1a instrução 
2a instrução 
3a instrução 
 
• indique na Tabela 1 todas as alterações, em seqüência, nos conteúdos dos registradores e posições 
de memória após a execução das três instruções. 
 
Obs: Toda notação não-binária presente na configuração de memória apresentada a seguir está sendo 
utilizada para representar os respectivos códigos binários que efetivamente estão presentes. 
 
Tabela 1 
PC R1 R2 RIX RB 381 382 383 384 385 715 716 
100 384 715 333 666 384 715 716 385 381 383 382 
− − 
 
 
 
 
 
 100 mov 0110 
 101 281 
 102 /////////// 0100 
PC 100 103 716 
 104 mov 0011 
 105 381 
R1 384 106 /////////// 0111 
 107 r2 
 108 mov 0010 
R2 715 109 r1 
 110 /////////// 0101 
 111 50 
RIX 333 ≈ ≈ 
 381 384 
 382 715 
RB 666 383 716 
 384 385 
 385 381 
 ≈ ≈ 
 715 383 
 716 382 
 ≈ ≈

Continue navegando