Você está na página 1de 66

Programao C/assembly

Joo Canas Ferreira

Maro 2012

Assembly e linguagens de alto nvel


Para qu combinar assembly com linguagens de alto nvel? Utilizao de linguagem de alto nvel facilita desenvolvimento:
mais alto nvel de abstrao tempo de desenvolvimento mais reduzido maior facilidade de depurao independente do CPU

Utilizao de linguagem assembly:


permite aproveitar todas as caractersticas do CPU permite obter programas mais curtos e mais rpidos permite aceder a instrues que no tm equivalncia no modelo de programao
gesto de memria virtual gesto de cache registos de monitorizao de desempenho atendimento de alguns tipos de interrupes

Joo Canas Ferreira (FEUP)

Programao C/assembly

Maro 2012

2 / 16

Como combinar C++ e linguagem assembly?


Utilizar assembly embutido (inline) no cdigo C++ (no standard):
i n t power2 ( u n s i g n e d i n t num , u n s i g n e d i n t power ) { __asm { mov eax , num mov ecx , power s h l eax , c l } }

Compilao separada
rotinas numa linguagem podem invocar rotinas na outra programa principal em C/C++ (o mais habitual) programa principal em assembly

Joo Canas Ferreira (FEUP)

Programao C/assembly

Maro 2012

3 / 16

Utilizao de sub-rotinas em assembly a partir de C/C++


Aspetos a considerar compilar separadamente cada mdulo com ferramenta apropriada criar o executvel com o compilador de C/C++
garante a utilizao das bibliotecas apropriadas

declarar sub-rotinas de assembly em C/C++ rotinas de assembly devem usar conveno de invocao cdecl
semelhante a stdcall diferena principal: o cdigo que invoca a rotina responsvel por remover os parmetros da pilha invoke (masm) trata automaticamente dos detalhes

Exemplos seguintes Windows 32 bits Ferramentas de Windows SDK 7.1 (as mesmas que Visual Studio 2010) Compilador de C/C++: cl Assembler: ml
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 4 / 16

Exemplo 1: programa principal (1/2)


#include < cstdlib > # include < ctime > #include <iostream > #include " pesquisa . h" u s i n g namespace s t d ; i n t main ( ) { c o n s t u n s i g n e d TAM = 1 0 0 0 0 ; c o n s t u n s i g n e d N_REPET = 1 0 0 0 0 0 0 ; l o n g v e c t o r [ TAM ] ; long v a l o r ; c l o c k _ t s t a r t T i m e , endTime ; bool encontrado ; f o r ( i n t i = 0 ; i <TAM ; i + + ) v e c t o r [ i ]= rand ( ) ;
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 5 / 16

Exemplo 1: programa principal (2/2)


startTime = clock (); f o r ( i n t n = 0 ; n < N_REPET ; n + + ) e n c o n t r a d o = P e s q u i s a V e c t o r ( v a l o r , v e c t o r , TAM ) ; endTime = c l o c k ( ) ; c o u t << " Tempo g a s t o ( C + + ) : " << double ( endTimes t a r t T i m e ) / C L O C K S _ P E R _ S E C << " s e g u n d o s . E n c o n t r a d o = " << e n c o n t r a d o << e n d l ; / / V e r s a o ASM startTime = clock (); f o r ( i n t n = 0 ; n < N_REPET ; n + + ) e n c o n t r a d o = A s m P e s q u i s a V e c t o r ( v a l o r , v e c t o r , TAM ) ; endTime = c l o c k ( ) ; c o u t << " Tempo g a s t o ( ASM ) : " << double ( endTimes t a r t T i m e ) / C L O C K S _ P E R _ S E C << " s e g u n d o s . E n c o n t r a d o = " << e n c o n t r a d o << e n d l ; return EXIT_SUCCESS ; }
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 6 / 16

Exemplo 1: sub-rotina em C/C++


extern " C " { bool A s m P e s q u i s a V e c t o r ( long n , long v e c t o r [ ] , l o n g nElem ) ; bool P e s q u i s a V e c t o r ( long n , long v e c t o r [ ] , l o n g nElem ) ; } #include " pesquisa . h" bool P e s q u i s a V e c t o r ( long v a l o r , long v e c t o r [ ] , l o n g nElem ) { f o r ( i n t i = 0 ; i < nElem ; i + + ) { i f ( v e c t o r [ i ]== v a l o r ) return true ; } return false ; }
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 7 / 16

Exemplo 1: sub-rotina em assembly (manual)


.586 .model f l a t , C .code A s m P e s q u i s a V e c t o r PROC USES EDI v a l o r : DWORD , v e c t P t r : PTR DWORD , nElem : DWORD mov eax , v a l o r mov ecx , nElem mov edi , v e c t P t r repne scasd jz verdade mov al ,0 ; falso jmp fim verdade : mov al , 1 ; verdade fim : ret A s m P e s q u i s a V e c t o r ENDP END
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 8 / 16

Exemplo 1: compilao e execuo


Compilao com Microsoft Compiler e Masm cl cl ml cl /c /EHsc main1.cpp main1.obj /c pesquisa.cpp pesquisa.obj /c AsmPesquisa.asm AsmPesquisa.obj main1.obj pesquisa.obj AsmPesquisa.obj /link /out:out1.exe

Execuo Otimizao: cl /c /Ox pesquisa.cpp Para obter cdigo gerado: cl /c /Ox /Fa pesquisa.cpp pesquisa.asm

Joo Canas Ferreira (FEUP)

Programao C/assembly

Maro 2012

9 / 16

Exemplo 1: cdigo gerado (parcial)


_ i $ 2 5 4 3 = 4 ; size = 4 _valor$ = 8 ; size = 4 _ v e c t o r $ = 12 ; size = 4 _nElem$ = 16 ; size = 4 _ P e s q u i s a V e c t o r PROC ; F i l e d : \ masmp r o j \ m i x e d \ p e s q u i s a . c p p ; Line 4 push ebp mov ebp , esp push e c x ; Line 5 mov DWORD PTR _ i $ 2 5 4 3 [ ebp ] , 0 jmp SHORT $ L N 4 @ P es q u is a V e $ L N3 @ P e s q u i s a V e : mov eax , DWORD PTR _ i $ 2 5 4 3 [ ebp ] add eax , 1 mov DWORD PTR _ i $ 2 5 4 3 [ ebp ] , eax $ L N4 @ P es q u i s a V e :
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 10 / 16

Diagrama de uxo
i=0

$LN4 i < nElem ? No

$LN3 i ++

Sim

ECX = vector[i]

$LN1 No ECX == valor ?

Sim

$LN2 AL = 0

AL = 1

$LN5 ret

Joo Canas Ferreira (FEUP)

Programao C/assembly

Maro 2012

11 / 16

Exemplo 1: cdigo gerado com otimizao (simplicado)


_valor$ = 8 _ v e c t o r $ = 12 _nElem$ = 16 _ P e s q u i s a V e c t o r PROC mov ecx , _nElem$ [ esp 4] x o r eax , eax push e s i t e s t ecx , e c x j l e $LN2@PesquisaVe mov edx , _ v e c t o r $ [ esp ] mov e s i , _ v a l o r $ [ esp ] $LL4@PesquisaVe : cmp [ edx + eax * 4 ] , e s i je inc cmp jl $ L N8 @ P e s q u is a V e eax eax , e c x $LL4@PesquisaVe

$ L N2 @ P e s q u is a V e : xor al , a l pop e s i ret 0 $ L N8 @ P es q u is a V e : mov a l , 1 pop e s i ret 0 _ P e s q u i s a V e c t o r ENDP

Joo Canas Ferreira (FEUP)

Programao C/assembly

Maro 2012

12 / 16

Exemplo 2: Maior divisor comum (GCD)


/ / C ++ startTime = clock (); f o r ( i n t n = 0 ; n < N_REPETE ; n + + ) r e s = Gcd ( 1 2 3 4 * 2 7 , 7 8 3 7 4 8 5 * 2 7 ) ; endTime = c l o c k ( ) ; c o u t << " Tempo d e c o r r i d o ( C + + ) : " << double ( e n d T i m e s t a r t T i m e ) / C L O C K S _ P E R _ S E C << " s e g u n d o s . R e s u l t a d o = " << r e s << e n d l ; // a s s e m b l y startTime = clock (); f o r ( i n t n = 0 ; n < N_REPETE ; n + + ) r e s = AsmGcd ( 1 2 3 4 * 2 7 , 7 8 3 7 4 8 5 * 2 7 ) ; endTime = c l o c k ( ) ; c o u t << " Tempo d e c o r r i d o ( ASM ) : " << double ( e n d T i m e s t a r t T i m e ) / C L O C K S _ P E R _ S E C << " s e g u n d o s . R e s u l t a d o = " << r e s << e n d l ; return EXIT_SUCCESS ;
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 13 / 16

Exemplo 2: sub-rotina em C
# i n c l u d e " gcd . h " i n t Gcd ( i n t a , i n t b ) { i f ( a == 0 && b == 0 ) b = 1; e l s e i f ( b == 0 ) b = a; else i f ( a != 0) while ( a != b ) i f ( a <b ) b = a ; else a = b ; return b ; }
Fonte: http://www.azillionmonkeys.com/qed/asmexample.html
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 14 / 16

Exemplo 2: execuo
Resultado da execuo:

A verso em assembly mais rpida que a verso C++ otimizada

Joo Canas Ferreira (FEUP)

Programao C/assembly

Maro 2012

15 / 16

Exemplo 2: sub-rotina em assembly


