01 INTRODUÇÃO 1.5 ESTRUTURA DOS SISTEMAS OPERACIONAIS O Sistema Operacional é formado por um Conjunto de rotinas (denominado de núcleo do sistema ou kernel) que oferece serviços aos usuários e suas aplicações Figura 01 – Kernel de um Sistema Operacional 1.5.1 Linguagem de Comandos As liguagens de comando permitem ao usuário comunicar-se de forma simples com o SO para executar tarefas específicas do sistema operacional. Estas tarefas são as seguintes: criar, ler ou eliminar arquivos, consultar diretório ou verificar a data e a hora armazenada no sistema Cada comando é interpretado pelo Shell (interpretador de comandos) que verifica a sua sintaxe e faz chamadas a rotinas do sistema e apresenta o resultado Figura 02 – As linguagens de comando são interpretadas e as repectivas rotinas do Sistema acionadas 1.5.1.1 Linguagem de Comandos (exemplo no DOS) Dois comandos foram executados: um para listar os arquivos e diretórios e outro para remover um arquivo. Linguagem de Comandos (windows) 4 Figura 03 – Comando usando linguagem de comandos do DOS 1.5.1.2 Linguagem de Comandos (exemplo do linux) Um comando para remoção de um diretório foi executado. Linguagem de Comandos (linux) 5 Figura 04 - Comando usando linguagem de comandos do Linux 1.5.2 Kernel As rotinas do sistema são executadas concorrentemente (ao mesmo tempo) sem uma ordem pré-definida, com base em eventos (acontecimentos) dissociados do tempo (eventos assíncronos) 1.5.2.1 Funções do Kernel São funções do Kernel: • • • • • • Tratamento de interrupções e exceções; Criação, eliminação, sicronização, Escalonamento e controle de processos Gerência da memória, do sistemas de arquivos, das operações de entrada e saída; Suporte a redes locais e distribuídas Contabilização, auditoria e segurança do sistema Devido a complexidade de um ambiente multiprogramável podem surgir problemas relativos à segurança. Como diversos usuários compartilham os mesmos recursos (memória, processador e dispositivos de E/S), o SO deve garantir a confiabilidade na execução concorrente de todos os programas e NOS DADOS DOS USUÁRIOS, além da garantia da integridade do sistema operacional. No exemplo da figura abaixo o sistema operacional impediu que o arquivo em formato PDF que estava aberto para leitura fosse deletado. Exemplo de função do Kernel (gerência do sistema de arquivos) 13 Figura 05 – Exemplificação da Função do Kernel 1.5.3 Modos de Acesso Os sistemas operacionais restringem as operações executadas pelos programas (aplicações), por razões de segurança e estabilidade. Por exemplo o acesso a dispositivos de hardware (disco, memória, etc ...) Muitas implementações de segurança do núcleo de um SO e de acesso aos seus serviços utilizam o modo de acesso dos processadores. O modos de acesso dos processadores é um mecanismo presente no hardware dos processadores: No MODO USUÁRIO uma aplicação só pode executar instruções não privilegiadas, ou seja, instruções que não oferecem riscos ao sistema. No MODO KERNEL uma aplicação pode executar instruções não privilegiadas e privilegiadas, ou seja, instrução que oferece risco ao sistema (exemplo: instruções que acessam dados no disco). A figura abaixo exemplifica o uso do modo de acesso dos processadores Modos de Acesso (exemplo de uso) Q Para que um programa (aplicação) possa escrever em uma área de memória onde encontra-se o sistema operacional, o programa (aplicação) deve estar sendo executado com o processador no modo kernel. 16 Figura 06 – Exemplo do uso dos modos de acesso dos processadores 1.5.4 System Calls (Chamadas de Sistema) Como as rotinas do sistema possuem em seu código instruções privilegiadas, então o processador deve estar em modo kernel para executá-las. As System Calls são como portas de entrada para se ter acesso as rotinas do SO. Se uma aplicação desejar chamar uma rotina do sistema operacional: mecanismo de system call verificará se a aplicação possui os privilégios necessários. Figura 07 – System Call (porta de entrada para rotinas do Sistema Operacional) A figura abaixo exibe uma system call que obtem a data e hora do sistema System Calls (Chamadas de Sistema) 19 Figura 08 – Chama de uma System Call A figura abaixo mostra um comando em linux (utilizando a linguagem de comandos deste sistema) para remover um diretório denominado “diretório”. Linguagem de Comandos (linux) 20 Figura 09 – Execução de um comando em Linux usando a linguagem de comandos do Sistema Operacional A figura exibe um tabela de system calls do linux, onde se destaca a relacionada a rotina que executa o comando da figura anterior Linux System Call Table 21 Figura 10 – Tabela de System Call do Linux Podemos constatar pelo figura abaixo que uma system call possui milhares de linhas de código 22 Figura 11 – Código fonte de uma System Call na linguagem C Uma aplicação sempre deve executar com o processador no modo usuário. Se uma aplicação desejar chamar uma rotina do sistema operacional: o mecanismo de system call verificará se a aplicação possui os privilégios necessários. Em caso negativo o SO impedirá o desvio para a rotina do sistema sinalizando ao programa (aplicação) chamador (a) que a operação não é possível. A figura abaixo temos um exemplo em que a aplicação não possui os privilégios necessários. Em caso negativo ... 24 Figura 12 -– Aplicação não possui privilégios necessários a execução de uma rotina do Sistema Operacional Em caso positivo, caso a aplicação possua os privilégios necessário ocorrerá o seguinte: Figura 13 – Aplicação possui privilégios necessários a execução de uma rotina do Sistema Operacional Caso tente executar uma instrução privilegiada (rotinas do sistema) sem ser por intermédio de uma system call, um mecanismo de proteção por hardware impedirá a operação. As system call possuem diversos nomes dependendo do sistema operacional: System Calls (Chamadas de Sistema) Q Q Q Unix: system Call OpenVMS: system Services MS Windows: Application Program Interface (API) 26 Figura 14 – Outros nomes para uma System Call 1.5.4.1 Funções das System Calls (Chamadas de Sistema) A figura abaixo exibe as principais unções desempenhadas por uma system call Figura 15 – Funções das System Call Cada Sistema Operacional possui seu próprio conjunto de rotinas. Uma aplicação desenvolvida utilizando rotinas de um determinado Sistema Operacional não pode ser portada diretamente para outro SO, exigindo a correção do código-fonte. 1.5.5 Arquiteturas do Kernel O projeto de um sistema operacional depende muito do hardware a ser utilizado e do tipo de Sistema Operacional que se deseja construir (tempo compartilhado, tempo real, monousuário, multiusuário,etc...) Os primeiros sistemas operacionais foram desenvolvidos em linguagem assembly (IBM OS/360) Nos sistemas operacionais atuais forma em grande parte escritos na linguagem C/C++ (MS Windows). O uso de linguagem de alto nível na construção de sistemas operacionais possui vantagens e desvantagens: Vantagem: O Sistema Operacional pode ser facilmente alterado em outra arquitetura de hardware (portabilidade do código) Desvantagem: perca do desempenho A arquitetura do kernel define a maneira como o código do sistema é organizado e o inter-relacionamento entre os seus diversos componentes pode variar conforme a concepção do projeto. As principais arquiteturas dos Sistema Operacionais são: • Arquitetura monolítica • Arquitetura em camadas • Máquina virtual • Arquitetura microkernel As figuras abaixo descrevem as principais arquiteturas: Arquitetura Monolítica Q Q Compara-se a uma aplicação formada por vários módulos que são compilados separadamente e depois linkados formando um único programa executável onde os módulos podem interagir livremente. Desvantagem: – desenvolvimento e manutenção bastante difíceis Q Vantagem: – simplicidade e bom desempenho Q MS-DOS e primeiros sistemas UNIX 32 Figura 16 – Arquiteura Monolítica Sistema em Camadas Q Q Q Q Q Com o aumento da complexidade e do tamanho do código dos SO, técnicas de programação estruturada e modular foram incorporadas ao projeto O sistema é dividido em níveis sobrepostos Cada camada oferece um conjunto de funções que podem ser utilizadas apenas pelas camadas superiores. As camadas mais internas são mais privilegiadas que as externas. Vantagem: – Facilita a manutenção e depuração – Cria uma hierarquia de níveis de modos de acesso Q Desvantagem: – Desempenho Q Maioria das versões do UNIX e do Windows Figura 17 – Sistema em Camadas 33 Figura 18 - 21 - Máquina Virtual Máquina Virtual Q Q Este modelo cria um isolamento total entre cada VM, oferecendo grande segurança para cada VM. Desvantagem: Estrutura bastante complexa devido a necessidade de compartilhar e gerenciar recursos do hardware entre as diversas VM 37 Figura 19 -21 - Máquina Virtual Arquitetura Microkernel Idéia: tornar o núcleo do SO o mais simples possível. Os serviços do sistema são disponibilizados através de processos, responsáveis por oferecer um conjunto específico de funções (gerência de arquivos, processos, de memória e escalonamento) Sempre que uma aplicação deseja algum serviço, deve solicitar ao processo responsável. Q Q Q 39 Figura 20 - 21 - Arquitetura Microkernel Arquitetura Microkernel Q Q Q Q Q Q A aplicação que solicita serviço é chamada de cliente e o processo que responde é denominado de servidor. A principal função do núcleo é realizar a troca de mensagens entre cliente e o servidor Servidores: modo usuário e Núcleo: modo Kernel. Vantagem: Manutebilidade, flexibilidade e portabilidade Desvantagem: – Difícil implementação Maioria das iniciativas ligadas ao desenvolvimento de SO distribuídos 40 Figura 21 - Arquitetura Microkernel