320 likes | 429 Views
UNIX. Unix. Shell. núcleo. hardware. Conteúdo. 1 - Histórico 2 - Visão do Usuário 3 - Serviços do sistema 4 - Arquitetura do sistema Entidades: Arquivos Processos. Visão do usuário. Sistema de arquivos Hierárquico Criação / destruição de arquivos
E N D
Unix Shell núcleo hardware
Conteúdo 1 - Histórico 2 - Visão do Usuário 3 - Serviços do sistema 4 - Arquitetura do sistema Entidades: Arquivos Processos
Visão do usuário • Sistema de arquivos • Hierárquico • Criação / destruição de arquivos • Crescimento dinâmico de arquivos • Proteção
Visão do usuário (cont.) • Ambiente de execução • Programa: arquivo executável • Processo: programa em execução • Processos solicitam os serviços do núcleo com o uso de chamadas de sistema. Ex.: fork, exec, etc.
Shell • Interface entre o usuário e o sistema • Interpretador de comandos • Executa: • comandos simples • comandos compostos • redirecionamento de I/O • pipe • if then else; for; while; • etc;
Serviços do Sistema • Gerenciar processos; • Escalonar; • Alocar / liberar memória; • Gerenciar memória secundária; • E / S.
Arquitetura do Sistema Programas Biblioteca Nível Usuário Nível Núcleo Interface Sub-sistema de gerência de processos Sub-sistema de arquivos Cache Comunicação Scheduling Drivers Carac. Blocos Ger. Memória Hardware
Representação Interna dos Arquivos • Fornecida por um i-node; • I-node: contém a descrição do arquivo; • Cada arquivo contém um i-node; • Mais de um nome pode estar associado a um i-node; • O sistema gerencia os arquivos com três tabelas: • Tabela de arquivos abertos: uma por processo • Tabela de arquivos: global • Tabela de i-nodes: global
Tabelas usadas para acesso aos arquivos Tab. Arq. Abertos Tab. Arquivos Tab. I-nodes
i-nodes • Proprietário; • Tipo de arquivo (ordinário, diretório, bloco especial, caracter especial, fifo(pipe)); • Permissões de acesso; • Datas de acesso (acesso, modificação, modificação de i-node); • Número de links; • Lista de blocos; • Tamanho do arquivo;
Proprietário Grupo Tipo Permissões Acessado Modificado Tamanho Blocos de dados José Aluno Ordinário RWX R_X R_X 08 July 2000 21:00 08 July 2000 21:00 7820 bytes 61,44,85,31,48,92,23,55,30,77 Indireto simples Indireto duplo Indireto triplo I-nodes (cont.)
i-node na Memória • Estado do i-node • Bloqueado / não bloqueado • Processos bloqueados • Número do periférico; • Número do i-node; • Contador de referências;
Estrutura do sistema de arquivos boot super bloco lista i-nodes blocos dados • Boot: contém o código de boot; • Super bloco: descreve o sistema de arquivos (lista de blocos livres, número de arquivos, tamanho das outras áreas); • Lista de i-nodes: configurável pelo administrador, referenciados por um índice.
Tamanho dos arquivos • 10 blocos diretos (1 K) = 10 K • 1 indireto c/ 256 diretos = 256 K • 1 duplo indireto c/ 256 diretos = 64 M • 1 triplo indireto c/ 256 dupla indireção = 16 G
Conversão de um caminho de acesso em um i-node (/usr/ep/artigo) / I-node 12 bloco 134 proprietário ep 25 ctc jn Direitos de acesso pass im usr 12 134
Conversão de um caminho de acesso em um i-node (cont.) Bloco 256 (artigo) I-node 13 (artigo) I-node 25 pum 5 prop prop mpi 11 direitos direitos artigo 13 tipo tipo aulas 27 bloco 0 256 prog 89 bloco 1
Chamadas de Sistema • open • close • read • write • create • mkdir • cd • pipe
open fd = open ( nome, modo ); transformar “nome” em i-node if (ñ existe ou acesso ñ permitido) return (erro); Alocar uma entrada da Tabela de Arquivos Atribuir à Tabela de Arquivos o i-node Inicializar contador de deslocamento Alocar uma entrada na Tabela de AA Atribuir à TAA o índice da Tabela de Arquivos Return( índice da TAA )
open (cont.) TAA T-Arquivos T-i-nodes 0 1 2 T-Arquivos: - apontador p/ tabela de i-nodes - deslocamento (byte corrente) - direito (leitura / escrita) - contador de referências
pipe • Alocar um i-node • Alocar um elemento da tabela de arquivos (em escrita) • Alocar um elemento da tabela de arquivos (em leitura) • Inicializar o contador de referência do i-node em 2 • Alocar um par de entradas em TAA (processo) • Atribuir os elementos da tabela de arquivos • Retornar (elementos da TAA)
Exemplo de Programa main() { int fds (2); char c ; pipe (fds); pid = fork () ; if pid != 0 { for ( ; ; ){ c = getchar () ; write (fds (1),&c, sizeof (char))); } else { read ( fds (0), &c, sizeof (char)); printf (“%c\n”, c) ; } }
Gerência de processos • fork • kill • exec • exit • wait
exec • acessar o arquivo • verificar se é executável • alocar memória (código, dados, pilha) • efetuar a carga • liberar a região de memória usada anteriormente
Chamada exec Biblioteca de funções execl(filename, name, arg1, arg2, arg3...) execve(filename, argv, envp)
fork • fork() • Cria uma cópia exata do processo original, incluindo registradores, descritores de arquivos, etc; • Cada processo tem seu próprio espaço de endereçamento; • Retorna um valor (zero para o filho, o pid do filho para o pai);
fork (cont.) • Procurar uma entrada livre na tabela de processos; • Alocar memória; • Copiar a imagem do pai para o filho; • Colocar no descritor o mapa de memória do filho; • Fabricar um pid para o filho; • Sinalizar ao pai final de operação;
Exemplo - fork main() { int pid; pid = fork(); if (pid != 0) printf(“Processo pai\n”); else printf(“Processo fillho\n”); }
Exemplo 2 - exec main() { execl(“/bin/ls”,”ls”,0); }
Exemplo 3 - fork main() { int pid; fork(); fork(); printf(“Mensagem\n”); }