Vous êtes sur la page 1sur 41

Universidade Federal de Ouro Preto Departamento de Computao e Sistemas - DECSI

Organizao e Arquitetura de Computadores I Conjunto de Instrues (Ref. Cap. 2)

Vicente Amorim vicente.amorim.ufop@gmail.com www.decom.ufop.br/vicente

segunda-feira, 16 de dezembro de 13

Sumrio * Paralelismo e Sincronizao * Traduo e Inicializao de um Programa

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Comumente, nossos programas no executam em um nico uxo. - Diviso do programa em vrios uxos visa aumentar a ecincia e melhor utilizao de recursos. - Execuo em paralelo relativamente fcil quando as tarefas so independentes. - Problema: Normalmente, tarefas precisam cooperar umas com as outras para executarem determinado trabalho.
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Cooperao: Algumas tarefas escrevem novos valores que outras precisam ler. - Como determinada tarefa sabe quando outra terminou de escrever e j pode ler? - Sincronizao! - Problema: A falta de sincronizao pode levar a ocorrncia do problema chamado de data race.
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Data race: Dois acessos a uma mesma regio de memria vindos de diferentes threads onde pelo menos um deles de escrita (write) e ocorrem um aps o outro. - Exemplo: 8 jornalistas escrevendo uma mesma matria. Qual o problema de quem escreve a concluso?

Quem escreve a concluso precisa ler todas as outras partes. Quando escrevendo a concluso, nada anteriormente escrito
pode ser alterado.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Na computao, comumente, mecanismos de sincronizao esto em nvel de usurio. - Mecanismos so rotinas em software que por sua vez so amparadas por instrues em hardware. - O foco basicamente em instrues do tipo lock e unlock.

Criao de regies onde somente um nico processador pode

operar, chamadas de regies de excluso mtua (mutual exclusion).

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

#include <pthread.h> #include <stdio.h> #include <iostream> using namespace std; static int X = 0; static int Y = 0; static int Z = 0;

Paralelismo e Sincronizao * Exemplo (excluso mtua)


int main() { ! pthread_t thread01, thread02, thread03, thread04; ! ! const char *msg1 = "Thread 1"; ! const char *msg2 = "Thread 2"; ! const char *msg3 = "Thread 3"; ! const char *msg4 = "Thread 4"; ! int retThread1, retThread2, retThread3, retThread4; ! ! retThread1 = pthread_create(&thread01, NULL, incrementa, (void*)msg1); ! retThread3 = pthread_create(&thread03, NULL, incrementa, (void*)msg3); ! retThread4 = pthread_create(&thread04, NULL, incrementa, (void*)msg4); ! retThread2 = pthread_create(&thread02, NULL, imprime, (void*)msg2); ! ! return 0; }

void *incrementa(void *pMsg) { ! cout << (const char*)pMsg << endl; ! X = X + 1; ! usleep(10000); ! Y += X + 1; ! usleep(10000); ! Z += Y + 1; } void *imprime(void *pMsg) { ! cout << (const char*)pMsg << endl; ! cout << "X = " << X << endl; ! cout << "Y = " << Y << endl; ! cout << "Z = " << Z << endl; }

Problema?

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

#include <pthread.h> #include <stdio.h> #include <iostream> using namespace std;

Paralelismo e Sincronizao * Exemplo (excluso mtua)


int main() { ! pthread_t thread01, thread02, thread03, thread04; ! ! pthread_mutex_init(&mutexX, NULL); ! ! const char *msg1 = "Thread 1"; ! const char *msg2 = "Thread 2"; ! const char *msg3 = "Thread 3"; ! const char *msg4 = "Thread 4"; ! int retThread1, retThread2, retThread3, retThread4; ! ! retThread1 = pthread_create(&thread01, NULL, incrementa, (void*)msg1); ! retThread3 = pthread_create(&thread03, NULL, incrementa, (void*)msg3); ! retThread4 = pthread_create(&thread04, NULL, incrementa, (void*)msg4); ! ! pthread_join(thread01, NULL); ! pthread_join(thread03, NULL); ! pthread_join(thread04, NULL); ! ! retThread2 = pthread_create(&thread02, NULL, imprime, (void*)msg2); ! pthread_join(thread02, NULL); ! ! pthread_mutex_destroy(&mutexX); ! ! return 0; }

