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!!!