• Nenhum resultado encontrado

Estudo de Caso 1: UNIX e LINUX

N/A
N/A
Protected

Academic year: 2021

Share "Estudo de Caso 1: UNIX e LINUX"

Copied!
84
0
0

Texto

(1)

Estudo de Caso 1: UNIX e LINUX

10.1 História do Unix

10.2 Visão geral do Unix 10.3 Processos no Unix

10.4 Gerenciamento de memória no Unix 10.5 Entrada/Saída no Unix

10.6 O sistema de arquivos do Unix 10.7 Segurança no Unix

Sistemas Operacionais II

Material adaptado de: TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 2ª edição. Disponível em: http://www.prenhall.com/tanenbaum_br

(2)

História do UNIX e do Linux

• UNICS

– MULTICS (pesquisadores Mit e Bell Labs)

– Bell Labs abandona o projeto

– Ken Thompson escreve UNICS (assembly), posteriormente grafado UNIX

(3)

História do UNIX e do Linux

• UNIX PDP-11

– Sucesso leva Unix para PDP-11

– Resolve-se utilizar linguagem de alto nível

– Thompson propõe e escreve B

– Falta de recursos de B leva Ritchie a produzir e implementar sua sucessora: C

– C possuía compilador excelente

– Linguagem certa no momento certo

– Tomou conta de universidades, onde sofreu grandes melhorias

(4)

História do UNIX e do Linux

• UNIX Portátil

– Portabilidade mais fácil devido ser escrito em C

– Interdata 8/32 foi o primeiro depois dos PDP´s

– Nasce a rede Unix

– Com a dissolução da AT&T (detentora dos

direitos do Unix), ela ativa uma subsidiária que lança a primeira versão comercial do Unix, o System III

– Um ano depois é lançado o System V devido a pouca aceitação do System III

(5)

História do UNIX e do Linux

• UNIX de Berkeley

– Universidade da Califórnia em Berkeley, de posse da Versão 6 do Unix e com vários

incentivos propõe inúmeras melhorias como uso de memória virtual e paginação, melhorias no tratamento de sinais, nomes de arquivos

superiores a 14 caracteres, etc.

– Conhecido com BSD

– Introduziu vários programas utilitários como vi, compiladores Pascal e Lisp

(6)

História do UNIX e do Linux

• UNIX Padrão

– System V e BSD totalmente incompatíveis

– Dificuldades no desenvolvimento de programas para Unix

– Várias tentativas de padronização frustradas

– IEEE com o projeto POSIX propõe 1003.1 (intersecção do System V e do BSD)

(7)

História do UNIX e do Linux

• MINIX

– Lançado em 1987, foi desenvolvido por Andrew S. Tanenbaum, visava ser um código simples, compreensível e de fins educacionais

– Baseado no projeto de micronúcleo

– Em 2004, a versão 3 priorizou ainda mais a

modularização, buscando se tornar um sistema extremamente confiável. Deixa de ser voltado para a área educacional e passa a ser um sistema altamente confiável.

(8)

História do UNIX e do Linux

• Linux

– Lançado em 1991 por Linus Torvalds, a versão 0.01 era um sistema de produção completo que abrangia áreas que o MINIX não atendia.

– Duas GUIs diferentes (KDE e Gnome)

– Se tornou um clone poderoso do Unix

– Teve como maior impulso uma disputa judicial entre a AT&T e a Universidade da Califórnia que retirou o FreeBSD (sistema maduro e estável,

com grande multidão de seguidores desde 1977) do mercado por algum tempo

(9)

Objetivos do Linux

• Princípio da surpresa mínima

– ls A*

– rm A*

• Fazer somente uma coisa, mas fazê-la bem

feita (desempenho e flexibilidade)

• Evitar redundância inúteis

(10)

Linux

(11)

Interfaces para o Linux

• A maioria das distribuições do linux para PC substitui a interface orientada para teclado, pela

interface orientada para mouse, sem modificar o SO. • As interfaces gráficas, são semelhantes as já