static int X = 0; static int Y = 0; static int Z = 0; pthread_mutex_t mutexX; void *incrementa(void *pMsg) { ! cout << (const char*)pMsg << endl; ! pthread_mutex_lock(&mutexX); ! X = X + 1; ! usleep(10000); ! Y += X + 1; ! usleep(10000); ! Z += Y + 1; ! pthread_mutex_unlock(&mutexX); } void *imprime(void *pMsg) { ! cout << (const char*)pMsg << endl; ! pthread_mutex_lock(&mutexX); ! cout << "X = " << X << endl; ! cout << "Y = " << Y << endl; ! cout << "Z = " << Z << endl; ! pthread_mutex_unlock(&mutexX); }

Soluo!

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Suporte a sincronizao em hardware de sistemas multiprocessados necessita de primitivas especiais. - Habilidade de ler e modicar uma dada regio de memria. - Sem tal capacidade, custo para se construir uma estrutura de sincronizao no hardware muito alto. - Importante: Arquitetos de hardware projetam primitivas de sincronizao para serem utilizadas por programadores de sistema (no em nvel de usurio).
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Operao bsica (atomic exchange/atomic swap): Troca um valor em um registrador para um valor em memria. - Exemplo: Criao de um lock simples.

Valor 0 (lock disponvel) / valor 1 (lock indisponvel). Processador tenta pegar o lock colocando o valor 1 em uma
determinada posio de memria.

O valor retornado ser 1 se algum outro processador j setou


tal posio de memria. Caso contrrio, 0 (zero).
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Operao chave para conseguir sincronismo: Atomicidade! - Impossvel que dois processadores atuem simultaneamente sobre a mesma poro de memria (escrita). - Implementar operaes atmicas simples pode introduzir novos desaos:

Requer suporte a leitura e escrita em uma nica instruo. Instruo no pode ser interrompida.
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Alternativa: Possuir um par de instrues no qual a segunda retorne um valor que descreva se o par de instrues foi executado atomicamente. - Par de instrues ser efetivamente atmico se as duas forem executadas sem interrupo. - Nenhum outro processador pode alterar o valor entre o par de instrues.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Em MIPS:

Suporte de um par de instrues especiais; Operaes de load e store podem ser executadas de forma
diferente.

load linked / store conditional. Instrues so utilizadas em sequncia: Se o contedo de um


endereo de memria especicado pelo load linked alterado antes do store conditional executar para o mesmo endereo de memria.
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Em MIPS:

O store conditional denido para ao mesmo tempo armazenar o


valor de um registrador em memria e alterar o valor de tal registrador para:
! 1 se a operao obteve sucesso; e ! 0 se a operao falhou.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Em MIPS:

Exemplo:

- Copia valor que ser armazenado para dentro de $t0.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Em MIPS:

Exemplo:

- load linked especica o endereo de memria em ($s1).

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Em MIPS:

Exemplo:

- store condition salvar o contedo de $t0 em $s1+0:


! Se ao nal, $t0 contm 1, ento operao foi bem sucedida; ! Se ao nal, $t0 contm 0, ento operao falhou. www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Em MIPS:

Exemplo:

- Vericao se operao falhou ou teve sucesso.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Em MIPS:

Exemplo:

- Retorno do valor que estava em memria para dentro de $s4.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Noes apresentadas servem tanto para mltiplos processadores quanto para diferentes threads/processos em um mesmo SO. - Em um nico processador: store condition tambm falhar quando da ocorrncia de uma troca de contexto. - De forma segura, somente instrues registradorregistrador podem ser inseridas entre as duas instrues ll e sc.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Paralelismo e Sincronizao * Introduo


- Nmero de instrues entre ll e sc devem ser minimizadas. - Possibilidade do problema conhecido como deadlock.

Processador nunca completa o sc devido ao grande nmero de


faltas.

- Quanto as instrues ll e sc precisam ser utilizadas?

Em um programa paralelo onde mltiplas threads precisam ser


sincronizadas; e

Em um nico processador quando necessita-se sincronizar a


escrita/leitura dos dados.
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Como transformar um programa escrito em C/C++ em um conjunto de instrues a serem executadas no processador? - Em 1975 muitos dos SOs eram escritos em linguagem assembly:

Memrias pequenas; Compiladores inecientes.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Atualmente:

Maior quantidade de memria disponvel; Compiladores mais espertos: Quase to expertos quanto
bons programadores na linguagem assembly.

- Processo de gerao de cdigos passa por vrias etapas:

Compilador -> Assemblador -> LinkEditor -> Carregador.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Compilador:

Transforma o programa em C em um programa em linguagem


assembly.

Compilador nada mais que um programa com capacidade de


traduo de uma linguagem para outra.

Programas em alto-nvel requerem uma quantidade menor de


linhas de cdigo: Aumento na produo de desenvolvedores.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Assemblador:

Linguagem assembly uma interface para o software de altonvel.

Assemblador compreende instrues que no esto contidas na


