00:00:05
[Música]
00:00:20
Olá hoje nós temos a quarta aula de
00:00:23
organização de computadores e nós vamos
00:00:26
falar justamente do conceito de programa
00:00:28
armazenado por mais natural que possa
00:00:31
aparecer para nós no dia de hoje que o
00:00:33
computador tem os programas o que ele
00:00:35
vai executar armazenado não foi assim
00:00:36
que tudo começou se nós observarmos O
00:00:39
enac que foi considerado o primeiro
00:00:41
computador de grande porte digital
00:00:44
programar esse computador significava
00:00:46
conectar os fios e relés do painel de
00:00:49
operação Então essas duas senhoras aqui
00:00:51
estavam programando esse dispositivo e
00:00:54
esse era um trabalho muito grande até
00:00:56
que fazia com que os computadores fossem
00:00:58
pensados para fazer propósitos
00:01:00
específicos o enec especificamente fazia
00:01:02
cálculos balísticos então justamente
00:01:05
nesse conceito todo era importante
00:01:07
pensar um modelo em que a gente pudesse
00:01:10
programar o computador Afinal de contas
00:01:12
se eu já tenho memória para armazenar os
00:01:14
dados por que não também armazenar os
00:01:18
programas e justamente Nesse contexto né
00:01:21
pensando em como lidar com esse novo
00:01:24
modelo de programação em como fazer essa
00:01:26
programação é que aparece a ideia do
00:01:28
modelo de fiman o John F era um
00:01:31
matemático que teve várias contribuições
00:01:33
na área de computação Ah ele foi
00:01:35
trabalhar com o pessoal que projetou o
00:01:37
en que contribuiu nesse projeto do enica
00:01:40
depois ele foi contribuir com o projeto
00:01:41
do edvac e nesse contexto Ele propôs
00:01:44
esse conceito de programa armazenado ou
00:01:47
seja desenvolver uma maneira de
00:01:49
armazenar os programas na memória assim
00:01:51
como a gente armazena os dados é
00:01:54
importante destacar que esse conceito
00:01:56
apesar de no nas nos livros e nas
00:01:58
atribuições de arquitetura a gente vê
00:01:59
atribuído a John phoa ele também foi
00:02:01
simultaneamente pensado por Alan
00:02:04
Turin bom o que que trata o modelo de
00:02:08
Don phono ele vai falar de princípios de
00:02:10
regras de conjuntos de características
00:02:13
de como que a gente deveria projetar o
00:02:15
computador de como a gente deveria
00:02:17
projetar esse programa para ser
00:02:20
armazenado como tudo isso deveria ser
00:02:22
operado tá então é importante a gente
00:02:25
pensar nesse conjunto de regras e ter o
00:02:27
contexto histórico em que tudo isso foi
00:02:29
proposto Lembrando que isso foi no final
00:02:32
da década de 40 meados da década de 40
00:02:34
que esse contexto foi proposto então a
00:02:37
esse modelo de fona define os aspectos
00:02:39
organizacionais e também os aspectos de
00:02:42
sua
00:02:44
programação bom o que que tem nesses
00:02:47
princípios tratados por John phono Ah
00:02:50
ele trata de quatro princípios
00:02:52
principais aqui né Quatro princípios que
00:02:54
vão ser usados para esse projeto
00:02:56
primeiro deles é a simplicidade o
00:02:58
computador vai executar operações
00:03:00
básicas operações elementares com
00:03:03
operandos né Eh também operandos
00:03:06
elementares o segundo princípio é com
00:03:09
respeito à linearidade e uniformidade e
00:03:12
isso tá relacionado à memória quer dizer
00:03:14
que nós temos uma única memória né Essa
00:03:16
memória vai ter vai ser acessada de
00:03:18
maneira contínua de maneira uniforme e
00:03:20
ela vai fornecer tanto esse programa
00:03:23
armazenado quanto as unidades de dados
00:03:25
quanto os operandos que vão ser
00:03:28
utilizados para fazer os cálculos para
00:03:30
fazer as
00:03:31
operações terceiro princípio tem a ver
00:03:34
com sequencialidade e centralidade como
00:03:37
é que funciona o nosso processador essa
00:03:39
nossa unidade Central né do
00:03:42
processamento que vai cuidar dessas
00:03:43
programação dessas atividades ela vai
00:03:46
executar as instruções que foram
00:03:48
programadas instruções disponíveis na
00:03:50
memória de maneira sequencial por isso o
00:03:52
primeiro aspecto e justamente essa
00:03:54
unidade de processamento Central né Eh
00:03:58
ela é responsável por essa sequência de
00:04:00
execuções por isso a centralidade né
00:04:02
existe uma unidade de controle dentro do
00:04:05
meu processador que é responsável por
00:04:08
por essa sequência de operações por
00:04:10
buscar instrução na memória por
00:04:12
determinar como esse esse essa
00:04:14
informação essa instrução vai ser operar
00:04:16
dentro do processador e o quarto
00:04:18
princípio que a gente tem é a unicidade
00:04:21
que é uma característica extremamente
00:04:22
importante des da desse modelo de F
00:04:24
neuman ele diz que eu tenho uma única
00:04:27
memória onde eu vou armazenar tanto
00:04:30
dados quanto programas Então meus dados
00:04:32
e os meus programas compartilham o mesmo
00:04:35
espaço na minha memória nessa minha
00:04:37
memória que é linear que acessada
00:04:40
sequencialmente e é importante a questão
00:04:42
da centralidade porque o processador vai
00:04:44
ter que acessar Em alguns momentos a
00:04:46
instrução e em alguns momentos o dado
00:04:48
para poder fazer essas
00:04:50
operações Então a partir desses
00:04:53
princípios o John fon Norma propôs um
00:04:56
modelo uma para ser seguido nessa
00:04:58
implementação nesse modelo a gente já
00:05:00
vai ver alguns elementos importantes que
00:05:02
caracterizam todos os computadores
00:05:04
modernos então nós temos a memória os
00:05:08
dispositivos de entrada e saída e aqui o
00:05:11
nosso processador Esse processador que é
00:05:14
dividido tanto em unidad de controle
00:05:17
quanto em unidade lógico
00:05:19
aritmética Então essa unidade Central
00:05:23
ela é responsável justamente por essa
00:05:26
sequencialidade das instruções né ah vai
00:05:29
acessar a memória então é importante
00:05:31
observar aqui nessa figura tá
00:05:34
simplificado por dois pares de setas
00:05:36
separados mas eu tenho acesso da unidade
00:05:39
de controle à memória Essa é responsável
00:05:41
por buscar as instruções que vão ser
00:05:43
executadas e aqui eu tenho minu unidade
00:05:46
lógico aritmética acessando a memória
00:05:48
para buscar os dados sobre o quais nós
00:05:51
vamos executar as operações elementares
00:05:54
tá então é importante destacar no modelo
00:05:57
de fonoma eu tenho uma única memória com
00:05:59
instruções
00:06:00
e dados e o acesso é feito do
00:06:03
processador tanto para buscar instruções
00:06:05
e dados nessa memória uma outra
00:06:08
característica que aparece aqui
00:06:10
importante é o nosso acumulador dentro
00:06:13
da unidade lógico aritmética nós vamos
00:06:15
discutir daqui a pouco as várias
00:06:17
organizações que um processador pode ter
00:06:19
mas já foi colocado no modelo de fyan
00:06:22
que a unidade lógico aritmética opera
00:06:25
utilizando um acumulador Então essa é
00:06:27
mais uma característica desse esse
00:06:31
projeto um terceiro aspecto importante
00:06:34
aqui né a gente já falou dos princípios
00:06:36
a gente já falou dessa organização geral
00:06:39
um outro terceiro aspecto importante
00:06:41
associado ao conceito de programa
00:06:42
armazenado é como vai funcionar essa
00:06:45
operação como vai ser feita essa como o
00:06:48
computador vai lidar com as instruções e
00:06:51
é justamente o interpretador que é
00:06:53
responsável por esse acesso contínuo à
00:06:56
operação dos programas armazenados então
00:06:59
o interpretador ele é estruturado como
00:07:01
um loop contínuo se a gente pensar em
00:07:03
termos de estrutura de programação ou
00:07:05
como uma máquina de estados né se a
00:07:07
gente pensar de uma maneira um pouco
00:07:09
mais abstrata e essa máquina de estados
00:07:11
tem três estados primeiro busca da
00:07:14
instrução então o processador a unidade
00:07:16
de controle precisa acessar a minha
00:07:18
memória para buscar a instrução que vai
00:07:21
ser executada a próxima instrução que
00:07:23
vai ser executada uma vez que a
00:07:25
instrução foi buscada na memória eu
00:07:27
preciso passar pro segundo passo que
00:07:30
implica em iniciar a decodificação dessa
00:07:32
instrução para obter Quais são os
00:07:35
operandos sobre o qual eu vou Executar a
00:07:37
instrução então por isso eu tenho que
00:07:39
calcular o endereço e buscar os
00:07:41
operandos no caso do modelo de fon noan
00:07:44
se a gente voltar aqui na na nossa
00:07:46
figura eu tenho que buscar na minha
00:07:49
memória os a instrução e depois o
00:07:52
operand Então eu preciso calcular o
00:07:55
endereço para buscar esse operando uma
00:07:58
vez que eu já lei o endereço e busquei o
00:08:00
meu operando eu posso Executar a
00:08:03
instrução propriamente dita Então se
00:08:05
essa instrução é uma instrução de soma
00:08:06
por exemplo eu já tenho os operandos eu
00:08:08
vou Executar a soma e vou armazenar o
00:08:11
meu resultado no acumulador Isso é uma
00:08:14
característica do modelo de phon todos
00:08:16
os resultados são armazenados no
00:08:18
acumulador uma vez que eu preciso
00:08:21
colocar esse resultado de volta pra
00:08:22
memória vou usar uma instrução que vai
00:08:24
movimentar esse resultado do acumulador
00:08:27
paraa memória tá então esses três
00:08:30
estados contínuos permitem que eu
00:08:32
Execute um programa Vou buscar a
00:08:33
instrução fazer as etapas necessárias da
00:08:36
execução da instrução volto pro estado
00:08:38
inicial para buscar a instrução seguinte
00:08:41
E aí depois vou Executar a instrução
00:08:43
seguinte e assim continuamente por isso
00:08:45
esse loop contínuo executando esse
00:08:47
programa que tá armazenado Então essas
00:08:50
são as características do modelo de fon
00:08:52
noima ele especificou a os os princípios
00:08:55
que devem ser seguidos com o conceito de
00:08:57
programa armazenado fez um o modelo de
00:09:00
interação entre os elementos do
00:09:02
computador memória entrada e saída e o
00:09:04
nosso processador dividido unidade de
00:09:06
controle e fluxo de dados e depois
00:09:09
determinou o nosso interpretador de
00:09:11
instruções que vai permitir que a gente
00:09:13
Execute essas sequências de instruções
00:09:15
bom então a gente pode pensar o modelo
00:09:18
de fora é único não mais ou menos pela
00:09:22
mesma época um outro grupo de
00:09:24
projetistas de Engenheiros que estava
00:09:27
projetando um outro computador em
00:09:28
Harvard propôs um modelo diferente que é
00:09:31
chamado de arquitetura Harvard A grande
00:09:34
diferença que a gente vê aqui no modelo
00:09:36
continua tendo entrada e saída tenho
00:09:39
aqui meu processador unidade de controle
00:09:42
e a unidade lógico aritmética e a grande
00:09:45
diferência é que agora eu tenho dois
00:09:46
componentes de memória diferente do
00:09:49
modelo de phorma em que eu tinha uma
00:09:50
única memória acessada por um barramento
00:09:53
comum aqui eu vou ter dois duas memórias
00:09:57
separadas acessadas por dois barramentos
00:10:00
separados uma memória exclusiva para
00:10:03
memórias de instrução ou seja aqui eu
00:10:06
tenho somente o meu programa armazenado
00:10:08
e uma outra memória exclusiva pros dados
00:10:11
pros meus operandos tá então uma
00:10:14
diferença importante para a gente
00:10:15
lembrar da arquitetura Harvard do modelo
00:10:17
de fona é com relação à memória e os
00:10:20
barramentos de acesso à memória tá na
00:10:23
arquitetura Harvard Nós temos duas
00:10:25
memórias dois barramentos no modelo de
00:10:28
phono uma única memória um único
00:10:31
barramento o que isso faz o que aconteça
00:10:33
no modelo de fona é que eu possa ter um
00:10:36
gargalo no acesso ao à minha memória tá
00:10:40
então quando eu tenho que buscar a
00:10:41
instrução eu acesso esse barramento de
00:10:43
memória quando eu tenho que buscar o
00:10:44
operando eu acesso novamente o mesmo
00:10:47
barramento no modelo de phono então em
00:10:49
termos de escalabilidade de evolução
00:10:51
desse modelo ele tem algums aspectos de
00:10:54
limitação de desempenho quando a gente
00:10:56
pensa no fato de ser um único ento bom
00:11:00
então esses dois modelos foram propostos
00:11:02
lá pela década de meados da década de 40
00:11:05
mas o que que a gente tem hoje nos
00:11:07
nossos computadores o que que evoluiu
00:11:09
como é que chegou nos nossos
00:11:11
computadores modernos bom primeiro Vamos
00:11:15
pensar nos dispositivos embarcados nos
00:11:17
dispositivos específicos onde a gente
00:11:19
tem microcontroladores e dsps os
00:11:22
dispositivos que vão trabalhar com
00:11:23
processamento de sinal digital nesse
00:11:25
caso a gente usa a arquitetura Harvard
00:11:28
tipicamente esses dispositivos
00:11:30
embarcados eles vão passar a sua vida
00:11:32
toda executando uma única tarefa né
00:11:35
então não existe o dinamismo que existe
00:11:37
num desktop num servidor num computador
00:11:39
então esses dispositivos Eles vão usar a
00:11:42
memória ah home né para ter as os
00:11:46
programas vão ser programados
00:11:47
inicialmente e vão passar sua vida
00:11:50
manipulando operando esse mesmo conjunto
00:11:52
de programas eles são dificilmente
00:11:54
reprogramados e ele usa memória RAM como
00:11:56
memória flash como memória dinâmica para
00:11:59
armazenar os dados por outro lado nos
00:12:01
processadores modernos nas arquiteturas
00:12:03
arm Intel que a gente usa em maior
00:12:06
escala esses computadores misturam um
00:12:10
pouco em termos de projeto os conceitos
00:12:12
que a gente tem da arquitetura Harvard
00:12:13
com arquitetura de phono como eu
00:12:16
comentei a gente tem um gargalo quando a
00:12:19
gente pensa em acessar instrução e
00:12:21
memória com o mesmo barramento Então o
00:12:24
que a gente tem nos processadores
00:12:26
modernos é a que o primeiro nível da
00:12:28
nossa hierarquia de memória separa
00:12:30
memória de instrução de memória de dados
00:12:33
e quando a gente olha o sistema de
00:12:36
memória como um todo a nossa hierarquia
00:12:38
de memória que a gente vai discutir em
00:12:39
aulas mais para frente isso é visto como
00:12:41
uma única memória então por isso que a
00:12:44
gente fala memória principal contém
00:12:46
dados e instruções compartilho o mesmo a
00:12:49
mesma memória Ah e ela é acessada
00:12:51
através de um barramento comum a partir
00:12:53
do processador nós vamos discutir essas
00:12:55
organizações esses barramentos mas a
00:12:58
ideia nos processadores modernos é que a
00:13:00
memória mais próxima do processador é
00:13:02
separada em dados e instruções mas a
00:13:06
hierarquia de memória como um todo ela
00:13:08
acessada por um barramento único e
00:13:10
contém tanto dados quanto
00:13:14
programas um outro aspecto importante
00:13:17
pra gente comentar né pra gente tratar
00:13:19
Nesse contexto é a organização que a
00:13:22
gente tem dentro da CPU eu falei para
00:13:24
vocês que uma das características do
00:13:26
modelo de fona é que ele usa um acumul D
00:13:29
dentro da unidade de processamento de
00:13:31
dados dentro do fluxo de dados mas o que
00:13:34
que isso quer dizer né então nós vamos
00:13:36
ver aqui quatro modelos de organização
00:13:39
da nossa unidade lógico aritmética com
00:13:41
relação ao acesso à memória que são
00:13:43
modelos básicos que podem ser utilizados
00:13:46
combinados de maneiras diferentes dentro
00:13:48
de um
00:13:49
processador primeiro deles é a pilha
00:13:53
então no caso da organização em pilha eu
00:13:55
tenho aqui a minha unidade lógico
00:13:57
aritmética que ou seja fazer as
00:13:59
operações de soma subtração deslocamento
00:14:02
todas as operações lógico aritméticas e
00:14:05
ela é associada a os elementos do topo
00:14:09
da pilha Obrigatoriamente Então os meus
00:14:11
dois operandos da minha unidade de
00:14:12
lógica aritmética são elemento do topo
00:14:14
da pilha e o elemento seguinte quando eu
00:14:17
preciso buscar um elemento na memória eu
00:14:19
preciso fazer a uma instrução específica
00:14:22
que vai trazer um elemento da memória
00:14:24
pra pilha um segundo elemento da memória
00:14:26
pra pilha E aí quando eu for fazer a
00:14:28
operação de soma eu vou Obrigatoriamente
00:14:30
usar esses dois elementos então não
00:14:33
existe muita flexibilidade na maneira
00:14:35
como eu combino os meus operandos para
00:14:37
minha unidade lógico aritmética Mas é
00:14:40
uma estrutura bastante
00:14:42
simples o segundo elemento que a gente
00:14:44
tem é o acumulador o acumulador que é
00:14:47
utilizado na organização no modelo de
00:14:49
fman no caso do acumulador um dos
00:14:52
elementos Obrigatoriamente vem desse
00:14:54
registrador especial que chamado de
00:14:56
acumulador e o outro elemento a outra
00:14:59
entrada da minha ula vem diretamente da
00:15:01
memória o resultado produzido pela minha
00:15:04
unidade lógico aritmética é armazenado
00:15:07
diretamente no meu registrador
00:15:09
acumulador então aqui nesse modelo se eu
00:15:12
para eu carregar Inicialmente um valor
00:15:15
eu preciso trazer esse valor para passar
00:15:18
por uma soma com zero para chegar no meu
00:15:21
registrador para depois poder somar com
00:15:23
o segundo elemento E aí então copiar o
00:15:26
que tá no meu registrador de Volta para
00:15:28
Mim minha memória
00:15:30
principal o terceira organização que a
00:15:33
gente tem ela não usa nenhum elemento
00:15:37
entre a memória e a unidade lógico
00:15:39
aritmética é a organização memória
00:15:41
memória ela considera que os operandos
00:15:42
vem diretamente de endereços de memória
00:15:45
por minha unidade lógico aritmética ela
00:15:48
é flexível do ponto de vista que eu
00:15:50
posso ter tantos operandos quanto eu
00:15:52
tenho na memória para escolher desse meu
00:15:54
conjunto e não só um operando possível
00:15:57
fixo aqui do meu registrador como já
00:15:59
tinha nesse caso Porém uma diferença que
00:16:01
eu tenho aqui é o tempo de acesso as
00:16:04
memórias são mais lentas por causa da
00:16:06
tecnologia para serem lidas do que um
00:16:09
registrador por
00:16:11
exemplo e justamente para tentar
00:16:14
contrapor ter um pouco mais de
00:16:15
flexibilidade do que organ as
00:16:17
organizações anteriores e não ser tão
00:16:20
dependente das da do tempo de acesso da
00:16:24
memória é que a gente tem a organização
00:16:26
registrador registrador ou muitas vezes
00:16:28
chamada de de organização load Store
00:16:31
Então nesse caso eu preciso trazer os
00:16:33
elementos da memória pros registradores
00:16:36
depois eu vou selecionar dois
00:16:37
registradores quaisquer como entrada da
00:16:40
minha unidade lógico aritmética e
00:16:42
finalmente vou escolher um terceiro
00:16:44
registrador para armazenar esse meu
00:16:45
resultado Então ela é mais flexível com
00:16:48
relação à seleção dos operandos sem ter
00:16:51
o atraso que eu tenho no acesso à
00:16:53
memória para cada operação que eu vou
00:16:55
realizar na minha unidade lógico
00:16:57
aritmética e isso permite a gente pode
00:17:00
ter as organizações modernas que T
00:17:02
combinações dessas organizações o último
00:17:06
aspecto que a gente vai observar hoje é
00:17:08
como é que fica com escrever essa
00:17:11
simples instrução c = a + b para esses
00:17:15
quatro exemplos de arquitetura então
00:17:17
aqui no primeiro caso no caso da pilha
00:17:19
eu preciso trazer os elementos da
00:17:21
memória para meu pra minha pilha e pro
00:17:23
topo da pilha isso a gente faz através
00:17:25
do comando de push depois eu vou fazer a
00:17:28
soma e finalmente vou restaurar o valor
00:17:30
que foi armazenado no topo da pilha pro
00:17:33
meu endereço de memória então preciso de
00:17:35
quatro instruções dessa máquina de pilha
00:17:38
para implementar essa uma instrução de
00:17:40
código de linguagem de alto nível no
00:17:43
caso da organização de acumulador um
00:17:45
elemento meu Obrigatoriamente ao
00:17:47
acumulador Então eu preciso trazer um
00:17:50
valor de memória para o acumulador
00:17:51
através da instrução de load depois eu
00:17:54
vou somar o que está no acumulador com o
00:17:57
outro endereço de memória
00:17:59
resultado pro acumulador E aí Finalmente
00:18:02
eu copio do acumulador pra memória
00:18:04
novamente então aqui eu preciso de três
00:18:06
instruções na arquitetura de memória
00:18:09
memória é a arquitetura que eu posso
00:18:11
acessar diretamente a memória então eu
00:18:13
posso indicar Quais são os meus dois
00:18:15
operandos A e B e já armazenar em C
00:18:19
então do ponto de vista do número de
00:18:21
instruções Esse é o mais eficiente eu
00:18:23
tenho uma única instrução tá depois eu
00:18:27
tenho uma combinação registrador memória
00:18:29
que é uma arquitetura um pouco mais
00:18:30
flexível do que a a baseada em
00:18:32
acumulador já que eu tenho mais de um
00:18:35
registrador disponível Ah e eu posso
00:18:38
combinar operandos entre registrador e
00:18:40
memória Então eu tenho o mesmo número de
00:18:42
instruções instruções similares a que eu
00:18:44
tenho na organização de acumulador e
00:18:46
finalmente na organização registrador
00:18:48
registrador eu vou precisar trazer os
00:18:51
dois operandos para registradores R1 e
00:18:53
R2 para depois poder fazer a soma e
00:18:56
finalmente armazenar o valor de R3 na
00:18:59
endereço de memória dado por C então eu
00:19:02
vou precisar de quatro instruções para
00:19:04
executar essa essa instrução de soma
00:19:07
numa arquitetura numa organização
00:19:09
registrador registrador então aqui a
00:19:12
gente vê que o número de instruções é
00:19:14
variável porém é importante lembrando
00:19:17
quando a gente discutiu as questões de
00:19:18
desempenho que o tempo de ciclo para
00:19:20
cada uma dessas organizações vai ser
00:19:23
diferente então quando eu calcular o meu
00:19:25
tempo de ciclo e multiplicar isso pelo
00:19:28
produto pelo número de instruções que eu
00:19:31
tenho isso vai me resultar num tempo de
00:19:33
execução e num desempenho e não
00:19:36
necessariamente a organização que tem
00:19:38
menos instruções vai ser a mais rápida
00:19:40
vai ser a que tem menor tempo de
00:19:41
execução porque o tempo de ciclo dela
00:19:43
tende a ser maior do que as demais então
00:19:46
juntando com os conceitos de desempenho
00:19:49
eu preciso considerar as características
00:19:51
do meu fluxo de dados para saber o tempo
00:19:53
de ciclo para então definir qual delas
00:19:56
vai ter o melhor desempenho
00:20:00
bom como referências para esse assunto
00:20:01
nós temos aqui o capítulo 1 e 2 do livro
00:20:03
de arquitetura do stalins e a sessão
00:20:05
1.10 do livro do paterson e do Ren
00:20:23
[Música]
00:20:28
C
00:20:38
[Música]