.686 .model f l a t , C .code AsmGcd PROC a : SDWORD , b : SDWORD mov eax , a mov edx , b gcd : neg eax je L3 L1 : neg eax xchg eax , edx L2 : sub eax , edx jg L2 jne L1 L3 : add eax , edx jne L4 inc eax L4 : ret Fonte: P. Hsieh AsmGcd ENDP http://www.azillionmonkeys.com/qed/asmexample.html
Joo Canas Ferreira (FEUP) Programao C/assembly Maro 2012 16 / 16

Mestrado Integrado em Engenharia Informtica e Computao

Microprocessadores e Computadores Pessoais


Programao mista C/assembly

1o ano 2011/12

1.

A utilizao de __asm numa funo escrita em C/C++ permite: A. juntar funo o cdigo mquina de outra funo B. chamar uma sub-rotina em assembly C. incluir um bloco de instrues assembly D. assinalar que essa funo no deve ser compilada

2.

Compare o tempo de execuo de sub-rotinas em C/C++ e assembly para determinar o nmero de sub-sequncias estritamente ascendentes existentes num vetor de N elementos. Por exemplo, a sequncia seguinte tem 6 dessas sub-sequncias. 2, 5, 1, 11, 14, 5, 21, 77, 8, 6, 6, 11, 21 A declarao das sub-rotinas a seguinte:
extern " C " { unsigned int NumSubSeq ( unsigned int vector [] , unsigned int N ); unsigned int AsmNumSubSeq ( unsigned int vector [] , unsigned int N ); };

Fim

AJA, JCF

Pg. 1 de 1

Tratamento de dados em vrgula utuante


Joo Canas Ferreira

Abril 2012

Co-processador matemtico
Circuito dedicado para o processamento de dados em vrgula utuante Inicialmente: circuito integrado adicional para operaes de vrgula utuante Organizao interna diferente da do CPU principal Primeira verso: 8087 em 1980 (45000 transstores, 5 MHz) Integrado no CPU principal a partir do 80486DX
Unidade de Vrgula Flutuante (FPU - Floating point unit)

Representao interna de 80 bits (sinal, expoente 15 bits, signicando 64 bits ) Permite representar inteiros de 64 bits sem perda de preciso Tipos de operaes:
Leitura/escrita de memria Funes aritmticas Comparaes e testes Gesto e controlo
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 2 / 26

CPU (386) e co-processador (387)

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Abril 2012

3 / 26

Microfotograa do 80387

7.5 mm7.5 mm 120000 transstores [CPU-world.com]


Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 4 / 26

Registos
Registos da Unidade de Vrgula Flutuante (UVF) independentes do CPU A UVF tem 8 registos de 80 bits O formato interno corresponde a IEEE 754 (preciso extended): 64 bits de parte fracionrio, 15 bits de expoente, 1 bit de sinal Carregar/retirar valores da UVF apenas por ordem last-in rst-out (pilha)
Topo da pilha: ST(0) Segundo registo: ST(1) ltimo registo: ST(7)

Os registos podem estar numa de 4 situaes:


vazio 0 valor diferente de zero valor especial (innito, NaN, no-normalizado)

Apenas registos no-vazios podem ser usados em clculos Quase no existe comunicao com CPU: no possvel usar os registos EAX, EBX,. . . em clculos da UVF
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 5 / 26

Registos especiais e excees


A UVF contm ainda vrios registos especiais:
controlo: controla a preciso e mtodos de arredondamento tag: (etiqueta) situao de cada registo status: topo da pilha, excees, indicadores de comparao ...

Durante os clculos podem ocorrer situaes excecionais


acesso a registo vazio ou carregamento para registo no-vazio perda de preciso (p. ex., o resultado de 1 / 10 no pode ser representado exatamente) underow ou overow diviso por zero operao invlida (p.ex. raiz quadrada de nmero negativo)

Tratamento de excees:
invocao de uma rotina de tratamento de excees tratamento automtico (ativo por omisso) Exemplos: diviso por zero produz innito underow produz nmeros no-normalizados
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 6 / 26

Tipos de dados
UVF suporta operaes sobre nmeros de vrgula utuante e inteiros Todos os nmeros so convertidos para o formato interno ao serem lidos de memria Converso do formato interno para outros formatos efetuada na escrita em memria Tipos de dados (externos) suportados:
REAL10: IEEE 754, preciso extra, 10 bytes, formato interno REAL8: IEEE 754, preciso dupla, 8 bytes REAL4: IEEE 754, preciso simples, 4 bytes QWORD: inteiros, complemento para 2, 64 bits (8 bytes) DWORD, WORD, mas no BYTE TWORD: inteiros, formato BCD empacotado, 10 bytes (18 dgitos decimais)

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Abril 2012

7 / 26

Representao BCD empacotado


BCD = Binary Coded Decimal Cada grupo de 4 bits representa um dgito decimal (09) Exemplo: 915710 1001 0001 0101 0111BCD Empacotado: 2 dgitos decimais por byte Desempacotado: 1 dgito decimal por byte Formato til para converso de/para decimal BCD com 10 bytes S | d17 d16 | d15 d14 | d13 d12 | d11 d10 | d9 d8 | d7 d6 | d5 d4 | d3 d2 | d1 d0 O byte S (sinal) indica se o nmero negativo (1XXX XXXX2 ) ou positivo (0XXX XXXX2 ) Exemplo: -600456371 80 00 00 00 00 06 00 45 63 7116 Gama de representao: [(1018 1); 1018 1]
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 8 / 26

Regras gerais de utilizao


Mnemnicas comeam por F Zero, um ou dois operandos Instrues no podem ter operandos imediatos (constantes) Nas instrues com dois operandos, um tem de ser um registo Operandos em memria devem estar representados em vrgula utuante Categorias de instrues:
acesso a memria (leitura/escrita)e converso aritmtica (soma, subtrair, multiplicar, dividir) funes numricas (raiz quadrada, seno, cosseno, logaritmo, etc.) valores constantes especiais comparao de valores gesto e controlo

Conveno stdcall registos UVF vazios entrada numa sub-rotina registos UVF vazios sada de uma sub-rotina, exceto
ST(0) contm o resultado da sub-rotina (se for de vrgula utuante)
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 9 / 26

Leitura de valores de memria


FLD copia operando em VF de memria para topo da pilha Formatos: FLD m32fp FLD m64fp FLD m80fp FLD ST(i) FILD copia operando inteiro de memria para topo da pilha Formatos: FILD m16 FILD m32 FILD m64 FBLD copia operando BCD de memria para topo da pilha .data dupla REAL8 143.1 simples REAL4 11.4 .code fld dupla ; ST(0) = 143.1 fld simples ; ST(0) = 11.4, ST(1)=143.1
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 10 / 26

Escrita de valores em memria


FST copia valor do topo da pilha para operando. FSTP copia valor do topo da pilha para operando e remove operando da pilha (POP). Formatos: FST m32fp Formatos: FSTP m32fp FST m64fp FSTP m64fp FST ST(i) FSTP m80fp FSTP ST(i) FIST copia valor do topo da pilha, converte-o para inteiro e guarda-o no operando. FISTP tambm remove valor da pilha. Formatos: FIST m16 Formatos: FISTP m16 FIST m32 FISTP m32 FIST m64 FISTP m64 FBST copia valor topo da pilha para memria (em formato BCD). FBSTP copia valor topo da pilha para memria (em formato BCD) e remove-o da pilha.
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 11 / 26

Instrues aritmticas
Operaes binrias [ST ST(0)]:
Nome FADD dest, src FSUB dest, src FSUBR dest, src FMUL dest, src FDIV dest, src FDIVR dest, src Operao dest = dest + src dest = dest - src dest = src - dest dest = dest src dest = dest / src dest = src / dest Nome FADD m32/64fp FSUB m32/64fp FSUBR m32/64fp FMUL m32/64fp FDIV m32/64fp FDIVR m32/64fp Operao ST = ST + m32/64fp ST = ST - m32/64fp ST = m32/64fp - ST ST = ST m32/64fp ST = ST / m32/64fp ST = m32/64fp / ST

Um dos operandos (src ou dest) deve ser sempre ST(0). Todas as instrues tm verses com P (FADDP, FSUBP, etc.). Neste caso, src deve ser sempre ST(0). Este valor removido do pilha. Operaes binrias tambm podem ser escritas sem argumentos. Por exemplo: FADD FADDP ST(1), ST(0)
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 12 / 26

Operaes diretas com inteiros


Estas instrues realizam operaes aritmticas entre ST(0) e um valor inteiro (16 ou 32 bits) em memria O resultado ca em ST(0) Formatos: FIADD m32/m16 FIMUL m32/m16 FIDIV m32/m16 FISUB m32/m16 FIDIVR m32/m16 FISUBR m32/m16 No existem verses para inteiros de 64 bits .data valA valB res .code fld fimul fstp
Joo Canas Ferreira (FEUP)

DWORD 100 REAL8 1.567 REAL8 ? valb valA res ; ST(0)=1.567 ; ST(0) = 156.7 ; pilha vazia
Abril 2012 13 / 26

Tratamento de dados em vrgula utuante

Outras funes
FXCH ST(i) troca valores de ST(0) e ST(i) FXCH troca valores de ST(0) e ST(1) FCHS troca sinal de ST(0): ST(0) = - ST(0) FABS calcula valor absoluto de ST(0): ST(0) = |ST(0)| FRNDINT arredonda ST(0) para inteiro FLD1 carrega a constante 1 para a pilha FLDPI carrega a constante para a pilha FLDZ carrega a constante 0 para a pilha FLD2E carrega a constante log2 e para a pilha FLD2T carrega a constante log2 10 para a pilha FLDLG2 carrega a constante log10 2 para a pilha FLDLN2 carrega a constante loge 2 para a pilha
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 14 / 26

Exemplo: Clculo de expresses