existentes, e englobam conceitos como arrastar e soltar, clique para executar programas, etc.

(12)

Interfaces para o Linux

• Estas interfaces gráficas são executadas pelo

Sistema X Window, comumente chamado X11 ou simplesmente X

• Além dos recursos oferecidos pela interface gráfica, usuários podem optar pela emulação de um terminal

(13)

Programas Utilitários do Linux

(14)

Núcleo do Linux

(15)

Processos no Linux

• As entidades ativas no Linux são os processos • Cada processo executa inicialmente um único

programa e uma única thread

• Threads podem ser criadas posteriormente • O Linux é um sistema multiprogramado

(16)

Processos no Linux

• Fork cria novos processos no linux, retornando 0 para filho e PID do filho para o processo pai.

• Processos comunicam através de canais

chamados pipes ou através de sinais

• Processos só podem emitir sinais para seu grupo de processos, ou seja, seus parentescos.

(17)

Chamadas ao Sistema para

Gerenciamento de Processos

• O processo progenitor (pai) cria processos

progénitos (filhos), os quais, por sua vez, criam outros processos, formando uma árvore de

processos.

• O filho criado pela chamada ao sistema fork() duplica o espaço de memória do pai.

• Pai e filho(s) executam concorrentemente a partir da instrução a seguir o fork()

• A função fork() devolve valores diferentes para o processo pai e processo filho permitindo

assim o programa pode tomar varias linhas de ação através de uma instrução de controle (if)

(18)

Chamadas ao Sistema para

Gerenciamento de Processos

(19)

Chamadas ao Sistema para

Gerenciamento de Processos

(20)

Processos no UNIX

(21)

Sinais POSIX

(22)

Chamadas ao Sistema para

Gerenciamento de Processos

s é um código de retorno pid é um ID de processo

(23)

Shell do POSIX

(24)

Implementação de processos no Linux

Informações da tabela de processos

• Parâmetros de escalonamento

– Prioridade, qtde de tempo de CPU

• Imagem da memória

– Ponteiros para suas tabelas de páginas

• Sinais

– Sinais que estão sendo ignorados, capturados, etc.

(25)

Implementação de processos no Linux

Informações da tabela de processos

• Registradores de máquina

– Local que salva as informações quando ocorre um desvio de execução para o núcleo

• Estado da chamada de sistema

– Informações sobre a chamada de sistema (parâmetros e resultados)

• Tabela de descritor de arquivo

– Informações que indicam onde estão os descritores de arquivos (i-node)

(26)

Implementação de processos no Linux

Informações da tabela de processos

• Contabilidade

– Tempo gasto de CPU em modo usuário e durante chamadas de sistemas

• Pilha do Núcleo

– Pilha fixa a ser usada pela parte do núcleo do processo

• Miscelânia

– Estado do processo atual (está esperando evento?, PID, PID do pai, etc)

(27)

Implementação de processos no Linux

Copy on write (copiar-se-escrita)

• Técnica utilizada nos sistemas Linux para reduzir custos com cópias de memória do processo pai para processo filho

• Consiste em inicialmente apontar as tabelas de página do filho para as tabelas do pai, e só alocar novos espaços de memória se alguma escrita for solicitada

(28)

O Comando ls

(29)

Flags para o clone do Linux

Bits do mapa de bits sharing_flags

(30)

Escalonamento no Linux

O Linux distingue 3 classes de threads para questões de escalonamento:

• FIFO em tempo real

– Não preemptivel exceto por outra thread de FIFO de tempo real

• Chaveamento circular em tempo real

– Semelhantes aos anteriores, porém preemptíveis e associados ao

quantum de tempo • Tempo compartilhado

– Classe de prioridade mais baixa

A palavra tempo real vêm do padrão P1003.4 (extensões de „tempo real‟ para UNIX)

(31)

Escalonamento no Linux

Possui uma fila de execução (runqueue) que mantém dois vetores:

• Ativo

• Threads na fila de execução

• Expirado

• Threads que já foram executadas e tiveram seu quantum de tempo expirado antes de concluírem suas tarefas

(32)

Escalonamento no Linux

Quando o vetor de ativos está vazio, é feito uma varredura no vetor de expirados para que as threads passem a fazer parte do vetor de ativos e vice-versa

• Objetivo de evitar a inanição em threads de baixa prioridade

• Exceto quando threads FIFO de tempo real tomem todo o tempo da CPU

(33)

Inicializando o Linux

Passos para inicialização

1. BIOS executa POST (Power-On-Self-Test) e detecta e inicializa dispositivos

2. Lê e executa MBR

3. Executa o programa boot

4. Lê o diretório raiz do dispositivo de boot

5. Lê o núcleo no SO e transfere o controle para ele.

6. Cálculo de RAM, desabilitação de interrupção e habilitação de MMU, etc.

(34)

Inicializando o Linux

Passos para inicialização

7. Chama a rotina main em C para iniciar a parte principal do SO

8. Inicializações lógicas

9. Processo de detecção e auto configuração de drivers e dispositivos

10.Alocar processo 0, ajustá-lo e executá-lo

(programação do relógio, montagem do

sistema de arquivos raiz, criação do init e do

(35)

Inicializando o Linux

Passos para inicialização

11.Verifica se o sistema é mono ou multi-usuário 12.Login

13.Senha

14.Se ok, carrega shell do usuário, senão senha novamente

(36)

Inicializando o Linux

A seqüência de processos usada para iniciar alguns sistemas Unix

(37)

Gerenciamento de Memória

O espaço de endereçamento de um processo consiste de 3 segmentos:

• Código

– Código executável do programa

– Imutável

• Dado

– Variáveis do programa

– 2 partes: dados inicializados e não incializados (BSS)

– Página zero estática

• Pilha

– Variáveis de ambiente

(38)

Gerenciamento de Memória

a) Espaço de endereçamento virtual do processo A b) Memória física

(39)

Gerenciamento de Memória

Se mesmo programa executando duas vezes:

– Segmentos de códigos compartilhados

– Dados e pilhas nunca são compartilhados, exceto quando um fork é executado

Arquivos mapeados na memória

– Mapeamento de arquivos em parte do espaço de endereçamento do processo

– Leitura de vetor de bytes na memória ao invés de chamadas E/S

– Dois ou mais processos podem mapear o mesmo arquivo

(40)

Arquivos Mapeados em Memória

(41)

Chamadas ao Sistema para

Gerenciamento de Memória

• s é um código de retorno (-1 se erro) • a e addr são endereços de memória • len é um comprimento

• prot controla proteção

• flags arquivo privado/compartilhado, addr obrigatório/sugestão

• fd é um descritor de arquivo

(42)

Gerenciamento de Memória Física

no Linux

3 tipos de zonas de memória: • ZONE_DMA

– Zonas para operações de DMA

• ZONE_NORMAL

– Páginas de mapeamento normal

• ZONE_HIGHMEN

– Endereços de memória alto

– Não são permanentemente mapeados

(43)

Gerenciamento de Memória Física

no Linux

Na versão Alpha o Linux utilizava tabelas de páginas de três níveis

(44)

Gerenciamento de Memória Física

no Linux

A partir da versão 2.6.11 o Linux passou a utilizar o esquema de 4 níveis para se tornar

(45)

Linux suporta diversos mecanismos de alocação: • Algoritmo do companheiro

– Vetor contém as cabeças de listas de blocos com tamanhos de 0, 2, 4... Unidades (múltiplos de 2)

– Fácil localização de um bloco

– Muita fragmentação

• Alocador de fatias

– Obtém blocos com algoritmo do companheiro

– Divide-os em fatias (unidades menores)

– Gerencia as fatias separadamente

– Fatias podem estar cheias, parcialmente cheias ou vazias.

Mecanismos de Alocação de

