1. Introdução 1.1. Conceituação dos Sistemas Operacionais A maior parte dos equipamentos que possuem sistemas operacionais, tais como estações de trabalho, computadores pessoais ou simplesmente PCs (Personal Computers) que são utilizados nas empresas e residências, além dos notebooks, celulares, automóveis, eletrodomésticos, televisores, entre outros, interage com os usuários de forma praticamente imperceptível. Contudo, as ações finais que esses dispositivos executam através de seus softwares são realizadas pelos sistemas operacionais (operating systems). Como o sistema operacional evoluiu ao longo do tempo, suas características serão abordadas neste livro-texto. Quando se pensa em sistema operacional, logo vêm à mente alguns dos mais famosos softwares do mercado, tais como Windows e Linux. Mas os sistemas operacionais surgiram muito antes do desenvolvimento do Windows e do Linux. Sistemas como MVS, OS/390 e o próprio UNIX são muito mais antigos. O sistema operacional, segundo Deitel, H. M.; Deitel, P. J.; Choffnes, D. R. (2005), é um software que habilita as aplicações a interagir com o hardware de um computador. Seu componente central é o núcleo, também conhecido como kernel. Os sistemas operacionais estão presentes em telefones celulares, automóveis, eletrodomésticos, computadores pessoais, além dos computadores de grande porte, ou mainframes (consultar glossário). Na figura 1 é possível perceber a posição do sistema operacional no contexto do computador. Assim, o sistema operacional relaciona-se com os softwares instalados para que estes tenham condição de interagir com os dispositivos do hardware. Dessa forma, o sistema operacional atua como um intermediário entre o usuário do computador e o hardware (Silberschatz, A.; Peterson, J. L.; Gavin, P., 1992). O sistema operacional faz a conexão entre os softwares aplicativos e as necessidades que estes possuem em interagir com o hardware. Dessa forma, os programadores de aplicações não necessitam ter sólidos conhecimentos de gerenciamento de memória ou de disco porque, hoje em dia, quem realiza essa atividade é o sistema operacional, de forma automática. O propósito de um sistema operacional é o de prover um ambiente no qual o usuário pode executar programas de uma forma conveniente e eficiente. A partir da segunda metade do século XX, a computação evoluiu de uma forma surpreendente. Os recursos de um computador evoluem a taxas incríveis ao mesmo tempo em que o custo decresce. Os usuários de hoje, dos escritórios e das empresas, têm à sua disposição computadores pessoais que executam bilhões de instruções por segundo, e equipamentos que executam trilhões de instruções por minuto já são realidade — cifras consideradas impossíveis de serem alcançadas há poucos anos. Ao mesmo tempo em que o preço dos microprocessadores reduziu, ampliou-se o seu poder, a tal ponto que esses dispositivos podem ser empregados em praticamente todas as situações da vida moderna. Nos computadores pessoais desenvolvemos a maior parte das atividades relacionadas à vida moderna. Neles, é possível desenvolver documentos eletrônicos, tais como textos, planilhas e apresentações. Também é possível ouvir música, assistir a vídeos, participar de comunidades virtuais e utilizar uma infinidade de aplicações voltadas a proporcionar mais comodidade aos usuários. Outros dispositivos, além dos computadores pessoais, também possuem seus recursos de microprocessamento embarcados, por exemplo, os telefones celulares, os aparelhos MP3 e os aparelhos GPS. O aumento do número de dispositivos que possuem acesso a rede e a ampliação das redes com e sem fio aumentam a interatividade e propiciam comunicações entre pessoas localizadas a longas distâncias umas das outras. Esse fenômeno convergiu para um crescimento, como nunca foi visto, da Internet e da World Wide Web. Esse crescimento promoveu a criação e o desenvolvimento de uma infinidade de novos serviços, que revolucionam os negócios das empresas hoje em dia e demandam o processamento de enormes quantidades de transações por segundo. Isso quer dizer que os sistemas operacionais, que apóiam essa estrutura altamente crítica de processamento, passam por uma intensa transformação de papéis e responsabilidades. O sistema operacional como um software que controla um hardware é uma definição da década de 1960. Há algum tempo os sistemas operacionais evoluíram e passaram a exercer mais papéis. 2 . C o m p o n e nt e s d o S i s t e m a Op e r a c io n a l Nos sistemas operacionais, os usuários requisitam ao computador que realize uma determinada tarefa e o sistema operacional gerencia o software e o hardware para chegar à execução do resultado desejado. Dessa forma, por exemplo, quando um usuário solicita a impressão de um documento, o sistema operacional age no encaminhamento do documento até a porta de impressão virtual onde está instalada uma impressora, converte o arquivo para um formato que a impressora possa entender e o envia para impressão, monitorando o feedback do dispositivo, para saber se o documento foi impresso ou se algum problema ocorreu, como falta de papel, falta de tinta ou toner, papel encravado, etc. Uma outra forma de interação com o sistema operacional é através de uma aplicação chamada shel, que é um interpretador e, na maioria dos casos, é implementado como interface de texto. Como ao sistema operacional estão reservadas as tarefas mais intrínsecas do ambiente computacional, é comum que a maioria dos usuários ache-o uma “caixa preta” (Deitel, H. M.; Deitel, P. J.; Choffnes, D. R., 2005). Pois não entendem como a relação entre software e hardwares, como processador, memória, disco rígido, modem, assegura a realização do trabalho correto. O software que contém os componentes centrais do sistema operacional chama-se núcleo ou kernel, em inglês. Dentre os componentes centrais do sistema operacional destacam-se: 3 escalonador de processos — Determina o momento e o período de tempo em que um processo é executado pelo processador; 3 gerenciador de memória — Determina o momento e a forma como a memória será cedida aos processos e o que fazer quando a memória principal estiver cheia; 3 gerenciador de E/S — Atende às solicitações de entrada e saída destinadas e provenientes dos dispositivos de hardware; 3 gerenciador de comunicação interprocessos (IPC) — Permite que os processos se comuniquem entre si; 3 gerenciador de sistema de arquivos — Organiza as coleções de dados gravados nos dispositivos de armazenamento e fornece uma referência para acessar os dados neste dispositivo. 3 . Ev o luç ã o d os S ist em a s O p e r a c io na is 3.1. Década de 40 3 Surgem os primeiros computadores digitais eletrônicos. Porém, esses equipamentos não possuíam um sistema operacional. 3 Programas eram submetidos em linguagem de máquina. 3 É quando ocorre a introdução da perfuração de cartão para armazenagem dos programas (ver figura 4). 3 O Assembly (consultar glossário) foi desenvolvido para agilizar o processo de programação. 3.2. Década de 50 3 Surge o primeiro sistema operacional, no início da década, desenvolvido pelos laboratórios de pesquisa da General Motors, para ser executado em seu computado IBM 701. 3 O IBM 701 foi o primeiro equipamento da IBM para uso geral. 3 O IBM 701 executava apenas um “job” (consultar glossário) de cada vez. 3.3. Década de 60 3 Deu-se início à multiprogramação (ver figura 5), quando projetistas desenvolveram sistemas operacionais que gerenciavam diversos jobs ao mesmo tempo. 3 Em 1964 a IBM lançou a família System/360, que utilizava o sistema operacional OS/360 e tinha a versatilidade de possuir escalabilidade, ou seja, podia oferecer maior capacidade à medida que o usuário necessitava fazer crescer a série. Com isso, a IBM permitiu que a arquitetura 360 pudesse evoluir para séries superiores e posteriores, como a série 370, série 390 e, mais recentemente, para a zSeries, à medida que eram lançadas, possibilitando o reaproveitamento, de uma maneira facilitada, dos códigos escritos nas séries anteriores. 3 Os usuários interagiam com o computador por meio de “terminais burros”, ligados on-line diretamente ao computador. 3 Passou-se a focar a melhoria de produtividade e redução de recursos humanos. 3 Foram desenvolvidos sistemas de tempo compartilhado (Time Sharing Systems) (consultar glossário) e sistemas de tempo real (Real Time Systems) (consultar glossário). 3 Vários sistemas operacionais de tempo compartilhado foram desenvolvidos nessa época, tais como o CTSS (Compatible Time Sharing System), desenvolvido pelo MIT, o TSS (Time Sharing System), desenvolvido pela IBM, o Multics, desenvolvido pelo MIT, GE e BELL para ser o sucessor do CTSS, e o CP/CMS (Control Program / Conversation Monitor System), que evoluiu para o VM (Virtual Machine) da IBM, desenvolvido pelo Cambridge Scientific Center da IBM. 3 Os sistemas operacionais passaram a ser escritos em linguagem de alto nível. O primeiro caso foi o Multics, que foi escrito em PL1 da IBM. 3 Na sequência, os projetistas da UNIX desenvolveram o C especificamente para desenvolver o UNIX. Famílias de sistemas operacionais tiveram início a partir do UNIX, como o Xenix e o Linux, que atualmente possui diversas distribuições. 3 Em 1965, programadores com certa experiência recebiam US$ 4 por hora, enquanto o custo do aluguel da hora de um computador de grande porte, que possuía uma capacidade muito menor que a dos computadores pessoais de hoje, era normalmente de US$ 500 (Deitel, H. M.; Deitel, P. J.; Choffnes, D. R., 2005) (ver figura 6). 3.4. Década de 70 3 Criação da interface gráfica com o usuário (GUI — Graphical User Interface), desenvolvida pelo Palo Alto Research Center (PARC) da Xerox. O primeiro sistema operacional dotado de interface gráfica com o usuário se chamou Alto (ver figuras 7a e 7b). O Alto foi projetado e construído pela Xerox e, embora a Xerox tenha doado certa quantidade para várias organizações, a empresa nunca vendeu nenhuma licença do Alto. 3 Nessa década os sistemas foram favorecidos pelos desenvolvimentos anteriores. Tornaram-se multimodais de multiprogramação, que suportava processamento em lote, tempo compartilhado e aplicações de tempo real. 3 Ocorre o amplo uso do protocolo TCP/IP e as redes LANs (Local Area Network) tornam-se práticas e baratas, a partir da aplicação do padrão Ethernet desenvolvido no Palo Alto Research Center (PARC) da Xerox. Com esses avanços, as comunicações entre computadores tornaram-se fáceis e a conectividade ficou mais frequente. 3 Nesse momento, os sistemas operacionais passaram a oferecer serviços de configuração da rede e administração da segurança, e seu desempenho cresce continuamente. 3 Os sistemas GUI foram amplamente explorados na década de 1980 pela Apple e pela Microsoft. 3.5. Década de 80 3 O sistema Apple II teve uma aceitação extraordinária. 3 A IBM lança o Personal Computer (PC) em 1982 e a Apple lança a sua versão de computador pessoal (ver glossário), batizado de Macintosh, em 1984. 3 O poder de processamento dos microprocessadores cresceu de tal forma que os computadores pessoais dessa década possuem um poder de processamento equivalente aos computadores de grande porte de uma década atrás. 3 Em 1981 a Microsoft lança a primeira versão do MS-DOS para computadores pessoais IBM. A versão da IBM chamava-se DOS. 3 O MS-DOS representou um marco na indústria de software, porque permitiu que os fabricantes de software para rodar no MS-DOS o fizessem com muito mais facilidade do que era nos demais sistemas operacionais até então. A grande redução de trabalho que o MS-DOS proporcionou aos fabricantes de software foi principalmente o uso das Interfaces de Programação de Aplicativos (API), que os programadores utilizavam para realizar manipulações detalhadas de hardware e outras operações. Dessa forma, os programadores de aplicações não necessitariam mais mexer com questões complexas de software, como o gerenciamento da memória do computador pessoal e acessos a seus dispositivos de entrada/ saída (ver figura 8). 3 Nesse momento ocorre uma enorme revolução na utilização dos recursos digitais, pois indivíduos sem formação tecnológica e as pequenas e médias empresas passam a ter os seus próprios computadores exclusivos, que também podiam transmitir dados entre sistemas de forma rápida e econômica. 3 Softwares aplicativos, tais como planilhas eletrônicas e editores de texto, ganham espaço e auxiliam as empresas a ganhar produtividade. 3 Boa parte dos usuários dos computadores pessoais passa a utilizar correio eletrônico, transferência de arquivos e acesso a bancos de dados remotos. 3 Surge a computação distribuída, que dá origem à arquitetura Cliente/Servidor (ver figura 9). 3 Em meados dessa década a Microsoft desenvolveu sua plataforma GUI, o Windows, que ainda não atuava como sistema operacional porque era executado de forma “sobreposta” ao DOS. 3.6. Década de 90 3 No final da década de 1990 um computador pessoal podia executar várias centenas de milhões de instruções por segundo (MIPS), enquanto armazena mais de 1Gb em disco rígido. 3 A Internet levou a uma enorme ampliação na popularidade da computação distribuída. 3 Em 1990 a Microsoft lançou o Windows 3.0, que apresentava grande funcionalidade. 3 O Windows tornou-se popular a partir de 1993, com o lançamento do Windows 3.1. Os sucessores, o Windows 95 e o Windows 98, praticamente dominaram o mercado, ainda nessa mesma década. 3 Usuários domésticos e empresas aumentavam a sua produtividade, agora com os computadores pessoais ligados em rede. 3 A Microsoft tornou-se dominante nessa época. 3 O Windows “tomou em prestados” muitos dos conceitos do Macintosh, tais como ícones, menus e janelas, e habilitava os usuários a utilizar múltiplas aplicações concorrentes de forma muito fácil. 3 Em 1993 a Microsoft decidiu também entrar no mercado de sistemas operacionais corporativos e lançou o Windows NT. 3.7. Década de 2000 3 Ocorre a disponibilidade da Internet de alta velocidade a preço acessível, através de diversas mídias, como par metálico telefônico, redes de cabo coaxial das companhias de TV a cabo, satélite e celular. 3 Surgem os microprocessadores com mais de núcleo, o que agrega uma forte ampliação da capacidade de processamento dos computadores pessoais e notebooks. 3 Linguagens de programação, como o Java, habilitam o surgimento da computação paralela. 3 Diferentemente dos sistemas e computadores da década de 60, que processavam as suas instruções de forma sequencial, ou seja, uma após a outra, na computação paralela, o processamento de uma determinada tarefa se dá enquanto o processador processa outras informações e gerencia diversos dispositivos. 3 Surgem sistemas operacionais de código aberto, como o FreeBSD, OpenBSD e Linux, baseado no GNU (General Public Licence), criado pela Free Software Foundation, que é um conceito da década de 1980, desenvolvido por seu fundador, Richard Stallman. Ele especifica que qualquer pessoa pode modificar e redistribuir software livremente sob sua licença, desde que as modificações sejam claramente especificadas e que qualquer outro derivado do software também seja livre. 3 Tornou-se possível configurar e registrar as preferências do perfil dos usuários, o que faz com que o sistema operacional se ajuste a essas preferências cada vez que o usuário realizar a sua autenticação no sistema operacional. 3 Características do tipo “plug-and-play” foram adicionadas aos sistemas operacionais, que habilitam os usuários a adicionar e remover dispositivos do sistema operacional sem a necessidade de reconfigurálos manualmente a cada nova ação. 3 Os projetistas preparam sistemas operacionais padronizando as interfaces com os usuários, como, por exemplo, no caso da adoção do sistema de janelas e ícones também por outros sistemas operacionais, como o Linux e suas distribuições, e pelo próprio UNIX. 3 Surge a computação móvel, proporcionada pelos dispositivos móveis, como telefones celulares, smartphones e PDAs, que passam a ser dotados de processadores cada vez mais poderosos, dando a oportunidade para a criação de novos sistemas operacionais, que poderão estar associados a questões muito específicas. 3 A proliferação dos dispositivos móveis deve-se em parte à evolução da amplitude e velocidade e à redução de custo dos serviços de comunicação de dados para esses dispositivos. 4. Conceitos Básicos Sobre Processador, Memória e Armazenamento Secundário 4.1. Processador Boa parte dos sistemas operacionais depende do processador para gerenciar o seu mecanismo de proteção de forma a impedir alguns processos de acessar informações privilegiadas, ou memória que não lhe foi alocada. É um componente do hardware que executa um conjunto de instruções em linguagem de máquina, objetivando a execução eficiente de uma atividade específica. Os processadores podem atuar também como CPU (Unidade Central de Processamento), como um coprocessador gráfico, etc. 4.2. Memória Principal É a RAM (Random Access Memory), e consiste em uma memória volátil e de acesso aleatório. Sendo volátil, significa que perde seus dados quando o computador é desligado. Quanto ao acesso aleatório, permite que os processos possam realizar pesquisas em qualquer ordem para a localização de dados. O sistema pode impedir esses processos de acessar endereços de memória que não lhe foram atribuídos, fornecendo registradores de limite que especificam o endereço de início e de fim da memória atribuída a um processo. As memórias DRAM (RAM Dinâmica) são os tipos mais comuns de memória RAM, e obrigatoriamente precisam ser acessadas de tempos em tempos para que o conteúdo não seja perdido. As memórias SRAM (RAM Estática), normalmente utilizadas como caches de processador, não precisam ser acessadas periodicamente e são mais rápidas e também mais caras que as memórias DRAM. 4.2.1. Hierarquia das Memórias 3 Registradores – Estas memórias muito rápidas operam na velocidade do processador, estão incorporadas no próprio processador e guardam dados para uso imediato pelo processador; 3 Cache – As memórias cache são divididas em L1 e L2, às vezes L3, e são integradas aos processadores mais novos para poder explorar as interconexões de alta velocidade. Muitos megabytes são transferidos entre a cache e o processador antes de estarem disponíveis para a memória principal. Possuem uma latência (tempo de resposta) superior à dos registradores; 3 Memória Principal ou Memória Primária – São memórias voláteis com maior capacidade de armazenamento e acesso mais lento que os registradores e cache; 3 Armazenamento Secundário – É a forma de armazenamento mais lenta, porém com maior capacidade de armazenamento. São os discos rígidos, CD, DVD, etc. Novos desenvolvimentos dos fabricantes tendem a possibilitar o desenvolvimento de memórias mais velozes e de maior capacidade, com custo menor, respeitando a Lei de Moore. A chamada “Lei de Moore”, que é a “profecia” feita na década de 70 por Gordon Moore, um dos fundadores da Intel, de que a potência dos processadores dobraria a cada 18 meses, sobreviveu mais de duas décadas e ainda não parece estar totalmente desgastada, apesar do ciclo evolutivo dos transistores estar chegando ao fi m e novas tecnologias estarem sendo estudadas. 3 Armazenamento Secundário — Devido à sua capacidade limitada e volatilidade, a memória principal não é adequada para armazenar grandes quantidades de dados ou por muito tempo, ou ambos. Para realizar o armazenamento de grandes quantidades de dados de forma permanente, como arquivos e softwares, o computador usa o armazenamento secundário. Normalmente o armazenamento secundário se dá no disco rígido ou no pen drive. Apesar de custar menos e armazenar mais do que as memórias RAM, não possui a mesma velocidade de acesso. 5. Sistemas 5.1. Sistema Monousuário e Monotarefa É quando o sistema operacional permite que apenas um usuário execute uma tarefa de cada vez. Um bom exemplo está nos sistemas operacionais de boa parte de telefones celulares, ou também o sistema operacional PALM OS. 5.2. Sistema Monousuário e Multitarefa É o caso do usuário que utiliza um computador pessoal em casa ou no escritório. Essa situação configura um ambiente monousuário, porque apenas um usuário acessa o computador pessoal em cada momento. Contudo, sistemas operacionais como Windows XP, Windows Vista e Linux permitem que esse usuário utilize muitas tarefas simultaneamente, como, por exemplo, acessando e-mails enquanto visita alguns sites e verifica os dados de uma planilha, ouvindo uma rádio na Internet, com todos esses serviços sendo executados de forma simultânea. 5.3. Sistema Multiusuário É o sistema operacional comumente encontrado nos servidores (ver figura 11), em que uma série de usuários pode estar realizando tarefas concorrentes e acessos a informações de banco de dados sem que um interfira no trabalho do outro. Um exemplo é o Windows XP Server 2003 ou o UNIX. 6. Chamadas ao Sistema Desde a década de 1980, os sistemas operacionais incorporaram as Interfaces de Programação de Aplicativo ou API (Application Programming Interfaces). As APIs (ver figura 12) fornecem rotinas que os programadores podem utilizar no desenvolvimento de softwares para requisitar serviços ao sistema operacional, por exemplo, para realizar uma impressão ou gravar um determinado conteúdo em disco. Essas chamadas das APIs que executam rotinas numa camada mais baixa do sistema são conhecidas como “chamadas ao sistema”. 6.1. Sistemas com Compartilhamento de Tempo (Time Sharing) Um sistema com compartilhamento de tempo (Time Sharing), também conhecido como “multitarefa” (Silberschatz, A.; Peterson, J. L.; Gavin, P., 1992), é uma extensão lógica da mutiprogramação (ver figura 5). Vários jobs sãos executados pela CPU, que comuta o processamento de cada job. O sistema Time-Sharing foi desenvolvido para prover interatividade no uso dos computadores pessoais a um custo acessível. Um sistema Time-Sharing utiliza o gerenciamento e a multiprogramação da CPU para prover a cada usuário uma pequena porção de tempo compartilhado de processamento. 6 . 2 . Sis temas Di s tr ibu ídos O processamento distribuído de dados (ver figura 13) compreende a ação de um conjunto de processadores interconectados de tal forma a permitir a descentralização dos recursos e prover um ambiente para execução de programas de aplicação. A maior vantagem desse sistema é que, em caso de falha de hardware de qualquer dos processadores, o outro pode assumir as funções e continuar os seus trabalhos. Essa característica aumenta a confiabilidade no sistema. 6.3. Sistemas de tempo Real São sistemas utilizados normalmente como um dispositivo de controle rodando em uma aplicação dedicada. 6.4. Bootstrap Para que um sistema operacional possa começar a gerenciar os recursos de um computador, é necessário que ele seja carregado na memória no momento da inicialização do computador. 7. Gerenciamento de Processos 7.1 Conceituação de Processos O gerenciamento de processos ocorre porque o sistema, quando intercala a execução de um determinado processo, deve conseguir administrá-lo cuidadosamente para que possa reiniciá-lo quando ele for retomado. Os processos devem possuir a capacidade de poder comunicar-se com o sistema operacional, de forma que possam informar, por exemplo, o fim da execução do processo. 7.2. Condições de Corrida e Regiões Críticas Alguns sistemas operacionais permitem que processos que trabalham de forma simultânea frequentemente compartilhem o mesmo armazenamento. Esse armazenamento pode ocorrer na memória principal ou pode ser um arquivo compartilhado. A natureza do armazenamento não elimina a região crítica quando ocorre o risco de problema (ver figura 14). Segundo Tanenbaum (1987), onde dois ou mais processos estão lendo ou gravando um dado compartilhado localizado no mesmo endereço de memória principal ou secundária, pode ocorrer uma “condição da corrida” (race condition) ou “condição de disputa” (DEITEL, H. M.; DEITEL, P. J.; CHOFFNES, D. R., 2005). Essa situação deve ser evitada porque pode causar erros em aplicações que serão difíceis de identificar. Para prever o aparecimento das regiões críticas, deve-se encontrar um meio de proibir que mais de um processo leia ou grave os dados compartilhados no mesmo momento e no mesmo endereço. Assim, é necessário garantir que, se um processo estiver utilizando uma variável ou arquivo compartilhado, o outro processo será impedido de realizar a mesma tarefa. 7 . 3 . C on cor r ên cia e S in cr on izaçã o 7.3.1. Processos Concorrentes Os processos no sistema podem ser executados de maneira concorrente. Isso quer dizer que muitos processos podem ser multitarefa em uma CPU. Existem várias razões que justificam permitir as execuções concorrentes: 3 Compartilhamento de Recurso Físico — Os recursos de hardware do computador são finitos e podem ser compartilhados, tornando o ambiente multiusuário; 3 Compartilhamento de Recursos Lógicos — Muitos usuários podem estar interessados no mesmo fragmento de informação, que pode ser provida em um ambiente que permita o acesso concorrente a esses recursos; 3 Aumento de Velocidade da Computação — Quando se deseja que uma tarefa específica seja executada rapidamente, quebra-se essa tarefa em subtarefas e uma a uma elas são executadas paralelamente com outras; 3 Modularidade — Quando ocorre a construção de sistemas em padrão modular, dividindo-se as funções em processos distintos; 3 Conveniência — O usuário pode querer ter muitas tarefas para trabalhar ao mesmo tempo. Um exemplo está no fato de que usuários podem estar editando, imprimindo e compilando de forma concorrente. 7.3.2. Sincronização Serão apresentadas algumas instruções simples de hardware que podem ser executadas em muitos sistemas. Essas instruções especiais podem ser usadas para resolver os problemas de regiões críticas com relativa simplicidade. Uma instrução pode ser definida na forma que segue: 7. 4. Monitores e S emáforos 7.4.1. Monitores Para facilitar o processo de escrever programas de forma correta, foi proposta uma sincronização de alto nível chamada “monitor”. Um monitor é uma coleção de procedures, variáveis e estruturas de dados que são agrupados em um tipo especial de pacote. Processos podem chamar as procedures em um monitor se necessitarem, mas não terão acesso às estruturas de dados internos de uma procedure declarada fora do monitor. 7.4.2. Semáforos Como resultado para a dificuldade com as regiões críticas, existe uma ferramenta de sincronização chamada semáforo. O semáforo é um contador e é usado quando o recurso a ser utilizado pertence a um conjunto de recursos idênticos. É uma variável inteira, maior que zero, que é acessada apenas por duas operações: P (wait) e V (signal). O P decrementa 1, quando um recurso é removido do conjunto e está em uso pela thread. O V acrescenta 1, o que indica que a thread devolveu um recurso. 7.5. Comunicação Interprocessos Ocorre quando há a necessidade de que os processos se comuniquem uns com os outros. 7.6. Escalonamento de Processador O escalonamento de processador ocorre quando existe uma política do sistema para escolher quais processos executar. A política de escalonamento deve atender algumas premissas ligadas a desempenho e maximização do número de processos executados, reduzir o tempo de latência (tempo de espera antes da execução), evitar antecipação indefinida de processos e aperfeiçoar o uso do(s) processador(es). 8. Gerenciamento de Memória 8.1. Conceituação O gerenciamento de memória estabelece a estratégia de otimização da memória diante da carga que esta sofrerá, e é normalmente realizado via software ou hardware. Dessa forma, o gerenciamento de memória é um recurso importante do sistema operacional, pois estabelece como os espaços de memória disponíveis serão alocados para os processos e como atender as requisições de memória de um processador. 8. 2 . S w a p p i n g Compreende um esquema de troca no qual os processos não permanecem na memória principal até o final de sua execução. Sendo assim, enquanto o processo aguarda uma E/S, é substituído por outro processo na memória, para retornar assim que a ação de E/S estiver concluída. Quando ocorre a retirada do processo da memória, o sistema armazena o processo num armazenamento temporário (swap out). Assim que o sistema recuperar o processo (swap in) do armazenamento secundário, ocorre a continuação do processamento. O sistema operacional normalmente realiza o swap out e o swap in muitas vezes antes de terminar a execução do processo. 8. 3 . M e m ó r i a V i r t u a l Os sistemas de memória virtual dão aos processos a impressão de que há mais memória disponível do que de fato existe instalada. Para o propósito deste tópico, o aluno deve saber que há dois tipos de endereços nos sistemas de memória virtual: os propostos pelos próprios processos (endereço virtual) e os disponíveis na memória principal (endereço real). Toda vez que um processo acessar um endereço virtual, o sistema operacional o converterá para um endereço real. O propósito desse recurso é aperfeiçoar o uso da memória, porque memórias principais são rápidas, mas muito caras. Por isso, construir um sistema totalmente pensado para se alojar na memória principal é inviável, dada a limitação de tamanho que esse sistema necessariamente teria. Portanto, uma opção interessante é criar a ilusão de que há mais memória utilizando-se o espaço do armazenamento secundário. 8. 4. S eg ment ação Na segmentação de memória física, os dados e instruções de um programa são divididos em blocos, denominados segmentos. Cada segmento pode conter um fragmento do conteúdo que deve ser armazenado, sem a obrigação de que os blocos tenham o mesmo tamanho, conforme figura 16. 9. Sistema de Arquivo 9.1. Conceituação Um arquivo consiste em um ou mais registros físicos, que são a unidade de informação lida ou escrita de fato, ou seja, uma coleção nomeada de dados, para um dispositivo de armazenamento. Muitos sistemas utilizam arquivos para guardar informações de uma forma que possa ser recuperada. Essa guarda acontece, normalmente, em dispositivos de armazenamento secundário, como disco rígido ou um pen drive. 9.2. Diretórios Os diretórios são recursos utilizados para organizar e localizar arquivos rapidamente, conforme figuras 17 e 18. Na verdade, os diretórios também são arquivos, que contêm as informações e as localizações de outros arquivos. 9. 3 . M é t od os de Acess o Estão divididos em dois métodos: 3 Acesso Sequencial — Muito utilizado no início do desenvolvimento da computação, quando o processo de leitura necessariamente lia o arquivo a partir do primeiro bit, nunca lendo fora de ordem; 3 Acesso Aleatório — A partir do momento em que os discos passaram a ser utilizados como forma de armazenamento, foi possível ler os registros fora de ordem, ou então ter acesso ao registro, por exemplo, por uma palavra-chave. Esse tipo de acesso possibilitou o desenvolvimento dos modelos de bancos de dados que existem atualmente. Este é o sistema atualmente utilizado por boa parte dos sistemas operacionais para localização e leitura dos arquivos. 9. 4. Co mp art ilham ento O compartilhamento de arquivos é bastante conveniente quando se está atuando em um projeto com outras pessoas e estas necessitam realizar acréscimos (append) num mesmo documento. O problema pode ser resolvido de duas maneiras: Na primeira, cria-se uma estrutura para que, além do proprietário do arquivo, outros também possam vê-lo. Essa estrutura de dados é o i-node. Observe a figura 19. Na segunda, cria-se apenas uma ligação simbólica (symbolic link) ou apenas um link com o arquivo em questão. Dessa forma, não será necessário montar estruturas, pois o usuário terá em seu poder apenas um arquivo contendo uma rota. Assim, a ligação fica muito versátil e somente o verdadeiro proprietário é quem tem o privilégio de remover o arquivo. 9.5. Implementação Existem quatro métodos de implementação de arquivos que discutem a questão do controle de blocos de disco e seu relacionamento com quais arquivos. Eles serão abordados no próximo item. 9.6. Métodos de Alocação e Gerenciamento de Espaço A seguir, abordaremos os conceitos de cada um dos métodos de alocação: 3 Alocação Contígua — É o esquema mais simples de alocação. Dessa forma, em um disco com blocos de 10 KB, um arquivo com 100 KB seria alocado em 10 blocos consecutivos (ver figura 20). 3 A Locação por Lista Encadeada — Este método aproveita melhor os espaços do que a alocação contígua e todo o bloco pode ser usado. Dessa forma, nenhum espaço é perdido. Porém, continua-se com uma leitura sequencial e, consequentemente, um acesso bastante lento. A diferença principal está na indexação, pois a primeira palavra de cada bloco é usada como ponteiro para um próximo. O restante do bloco é usado para dados. Com alguns dos primeiros bytes ocupados por um ponteiro para o próximo bloco, a leitura de todo o bloco requer obter e concatenar a informação de dois blocos de disco. Essa cópia gera uma sobrecarga extra, conforme figura 21; 3 Alocação por Lista Encadeada Usando uma Tabela — Para Tanenbaum (2003), as desvantagens da alocação por lista podem ser eliminadas colocando-se cada palavra de ponteiro de cada bloco de disco em uma tabela da memória. O arquivo A usa os blocos 4, 7, 2, 10 e 12 e o arquivo B usa os blocos 6, 3, 11 e 14, conforme figura 22. O aluno pode perceber que, se partir do bloco 4, seguirá o encadeamento até o final. O mesmo acontece com o bloco 6. Ambos os arquivos usam a marca de término “-1”. Esse modelo de tabela de memória é chamado de FAT (file allocation table) e permite que todo bloco fique disponível para dados e o acesso aleatório se torne mais fácil, apesar de ser necessário seguir o encadeamento para encontrar o dado. A grande desvantagem está na necessidade de que, para funcionar, toda a tabela deve estar na memória o tempo todo; • i-nodes — Neste modelo, associa-se uma estrutura de dados chamada i-node (índex-node) para identificar quais blocos pertencem a quais arquivos. Acompanhe o exemplo da figura 23. Com o uso do i-node é possível encontrar todos os blocos do arquivo. A vantagem de utilizar o i-node é que o recurso precisa apenas estar na memória quando o arquivo estiver aberto. Este esquema gera arquivos muito menores que as listas encadeadas. 9. 7 . Segurança Em muitos casos, os arquivos desenvolvidos pelos usuários possuem informações com mais valor do que o próprio equipamento onde estão sendo gerados. Assim, questões de segurança devem ser pensadas antes de partir para a produção de documentação que tenha uma significativa importância para o usuário. Os problemas normalmente são originados de duas vertentes: 3 Desastres — São eventos que fogem do controle, como um incêndio, uma enchente, ou até mesmo uma pane no sistema operacional que ocorreu com o arquivo aberto que não estava salvo. Os problemas gerados podem ser minimizados, muitas vezes, através de soluções simples, como estabelecer um procedimento de backup diário, mesmo nos casos dos usuários domésticos. Outro caso comum de acontecer atualmente é o usuário de um notebook ter o seu equipamento roubado ou furtado. Por ser um equipamento muito pessoal, o notebook contém inúmeras informações altamente importantes para seus usuários, seja de caráter pessoal ou profissional. Os discos rígidos externos, que se ligam aos computadores através da porta USB e não necessitam de instalação física, chegaram a se tornar tão baratos que unidades de armazenamento de 1 Tb (terabyte), que até pouco tempo atrás eram utópicas até mesmo nas empresas, já se tornaram totalmente acessíveis aos usuários domésticos; 3 Bobagens — São os problemas gerados por erros de operação de usuários que, por exemplo, acabam removendo diretórios importantes e até o acesso ao sistema operacional. Tanto uma situação quanto a outra podem ter seus prejuízos minimizados utilizando-se o exemplo do backup em unidade externa. 10. Gerenciamento de Entrada e Saída 10.1. Visão Geral O gerenciamento das funções de E/S (Entrada/Saída) do sistema operacional é, certamente, um dos serviços mais importantes. Basicamente todas as ações do sistema operacional estão envolvidas com dispositivos de entrada e saída. Um acesso à memória, ao disco rígido, ou mesmo à impressora, utiliza recursos de E/S. 1 0 .2 . Dis pos itiv os Os dispositivos de E/S utilizam controladores que trabalham no “interfaceamento” do computador com o dispositivo. Um aspecto importante a destacar é o intenso acesso à memória que esses dispositivos realizam. Deve-se ressaltar que não apenas o hardware é responsável pelo apoio a E/S. Existe uma infinidade de softwares que são utilizados para gerenciar o relacionamento com o dispositivo. Um exemplo desses softwares são os drivers que normalmente acompanham algum dispositivo, quando é adquirido. A seguir, veja uma relação de alguns dos dispositivos normalmente utilizados para E/S com os computadores: 11. Glossário 3 Assembly — É uma linguagem de montagem, que utiliza instruções que se assemelham a abreviaturas de palavras em inglês para representar as operações básicas do computador. A partir do uso dessas instruções, foi possível agilizar o processo de construção de programas. 3 Cliente/Servidor — É um ambiente onde os clientes, que são computadores pessoais com um software específico instalado, acessam remotamente um banco de dados corporativo instalado no servidor. 3 Computação distribuída — Vários desempenham uma tarefa comum. computadores independentes 3 Computador pessoal — É a evolução dos computadores das décadas passadas e tornou-se acessível em termos de custo. Também é chamado de PC, microcomputador, estação de trabalho ou apenas estação. 3 Job — É um serviço composto por um conjunto de programas que possuem uma tarefa específica. Como na década de 50 os primeiros sistemas operacionais exigiam que o programa inteiro fosse carregado na memória, para somente depois poder ser executado, os programadores eram limitados a criar programas pequenos e com capacidades reduzidas. Apesar de aparentemente o job ter incrementado a performance do processamento das transações, seu desenvolvimento era penoso e lento, se comparado aos processos de desenvolvimento de software atuais, pois tinha-se que submeter o programa para compilação ao menor erro. E, na década de 1950, o processo de “recompilação” de um programa levava horas ou até dias. 3 Mainframes — São computadores que tiveram sua origem na década de 40. São equipamentos que possuem um altíssimo poder de processamento e estão muito presentes na era da Internet, hospedando aplicações que exigem alto desempenho. 3 Multiprogramação — É a capacidade de armazenar vários programas na memória para que possam ser executados concorrentemente. 3 Sistemas de tempo compartilhado (Time Sharing Systems) — Vários processos cooperam na execução de uma tarefa. Seu valor está no compartilhamento de programas e dados. Hardware, sistemas operacionais e programas são todos projetados para ampliar o tempo das pessoas e para melhorar a eficiência e a produtividade. A execução do sistema de tempo compartilhado pode acontecer de duas formas: 1. execução assíncrona: Os processos concorrem pela utilização do tempo de processamento. Dessa forma, cada processador terá uma carga de processamento que poderá ser diferente de outro processador. Observe a figura 24: 2. execução síncrona: Os processos utilizam o tempo de processamento de maneira homogênea, comportando-se como se fossem apenas um processo. Observe a figura 25: 3 Sistemas de tempo real (Real Time Systems) — Utilizados em aplicações específicas, nas quais o tratamento da resposta do dispositivo deve ser instantâneo. 3 Thread — Praticamente todos os sistemas operacionais fornecem algum suporte a esse serviço. Threads são recursos escalonáveis em um processador, e cada thread pode executar um conjunto de instruções, independentemente de outros processos e threads. Threads em um processo podem executar concorrentemente e cooperar para atingir uma meta comum. 12. Referências Bibliográficas DAHMKE, M. Sistemas operacionais para microcomputadores. Rio de Janeiro: Campus, 1983. DEITEL, H. M.; DEITEL, P. J.; CHOFFNES, D. R. Sistemas operacionais. 3. ed. São Paulo: Pearson, 2005. DIGIBARN Computer Museum. Xerox Alto Operating System and Alto Applications. Disponível em http://www.digibarn.com/collections/software/alto/index.html. Acessado em: 06 jan. 2009. IBM. IBM archives : Mainframes photo album. Disponível em <http ://www-03.i bm .com/i bm/h istory/exhi bits/mainframe/ mainframe_album.html>. Acessado em: 05 jan. 2009. JONES, D. W. Punched Cards: A brief illustrated technical history. THE UNIVERSITY OF IOWA. Department of Computer Science. Disponível em http://www.cs.uiowa.edu/~jones/cards/history.html. Acessado em: 05 jan. 2009. SILBERSCHATZ, A.; PETERSON, J. L.; GAVIN, P. Operating system concepts. 3. ed. [S.l]: Addison-Wesley, 1992. SIQUEIRA, E. 2015: Como viveremos. São Paulo: Saraiva, 2004. TANENBAUM, A. S. Operating Systems: Design and Implementation. Amsterdã: Prentice-Hall International, 1987. ____________. Sistemas operacionais modernos. 2. ed. São Paulo: Pearson, 2003.