Expresso a calcular: valD = -valA + (valB * valC) .data REAL8 REAL8 REAL8 REAL8 .code fld fchs fld fmul fadd fstp

valA valB valC valD

1.5 2.5 3.0 ? valA valB valC valD

; Resultado deve ser +6.0 ; ; ; ; ; ; pilha: {valA} trocar sinal de ST(0): {-valA} carregar valB para ST(0): {valB -valA} ST(0) *= valC: {(valB*valC) -valA} ST(0) += ST(1): {(valB*valC)-valA} guardar ST(0) em valD: {}
Abril 2012 15 / 26

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Comparar valores de vrgula utuante


As instrues da famlia FCOM comparam ST(0) com o operando ou com ST(1) se no for especicado um operando. Formatos: FCOM m32real Retirando ST(0) FCOMP m32real FCOM m64real FCOMP m64real FCOM ST(i) FCOMP ST(i) FCOM FCOMP FCOMPP FCOMP FCOMP ST(0),ST(1) FCOMPP tambm remove ST(0) e ST(1) da pilha Os indicadores (ags) C3, C2 e C0 pertencem UVF

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Abril 2012

16 / 26

Saltos condicionais
Os saltos condicionais so executados pelo CPU principal. Para realizar um salto condicional baseado numa comparao de vrgula utuante necessrio:
1

Usar a instruo FSTSW AX para copiar registo de controlo da UVF para AX Usar a instruo SAHF para copiar AH para o registo EFLAGS (registo de indicadores) Usar instrues de salto condicional como JA ou JB
.data REAL8 0.0 .code ... fld1 fld rval fcom st(1) fstsw ax sahf ja next print "RVAL menor ou igual a 1.0",13,10 jmp @F next: @@:
Joo Canas Ferreira (FEUP)

rval

print "RVAL maior que 1.0",13,10 ...


Abril 2012 17 / 26

Tratamento de dados em vrgula utuante

Outras instrues de comparao


A instruo FICOM compara ST(0) com um nmero inteiro. Formatos: FICOM m16int/m32int FICOMP m16int/m32int A instruo FTST (sem argumentos) compara ST(0) com zero A instruo FCOMI compara dois nmeros de vrgula utuante e altera os indicadores do CPU
Formatos: FCOMI ST(0),ST(i) FCOMIP ST(0),ST(i) S existe a partir do Pentium 6: Usar diretiva .686 ou .P6

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Abril 2012

18 / 26

Exemplo: Valor absoluto da diferena


.data epsilon REAL8 1.0E-12 val2 REAL8 0.0 val3 REAL8 1.001E-13 .code fld fld fsub fabs fcomi ja print ... ... epsilon val2 val3 ; ; ; ; {eps} {val2 eps} {dif eps} {|dif| eps} ; diferena mnima ; valor a comparar ; considerado igual a val2

ST(0),ST(1) @F "Valores iguais",13,10

@@:

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Abril 2012

19 / 26

Rotinas de converso de/para ASCII


MASM32 inclui duas rotinas de E/S para nmeros em vrgula utuante StrToFloat converte uma cadeia de caracteres representando um nmero real para a representao IEEE 754, preciso dupla
StrToFloat PROTO ptrString:PTR BYTE, ptrVF: PTR REAL8 Resultado ca guardado na memria, no endereo especicado por ptrVF

FloatToStr converte um nmero do tipo REAL8 para uma representao em ASCII


FloatToStr PROTO valor:REAL8, ptrString:PTR BYTE Resultado da converso ca em memria, a partir de ptrString ptrString deve ter o endereo de uma zona de memria com tamanho suciente para guardar o resultado da converso

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Abril 2012

20 / 26

Exemplo de E/S com nmeros VF


.data rval REAL8 0.0 buffer BYTE 30 dup(?) .code start: print "Introduza um numero real: " mov eax, input() invoke StrToFloat, eax, offset rval fld1 ; carrega 1 fld rval ; carrega valor lido ; substitui 2 valores de topo pela sua soma fadd fstp rval ; guarda resultado em memria print "Resultado: " invoke FloatToStr, rval, offset buffer print offset buffer,13,10
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 21 / 26

Funes matemticas
A UVF suporta vrias funes matemticas Todas usam o valor do topo da pilha ST(0) como argumento O(s) argumento(s) /so removido(s) da pilha e subsitudo(s) pelo(s) resultado(s) ngulos so expressos em radianos FSQRT Raiz quadrada FCOS Co-seno FSIN Seno FSINCOS Seno (ca em ST(1)) e co-seno (ca em ST(0)) FPTAN Tangente F2XM1 2x 1 FYL2X Y log2 X, com X=ST(0), Y=ST(1) ...
Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 22 / 26

Exemplo: tabelo de senos (1/4)

Joo Canas Ferreira (FEUP)

Tratamento de dados em vrgula utuante

Abril 2012

23 / 26

Exemplo: tabela de senos (2/4)


.data TABELA buffer Xmin Xmax c9 REAL8 10 dup(?) BYTE 30 dup(?) REAL8 0.0 REAL8 1.8 REAL8 9.0 .code start: invoke main inkey exit
Joo Canas Ferreira (FEUP)

main PROC uses edi ; preenche tabela invoke TABSEN mov edi, 0 mov ecx, 10 ciclo: push ecx invoke FloatToStr, TABELA[edi*8], offset buffer print offset buffer,13,10 inc edi pop ecx loop ciclo ret main ENDP
Abril 2012 24 / 26

Tratamento de dados em vrgula utuante

Exemplo: tabela de senos (3/4)


TABSEN PROC USES EDI LOCAL step: REAL8 LOCAL x: REAL8 mov edi, offset TABELA mov ecx, lengthof TABELA ; clculo do passo fld Xmax fld Xmin fst x fsub fld c9 fdiv fstp step
Joo Canas Ferreira (FEUP)

; ciclo de clculo ciclo: fld x fsin fstp real8 ptr [edi] ; preparar iterao seguinte add edi, type REAL8 fld x fadd step fstp x loop ciclo ret TABSEN ENDP

Tratamento de dados em vrgula utuante

Abril 2012

25 / 26

Exemplo: tabela de senos (4/4)

Desao: Reduzir o nmero de instrues FLD executadas na verso anterior


Joo Canas Ferreira (FEUP) Tratamento de dados em vrgula utuante Abril 2012 26 / 26

Mestrado Integrado em Engenharia Informtica e Computao

Microprocessadores e Computadores Pessoais

1o ano 2011/12

Tratamento de dados em vrgula utuante


1.

Escreva fragmentos de cdigo assembly IA-32 que implementem o seguinte cdigo C++:
a)

double double double double

B M N P

= = = =

7 .8 ; 3 .6 ; 7 .1 ; -M * (N +B) ;

b)

int B = 7; double N = 7 .1 ; double P = sqrt ( N) + B;

2.

Escreva um fragmento de cdigo que calcule o valor da seguinte expresso:


(A B) C (D + A) + E

3. 4.

Escreva um programa para calcular o valor da rea de um crculo.

Considere o polinmio p(x) = 1,5x3 12,5x + 7. Escreva a rotina CALC_POLY_TBL que calcula uma tabela dos valores do polinmio para valores de x pertencentes a {0; 0,1; 0,2; ...; 9,9; 10} (ao todo so 101 valores). A rotina tem o prottipo:
CALC_POLY_TBL PROTO vet: REAL8

O vetor vet deve ser preenchido com os valores calculados, ou seja, com p(0), p(0,1), ..., p(9,9) e p(10). Pretende-se escrever um programa que produza uma tabela da funo y = 100 + 50 sin(x) com x [0 ; 90 ]. Para isso:
5. a)

Escreva uma funo que calcula o seno de um valor real expresso em graus. O valor deve ser retornado em ST(0). Usando a funo da alnea anterior, escreva uma funo que calcula y = 100 + 50 sin(x) com x [0 ; 90 ] (x em graus), retornando o valor em ST(0). Usando a funo da alnea anterior, escreva um programa para produzir uma tabela de y(x) para os valores inteiros de x entre 0 e 90 .

b)

c)

Escreva a rotina DIST que usa o co-processador aritmtico para calcular a distncia D de um ponto P (X, Y ) origem.
6.

D=

X2 + Y 2

Considere o seguinte prottipo: DIST PROTO x:REAL4, y:REAL4


AJA, JCF Pg. 1 de 3

MPCP (MIEIC), 2011/12

Tratamento de dados em vrgula utuante

7.

Escreva a rotina TABSEN, sem argumentos, que usa o co-processador aritmtico para calcular uma tabela com 10 elementos da funo sin X . Considere que os elementos da tabela esto igualmente espaados e que Xmin X Xmax . Use as variveis globais denidas a seguir:
Xmin REAL8 Xmax REAL8 TABELA REAL8 10 dup (?)

Na gura est representado um tringulo do qual se conhecem o ngulo e o comprimento dos lados X e Y.
8.

Z Y

O comprimento do lado Z do tringulo dado por Z = X 2 + Y 2 2 X Y cos(). Escreva a sub-rotina CALC_Z em linguagem assembly para calcular o valor de Z. Os parmetros de entrada da rotina so X, Y e o ngulo alfa expresso em radianos. O valor calculado pela subrotina retornado no registo ST0 do co-processador. A declarao da rotina a seguinte:
CALC_Z PROTO X:REAL8, Y:REAL8, alfa:REAL8
9.

Apresente o cdigo da rotina que calcula o produto interno de dois vetores de N nmeros reais (N > 0) usando a unidade de vrgula utuante. Sejam X = [x1 , x2 , ..., xN ] e Y = [y1 , y2 , ..., yN ]. Ento, o produto interno dado por
[Teste de 06-07-2011]