Memória

(46)

Operação do algoritmo companheiro (buddy)

Mecanismos de Alocação de

Memória

(47)

• Unix confiava em um processo trocador que movimentava processos inteiros entre memória e disco

• O Linux passou a trabalhar com páginas

• Daemon de paginação (processo 2) verifica e faz alocação e liberação de memória física de acordo com a demanda

(48)

• Segmentos de textos e arquivos mapeados são paginados para seus arquivos no disco

• O restante vai para uma área de troca (arquivos de paginação de tamanho fixo)

• Páginas são alocadas no dispositivo ou partição de paginação somente quando são necessárias

(49)

• O Linux tenta manter algumas páginas livres de forma que elas possam estar disponíveis quando necessárias

• Esse grupo é constantemente renovado

• Algoritmo de Recuperação de Molduras de Páginas (PFRA) é responsável por esta tarefa

Algoritmo de Recuperação de

Molduras de Páginas

(50)

Linux distingue 4 tipos de páginas: • Não recuperáveis

– Não podem ser excluídas da memória

• Trocável

– Devem ser escritas de volta, antes de serem solicitadas

• Sincronizável

– Devem ser escritas no disco se estiverem sujas

• Descartável

– Podem ser imediatamente solicitadas

Algoritmo de Recuperação de

Molduras de Páginas

(51)

• Cada vez que o PFRA é executado ele tenta recuperar as páginas mais fáceis, para em seguida recuperar as mais difíceis.

• Se uma página for inválida, estiver bloqueada, sendo usada para DMA, etc. ela é ignorada

Algoritmo de Recuperação de

Molduras de Páginas

(52)

• O linux integra dispositivos de E/S no sistema de arquivos, chamando os de arquivos especiais

• Estes arquivos podem ser acessados da mesma forma que arquivos comuns

• Arquivos especiais são divididos em duas categorias: bloco e caracteres

(53)

• Arquivos especiais de bloco consistem em uma sequência de blocos enumerados, onde cada bloco pode ser acessado individualmente.

• Arquivos especiais de caractere são empregados em dispositivos em que a E/S ocorre em forma de fluxo de caracteres.

• Associado a cada arquivo especial existe um driver que por sua vez possui um número de dispositivo principal (talvez um secundário também, se dispositivo >= 2) que identifica o dispositivo

(54)

• O conceito de transmissão em rede do linux foi copiado quase que literalmente do Unix

• Trabalha com o conceito de soquete

• Cada soquete dá suporte a um tipo específico de transmissão em rede:

– Fluxo confiável de bytes orientado a conexão (protocolo TCP – padrão)

– Fluxo confiável de pacotes orientado a conexão

– Transmissão não confiável de pacotes (protocolo UDP – padrão)

(55)

Transmissão em Rede

(56)

Chamadas de Sistema para E/S no Linux

As principais chamadas do POSIX para o gerenciamento de terminal:

• As 4 primeiras ajustam a velocidade do terminal. Ex: ADSL

• As 2 últimas são usadas para configuração, interrupção de processos, tratar o fluxo de controle, etc.

(57)

Implementação de E/S no Linux

Algumas operações de arquivos para dispositivos de caracteres típicos

(58)

Implementação de E/S no Linux

O Sistema de E/S é dividido em 2 partes:

• Manipulador de arquivos especiais de bloco

– Minimizar o nº de transferências: cache

– Reduzir a latência de movimentos repetidos da cabeça do disco: escalonador de E/S

• Escalonador do elevador de Linus (causa inanição)

• Versão revisada do escalonador inclui duas listas adicionais que mantém as operações de r/w ordernadas pelo prazo

• Manipulador de arquivos especiais de caracteres

(59)

Módulos no Linux

• Durante décadas, os drivers de dispositivos UNIX eram estaticamente ligados ao núcleo

– Cada centro computacional construía um núcleo

– Se um novo dispositivo fosse adquirido ele religava o núcleo

– Funcionou bem nas estações de trabalho

