• Nenhum resultado encontrado

Capítulo 6 Sistemas de Arquivos

N/A
N/A
Protected

Academic year: 2021

Share "Capítulo 6 Sistemas de Arquivos"

Copied!
72
0
0

Texto

(1)

Sistemas de Arquivos

(2)

Roteiro:

•  Introdução

•  Sistema de Arquivos: visão do usuário

•  Arquivos, diretórios, mount, •  descritores de arquivos

•  Implementação do sistema de arquivos

•  O caso UNIX

•  Consistência

•  Backups

(3)

Objetivos Gerais

1.  Deve ser possível armazenar uma quantidade muito

grande de dados

2.  Os dados devem persistir ao término do processo

que a usa

3.  Processos devem ser capazes de compartilhar dados

e meta-dados

4.  Deve ser possível organizar os dados de forma a

(4)

Sistema de Arquivos

•  Determina como os dados são armazenados e

acessados.

•  gerencia o acesso tanto ao conteúdo de arquivos e

como dos meta-dados sobre esses arquivos.

•  torna transparente o meio físico de armazenamento

•  garante confiabilidade e eficiência no acesso,

•  otimiza o armazenamento e gerencia o espaço livre no

meio físico (discos).

Um Sistema de arquivos é controlado por chamadas de sistema e por utilitários de sistema:

Por exemplo, para configurar, modificar parâmetros, alocar e desalocar espaço físico, verificar a integridade do SA,

(5)

Sistemas de Arquivo baseados em

disco

Um sistema de arquivos UNIX é uma colecão de

arquivos e diretórios com:

Um diretório raiz (/)

Cada arquivo e diretório possui identificação

única:

–  seu nome e diretório no que está inserido, e

(6)

Sistema de Arquivos

Um sist. de arquivos pode estar contido em: •  em uma partição de um disco local, ou

•  em uma “disk image” (um grande arquivo de um Sist.

Arquivos hospedeiro), ou

•  em uma partição no disco de outro computador e

acessível pela rede (NFS/samba).

disk image

SA hospedeiro

Computador Computador A Computador B SA em uma partição

(7)

Camadas do sistema de arquivos

disco

Controle de E/S Acesso básico a blocos

Gerenciamento de espaço livre Sistema lógico de arquivos e diretórios

(8)

Nome, Tipo e Extensão

•  Nome: com um comprimento máximo (Unix: 256 e case-sentitive)

•  Extensão: apenas uma convenção vs determinado pelo Sist. Arquivos

•  Muitas ferramentas (make, compiladores) se baseiam nessa convenção.

(9)

Estrutura de Arquivos

(10)

Acesso aos Arquivos

Acesso sequencial

–  lê todos os bytes/registros a partir do início

–  não pode saltar ou ler fora de seqüência

–  Necessário quando o meio de armazenamento era a fita

magnética

Acesso direto (aleatório)

–  bytes/registros lidos em qualquer ordem

–  Quando o arquivo tem registros de mesmo tamanho

Acesso Indexado (por chave)

–  Arquivo deve possuir uma área de indice onde estão os

ponteiros para os diversos registros

(11)
(12)

Operações com Arquivos

1.

Create

2.

Delete

3.

Open

4.

Close

5.

Read

6.

Write

7.

Append

8.

Seek

9.

Get attributes

10.

Set Attributes

11.

Rename

(13)
(14)

Diretórios

“games” attributes “inbox” attributes “news” attributes “work” attributes “games” “inbox” “news” “work” attributes attributes attributes attributes

Estrutura de dados com atributos

•  Ao abrir um arquivo, procura-se o nome no diretório, atributos e

endereço são copiados para uma Tabela de Arquivos Abertos (Open file table).

•  Em futuros acessos, não é necessário acessar novamente o

diretório.

(15)

Atributos de Arquivos

Independente do seu conteúdo cada arquivo (convencional e especial) contém atributos associados a ele, que são

(16)

Sistemas de Diretórios Hierárquicos

•  Em diretórios hierárquicos, não há limite para o nr. de níveis de aninhamento,

e arquivo é referenciado através de um caminho (path), e.g. /usr/ast/mailbox •  Cada processo, possui um diretório corrente (process work directory - pwd)

•  Arquivos podem ser referenciados usando caminhos absolutos (/usr/src/

servers), ou relativos ao diretório corrente (src/servers)

•  Define-se um nome especial para diretório corrente e diretório imediatamente

(17)