X Y = x1 y1 + x2 y2 + ... + xN yN

O prottipo da rotina :
prodint PROTO vectX:ptr real8, vectY:ptr real8, N: dword
10.
[Teste de 06-07-2011]

Considere a funo f (x), x R, denida por


x sin (x + ) se x 0 f (x) = 1 se x < 0 4x

Implemente a sub-rotina rotF que calcula a funo f (x) para qualquer valor de x usando a unidade de vrgula utuante. O respetivo prottipo :
rotF PROTO argX: REAL8

Durante a realizao de uma experincia registou-se a velocidade de um corpo em funo do tempo. A informao encontra-se armazenada em dois vetores, vectT e vectV, de igual tamanho. A velocidade medida no instante vectT[i] est guardada em vectV[i]. Os valores de vectT so estritamente crescentes.
11.

AJA, JCF

Pg. 2 de 3

MPCP (MIEIC), 2011/12

Tratamento de dados em vrgula utuante

Escreva uma sub-rotina que determina a velocidade do corpo no instante instT. Se existir um valor de i tal que vectT[i]=instT, ento o valor a retornar vectV[i]. Em caso contrrio, a funo deve estimar a velocidade no instante desejado por interpolao linear dos valores registados nos dois instantes mais prximos. A interpolao linear entre dois pontos de uma funo yi = f (xi ) e yi+1 = f (xi+1 ) aproxima y = f (x), com xi < x < xi+1 , por
y = yi + yi+1 yi (x xi ) xi+1 xi

A sub-rotina deve ter o seguinte prottipo:


interpol PROTO vectT:PTR REAL8, vectV:PTR REAL8, N:DWORD, instT:REAL8
12.
[Teste de 13-06-2011]

A funo erf(x) tem a seguinte aproximao racional para x 0 : erf(x) 1


(1 + a1 x + a2 x2 1 + a3 x3 + a4 x4 )4

com
a1 = 0,278 393
a)

a2 = 0,230 389

a3 = 0,000 972

a4 = 0,078 108

Apresente uma rotina que calcula o valor de erf(x) usando a aproximao indicada. Assuma que x 0. O prottipo da rotina :
erfpos PROTO argX: REAL8

b)

A funo erf(x) mpar: erf(x) = erf(x). Apresente uma rotina que calcula erf(x) para qualquer valor de x com recurso rotina da alnea anterior. O prottipo da nova rotina :
erf PROTO argX: REAL8
Fim

AJA, JCF

Pg. 3 de 3

Codicao de instrues IA-32


Joo Canas Ferreira

Abril 2012

Formato das instrues IA-32


As instrues IA-32 so constitudas por um nmero varivel de campos. Alguns campos podem ter vrios tamanhos
Exemplo: Valores imediatos (constantes) podem ter 1, 2 ou 4 bytes

prexo de tamanho (ajuda a especicar o tamanho dos operandos) opcode (cdigo de operao) Mod R/M (especicao de operandos e modos de endereamento) SIB (scale index byte) deslocamento para endereo um valor imediato (constante) Cada instruo tem apenas os campos necessrios para a sua especicao Apenas o opcode obrigatrio
Existem instrues de 1 byte: Exemplo: INC EDX F2 Exemplo: CLD FC
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 2 / 14

Formato das instrues IA-32


Formato mais comum:

Prefixo bytes 1
7

Opcode ModR/M 1-3 1

SIB 1
0

Deslocamento Valor imediato 1-4


7

1-4
0

Mod bits 2

Reg/Op 3

R/M 3 bits

Escala 2

ndice 3

Base 3

Existem ainda outros formatos


Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 3 / 14

Operandos imediatos
Copiar valor imediato para registo Formato: 1011 w rrr constante

Exemplos mov cl,21h 1011 0 001 constante B1 21 mov esi,76543210h 1011 1 110 const BE 10 32 54 76
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 4 / 14

Especicao de registos e memria


O byte ModR/M tem a seguinte organizao: xx | rrr | yyy Um dos operandos um registo representado por rrr, codicado como indicado anteriormente. Os bits xx/yyy codicam um operando em memria ou um registo
xx indica o modo de acesso, yyy indica o registo correspondente
xx 00 01 10 11 Funo acesso a memria via registo acesso a memria via registo com deslocamento de 8 bits (no ESP) acesso a memria via registo deslocamento de 32 bits (no ESP) registo (no acesso a memria; sem deslocamento) Excees xx/yyy s especica ESP com xx=11, y=100 yyy=100 e xx=00, xx=01, ou xx=11: indica que instruo tem byte SIB xx=00, yyy=101: s deslocamento (32 bits) SEM registo
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 5 / 14

Exemplos com byte ModR/M (1/2)


Instruo SUB Formato: 0010 10dw | xx rrr yyy | deslocamento
d indica qual operando o operando de destino d=1 destino rrr, d=0 destino xx/yyy

sub ecx, [edi] 0010 1011 | 00 001 111 2B 0F sub ecx, [edi+31h] 0010 1011 | 01 001 111 | 0011 0001 2B 4F 31 sub ecx, [edi+76543210h] 0010 1011 | 10 001 111 | ... 2B 8F 10 32 54 76
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 6 / 14

Exemplos com byte ModR/M (2/2)


Instruo CMP Formato: 0011 10dw | xx rrr yyy | deslocamento cmp cl, [edi] 0011 1010 | 00 001 111 3A 0F cmp [edi+31h],cl 0011 1000 | 01 001 111 | 0011 0001 38 4F 31 cmp [edi+76543210h],ecx 0011 1001 | 10 001 111 | ... 39 8F 10 32 54 76

Joo Canas Ferreira (FEUP)

Codicao de instrues IA-32

Abril 2012

7 / 14

Formatos curtos
Algumas instrues muito usadas tm formatos alternativos, mais curtos Exemplo: Somar valor imediato a um registo. Formato geral: 1000 00dw | xx 000 yyy | deslocamento | constante add byte ptr [ecx+77h], 8Fh 1000 0000 | 01 000 001 | 0111 0111 | 1000 1111 80 41 77 8F add cl, 8Fh 1000 0000 | 11 000 001 | | 1000 1111 80 C1 8F Formato curto para soma de valor imediato: AL/EAX o destino Formato: 0000 010w | constante add al,2Fh 0000 0100 | 0010 1111 04 2F add eax,76543210h 0000 0101 | ... 05 10 32 54 76
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 8 / 14

Prexo de tamanho
Prexo de tamanho altera o signicado do bit w=1 Signicado de w determinado por atributo do segmento de cdigo Em modo de 32 bits (modo por omisso), w=1 indica que a instruo trabalha com operandos de 32 bits Em modo de 16 bits, w=1 indica que instruo usa operandos de 16 bits w=0 indica sempre operandos de 8 bits Prexo 66h altera a interpretao de w para a instruo prexada mov mov mov eax, edx ax, dx al, dl ; 8B C2 ; 66 8B C2 ; 8A C2

Formato geral: 1000 10dw | xx rrr yyy | deslocamento | dados d=1, w=1 1000 1011 = 8B;
Joo Canas Ferreira (FEUP)

d=1, w=0 1000 1010 = 8A


Abril 2012 9 / 14

Codicao de instrues IA-32

Mais exemplos de codicao


ADC EBX, [EDI+2] Formato geral: 0001 00dw | xx rrr yyy | deslocamento 0001 0011 | 01 011 111 | 0000 0010 13 5F 02 ADC [EDI+2], EBX 0001 0001 | 01 011 111 | 0000 0010 11 5F 02 ADC EBX, EDI Formato geral: 0001 00dw | xx rrr yyy d=0, xx/yyy destino (EBX): 0001 0001 | 11 111 011 11 FB d=1, xx/yyy fonte (EDI): 0001 0011 | 11 011 111 13 DF

Joo Canas Ferreira (FEUP)

Codicao de instrues IA-32

Abril 2012

10 / 14

Utilizao de byte SIB (1/2)


O byte SIB (scale-index byte) usado para codicar operandos em memria do tipo [EAX+2*EBX+45h]
registo de base: EAX registo de ndice (associado ao fator de escala): EBX

Valor especial de ModR/M usado para indicar que se trata de um operando com este modo de acesso. Se ModR/M tiver yyy = 100 e xx != 11 segue-se byte SIB Formato de SIB: ee | iii | bbb

ee: escala (multiplicador) iii: registo de ndice (associada escala) bbb: registo base
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 11 / 14

Utilizao de byte SIB (2/2)


Campo ee: 002 1, 012 2, 102 4, 112 8 Campo iii: registo de ndice, codicado como rrr Exceo: iii=100 indica ausncia de ndice (ee no interessa) e presena de deslocamento de 32 bits Consequncia: ESP no pode ser usado como ndice Campo bbb: registo de base, codicado como rrr (ESP vlido) Exceo: para bbb=101 no usado registo de base (EBP) se xx=00 Consequncia: se bbb=101 referncia do tipo [2*edx + constante] Consequncia: EBP s pode ser registo base se existir uma constante (xx=01 ou xx=10) Questo: como codicar p.ex. mov eax, [ebp+2*edx] ?
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 12 / 14

Exemplos de utilizao de SIB (1/2)


Formato geral de mov: 1000 10dw | xx rrr yyy | ee iii bbb | deslocamento mov eax, [ebx+2*ecx] 1000 1011 | 00 000 100 | 01 001 011 | | 8B 04 4B mov al, [ebx+4*edi+30h] 1000 1010 | 01 000 100 | 10 111 011 | ... 8A 44 BB 30 mov al, [ebx+4*edi+12345678h] 1000 1010 | 10 000 100 | 10 111 011 | ... 8A 84 BB 78 56 34 12

Joo Canas Ferreira (FEUP)

