Capítulo 2: Estruturas do
Sistema Operacional
Objetivos
Descrever os serviços providos pelos sistemas operacionais
para os usuários, processos e outros sistemas
Discutir as diversas formas de estruturação dos sistemas
operacionais
Serviços do Sistema Operacional
Sistemas operacionais proveem um ambiente para execução de
programas e serviços para programas e usuários
Dois conjuntos de serviços do sistema operacional
Funções que são úteis para o usuário
Serviços do Sistema Operacional
Funções que são úteis para o usuário:
Interface do usuário – Quase todos os sistemas operacionais
possuem uma interface com o usuário
Varia entre Command-Line (CLI), Graphics User Interface (GUI),
e Batch
Execução de programas – O sistema deve estar apto a carregar
um programa na memória e executá-lo, terminar a execução, seja normalmente ou de forma anormal (indicando o erro)
Operações de entrada e saída (E/S) - Um programa em execução pode requisitar operações de E/S, as quais podem envolver um
arquivo ou um dispositivo de entrada e saída
Manipulação do sistema de arquivos - O sistema de arquivos é de interesse particular. Os programas precisam ler e escrever em arquivos e diretórios, criar e deletá-los, buscá-los, listar as
Serviços do Sistema Operacional
Funções que são úteis para o usuário (cont.):
Comunicação – Processos podem trocar informações entre si em
um mesmo computador ou em sistemas de computação diferentes conectados por uma rede de computadores
As comunicações podem ser feitas através de memória
compartilhada ou da troca de mensagens – Neste último, pacotes de informação são transmitidos entre processos pelo sistema operacional
Detecção de erros – SO precisa monitorar constantemente
possíveis erros
Erros podem ocorrer no hardware da CPU, memória,
dispositivos de I/O e programas
Ação diferenciada para cada tipo de erro – garantia de
computação correta e consistente
Depuração (debugging) pode melhorar as possibilidades de uso
Serviços do Sistema Operacional
Outro conjunto de funções que garantem a eficiência da operação do sistema através do compartilhamento de recursos
Alocação de recursos – Quando existem múltiplos usuários ou jobs
ativos ao mesmo tempo, é necessário alocar recursos para cada um deles
Diferentes tipos de recursos – alguns recursos (como ciclos de
CPU, memória e sistema de arquivos) podem ter um código de alocação especial, outros recursos como dispositivos de E/S podem ter um código de alocação genérico de solicitação e liberação
Contabilização – Registrar quantos e quais recursos cada usuário utilizou
Proteção e segurança – Proprietários de informações armazenadas em um sistema de computação podem querer controlar o uso dessas informações
Proteção envolve a garantia de que qualquer acesso a recursos
do sistema seja controlado.
Segurança garante que usuários de fora do sistema precisem se
Interfaces com o Usuário do SO – CLI
Command Line Interface (CLI) ou interpretador de comandos permite a execução direta de comandos
Implementado no kernel ou como programa do sistema Diversas implementações – shells
Funcionamento – recebe comando do usuário e executa
» As vezes, comandos internos (built-in commands) ou
nomes de programas
» Neste último caso, a adição de novos recursos não
Bourne Shell Command Interpreter
Interfaces com o Usuário do SO – GUI
Graphical User Interface (GUI) – sistema de janelas e menus caracterizado por uma simulação da área de trabalho – desktop
Usualmente, mouse, teclado e monitor
Ícones representam arquivos, diretórios, programas, ações do sistema, etc.
Cliques no mouse em objetos da interface causam ações variadas
(obter informações, opções, funções de execução, abertura de diretório – conhecido como pasta)
Inventada pela Xerox PARC
Muitos sistemas incluem ambas as interfaces CLI e GUI Microsoft Windows é GUI com CLI “command” shell Apple Mac OS X
“Aqua” GUI interface
Kernel do UNIX com os respectivos shells
Chamadas de Sistema
Fornecem uma interface com os serviços disponibilizados pelo SO
Tipicamente escrita em linguagem de alto nível (C ou C++)
Em geral, acessado por programas por meio de Application Program Interface (API) de alto nível ao invés de uso direto
Três tipos mais comuns de APIs Win32 API – Windows
POSIX API – Sistemas baseados em POSIX
Todas as versões de UNIX, Linux e Mac OS X
Java API – Java virtual machine (JVM)
Por que usar APIs ao invés de usar as chamadas de sistema diretamente?
Exemplo de Chamada de Sistema
Sequência de chamadas de sistema para copiar o conteúdo de um
arquivo para outro
Exemplo de sequência de Chamadas de Sistema
Obtém nome do arquivo de entrada
Exibe prompt na tela Aceita entrada
Obtém nome do arquivo de saída
Exibe prompt na tela Aceita entrada
Abre arquivo de entrada
Se arquivo não existir, aborta
Cria arquivo de saída
Se arquivo existir, aborta
Loop
Lê arquivo de entrada Grava no arquivo de saída
Até a leitura falhar Fecha arquivo de saída
Exibe mensagem de conclusão na tela Termina normalmente
Exemplo de API padrão
Considere a função ReadFile() da API Win32 para ler um arquivo:
Descrição dos parâmetros passados para a função ReadFile() HANDLE file – arquivo a ser lido
LPVOID buffer – um buffer a partir do qual os dados serão lidos ou no qual os dados serão escritos
DWORD bytesToRead – número de bytes a serem lidos do buffer
LPDWORD bytesRead – número de bytes lidos durante a última leitura LPOVERLAPPED ovl – indica dados sobre o tipo de entrada e saída
Implementação da Chamada de Sistema
Tipicamente, um número é associado a cada chamada de sistema A interface de chamada ao sistema mantém uma tabela indexada
de acordo com esses números
A interface da chamada de sistema invoca a referida chamada no kernel do SO
A interface retorna o status da chamada de sistema e outros valores retornados
Quem faz a chamada de sistema não precisa saber nada sobre como ela é implementada
Só é necessário obedecer a API e entender os resultados gerados pelo sistema operacional
A maior parte dos detalhes da interface do SO são escondidos do programador pela API
Exemplo: Biblioteca Padrão de C
Programa em C chamando a função de biblioteca printf(), a
qual invoca a chamada de sistema write()
Passagem de Parâmetros para
Chamada de Sistema
Frequentemente, mais informações são solicitadas do que a
simples identificação da chamada do sistema
O número informações e o seus tipos variam de acordo com o SO e a chamada de sistema.
Três métodos gerais para a passagem de parâmetros para o
sistema operacional
Forma simples: passagem dos parâmetros em registradores
Problema: em alguns casos, existem mais parâmetros do que
registradores
Parâmetros armazenados em um bloco ou tabela na memória e o endereço correspondente do bloco é colocado em um registrador
Método usado por Linux e Solaris
Parâmetros são colocados em uma pilha (empilhados/pushed) pelo programa e retirados dessa pilha (desempilhados/popped) pelo sistema operacional
Métodos que armazenam parâmetros em tabela ou pilha não limitam o número de parâmetros
Tipos de Chamadas de Sistema
As chamadas de sistema podem ser agrupadas em seis categorias: Controle de processos
Manipulação/gerenciamento de arquivos Manipulação/gerenciamento de dispositivos Manutenção de informações
Tipos de Chamadas de Sistema
Controle de processo end, abort
load, execute
create process, terminate process
get process attributes, set process attributes wait for time
wait event, signal event allocate and free memory
Gerenciamento de arquivos create file, delete file open, close file
read, write, reposition get and set file attributes
Tipos de Chamadas de Sistema
Gerenciamento de dispositivos request device, release device read, write, reposition
get device attributes, set device attributes logically attach or detach devices
Manutenção de informações
get time or date, set time or date get system data, set system data
get and set process, file, or device attributes
Comunicação
create, delete communication connection send, receive messages
transfer status information
Execução do MS-DOS
Execução do FreeBSD
Programas do Sistema
Programas do sistema fornecem um ambiente conveniente para o desenvolvimento e a execução de programas
Podem ser divididos em:
Manipulação de arquivos Informação de status Modificação de arquivos
Suporte a linguagem de programação Carga e execução de programas
Comunicações Aplicações
A maior parte da visão do usuário sobre o sistema operacional é definida pelos programas do sistema e não pelas chamadas de sistema de fato
Programas do Sistema
Usuário
1 Usuário 2
Usuário
3 Usuário n
Aplicações e programas do sistema
Sistema Operacional Hardware Banco de Dados Navegador Editor Compilador de texto
Programas do Sistema
Fornecem um ambiente conveniente para o desenvolvimento e execução de programas
Alguns são interfaces simples para chamadas de sistema e outros são consideravelmente mais complexos
Gerenciamento de arquivos – Criar, apagar, copiar, renomear,
imprimir, despejar, listar e manipular arquivos e diretórios
Informação de status
Alguns perguntam ao sistema sobre informações como data hora, quantidade de memória disponível, espaço de disco e número de usuários
Outros fornecem informação detalhada de desempenho, de registro (logging) e de depuração
Normalmente, esses programas formatam e imprimem a saída para o terminal e outros dispositivos de saída
Programas do Sistema
Modificação de arquivos
Editores de texto
Comandos especiais para buscar conteúdo de arquivos ou realizar transformações no texto
Suporte de linguagem de programação
Compiladores, assemblers, debuggers e interpretadores. Geralmente são fornecidos para os usuários com o SO
Carregamento e execução de programas
Programas necessitam ser carregados na memória após a compilação ou montagem
Comunicações
Mecanismos para criar conexões virtuais entre processos, usuários e sistemas de computadores
Mecanismos para garantir que usuários troquem mensagens,
naveguem na web, enviem e-mails, façam login remoto, transfiram arquivos, etc.
Projeto e Implementação de Sistema Operacional
Projeto e Implementação de SO não é um problema com soluções definitivas, entretanto algumas abordagens mostraram sucesso
Estrutura interna de diferentes Sistemas Operacionais podem variar muito
Primeiro problema: definir objetivos e especificações
Afetado pela escolha do hardware, tipo de sistema (monousuário, multiusuário, distribuído, tempo real, monotarefa, etc)
Requisitos do SO divididos em dois grupos: objetivos do Usuário e do
Sistema
Objetivos do Usuário – o sistema operacional deve ser conveniente ao uso, fácil de aprender, confiável, seguro e rápido
Objetivos do Sistema – o sistema operacional deve ser fácil de projetar, implementar e manter; bem como ser flexível, confiável, livre de erros e eficiente
Projeto e Implementação de Sistema Operacional
Princípio importante para separar
Política: O que será feito? Mecanismo: Como será feito?
Mecanismos determinam como fazer algo, políticas decidem o que será feito
A separação de política e mecanismo é um princípio muito importante. É possível obter máxima flexibilidade se decisões políticas possam ser realizadas posteriormente
Estrutura Simples
MS-DOS – escrito para fornecer a maior funcionalidade no menor espaço
Não é dividido em módulos
Apesar do MS-DOS ter alguma estrutura, sua interface e seus níveis de funcionalidade não são bem separados
UNIX
UNIX – limitado pela funcionalidade do hardware, o sistema
operacional UNIX original tinha estrutura limitada. O SO UNIX consiste de duas partes separáveis
Programas de sistemas Kernel
Consiste de tudo abaixo da interface de chamadas de sistemas
e acima do hardware físico
Fornece o sistema de arquivos, escalonamento da CPU,
gerência de memória e outras funções do sistema operacional;
Sistemas Operacionais em Camadas
Sistema operacional dividido camadas
Menor camada (Camada 0) – hardware
Maior camada (Camada N) – Interface do usuário
As camadas devem ser uma parte bem definida do sistema com entradas, saídas e funções cuidadosamente definidas
Modularidade: o acesso a funções entre camadas deve ser feito sempre acessando as funções de camadas inferiores
Vantagens
Facilidade de construção e depuração
Dificuldades
Definição das camadas
Estrutura de Sistema Microkernel
Mover o máximo possível de funções do kernel para o espaço do usuário
Função do microkernel: fornecer um recurso de comunicação entre o programa cliente e os diversos serviços que estão no espaço do
usuário. Comunicação: transmissão de mensagens
Vantagens:
Mais simples para fazer extensões
Mais simples portar o sistema para novas arquiteturas Mais confiável (menos código rodando em modo kernel) Mais seguro (maioria dos serviços em modo usuário)
Desvantagem:
Sobrecarga de desempenho causada pela comunicação entre o modo usuário e o modo kernel
Sistemas Operacionais em Módulos
Maioria dos sistemas operacionais modernos é implementada em módulos do kernel
Utiliza abordagem orientada a objetos Cada componente do núcleo é separado
Comunicação entre módulos por interfaces bem conhecidas
Cada módulo é carregado de acordo com a necessidade no kernel
De forma geral, mais flexível que camadas, porque módulo pode chamar qualquer outro módulo
Exemplo:
Máquinas Virtuais
Virtualização
Consolidação
Multiplexação do uso do hardware
– Vários ambientes virtuais sendo executados sobre o mesmo hardware físico
Máquinas Virtuais
Máquina virtual
Simulação do hardware físico para o sistema operacional
Interface idêntica à interface provida pelo hardware
– Ilusão de que o sistema operacional possui processador, memória, e outros dispositivos próprios
Máquinas virtuais
Entidades
Hospedeiro (host) Convidado (guest)
Histórico
Criado para os mainframes da IBM em 1972
Hardware sub-utilizado
– União dos sistemas de diversas máquinas em uma única máquina física
Máquinas virtuais
Diversos níveis e tipos de virtualização
Máquinas virtuais
Conceitos
Fundamentalmente, diversos ambientes, com diferentes sistemas operacionais, podem compartilhar o mesmo hardware
Isolamento
Compartilhamento de arquivos pode ser permitido, desde que
seja controlado
Comunicação entre máquinas virtuais e outros sistemas externos através da rede
Máquinas Virtuais
Utilização da virtualização
Consolidação de servidores
Computação verde
Manutenção e gerenciamento de servidores Teste e desenvolvimento
Máquinas Virtuais
Paravirtualização
Sistemas convidados adaptados para a virtualização Assume uma interface de hardware modificada
Em vez de tentar fazer com que um SO convidado acredite que
ele tem um sistema para si próprio, a paravirtualização
apresenta o convidado a um sistema que é semelhante, mas não idêntico, ao sistema que ele prefere.
Objetivo
Aumentar o desempenho no tratamento das instruções
privilegiadas Vantagens
Uso mais eficiente dos recursos Camada de virtualização menor
Implementação da Virtualização
Desafios para implementação
Criar uma duplicata exata da máquina física
Duplicata funciona em modo usuário
– Simulação do modo kernel
– Interceptação das instruções privilegiadas feitas em modo kernel virtual
Temporização
Tempo na máquina virtual é mais lento do que na máquina real
Suporte via hardware
Instruções para virtualização