UNIX: Montando Sistemas de Arquivos

O sistema de arquivos raiz (FS root), / , é

montado pelo núcleo após o boot

Qualquer sistema de arquivos pode ser

montado em qualquer diretório do FS root,

exceto o próprio /.

Um

mount point

é um diretório onde o novo

SA é acoplado.

(18)

Mount - Exemplo

mount( /dev/fd0 , /usr , 0)

(19)

UNIX: Mount Table

Sempre que um SA é montado, cria-se nova

entrada na mount table, um arquivo /etc/mtab

(ou /etc/mnttab)

Essa tabela registra os SA montados, os

discos em que residem, os mount points e a

lista de opções passadas no comando mount

Cada entrada é um

struct mnttab!

(20)

Operações com Diretórios

1.

Create

2.

Delete

3.

Opendir

4.

Closedir

5.

Readdir

6.

Rename

7.

Link

8.

Unlink

•  Antes de ler ou alterar um diretório, ele precisa ser aberto. Ao final, deve ser fechado.

•  operacão link é a forma de criar atalhos (referências adicionais ) para arquivos.

•  chamda unlink remove um arquivo de um diretório.

•  Se o arquivo só tem referência de um único diretório, então um

unlink remove o Arquivo.

(21)

Camadas do sistema de arquivos

disco

Controle de E/S Acesso básico a blocos

Gerenciamento de espaço livre Sistema lógico de arquivos e diretórios

(22)

Bloco de disco: unidade de alocação de

espaço (em disco)

•  Um arquivo é composto de uma sequência de blocos de mesmo