Codicao de instrues IA-32

Abril 2012

13 / 14

Exemplos de utilizao de SIB (2/2)


Formato geral de mov: 1000 10dw | xx rrr yyy | ee iii bbb | deslocamento mov [ebx+4*edi+12345678h], al 1000 1000 | 10 000 100 | 10 111 011 | ... 88 84 BB 78 56 34 12 mov eax, [ebp+2*edx] Instruo codicada como mov eax, [ebp+2*edx+00h] 1000 1011 | 10 000 100 | 01 010 101 | 0000 0000 8B 44 55 00 mov eax, [edx+4*esp] Instruo invlida! (ESP no pode ser usado como ndice)
Joo Canas Ferreira (FEUP) Codicao de instrues IA-32 Abril 2012 14 / 14

Mestrado Integrado em Engenharia Informtica e Computao

Microprocessadores e Computadores Pessoais


Sistemas de entrada e sada de dados

1o ano 2011/12

1.

Considere as seguintes medidas efetuadas em dois computadores semelhantes, mas ligados a

redes de tipo diferente: Caracterstica Largura de banda entre n e rede Latncia de interconexo Latncia de HW de/para rede Ethernet 1,125 MB/s 15 6 ATM 10 MB/s 50 6

s s s s

s s s s

Overhead Overhead
a)

de SW para envio de SW para receo

200 241

207 360

Determine, para cada tipo de rede, a latncia computador-a-computador para uma mensagem de 250 bytes.

b)

Comente a seguinte armao: Por vezes a comunicao entre dois computadores mais rpida utilizando uma rede do tipo Ethernet em vez de uma rede ATM.

2.

Considere dois sistemas diferentes destinados ao processamento de entrada/sada (E/S) de o sistema A pode suportar 1500 operaes de E/S por segundo e o sistema B pode

dados:

suportar 1000 operaes de E/S por segundo. Os sistemas usam o mesmo processador, capaz de executar 500 MIPS (milhes de instrues por segundo). Assuma que cada transferncia envolve 5 operaes de E/S e que cada E/S requer 10000 instrues. Desprezando o tempo de resposta e assumindo que as transferncias podem ser sobrepostas, determine qual a taxa mxima de transferncias por segundo que ambos os sistemas suportam.

3.

Um fabricante de discos magnticos divulga as seguintes caractersticas para um determinado

modelo:


a) b)

capacidade de cada setor: 512 bytes; velocidade de rotao: 10000 RPM; tempo de busca mdio: 6 ms; taxa de transferncia: 50 MB/s; atraso introduzido pelo controlador: 0,2 ms.

Calcule o tempo mdio de acesso ao disco. Aps se utilizar um disco com estas caractersticas vericou-se que o tempo de busca mdio anal 25% do valor anunciado. Calcule quanto melhora o tempo mdio de acesso ao disco.

AJA, JCF

Pg. 1 de 5

MPCP (MIEIC), 2011/12

Sistemas de entrada e sada de dados

4.

Assuma que um disco magntico tem as seguintes caractersticas:

10000 RPM, 416 setores (de 512 bytes) por cilindro; tempo de busca mnimo 2 ms e mdio 8 ms; taxa de transferncia 80 MB/s.

Ignore os atrasos introduzidos pelo controlador.

a)

Calcule o tempo necessrio para transferir cheiros de 200 KB e de 400 KB, assumindo que os respetivos setores esto dispostos em disco da maneira mais favorvel possvel. Nota: Tenha em considerao a capacidade total de um cilindro.

b)

Suponha agora que o cheiro de 200 KB ocupa setores escolhidos aleatoriamente. Determine o respetivo tempo de transferncia.

5.

Pretende-se enviar de um computador porttil para outro computador 100 cheiros com cerca

de 40 MB cada atravs de uma ligao sem os a 5 Mbits/s. Antes de iniciar a transferncia a energia na bateria de 100 kJ. A placa de rede sem os consome 5 W, enquanto transmite, e os restantes recursos do porttil consomem 35 W. Antes da transferncia de cada cheiro so necessrios 10 s para escolher o cheiro a enviar. Calcule quantos cheiros completos se

conseguem enviar antes de o computador car sem energia. Nota: 1 W = 1 J/s.

6.

Pretende-se determinar o impacto de usar

polling

para realizar transferncias de dados com

trs perifricos diferentes. Assuma que a operao de

polling

consome 800 ciclos de relgio e que

o CPU opera a 2 GHz. Determine a fraco de tempo de CPU consumida por

polling

em cada

um dos trs casos seguintes, assumindo que a operao feita com uma periodicidade tal que no ocorre perda de dados e que os perifricos esto sempre potencialmente ocupados.

a)

Um rato deve ser examinado 50 vezes por segundo para garantir que nenhum movimento do utilizador perdido.

b)

Um leitor de disquetes transfere dados para o processador em unidades de 16 bits e tem uma taxa de transferncia de dados de 50 KBytes/s.

c)

Um disco duro transfere dados em grupos de 4 palavras (4 bytes cada) a uma taxa de 8 MBytes/s.

7.

Suponha que so usados o mesmo CPU e disco duro do exerccio anterior, mas desta vez com

E/S realizada por interrupo. O

overhead

de cada transferncia, incluindo o atendimento da

interrupo, de 1000 ciclos de relgio. Determine a frao mdia de tempo de CPU consumida se o disco duro transferir dados durante 5% do tempo. Compare com o resultado do exerccio anterior e comente.

AJA, JCF

Pg. 2 de 5

MPCP (MIEIC), 2011/12

Sistemas de entrada e sada de dados

8.

Suponha que usamos o mesmo sistema dos problemas anteriores, mas desta vez usando

Memory Access

Direct

(DMA). Assuma que o estabelecimento da transferncia de DMA consome 2500

ciclos e o tratamento da interrupo de m de DMA consome 500 ciclos. Se a transferncia mdia for de 8 KBytes, determine a frao do tempo de CPU consumida se o disco estiver ativo 100% do tempo. Ignore o impacto da eventual conteno no barramento entre CPU e controlador de DMA.

9.

A execuo de um programa demora 90 s, dos quais 80 so gastos pelo CPU, correspondendo

os restantes 10 s ao tempo de E/S. Se durante cinco anos o tempo de CPU for melhorado 50% em cada ano, permanecendo o tempo de E/S constante, determine qual ser a melhoria do tempo de execuo do programa aps esses cinco anos.

10.

Um programa executa repetidamente as seguintes tarefas:

l do disco um bloco de dados de 4 KB, processa estes dados, escreve o resultado, formado por outro bloco de dados de 4 KB, num stio aleatrio do disco.

Os blocos so contguos e localizam-se aleatoriamente numa pista do disco. O disco possui uma velocidade de rotao de 10000 RPM, o tempo de busca mdio 8 ms, a taxa de transferncia de 50 MB/s e o atraso introduzido pelo controlador do disco 2 ms. O processamento dos dados demora 20 milhes de ciclos de relgio, sendo a frequncia do sinal de relgio de 5 GHz. Assuma que nenhum outro programa est a usar o disco ou o processador e que no h sobreposio entre a operao do disco e o processamento dos dados. Calcule o desempenho do sistema em blocos processados por segundo.

11.

Considere dois sistemas RAID (

Redundant Arrays of Inexpensive Disks ) destinados a arma-

zenar 10 TB (sem contar com qualquer redundncia). O sistema A usa tecnologia RAID 1 e o sistema B usa tecnologia RAID 5 com 4 discos num grupo de proteo.

a)

Determine a capacidade de armazenamento que o sistema A deve ter a mais que o sistema B.

b)

Suponha que uma aplicao escreve um bloco de dados no disco. Se o acesso a um bloco demora 30 ms, determine quanto tempo demora a escrita nos sistemas A e B no pior caso possvel.

c) 12.

Indique, justicando, se o sistema A mais vel que o sistema B.

Considere um computador com as seguintes caractersticas:

o CPU executa 3000 MIPS, dispendendo o sistema operativo 100000 instrues em cada E/S;

AJA, JCF

Pg. 3 de 5

MPCP (MIEIC), 2011/12

Sistemas de entrada e sada de dados

o barramento de acesso a memria possui uma taxa de transferncia de 1000 MB/s; os controladores de barramento SCSI (

Small Computer System Interface ) Ultra32 tm taxa

de transferncia de 320 MB/s e capacidade para 7 discos;

o acesso a discos feito com uma largura de banda de 75 MB/s e o tempo mdio de busca mais a latncia de rotao 6 ms.

Considere que a leitura do disco se faz em blocos de 64 KB, situados em setores sequenciais na mesma pista, e que um programa do utilizador precisa de 200000 instrues por operao de E/S. Assuma que no ocorrem conitos de acesso a discos.

a)

Calcule a taxa mxima de operaes de E/S, indicando qual o componente que limita o desempenho do computador (

bottleneck ).

b)

Determine quantos discos e quantos controladores SCSI so necessrios para atingir tal taxa de E/S.

13.

Considere um computador com os seguintes indicadores:

o programa de um utilizador faz continuamente leituras de blocos de 64 KB, requerendo 2 milhes de ciclos de relgio para processar cada bloco;

o sistema operativo dispende 1 milho de ciclos por cada operao de E/S; o barramento de acesso a memria possui uma taxa de transferncia de 640 MB/s; o CPU opera a 3 GHz; o acesso a discos feito com uma largura de banda de 64 MB/s e o tempo mdio de busca mais a latncia de rotao 9 ms;

existem 20 discos ligados ao barramento, cada um com o respetivo controlador (assuma que cada disco pode ser controlado de forma independente e ignore possveis conitos no acesso aos discos).

Identique o recurso (CPU, barramento de memria ou discos) que limita o desempenho do sistema.

