Estrutura do Sistema Operacional Ademar Alves Trindade Inicialmente... Sistema Operacional: não é composto por uma sequência de início, meio e fim como um aplicativo/programa. Baseado em eventos, de forma assíncrona. Assim, é formado por um conjunto de rotinas (procedimentos, tarefas) que oferece serviços aos usuários e aplicações, denominado núcleo do sistema ou kernel. Inicialmente... Um usuário pode se comunicar com o kernel por intermédio das chamadas rotinas do sistema realizadas por aplicações (usuários), por meio de utilitários (sistema) ou linguagem de comandos. 1
Inicialmente... Resumindo... O kernel representa a camada de software mais próxima ao hardware. Segundo alguns autores, o kernel é o seu coração, sua mente e seu sistema nervoso. Ele é responsável exclusivamente pelo transporte das informações de mais baixo nível que tornam todas as outras tarefas possíveis. Fazendo malabarismos com diversos processos que ocorrem simultaneamente, gerenciando sua memória de forma que não interfiram uns nos outros, satisfazendo suas solicitações de acesso a um disco e muito mais. Resumindo... 2
Funções do Núcleo Rotinas executadas concorrentemente, sem ordem pré-definida, tendo como base eventos assíncronos. Muitos desses eventos estão relacionados ao hardware e a tarefas internas do próprio SO. Funções do Núcleo Tratamento de interrupções e exceções; Criação e eliminação de processos; Sincronização e comunicação entre processos; Escalonamento e controle dos processos. Funções do Núcleo Gerência de memória; Gerência do sistema de arquivos; Gerência de dispositivos de E/S; 3
Funções do Núcleo Suporte a redes locais e distribuídas; Contabilização do uso do sistema; Auditoria e segurança do sistema. Resumindo... Basicamente o kernel começa a funcionar assim que o computador é ligado, nesse momento ele inicia a detecção de todo o hardware indispensável. O SO é carregado em seguida espera que o usuário faça seu login, feito isso o Kernel passa a administrar as principais funções dentro do SO, isso inclui por exemplo o gerenciamento da memória, dos processos, dos arquivos e de todos os dispositivos. Resumindo... Ele é o responsável por garantir que todos os programas terão acesso aos recursos de que necessitam (memória RAM, por exemplo) simultaneamente, fazendo com que haja um compartilhamento concorrente. 4
Resumindo... Exemplo: diversos usuários compartilham os mesmos recursos. Isso exige que o Sistema Operacional garanta a confiabilidade na execução concorrente de todos os programas e nos dados dos usuários, além da garantia da integridade do próprio SO. Modos de Acesso Muitas das principais implementações de segurança de um sistema operacional itilizam um mecanismo presente no hardware dos processadores, conhecido como modo de acesso. Em geral, os processadores possuem dois modos de acesso: modo usuário e modo kernel Modos de Acesso Modo usuário: Uma aplicação só pode executar instruções conhecidas como não privilegiadas, tendo acesso a um número reduzido de instruções. Modo kernel: Uma aplicação pode ter acesso ao conjunto de instruções do processador. 5
Modos de Acesso Instruções privilegiadas: têm o poder de comprometer o sistema. O modo de acesso é um mecanismo para impedir problemas de segurança e até mesmo violação do sistema. Modos de Acesso Apenas o SO tem acesso as instruções privilegiadas. Exemplo:Uma aplicação necessita de um serviço que pode colocar o sistema em risco. Modos de Acesso 1) Solicitação é realizada através de uma system call (Chamada do Sistema). 2) System Call altera o modo de acesso do processador para modo kernel. 3) Se caso um programa tente executar uma instrução privilegiada, sem o processador estar em modo kernel, uma execução é gerada e o programa é encerrado. 6
Modos de Acesso 4) Se for permitido ele executa a tarefa solicitada 5) O modo de acesso é retornado para o modo usuário ao término da rotina do sistema. Modos de Acesso Instruções privilegiadas não devem ser usadas de maneira indiscriminada pelas aplicações. Exemplo: A aplicação atualize um arquivo em disco. Como o disco é um recurso compartilhado, sua utilização deverá ser gerenciada unicamente pelo sistema operacional. Modos de Acesso Proteção ao núcleo: Caso uma aplicação tenha acesso a áreas de memória onde está carregado o sistema operacional, um programador mal-intencionado ou Estrutura do Sistema Operacional um erro de programação poderia gravar nesta área, violando o sistema causando-o sérios danos. 7
As rotinas do sistema operacional compõem o núcleo do sistema. Todas as funções do núcleo são implementadas por rotinas do sistema que necessariamente possuem em seu código Estrutura do Sistema Operacional instruções privilegiadas. Para que estas rotinas possam ser executadas o processador deve estar obrigatoriamente em modo kernel, o que exige a implementação de mecanismos de proteção para garantir a confiabilidade do sistema. O controle de execução de rotinas do sistema operacional é realizado pelo mecanismo conhecido como system calls. Toda vez que uma aplicação desejar chamar uma rotina do SO, o mecanismo de system call é ativado. Inicialmente, o SO verifica se a aplicação possui privilégios necessários para executar a rotina desejada. Em caso negativo... SO impedirá o desvio para a rotina do sistema, sinalizando ao programa chamador que a operação não é possível. Este é um mecanismo de proteção por software, no qual o SO garante que as aplicações só poderão executar rotinas previamente autorizadas, que é realizada pelo administrador do sistema. 8
Em caso afirmativo... SO salva o conteúdo corrente nos registradores, troca o modo de acesso do processador de usuário para kernel e realiza o desvio para a rotina alterando o registrador PC com o endereço da rotina chamada. Ao término da execução da rotina do sistema, o modo de acesso é alterado de kernel para usuário e o contexto dos registradores restaurados para que a aplicação continue a execução. Este é um mecanismo de proteção por software. 9
Caso uma aplicação tente executar diretamente uma instrução privilegiada sem ser por intermédio de uma chamada à rotina do sistema, um mecanismo de proteção por hardware (implementado no hardware do processador) garantirá a segurança do sistema, impedindo a operação, sinalizando uma exceção. Concluindo... Os mecanismos de system call e de proteção por hardware garantem a segurança e a integridade do sistema. Eles impedem que aplicações executem instruções privilegiadas sem a autorização e supervisão do sistema operacional. Exemplos de chamadas ao sistema Gerência de processos: pid = fork() waitpid(pid, &statloc, options) execve(name, argv, environp) exit(status) 10
Exemplos de chamadas ao sistema Gerência de arquivos open(file, how) close(fd) read(fd, buffer, nbytes) write(fd, buffer, nbytes) lseek(fd, offset, whence) Exemplos de chamadas ao sistema Gerência de arquivos e diretórios mkdir(name,mode) rmdir(name) link(name1,name2) mount(special,name,flag) Exemplos de chamadas ao sistema Diversas chdir(dirname) chmod(name,mode) kill(pid,signal) 11
As rotinas do sistema e o mecanismo de system call podem ser entendidas como uma porta de entrada para o núcleo do SO e a seus serviços. Sempre que uma aplicação desejar algum serviço do sistema, deve ser realizada uma chamada a uma de suas rotinas através de uma system call. 12
Por intermédio dos parâmetros fornecidos na system call, a solicitação é processada e uma resposta é retornada à aplicação juntamente com um estado de conclusão indicando se houve erro. O termo System Call é tipicamente utilizado em sistems UNIX, porém em outros sistemas o mesmo conceito é apresentado com diferentes nomes. System Services no Open VMS. Aplication Program Interface (API) no Windows. Cada SO possui seu própio conjunto de rotinas, com nomes, parâmetros e formas de ativação peculiares. Uma aplicação desenvolvida utilizando serviços de um determinado SO não pode ser portada diretamente para um outro sistema, exigindo algumas correções no códigofonte. 13
Exemplo do uso de uma API. GetSystemTime(SystemTime); DataHoraT := SystemTimeToDateTime(SystemTime); DataHoraS := DateTimeToStr(DataHoraT); RichEdit1.Lines.Add(DataHoraS); A API GetSystemTime obtem a data e a hora do sistema Windows. A função SystemTimeToDateTime converte a data e a hora para o formato DataHoraT do Delphi e em seguida, para o formato texto DataTimeStr. A última linha exibe a data e a hora do sistema em uma janela previamente criada. Resumindo... A maioria dos progamadores e usuários desconhe os detalhes envolvidos, por exemplo, em um simples comando de leitura de um arquivo utilizando uma linguagem de alto nível. Resumindo... O comando da linguagem de alto nível é convertido pelo compilador para uma chamada a uma rotina específica que, quando executada, verifica a ocorrência de erros e retorna os dados ao programa de forma transparente ao usuário. As rotinas do sistema podem ser divididas por grupos de função. 14
Uma tentativa de padronização pela ISO (International Organization for Standardization) e IEEE (Institute of Electrical and Electronics Engineers) resultou em um conjunto conhecido como POSIX (Portable Operating System Interface for Unix). Alguns SOs modernos oferecem algum suporte ao padrão POSIX como o Windows, IBM-AIX, HP-UX e o SUN-Solaris. Linguagem de Comandos Tem a função de permitir que o usuário se comunique de uma forma direta com o Sistema Operacional na execução de tarefas mais específicas. O interpretador de comandos (shell) não faz parte do núcleo do sistema. Assim, é permitida a criação de novos interpretadores de comandos. Linguagem de Comandos Interpretador tem a função de comunicar com o núcelo para verificar a permissão de execução daquele referifo comando. Em alguns sistemas como Windows, são utilizadas janelas com mais de uma camada, acima dos comandos, para melhorar a interação com o usuário. 15
Linguagem de Comandos Interpretador tem a função de comunicar com o núcelo para verificar a permissão de execução daquele referifo comando. Em alguns sistemas como Windows, são utilizadas janelas com mais de uma camada, acima dos comandos, para melhorar a interação com o usuário. Linguagem de Comandos Na maioria dos SOs, as linguagens de comando evoluíram no sentido de permitir a interação mais amigável com os usuários, utilizando interfaces gráficas como janelas e ícones, a exemplo Windows. Linguagem de Comandos 16
Linguagem de Comandos Cada comando, depois de digitado pelo usuário, é: interpretado pelo shell ou interpretador de comandos, que: verifica a sintaxe do comando; faz chamadas a rotinas do sistema; apresenta um resultado ou uma mensagem informativa. Linguagem de Comandos O bash é um interpretador de comandos, uma espécie de tradutor entre o sistema operacional e o usuário, normalmente conhecido como shell. Permite a execução de seqüências de comandos direto no prompt do sistema ou escritas em arquivos de texto, conhecidos como shell scripts. Linguagem de Comandos 17