tamanho (# bytes)

•  O disco é um vetor de blocos, cada um com um endereço único

(endereço lógico do bloco)

(23)

Questões de Implementação

Principais Questões:

•  Como são armazenados arquivos/informações de

diretório nos blocos do disco?

•  Como é feito o mapeamento de arquivos para blocos de

disco? Como saber em qual bloco de disco está determinado dado/registro do arquivo?

•  Como o espaço livre no disco é gerenciado?

(24)

Implementação de Arquivos

(de tamanho variável)

1.  Lista encadeada de blocos físicos em disco

Primeiros bytes de cada bloco contém um ponteiro (endereço de disco) para o próximo bloco da lista

(+) Arquivos de tamanho arbitrátrio podem ser alocados

(-) Adequado para acesso sequencial, mas pouco eficiente para acesso aleatório

Diretório Name1 name2

(25)
(26)

Implementação de Arquivos: FAT

2.  Lista encadeada usando uma tabela de alocação de

arquivos em memória RAM (a File Allocation Table – de MS-DOS)

Idéia principal: colocar os ponteiros em uma tabela de índices

(+) (a) O bloco físico só contém dados ; (b) acesso randômico não requer vários acessos ao disco

(-) tamanho da tabela depende do número total de blocos (pode ser um

problema manter toda a tabela em memória) Se estiver em disco requer vários acessos

Indice corresponde ao endereço do bloco no disco

Exemplo de Arquivo que usa blocos

(27)

Implementação de Arquivos: Alocação Indexada

index table

3.  Todos os endereços de blocos são mantidos em um

(28)

Implementação de Arquivos: Indexação

Multi-nível

•  Quando o número de blocos do arquivo ultrapassa o número

de endereços que cabem um index block

•  Entrada do diretório aponta para o bloco do índice de 1º. nivel •  O endereço físico do registro (ou byte) no bloco precisa ser

calculado block1 block2 block3  Bloco de Indice 1º. Nivel (indice externo) Blocos de indice de 2o. Nivel (Tabela de Indice) Blocos do Arquivo Entrada de diretório

(29)

Implementação de Arquivos: Indexação

Multi-nível

Principal desvantagem: o overhead para acesso a um registro é igualmente alto tanto para arquivos

pequenos, como para arquivos grandes.

Seria bom ter uma forma de alocação que agilizasse o acesso a arquivos pequenos e permitisse a alocação de blocos para arquivos muito grandes.

(30)

O i-node de UNIX

i-node = estrutura de dados com atributos do arquivo, 12 endereços diretos de blocos e 3 endereços de blocos de índice (single, double, triple indirect)

(31)
(32)

Implementação de Diretórios

Em UNIX (no FS ext2):

•  O i-node é o objeto que representa tanto um arquivo

como um (sub)diretório.

•  Cada entrada do diretório contém um nome (string ASCII

de tamanho variável), e um número (endereço) de i-node;

•  Este número é um índice para uma entrada do vetor de

i-nodes (na seção da partição correspondente),

•  Atributos são armazenados no i-node (juntamente com

(33)

Resolução de Nomes em UNIX

(34)

Posix

inode

inode do Posix contém seguintes atributos: •  File size

•  Device ID (que contém o arquivo)

•  User ID do dono

•  Group ID

•  Permissões

•  3 timestamps (inode change time, última modificação do arquivo,

último acesso do arquivo)

•  Contador de hard links

(35)

Resolução de Nomes com i-nodes

Abrir arquivo X de diretório Y:

1.  obter o i-node do blocoY que

contém informação de Y; 2.  acessar o blocoY (*)

3.  procurar lá pelo nome X, e

4.  obter o i-node de X (*)

(*) será cacheado

Seek(d)+Read no arquivo X:

Pegar o i-node do cache;

Calcular o bloco correspondente ao deslocamento (d)

Copiar o bloco para memória

(36)

Resolução de Nomes usando i-nodes

Dado um caminho (path name), precisa-se acessar o i-node para

esse nome

•  Como “.” e“..” também possuem entradas no diretório, a resolução

de nomes absolutos e relativos funciona exatamente da mesma forma. Para nomes relativos, simplesmente, inicia-se se a partir do diretório corrente

(37)

UNIX: área

user

do processo

Para cada processo, existe uma struct proc (mantida no

núcleo) e uma área user, mantida com a imagem do processo. Na área user estão todas as informacões relativas ao uso de arquivos pelo processo.

Exemplo:

•  u_cdir – o número do inode do diretório corrente do processo

•  u_ofile – array contendo os file descriptors, cada um apontando para uma struct file!

(38)

Estruturas de Dados Mantidos em

Memória

Objetivos:

Acelerar ao máximo o acesso a i-nodes e

blocos de arquivos em uso

Permitir o compartilhamento dessas

informacões sempre que for necessário

Garantir a não interferência de informações

por processo (por exemplo, a posição no

arquivo compartilhado de cada processo)

(39)

UNIX:

struct file

A file table é composta de entradas struct file. !

Cada entrada contém as informacões relativas ao arquivo aberto pelo processo.

Exemplo:

•  f_flag – modo de abertura (FREAD ou FWRITE)

•  f_count – contador sobre número de processos que abriram o arquivo

(40)

Fonte Steve Pate: UNIX Filesystems

(41)

UNIX: inode cache

inode são mantidos na memória (inode cache)

enquanto o arquivo estiver aberto por algum

processo;

Serão escritos de volta para disco quando:

–  tiver havido alguma modificacão (p.exemplo arquivo

foi aumentado em um bloco) ou

–  todos os processos executaram close()

(42)

UNIX: o Buffer Cache como Buffer Pool

•  Hash(block-number) aponta para ums sub-lista na lista

completa do buffer pool. Assim, consegue-se localizar mais rapidamente o buffer relativo a um bloco no disco. •  A free buffer list também é uma lista encadeada dos

(43)

UNIX: estruturas mantidas em memória

Objetivos: reduzir o tempo de acesso ao disco, e permitir compartilhamento de arquivos por processos

  Tabela de partições montadas

  Cache de diretórios: diretórios acessados recentemente

  Cache de inodes: dos arquivos e diretórios acessados

  Directory Cache: o conteúdo dos diretórios recentemente

acessados

  FileTable: para todos os arquivos abertos, cada entrada tem

(44)

Arquivos Compartilhados (1)

Fig. Sistema de arquivo contendo arquivo compartilhado (por symbolic link)

(45)

Links Simbólicos

O i-node também mantém a informação de quantos links simbólicos estão apontando para o arquivo ou diretório.

(46)

Gerenciamento de Espaço em Disco

•  Bloco grande è menor utilização do espaço em disco (maior

desperdício de espaço)

•  Bloco pequeno è maioria dos arquivos consistirá de muitos

blocos (aumenta tempo de acesso)

•  Disco é organizado por setor, trilha e cilindro

•  Cada setor contém certo numero de blocos

•  Tempo de acesso a um bloco é dominado pelo tempo de busca

e do atraso rotacional (≅ 101 ms). O tempo de transferência dos dados (disco <-> memória) é desprezível

•  Exemplos de tamanhos de bloco em diversos Sistemas:

–  UNIX : 1KB

–  MS-DOS: de 512 bytes a 32 KB (dependendo do tamanho da partição, mas

(47)

Gerenciamento do Espaço em Disco

•  A curva contínua (escala no lado esquerdo) mostra a taxa

(48)

Gerenciamento do Espaço Livre em Disco

Implementações mais comuns: Lista ligada (a) ou bit map (b)

Lista ligada: blocos livres são usados como blocos de índices com endereços de vários outros blocos livres (e.g. se tam-bloco=1KB e endereços de 32 bits, então 1 bloco pode conter 255 endereços + endereço do próximo bloco de índice)

Bit maps : devem estar em memória, mas podem também estar contidos em blocos bit-map (1 bloco pode manter 8 K de bits)

(49)

Integridade  do  Sistema  de  

Arquivos

Com   o   tempo,   sistema   de   arquivos   podem  

desenvolver  alguns  problemas  como:  

–  capacidade  de  disco  esgotada,  pode:   •  causar  problemas  

•  fazer  com  que  o  sistema  todo  falhe  

–    sistema   de   arquivo   corrompido,   causado   por   uma  

súbita  queda  de  energia  

(50)

Integridade  do  Sistema  de  Arquivo  

 -­‐  o  uDlitário  df

df  [opt]  directories

 

Descrição  

–  Mostra  a  informação  de  uDlização  do  disco  para  sistemas   de  arquivo  montados  e  diretórios.    

Opções  Frequentemente  Usadas  

–  -­‐h   mostra   o   resultado   em   formato   mais   legível   com  

sufixos   como   M   (megabyte)   e   G   (gigabyte).   (human-­‐ readble)  

–  -­‐i   mostra   informação   de   inode   ao   invés   de   uso   de   memoria

(51)

Exemplos

(52)

Integridade  do  Sistema  de  Arquivo  

fsck  [opDons]  [-­‐t  type]  [fs-­‐opDons]  filesystems  

Descrição  

–  Verifica   se   filesystems   contém   erros   e   opcionalmente   corrige  os  mesmos.  

Opções  usadas  

–  -­‐t  type  especifica  o  Dpo  de  sistema  de  arquivo.  

–  -­‐A   executa   todos   os   sistemas   de   arquivos   especificado  

em   /etc/fstab.   A   intenção   é   u>lizar   este   comando   em   tempo  de  boot,  antes  dos  filesystems  serem  montados.  

–  c  checa  por  blocos  ruins,  com  defeito.  

–  -­‐f   força   a   checagem,   mesmo   o   sistema   de   arquivo  

parecendo  limpo.  

–  -­‐p   automa>camente   repara   o   sistema   de   arquivo   sem   o   promp>ng.  

(53)

Confiabilidade do Sistema de Arquivos

Backups

•  Dados são um bem muito valioso na Era da Informação!

•  Meios de armazenamento sujeitos a defeitos de fabricação e a problemas de

desgaste

•  Controladora de disco consegue detectar um bloco defeituoso e usar espaço

sobressalente no setor

•  Backups são demorados e requerem muito espaço (em fita, ou outro meio)

•  Nem todo disco precisa/deve ser copiado. Exemplo:

–  Programas executáveis

–  Arquivos especiais (dispositivos de E/S)

–  Blocos defeituosos (marcados pela controladora)

•  Backups incrementais (economia de espaço vs maior tempo de recuperação)

(54)

Backup físico vs lógico

Duas estratégias para copiar o disco para fita: backup físico e backup lógico

•  Backup físico

–  Copia todos os blocos utilizados do disco

–  Simples e rápido, mas não permite cópia incremental e nem exclusão de alguns diretórios (p.ex. /dev)

–  Blocos defeituosos:

–  se a controladora de disco suprimir (do ger. de blocos ) os blocos defeituosos, backup funcionará bem,

–  senão programa de backup deverá ler lista/tabela de blocos defeituosos, para evitar tentar copiar um bloco defeituoso e travar

–  Não há necessidade de copiar blocos livres (precisa-se ter acesso a lista de blocos livres)

(55)

Backup físico vs lógico

•  Backup lógico

–  Percorre recursivamente a árvore do Sistema de arquivos, fazendo a cópia de tudo que mudou desde último backup

–  Primeiro, todas as informações necessárias para recriar a arvore de diretórios são gravadas na fita (i-nodes, diretórios e atributos)

–  No final, são gravados os blocos dos arquivos modificados (backup

incremental)

–  Inf. de diretórios (mesmo não modificados) que ficam no caminho entre a raiz e cada arquivo modificado.

–  è permitem recriar todos os arquivos modificados exatamente no

(56)

Confiabilidade do Sistema de Arquivos

Backups

Exemplo: Um sistema de arquivos a ser copiado

Legenda:

–  quadrados = diretórios; círculos = arquivos

(57)

Mapas de bits usados na cópia lógica (ou dump

lógico) para poder recuperar todo o sistema de arquivos (com atributos e permissões originais, etc.):

(a)  Copia tudo, só não copia arquivos não

modificados

(b)  Copia o conteúdo todo de qq diretório

sub-raiz em que alguma coisa foi modificada

(c)  Copia apenas os sub-diretórios em que

houve alguma modificação

(d)  Só copia os elementos (arquivos/diretórios)

que sofreram alguma modificação

(informação de atributos não é preservada)

Backups lógicos incrementais

(58)

Possíveis estados do sistema de arquivos

a)  consistente

b)  bloco ausente (desperdício de disco)

c)  bloco duplicado na lista de livres (solução: reconstruir lista de blocos livres)