14.

[Teste de 06-07-2011] Considere um computador com dois discos:

Um disco magntico tradicional que roda a 3000 RPM, tem uma latncia mdia de busca de 30 ms, uma latncia de controlador de 10 ms e transfere dados a 20 MB/s.

Um disco SSD que usando memria

ash

consegue ler e escrever blocos de 4 kB a uma taxa

de 10 MB/s, com uma latncia de acesso desprezvel.

AJA, JCF

Pg. 4 de 5

MPCP (MIEIC), 2011/12

Sistemas de entrada e sada de dados

Pretende-se projetar um controlador inteligente para alternar entre os discos consoante for mais ecaz. Justique as suas respostas com clculos.

a)

Considerando uma transferncia de 40 kB contguos, qual o tempo total de acesso para o disco SSD?

b)

Qual o tempo de acesso da mesma transferncia de 40 kB contguos no caso do disco magntico? Considere que aps comear a transferncia, eventuais mudanas de pista

demoram um tempo negligencivel.

c)

Calcule o tamanho da transferncia que o controlador inteligente deve usar como valor limite para decidir trocar entre o disco SSD e o disco magntico (i.e., o limiar de deciso).

15.

[Teste de 06-07-2011] Considere um computador com um CPU de 2 GHz e uma cmara

de vdeo ligada por um barramento Firewire capaz de transferir blocos de 16 kB a 800 MB/s. Pretende-se usar a estratgia de

polling

para transferir dados da cmara para memria.

a)

Considere um cenrio em que o CPU tem de gastar 99% do seu tempo em outras tarefas que no

polling.

Sabendo que neste sistema, uma operao de

de relgio, qual o nmero mximo de operaes de segundo pelo CPU?

polling

polling

consome 200 ciclos

que podem ser realizadas num

b)

Considerando apenas as restries impostas pelo barramento Firewire, qual o nmero mximo de blocos de 16 kB que podem ser lidos da cmara de vdeo num segundo?

c)

Com base nos clculos anteriores, quantas operaes de

polling

devem ser realizadas (por

segundo) de forma a evitar perdas de dados e minimizar a ocupao de CPU?

Fim

AJA, JCF

Pg. 5 de 5

Sistemas de entrada/sada de dados


Joo Canas Ferreira

Maio 2012

Aspetos gerais Armazenamento de informao Comunicao com perifricos Gesto de perifricos Sistemas RAID

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

2 / 53

Organizao de um computador

Fonte: [COD4]

FIGURE 1.4 The organization of a computer, showing the ve classic components. The processor gets Joo Canas Ferreira (FEUP)instructions and data from memory. Input writes dados memory, and output reads dataMaio 2012 Sistemas de entrada/sada de data to from memory. Control sends the signals that determine the operations of the datapath, memory, input, and output. Copyright 2009 Elsevier, Inc. All rights reserved.

3 / 53

Dispositivos de entrada/sada
Processor Interrupts

Cache

Memory-I/O Interconnect

Main memory

I/O controller

I/O controller

I/O controller

Disk

Disk

Graphics output

Network

Fonte: [COD4] FIGURE 6.1 A typical collection of I/O devices. The connections between the I/O devices,
processor, and memory are historically called buses, although de dados means shared parallel wires and most 4 / 53 the term Joo Canas Ferreira (FEUP) Sistemas de entrada/sada Maio 2012 I/O connections today are closer to dedicated serial lines. Communication among the devices and the pro-

Diversidade de perifricos
Device
Keyboard Mouse Voice input Sound input Scanner Voice output Sound output Laser printer Graphics display Cable modem Network/LAN Network/wireless LAN Optical disk Magnetic tape Flash memory Magnetic disk Input Input Input Input Input Output Output Output Output Input or output Input or output Input or output Storage Storage Storage Storage

Behavior

Partner
Human Human Human Machine Human Human Human Human Human Machine Machine Machine Machine Machine Machine Machine

Data rate (Mbit/sec)


30,000.0001 30,000.0038 30,000.2640 30,003.0000 30,003.2000 30,000.2640 30,008.0000 30,003.2000 800.00008000.0000 0.12806.0000 100.000010000.0000 11.000054.0000 30,080.0000220.0000 005.0000120.0000 32.0000200.0000 800.00003000.0000

FIGURE 6.2 Fonte: [COD4] The diversity of I/O devices. I/O devices can be distinguished by whether they serve as input, output, or storage devices; their communication partner (people or other computers); and their peak Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 5 / 53 communication rates. The data rates span eight orders of magnitude. Note that a network can be an input or an output device, but cannot be used for storage. Transfer rates for devices are always quoted in base 10, so that 10 Mbit/sec = 10,000,000 bits/sec. Copyright 2009 Elsevier, Inc. All rights reserved.

Caratersticas de um sistema E/S

Conabilidade importante
Em especial, para armazenagem de informao (discos magnticos)

Medidas de desempenho
Latncia (tempo de resposta) Dbito (largura de banda) Quantidade de informao processada por unidade de tempo

PC desktop e sistemas embarcados


tempo de resposta e diversidade

Servidores
dbito e expansibilidade

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

6 / 53

Conabilidade
Conabilidade: qualidade do sistema que permite conar justicadamente no servio oferecido. Vrios aspetos quanticveis:
Fiabilidade (reliability) Quanticao: medida do tempo de funcionamento at falhar probabilidade de no falhar durante o tempo de misso

Disponibilidade (availability) Quanticao: tempo (ou %) em que o sistema est operacional tempo mdio de reparao Reparabilidade (maintainability) Segurana contra acidentes (safety) Segurana contra acesso no autorizado (security) Fatores: integridade, condencialidade, autenticidade
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 7 / 53

Medidas de conabilidade
Fiabilidade: tempo mdio at falhar MTTF: mean time to failure Interrupo de servio: tempo mdio de reparao MTTR: mean time to repair Tempo mdio entre falhas: MTBF: mean time between failures MTBF = MTTF + MTTR Disponibilidade: MTTF / (MTTF + MTTR) Para aumentar a disponibilidade:
Aumentar MTTF tolerncia a falhas (redundncia), previso de falhas, etc. Reduzir MTTR melhores ferramentas e processos de diagnstico e reparao
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 8 / 53

Exemplo: Falhas de discos na empresa Google

Fonte: E. Pinheiro et al, Failure Trends in a Large Disk Drive Population, 5th USENIX Conference on File and Storage Technologies (FAST07), Fev. 2007)
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 9 / 53

Aspetos gerais Armazenamento de informao Comunicao com perifricos Gesto de perifricos Sistemas RAID

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

10 / 53

Discos magnticos

Pista (track): coroa circular numa face de um prato Cilindro (cylinder): conjunto de pistas que podem ser simultaneamente lidas/escritas Setor: segmento de uma pista; unidade bsica de armazenamento
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 11 / 53

Acesso a um setor
Cada setor fsico contm:
identicador do setor dados tradicional: 512 bytes a partir de 2009: 4096 bytes cdigo corretor de erros (ECC) permite esconder defeitos e problemas de gravao informao de sincronizao e lacunas

Aceder a um setor envolve:


esperar se existirem acessos pendentes (la de espera) movimento da cabea de leitura: seek time latncia rotacional: tempo at setor surgir debaixo da cabea de leitura tempo de transferncia dos dados overhead do controlador

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

12 / 53

Formato de setores

[Fonte: Wikipedia]
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 13 / 53

Exemplo de clculo de tempo de acesso a disco


Calcular tempo mdio de leitura: Setor: 512 B Velocidade de rotao: 15000 rpm Tempo mdio de procura: 4 ms Taxa de transferncia: 100 MB/s Overhead de controlador: 0,2 ms Disco inicialmente inativo ta = tseek + trot + ttransf + tcntrl trot = 0, 5 ttransf = 60 = 2 ms 15000

512 = 0.005 ms 108 No total: ta = 4 + 2 + 0.005 + 0.2 = 6.2 ms


Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 14 / 53

Fatores que afetam o clculo do desempenho


Fabricantes indicam o tempo mdio de procura tseek baseado na mdia de todos os acessos Na prtica, setores sucessivos esto relativamente prximos (proximidade)
tempos de procura reais so tipicamente mais baixos que tseek

Controladores inteligentes determinam a posio fsica dos setores


Apresentam uma interface ao sistema hspede baseada em setores lgicos

Discos incluem memria cache


leitura por antecipao (prefetch) podem evitar tempo de pesquisa e latncia de rotao

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

15 / 53

Caratersticas de discos magnticos


Densidade por unidade de rea: Custo e tempo de acesso
1,000,000 DRAM 100,000 1985 1990 1995 2000 Access time gap 100 2005 1980 Disk 1985 1990 1995 1980

bits pistas polegada polegada

10,000 Cost ($/GB)

1,000

10

2000

1 2005 0.1

Fonte: [CAQA5]

10

100

1,000

10,000 Access time (ns)

100,000

1,000,000 10,000,000 100,000,000

Potncia dissipada: P dimetro4.6 RPM2.8 num. de pratos

Fonte: [CAQA5]
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 16 / 53

Memria Flash

Memria no voltil
100x 1000x mais rpida que discos magnticos menor consumo, maior robustez mais cara C/GB (entre disco magntico e DRAM)

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

17 / 53

Tipos de memria Flash


Flash do tipo NOR
clula de armazenamento com estrutura semelhante a porta NOR acesso direto para leitura/escrita (como SRAM e DRAM) memria de instrues em sistemas embarcados

Flash do tipo NAND


clula de armazenamento com estrutura semelhante a porta NAND mais densa (bits/rea), mas acesso sequencial por blocos mais barata

clulas perdem capacidade de armazenamento gesto de desgaste: mapear dados para zonas menos usadas
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 18 / 53

