bc1518-so-estruturas de SO_v1

Propaganda
BC1518 - Sistemas Operacionais
Estrutura de S.O.
Aula 02
2° Quadrimestre de 2010
Prof. Marcelo Z. do Nascimento
Email: [email protected]
Roteiro
• Serviço do sistema operacional
• Interface
• Chamadas de sistemas (System Call)
• Programas do sistema
• Projeto e Implementação
• Estrutura do SO
• Máquinas Virtuais
• Leitura Sugerida
Serviço do SO
• Objetivo: Um conjunto de serviços para fornecer
funções úteis aos usuários.
• Interface de usuário:
• Linha de comando => utililiza comandos em modo texto;
• Batch => comandos e diretivas para controlar esses comandos
são introduzidos em arquivos para execução;
• Interface gráfica => (graphic user interface – GUI) sistema de
janela com apontamento para direcionar E/S.
• Exemplo: Linux, Windows, etc.
Serviço do SO
• Execução de programa:
• Capaz de carregar um programa para a memória e executar
esse programa;
• Encerrar sua execução.
• Operações de E/S
• Funções especiais desejadas a um determinado dispositivo não
podem ser controladas pelo usuário;
• S.O. => precisa prover meios de realizar operações de E/S.
Serviço do SO
• Manipulação de arquivos:
• Programas precisam ler e gravar arquivos e diretórios;
• Programas incluem gerência de permissões para permitir ou
negar o acesso aos arquivos;
• Comunicações:
• Processos precisam trocar informações com outros processos;
• Usa memória compartilhada ou troca de mensagens;
Serviço do SO
• Detecção de erro:
• O SO precisa estar ciente dos possíveis erros;
• Podem ocorrer nos recursos de hardware ou programa do
usuário;
• SO precisa tratar de forma apropriada para garantir
eficiência máxima nas requisições (interrupções).
Serviço do SO
• Para garantir a operação eficiente do próprio sistema.
• Alocação de recurso:
• O SO controla tipos diferentes de recursos e alguns podem
ter código de alocação especial (ciclo da CPU, memória) e
outros podem ter código de requisição e liberação (E/S);
• Exemplo: a CPU -> rotina de escalonamento que considerará a
velocidade da CPU na manipulação dos processos.
Serviço do SO
• Contabilidade:
• O tempo de uso de um recurso e quais recursos foram
utilizados pelos usuários => registros (log de sistema).
• Proteção e segurança:
• Vários processos sendo executados ao mesmo tempo não
podem interferir uns com os outros, ou com o próprio SO.
• Garantir controle de acesso aos recursos:
• Ex. Autenticação de usuário (login e password);
Interface
• Interpretador de comando: recebe e executa o
próximo comando especificado pelo usuário;
• SO => pode incluir o interpretador no kernel ou tratar
como um programa especial que é executado quando o
usuário entra no sistema;
• Exemplo: Shells =>Konsole;
• Implementação: O próprio interpretador contém o
código para executar o comando.
• Exemplo: Tarefa ->Excluir um arquivo (salta para uma seção
de seu código que define os parâmetros e faz uma chamada
(system call));
Interface
• Interpretador => Implementação:
• Os comandos são executados por meio de programas do
sistema;
• O Interpretador não entende o comando => identifica um
arquivo e carrega para memória e executa. Código do
arquivo “função” que define as ações solicitadas.
• Exemplo: Unix => rm aula1.txt (procura o arquivo rm e
carrega para memória e executa com os parâmetros de
aula1.txt). O interpretador não precisa ser modificado para
novos comandos.
• Exemplo: shells => bash e csh.
Interface
• Interface gráfica (GUI): para ativar um programa é
necessário apenas clicar em um botão ou ícone com o
mouse;
• Surgiu em 1970 na instalação de PARC da Xerox;
• A grande maioria dos sistema inclui as interfaces:
interpretador de comandos e GUI;
• Exemplos:
• MAC OS X tem GUI “Aqua” com kernel UNIX e usa
interpretador shell;
• Solaris tem interpretador com interfaces GUI (KDE).
Chamadas de Sistema
• Provêem uma interface com os serviços disponíveis em
um SO;
• Estão disponíveis como rotinas em C ou C++;
• São utilizados pelos desenvolvedores de aplicação por
meio de uma Application Program Interface (API), que
permitem o uso de uma chamada ao sistema;
• Exemplo:
• Win32 API para Windows;
• POSIX API para sistemas baseados em POSIX (Portable
Operating System Interface ) incluem as versões do UNIX,
Linux e Mac OS X;
• Java API para Java virtual machine (JVM).
Chamadas de Sistema
Exemplo da API Java Padrão
Método read( )
• byte[] b – buffer onde os dados são lidos
• int off – offset inicial em b onde os dados são escritos
• int len – o número máximo de bytes
Chamadas de Sistema
Porque usar uma API para fazer chamada em vez de
um system call?
• Portabilidade do programa => qualquer sistema que admite a
mesma API permite que o programa seja compilado e executado;
• System Call mais difícil de se trabalhar do que API
• Exemplo: API POSIX e Win32;
Chamadas de Sistema
Implementação -> System Call
• Um número é associado a cada system call;
• Uma interface mantém uma tabela indexada de acordo
com cada número;
– A interface de system call solicita uma chamada no kernel do
SO e retorna o estado da chamada e o valor de retorno;
– A solicitação não precisa saber como o system call do SO é
implementado;
• Obedece à API e entende o que o SO fará como
resultado
• Os detalhes da interface do SO é escondido do
programador pela API:
– Controlada pela biblioteca de suporte em tempo de execução
Chamadas de Sistema
Implementação -> System Call => Open
Chamadas de Sistema
• Exemplo: um programa em C invocando uma chamada a
biblioteca printf, a qual solicita a system call write( )
do SO.
Chamadas de Sistema
• Exemplo:
• Um programa em
C => read ( ) do
SO.
http://www.linux.it/~rubini/docs/ksys/ksys.html
Chamadas de Sistema
Passagem de parâmetros:
•Outras informações devem ser passadas:
– Não apenas a identificação que pode variar de acordo com cada
SO ou chamada;
• Há 3 formas de passar os parâmetros para o SO:
– Simples: por meio de registradores;
– Pode ter mais parâmetros que registradores:
• Bloco ou tabela na memória e o endereço do bloco é passado
como parâmetro em um registrado;
• Ex. Aproximação adotada no Linux e Solaris.
Chamadas de Sistema
– Simples: por meio de registradores
Chamadas de Sistema
Passagem de parâmetros:
– Pilha: programas colocados na pilha e retirados pelo SO. Não
limita o número ou extensão dos parâmetros.
– Java: método java invoca um código em C ou C++ que seja nativo
à arquitetura em que o programa está sendo executado;
• Feito por meio de Java Native Interface (JNI).
Chamadas de Sistema
Linux:
• Acesse o seguinte arquivo:
$cat /usr/include/bits/syscall.h
– Para verificar a lista de system call suportado
•Veja também o arquivo:
$cat /usr/src/linux/arch/i386/kernel/entry.S
Exemplo: strace em Linux
Num PC com SO Linux execute o seguinte comando:
$ strace -c ls
– Mostra um sumário dos system call solicitado durante a
execução do comando “ls”
$ strace -o teste1.out ls
– Mostra o sumário do system call solicitado durante a execução
do “ls” e salva no arquivo ‘teste1.out’
$ man strace
– Mostra informações (manual) do camando strace
Tipos de Chamadas de Sistema
Controle de Processos (end, abort, load, execute, create and
terminate process, wait, ...);
Exemplo: Interromper um programa;
Administração de Arquivos (create and delete file, open,
close, read, write, ...);
Administração de Dispositivos (request and release device,
read, write, ...);
Manutenção de informação (get and set time or date, get or
set system data, get process, file or device attributes, ...);
Comunicações (create and delete conections, send, receive
messages, transfer status information, ...).
Programas do sistema
• Os programas do SO fornecem uma interface para
desenvolvimento e execução de aplicativos.
– Alguns são interface do usuário para chamadas de sistema.
• Exemplo:
– Gerenciamento de arquivo: create, copy, delete, etc.
– Estado do sistema: espaço em disco, memória
utilizada e CPU em uso.
• Comandos: $top, $ps, $du, $df, $who
– Linguagem de programação: compiladores e
debuggers.
• Comandos: $man gdb (Gnu Debugger), $gcc -v
Programas do sistema
– Comunicação: email, conexão de rede e info IP.
• Comandos:
– $pine,
– $ping www.ufabc.edu.br,
– $host www.mec.gov.br,
– $wget.
Projeto e Implementação do
SO
• No projeto e implementação de um SO não existem
soluções completas para esses problemas;
– Empregam técnicas de provaram ter sucesso.
• Define-se: objetivos e especificações;
– Pode ser afetado pela escolha do hardware ou tipo de sistema.
• Os requisitos podem ser tratados:
– Usuário: SO deve ser conveniente de uso, fácil de aprender e
usar, confiável, rápido e seguro.
– Sistema: SO deve ser fácil de projetar, implementar, manter,
livres de erros e eficiente.
Projeto e Implementação do
SO
• Um importante princípio é separar:
– Política: O que será feito?
Mecanismo: Como fazer algo?
• A separação é importante para flexibilidade
– Políticas podem mudar entre lugares e com tempo;
– Mecanismo não sensível a mudança na política (desejável).
– Exemplo:
• Política: programas com uso intenso de E/S devem ter
prioridade em relação aqueles com uso de CPU
• Mecanismo: implementa um sistema de prioridade com
diferentes níveis.
Projeto e Implementação do
SO
Implementação do SO
Tradicionalmente escrito em linguagem assembly,
porém agora são escritos em linguagens de mais alto
nível (C, C++, ...)
O código escrito em uma linguagem de alto nível:
Pode ser escrito mais rápido.
É mais compacto.
É mais fácil de entender e depurar.
Um SO é muito mais fácil de portar (mover para algum
outro hardware) se ele é escrito em uma linguagem de
alto nível.
Projeto e Implementação do
SO
Implementação do SO
SO em linguagem de alto nível apresentam velocidades
reduzidas e maiores requisitos de armazenamento.
A melhoria no desempenho dos SOs tende a ser resultado
de melhores estruturas de dados e algoritmos do que
excelentes códigos em linguagem assembly.
Estruturas de SO
• Um SO precisa ser arquitetado com cuidado para
funcionar de modo apropriado e ser modificado com
facilidade.
• Exemplos:
– Simples – monolítico => uma camada
– Em camadas;
– MicroKernel;
– Modular;
– Virtual Machines.
Estruturas de SO
Simples
• MS-DOS escrito para
prover o máximo de
funcionalidade no menor
espaço;
• Não é dividido em
módulos;
• Apesar do MS-DOS ter
alguma estrutura, suas
interfaces e níveis de
funcionalidade não são
bem separadas.
Estruturas de SO
Simples
UNIX (original) limitado pela funcionalidade do
hardware. Esse UNIX consiste de 2 partes separadas:
Programas do Sistema.
O núcleo (kernel)
Consiste de tudo abaixo da interface de system call e
acima do hardware físico.
Provê o sistema de arquivos, escalonamento da CPU,
administração de memória e outras funções do sistema
operacional;
Um grande número de funções para um único nível.
Estruturas de SO
Estruturas de SO
Abordagem em camadas:
O SO é dividido em um número de camadas (níveis),
cada uma construída no topo de uma camada inferior:
A camada mais baixa (camada 0), é o hardware;
A camada mais alta (camada N) é a interface com o usuário.
Com modularidade, as camadas são selecionadas tais
que cada uma utiliza funções (operações) e serviços
somente de camadas de mais baixo nível;
Dificuldade diz respeito ao cuidado na definição das
camadas.
Estruturas de SO
Abordagem em camadas:
Exemplo:
Driver de dispositivo para o espaço em disco utilizado pelo algoritmo de
Memória Virtual, deve estar em nível inferior ao das rotinas de
gerenciamento de memória (espaço em disco);
Exemplo: Windows NT.
Estruturas de SO
Microkernel
Estrutura o SO removendo todo os componentes não
essenciais do kernel e implementa-os como programas
de sistema e de nível de usuário:
Pouco consenso quais serviços devem permanecer no kernel;
Geralmente, gerência memória e processo.
Fornecer comunicação (troca de mensagem);
Exemplo: Windows NT (Win32).
Estruturas de SO
• SO moderno (Solaris, Linux) implementam os módulos
kernel
– Usa técnicas de orientação objetos;
– Cada componenete é separado;
– Kernel possui um conjunto de componentes;
– Cada um é carregado de acordo com a necessidade dentro do
kernel.
• Semelhante a estrutura em camada mas com maior
flexibilidade;
• Fácil de manter, atualizar e depurar: foca em um
módulo em cada vez;
• Eficiente: módulos podem cada um ao outro
diretamente.
Estrutura de módulo: Solaris
Estrutura de módulo: Linux
• Execute:
• $ /sbin/lsmod
– exibe uma lista dos módulos carregados no
momento.
• $ /sbin/modprobe
– Para carregar um módulo do kernel, use o
comando seguido do nome do módulo do kernel.
• $ /sbin/modinfo
– para exibir informações sobre um módulo do
kernel.
Estrutura Híbrida: Mac OS X
• Aproximação em camada com uma camada com
microkernel:
– Mach: gerência de memoria, comunicação interprocesso e
chamada de procedimento remoto.
• BSD: sistema de arquivo, interface de comandos,
redes e APIs POSIX;
• Permite desenvolvimento
de módulo carregados
dinamicamente.
Máquinas Virtuais
A idéia é separar o hardware ou PC em vários ambientes
de execução diferentes;
O SO cria a ilusão de múltiplos processos => cada um
executando na seu próprio processador com sua própria
memória (virtual);
Os recursos do PC são compartilhados para criar as
máquinas virtuais.
Escalonamento da CPU pode criar a aparência de que os usuários
têm seus próprios processadores.
Sistema de Arquivos e Spooling provêm impressoras virtuais,
etc.
Um terminal normal de tempo compartilhado de usuário serve
como o console do operador da máquina virtual.
Máquinas Virtuais
Non-virtual Machine
Virtual Machine
Máquinas Virtuais (MV)
Porque usar máquina virtual?
• Em pesquisas e desenvolvimento:
– Testes de SO em MV com várias configurações;
– Tarefa de mudar o SO: mais rápido testar em MV;
– MV fornecem proteção completa dos sistemas pesquisado;
– Cada máquina é isolada de outras e dificilmente compartilha
recursos.
• Exemplo:
– VMware
– Java Virtual Machine
Arquitetura do VMware
Java
• Especificação para computador abstrato;
• Consistem em um carregador de classes e um
interpretador que executa os códigos de bytes
independente da arquitetura.
Java
• Pode ser implementado em cima de um sistema
operacional hospedeiro;
• Independente da arquitetura e portáveis.
Ambiente de Desenvolvimento
em Java
• Ambiente em tempo de compilação;
• Ambiente em tempo de execução.
SO em Java
• JX foi escrito quase totalmente em Java;
• Organizado em domínios =>
– máquina virtual independente;
– Heap=> aloca memória na criação do objeto e threads;
• O domínio Zero=> inicialização do sistema, estado da
CPU:
– Feito em linguagem C e Assembly
– Comunicação por meio de portais (semelhante Mach)
SO em Java
• JX;
http://www.jxos.org/publications/jx-usenix.pdf
Aula 02 - Sumário
• Temas abordados:
• O SO fornece 2 tipos de serviços
• Facilidades para usuário
• Uso eficiente de recursos
• As interfaces com usuário: CLI (shells) or GUI (windows)
• Sistema de chamadas: interface de programação com os serviços do
SO
• Normalmente utiliza API
• Programas do sistema: comunicação com SO e pode usar system call
• Compiladores, editores, etc
• Projeto de So: deve tratar separado política e mecanismo
• Estrutura do SO: simples, camadas, microkernel, modular e MV
Leituras Sugeridas
• Silberschatz, A., Galvin, P. B. Gagne,
G. Sistemas Operacionais com Java.
7º , edição. Editora, Campus, 2008 .
• Silberschatz, Abraham; Galvin, Peter
Baer; Gagne, Greg. Fundamentos de
sistemas operacionais. 6 ed. Rio de
Janeiro: LTC, 2009.
• http://www.digilife.be/quickreferenc
es/indexe.html
Nota de Aula
Acesse o link abaixo:
http://hostel.ufabc.edu.br/~marcelo.nascimento/
Obrigado!!!
Download