d)  bloco de dados duplicados (solução: duplicar o bloco)

Verificação da consitência de blocos

fsck ou scandisk fazem também a verificação da

consitência dos blocos em disco (percorrendo todos os i-nodes)

(59)
(60)

Lidando com a latência de

acesso ao disco

•  Acesso a memória: 10 ns/Byte

•  Leitura ao disco: 10 MB/s => ≈ 400 ns/Byte + 10 ms para

buscar a trilha

•  Por isso, guarda-se em cache (em memória RAM), os

i-nodes e blocos recentemente (ou mais) acessados

•  Para garantir a consitência do SA em disco, precisa-se

gravar prioritariamente (blocos críticos), que são:

–  i-nodes modificados

–  Blocos com infomação de diretório modificada

–  Blocos de índice modificados

(61)

Cache de blocos e i-nodes

Cache de blocos

em Memória Partição de disco

Compromisso entre eficiência de acesso versus coerencia da infomação no disco

(62)

Cache de blocos

Como há milhares de blocos no cache, uma tabela hash é necessária para localizar rapidamente um bloco (para acesso ao seu conteúdo):

•  Aplica-se uma função de hash sobre o par (nome-partição,#bloco)

•  Tabela hash tem lista de todos blocos no cache com mesmo valor de hash.

•  Como acesso ao disco é mais demorado, pode-se manter a lista ordenada

por tempo de último acesso (LeastRU) ou acesso mais frequente (MostRU), facilitando assim uma politica de substrituição de blocos (escolha do bloco a ser escrito de volta para disco).

•  Mas, se os blocos críticos forem posicionados final da fila, deve demorar

muito para que sejam escritos em disco. Isso é um problema!

(63)

Cache de blocos

Ou seja, precisa-se tratar blocos críticos de forma diferenciada, levando a um algoritmo LRU diferenciado que leva em conta:

•  se bloco será utilizado em breve (e.g. improvável para i-nodes)

•  se o bloco é critico?

Abordagem:

•  Blocos são divididos em categorias: i-node, blocos de indice, blocos de

diretórios, blocos cheios com dados, e blocos incompletos com dados

•  Blocos que provavelmente não serão acessados em breve, ficam no início

(64)

Cache de blocos

Mas também blocos de dados não devem permanecer muito tempo no cache

•  Abordagem UNIX:

–  Chamada de sistema synch: todos os blocos modificados (no cache) são escritos em disco

–  Programa utilitário, update, a cada 30 segundos chama synch!

–  Desvantagem: há um período de tempo em que o sistema de arquivos está vulnerável a falhas do sistema (e discos não podem ser removidos antes de executar synch)

•  Abordagem Windows:

–  Bloco é gravado em disco assim que é modificado (cache de escrita direta: write-through)

–  Vantagem: Disco está sempre sincronizado

–  Desvantagem: Se o substistema de E/S não utilizasse buffers (p/

acumular todos os caracteres de uma linha antes da escrita), cada escrita de caracter causaria um acesso ao disco!

(65)

Cache de blocos – cópia antecipada

Outra técnica para melhorar o desempenho do acesso a disco é a

cópia antecipada de blocos para a cache:

•  Sempre que um bloco k de um arquivo é acessado, verifica-se se o k

+1 já está em cache, e se não está, copia-se esse também.

Só vale a pena para arquivos que estejam sendo acessados sequencialmente. Para acesso aleatório, a copia antecipada geralmente não compensa.

Sist. de Arquivo deve ficar monitorando o padrão de acesso aos arquivos e tentar identificar aqueles que sempre são acessados

(66)

101

Acesso ao arquivo: acesso ao i-node + cópia do bloco. Se i-node e bloco estiverem longe um do outro, isso

aumenta a latência de movimentação do braço de disco

Localização especial dos i-nodes.

•  Em vez de tê-los no início do disco, melhor no meio

do disco

•  Disco dividido em grupos de cilindros

–  cada qual com seus próprios blocos e i-nodes, e lista de

(67)

Controle de Acesso

  Há diferenças entre o controle de acesso a

diretórios e arquivos.

O controle da criação/eliminação de arquivos nos

diretórios, visualização do seu conteúdo e

eliminação do próprio diretório são operações que

também devem ser protegidas.

Existem diferentes mecanismos e níveis de

proteção e para cada tipo de sistema um modelo é

mais adequado do que o outro.

(68)

Tipos de Acesso

Leitura Qualquer tipo de operação em que o

arquivo possa ser visualizado, como a exibição de seu conteúdo, edição ou cópia de um novo arquivo

Gravação Alteração no conteúdo do arquivo,

como inclusão ou alteração de registros.

Execução Associado a arquivos executáveis ou

arquivos de comandos, indicando o direito de execução do arquivo.

Eliminação Permissão para se eliminar um

(69)

Senha de Acesso

•  Usuário precisa ter conhecimento da senha

•  Cada arquivo possui apenas uma senha, o acesso é

liberado ou não na sua totalidade.

•  Não é possível especificar quais tipos de operações

podem ou não ser concedidas

•  Outra desvantagem é a dificuldade de

compartilhamento já que todos os demais usuários deveriam ter conhecimento da senha.

(70)

Grupos de Usuários

•  Os usuários são organizados em grupo com objetivo

de compartilhar arquivos entre si. •  Implementa três tipos de proteção:

–  owner (dono),

–  group (grupo) a

–  all (todos)

•  e na criação do arquivo é especificado quem e o tipo

de acesso aos três níveis de proteção.

•  Em geral, somente o dono ou usuários privilegiados

(71)

Lista de Controle de Acesso

•  Access Control List – ACL consiste em uma lista

associada a cada arquivo onde são especificados quais os usuários e os tipos de acesso permitidos.

•  O tamanho desta estrutura pode ser bastante extenso se um

arquivo tiver seu acesso compartilhado por diversos usuários.

•  Existe um overhead adicional devido a pesquisa seqüencial

que o sistema deverá realizar na lista sempre que solicitado.

(72)

Lista de Controle de Acesso vs Grupos de

Usuário

Arq A Usuário: Laureano Acesso: leitura + escrita + execução Usuário: Maziero Acesso: eliminação Usuário: Pedro Acesso: leitura + escrita Usuário: Joaquim Acesso: leitura

Nível de proteção Tipo de Acesso Owner Leitura Escrita Execução Eliminação Group Leitura All -- Arq B

Referências

Documentos relacionados

O Fundo pretende atingir seu objetivo investindo no mínimo 95% de seu patrimônio em cotas de Fundos de investimento de Ações, que possuam como objetivo superar as variações do ISE

Entre em contato com o administrador da rede para obter o endereço IP e o nome do host de cada host no qual planeja instalar o software do agente de host para gerenciar subsistemas

(É atividade opcional para o estagiário, desde que haja concordância nesta decisão do seu supervisor direto). f) Pesquisa na área de psicologia – O estagiário poderá

Dados utilizados na elaboração da ficha catalográfica: autor, título, finalidade do trabalho (em letra tamanho 8 ou 10, abaixo do título e concentrada à

O segundo classificado no Concurso na listagem especial ocupará a 30ª (trigésima) vaga aberta e assim sucessivamente, obedecida a ordem de classificação na listagem especial

Como todos os medicamentos, este medicamento pode causar efeitos secundários, embora estes não se manifestem em todas as pessoas. Efeitos

O Revelar pode ajudar um processo de empoderamento da comunidade a tornar-se ainda mais eficaz, proporcionando ferramentas que ajudam a descobrir, explorar e tratar de

descarregamento em piso nivelado e com acompanhamento se não há material agregado no fundo da caçamba que favoreça o adernamento lateral; Nos acessos estreitos os equipamentos