Caratersticas de memrias Flash

Characteristics
Typical use Minimum access size (bytes) Read time (microseconds) Write time (microseconds) Read bandwidth (MBytes/second) Write bandwidth (MBytes/second) Wearout (writes per cell) Best price/GB (2008)

NOR Flash Memory


BIOS memory 512 bytes 0.08 10.00 10 0.4 100,000 $65

NAND Flash Memory


USB key 2048 bytes 25 1500 to erase + 250 40 8 10,000 to 100,000 $4

FIGURE 6.7 Characteristics of NOR versus NAND ash memory in 2008. These devices can read bytes and 16-bit words despite their large access sizes. Copyright 2009 Elsevier, Inc. All rights reserved.

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

19 / 53

Estrutura interna de NAND Flash: pginas e blocos

[Fonte: Wikipedia]

Escrever por pginas Apagar por blocos


Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 20 / 53

Gesto de espao

[Fonte: Wikipedia]

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

21 / 53

Exemplo: Arquitetura de um Solid State Drive

[Fonte: Chameleon: A High Performance Flash/FRAM Hybrid Solid State Disk Architecture, Soon et al., IEEE-CAL Vol.7, N.1, 2008]

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

22 / 53

Outras tecnologias para memrias no-volteis

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

23 / 53

Aspetos gerais Armazenamento de informao Comunicao com perifricos Gesto de perifricos Sistemas RAID

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

24 / 53

Interligar dispositivos
Como interligar CPU, memria e controladores de E/S ? Soluo mais simples: barramento paralelo um canal de comunicao partilhado Conjunto de ligaes paralelas para dados e sincronizao Problema: pode limitar o desempenho do sistema (gargalo) O desempenho de um barramentos est limitado por fatores fsicos
comprimento das ligaes nmero de dispositivos ligados (slots)

Alternativa: ligaes srie de alta velocidade (ponto-a-ponto)

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

25 / 53

Tipos de barramentos
Barramentos processador/memria Curto, alta velocidade Caratersticas adaptadas organizao da memria Exemplo: FSB: Front Side Bus Barramento de E/S (perifricos) Mais comprido Mltiplas ligaes Normalizado, para garantir interoperabilidade Ligado ao CPU atravs de uma ponte Exemplos: PCI, USB, LPC, etc.
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 26 / 53

Alguns barramentos atuais

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

27 / 53

Sistema E/S tpico (x86)


Intel Xeon 5300 processor FB DDR2 667 (5.3 GB / sec) Main memory DIMMs Serial ATA (300 MB / sec) Intel Xeon 5300 processor Front Side Bus (1333 MHz, 10.5 GB / sec) Memory controller hub (north bridge) 5000P PCIe x16 (or 2 PCIe x8) (4 GB / sec)

ESI PCIe x8 (2 GB / sec) (2 GB / sec) PCIe x4 (1 GB / sec) PCIe x4 (1 GB / sec) PCI-X bus (1 GB / sec) PCI-X bus (1 GB / sec) Parallel ATA (100 MB / sec)

Disk

Disk LPC (1 MB / sec) USB 2.0 (60 MB / sec)

Keyboard, mouse, ...

I/O controller hub (south bridge) Entreprise South Bridge 2

CD / DVD

FIGURE 6.9 Organization of the I/O system on an Intel server using the Intel 5000P Maio 2012 chip Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados set. If you assume reads and writes are each half the trafc, you can double the bandwidth per link for PCIe. Copyright 2009 Elsevier, Inc. All rights reserved.

28 / 53

Exemplo: Barramento LPC (Low Pin Count)

KBC: controlador de teclado, SP: porto srie(RS232), PP: porto paralelo , FDC: controlador de diskette (oppy disk controller)
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 29 / 53

Aspetos gerais Armazenamento de informao Comunicao com perifricos Gesto de perifricos Sistemas RAID

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

30 / 53

Gesto de E/S
E/S so geridas pelo sistema operativo Vrios programas partilham os recursos E/S
Proteo e sequenciamento da utilizao

E/S causam interrupes assncronas


Gerir as rotinas de atendimento de interrupes

Programao de E/S delicada


Sistema operativo disponibiliza abstraes (p.ex. cheiros)

Dispositivos so geridos por controladores de E/S em hardware


Transferncias entre memria (ou CPU) e dispositivos

Controlador tem:
Registos de comandos: indicam a tarefa a executar Registos de estado: indicam atividade em execuo e situaes de erro Registos de dados: escrita (CPU/memria para dispositivo) leitura (do dispositivo para CPU/memria)
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 31 / 53

Acesso a dispositivos de E/S


Mapeamento no espao de endereamento de memria Registos de E/S so mapeados em endereos de memria Circuito de descodicao de endereos distingue entre memria e dispositivos de E/S Sistema operativo usa unidade de gesto de memria virtual para ocultar os dispositivos dos programas do utilizador Pode ser usado com qualquer CPU Instrues dedicadas de E/S CPU dispe de instrues separadas para acesso a dispositivos de E/S Instrues s podem ser executadas em modo privilegiado Exemplo: IA-32 (instrues IN e OUT)

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

32 / 53

Exemplo: Relgio de tempo real

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

33 / 53

Tcnica 1: Varrimento (polling)


Repetir periodicamente:
1 2 3

Consultar registos de estado Dispositivo pronto? Realizar operao (leitura/escrita) Dispositivo com erro? Recuperar

Tcnica comum em sistemas pequenos ou de baixo desempenho Comportamento temporal previsvel Baixo custo em hardware Simples Em sistemas de elevado desempenho: desperdia recursos de CPU Pode ser apropriado para perifricos lentos: nmero de varrimentos necessrios pequeno
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 34 / 53

Tcnica 2: Interrupes
Dispositivo gera interrupo quando:
est pronto ocorre um erro

Atendimento de interrupo pelo CPU:


Interrompe execuo do programa Salta para rotina de atendimento Quando a rotina termina, retoma execuo regular

CPU suporta diferentes interrupes Interrupes so hierarquizadas (prioridades)


Dispositivos de atendimento urgente usam interrupes de maior prioridade Atendimento de interrupes de maior prioridade pode interromper atendimento de outras de menor prioridade

Prioridades so, geralmente, xas (denidas por hardware) Sistema inclui hardware especco para gerir as interrupes
Intel 8259 (PCs antigos), circuito integrado ou includo em southbridge APIC (Advanced Programmable Interrupt Controller)
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 35 / 53

Exemplo: Sistema com APIC

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

36 / 53

Tcnica 3: Acesso directo a memria (DMA)


Problema: Com as duas tcnicas anteriores, a transferncia de dados ca a cargo do CPU
O CPU que transfere a informao dos registos de dados do perifrico para memria e vice-versa Com dispositivos de alta velocidade (discos, placas de rede), esta abordam pode afetar gravemente o desempenho das outras tarefas

Soluo: usar um controlador para gerir as transferncias


sistema operativo dene zona de memria (endereo e tamanho) (congurao do controlador de DMA) controlador realiza a transferncia, enquanto CPU continua com as suas tarefas quando transferncia termina ou encontra um erro, controlador notica CPU (interrupo)

Fatores a ter em conta:


Interao com memria cache: DMA altera memria principal, cpia em cache ca desatualizada! Interao com memria virtual: endereos virtuais consecutivos podem no corresponder a endereos fsico consecutivos!
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 37 / 53

Medidas de desempenho
Medidas de desempenho de E/S dependem de:
Hardware: CPU, memria, controladores, barramentos Software: sistema operativo, sistema de gesto de base de dados, aplicao Carga: taxas e padres de pedidos

Projeto pode beneciar tempo de resposta ou dbito Frequentemente: medir dbito com restries do tempo de resposta (o tempo de resposta no pode exceder um limiar denido) Vrios tipos de benchmarks
Bases de dados: Transaction Processing Council http://www.tpc.org Sistema de cheiros: SPEC File System (SFS) http://www.spec.org/sfs2008 Servidores Web: SPEC Web http://www.spec.org/web2009
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 38 / 53

E/S vs CPU
Amdahl ataca de novo. . . Desempenho E/S pode comprometer ganhos obtidos por aumento do paralelismo. Exemplo:
Tarefa demora 90 s (de tempo de CPU) mais 10 s de tempo de E/S Se o nmero de CPUs duplicar cada dois anos, como evolui o tempo total, admitindo que o sistema E/S no alterado?

Fonte: [COD4]

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

39 / 53

Aspetos gerais Armazenamento de informao Comunicao com perifricos Gesto de perifricos Sistemas RAID

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

40 / 53

Conjuntos de discos

controlador de array de discos

B0 B4

B1 B5

stripe 0 stripe 1

B2 B6

B3 B7

Discos fsicos em paralelo formam um disco virtual Blocos (B0,. . . ) de um cheiro so "espalhados"pelos discos fsicos 1 bloco = 1 ou mais setores (nmero xo) Blocos correspondentes de cada disco formam uma banda (stripe)
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 41 / 53

Caratersticas de conjuntos de discos


Vantagens: Melhor desempenho
Transferncias grandes: (array com bandas) Acesso a D blocos de uma banda demora tanto como acesso a um s disco Transferncias pequenas: Podem efetuar-se D acessos independentes

Menor custo
Discos individuais mais baratos (grande volume de vendas) Controladores sosticados em circuito integrado Existem controladores capazes de lidar com 1000 discos individuais

Desvantagem: Menor abilidade Basta falhar um disco fsico para levar falha do conjunto Para um conjunto de D discos, cada um com o mesmo MTTF: MTTF D Soluo: Introduzir redundncia para recuperar de avaria de um disco MTTFarray =
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 42 / 53

