Andrique Amorim www.andrix.com.br professor@andrix.com.br Arquitetura dos Sistemas Operacionais
Previously on OS...
Arquitetura: O QUE É? Estrutura básica sobre a qual é projetado o sistema operacional Como as ABSTRAÇÕES são realmente implementadas Como o sistema computacional deve ser solicitado e atender aos aplicativos, Como interagem as partes do SO entre si
E essa tal ABSTRAÇÃO?
Abstração
Elementos de um SO Kernel Shell System-calls
Elementos de um SO
Chamadas do Sistema System-calls São chamadas (solicitações) a procedimentos (ou serviços) do SO, feitas por um usuário (ou aplicativo).
Chamadas do Sistema System-calls Chamadas são usadas para gerenciar processos, arquivos, diretórios e outros.
Chamadas do Sistema APLICATIVOS NÚCLEO HARDWARE CHAMADAS
Chamadas do Sistema Em geral, quando se faz um programa, existem certas instruções que o programa em execução (processo), pode executar. EXEMPLO: operar com posições de memória pertencentes ao seu espaço de endereçamento.
Chamadas do Sistema: EXEMPLO Um processo pode perfeitamente somar o conteúdo de duas posições de memória e armazenar numa terceira sem precisar do Sistema Operacional. Entretanto, caso esse processo precisa armazenar isso em um arquivo, mandar via rede ou simplesmente mostrar na tela, ele vai precisar do Sistema operacional para isso.
Chamadas do Sistema
Chamadas do Sistema COMO FUNCIONA?
Chamadas do Sistema 1 - Quando a chamada de sistema é invocada, o programa que a invocou é interrompido, e a informação necessária para continuar a sua execução é salva.
Chamadas do Sistema 2 - O processador inicia a execução do código. 3 - Quando a chamada termina, o controle retorna para o programa e o estado previamente salvo é restaurado 4 - programa continua a sua execução.
Chamadas do Sistema
Chamadas do Sistema Em alguns casos, o retorno de fato para o programa não é imediato. Entrada/saída
Chamadas do Sistema Os sistemas operacionais atuais tem centenas de chamadas de sistema. LINUX tem quase 300 chamadas de sistema diferentes FREEBSD APROXIMADAMENTE 330 chamadas
Chamadas do Sistema Linux System Call Table Alguns exemplos de chamadas &eax Name Source 1 sys_exit kernel/exit.c 3 sys_read fs/read_write.c 6 sys_close fs/close.c 21 sys_mount fs/super.c 37 sys_kill kernel/signal.c
Chamadas do Sistema COMO USAR?
Chamadas do Sistema É preciso conhecer a API (conjunto de procedimentos) do sistema operacional que define quais chamadas estão disponíveis e quais são os parâmetros que devem ser passados.
Chamadas do Sistema: UNIX Para ler ou escrever um arquivo, deve-se primeiro usar uma chamada open. Ela especifica o nome do arquivo e o modo de abertura. Para criar um novo arquivo é usado O_CREAT.
Chamadas do Sistema: UNIX Para cada arquivo, o Unix registra o modo do arquivo, o tamanho e o momento da última modificação. A chamada stat mostra essas informações.
Chamadas do Sistema Existem certas chamadas de sistema que não podem ser colocadas diretamente à disposição das aplicações. A sua utilização indevida ocasionaria sérios problemas à integridade do sistema.
E as arquiteturas?
Arquiteturas: TIPOS
Monolítico É a arquitetura mais antiga e mais comum. Cada componente do SO é contido no núcleo (kernel) e pode comunicar-se com qualquer outro componente diretamente.
Monolítico Dois tipos de chamadas: 1 - o modo Kernel, onde é permitida a execução de todas as instruções básicas da máquina e; 2 - o modo usuário, para os programas de usuário, onde certas instruções, como aquelas que controlam entrada/saída não podem ser executadas.
Monolítico
Monolítico Todos os componentes do núcleo operam em modo núcleo e se inter-relacionam conforme suas necessidades, sem restrições de acesso entre si. Código no nível núcleo tem acesso pleno a todos os recursos e àreas de memória.
Monolítico 1.Essa intercomunicação direta permite rapidez na resposta de sistema operacional monolíticos. 2.A interação direta entre componentes também leva a sistemas mais compactos.
Monolítico 3.Qualquer componente do núcleo pode acessar os demais componentes sem qualquer impedimento. 1.Componentes todos juntos, é difícil identificar a origem de um determinado problema ou erro.
Monolítico 2.Caso um componente do núcleo perca o controle devido a algum erro, esse problema pode se alastrar rapidamente por todo o núcleo, levando o sistema ao colapso (travamento, reinicialização ou funcionamento errado).
Monolítico
Monolítico 3. Manutenção e evolução do kernel se tornam mais complexas, porque as dependências e pontos de interação entre os componentes podem não ser evidentes.
Monolítico 4. Pequenas alterações na estrutura de dados de um componente podem ter um impacto inesperado em outros componentes, caso estes acessem aquela estrutura diretamente.
Monolítico Ótimo Desempenho Não é tão Robusto (segurança) Dificuldade de desenvolvimento Dependências entre componentes
Monolítico A arquitetura monolítica foi a primeira forma de organizar os sistemas operacionais; sistemas UNIX antigos e o MS-DOS seguiam esse modelo.
Monolítico Atualmente, apenas sistemas operacionais embutidos usam essa arquitetura, devido as limitações do hardware sobre o qual executam.
Monolítico O núcleo do Linux nasceu monolítico, mas vem sendo paulatinamente estruturado e modularizado desde a versão 2.0 (embora boa parte de seu código ainda permaneça no nível de núcleo).
Monolítico Alguns exemplos de sistemas que utilizam este tipo de núcleo: * BSD * Linux * MS-DOS e derivados, incluindo Windows 95, Windows 98 e Windows ME * Solaris
Sistemas em camadas À medida que os sistemas operacionais tornaram-se mais complexos e maiores, projetos puramente monolíticos tornaram-se inviáveis.
Sistemas em camadas A arquitetura em camada, ou modular, tornou-se uma boa opção, agrupando camadas de componentes, ou seja, conjunto de procedimentos, que realizam tarefas similares.
Sistemas em camadas Arquitetura modular SOFTWARE HARDWARE
Sistemas em camadas 1) Cada camada comunica-se somente com as suas camadas imediatamente inferior e superior. 2) Uma camada inferior sempre presta um serviço à sua camada superior, sendo que a camada superior não sabe como o serviço é feito, apenas o solicita.
Sistemas em camadas A implementação de uma camada pode ser modificada sem exigir modificação em outra camada, pois possuem componentes autocontidos.
Sistemas em camadas Essa abordagem de estruturação de software fez muito sucesso no domínio das redes de computadores, através do modelo de referencia OSI.
Sistemas em camadas O empilhamento de várias camadas de software faz com que cada pedido de uma aplicação demore mais tempo para chegar até o dispositivo periférico ou recurso a ser acessado, prejudicando o desempenho do sistema.
Sistemas em camadas Não é tão óbvio dividir as funcionalidades de um núcleo em camadas horizontais de abstração crescente, pois essas funcionalidades são interdependentes, embora tratem muitas vezes de recursos distintos.
Sistemas em camadas A estruturação em camadas é apenas parcialmente adotada hoje em dia. Alguns sistemas implementam uma camada inferior de abstração do hardware para interagir com os dispositivos (a camada HAL Hardware Abstraction Layer, implementada no Windows NT e seus sucessores)
Sistemas em camadas Também organizam em camadas alguns subsistemas como a gerência de arquivos e o suporte de rede.
Sistemas em camadas Exemplos de sistemas fortemente estruturados em camadas: IBM OS/2 MULTICS
Micro-kernel Possui apenas um núcleo que provê recursos mínimos necessários ao ambiente.
Micro-kernel Núcleo somente com o código de baixo nível necessário para interagir como hardware. Todos os aspectos de alto nível, como: políticas de uso do processador e da memória, o sistema de arquivos o controle de acesso aos recursos são implementados fora do núcleo, em processos que se comunicam usando as primitivas do núcleo.
Micro-kernel Por fazer os núcleos de sistema ficarem menores, essa abordagem foi denominada micro-nucleo (ou μ-kernel).
Micro-kernel
Micro-kernel Exemplo: usando essa abordagem o código de acesso aos blocos de um HD seria mantido no núcleo, enquanto as abstrações de arquivo e diretório seriam criadas e mantidas por um código fora do núcleo, executando da mesma forma que uma aplicação do usuário.
Micro-kernel Essa arquitetura de kernel tem a vantagem de separar os serviços de forma que se acontecer algum problema em algum serviço, esse serviço não vai afetar o kernel como o todo.
Micro-kernel Algumas das funções do sistema operacional foram separadas em programas chamados Servidores.
Micro-kernel As interações entre componentes e aplicações são feitas através de trocas de mensagens.
Micro-kernel Exemplo: Uma aplicação deseja abrir um arquivo no disco rígido.
Micro-kernel 1) A app envia uma mensagem para o gerente de arquivos que, por sua vez, 2) se comunica com o gerente de dispositivos para obter os blocos de dados relativos ao arquivo desejado.
Micro-kernel 3) Os processos não podem se comunicar diretamente, devido as restrições impostas pelos mecanismos de proteção do hardware.
Micro-kernel Todas as mensagens são transmitidas através de serviços do micro-núcleo.
Micro-kernel Muito investigados durante os anos 80. Exemplos: Mach Chorus Hurd Minix QNX
Micro-kernel Customizar o SO iniciando somente os componentes necessários ou escolhendo os componentes mais adequados às aplicações que serão executadas.
Micro-kernel As trocas de mensagens entre componentes pode ser bastante elevadas, o que prejudica seu desempenho e diminui a aceitação desta abordagem.
Monolítico Vs Micro-kernel Sistema operacional baseado em kernel monolítico Sistema operacional baseado em Microkernel
Híbridos Tem a capacidade de agregar ou desagregar funcionalidades, sem perder performance ou estabilidade presentes na sua estrutura inicial.
Híbridos EXEMPLOS: MacOS X Windows 2000 Windows NT Windows 7 BeOS