CONCEITOS BÁSICOS – SISTEMAS OPERACIONAIS AULA 01 – Sistemas Operacionais Gil Eduardo de Andrade O conteúdo deste documento é baseado no livro do Prof. Dr. Carlos Alberto Maziero, disponível no link: http://www.ppgia.pucpr.br/~maziero. Acesso efetuado em 20/06/2011. Introdução Um sistema de computação é constituído basicamente por hardware e software, existindo uma grande distância entre os circuitos eletrônicos e dispositivos de hardware e os programas em software. Os circuitos são complexos, acessados através de interfaces de baixo nível (geralmente usando as portas de entrada/saída do processador) e muitas vezes suas características e seu comportamento dependem da tecnologia usada em sua construção. Por exemplo, a forma de acesso de baixo nível a discos rígidos IDE difere da forma de acesso a discos SCSI ou leitores de CD. Essa grande diversidade pode ser um grande problema para o desenvolvedor de aplicativos. Com isso torna-se desejável oferecer aos programas uma forma de acesso homogênea aos dispositivos físicos, que possibilite abstrair as diferenças tecnológicas entre eles. O sistema operacional é uma camada de software que opera entre o hardware e os programas aplicativos voltados ao usuário final. O sistema operacional é uma estrutura de software ampla, muitas vezes complexa, que incorpora aspectos de baixo nível (como drivers de dispositivos e gerência de memória física) e de alto nível (como programas utilitários e a própria interface gráfica). A figura a seguir ilustra a arquitetura geral de um sistema de computação típico. Nela, podemos observar elementos de hardware, o sistema operacional e alguns programas aplicativos. Estrutura de um sistema de computação típico Os objetivos básicos de um sistema operacional podem ser sintetizados em duas palavraschave: “abstração” e “gerência”, cujos principais aspectos são detalhados a seguir. Abstração de Recursos Acessar os recursos de hardware de um sistema de computação pode ser uma tarefa complexa, devido às características específicas de cada dispositivo físico e a complexidade de suas interfaces. Por exemplo, a seqüência a seguir apresenta os principais passos envolvidos na abertura de um arquivo (operação open) em um leitor de disquete: 1. verificar se os parâmetros informados estão corretos (nome do arquivo, identificador do leitor de disquete, buffer de leitura, etc); 2. verificar se o leitor de disquetes está disponível; 3. verificar se o leitor contém um disquete; 4. ligar o motor do leitor e aguardar atingir a velocidade de rotação correta; 5. posicionar a cabeça de leitura sobre a trilha onde está a tabela de diretório; 6. ler a tabela de diretório e localizar o arquivo ou subdiretório desejado; 7. mover a cabeça de leitura para a posição do bloco inicial do arquivo; 8. ler o bloco inicial do arquivo e depositá-lo em um buffer de memória. Assim, o sistema operacional deve definir interfaces abstratas para os recursos do hardware, visando atender os seguintes objetivos: → Prover interfaces de acesso aos dispositivos, mais simples de usar que as interface de baixo nível, para simplificar a construção de programas aplicativos. Por exemplo: para ler dados de um disco rígido, uma aplicação usa um conceito chamado arquivo, que implementa uma visão abstrata do disco rígido. → Tornar os aplicativos independentes do hardware. Ao definir uma interface abstrata de acesso a um dispositivo de hardware, o sistema operacional desacopla o hardware dos aplicativos e permite que ambos evoluam de forma mais autônoma. Por exemplo, o código de um editor de textos não deve ser dependente da tecnologia de discos rígidos utilizada no sistema. → Definir interfaces de acesso homogêneas para dispositivos com tecnologias distintas. Através de suas abstrações, o sistema operacional permite aos aplicativos usar a mesma interface para dispositivos diversos. Por exemplo, um aplicativo acessa dados em disco através de arquivos e diretórios, sem precisar se preocupar com a estrutura real de armazenamento dos dados, que podem estar em um disquete, um disco IDE, uma máquina fotográfica digital conectada à porta USB, um CD ou mesmo um disco remoto, compartilhado através da rede. Gerência de Recursos Os aplicativos utilizam o hardware para executar suas funções: ler e armazenar dados, editar e imprimir documentos, navegar na Internet, tocar música, etc. Com diversar atividades em execução, e diversos possíveis acessos simultâneos ao hardware, conflitos podem surgir. Cabe ao sistema operacional definir políticas para gerenciar o uso dos recursos de hardware pelos aplicativos, e resolver eventuais disputas e conflitos. Exemplos: → O uso desse processador deve ser distribuído entre os aplicativos presentes no sistema, de forma que cada um deles possa executar na velocidade adequada para cumprir suas funções sem prejudicar os outros. → Ataques de negação de serviço (DoS – Denial of Service). Consistem em usar diversas técnicas para forçar um servidor de rede a dedicar seus recursos a atender um determinado usuário, em detrimento dos demais. Por exemplo, ao abrir milhares conexões simultâneas em um servidor de e-mail. Funcionalidades Cada recurso do sistema possui suas particularidades, o que impõe exigências específicas para gerenciar e abstrair os mesmos. Funcionalidades do sistema operacional Gerência do processador: visa distribuir a capacidade de processamento de forma justa1 entre as aplicações, evitando que uma aplicação monopolize esse recurso e respeitando as prioridades dos usuários. O sistema operacional provê a ilusão de que existe um processador independente para cada tarefa. Gerência de Memória: tem como objetivo fornecer a cada aplicação uma área de memória própria, independente e isolada das demais aplicações e inclusive do núcleo do sistema, isso melhora a estabilidade e segurança do sistema como um todo. Gerência de Dispositivos: visa implementar a interação com cada dispositivo por meio de drivers e criar modelos abstratos que permitam agrupar vários dispositivos distintos sob a mesma interface de acesso. Gerência de Arquivos: construída sobre a gerência de dispositivos e visa criar arquivos e diretórios, definindo sua interface de acesso e as regras para seu uso. Gerência de Proteção: para proteger os recursos do sistema contra acessos indevidos, é necessário: a) definir usuários e grupos de usuários; b) identificar os usuários que se conectam ao sistema, através de autenticação; c) definir e aplicar regras de controle de acesso aos recursos, aplicando essas regras através de procedimentos de autorização; d) registrar o uso dos recursos pelos usuários, para fins de auditoria e contabilização. Além dessas funcionalidades básicas oferecidas pela maioria dos sistemas operacionais, várias outras vêm se agregar aos sistemas modernos, para cobrir aspectos complementares, como a interface gráfica, suporte de rede, fluxos multimídia, gerência de energia, etc. As funcionalidades do sistema operacional geralmente são inter-dependentes: por exemplo, a gerência do processador depende de aspectos da gerência de memória, assim como a gerência de memória depende da gerência de dispositivos e da gerência de proteção.