RAID
RAID = Redundant Array of Inexpensive Disks Paralelismo aumenta a abilidade mais econmico (para o mesmo nvel de abilidade) ter redundncia que aumentar a abilidade de um nico disco
Aproveita economia de escala: existe uma mercado muito grande para discos baratos

Aumenta MTBF, especialmente se for possvel trocar discos sem parar o sistema (hot swap) Paralelismo aumenta o desempenho
Um cheiro pode ser espalhado por vrios discos Leituras paralelas permitem obter vrios blocos simultaneamente

Desvantagem: mais discos que o estritamente necessrio (aumenta do consumo de energia)


Exceo: RAID nvel 0 corresponde a uma organizaao sem redundncia

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

43 / 53

Impacto da introduo de redundncia


D: n total de discos de dados G: n de discos de dados por grupo C: n de discos com informao de vericao por grupo nG = D/G: n de grupos de proteo N = nG (G + C) falhas independentes; taxa de falhas tf = 1/MTTF = constante MTTR: o tempo mdio de reparao (substituio de um disco) Array falha se ocorrer pelo menos uma outra falha num grupo enquanto a primeira falha reparada. MTTFRAID MTTF2 disco = (D + C nG ) (G + C 1) MTTR

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

44 / 53

RAID 1
um par rplicas B0 B2 B1 B3 B0 B2 B1 B3

RAID 1: espelho (duplicao concorrente de cada disco) Discos: G = 1, C= 1 (cada disco de dados duplicado) Escrita simultnea no disco de dados e no disco-espelho Falha de disco: ler do espelho Pode ler blocos diferentes de cada disco Aproveitamento da capacidade dos discos de 50 % RAID 2 no usado na prtica.
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 45 / 53

RAID 3: Bit-Interleaved Parity


b1,b5,b9,b13 b2,b6,b10,b15 b3,b7,b11,b15 b4,b8,b12,b16

P(b1,b2,b3,b4), P(b5,b6,b7,b8),... Exemplo para a distribuio dos primeiros bits (b1-b15) de um bloco

RAID 3 tem C=1; cabeas de leitura sincronizadas (tipicamente) Disco adicional guarda paridade de bits correspondentes de cada disco Leitura simultnea de todos os discos reduo de desempenho para cheiros pequenos Escrita: gerar bits de paridade e escrever em todos os discos (D+C) Pouco ecaz para escritas pequenas (mas no para grandes)
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 46 / 53

Clculo de paridade
Paridade de D bits (o smbolo representa a operaao ou-exclusivo): Paridade(b1 , b2 , . . . , bD ) = b1 b2 . . . bD = p Se nmero de bi = 1 par paridade = 0; seno paridade = 1 Usar paridade para determinar um dos bi em falta:
1 2

Calcular a paridade q dos bi disponveis Determinar o valor em falta calculando q p q = Paridade(b2 , . . . , bD ) b0 = p q

(Exemplo) Para determinar b1 calcula-se sucessivamente:


1 2

a (b c) = (a b) c = a b c ab=ba Para elementos com vrios bits, a paridade calculada fazendo o ou-exclusivo dos bits em posies correspondentes: Se X = [x1 , x2 , . . . , xn ] e Y = [y1 , y2 , . . . , yn ], ento Paridade(X, Y) = [x1 y1 , x2 y2 , . . . , xn yn ] Nota:
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 47 / 53

RAID 4: Block-Interleaved Parity


P(B0,B1,B2,B3) P(B4,B5,B6,B7)

B0 B4

B1 B5

B2 B6

B3 B7

RAID 4 tem C = 1 Melhor desempenho para escritas pequenas do que RAID 3 Dados espalhados pelos discos ao nvel do bloco Disco de vericao armazena paridade de blocos da mesma banda Leitura: acesso apenas ao disco que contm o bloco e ao disco de paridade Escrita: alterar um disco de dados e atualizar o disco de paridade (ciclo leitura-modicao-escrita)
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 48 / 53

RAID 3 vs. RAID 4: Operao de escrita (alterao)

Fonte: [COD4]

RAID 3: aplicaes com elevado dbito, mas poucas operaes E/S RAID 4: mais eciente que RAID 3 para acessos a pequenos cheiros RAID 3 e 4: todas as escritas (de um grupo) envolvem o disco de paridade RAID 3 e RAID 4 so pouco usados, j que RAID 5 mais eciente
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 49 / 53

RAID 5: Paridade distribuda por vrios discos


Semelhante a RAID 4, mas com blocos de paridade distribudos por todos os discos do grupo Evita que o disco de paridade restrinja o desempenho do sistema (como acontece com RAID 4) Muito usado

Fonte: [COD4]
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 50 / 53

Outros tipos de RAID


RAID 6: Redundncia adicional Como RAID 5, mas com dois grupos de informao de redundncia (C=2) Pode recuperar de situao com dois discos avariados por grupo Maior tolerncia a falhas custa de mais redundncia RAID composto Composio de duas tcnicas Exemplo: RAID 10 (1+0) Aplicar RAID 0 a conjuntos RAID 1 (em vez de discos individuais) (mirrored stripes) RAID 01 (0+1) Aplicar RAID 1 a conjuntos RAID 0 (mirrored stripes) Mais variantes: RAID 50, RAID 60
Joo Canas Ferreira (FEUP) Sistemas de entrada/sada de dados Maio 2012 51 / 53

RAID: concluso
Soluo econmica para necessidades de armazenamento signicativas mais barato usar vrios discos de abilidade normal que um disco de abilidade muito elevada. RAID aumenta disponibilidade (exceto RAID 0) Tambm pode aumentar o desempenho preciso ter em ateno o domnio de aplicao, porque o desempenha depende das caratersticas dos acessos Elevada disponibilidade requer trocas em funcionamento para reduzir o tempo mdio de reparao (MTTR) Ateno: Assume-se que falhas de discos so independentes! No resolve situaes em que vrios discos so afetados simultaneamente pelo mesmo evento (p.ex. falha de fonte de alimentao).

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

52 / 53

Referncias

COD4 D. A. Patterson & J. L. Hennessey, Computer Organization and Design, 4 ed. CA5 D. A. Patterson & J. L. Hennessey, Computer Architecture: A Quantitative Approach, 5 ed. Os tpicos tratados nesta apresentao so abordados nas seguintes seces de [COD4]: 6.16.7

Joo Canas Ferreira (FEUP)

Sistemas de entrada/sada de dados

Maio 2012

53 / 53

Mestrado Integrado em Engenharia Informtica e Computao

Microprocessadores e Computadores Pessoais


Codicao de instrues IA-32

1o ano 2011/12

O formato do cdigo binrio da instruo MOV mem/reg, imediato est representado na gura seguinte,
1.

1100 011w

xx00 0yyy

DesL DesH 0, 1 ou 4 bytes

ImL ImH 0, 1 ou 4 bytes

em que: w indica se o operando imediato do tipo byte (w=0) ou doubleword (w=1) xx dene o modo de endereamento yyy r/m o tipo de base de endereamento Determine o cdigo das instrues seguintes.
a) b) c) 2.

MOV DWORD PTR [EBX + 2345H], 1245h MOV BYTE PTR [EDI + 123H], 09h MOV EAX, 34h

O formato do cdigo binrio da instruo MOV mem/reg1, mem/reg2 est representado na gura, 1000 10dw xx reg yyy DesL DesH 0, 1 ou 4 bytes

em que: se d=0, o operando descrito por xx e yyy o destino (mem/reg1) e reg mem/reg2 se d=1, reg o destino (mem/reg1) e, xx e yyy mem/reg2 w indica se o operando da instruo do tipo byte ou doubleword xx modo de endereamento yyy r/m tipo de base de endereamento
a)

Determine o cdigo das instrues:


MOV [ EBX + 2345 H ], EAX MOV AL , [ EDI + 123 H] MOV EAX , EBX

b)

Determine as diferenas fundamentais do cdigo da instruo MOV [EBX+2345H], EAX face a MOV [EBX+2*EDX+2345H], EAX.
Pg. 1 de 2

AJA, JCF

MPCP (MIEIC), 2011/12

Codicao de instrues IA-32

3.

O formato da instruo CMP no microprocessador da famlia IA-32 da Intel : 0011 10dw xx reg yyy ss kkk ppp SIB em que: w d indica se o operando da instruo do tipo byte ou doubleword se d=0, o operando descrito por xx e yyy o destino (mem/reg1) e reg mem/reg2 se d=1, reg o destino (mem/reg1) e, xx e yyy mem/reg2 xx modo de endereamento yyy registo usado no modo de endereamento ss escala kkk registo de ndice ppp registo de base O campo sombreado usado apenas com certos modos de endereamento.
a) b)

DesL DesH 0, 1 ou 4 bytes

Apresente o cdigo da instruo CMP [EDI + 10H], AL Indique para que serve o campo SIB da instruo (assinalado a sombreado), e d um exemplo de uma instruo que utilize esse campo.

4.

O formato da instruo INC no microprocessador da famlia IA-32 da Intel 1111 111w xx 000 yyy ss kkk ppp SIB e da instruo MOV 1000 10dw w d xx yyy ss kkk ppp xx reg yyy ss kkk ppp SIB DesL DesH 0, 1 ou 4 bytes DesL DesH 0, 1 ou 4 bytes

indica se o operando da instruo do tipo byte (0) ou doubleword (1) destino reg (1) ou destino xxyyy (0); modo de endereamento registo usado no modo de endereamento escala registo de ndice registo de base

O campo sombreado opcional. Converta para cdigo-mquina (representando-o em hexadecimal) a sequncia de instrues:
MOV AL , [ EDI +200] INC AL
Fim
AJA, JCF Pg. 2 de 2