especicao arquitetural do MIPS: pseudo-instrues.

Ex.: Registrador $zero pode ser utilizado para criar a instruo


move.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Assemblador:

Assemblador tambm divide outras instrues em duas: blt


(branch on less than) para: slt + bne.

Pseudo-instrues permitem que MIPS possua um conjunto de Objetivo principal do assemblador gerar um cdigo de
mquina partir do cdigo assembly recebido.

instrues mais rico que o suportado diretamente pelo hardware.

Arquivo objeto: Combinao de instrues em linguagem de


mquina + dados + informaes para alocao em memria.
www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Assemblador:

Para produzir a verso binria das instrues, o assemblador


precisa estar ciente dos endereos de cada um dos labels do programa.

Controle feito atravs da tabela de smbolos. Tabela de smbolos: Contm um esquema de chave/valor com
associao dos smbolos e respectivos endereos.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Assemblador:

Um arquivo objeto em UNIX/Linux normalmente contm os


seguintes partes:
1) Cabealho: Descreve o tamanho e a posio das outras partes do arquivo objeto; 2) Segmento de texto: Contm o cdigo a ser executado em linguagem de mquina; 3) Segmento de dados estticos: Contm os dados alocados durante a vida do programa. www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Assemblador:

Um arquivo objeto em UNIX/Linux normalmente contm os


seguintes partes:
4) Informao de relocao: Identica instrues e palavras (words) que dependem de endereos absolutos quando o programa carregado em memria; 5) Tabela de smbolos: Associao dos labels com endereos de mem.; 6) Informaes de debug: Contm informaes de como os mdulos foram compilados, permitindo a associao reversa com o cdigo em alto-nvel. www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- LinkEditor:

Ajuda a reduzir a necessidade de recompilao de todo um


programa complexo devido a alterao de uma nica linha.

Alternativa: Recompilar/assemblar somente os procedimentos


que foram alterados.

LinkEditor: Responsvel por aglutinar as partes de um cdigo


que foram assembladas de forma independente.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- LinkEditor:

Executa atravs de trs diferentes passos:


1) Coloca os mdulos de cdigo e dados na memria; 2) Determina os endereos dos dados e labels das instrues; 3) Organiza as referncias internas e externas.

Utiliza as informaes de relocao e tabela de smbolos para


resolver os endereos de todos os labels indenidos.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- LinkEditor:

Denio: Trabalho principal do linkeditor encontrar


endereos antigos e substituir pelos novos.

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- LinkEditor:

Arquivos so assemblados de forma isolada. Assemblador no sabe a posio de um mdulo em relao aos
outros.

Quando o linkeditor coloca um mdulo na memria, todas os


endereos absolutos precisam ser relocados (de forma a se manterem corretos).

LinkEditor produz um arquivo executvel.


www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa


- Exemplo: Linkar os dois arquivos objetos abaixo:

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa


- Exemplo: Linkar os dois arquivos objetos abaixo: (soluo)

-8000

-7980

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa


- Exerccio: Linkar os arquivos objetos abaixo:
Object File Header Name Text Size Data size Text Segment Address 0 4 8 Data Segment Relocation Info 0 Address 0 4 8 Symbol Table Label X B Procedure A 130 40 Instruction addi $a0,$t0,1 lw $s0, 0($gp) jal B X Instruction Type addi lw jal Address Dependency X B Symbol Table Relocation Info Data Segment Text Segment Object File Header Name Text Size Data size Address 0 4 8 0 20 Address 0 4 8 Label Z Y A Procedure B 320 20 Instruction sw $a0, 20($gp) lw $s0, 0($gp) jal A Z Y Instruction Type sw lw jal Address Dependency Y Z A

www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Carregador:

Uma vez que o arquivo executvel est em disco, o SO o


carregar para a memria.

Carregador quem faz tal tarefa seguindo os passos:


1) L o cabealho do executvel e determina o tamanho dos segmentos de texto e dados; 2) Criar na memria um espao suciente para o armazenamento do texto e dados; 3) Copia as instrues e dados do arquivo executvel para a memria; www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13

Traduo e Inicializao de um Programa * Introduo


- Carregador:

Uma vez que o arquivo executvel est em disco, o SO o


carregar para a memria.

Carregador quem faz tal tarefa seguindo os passos:


4) Inicializa os registradores e seta o stack pointer ($sp) para o primeiro espao livre encontrado; 5) Copia os parmetros da primeira rotina para os registradores de parmetros e chama a rotina principal do programa (main). * Quando a rotina main retorna, o programa termina com uma chamada de sistema exit. www.decom.ufop.br/vicente
segunda-feira, 16 de dezembro de 13