• Com a chegada do Linux para PC a quantidade de dispositivos de E/S é muito grande e tudo mudou

– Usuários embora tenham acesso ao código fonte, sente

dificuldades para incluir e atualizar drivers e religar o núcleo

– Surgem os módulos carregáveis (blocos de códigos que podem

(60)

Módulos no Linux

• Tarefas realizadas durante o carregamento de um módulo:

1. Realocação dinâmica durante o carregamento

2. Verificar se recursos estão disponíveis

3. Vetores de interrupção necessários devem ser ajustados

4. Tabela de drivers deve ser ajustada para tratar deste novo tipo de dispositivo

5. Driver executado para inicializar as características específicas do dispositivo que forem necessárias

• Quando as 5 etapas forem concluídas o driver estará totalmente instalado.

(61)

O Sistema de Arquivos do Linux

• Origem com o MINIX

– Busca por melhorias

• Ext

– 255 caracteres e 2 GB

• Ext2

– Melhorias na capacidade e nos nomes dos arquivos

– Principal sistema de arquivos por vários anos

• Suporte a vários sistemas utilizando VFS (Virtual File System

(62)

O Sistema de Arquivos do Linux

Características

• 255 caracteres

• Não faz distinção entre arquivos ASCII e binários

• O proprietário conhece o arquivo, o sistema não se preocupa com isso

• Qualquer caractere é aceito, exceto NUL

(63)

O Sistema de Arquivos do Linux

Características

• Diretórios podem ser usados por conveniência • Utiliza “/” (barra) para separar diretórios

• Permite caminhos relativos e absolutos • Permite a criação de links

• Permite arquivos especiais para mapear dispositivos de bloco e caractere

(64)

O Sistema de Arquivos do Linux

Diretórios

Alguns diretórios importantes encontrados na maioria dos sistemas Linux

(65)

(a) Antes da ligação (b) Depois da ligação

O Sistema de Arquivos do Linux

Links

(66)

(a) Sistemas de arquivos separados. Ex: Windows 98 (b) Após a montagem. Ex: Linux

O Sistema de Arquivos do Unix

Mapeamento de Arquivos Especiais

(67)

Arquivos com Impedimento

(a) Arquivo com um impedimento

(b) Adição de um segundo impedimento

(c) Um terceiro impedimento

• Permite travamento de arquivos refinado • Dois tipos de travamento

Compartilhado

(68)

Chamadas ao Sistema para

Gerenciamento de Arquivos

• s é um código de retorno

• fd é um descritor de arquivo

(69)

A Chamada ao Sistema stat

(70)

Chamadas ao Sistema para

Gerenciamento de Diretório

• s é um código de retorno • dir identifica um diretório

(71)

Sistema de Arquivos do Linux

VFS (Virtual File System)

• Superbloco

– Sistema de arquivos específicos

– read_inode, sync_fs

• Dentry

– Representa uma entrada de diretório

– create, link

• I-node

– Descreve um arquivo

– d_compare, d_delete

• Arquivo

– Representação na memória de um arquivo aberto

(72)

Sistema de Arquivos do Linux

ext2 (2º sistema de arquivos estendido)

• Bloco 0

– Não usado

– Contém código para inicialização do sistema

• Depois dele, a partição é dividida em grupos de blocos, onde cada um contém:

– Superbloco

• Informações sobre a organização do sistema de arquivos

– Descritor de grupo

• Informações sobre a localização do mapa de bits, o nº de blocos livres

(73)

Esquema do sistema de arquivos Ext2 do Linux

Sistema de Arquivos do Linux

ext2 (2º sistema de arquivos estendido)

(74)

Estrutura do i-node no Linux

Sistema de Arquivos do Linux

ext2 (2º sistema de arquivos estendido)

(75)

A relação entre a tabela de descritores de arquivos, a tabela de descrição de arquivos abertos e a tabela de i-nodes

Sistema de Arquivos do Linux

ext2 (2º sistema de arquivos estendido)

(76)

• Altamente compatível com o ext2

• Trabalha com uma espécie de diário onde todas as operações realizadas são descritas em sequência, até que tenham sido concluídas

• Utiliza um dispositivo de blocos para diário (JBD) para controlar as operações de r/w no diário. Este por sua vez suporta 3 operações:

– Registro de diário

– Gerenciador de operações atômicas

– Transação

Sistema de Arquivos do Linux

ext3 (sistema de arquivos com diário)

(77)

• Consiste basicamente em criar diretórios dentro de /proc para cada processo em execução

• O nome do diretório é o número PID do processo em decimal

• Dentro deste diretório ficam os arquivos quem contém informações acerca deste processo

Sistema de Arquivos do Linux

/proc (processo)

(78)

1. Quais as vantagens de se utilizar módulos no linux?

2. Cite pelo menos 4 características do sistema de arquivos do linux.

3. Quais são os tipos de travamento permitidos pelo Linux. Comente sobre eles.

4. Comente sobre o funcionamento do sistema de arquivos ext3.

(79)

NFS - Sistema de Arquivos

em Rede

a) Exemplos de sistemas de arquivos montados remotamente

(80)

NFS - Sistema de Arquivos

em Rede

• Utiliza 2 protocoloas cliente-servidor

• O primeiro trata da montagem de diretórios

– Retorna um controle de arquivo se caminho for válido

– Esse controle identifica de modo único o sistema de arquivo, o disco, o i-node e

as informações de segurança

– Permite montagem estática ou a automontagem

• O segundo é para acesso a arquivos e diretórios

– Suporta as chamadas do sistema Linux, exceto as chamadas open e close

– Utiliza lookup para substituir a chamada open

– Tem a vantagem de não copiar qualquer informação para as tabelas do sistema.

– A chamada read tem os parâmetros: controlador do arquivo, deslocamento no

arquivo e nº de bytes a ser lido

Um servidor com essas caracterísiticas é conhecido como sem estado (stateless)

– Servidores sem estado, não podem utilizar os travamentos, por isso utilizam a

(81)

A estrutura em camadas do NFS

NFS - Sistema de Arquivos

em Rede

(82)

Segurança no Linux

Alguns exemplos de modos de proteção de arquivos

OBS:

x em arquivo = execução x em diretório = busca

(83)

Chamadas ao Sistema para

Segurança no Unix

• s é um código de retorno

• uid e gid são o identificador de usuário UID e o identificador de grupo -GID, respectivamente

(84)

FIM

Na próxima aula, entrega dos trabalhos

e início das apresentações sobre o

Referências

Documentos relacionados

Para os casos de SNP do adulto associada à LGM que não respondem à dose alta de corticosteróide acima de 6-8 semanas, intolerância à ciclofosfamida ou contra- indicação ou

Para o Agente de Log do PowerExchange para Linux, UNIX e Windows registrar dados a partir de uma origem remota do Linux, UNIX, Windows, i5/OS ou z/OS, você deve personalizar o

A sincronização entre os processos pai e filho é feita com a primitiva wait(), que bloqueia o processo que a executa até que um processo filho termine... As primitivas FORK

quando o pai termina antes do filho, o zombie é adotado pelo processo init..

As decisões de voto serão discutidas e aprovadas em comitê especialmente formado para esse fim (“Comitê de Proxy Voting”), serão registradas e formalizadas em

Produção Industrial - Controle Estatístico de Processos; Legislação Aplicada; Gestão da Produção; Gestão de Processos; Gestão da Qualidade e Metrologia; Normatização e Gestão

Follow-up of infants with risk indicators for hearing loss (RIHL) referred to a Neonatal Hearing Screening Reference Service (NHSRS) of a University Hospital of Belo Horizonte

O resultado do presente estudo permite concluir que não há diferença estatisticamente significativa nas latências absolutas das ondas I, III e V, nem nas LIPs I-III, III-V e I-V do