Escola Técnica Estadual República Curso Técnico de Informática ORGANIZAÇÃO DE S I S T E M AS OPERACIONAIS Matrícula: _________________ Turma: _____________ Nome: ______________________________________________ E-mail: ______________________________________________ Equipe de OSO ______________________________________________________Organização de Sistemas Operacionais Março de 10SUMÁRIO Página 2 de 58 ______________________________________________________Organização de Sistemas Operacionais INTRODUÇÃO 1.1- CONCEITUAÇÃO 1.1.1- Processamento de Dados Um computador é uma máquina (conjunto de partes eletrônicas e eletromecânicas) capaz de sistematicamente coletar, manipular e fornecer os resultados da manipulação de informações para um ou mais objetivos. Processamento de Dados consiste, então, em uma série de atividades ordenadamente realizadas, com o objetivo de produzir um arranjo determinado de informações a partir de outras obtidas inicialmente. A manipulação das informações coletadas no início da atividade chama-se processamento, as informações iniciais são usualmente denominadas dados. Os termos dados e informações podem ser tratados como sinônimos ou como termos distintos; dado pode ser definido como matéria-prima originalmente obtida de uma ou mais fontes (etapa de coleta), e informação como o resultado do processamento, isto é, o dado processado ou “acabado”. Informação são os dados organizados (segundo uma orientação específica) para o atendimento ou emprego de uma pessoa ou grupo que os recebe. Como o conhecimento é a tomada de decisão são importantes em várias áreas e em diferentes níveis hierárquicos de uma organização, a informação para uma determinada pessoa ou grupo pode ser considerada um dados para outra. 1.1.2- Sistemas Um sistema pode ser dividido de diferentes maneiras. Um sistema pode ser compreendido, por exemplo, como um conjunto de partes que cooperam para atingir-se um objetivo comum. Porém, a que parece mais apropriada para nossas conceituações é a seguinte, ligeiramente diferente da anterior: “Conjunto de partes coordenadas que concorrem para a realização de um determinado objetivo.” Atualmente, o enfoque sistêmico se faz presente em quase todas as áreas do desenvolvimento comercial, científico, industrial e social. O processamento eletrônico de dados, devido a sua própria natureza – a de ser um conjunto de componentes separados que se integram segundo procedimentos e regras previamente estabelecidos -, vem se desenvolvendo de acordo com os conceitos da Teoria dos Sistemas e, por essa razão, é chamado de sistemas de computação. É sistema porque é um conjunto de partes que se coordenam (o teclado, a memória, o processador, os dispositivos periféricos) para a realização de um objetivo: computar. Computar significa calcular, realizar cálculos matemáticos. Os computadores são máquinas de computar, de calcular, de realizar operações matemáticas. Mesmo quando um processador está sendo usado para processar texto, ele o faz por meio de cálculos matemáticos; como também acontece quando ele realiza processamento gráfico e outros mais. Na realidade, um computador realiza contínuas e constantes manipulações de dados. Chama-se a isso de processamento de dados. A manipulação dos dados, realizada segundo instruções de um programa eletrônico, dos dados necessários ao funcionamento de um outro sistema maior: o sistema de informações. Página 3 de 58 ______________________________________________________Organização de Sistemas Operacionais O sistema de informações de uma empresa pode ser conceituado como o conjunto de métodos, processos e equipamentos necessários para se obter, processar e utilizar informações dentro de uma empresa. Dessa forma, ele compreende não só o Sistema de Processamento de Dados (SPD), como também todos os procedimentos manuais necessários a promover informações para um determinado nível de decisão de uma organização. Em geral, um sistema de processamento de dados compreende duas partes: o sistema de computação (o computador e os programas básicos) e os sistemas de aplicação. O primeiro,normalmente fornecido completo pelo fabricante ou fornecedores específicos, e os últimos, desenvolvidos pelo usuário ou por terceiros, especificamente dedicados a uma aplicação de interesse do usuário. 1.1.3- Sistemas de Computação Qualquer processamento de dados requer a execução de suma série de etapas, as quais podem ser realizadas de forma manual ou automática por um computador. Tais etapas, elaboradas e executadas passo a passo, constituem o que se chama de programa. Cada um dos passos mencionados é uma diferente instrução, ou ordem de comando, dada ao hardware, objetivando a realização de uma determinada ação (uma operação aritmética, uma transferência de informação etc.). O programa é um conjunto de instruções. Consideremos que se deseja, por exemplo, somar 100 números e imprimir o resultado. Se o processo é manual, precisa-se de uma máquina de somar e outra de escrever, bem como de uma pessoa que executará todas as etapas. Estas poderão estar relacionadas em um papel, de modo que o operador não cometa erros nem se esqueça de alguma etapa, devendo ser executadas sistematicamente, uma após outra, conforme mostrado no exemplo a seguir: 1. 2. 3. 4. 5. 6. 7. Escrever e guardar N=0 e SOMA=0 Ler número da entrada Somar o valor do número ao de SOMA e guardar resultado como SOMA Somar 1 ao valor de N e guardar resultado como novo N Se valor de N for menor que 100, então passar par item 2 Senão: imprimir valor de SOMA Parar O grupo de passos de passos relacionados acima constitui um algoritmo: conjunto de etapas finitas, ordenadamente definidas, com o propósito de obter solução para um determinado problema. As etapas de um algoritmo são as instruções que deverão ser executadas por uma máquina (quando falamos de computadores). O conjunto de instruções constitui o que chamamos de programa. Um programa de computador é a formalização de um algoritmo em linguagem inteligível pelo computador. Assim como o operador deve ter entendido os sete passos do programa apresentado, um computador precisa entender cada instrução, de modo a executar corretamente a operação que se pretende. O operador entendia português, sua linguagem de comunicação com outras pessoas; os computadores têm uma linguagem própria – a linguagem binária. Todo dado coletado pelos computadores, as instruções por eles executadas, bem como os resultados de um processamento, são sempre constituídos de conjuntos ordenados de zeros e uns. No entanto, essa linguagem, chamada de linguagem de máquina, é para os seres humanos, tediosa de manipular, difícil de compreender e fácil de acarretar erros. Por essa razão, foram desenvolvidas outras liguagens, mais próximas do entendimento dos operadores, genericamente chamadas de liguagens de programação. Atualmente, há dezenas dessas linguagens, tais como: Cobol, Pascal, Fortran, Visual Basic, Lisp, Assembly, C, C++, Delphi, Java etc. Cada uma dessas linguagens possui regras fixas e rígidas de sintaxe, semelhantes às das liguagens de comunicação humana, tais como português, inglês etc (embora estas não possuam sintaxe tão rígida). O programador escreve por intermédio da descrição de instrução por instrução. Página 4 de 58 ______________________________________________________Organização de Sistemas Operacionais Tal programa não é, entretanto, possível ser diretamente executado pela máquina, uma vez que as linguagens de programação são apenas um modo de o operador comunicar-se com o computador. A máquina somente entende e executa instruções mais simples, chamadas instruções de máquina. Todo computador é construído com circuitos eletrônicos capazes de reconhecer e executar diretamente apenas um conjunto limitado e simples de instruções de máquina, nas quais todo programa (escrito em Pascal, Delphi, Java etc) deve ser convertido antes de ser executado. Em resumo, o computador, sendo uma máquina, precisa de “ordens” específicas (suas instruções) para executar as atividades para as quais foi construído. Esta formalização em instruções de máquina constitui a “linguagem” de comunicação dos humanos com a máquina e desta internamente entre seus componentes. Uma vantagem dessas linguagens reside no fato de que, em face de suas semelhanças com as linguagens dos humanos, elas podem ser definidas para atender a requisitos e intenções específicas de emprego. Ainda há outras vantagens do uso de linguagem de alto nível sobre a linguagem de máquina, entre as quais: A concisão das linguagens de alto nível se comparadas com programas binários. Neste último caso, os programas são mais longos e de difícil entendimento em face de as instruções serem mais simples e, portanto, cada item operacional precisar de muitas. As linguagens de alto nível possuem uma estrutura de comandos que são identificados por palavras da nossa linguagem, o que facilita o entendimento do programador. Para efeitos de entendimento, desenvolvimento, fabricação e funcionamento, pode-se separar um computador em duas grandes e distintas partes: hardware e software. O conjunto formado pelos circuitos eletrônicos e partes eletromecânicas de um computador é conhecido como hardware. É a parte física, visível do computador. Software consiste nos programas, de qualquer tipo e em qualquer linguagem, que são introduzidos na máquina para fazê-la trabalhar, passo a passo, e produzir algum resultado – o conjunto de instruções, já mencionadas anteriormente. O hardware sozinho não funciona sem as instruções (software) sobre o quê e quando fazer. O software dá vida ao computador, fazendo com que suas partes elétricas, eletrônicas e mecânicas possam funcionar. Há uma classe de programas, geralmente escritos pelo fabricante do computador ou por firmas especializadas, chamada genericamente software básico (é o caso dos sistemas operacionais, como o Windows, o Unix, o Linux, como também dos compiladores e interpretadores) e que, em conjunto com o hardware, constitui o que chamamos de sistema de computação. A outra classe de programas, definida e implementada para atender aos problemas de cada um, é genericamente conhecida como programas de aplicação ou sistemas de aplicação, pois aplicam-se a um determinado problema de uma empresa ou mesmo de uma pessoa física. Página 5 de 58 ______________________________________________________Organização de Sistemas Operacionais COMPONENTES DE UM SISTEMA DE COMPUTAÇÃO Um sistema de computação é um conjunto de componentes integrados para funcionar como se fossem um único elemento e que têm por objetivo realizar manipulações com dados, isto é, realizar algum tipo de operações com os dados de modo a obter uma informação útil. Vamos agora apresentar cada um dos componentes deste sistema. A Unidade Central de Processamento é o componente vital do sistema, porque além de efetivamente realizar as ações finais (as operações matemáticas com os dados), interpreta o tipo e o modo de execução de uma instrução, bem como controla quando e o que ser realizado pelos demais componentes, emitindo para isso sinais apropriados de controle. Os programas e dados são armazenados na Memória para execução imediata (memória principal e memória cachê) ou para execução ou uso posterior (memória secundária). Os dispositivos de Entrada e Saída servem basicamente para permitir que o sistema de computação se comunique com o mundo exterior, realizando ainda, além da interligação, a conversão das linguagens do sistema para a linguagem do meio exterior (caracteres de nossas linguagens) e vice-versa. Os seres humanos entendem símbolos como A, b, ?, + etc e o computador entende sinais elétricos que podem assumir um valor de tensão para representar o valor 1 ou um outro valor para representar o valor 0. o teclado (dispositivo de ENTRADA) interliga o usuário (mudo exterior) e o computador, permitindo a comunicação entre ambos através do uso das suas teclas. Ao ser pressionada a tecla correspondente ao caractere A, por exemplo, os circuitos eletrônicos existentes no teclado “convertem” a pressão mecânica em um grupo de sinais elétricos, alguns com voltagem alta (bit 1) e outros com voltagem baixa (bit 0), que corresponde, para o computador, ao caractere A. Os dispositivos de saída operam de modo semelhante, porém em sentido inverso, isto é, do computador para o exterior, convertendo os sinais elétricos internos (e que, em grupos, podem representar um caractere inteligível pelo ser humano) em símbolos conhecidos pelos humanos, como os caracteres C, e, h, *, >, + etc. Em resumo, os sistemas atuais, embora mais potentes, possuem os mesmos componentes básicos e realizam suas funções essenciais orientadas pelos mesmos conceitos fundamentais expostos no relatório apresentado por John Von Neumann, relativo à arquitetura do seu sistema EDVAC e do IAS, quais sejam: Dados e instruções são armazenados em uma memória do tipo que escreve e recupera (leitura); O conteúdo da memória é endereçado conforme a sua posição, independentemente do tipo da informação nele contido; A execução das instruções ocorre de forma seqüencial (a não ser que a instrução específica mude momentaneamente a seqüência), uma em seguida à outra. 2.1- REPRESENTAÇÃO DAS INFORMAÇÕES 2.1.1-O Bit, o Caractere, O Byte e a Palavra Toda a informação introduzida em um computador (sejam dados que serão processados ou instruções de um programa) precisa ser entendida pela máquina, para que possa corretamente interpreta-la e processá-la. O computador, sendo um equipamento eletrônico, armazena e movimenta as informações internamente sob forma eletrônica; esta pode ser um valor de voltagem ou de corrente (sabemos também que na memória secundária as informações são armazenadas sob a forma magnética ou ótica). Página 6 de 58 ______________________________________________________Organização de Sistemas Operacionais Para que esta máquina pudesse representar eletricamente todos os símbolos utilizados na linguagem humana, seriam necessários mais de 100 diferentes valores (ou de corrente). Tal máquina certamente seria difícil de ser construída para fins comerciais e, possivelmente, teria confiabilidade muito baixa. Depois do ENIAC, as próximas máquinas (computadores) construídas foram máquinas binárias. Devido ao fato que seria muito mais simples e confiável um circuito capaz de gerar e manipular o menor número possível de valores distintos, isto é, capaz de entender apenas dois valores diferentes: 0 e 1. Além disso, com uma máquina binária, torna-se mais simples o emprego da lógica booleana (do SIM/NÃO, ABERTO/FECHADO, ACIMA/ABAIXO, LIGADO/DESLIGADO etc.). Dessa forma, os computadores digitais (que trabalham com valores discretos) são totalmente binários. Toda a informação introduzida em um computador é convertida para a forma binária, através do emprego de um código qualquer de armazenamento. As linguagens utilizadas pelos humanos possuem uma estrutura de informação criada para permitir a construção dos elementos necessários à comunicação entre pessoas, seja no formato falado seja no escrito. Assim é que nos comunicamos uns com os outros através de trechos do conjunto de elementos disponíveis na nossa linguagem, como os caracteres e as palavras, unindo-os de acordo com as regras de construção estabelecidas (léxica e sintaxe). O menor elemento disponível de uma linguagem humana é o caractere. A menor unidade de informação armazenável em um computador é o algarismo binário ou dígito binário, conhecido como bit (contração das palavras inglesas binary digit). O bit pode ter, então, somente dois valores: 0 e 1. No entanto, um caractere isoladamente posto praticamente nada significa para nosso sentido de comunicação, razão por que criaram-se as palavras que são conjuntos de caracteres formando um sentido de informação útil. Da mesma forma que na nossa linguagem a menor unidade de informação (o caractere) pouco ou nada significa como informação útil, em computação, com possibilidades tão limitadas, o bit pouco pode representar isoladamente; por essa razão, as informações manipuladas por um computador são codificadas em grupos ordenados de bits, de modo a terem um significado útil. O menor grupo ordenado de bits que pode representar uma informação em computadores é o caractere da linguagem dos humanos, justamente a menor unidade de informação das nossas linguagens (como se pode verificar, em computação há um nível ainda mais baixo de representação de informação que é o bit). Qualquer caractere a ser armazenado em um sistema de computação é convertido em um conjunto de bits previamente definido para o referido sistema (chama-se de código de representação de caracteres). A primeira definição formal atribuída a um grupo ordenado de bits, para efeito de manipulação interna mais eficiente, foi instituída pela IBM e é, atualmente, utilizada por praticamente todos os fabricantes de computadores. Trata-se do byte, definido como um grupo ordenado de oito bits, tratados de forma individual, como unidade de armazenamento e transferência. O byte foi definido para servir de elemento de referência para a construção e funcionamento dos dispositivos de armazenamento e também como referência para os processos de transferência de dados para os periféricos e CPU/MP. Como os principais códigos de representação de caracteres utilizam grupos de oito bits por caractere, os conceitos de byte e caractere tornam-se semelhantes, e as palavras, quase sinônimas. O termo caractere é mais empregado para fins comerciais, enquanto o termo byte é empregado mais na linguagem técnica dos profissionais da área. Como os computadores são máquinas binárias, todas as indicações numéricas referem-se a potência de 2 e não a potência de 10 como, por exemplo, no sistema métrico, e por essa razão, o Kb Página 7 de 58 ______________________________________________________Organização de Sistemas Operacionais (kilobyte) representa 1024 unidades, o Mb (megabyte) representa 1.048.576 unidades e o Gb (gigabyte) indica um valor igual a 1024 Mb ou 1.048.576 Kb ou 1.073.741.824 unidades (byte). Com o progressivo aumento da capacidade dos dispositivos de armazenamento dos computadores, estão sendo utilizados mais dois novos elementos para abreviar valores mais elevados: tratase do termo tera (Tb), para representar um valor igual a 1024 Gb, e do peta (Pb) para representar 1024 Tb. Certamente, em um futuro próximo, estaremos utilizando outras abreviaturas mais poderosas. Dessa forma, os valores utilizados em computação para indicar capacidade de memória são normalmente compostos de um número (sempre entre 0 e 999) e uma das abreviaturas citadas, como mostra a tabela abaixo: 1 Kb = 1024 bytes 1 Mb = 1024 Kb = 1024 x 1024 = 1.048.576 bytes 1 Gb = 1024 Mb = 1.048.576 Kb = 1.048.576 x 1024 = 1.073.741.824 bytes 256 Kb = 256 x 1024 = 262.124 bytes 64 Mb = 64 = 1024 = 65.536 Kb = 65.536 x 1024 = 67.108.864 bytes 16 Gb = 16 x 1024 Mb = 16.384 x 1024 = 16.777.216 Kb = 16.777.216 x 1024 = 17.179.869.184 bytes A estrutura das linguagens dos humanos inicia pelo caractere e segue organizando grupos de caracteres para formar uma unidade útil de informação, as palavras. Também em computação criou-se o conceito de palavra, embora nesse caso ele tenha pequenas diferenças em relação às palavras das nossas linguagens. Assim, além do bit e do byte, temos o conceito relacionado com o armazenamento e a transferência de informações entre MP e CPU, porém mais especialmente relacionado ao processamento de dados pela CPU, denominado palavra. Inicialmente, podemos definir a palavra como um conjunto de bits que representa uma informação útil para os computadores. Desse modo, uma palavra estaria associada ao tipo de interação entre MP e CPU, que é individual, informação por informação. Ou seja, a CPU processa instrução por instrução (cada uma estaria associada a uma palavra), armazena ou recupera número a número (cada um estaria associado a uma palavra), e assim por diante. A palavra nos computadores é um valor fixo e constante para um dado processador, diferentemente das linguagens dos humanos onde a palavra têm quantidades variáveis de caracteres. O conceito de palavra não é rigorosamente igual para todos os fabricantes. Alguns estabelecem o tamanho dos registradores internos da CPU igual ao da palavra, enquanto outros usam este conceito de palavra de modo mais abrangente. De modo geral, usam-se dois valores diferentes: um relacionado à unidade de armazenamento – o byte e outro para indicar a unidade de transferência e processamento – a palavra. Em geral, a CPU processa valores representados por uma quantidade de bits igual à da palavra, indicando assim a capacidade de processamento do sistema. 2.1.2- Conceito de Arquivos e Registros. Todo processamento em um computador consiste na manipulação de dados segundo um conjunto de instruções que, globalmente, chamamos de programa. Para que seja possível individualizar grupos diferentes de informações (o conjunto de dados de um programa constitui um grupo diferente do conjunto de dados de outro programa, por exemplo), os sistemas operacionais (programas que controlam o armazenamento e recuperação dessas informações para entrada, saída ou guarda em memória secundária) estruturam esses grupos de dados sob uma forma denominada arquivo. Um arquivo de informações (ou dados) é um conjunto formado por dados (ou informações) de um mesmo tipo ou para uma mesma aplicação. Página 8 de 58 ______________________________________________________Organização de Sistemas Operacionais Cada arquivo é constituído por itens individuais de informação chamados registros. Um programa é também um arquivo (embora constituído de um único registro, visto que as instruções não são consideradas como registros individuais). A estrutura de armazenamento e recuperação de informações na memória secundária de um sistema de computação é concebida segundo o conceito de arquivos e registros. Isso porque, na memória secundária, o sistema operacional pode guardar informações em grupos para obter maior eficiência na transferência com a memória principal. O processo é diferente da estrutura da memória principal, onde a preocupação é com itens individuais de informação. 2.2- CLASSIFICAÇÃO DE SISTEMAS DE COMPUTAÇÃO Inicialmente, os computadores eram agrupados em dois tipos: Pessoal: caracterizavam-se pela limitação de recursos de periféricos, pela não conexão com outros equipamentos e pela baixa velocidade de transmissão de dados. Profissional: permitiam a expansão de periféricos à sua configuração básica, maior velocidade de transmissão e a conexão a outros equipamentos. Eram classificados, quanto às características de utilização: Científicos: que possuem uma pequena entrada de dados; um processamento complexo, com grandes rotinas de cálculos e uma pequena saída de resultados. Comerciais: que possuem uma grande entrada de dados; um processamento relativamente simples e uma grande saída de resultados. Quanto às características de operação: Analógicos: computadores que executam trabalhos usando elementos representados por grandezas físicas, como por exemplo, a intensidade de uma corrente elétrica ou o ângulo de giro de uma engrenagem. São computadores criados para uma finalidade específica, isto é, só se aplicam a um determinado trabalho. Os resultados obtidos com o uso de computadores analógicos são aproximados e servem ao próprio sistema onde é utilizado, como por exemplo: controle de temperatura de uma caldeira utilizando sensores, medidor de água ou de energia elétrica. Digitais: computadores que realizam suas operações utilizando elementos representados por grandezas matemáticas (números), ou seja, operam dígito a dígito. São computadores destinados a aplicações múltiplas, podendo ser utilizados em diversas tarefas. Por utilizar valores numéricos, os resultados obtidos com esse tipo de computador são exatos, como por exemplo: os cálculos de engenharia. (O computador analógico "mede" e o computador digital "conta") Quanto às categorias: Microcomputadores ou Computadores Pessoais (PC): São computadores de dimensões relativamente pequenas, de modo que é possível a uma carregá-lo. Podemos classificar os microcomputadores em palmtop, laptop ou desktop. Página 9 de 58 ______________________________________________________Organização de Sistemas Operacionais Computador Palmtop: é um computador pessoal do tamanho de uma agenda ou de calculadora, pesando mais ou menos 600 gramas. É alimentando por pilhas ou por energia convencional, não possui drive interno e tem um sistema operacional residente. Computador Laptop: é um computador pessoal, do tamanho de uma pasta de executivo ou de um livro grosso. Pode ser alimentado por baterias ou energia convencional, utiliza qualquer software ou periférico de um micro de mesa. Computador Desktop: pode ter uso pessoal ou empresarial, pode ser mono ou multiusuário, tem o tamanho aproximado de três caixas de sapato, pesa cerca de 5 kg, mas para ser utilizado exige o acoplamento de um monitor de vídeo e de um teclado. É alimentado via tomada. Estação de Trabalho ou Workstation: é essencialmente um microcomputador projetado para realizar tarefas pesadas, em geral na área cinetífica ou industrial, como complexas computações matemáticas, projetos com auxílio de computação (CAD), fabricação com auxílio de computação (CAM) e a composição, manipulação e apresentação de gráficos e imagens de altíssima resolução. Essas tarefas requerem mais velocidade de processamento, mais capacidade de memória e dispositivo de vídeo de mais alta qualidade do que as características usuais de um microcomputador. Minicomputador: São equipamentos empresariais multiusuários de alta performance, equipados com discos de alta velocidade, geralmente dotados de processadores RISC de alto desempenho. Grande Porte ou Mainframe: São equipamentos empresariais, multiusuários, destinados a instalações que precisam processar grandes quantidades simultâneas de dados e controlar grande quantidade de terminais. Supercomputadores: é projetado primariamente para atender a um único propósito – realizar grandes quantidades de cálculos matemáticos o mais rapidamente possível. Podem realizar aplicações que demandam mais o processador que os demais componentes, tasi como: previsão do tempo, simulação, modelagem tridimensional etc. 2.3- MEDIDAS DE DESEMPENHO DE SISTEMAS DE COMPUTAÇÃO Na busca do aumento de desempenho de sistemas de computação, verifica-se que a medida geral desde desempenho depende fundamentalmente da capacidade e da velocidade de seu diferentes Página 10 de 58 ______________________________________________________Organização de Sistemas Operacionais componentes, da velocidade com que estes componentes se comunicam entre si e do grau de compatibilidade que possa existir entre eles. Para aumentar o desempenho desses sistemas é necessário que todos os seus componentes tenham qualidade adequada para que um deles não comprometa o esforço dos demais. O desempenho dos processadores, em geral, é medido em termos da sua velocidade de trabalho. Como o seu trabalho é executar instruções, criou-se a unidade chamada MIPS (milhões de instruções por segundo) e também a unidade MFLOPS (milhões de operações de ponto flutuante por segundo), que é uma medida típica de estações de trabalho e de supercomputadores, pois estes costumam trabalhar mais cálculos matemáticos. Para tentar equalizar e padronizar as medidas de desempenho de processadores de diferentes fabricantes e com características diferentes, foram desenvolvidos programas de teste e medida denominados SPEC (System Performance Evaluation Coorperative). O conjunto compreende 16 programas de teste e medida, sendo 8 para cálculos com inteiros e 10 para ponto flutuante. Quando se trata de recuperação ou escrita de informações na memória, o tempo de acesso é uma unidade de medida mais apropriada, estando relacionada à velocidade de cada componente e à do canal de interligação entre os dois. Tempo de resposta é uma medida ligada ao desempenho mais global do sistema e não de um ou outro componente. Trata-se do período de tempo gasto entre o instante em que o usuário iniciou uma solicitação ou interrogação e o instante em que o sistema apresentou ao usuário a sua resposta ou atendeu à sua solicitação. Uma outra unidade de medida de desempenho é a vazão (throughput), que define a quantidade de ações ou transações que pode ser realizada por um sistema na unidade de tempo. Quando estamos nos referindo à velocidade com que um determinado dispositivo de entrada ou de saída transfere ou recebe dados da UCP, utilizamos uma unidade que mede a taxa de transferência que o canal de ligação pode suportar, isto é, a quantidade de bits por segundo que pode trafegar pelo referido canal. Página 11 de 58 ______________________________________________________Organização de Sistemas Operacionais CONVERSÃO DE BASE É através de impulsos elétricos, pela polaridade magnética ou pela luz refletida, que a conversão de dados em informações é feita na CPU (Unidade Central de Processamento). Para um computador todos os dados, sejam letras, números ou caracteres especiais, são números. Isto é, a cada letra do alfabeto corresponde um número. Assim, a letra F é representada pelo número 70. Por outro lado, o sistema numérico utilizado pelo computador para processar os dados não é o mesmo utilizado comumente, isto é, o sistema decimal. Na verdade, o computador utiliza principalmente o sistema binário ou de base 2, 0 e 1, para processar os números, assim, o número 70 no sistema decimal que representa a letra F e no sistema binário é 01000110. Outro sistema utilizado é o hexadecimal ou de base 16. Os diferentes sistemas numéricos utilizam um método diferente de representar quantidades, assim, um sistema numérico de base x, utiliza x símbolos naquele sistema. Desta forma: O sistema de base 10 (sistema decimal) utiliza 10 símbolos (de 0 a 9); O sistema de base 16 (sistema hexadecimal) utiliza 16 símbolos; O sistema de base 2 (sistema binário) utiliza 2 símbolos, (0 ,1) e outras bases... 3.1- O SISTEMA NUMÉRICO Surgiu como uma forma de solucionar o problema de armazenamento dos dados. No início do desenvolvimento dos computadores, a tecnologia mecânica disponível permitia construir um dispositivo capaz de armazenar dados reduzindo estes ao seu estado fundamental, onde existem apenas duas condições distintas, ligado ou desligado. Essas duas condições também podem ser descritas como, verdadeiro ou falso, sim ou não, aberto ou fechado, etc. Um dispositivo mecânico disponível na época, o relé, era formado por um interruptor que podia ser ativado quando uma voltagem era aplicada a ele, e desativado quando a voltagem era removida. Se uma lâmpada pudesse ser conectada a um relé, os dois estados possíveis da lâmpada seriam: aceso (1) ou apagado (0). Utilizando uma lâmpada podemos representar somente 2 números, utilizando lâmpadas adicionais podemos representar números cada vez maiores. Quantas combinações serão possíveis utilizando duas lâmpadas? Sabendo que temos dois estados para cada lâmpada: 2x2 = 22 = 4 Com três lâmpadas: 2x2x2 = 23 = 8 Com oito lâmpadas: 2x2x2x2x2x2x2x2 = 28 = 256 Assim se substituirmos cada lâmpada apagada por zero e cada lâmpada acesa por um, será possível começar a contar usando números binários. Na Tabela 1 apresenta-se uma comparação de números em base decimal e binário utilizando três lâmpadas. Página 12 de 58 ______________________________________________________Organização de Sistemas Operacionais DECIMAL (base 10) 0 BINÁRIO (base 2) 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 Tabela 1 Como transformar números em base 10 para a base 2? Os números decimais podem ser decompostos em relação às potências do número 2. NÙMERO DECIMAL 0 1 2 3 4 5 6 7 8 9 10 8 23 1 1 1 NÚMERO BINÁRIO 4 2 22 21 1 1 1 1 0 0 0 Tabela 2 1 1 0 0 1 1 0 0 1 1 20 0 1 0 1 0 1 0 1 0 1 0 Para se fazer a transformação dos números do sistema decimal para o sistema binário devese dividir o número da base 10 por 2, escreve-se o quociente e o resíduo. Se o quociente é maior do que um, divide-se o quociente entre dois. Mais uma vez escreve-se o quociente e o resíduo. Este processo é repetido até que o quociente seja zero. Quando o quociente é zero, escreve-se o quociente e o resíduo. Para se obter o número binário, escreve cada um dos resíduos começando do último até o primeiro de esquerda à direita, isto é, o primeiro resíduo escreve-se à esquerda, o segundo resíduo escreve-se à direita do primeiro, assim por diante. Exemplo 1: Como transformar o número 10 do sistema decimal ao sistema binário? Divisão Quociente Página 13 de 58 Resíduo ______________________________________________________Organização de Sistemas Operacionais 10 / 2 5/2 2/2 1/2 = = = = 5 2 1 0 0 1 0 1 O resultado é: 1010 = 10102 Onde: (Começando de baixo para cima) 1 é o da divisão 1 / 2, 0 é o resíduo da divisão de 2 / 2, 1 é o resíduo da divisão de 5 / 2, 0 é o resíduo da divisão de 10 / 2. Exemplo 2: Como transformar o número 23 do sistema decimal ao sistema binário? Divisão 23 / 2 11 / 2 5/2 2/2 1/2 Quociente 11 5 2 1 0 = = = = = Resíduo 1 1 1 0 1 O resultado é: 2310 = 101112 Onde: 1 é o resíduo da divisão de 1/ 2 , 0 é o resíduo da divisão de 2 / 2, 1 é o resíduo da divisão de 5 / 2, 1 é o resíduo da divisão de 11 / 2, 1 é o resíduo da divisão de 23 / 2, Como transformar números em base 2 para a base 10? Para transformar um número binário a número decimal MULTIPLICA-SE cada dígito binário pela potência e se somam todos os valores. Para se obter o valor da potência, utiliza-se 2n onde 2 é a base e n é o expoente. Como se está transformando um número binário em um decimal, utilizamos a base 2. O expoente indica a posição do dígito. Algumas potências do sistema binário são: 28 256 27 128 26 64 25 32 24 16 23 8 22 4 21 2 Exemplo 1: Como transformar o número binário 11012 ao sistema decimal? 11012 = 1 x 23 + 1 x 22 + 0 x 21 + 1 x 20 = 1 x 8 + 1 x 4 + 0 x 2 + 1 x 1 Página 14 de 58 20 1 ______________________________________________________Organização de Sistemas Operacionais = = 8 + 4 + 0 + 1 13 Resultado: 11012 = 1310 Exemplo 2: Como transformar o número binário 111112 ao sistema decimal? 111112 = 1 x 24 + 1 x 23 + 1 x 22 + 1 x 21 + 1 x 20 = 1 x 16 + 1 x 8 + 1 x 4 + 1 x 2 + 1 x 1 = 16 + 8 + 4 + 2 + 1 = 31 Resultado: 111112 = 3110 Exemplo 3: Como transformar o número binário 1010102 ao sistema decimal? 1010102 = 1 x 25 + 0 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 0 x 20 = 1 x 32 + 0 x 16 + 1 x 8 + 0 x 4 + 1 x 2 + 0 x 1 = 32 + 0 + 8 + 0 + 2 + 0 = 42 Resultado: 1010102 = 4210 Como transformar números em base 10 para a base 16? Outro sistema, muito utilizado, em computação é o Sistema Hexadecimal (BASE 16), isto é, fazendo agrupamento de 4 em 4. O conjunto de símbolos é {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} 10, 11, 12, 13, 14, 15 Exemplo 1: Como transformar o número 231 do sistema decimal ao Hexadecimal? Divisão Quociente Resíduo 231 /16 = 14 7 14 /16 = 0 14 E O resultado é: 23110 = E716 Como transformar números em base 16 para a base 10? Exemplo 1: Como transformar o número hexadecimal 12E ao sistema decimal? 12E16 = 1 x 162 + 2 x 161 + E x 160 = 1 x 256 + 2 x 16 + 14 x 1 = 256 + 32 + 14 = 302 Resultado: 12E16 = 30210 Como transformar números em base 16 para a base 2? Exemplo 1: Como transformar o número 1F de Hexadecimal ao Sistema Binário? Lembrando que F na base hexadecimal é igual a 15. Divisão Quociente Resíduo 1/2 = 0 1 Página 15 de 58 ______________________________________________________Organização de Sistemas Operacionais 15/2 7/2 3/2 1/2 = = = = 7 3 1 0 O resultado é: 1F16 = 1 1 1 1 12 1 1 1 1 Como transformar números em base 2 para a base 16? Lembre: 16 = 24 (agrupamento de 4 em 4) Exemplo 1: Como transformar o número 1 1100 de binário ao sistema hexadecimal? 1 11002 = 1 x 20 =1x1 = 1 = 1 x 23 + 1 x 22 + 0 x 21 + 0 x 20 = 1 x 8 + 1 x 4 + 0 x 2 + 0 x 1 = 8 + 4 + 0 + 0 = 12 = C Resultado: 111002 = 1C16 3.2- A REPRESENTAÇÃO DE DADOS A simplicidade do armazenamento de duas condições diferentes faz com que os equipamentos ainda armazenem dados nesses dois estados fundamentais. A CPU do computador é composta de pequenos interruptores chamados de transistores, algo parecidos aos relés, mas muito mais sofisticados. Os transistores são tão pequenos que uma CPU têm mais de um milhão deles. Cada um dos dados (0 ou 1) é chamado de bit (binary digit). Os bits estão agrupados em unidades maiores para poder representar número e outros símbolos, como os caracteres (incluindo maiúsculas e minúsculas) e os sinais de pontuação que usamos nas linguagens escritas. Por outro lado, procedimentos especiais tais como: a tecla RETURN ou a tecla TAB também devem ser registrados pelo processador. Para se ter o efeito desejado essas teclas especiais têm de produzir caracteres especiais e invisíveis. Esses caracteres são chamados caracteres de controle ou códigos de controle. Os caracteres ou símbolos que queremos ser capazes de representar são: Caracteres alfabéticos maiúsculos Caracteres alfabéticos minúsculos Algarismos Sinais de pontuação e outros símbolos Caracteres de controle Total 26 26 10 32 24 118 Se considerarmos 7 bits, poderíamos representar 27 = 128 caracteres, então sobrariam 10 apenas para gastar com caracteres tais como setas e trevos ou linhas e molduras. Assim, 7 bits não são necessários. Logo, 8 é o número de bits mais lógico para representar uma unidade, isto é um byte. Então, 1 byte = 8 bits. Existem dois sistemas importantes desenvolvidos para representar símbolos com números binários ou bits, EBCDIC e ASCII e um novo padrão, Unicode (Unicódigo). Página 16 de 58 ______________________________________________________Organização de Sistemas Operacionais EBCDIC - Foi um dos primeiros sistemas completos para representar símbolos com bits. A IBM definiu o BCD (Binary Coded Decimal – Decimal Codificado em Binário) para um dos seus primeiros computadores, que consistiam em palavras de 6 bits que permitiam um máximo de 64 símbolos possíveis, assim, só podiam trabalhar com letras maiúsculas outros poucos símbolos. Como outras necessidades foram surgindo, a IBM desenvolveu o sistema EBCDIC (Extended Binary Coded Decimal Interchange Code – Código Ampliado de Caracteres Decimais Codificados em Binário para o Intercâmbio de Dados). Este é um código de 8 bits que define 256 símbolos que é utilizado nos mainframes IBM e em sistemas de médio porte. O código ASCII (American Standard Code for Information Interchange – Código Padrão Americano para o Intercâmbio de Informações) - Era um código de 8 bits, mas o oitavo bit servia a um finalidade especial e era chamado bit de paridade, o qual mais tarde perdeu a sua importância. A IBM encarregou-se de desenvolver uma versão aprimorada do conjunto ASCII que fizesse uso do oitavo bit, permitindo a descrição de 256 símbolos. Na Tabela 3 é mostrada a tabela ASCII nos sistemas: decimal, hexadecimal, octogonal, html e o caractere que representa. Para se obter o caractere desejado basta pressionar a tecla ALT e o número em base de decimal. Assim, # é ALT + 35.e444. Tabela 3 - O código ASCII A seguir apresentam-se, na Tabela 4, os caracteres adicionais do código ASCII, esta tabela muda dependendo do teclado utilizado. Página 17 de 58 ______________________________________________________Organização de Sistemas Operacionais Tabela 4, Código ASCII estendido mais comum (padrão inglês). O Unicódigo ou Unicode é um novo padrão para representação de dados que oferecerá dois bytes para a representação de símbolos. Com dois bytes poderão ser representados mais de 65 mil símbolos ou caracteres diferentes, o que é suficiente para todos os caracteres e símbolos do mundo, incluindo os extensos conjuntos de caracteres e símbolos do chinês, japonês e coreano. Se houvesse um único conjunto disponível para cobrir todos os idiomas do mundo, os programas de computador e os dados seriam intercambiáveis. EXECUÇÃO DE PROGRAMAS Página 18 de 58 ______________________________________________________Organização de Sistemas Operacionais O computador realiza tarefas de acordo com instruções que lhe são fornecidas por um programa. 6.1- PROGRAMA É a seqüência lógica que determina ao computador o que ele deve fazer. Não devemos confundir programa com dados: enquanto o programa define o modo de trabalho do computador, os dados são os elementos que serão manipulados. Para que o computador possa executar um programa, é necessário que consiga entendê-lo, isto só ocorrerá quando as instruções deste programa seguirem uma série de normas e estruturas bem definidas. A escrita de acordo com um conjunto de normas e estruturas preestabelecidas é chamada de linguagem 6.2- LINGUAGEM É uma maneira de comunicação que segue uma forma e uma estrutura com significado interpretável. Portanto, linguagem de programação é um conjunto finito de palavras, comandos e instruções, escrito com o objetivo de orientar a realização de uma tarefa pelo computador. Logicamente, a linguagem que nós utilizamos em nosso dia-a-dia é diferente da linguagem utilizada pela máquina. A máquina trabalha somente com códigos numéricos (linguagem de máquina), baseados nos números O e 1, que representam impulsos elétricos, ausente e presente. Isto é chamado de sistema binário Assim, qualquer linguagem de programação deve estar situada entre dois extremos: o da linguagem natural do homem (muito clara, porém lenta) e o da linguagem de máquina (muito rápida, porém muito complexa). Este é o conceito de nível de linguagem: alto nível para as mais próximas da linguagem do homem; baixo nível para as mais semelhantes à linguagem de máquina. Independentemente do nível da linguagem utilizada, nosso computador continua ”falando” em linguagem de máquina. Por isso, toma-se necessário um meio de tradução entre a linguagem utilizada no programa e a linguagem de máquina. Este meio pode ser dos seguintes tipos: Compilador e Interpretador - para linguagem de alto nível; Assembler (montador) - para linguagem de baixo nível. 6.2.1- Linguagem de Alto Nível É uma linguagem próxima ao homem, com apenas uma instrução o computador produz várias instruções em linguagem de máquina; possui uma linguagem universal para a maioria dos computadores. As principais características de uma linguagem de alto nível são: Página 19 de 58 ______________________________________________________Organização de Sistemas Operacionais A linguagem é mais orientada para o problema, de modo que o programador deve dar pouca ou nenhuma atenção às características do computador que irá executar o programa; Pode ser aproveitado para outro modelo de computador; O número de sentenças a escrever, é multo menor do que o número de instruções que terá o programador em linguagem de máquina. Isto acontece porque o compilador tem a capacidade de “compilar”, isto é, encaixar no programa sub-rotinas já existentes numa biblioteca de rotinas. 6.2.2- Linguagem de Baixo Nível Mais conhecida como “ASSEMBLER”, trabalhando com referências simbólicas que transforma em linguagem de máquina e designa um endereço de memória correspondente. Monta instrução por instrução do programa fonte para o programa objeto. As principais características de uma linguagem de baixo nível são: A linguagem é inteiramente orientada para a máquina. Portanto, o programador que vai escrever um programa numa linguagem de baixo nível deve saber para que modelo de máquina está programando e conhecer o repertório de instruções e as características desse modelo de máquina; Em geral um programa escrito numa linguagem de baixo nível para dados modelo de computador, não pode ser utilizado por outro modelo, a não ser que os dois modelos de máquina sejam compatíveis em programação; O número de sentenças a escrever, numa linguagem simbólica de baixo nível, é aproximadamente igual ao número de instruções que o programa conversor produzirá em linguagem de máquina. 6.2.3- Compilador É um programa interno do computador que traduz nosso programa escrito em linguagem de alto nível (chamado de programa-fonte, pois é a origem do processo) para um programa equivalente escrito em linguagem de máquina (programa-objeto). O esquema de compilação: Programa objeto Programa fonte Linguagem de alto nível Compilador Linguagem de baixo nível Resultado O compilador faz a tradução do programa inteiro para posteriormente ser executado. Ao fazer isto, ele emite o relatório de erros de SINTAXE. Obviamente, um compilador trabalha somente com uma linguagem, já que é um tradutor especifico. Para cada linguagem que você for utilizar em seu computador, deve ter um compilador próprio para traduzi-la. 6.2.4- Interpretador É um programa residente de alguns computadores (neste caso já vem gravado de fábrica), também encontrado em disco. Transforma cada comando de um programa escrito em linguagem de alto nível para o computador executar em linguagem de máquina. A diferença entre o compilador e o interpretador está na maneira de traduzir. Compilador: traduz o programa todo para depois executar apenas o traduzido, então torna a execução mais rápida. Página 20 de 58 ______________________________________________________Organização de Sistemas Operacionais Interpretador: traduz e envia para execução, instrução por instrução e o programa permanece na forma fonte. Vejamos o esquema de interpretador: Programa fonte Linguagem de alto nível Interpretador Resultado Podemos concluir que o interpretador, a partir do programa-fonte, obtém o resultado, e seu trabalho é duplo (por isso, lento), ou seja, interpreta e envia simultaneamente, para execução imediata, as instruções do programa. 6.2.5- Montador Como vimos, a linguagem de baixo nível é muito semelhante à linguagem de máquina, logo não deve ser traduzida, e sim, montada. Quem faz isso é o programa MONTADOR. Seu principio de funcionamento é o mesmo do compilador o programa-fonte escuto em linguagem de baixo nível é montado pelo montador para obtermos um programa em linguagem de máquina e, então, enviar para execução. Esquema do funcionamento do montador: Programa fonte Linguagem de baixo nível Programa objeto Montador Linguagem de máquina Página 21 de 58 Resultado ______________________________________________________Organização de Sistemas Operacionais SOFTWARE Para seu computador funcionar de fato, ou seja, servir à você, precisará “rodar” programas que sejam de seu interesse. Quando dizemos “rodar” estamos utilizando um termo da informática que significa executar, fazer funcionar um programa ou software. Temos dois grandes grupos de software: o livre e o proprietário. O software proprietário é desenvolvido e distribuído para venda por uma empresa (por exemplo, a Microsoft). Quando “compramos” um software deste tipo, apenas compramos a licença de uso dele. O software livre “é uma questão de liberdade, não de preço”. Refere-se à liberdade dos usuários com relação ao software, mais precisamente: A liberdade de executar o programa para qualquer propósito; A liberdade de estudar como o programa funciona e adaptá-lo para as suas necessidades. Acesso ao código-fonte é um pré-requisito para essa liberdade; A liberdade de redistribuir cópias de modo que você possa ajudar o seu próximo; A liberdade de aperfeiçoar o programa e liberar os seus aperfeiçoamento, de modo que toda a comunidade se beneficie. São incontáveis a quantidade de softwares existente atualmente. São programas com as mais diversas funções. Basicamente, entretanto, existem três tipos de grupos de softwares: Sistemas Operacionais, Aplicativos e Desenvolvedores. 7.1- SISTEMAS OPERCAIONAIS Um Sistema Operacional é o chefe dos softwares. Sem ele nenhum software pode ser executado. Ele é uma espécie de “gerente” do computador, responsável por controlar a máquina para os outros programas rodarem. Ele gerencia seus discos e arquivos, controla como o monitor exibe a imagem, define as prioridades de impressão de uma impressora, reserva um espaço da memória para cada programa, enfim, organiza tudo para nós rodarmos nossos programas. Existem alguns tipos de Sistemas Operacionais: MS-DOS (Microsoft Disc Operation System), Windows (95, 98, Millenium, 2000, 2003, NT, XP - todos da Microsoft), OS2-Warp (da IBM), Unix, Mac OS (da Apple, para computadores Machitosh), dentre outros. Cada Sistema Operacional tem uma finalidade e é produzido para um determinado tipo de computador. O Windows XP, por exemplo, é o principal Sistema Operacional para PCs, e o mais vendido hoje em dia. 7.2- SOFTWARES APLICATIVOS São programas que cumprem finalidades específicas para determinados grupos de pessoas ou interesses individuais Alguns aplicativos complementam o sistema operacional, mas a maior parte deles apenas utilizam o sistema operacional para desenvolver suas funções. Na maioria têm funções específicas muito importantes. Página 22 de 58 ______________________________________________________Organização de Sistemas Operacionais SOFTWARE FUNÇÃO APLICATIVO Editores de Texto Planilhas Eletrônicas Gerenciadores de Banco de Dados Softwares de Apresentação Editores Gráficos e Editoração Eletrônica Produzem documentos, cartas, malas-diretas, jornais, livros, etc. Ajudaram a acabar com a máquina-de-escrever, pois permitem corrigir um erro automaticamente, e melhorar o texto quando bem desejar, aumentando o tamanho da letra, alterando a cor, dividindo em colunas, inserindo um desenho ou foto, etc. Os principais editores de texto são Word (Microsoft), WordPró (Lotus) e Word Perfect (Corel). São editores especiais, capazes de construir planilhas de cálculos, envolvendo fórmulas que você cria ou muitas outras científicas, financeiras, etc. As planilhas eletrônicas criam ainda gráficos com variados recursos em 3D, dentre muitas outras aplicações. Com as planilhas você pode construir apresentações utilizando programação, sofisticando um relatório financeiro com resultados de cálculos, botões que realizam movimentações e ações, tudo em um único documento, ou pasta, como é chamada. As principais planilhas eletrônicas são o Excel (Microsoft), Lotus 1-2-3 (Lotus), QuattroPro (Corel), dentre outras. São programas de uso específico para o controle e gerenciamento de dados. Servem, por exemplo, para uma empresa que deseja controlar seus clientes, endereço, dados, e atrelá-los à diversos tipos de consulta e exibição, desde relatórios até o envio de cobrança. Como exemplos temos o Access (Microsoft), Dbase, Approach e o Fox Pró. Os softwares gráficos para apresentações são ferramentas de trabalho extraordinárias à disposição do usuário de microcomputadores. Trata-se de softwares que permitem a criação de apresentações, essenciais quando se deseja transmitir uma idéia, apresentar um novo projeto, ministrar treinamentos e palestras ou simplesmente criar um folheto. Esses softwares permitem a criação de apresentações eficientes com facilidade. Entre os softwares que se enquadram nessa categoria, merecem destaque produtos como o PowerPoint (Microsoft) e Freelance (Lótus). São programas específicos, com a capacidade de trabalhar com alta resolução gráfica e produzir criações profissionais, como jornais, panfletos publicitários, etc., utilizando fotos, imagens e layout próprio. Destacam-se nos editores gráficos o Corel, Photo Style, MS Imager, Imager Composer, etc. Entre os programas de editoração eletrônica o Page Maker, Publisher, dentre outros. 8.3- SOFTWARES DESENVOLVEDORES São programas com a finalidade especial de criar programas. Muitos de nossos programas foram criados por eles, e utilizam diferentes linguagens de programação, dependendo da finalidade desse programa. Quando queremos criar algum programa, utilizamos estes desenvolvedores, e digitamos ou usamos seus recursos de criação. Ao criarmos o programa, o desenvolvedor compila-o, ou seja, transforma o editado em um arquivo de execução do programa. Dependendo do uso e como foi criado, os desenvolvedores podem ser usados para distintas situações. Como exemplo, temos o Visual Basic (da Microsoft), o C++ Builder, Active X, J++ Builder e Delphi. 8.4- VÍRUS E ANTIVÍRUS Um vírus de computador nada mais é que um programa ou instrução de máquina que visa prejudicar o próprio usuário ou a terceiros. Em informática, um vírus de computador é um programa malicioso desenvolvido por programadores que, tal como um vírus biológico, infecta o sistema, faz cópias de si mesmo e tenta se espalhar para outros computadores, utilizando-se de diversos meios. Em 2007, foram detectados cerca de 150.000 vírus conhecidos. A maioria das contaminações ocorrem do usuário executando o arquivo infectado recebido como um anexo de um e-mail. A segunda causa de contaminação é por Sistema Operacional desatualizado, sem a aplicação de corretivos, que poderiam corrigir vulnerabilidades conhecidas dos sistemas operacionais ou aplicativos, que poderiam causar o recebimento e execução do vírus inadivertidamente. Página 23 de 58 ______________________________________________________Organização de Sistemas Operacionais Ainda existem alguns tipos de vírus que permanecem ocultos em determinadas horas, entrando em execução em horas especificas. 8.4.1- Possíveis Danos Perda de desempenho do computador; Exclusão de arquivos; Alteração de dados; Acesso a informações confidenciais por pessoas não autorizadas; Perda de desempenho da rede (local e Internet); Monitoramento de utilização (espiões); Desconfiguração do Sistema Operacional; Inutilização de determinados programas. 8.4.2- Nomenclatura dos Vírus Ainda não existe uma padronização na escolha do nome de um vírus. Um mesmo vírus recebe diferentes nomes das várias firmas de antivírus. A Symantec apresenta um pequeno glossário no seu site onde ela se baseia para dar nome a um determinado vírus. Ela mantém o objetivo de ao denominar os vírus, indicar já no seu nome certas características, a fim de melhor classificar a ação do mesmo e garantido a melhor confiabilidade. A U. S. Computer Emergency Readiness Team (US-CERT), equipe de segurança digital do governo norte-americano, está propondo uma unificação dos nomes. Apresentou um sistema único de nomenclatura, chamado de “Denominação Comum para Códigos Maliciosos” (CME, na sigla em inglês), visando o fim das diferenças de nomenclatura. 8.4.3- Assinaturas dos Vírus As assinaturas dos vírus são uma seqüência de caracteres que o representa. É através desta seqüência que os antivírus identificam os arquivos contaminados, pois na maioria dos casos os vírus passam uma parte de seu código para os arquivos ao contamina-los. As assinaturas são definidas pelas empresas desenvolvedoras de antivírus com o objetivo de: Evitar os falso-positivos (quando um arquivo sadio é apontado como infectado); Reconhecer o maior número de variantes do vírus; Identificar o código mal intencionado na maior quantidade de arquivos possível. As assinaturas definidas pelas empresas não são as mesmas para todos os softwares antivírus, portanto um antivírus de uma marca pode detectar uma variante de um vírus conhecido (pelo fato da parte do código alterado pela variante não afetar a assinatura definida) e outro antivírus de outra marca pode não detectá-lo. Página 24 de 58 ______________________________________________________Organização de Sistemas Operacionais 8.4.4- Técnicas de Esconderijo dos Vírus Os vírus (seja de que tipo forem) escondem-se e protegem-se cada vez melhor dos antivírus e do acesso das pessoas. Eis algumas técnicas usadas por alguns vírus: Técnica Modo de Agir Encriptação Os vírus usam a encriptação para que o código não fique visível para os antivírus e para que não possam ser pagados da pasta original. Esta técnica é usada para que os vírus permaneçam mais tempo no computador. Mas os antivírus da atualidade já estão preparados contra esta técnica, apesar de ser difícil conseguirem elimina-los. Desativação de antivírus Quando os vírus desativam os antivírus, eles não são identificados e consequentemente não são removidos. Esconder-se em pastas do sistema As pessoas não querem estragar os seu sistema operacional removendo pastas do sistema, portanto muitos vírus escondem-se lá para evitar que o usuário os remova manualmente. Cookie Alguns cookies armazenados por sites mal intencionados, podem possuir linhas e códigos que visam roubar informações. Outros casos são de vírus que roubam cookies para obter logins e senhas. 8.4.5- Crackers x Hackers Há quem diga que cracker e hacker são a mesma coisa, mas tecnicamente há uma diferença. Hackers são os que quebram senhas, códigos e sistemas de segurança por puro prazer em achar tais falhas. Preocupam-se em conhecer o funcionamento mais íntimo de um sistema computacional ou seja uma pessoa “boa”. Já os Crackers são os criminosos virtuais, que extorquem pessoas usando seus conhecimentos, usando as mais variadas estratégias. Há cerca de 20 anos, eram aficcionados em informática, conheciam muitas linguagens de programação e quase sempre jovens, que criavam seus vírus, para muitas vezes, saber o quanto eles poderiam se propagar. Hoje em dia é completamente diferente; são pessoas que atacam outras máquinas com fins criminosos com um objetivo traçado: capturar senhas bancárias, números de contas e informações privilegiadas que lhes despertem a atenção. Em geral, um hacker não gosta de ser confundido com um cracker. 8.4.6- Tipos de Vírus de Computador Tipos Ação Vírus de Boot Um dos primeiros tipos de vírus conhecido, este vírus infecta a partição de inicialização do sistema operacional. Assim, ele é ativado quando o computador é ligado e o sistema operacional é carregado. Time Bomb São programados para se ativarem em determinados momentos, definidos pelo seu criador. Uma vez infectado um determinado sistema, o vírus somente se tornará ativo e causará algum tipo de dano no dia ou momento previamente definido. Minhocas, Worm ou Vermes Com o interesse de fazer um vírus se espalhar da forma mais abrangente possível, seus criadores por vezes, deixaram de lado o desejo de danificar o sistema dos usuários infectados e passaram a programar seus vírus de forma que apenas se repliquem, sem o objetivo de causar graves danos ao sistema. Desta forma, seus autores visam tornar suas criações mais Página 25 de 58 ______________________________________________________Organização de Sistemas Operacionais Tipos Ação conhecidas na Internet. Eles estão mais aperfeiçoados, já há uma versão que ao atacar a máquina hospedeira, são só se replica, mas também se propaga pela internet pelos e-mail que estão registrados no cliente de e-mail, infectando as máquinas que abrirem aquele e-mail, reiniciando o ciclo. Trojans ou Cavalos de Tróia Estes vírus trazem em seu bojo um código a parte, que permite a um estranho acessar o micro infectado ou coletar dados e envia-los pela internet para um desconhecido, sem notificar o usuário. Inicialmente, permitiam que o micro infectado pudesse receber comandos externos, sem o conhecimento do usuário. Desta forma o invasor poderia ler, copiar, apagar e alterar dados do sistema. Atualmente procuram roubar dados confidenciais do usuário, como senhas bancárias. Hijackers São programas ou scripts que “seqüestram” navegadores de Internet, principalmente o Internet Explorer. Quando isto ocorre, este altera a página inicial do browser e impede de muda-la, exibe propagandas em pop-ups ou janelas novas, instala barras de ferramentas no navegador e podem impedir acesso a determinados sites (como sites de software de antivírus, por exemplo). Vírus de Orkut Em 2007, houve muitas ocorrências deste tipo de vírus. Ele é capaz de enviar scraps (recados) automaticamente para todos os contados da vítima na rede social, além de roubar senhas e contas bancárias de um computador infectado através da captura de teclas e cliques. Apesar de que aqueles que receberem o recado precisam clicar em um link para se infectar, a relação de confiança existente entre os amigos aumenta muito a possibilidade de o usuário clicar sem desconfiar de que o link leva para um worm. Ao clicar no link, um arquivo bem pequeno é baixado para o computador do usuário. Ele se encarrega de baixar e instalar o restante das partes da praga, que enviará a mensagem para todos os contados do Orkut, o vírus também rouba senhas de banco, em outras palavras, é um clássico Banker. Keylogger É uma das espécies de vírus existentes, é um capturador de teclas. Ao serem executados, normalmente os keyloggers ficam escondidos no sistema operacional, sendo assim a vítima não tem como saber que está sendo monitorada. Atualmente, os leyloggers são desenvolvidos para meios ilícitos. São utilizados também por usuários com um pouco mais de conhecimento para obter senhas pessoais, como e-mail, orkut, MSN, entre outros. Existem tipos que capturam a tela da vítima, sendo assim, quem implantou-o tem controle sobre o que a pessoa está fazendo no computador. Estado Zumbi Ocorre quando é infectado e está sendo controlado por terceiros. Podem usa-lo para disseminar vírus, keyloggers e procedimentos invasivos em geral. Usualmente esta situação ocorre pelo fato da máquina estar com o seu Firewall e/ou Sistema Operacional desatualizados. Vírus de Macro Vinculam suas macros a modelos de documentos gabaritos e a outros arquivos de modo que, quando um aplicativo carrega o arquivo e executa as instruções nele contidas, as primeiras instruções executadas serão as do vírus. 8.4.7- Antivírus Os antivírus são programas desenvolvidos pro firmas de segurança, com o objetivo de detectar e eliminar vírus encontrados no computador. Os antivírus possuem uma base de dados contendo as assinaturas dos vírus de quem podem eliminar. Desta forma, somente após a atualização de seu banco de dados, os vírus recém-descobertos podem ser detectados. Alguns antivírus dispõem da tecnologia heurística, que é uma forma de detectar a ação de um vírus ainda desconhecido através de sua ação no sistema do usuário. Hoje em dia os antivírus podem ter proteção em tempo real que detecta os códigos maliciosos desde que você inicie o computador até que o desligue. Esta tecnologia torna mais fácil de o usuário ficar protegido. O segredo do antivírus é mantê-lo atualizado, e essa é uma tarefa que a maioria deles já faz automaticamente, bastando estar conectado à Internet para ser baixado do site do fabricante a atualização e estar configurado para isso. Página 26 de 58 ______________________________________________________Organização de Sistemas Operacionais SISTEMA OPERACIONAL 9.1- VISÃO GERAL Um sistema operacional, por mais complexo que possa parecer, é apenas um conjunto de rotinas executado pelo processador, de forma semelhante aos programas dos usuários. Sua principal função é controlar o funcionamento de um computador, gerenciando a utilização e o compartilhamento dos seus diversos recursos, como processadores, memórias e dispositivos de entrada e saída. Sem o sistema operacional, um usuário para interagir com o computador deveria conhecer profundamente diversos detalhes sobre hardware do equipamento, o que tornaria seu trabalho lento e com grandes possibilidades de erros. O sistema operacional tem como objetivo funcionar como uma interface entre usuário e o computador, tornando sua utilização mais simples, rápida e segura. A grande diferença entre um sistema operacional e aplicações convencionais é a maneira como suas rotinas são executadas em função do tempo. Um sistema operacional não é executado de forma linear como a maioria das aplicações, com início, meio e fim. Suas rotinas são executadas concorrentemente em função de eventos assíncronos, ou seja, eventos que podem ocorrer a qualquer momento. 9.2- FUNÇÕES BÁSICAS Um sistema operacional possui inúmeras funções, contudo é importante saber suas funções básicas. São elas: Facilidade de acesso aos recursos do sistema: um computador ou sistema operacional possui diversos dispositivos. Quando utilizamos um desses dispositivos, não nos preocupamos com a maneira como é realizada esta comunicação e os inúmeros detalhes envolvidos nas operações de leitura e gravação. O sistema operacional serve de interface entre os usuários e os recursos disponíveis, tornando esta comunicação transparente, além de permitir um trabalho mais eficiente e com menores chances de erros. Este conceito de ambiente simulado, criado pelo sistema operacional, é denominado máquina virtual e está presente na maioria dos sistemas modernos. É comum pensar-se que compiladores, linkers, bibliotecas, depuradores e outras ferramentas fazem parte do sistema operacional, mas, na realidade, estes recursos são apenas utilitários, destinados a facilitar a interação do usuário com o computador. Compartilhamento de recursos de forma organizada e protegida: em sistemas onde diversos usuários compartilham recursos do sistema computacional, é necessário controlar o uso concorrente desses recursos. O compartilhamento de recursos permite, também, a diminuição de custos, na medida em que mais de um usuário pode utilizar as mesmas facilidades concorrentemente, como discos, impressoras, linhas de comunicação etc. 9.3- TIPOS DE SISTEMAS OPERACIONAIS Os tipos de sistemas operacionais e a sua evolução estão relacionados diretamente com a evolução do hardware e das aplicações por ele suportados. A evolução dos sistemas operacionais para computadores pessoais e estações de trabalho popularizou diversos conceitos e técnicas, antes só conhecidos em ambientes de grande porte. A nomenclatura, no entanto, não se manteve a mesma. Surgiram novos termos para conceitos já conhecidos, que foram apenas adaptados para urna nova realidade. Página 27 de 58 ______________________________________________________Organização de Sistemas Operacionais 9.3.1- Sistemas Monoprogramáveis/Monotarefa Os primeiros sistemas operacionais eram tipicamente voltados para a execução de um único programa. Qualquer outra aplicação, para ser executada, deveria aguardar o término do programa corrente. Os sistemas monoprogramáveis como vieram a ser conhecidos, se caracterizam por permitir que o processador, a memória e os periféricos permaneçam exclusivamente dedicados à execução de um único programa. Os sistemas monoprogramáveis estão tipicamente relacionados ao surgimento dos primeiros computadores na década de 1960. Posteriormente, com a introdução dos computadores pessoais e das estações de trabalho na década de 1970, este tipo de sistema voltou a ser utilizado para atender máquinas que, na época, eram utilizadas por apenas um usuário na execução de um único programa. Os sistemas nonotarefa, como também são chamados, se caracterizam por permitir que todos os recursos do sistema fiquem exclusivamente dedicados a uma única tarefa. Neste tipo de sistema, enquanto um programa aguarda por um evento, como a digitação de um dado, o processador permanece ocioso, sem realizar qualquer tipo de processamento. A memória é subutilizada caso o programa não a preencha totalmente, e os periféricos, como discos e impressoras, estão dedicados a um único usuário, nem sempre utilizados de forma integral. Comparados a outros sistemas, os sistemas monoprogramáveis ou monotarefa são de simples implementação, não existindo muita preocupação com problemas decorrentes do compartilhamento de recursos, como memória, processador e dispositivos de E/S. Página 28 de 58 ______________________________________________________Organização de Sistemas Operacionais 9.3.2- Sistemas Multiprogramáveis/Multitarefa Os sistemas multiprogramáveis ou multitarefa são uma evolução dos sistemas monoprogramáveis. Neste tipo de sistema, os recursos computacionais são compartilhados entre os diversos usuários e aplicações. Enquanto em sistemas monoprogramáveis existe apenas um programa utilizando os recursos disponíveis, nos multiprogramáveis várias aplicações compartilham esses mesmos recursos. Neste tipo de sistema, enquanto um programa espera por uma operação de leitura ou gravação em disco, outros programas podem estar sendo processados neste mesmo intervalo de tempo. Nesse caso, podemos observar o compartilhamento da memória e do processador. O sistema operacional se preocupa em gerenciar o acesso concorrente aos seus diversos recursos, como memória, processador e periféricos, de forma ordenada e protegida, entre os diversos programas. As vantagens do uso de sistemas multiprogramáveis são a redução do tempo de resposta das aplicações processadas no ambiente e de custos, a partir do compartilhamento dos diversos recursos do sistema entre as diferentes aplicações. Os sistemas multiprogramáveis, apesar de mais eficientes que os monoprogramáveis, são de implementação muito mais complexa. A partir do número de usuários que interagem com o sistema, podemos classificar os sistemas multiprogramáveis como monousuário ou multiusuário. Sistemas multiprogramavéis monousuário são encontrados em computadores pessoais e estações de trabalho, onde há apenas um único usuário interagindo com o sistema. Neste caso existe a possibilidade da execução de diversas tarefas ao mesmo tempo como a edição de um texto, uma impressão e o acesso à Internet. Sistemas multiprogramaveis multiusuário são ambientes interativos que possibilitam diversos usuários conectarem-se ao sistema simultaneamente. Os sistemas multiprogramáveis ou multitarefa podem ser classificados pela forma com que suas aplicações são gerenciadas, podendo ser divididos em sistemas batch, de tempo compartilhado ou de tempo real. Um sistema operacional pode suportar um ou mais desses tipos de processamento, dependendo de sua implementação. Página 29 de 58 ______________________________________________________Organização de Sistemas Operacionais Sistema Características Batch Foram os primeiros tipos de sistemas operacionais multiprogramáveis a serem implementados na década de 1960. Tem a característica de não exigir a interação do usuário com a aplicação. Todas as entradas e saídas de dados são implementadas por algum tipo de memória secundária, geralmente arquivos em disco. Esses sistemas, quando bem projetados, podem ser bastante eficientes, devido à melhor utilização do processador, entretanto podem oferecer tempos de resposta longos. Atualmente, os sistemas operacionais implementam ou simulam o processamento em batch, não existindo sistemas exclusivamente dedicados a este tipo de processamento. De Tempo Compartilhado (ou time-sharing) Permitem que diversos programas sejam executados a partir da divisão do tempo do processador em pequenos intervalos, denominados fatia de tempo (time-slice). Caso a fatia de tempo não seja suficiente para a conclusão do programa, ele é interrompido pelo sistema operacional e substituído por um outro, enquanto fica aguardando por uma nova fatia de tempo. O sistema cria para cada usuário um ambiente de trabalho próprio, dando a impressão de que todo o sistema está dedicado exclusivamente a ele. Estes sistemas permitem a interação dos usuários com o sistema através de terminais que incluem vídeo, teclado e mouse. Esse sistemas possume uma linguagem de controle que permite ao usuário comunicar-se diretamente com o sistema operacional através de comandos. Desta forma é possível verificar arquivos armazenados em disco ou cancelar a execução de um programa. O sistema, normalmente, responde em poucos segundos à maioria desses comandos. Devido a esse tipo de interação, os sistemas de tempo compartilhado também ficaram conhecidos como sistemas online. A maioria das aplicações comerciais atualmente é processada em sistemas de tempo compartilhado, pois elas oferecem tempos de resposta razoáveis a seus usuários e custos mais baixos, em função da utilização compartilhada dos diversos recursos do sistema. De Tempo Real São implementados de forma semelhante aos sistemas de tempo compartilhado. O que caracteriza a diferença entre os dois tipos de sistemas é o tempo exigido no processamento das aplicações. Enquanto em sistemas de tempo compartilhado o tempo de processamento pode variar sem comprometer as aplicações em execução, nos sistemas de tempo real os tempos de processamento devem estar dentro de limites rígidos, que devem ser obedecidos, caso contrário poderão ocorrer problemas irreparáveis. Não existe a idéia de fatia de tempo, implementada nos sistemas de tempo compartilhado. Um programa utiliza o processador o tempo que for necessário ou até que apareça outro mais prioritário. A importância ou prioridade de execução de um programa é definida pela própria aplicação e não pelo sistema operacional. 9.3.3- Sistemas com Múltiplos Processadores Os sistemas com múltiplos processadores caracterizam-se por possuir duas ou mais UCPs interligadas e trabalhando em conjunto. A vantagem deste tipo de sistema é permitir que vários programas sejam executados ao mesmo tempo ou que um mesmo programa seja subdivido em partes para serem executadas simultaneamente em mais de um processador. Com múltiplos processadores foi possível a criação de sistemas computacionais voltados, principalmente, para processamento científico aplicado. A princípio qualquer aplicação que faça uso intensivo da UCP será beneficiada pelo acréscimo de processadores ao sistema. A evolução desses sistemas devesse, em grande parte, ao elevado custo de desenvolvimento de processadores de alto desempenho. Os conceitos aplicados ao projeto de sistemas com múltiplos processadores incorporam os mesmos princípios básicos e benefícios apresentados na multiprogramação, além de outras características e vantagens específicas como escalabilidade, disponibilidade e balanceamento de carga. Página 30 de 58 ______________________________________________________Organização de Sistemas Operacionais Escalabilidade: é a capacidade de ampliar o poder computacional do sistema apenas adicionando novos processadores. Em ambientes com um único processador, caso haja problemas de desempenho, seria necessário substituir todo o sistema por uma outra configuração com amior poder de processamento. Com a possibilidade de múltiplos processadores, basta acrescentar novos processadores à configuração. Disponibilidade: é a capacidade de manter o sistema em operação mesmo em casos de falhas. Neste caso, se um dos processadores falhar, os demais podem assumir suas funções de maneira transparente aos usuários e suas aplicações , embora com menor capacidade de computação. Balanceamento de carga: é a possibilidade de distribuir o processamento entre os diversos processadores da configuração a partir da carga de trabalho de cada processador, melhorando assim, o desempenho do sistema como um todo. Um fator-chave no desenvolvimento de sistemas operacionais com múltiplos processadores é a forma de comunicação entre as UCPs e o grau de compartilhamento da memória e dos dispositivos de entrada e saída. Em função destes fatores, podemos classificar os sistemas com múltiplos processadores em fortemente acoplados e fracamente acoplados. A grande diferença entre os dois sistemas é que em sistemas fortemente acoplados existe apenas uma memória principal sendo compartilhada por todos os processadores, enquanto nos fracamente acoplados cada sistema tem sua própria memória individual. Além disso, a taxa de transferência entre processadores e memória em sistemas fortemente acoplados é muito maior que nos fracamente acoplados. Sistemas com Múltiplos Processadores Fortemente acoplados Características Existem vários processadores compartilhando uma única memória física e dispositivos de entrada/saída sendo gerenciados por apenas um sistema operacional. Em função destas características, os sistemas fortemente acoplados também são conhecidos como multiprocessadores. Inicialmente, os sistemas com múltiplos processadores estavam limitados aos sistemas de grande porte, restritos ao ambiente universitário e às grandes corporações. Com a evolução dos computadores pessoais e das estações de trabalho, os sistemas multitarefa evoluíram para permitir a existência de vários processadores. Atualmente, a grande maioria dos sistemas operacionais, como o Unix e o Microsoft Windows, implementa esta funcionalidade. Fracamente acoplados Caracterizam-se por possuir dois ou mais sistemas computacionais conectados através de linhas de comunicação. Cada sistema funciona de forma independente, possuindo seu próprio sistema operacional e gerenciando seus próprios recursos. Em função destas características, os sistemas fracamente acoplados também são conhecidos como multicomputadores. Neste modelo, cada sistema computacional também pode ser formado por um ou mais processadores. Página 31 de 58 ______________________________________________________Organização de Sistemas Operacionais (Figura 1.5) ESTRUTURA DO SISTEMA OPERACIONAL 10.1- INTRODUÇÃO O sistema operacional é formado por um conjunto de rotinas que oferecem serviços aos usuários, ás suas aplicações, e também ao próprio sistema. Esse conjunto de rotinas é denominado núcleo do sistema ou kernel. É importante não confundir o núcleo do sistema com aplicações, utilitários ou o interpretador de comandos, que acompanham o sistema operacional (Fig.4.1). As aplicações são utilizadas pelos usuários e escondem todos os detalhes da interação com o sistema. Os utilitários, como compiladores e editores de texto, e interpretadores de comandos permitem aos usuários, administradores e desenvolvedores uma interação amigável com o sistema. Existe uma grande dificuldade em compreender a estrutura e o funcionamento de um sistema operacional, pois ele não é executado como uma aplicação tipicamente seqüencial, com inicio, meio e fim. Os procedimentos do sistema são executados concorrentemente sem uma ordem predefinida, com base em eventos dissociados do tempo (eventos assíncronos). Muitos desses eventos estão relacionados ao hardware e a tarefas internas do próprio sistema operacional. As principais funções do núcleo encontradas na maioria dos sistemas comerciais estão listadas a seguir. No decorrer do livro, estaremos abordando estas funções em detalhes: • • • • • • • • • • tratamento de interrupções e exceções; criação e eliminação de processos e threads; sincronização e comunicação entre processos e threads; escalonamento e controle dos processos e threads; gerência de memória; gerência do sistema de arquivos; gerência de dispositivos de E/S; suporte a redes locais e distribuídas; contabilização do uso do sistema; auditoria e segurança do sistema. A estrutura do sistema operacional, ou seja, a maneira corno o código do sistema é organizado e o inter-relacionamento entre seus diversos componentes, pode variar conforme a concepção do projeto. Existem diversas abordagens em relação à estrutura de sistemas operacionais que serão tratadas no decorrer do capitulo. Inicialmente serão apresentados os conceitos de system calls e do mecanismo de modos de acesso. 10.2- SYSTEM CALLS Uma preocupação que surge nos projetos de sistemas operacionais e a implementação de mecanismos de proteção ao núcleo do sistema e de acesso aos seus serviços. Caso uma aplicação que tenha acesso ao núcleo realize uma operação que altere sua integridade, todo o sistema poderá ficar comprometido e inoperante. Página 32 de 58 ______________________________________________________Organização de Sistemas Operacionais As system calls podem ser entendidas como uma porta de entrada para o acesso ao núcleo do sistema operacional e a seus serviços. Sempre que um usuário ou aplicação desejar algum serviço do sistema, é realizada uma chamada a uma de suas rotinas através de uma system call (chamada ao sistema). O termo system call é tipicamente utilizado em sistemas Unix, porém em outros sistemas o mesmo conceito é apresentado com diferentes nomes, como system services no Open VMS e Application Program Interface (API) no Windows da Microsoft. Para cada serviço disponível existe uma system call associada e cada sistema operacional tem seu próprio conjunto de chamadas, com nomes. parâmetros e formas de ativação específicos (Fig. 4.2). Isto explica por que uma aplicação desenvolvida utilizando serviços de um determinado sistema operacional não pode ser podada diretamente para um outro sistema. Uma tentativa de criar uma biblioteca de chamada.s padronizadas foi proposta pelos institutos ISO e IEEE. O padrão POSIX (Portable Operating System Interface for Unix), como foi definido, permitiu que uma aplicação desenvolvida seguindo este conjunto de chamadas pudesse ser executada em qualquer sistema operacional que oferecesse suporte ao padrão. Inicialmente voltado para a unificação das diversas versões do sistema Unix, o POSIX foi incorporado, posteriormente, pela maioria dos sistemas operacionais modernos. Através 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 algum erro. O mecanismo de ativação e comunicação entre o programa e o sistema operacional é semelhante ao mecanismo implementado quando um programa chama uma sub-rotina. As system calls podem ser divididas por grupos de funcão (Tabela 4.1). A maioria dos programadores e usuários desconhece os detalhes envolvidos, por exemplo, em um simples comando de leitura a um arquivo utilizando uma linguagem de alto nível. De forma simplificada, o comando da linguagem de alto nível é convertido pelo compilador para uma chamada a uma svstem call especifica, que, quando executada, verifica a ocorrência de erros e retorna os dados ao programa de forma transparente ao usuário. 10.3- MODOS DE ACESSO Existem certas instruções que não podem ser colocadas diretamente á disposição das aplicações, pois a sua utilização indevida ocasionaria sérios problemas à integridade do sistema. Suponha que uma aplicação atualize um arquivo em disco. O programa, por si só não pode especificar diretamente as instruções que acessam seus dados no disco. Como o disco é um recurso compartilhado, sua utilização deverá ser gerenciada unicamente pelo sistema operacional, evitando que a aplicação possa ter acesso a qualquer área do disco indiscriminadamente. O que poderia comprometer a segurança e integridade do sistema de arquivos. Página 33 de 58 ______________________________________________________Organização de Sistemas Operacionais Funções System calls Criação e eliminação de processos e threads Gerência de Processos e Threads Alteração das características de processos e threads Sincronização e comunicação entre processos e threads Obtenção de informações sobre processos e threads Gerência de memória Alocação e desalocação de memória Criação e eliminação de arquivos e diretórios Alteração das características de arquivos e diretórios Gerência do sistema de arquivos Abrir e fechar arquivos Leitura e gravação em arquivos Obtenção de informações sobre arquivos e diretórios Gerencia de dispositivos Alocação e desalocação de dispositivos Operações de entrada/saída em dispositivos Obtenção de informações sobre dispositivos Como visto, fica claro que existem certas instruções que só devem ser executadas pelo sistema operacional ou sob sua supervisão, impedindo, assim a ocorrência de problemas de segurança e integridade do sistema. As instruções que têm o poder de comprometer o sistema são conhecidas como instruções privilegiadas, enquanto as instruções não privilegiadas são as que não oferecem risco ao sistema. Para que uma aplicação possa executar uma instrução privilegiada, é necessário que no processador seja implementado o mecanismo de proteção conhecido como modos de acesso. Existem. basicamente, dois modos de acesso implementados pelos processadores: modo usuário e modo kernel. Quando o processador trabalha no modo usuário, uma aplicação só pode executar instruções nãoprivilegiadas, tendo acesso a um número reduzido de instruções, enquanto no modo kernel ou supervisor a aplicação pode ter acesso ao conjunto total de instruções do processador. O modo de acesso de uma aplicação é determinado por um conjunto de bits localizado no registrador de status do processador, ou PSW, que indica o modo de acesso corrente. Através desse registrador, o hardware verifica se a instrução pode ou não ser executada pela aplicação. A melhor maneira de controlar o acesso as instruções privilegiadas é permitir que apenas o sistema operacional tenha acesso a elas. Sempre que uma aplicação necessita executar uma instrução privilegiada, a solicitação deve ser realizada através de uma chamada a uma system call, que altera o modo de acesso do processador do modo usuário para o modo kernel. Ao término da execução da rotina do sistema, o modo de acesso retorna para o modo usuário. Caso uma aplicação tente executar uma instrução privilegiada diretamente em modo usuário, o processador sinalizará um erro, uma exceção é gerada e a execução do programa é interrompida. Utilizando o mesmo problema do acesso ao disco apresentado, para o programa atualizar um arquivo em disco a aplicação deve solicitar a operação de E/S ao sistema operacional por meio de uma system call, que altera o modo de acesso do processador de usuário para kernel. Após executar a rotina de leitura, o modo de acesso volta ao estado usuário para continuar a execução do programa. O mecanismo de modos de acesso também é uma boa forma de proteger o próprio núcleo do sistema residente na memória principal. Suponha que uma aplicação tenha acesso a áreas de memória onde está o sistema operacional. Qualquer programador mal-intencionado ou um erro de programação poderia gravar nesta área, violando o sistema. Com o mecanismo de modos de acesso, para uma aplicação escrever numa área onde resida o sistema operacional o programa deve estar sendo executado no modo kernel. Página 34 de 58 ______________________________________________________Organização de Sistemas Operacionais 10.4- ARQUITETURA MONOLÍTICA A arquitetura monolítica pode ser comparada com uma aplicação formada por vários módulos que são compilados separadamente e depois linkados, formando um grande e único programa executável, onde os módulos podem interagir livremente. Os primeiros sistemas operacionais foram desenvolvidos com base neste modelo, o que tornava seu desenvolvimento e, principalmente, sua manutenção bastante difíceis. Devido a sua simplicidade e bom desempenho, a estrutura monolítica foi adotada no projeto do MS-DOS e nos primeiros sistemas Unix. 10.5- ARQUITETURA DE CAMADAS Com o aumento da complexidade e do tamanho do código dos sistemas operacionais, técnicas de programação estruturada e modular foram incorporadas ao seu projeto. Na arquitetura de camadas, o sistema é dividido em níveis sobrepostos. Cada camada oferece um conjunto de funções que podem ser utilizadas apenas pelas camadas superiores. O primeiro sistema com base nesta abordagem foi o sistema THE (Technische Hogeschool Eindhoven), construído por Dijkstra, na Holanda, em 1968, e que utilizava seis camadas. Posteriormente, os sistemas MULTICS e Open VMS também implementaram o conceito de camadas, sendo estas concêntricas. Neste tipo de implementação, as camadas mais internas são mais privilegiadas que as mais externas. A vantagem da estruturação em camadas é isolar as funções do sistema operacional, facilitando sua manutenção e depuração, além de criar uma hierarquia de níveis de modos de acesso, protegendo as camadas mais internas. Uma desvantagem para o modelo de camadas é o desempenho. Cada nova camada implica uma mudança no modo de acesso. Por exemplo, no caso do Open VMS, para se ter acesso aos serviços oferecidos pelo kernel é preciso passar por três camadas ou três mudanças no modo de acesso. Atualmente, a maioria dos sistemas comerciais utiliza o modelo de duas camadas, onde existem os modos de acesso usuário (não-privilegiado) e kernel (privilegiado). A maioria das versões do Unix e do Windows 2000 da Microsoft estão baseados neste modelo. Página 35 de 58 ______________________________________________________Organização de Sistemas Operacionais 10.6- MÁQUINA VIRTUAL Um sistema computacional é formado por níveis, onde a camada de uiveI mais baixo é o hardware. Acima desta camada encontramos o sistema operacional, que oferece suporte para as aplicações. O modelo de máquina virtual, ou virtual machine (VM), cria um nível intermediário entre o hardware e o sistema operacional, denominado gerência de máquinas virtuais. Este nível cria diversas maquinas virtuais independentes, onde cada unia oferece uma cópia virtual do hardware, incluindo os modos de acesso, interrupções, dispositivos de E/S etc. Como cada máquina virtual é independente tias demais, é possível que cada VM tenha seu próprio sistema operacional e que seus usuários executem suas aplicações como se todo o computador estivesse dedicado a cada um deles. Na década de 1960, a IBM implementou este modelo no sistema VM/370, permitindo que aplicações batch, originadas de antigos sistemas OS/360, e aplicações de tempo compartilhado pudessem conviver na mesma máquina de forma transparente a seus usuários e aplicações. Além de permitir a convivência de sistemas operacionais diferentes no mesmo computador, este modelo cria o isolamento total entre cada VM, oferecendo grande segurança para cada máquina virtual. Se, por exemplo, uma VM executar uma aplicação que comprometa o funcionamento do seu sistema operacional, as demais máquinas virtuais não sofrerão qualquer problema. A desvantagem desta arquitetura é a sua grande complexidade, devido à necessidade de se compartilhar e gerenciar os recursos do hardware entre as diversas VMs. Outro exemplo de utilização desta arquitetura ocorre na linguagem Java, desenvolvida pela Sun Microsystems. Para se executar um programa um programa é necessario uma máquina virtual Java (Java Virtual Machine - JVM). Qualquer sistema operacional pode suportar urna aplicação Java. desde que exista urna JVM desenvolvida para ele. Desta forma, a aplicação não precisa ser recompilada para cada sistema computacional. tornando-se independente do hardware e sistema operacional utilizados. A desvantagem deste modelo é o seu menor desempenho se comparado a uma aplicação compilada e executada diretamente em urna arquitetura especifica. Página 36 de 58 ______________________________________________________Organização de Sistemas Operacionais 10.7- ARQUITETURA MICROKERNEL Uma tendência nos sistemas operacionais modernos é tomar o núcleo do sistema operacional o menor e mais simples possível. Para implementar esta idéia, os serviços do sistema são disponibilizados através de processos, onde cada um é responsável por oferecer um conjunto específico de funções, como gerência de arquivos. gerência de processos, gerência de memória e escalonamento. Sempre que uma aplicação deseja algum serviço, é realizada urna solicitação ao processo responsável. Neste caso, a aplicação que solicita o serviço é chamada de cliente, enquanto o processo que responde à solicitação é chamado de servidor. Um cliente, que pode ser uma aplicação de um usuário ou um outro componente do sistema operacional. solicita um serviço enviando urna mensagem para o servidor O servidor responde ao cliente através de urna outra mensagem. A principal função do núcleo é realizar a comunicação, ou sela, a troca de mensagens entre cliente e servidor . O conceito de arquitetura microkernel surgiu no sistema operacional Mach, na década de 1980, na Universidade CarnegieMellon. O núcleo do sistema Mach oferece basicamente quatro serviços: gerência de processos, gerência de memória, comunicação por troca de mensagens e operações de E/S, todos em modo usuário. A utilização deste modelo permite que os servidores executem em modo usuário, ou seja, não tenham acesso direto a certos componentes do sistema. Apenas o núcleo do sistema, responsável pela comunicação entre clientes e servidores, executa no modo kernel. Como conseqüência, se ocorrer um erro em um servidor, este poderá parar, mas o sistema não ficará inteiramente comprometido, aumentando assim a sua disponibilidade. Fig. 4.7 máquina Virtual Java Como os servidores se comunicam através de trocas de mensagens, não importa se os clientes e servidores são processados em um sistema com um único processador, com múltiplos processadores (fortemente acoplado) ou ainda em um ambiente de sistema distribuído (fracamente acoplado). A implementação de sistemas microkernel em ambientes distribuídos permite que um cliente solicite um serviço e a resposta sela processada remotamente. Esta característica permite acrescentar novos servidores á medida que o número de clientes aumenta, conferindo uma grande escalabilidade ao sistema operacional. Além disso. a arquitetura microkernel permite isolar as funções do sistema operacional por diversos processos servidores pequenos e dedicados a serviços específicos, tomando o núcleo menor, mais fácil de depurar e, conseqüentemente, aumentando sua confiabilidade. Na arquitetura microkernel, o sistema operacional passa a ser de mais fácil manutenção, flexível e de maior portabilidade. Apesar de todas as vantagens deste modelo, sua implementação, na prática, é muito difícil. Primeiro existe o problema de desempenho, devido á necessidade de mudança de modo de acesso a cada comunicação entre clientes e servidores. Outro problema e que cenas funções do sistema operacional exigem acesso direto ao hardware, como operações de E/S. Na realidade, o que é implementado mais usualmente é uma combinação do modelo de camadas com a arquitetura microkernel. O núcleo do sistema, além de ser responsável pela comunicação entre cliente e servidor, passa a incorporar outras funções críticas do sistema, como escalonamento, tratamento de interrupções e gerência de dispositivos. Página 37 de 58 ______________________________________________________Organização de Sistemas Operacionais Existem vários projetos baseados em sistemas microkernel, principalmente em instituições de ensino e centros de pesquisa, como o Exokernel, do MIT (Massachusetts Institute of Technology); o L4, da Universidade de Dresden; e o Amoeba, da Vrije Universiteir. A maioria das iniciativas nesta área está relacionada ao desenvolvimento de sistemas operacionais distribuídos. 10.8- PROJETO DO SISTEMA O projeto de um sistema operacional é bastante complexo e deve atender a diversos requisitos, algumas vezes conflitantes, como confiabilidade, portabilidade, manutenibilidade, flexibilidade e desempenho. O projeto do sistema ira depender muito da arqtiitetura cIo hardware a ser utilizado e do tipo de sistema que se deseja construir: batch, tempo compartilhado, monousuário ou multiusuário, tempo real etc. Os primeiros sistemas operacionais foram desenvolvidos integralmente em assembly e o código possuía cerca de um milhão de instruções (IBM OS/360). Com a evolução dos sistemas e o aumento do número de linhas de código para algo perto de 20 milhões (MULTICS), técnicas de programação modular foram incorporadas ao projeto, além de linguagens de alto nível, como PL/I e Algol. Nos sistemas operacionais atuais, o número de linhas de código pode chegar a mais de 40 milhões (Windows 2000), sendo grande parte do código escrita em linguagem C/C++, utilizando em alguns casos programação orientada a objetos. Urna tendência no projeto de sistemas operacionais modernos é a utilização de técnicas de orientação por objetos, o que leva para o projeto do núcleo do sistema todas as vantagens deste modelo de desenvolvimento de software. Existe uma série de vantagens na utilização de programação por objetos no projeto e na implementação de sistemas operacionais. A seguir, os principais benefícios são apresentados: • • • • melhoriaria organização das funções e recursos do sistema; redução no tempo de desenvolvimento; maior facilidade na manutenção e extensão do sistema; facilidade de implementação do modelo de computação distribuída. Além de facilitar o desenvolvimento e a manutenção do sistema, a utilização de linguagens de alto nível permite maior portabilidade, ou seja, que o sistema operacional seja facilmente alterado em outra arquitetura de hardware. Uma desvantagem do uso de linguagens de alto nível em relação à programação assembly é a perda de desempenho. Por isto, as partes criticas do sistema, corno os device drivers, o escalonador e as rotinas de tratamento de interrupções, são desenvolvidas em assembly. Página 38 de 58 ______________________________________________________Organização de Sistemas Operacionais Um importante princípio no projeto de sistemas operacionais é a separação no projeto do sistema das políticas e dos mecanismos. Uma política define o que deve ser feito, enquanto um mecanismo define como implementar uma determinada política. PROCESSO 11.1- INTRODUÇÃO O conceito de processo é a base para a implementação de um sistema multiprogramável. O processador é projetado apenas para executar instruções, não sendo capaz de distinguir qual programa se encontra em execução. A gerência de um ambiente multiprogramável é uma função exclusiva do sistema operacional, que deve controlar a execução dos diversos programas e o uso concorrente do processador. Para isso, para ser executado, um programa deve estar sempre associado a um processo. O termo processo ganhou unanimidade após o surgimento dos sistemas multiprogramáveis, tomando-se um dos conceitos mais importantes no estudo e nos projetos de sistemas operacionais. Apesar de denominações como tarefa ou job ainda serem encontradas com o mesmo sentido, o termo processo é atualmente utilizado por grande parte da bibliografia. A gerência de processos é uma das principais funções de um sistema operacional. Através de processos, um programa pode alocar recursos, compartilhar dados, trocar informações e sincronizar sua execução. Nos sistemas multiprogramáveis, os processos são executados concorrentemente, compartilhando, dentre outros recursos, o uso do processador, da memória principal e dos dispositivos de E/S. Nos sistemas com múltiplos processadores, não só existe a concorrência de processos pelo uso do processador, como também a execução simultânea de processos nos diferentes processadores. 11.2- ESTRUTURA DO PROCESSO Um processo pode ser entendido inicialmente como um programa em execução, só que seu conceito é mais abrangente. Esta idéia toma-se mais clara quando pensamos em como os sistemas multiprogramáveis atendem os diversos usuários e mantêm informações a respeito dos vários programas que estão sendo executados concorrentemente. Em um sistema multiusuário, cada usuário é as a um processo. Ao executar um programa, o usuário tem a impressão de possuir o processador e todos os demais recursos reservados exclusivamente para seu uso. De fato isto não é verdade, visto que todos os recursos estão sendo compartilhados, inclusive a UCP. Nesse caso, o processador executa o programa de um usuário durante um intervalo de tempo e, no instante seguinte, poderá estar processando um outro programa. Para que a troca de programas ocorra sem problemas, é necessário que todas as in formações do programa interrompido sejam guardadas para que, quando este retornar a ser executado, não lhe falte nenhuma informação necessária à continuação do processamento. Todas as informações importantes e necessárias à execução de um programa fazem parte do processo. Um processo também pode ser definido como o ambiente onde um programa é executado. Este ambiente, além das informações sobre a execução, possui também o quanto de recursos do sistema cada programa pode utilizar, como o espaço de endereçamento, tempo de processador e área em disco. A execução de um mesmo programa pode variar dependendo do processo no qual ele é executado, ou seja, em função dos recursos disponíveis. A falta de recursos pode impedir a execução com sucesso de um programa. Caso um programa, por exemplo, necessite utilizar uma área em disco superior ao seu limite, o sistema operacional irá interromper sua execução por falta de recursos disponíveis. Um processo é formado por três partes, conhecidas como contexto de hardware, contexto de software e espaço de endereçamento, que juntas mantêm todas as informações necessárias à execução de um programa. Página 39 de 58 ______________________________________________________Organização de Sistemas Operacionais 11.2.1- Contexto de Hardware O contexto de hardware armazena o conteúdo dos registradores gerais da UCP, além dos registradores de uso específico, como program counter (PC), stack pointer (SP) e registrador de status. Quando um processo está em execução, o seu contexto de hardware está armazenado nos registradores do processador. No momento em que o processo perde a utilização da UCP, o sistema salva as informações no contexto de hardware do processo. O contexto de hardware é fundamental para a implementação dos sistemas multiprogramáveis, onde os processos se revezam na utilização da UCP, podendo ser interrompidos e, posteriormente, restaurados. A troca de um processo por outro no processador, comandada pelo sistema operacional, é denominada mudança de contexto. A mudança de contexto consiste em salvar o conteúdo dos registradores do processo que está deixando a UCP e carregá-los com os valores referentes ao do novo processo que será executado. Essa operação resume-se em substituir o contexto de hardware de um processo pelo de outro. 11.2.2- Contexto de Software No contexto de software são especificadas características e limites dos recursos que podem ser alocados pe processo, como o número máximo de arquivos abertos simultaneamente, prioridade de execução e tamanho do buffer para operações de E/S. Muitas destas características são determinadas no momento da criação do processo, enquanto outras podem ser alteradas durante sua existência. A maior parte das informações do contexto de software do processo são provenientes de um arquivo do sistema operacional, conhecido como arquivo de contas. Neste arquivo, gerenciado pelo administrador de sistema, são especificados os limites dos recursos que cada processo pode alocar. Outras informações presentes no contexto de software são geradas dinamicamente ao longo da execução do processo. O contexto de software é composto por três grupos de informações sobre o processo: identificação, quotas e privilégios. • Identificação Cada processo criado pelo sistema recebe uma identificação única (PID — process identification) representada por um número. Através do PID, o sistema operacional e outros processos podem fazer referência a qualquer processo existente, consultando seu contexto ou alterando uma de suas características. Alguns sistemas, além do PID, identificam o processo através de um nome. O processo também possui a identificação do usuário ou processo que o criou (owner). Cada usuário possui uma identificação única no sistema (UID — user identification), atribuída ao processo no momento de sua criação. A UID permite implementar um modelo de segurança, onde apenas os objetos (processos, arquivos, áreas de memória etc.) que possuem a mesma UID do usuário (processo) podem ser acessados. • Quotas As quotas são os limites de cada recurso do sistema que um processo pode alocar. Caso uma quota seja insuficiente, o processo poderá ser executado Lentamente, interrompido durante seu processamento ou mesmo não ser executado. Alguns exemplos de quotas presentes na maioria dos sistemas operacionais são: • número máximo de arquivos abertos simultaneamente; • tamanho máximo de memória principal e secundária que o processo pode alocar; • número máximo de operações de E/S pendentes; • tamanho máximo do buffer para operações de E/S; • número máximo de processos, subprocessos e threads que podem ser criados. • Privilégios Página 40 de 58 ______________________________________________________Organização de Sistemas Operacionais Os privilégios ou direitos definem as ações que um processo pode fazer em relação a ele mesmo, aos demais processos e ao sistema operacional. Privilégios que afetam o próprio processo permitem que suas características possam ser alteradas, como prioridade de execução, limites alocados na memória principal e secundária etc. Já os privilégios que afetam os demais processos permitem, além da alteração de suas próprias características, alterar as de outros processos. Privilégios que afetam o sistema são os mais amplos e poderosos, pois estão relacionados à operação e gerência do ambiente, como a desativação do sistema, alteração de regras de segurança, criação de outros processos privilegiados, modificação de parâmetros de configuração do sistema, entre outros. A maioria dos sistemas operacionais possui uma conta de acesso com todos estes privilégios disponíveis, com o propósito de o administrador gerenciar o sistema operacional. No sistema Unix existe a conta “root”, no Windows 2000 a conta “administrator” e no OpenVMS existe a conta “system” com este perfil. 11.2.3- Espaço de Endereçamento O espaço de endereçamento é a área de memória pertencente ao processo onde as instruções e os dados do programa são armazenados para execução. Cada processo possui seu próprio espaço de endereçamento, que deve ser devidamente protegido do acesso dos demais processos. Nos capítulos “Gerência de Memória” e “Gerência de Memória Virtual” serão analisados diversos mecanismos de implementação e administração do espaço de endereçamento. 11.2.4- Bloco de Controle do Processo O processo é implementado pelo sistema operacional através de uma estrutura de da dos chamada bloco de controle do processo (Process Control Block — PCB). A partir do PCB, o sistema operacional mantém todas as informações sobre o contexto de hardware, contexto de software e espaço de endereçamento de cada processo. Os PCBs de todos os processos residem na memória principal em uma área exclusiva do sistema operacional. O tamanho desta área geralmente é limitado por um parâmetro do sistema operacional que permite especificar o número máximo de processos que podem ser suportados simultaneamente pelo sistema. Toda a gerência dos processos é realizada através de system cal que realizam operações como criação, alteração de características, visualização, eliminação, sincronização, suspensão de processos, dentre outras. 11.3- ESTADOS DO PROCESSO Em um sistema multiprogramável, um processo não deve alocar a UCP com exclusividade, de forma que possa existir um compartilhamento no uso do processador. Os processos passam por diferentes estados ao longo do seu processamento, em função de eventos gerados pelo sistema operacional ou pelo próprio processo. Um processo ativo pode encontrar-se em três diferentes estados: • Execução (running) Um processo é dito no estado de execução quando está sendo processado pela UCP. Em sistemas com apenas uma UCP, somente um processo pode estar sendo executado em um dado instante. Os processos se alternam na utilização do processador seguindo uma política estabelecida pelo sistema operacional. Em sistemas com múltiplos processadores, existe a possibilidade de mais de um processo estar sendo executado ao mesmo tempo. Neste tipo de sistema, também é possível um mesmo processo ser executado simultaneamente em mais de uma UCP (processamento paralelo). Página 41 de 58 ______________________________________________________Organização de Sistemas Operacionais • Prontp (ready) Um processo está no estado de pronto quando aguarda apenas para ser executa do. O sistema operacional é responsável por determinar a ordem e os critérios pelos quais os processos em estado de pronto devem fazer uso do processador. Este mecanismo é conhecido como escalonamento. Em geral existem vários processos no sistema no estado de pronto organizados em listas encadeadas. Os processos devem estar ordenados pela sua importância, permitindo que processos mais prioritários sejam selecionados primeiramente para execução. • Espera (wait) Um processo no estado de espera aguarda por algum evento externo ou por algum recurso para prosseguir seu processamento. Como exemplo, podemos citar o tér mino de uma operação de entrada/ saída ou a espera de uma determinada data e/ou hora para continuar sua execução. Em alguns sistemas operacionais, o estado de espera pode ser chamado de bloqueado (blocked). O sistema organiza os vários processos no estado de espera também em listas encadeadas. Em geral, os processos são separados em listas de espera associadas a cada tipo de evento. Neste caso, quando um evento acontece, todos os processos da lista associada ao evento são transferidos para o estado de pronto. 11.4- MUDANÇAS DE ESTADO DO PROCESSO Um processo muda de estado durante seu processamento em função de eventos originados por ele próprio (eventos voluntários) ou pelo sistema operacional (eventos involuntários). Basicamente, existem quatro mudanças de estado que podem ocorrer a um processo: • Pronto — > Execução Após a criação de um processo, o sistema o coloca em uma lista de processos no estado de pronto, onde aguarda por uma oportunidade para ser executado. Cada sistema operacional tem seus próprios critérios e algoritmos para a escolha da ordem em que os processos serão executados (política de escalonamento). No capítulo “Gerência do Processador”, esses critérios e seus algoritmos serão analisados com detalhes. • Execução — >Espera Um processo em execução passa para o estado de espera por eventos gerados pelo próprio processo, como uma operação de E/S, ou por eventos externos. Um evento externo é gerado, por exemplo, quando o sistema operacional suspende por um período de tempo a execução de um processo. • Espera — > Pronto Um processo no estado de espera passa para o estado de pronto quando a operação solicitada é atendida ou o recurso esperado é concedido. Um processo no estado de espera sempre terá de passar pelo estado de pronto antes de poder ser novamente selecionado para execução. Não existe a mudança do estado de espera para o estado de execução diretamente. • Execução — > Pronto Página 42 de 58 ______________________________________________________Organização de Sistemas Operacionais Um processo em execução passa para o estado de pronto por eventos gerados pelo sistema, como o término da fatia de tempo que o processo possui para sua execução. Nesse caso, o processo volta para a fila de pronto, onde aguarda por uma nova oportunidade para continuar seu processamento. Um processo em estado de pronto ou de espera pode não se encontrar na memória principal. Esta condição ocorre quando não existe espaço suficiente para todos os processos na memória principal e pane do contexto do processo é levada para memória secundária. Uma técnica conhecida como swapping retira processos da memória principal e os traz de volta seguindo critérios de cada sistema operacional. Neste caso, os processos em estados de espera e pronto podem estar residentes ou não residentes na memória principal. Página 43 de 58 ______________________________________________________Organização de Sistemas Operacionais 11.5- CRIAÇÃO E ELIMINAÇÃO DE PROCESSOS Processos são criados e eliminados por motivos diversos. A criação de um processo ocorre a partir do momento em que o sistema operacional adiciona um novo PCB à sua estrutura e aloca um espaço de endereçamento na memória para uso. A partir da criação do PCB, o sistema operacional já reconhece a existência do processo, podendo gerenciá-lo e associar programas ao seu contexto para serem executados. No caso da eliminação de um processo, todos os recursos associados ao processo são desalocados e o PCB eliminado pelo sistema operacional. Além dos três estados apresentados anteriormente para o processo, a maioria dos sis temas operacionais estabelece dois estados adicionais para os momentos de criação e eliminação de um processo. • Criação (new) Um processo é dito no estado de criação quando o sistema operacional já criou um novo PCB, porém ainda não pode colocá-lo na lista de processos do estado de pronto. Alguns sistemas operacionais limitam o número de processos ativos em função dos recursos disponíveis ou de desempenho. Esta limitação pode ocasionar que processos criados permaneçam no estado de criação até que possam passar para ativos. A criação de processos pode ocorrer por diferentes razões, como: • logon interativo: desta forma, um processo é criado através do estabelecimento de uma sessão interativa por um usuário a partir de um terminal; • criação por um outro processo: um processo já existente pode criar outros processos, sendo estes novos processos independentes ou subprocessos; • criação pelo sistema operacional: o sistema operacional pode criar novos processos com o intuito de oferecer algum tipo de serviço. • Terminado (exit) Um processo no estado de terminado não poderá ter mais nenhum programa executado no seu contexto, porém o sistema operacional ainda mantém suas informações de controle presentes em memória. Um processo neste estado não é mais considerado ativo, mas como o PCB ainda existe, o sistema operacional pode recuperar informações sobre a contabilização de uso de recursos do processo, como o tempo total do processador. Após as informações serem extraídas, o processo pode deixar de existir. O término de processo pode ocorrer por razões como: • término normal de execução; • eliminação por um outro processo; • eliminação forçada por ausência de recursos disponíveis no sistema. 11.6- PROCESSOS INDEPENDENTES, SUBPROCESSOS E THREADS Processos independentes, subprocessos e threads são maneiras diferentes de implementar a concorrência dentro de uma aplicação. Neste caso, busca-se súbdividir o código em partes para trabalharem de forma cooperativa. Considere um banco de dados com produtos de uma grande loja onde vendedores Página 44 de 58 ______________________________________________________Organização de Sistemas Operacionais fazem freqüentes consultas. Neste caso, a concorrência na aplicação proporciona um tempo de espera menor entre as consultas melhorando o desempenho da aplicação e beneficiando os usuários. O uso de processos independentes é a maneira mais simples de implementar a concorrência em sistemas multiprogramáveis. Neste caso não existe vínculo do processo criado com o seu criador. A criação de um processo independente exige a alocação de um PCB, possuindo contextos de hardware, contexto de software e espaço de endereçamento próprios. Subprocessos são processos criados dentro de uma estrutura hierárquica. Neste modo, o processo criador é denominado processo pai enquanto o novo processo é chamado de subprocesso ou processo filho. O subprocesso, por sua vez, pode criar outras estruturas de subprocessos. Uma característica desta implementação é a de pendência existente entre o processo criador e o subprocesso. Caso um processo pai deixe de existir, os subprocessos subordinados são automaticamente eliminados. Semelhante aos processos independentes, subprocessos possuem seu próprio PCB. Além da dependência hierárquica entre processos e subprocessos, uma outra característica neste tipo de implementação é que subprocessos podem compartilhar quotas com o processo pai. Neste caso, quando um subprocesso é criado, o processo pai cede parte de suas quotas ao processo filho. O uso de processos independentes e subprocessos no desenvolvimento de aplicações concorrentes demanda consumo de diversos recursos do sistema. Sempre que um novo processo é criado, o sistema deve alocar recursos (contexto de hardware, contexto de software e espaço de endereçamento), consumindo tempo de UCP neste trabalho. No momento do término dos processos, o sistema operacional também dispensa tempo para deslocar recursos previamente alocados. Outro problema é a comunicação e sincronização entre processos, considerada pouco eficiente, visto que cada processo possui seu próprio espaço de endereçamento. O conceito de thread foi introduzido na tentativa de reduzir o tempo gasto na criação, eliminação e troca de contexto de processos nas aplicações concorrentes, bem como economizar recursos do sistema como um todo. Em um ambiente multithread, um único processo pode suportar múltiplos threads, cada qual associado a uma parte do código da aplicação. Neste caso não é necessário haver diversos processos para a implementação da concorrência. Threads compartilham o processa dor da mesma maneira que um processo, ou seja, enquanto um thread espera por uma operação de E/S, outro thread pode ser executado. Cada thread possui seu próprio contexto de hardware, porém compartilha o mesmo contexto de software e espaço de endereçamento com os demais threads do processo. O compartilhamento do espaço de endereçamento permite que a comunicação de threads dentro de um mesmo processo seja realizada de forma simples e rápida. 11.7- PROCESSOS FOREGROUND E BACKGROUND Um processo possui sempre associado à sua estrutura pelo menos dois canais de comunicação por onde são realizadas todas as entradas e saídas de dados ao longo do seu processamento. Os canais de entrada (input) e de saída (output) de dados podem estar associados a terminais, arquivos, impressoras e até mesmo outros processos. Um processo foreground é aquele que permite a comunicação direta do usuário com o processo durante o seu processamento. Neste caso, tanto o canal de entrada quanto o de saída estão associados a um terminal com teclado, mouse e monitor, permitindo, assim, a interação com o usuário. O processamento interativo tem como base processos foreground. Página 45 de 58 ______________________________________________________Organização de Sistemas Operacionais Um processo background é aquele onde não existe a comunicação com o usuário durante o seu processamento. Neste caso, os canais de E/S não estão associados a nenhum dispositivo de E/S interativo, mas em geral a arquivos de E/S. O processamento do tipo batch é realizado através de processos background. É possível associar o canal de saída de um processo ao canal de entrada de um outro processo. Neste caso dizemos que existe um pipe ligando os dois processos. Se um processo A gera uma listagem e o processo B tem como função ordená-la, basta associar o canal de saída do processo A ao canal de entrada do processo B. 11.8- PROCESSOS DO SISTEMA OPERACIONAL O conceito de processo, além de estar associado a aplicações de usuários, pode também ser implementado na própria arquitetura do sistema operacional. Como visto no capítulo “Estrutura do Sistema”, a arquitetura microkernel implementa o uso intensivo de processos que disponibilizam serviços para processos das aplicações e do próprio sistema operacional. Quando processos são utilizados para a implementação de serviços do sistema, estamos retirando código do seu núcleo, tomando-o menor e mais estável. No caso de um ou mais serviços não serem desejados, basta não ativar os processos responsáveis, o que permitirá liberar memória para os processos dos usuários. Página 46 de 58 ______________________________________________________Organização de Sistemas Operacionais A seguir, listamos alguns serviços que o sistema operacional pode implementar através de processos: • auditoria e segurança; • serviços de rede; • contabilização do uso de recursos; • contabilização de erros; • gerência de impressão; • gerência de jobs batch; • temporização; • comunicação de eventos; • interface de comandos (shell). 11.9- PROCESSOS CPU-BOUND E I/O-BOUND Os processos podem ser classificados como CPU-bound ou I/O-bound, de acordo com a utilização do processador e dos dispositivos de E/S. Um processo é definido como CPU-bound (ligado à UCP) quando passa a maior par te do tempo no estado de execução, ou seja, utilizando o processador. Esse tipo de processo realiza poucas operações de leitura e gravação e é encontrado em aplicações científicas que efetuam muitos cálculos. Um processo é classificado como I/O-bound (ligado à E/S) quando passa a maior parte do tempo no estado de espera, pois realiza um elevado número de operações de E/S. Esse tipo de processo é encontrado em aplicações comerciais, que se baseiam em leitura, processamento e gravação. Os processos interativos também são bons exemplos de processos I/O-bound, pela forma de comunicação entre o usuário e o sistema, normalmente lenta, devido à utilização de terminais. 11.10- SINAIS Sinais são um mecanismo que permite notificar processos de eventos gerados pelo sistema operacional ou por outros processos. O uso de sinais é fundamental para a gerência de processos, além de possibilitar a comunicação e sincronização entre processos. Um exemplo de uso de sinais é quando um usuário utiliza uma seqüência de caracteres do teclado, como [Ctrl-C], para interromper a execução de um programa. Neste caso, o sistema operacional gera um sinal a partir da digitação desta combinação de teclas, sinalizando ao processo a ocorrência do evento. No momento em que o pro cesso identifica a chegada do sinal, uma rotina específica de tratamento é executada. Sinais podem ser utilizados em conjunto com temporizadores no intuito de sinalizar ao processo algum evento associado ao tempo. Como exemplo, podemos citar a situação em que um processo deve ser avisado periodicamente para realizar alguma tarefa, como monitorar uma fila de pedidos. Depois de realizada a tarefa, o processo deve voltar a esperar pelo próximo sinal de temporização. A maior parte dos eventos associados a sinais são gerados pelo sistema operacional ou pelo hardware, como a ocorrência de exceções, interrupções geradas por terminais, limites de quotas excedidos durante a execução dos processos e alarmes de tempo. Em outras situações, os eventos são gerados a partir de outros processos com o propósito de sincronizar suas execuções. A geração de um sinal ocorre quando o sistema operacional, a partir da ocorrência de eventos síncronos ou assíncronos, notifica o processo através de bits de sinalização localizados no seu PCB. Um processo não responde instantaneamente a um sinal. Os sinais ficam pendentes até que o processo seja escalonado, quando então serão tratados. Por exemplo, quando um processo é eliminado, o sistema ativa o bit associado a este evento. O processo somente será excluído do sistema quando for se lecionado para execução. Neste caso, é possível que o processo demore algum pe nodo de tempo até ser eliminado de fato. Página 47 de 58 ______________________________________________________Organização de Sistemas Operacionais O tratamento de um sinal é muito semelhante ao mecanismo de interrupções. Quando um sinal é tratado, o contexto do processo é salvo e a execução desviada para um código de tratamento de sinal (signal handler), geralmente no núcleo do sistema. Após a execução do tratador de sinais, o programa pode voltar a ser processado do ponto onde foi interrompido. Em certas implementações, o próprio processo pode tratar o sinal através de um tratador de sinais definido no código programa. É possível também que um processo bloqueie temporariamente ou ignore por completo alguns sinais. O mecanismo de sinais assemelha-se ao tratamento de interrupções e exceções vistos no capitulo “Concorrência”, porém com propósitos diferentes, O sinal está para o processo assim como as interrupções e exceções estão para o sistema operacional. Página 48 de 58 ______________________________________________________Organização de Sistemas Operacionais SISTEMA OPERACIONAL LINUX 12.1- ARQUITETURA Linux é ao mesmo tempo um kernel (ou núcleo) e o sistema operacional que roda sobre ele, dependendo do contexto em que você encontrar a referência. O kernel Linux foi criado em 1991 por Linus Torvalds, então um estudante finlandês, e hoje é mantido por uma comunidade mundial de desenvolvedores (que inclui programadores individuais e empresas como a IBM, a HP e a Hitachi), coordenada pelo mesmo Linus, agora um desenvolvedor reconhecido mundialmente. O Linux adota a GPL, uma licença livre - o que significa, entre outras coisas, que todos os interessados podem usá-lo e redistribuí-lo. Aliado a diversos outros softwares livres, como o KDE, o GNOME, o Apache, o Firefox, os softwares do sistema GNU e o OpenOffice.org, o Linux pode formar um ambiente moderno, seguro e estável para desktops, servidores e sistemas embarcado. 12.2- CARACTERÍSTICAS É de graça e desenvolvido voluntariamente por programadores experientes, hackers, e contribuidores espalhados ao redor do mundo que tem como objetivo a contribuição para a melhoria e crescimento deste sistema operacional; Convivem sem nenhum tipo de conflito com outros sistemas operacionais (como o DOS, Windows, OS/2) no mesmo computador; Suporte a nomes extensos de arquivos e diretórios (255 caracteres); Conectividade com outros tipos de plataformas como Apple, Sun, Macintosh, Sparc, Alpha, PowerPc, ARM, Unix, Windows, DOS, etc.; Proteção entre processos executados na memória RAM; Suporte ha mais de 63 terminais virtuais (consoles); Modularização - O Linux somente carrega para a memória o que é usado durante o processamento, liberando totalmente a memória assim que o programa/dispositivo é finalizado; Devido a modularização, os drivers dos periféricos e recursos do sistema podem ser carregados e removidos completamente da memória RAM a qualquer momento. Os drivers (módulos) ocupam pouco espaço quando carregados na memória RAM (cerca de 6Kb para a Placa de rede NE 2000, por exemplo); Não há a necessidade de se reiniciar o sistema após a modificar a configuração de qualquer periférico ou parâmetros de rede. Somente é necessário reiniciar o sistema no caso de uma instalação interna de um novo periférico, falha em algum hardware (queima do processador, placa mãe, etc.); Não precisa de um processador potente para funcionar. O sistema roda bem em computadores 386sx 25 com 4MB de memória RAM (sem rodar o sistema gráfico X, que é recomendado 8MB de RAM); O crescimento e novas versões do sistema não provocam lentidão, pelo contrário, a cada nova versão os desenvolvedores procuram buscar maior compatibilidade, acrescentar recursos úteis e melhor desempenho do sistema (como o que aconteceu na passagem do kernel 2.0.x para 2.2.x); Não é requerida uma licença para seu uso. O Linux é licenciado de acordo com os termos da GPL; Acessa sem problemas discos formatados pelo DOS, Windows, Novell, OS/2, NTFS, SunOS, Amiga, Atari, Mac, etc; Utiliza permissões de acesso a arquivos, diretórios e programas em execução na memória RAM; Rede TCP/IP mais rápida que no Windows e tem sua pilha constantemente melhorada. O Linux tem suporte nativo a redes TCP/IP e não depende de uma camada intermediária como o Winsock. Em acessos via modem a Internet, a velocidade de transmissão é 10% maior; Roda aplicações DOS através do DOSEMU. Para se ter uma idéia, é possível dar o boot em um sistema DOS qualquer dentro dele e ao mesmo tempo usar a multitarefa deste sistema; Roda aplicações Windows através do WINE; Página 49 de 58 ______________________________________________________Organização de Sistemas Operacionais Suporte a dispositivos infravermelho; Suporte a rede via rádio amador; Suporte a dispositivos Plug-and-Play; Suporte a dispositivos USB; Vários tipos de firewalls de alta qualidade e com grande poder de segurança de graça; Roteamento estático e dinâmico de pacotes; Ponte entre Redes; Proxy Tradicional e Transparente; Possui recursos para atender a mais de um endereço IP na mesma placa de rede, sendo muito útil para situações de manutenção em servidores de redes ou para a emulação de "mais computadores" virtualmente. O servidor WEB e FTP podem estar localizados no mesmo computador, mas o usuário que se conecta tem a impressão que a rede possui servidores diferentes. O sistema de arquivos usado pelo Linux (Ext3) organiza os arquivos de forma inteligente evitando a fragmentação e fazendo-o um poderoso sistema para aplicações multi-usuárias exigentes e gravações intensivas; Permite a montagem de um servidor Web, E-mail, News, etc. com um baixo custo e alta performance. O melhor servidor Web do mercado, o Apache, é distribuído gratuitamente junto com o Linux. O mesmo acontece com o Sendmail; Por ser um sistema operacional de código aberto, você pode ver o que o código fonte (o que foi digitado pelo programador) faz e adapta-lo as suas necessidades ou de sua empresa. Esta característica é uma segurança a mais para empresas sérias e outros que não querem ter seus dados roubados (você não sabe o que um sistema sem código fonte faz na realidade enquanto esta processando o programa); Suporte a diversos dispositivos e periféricos disponíveis no mercado, tanto os novos como obsoletos; Pode ser executado em 10 arquiteturas diferentes (Intel, Macintosh, Alpha, Arm, etc.); Consultores técnicos especializados no suporte aos sistemas espalhados por todo o mundo; 12.3- FUNÇÕES O sistema operacional Linux é composto por três partes: Kernel. Aplicações de Sistema. Aplicações de Usuário. 12.3.1- O Kernel Embora o kernel seja uma parte importante do Linux, ele sozinho não constitui o sistema GNU/Linux. O kernel é o “núcleo” do sistema e é responsável pelas funções de mais baixo nível, como o gerenciamento de memória, gerenciamento de processos e da CPU. O kernel também é o responsável pelo suporte aos sistemas de arquivos, dispositivos e periféricos conectados ao computador, como placas SCSI, placas de rede, de som, portas seriais, etc. É chamado Linux o conjunto do kernel e demais programas, como shells, compiladores, bibliotecas de funções, etc. Alguns cuidados devem ser tomados ao se verificar que versão de Linux está sendo utilizada, porque o kernel possui um número de versão e a sua distribuição pode possuir outro. O número que identifica a versão da distribuição é decidido pela empresa responsável pela versão, de acordo com padrões próprios. Já o kernel possui um número de versão composto por 3 partes: um número maior, um número menor e um número de release, e este número é dado pelo grupo de programadores que cuidam do desenvolvimento do kernel. O kernel do Linux pode ser compilado para se adequar melhor ao tipo de máquina e ao tipo de tarefa que essa máquina vai executar. Por exemplo, se o servidor precisa se comunicar com outras máquinas usando o protocolo IPX, o administrador poderá compilar o kernel com suporte a esse protocolo, ou, se não houver necessidade de usar um determinado tipo de placa de rede, é possível compilar o kernel sem suporte a essa placa, resultando assim em um kernel de menor tamanho. Página 50 de 58 ______________________________________________________Organização de Sistemas Operacionais O kernel do Conectiva Linux foi compilado para atender os mais diversos tipos de necessidades e de máquinas, além do mais, é possível incluir novos recursos sem a necessidade de compilar novamente o kernel, através do uso de módulos. O processo de compilação de um kernel não é muito simples e é recomendado apenas a administradores de sistemas mais experientes. Para saber como se compila um kernel consulte o documento. 12.3.2- Aplicações do Sistema O kernel faz muito pouco sozinho, uma vez que ele só provê os recursos que são necessários para que outros programas sejam executados. Logo, é necessária a utilização de outros programas para implementar os vários serviços necessários ao sistema operacional. Do “ponto de vista” do kernel, as aplicações do sistema, bem como qualquer outro programa, rodam no que é chamado “modo usuário”, logo, a diferença entre aplicações de sistema e aplicações do usuário se dá pelo propósito de cada aplicação. Aplicações do sistema são necessárias para fazer o sistema funcionar, enquanto as aplicações do usuário são todos programas utilizados pelo usuário para realizar uma determinada tarefa (como um processador de texto, por exemplo). Entre as aplicações de sistema pode-se citar o init, o getty e o syslog. 12.4- VANTAGENS Segurança, estabilidade e robustez a baixo custo fizeram do Linux o grande rival do Windows e por ser livremente distribuído, o Linux não possui uma política de licenças como o Windows, fato que o torna acessível a todos. Governos de vários países, bancos e escolas estão entre os grandes usuários do Linux que o utilizam em substituição ao Windows como maneira de diminuir seus gastos com software. Com a explosão da internet houve também o crescimento da quantidade de vírus existentes. Diante disto o Linux representa uma grande vantagem por ser totalmente imunes a estes vírus, gerando tranquilidade para os usuários, e dispensando os programas anti-vírus e suas constantes atualizações. E no que diz respeito a segurança, os sistemas Linux são inquestionáveis. No caso de bugs no Internet Explorer, por exemplo, o usuários tem que esperar que a Microsoft, e somente ela, disponibilize a correção. Já nos sistemas Linux, que contam com muitos programadores independentes, falhas são descobertas rapidamente assim como suas correções. Como podemos ver, o Linux é um sistema operacional em ascensão, e que promete ser o futuro para as empresas que tem custos a cortar, no que diz respeito a legalização de seus softwares, assim como para as que simplesmente procuram uma solução realmente eficiente e funcional. 12.5- DESVANTAGENS Ao instalar o Linux e o Windows 98 na mesma máquina, pode-se observar que o o Windows 98 detecta automaticamente muito mais dispositivos. Fazer o sistema de vídeo funcionar com X Windows continua sendo difícil demais para muitos, embora possível para a maioria dos usuários. Um outro problema é a escassez de drivers para placas PCMCIA. Se estiver conectando um notebook a sua rede local, por meio de uma placa de rede PCMCIA; e à Internet, a partir da rede local; precisará localizar os drivers com o seu fabricante (nem todos oferecem drivers para Linux), instalá-los e configurá-los você mesmo. O número de aplicativos disponíveis no mercado é outra desvantagem. Enquanto que para o Windows existem hoje mais de 8 mil aplicações registradas, para o Linux existem apenas algumas centenas. Página 51 de 58 ______________________________________________________Organização de Sistemas Operacionais 12.6- RECURSOS O kernel faz muito pouco sozinho, uma vez que ele só provê os recursos que são necessários para que outros programas sejam executados. Logo, é necessária a utilização de outros programas para implementar os vários serviços necessários ao sistema operacional. Do “ponto de vista” do kernel, as aplicações do sistema, bem como qualquer outro programa, rodam no que é chamado “modo usuário”, logo, a diferença entre aplicações de sistema e aplicações do usuário se dá pelo propósito de cada aplicação. Aplicações do sistema são necessárias para fazer o sistema funcionar, enquanto as aplicações do usuário são todos programas utilizados pelo usuário para realizar uma determinada tarefa (como um processador de texto, por exemplo). Entre as aplicações de sistema pode-se citar o init, o getty e o syslog. O init é o primeiro processo lançado após o carregamento do kernel na memória, e é ele o responsável por continuar o processo de boot lançando os outros programas. É o init o responsável, também, por garantir que o getty esteja sendo executado (para que os usuários possam entrar no sistema) e por adotar processos órfãos (processos filhos no qual o pai morreu), pois no Linux todos os processos devem estar em uma mesma árvore, e possuírem um pai (excluindo o processo init, que não tem pai). O getty provê o serviço responsável pelo login dos usuários em terminais textos (virtuais ou não). É ele que lê o nome do usuário e a senha e chama o programa login para validá-los; caso estejam corretos é lançado um shell, caso contrário o processo todo é reiniciado. O syslog é responsável por capturar as mensagens de erro geradas pelo kernel ou por outras aplicações de sistema, e por mostrá-las posteriormente quando o administrador do sistema solicitá-las. 12.7- SUPORTE O Linux é um S.O. modular. Por exemplo, o suporte a determinado sistema de arquivos ou a certo dispositivo de hardware é fornecido através de módulos independentes. Em geral, tais módulos podem ser implantados dinamicamente, isto é, com o S.O. rodando, sem a necessidade de reinicialização. Os módulos, quando implantados, tornam-se parte do núcleo do S.O. Não é possível utilizar nenhuma biblioteca printk é implementada pelo S.O. Assemelha-se à printf, mas não oferece suporte a números de ponto flutuante. Os indicadores <n> fornecem a prioridade da mensagem. Quanto menor o número, maior é a prioridade. Não funciona em consoles gráficos! Os módulos rodam no espaço de endereçamento do núcleo do S.O. em modo supervisor. Isso exige alguns cuidados especiais: Concorrência Segurança Controle de versão Tratamento de erros, alocação e desalocação de recursos judiciosa. O cuidado com ponteiros perdidos deve ser redobrado. sistema. Página 52 de 58 Pode-se travar completamente o ______________________________________________________Organização de Sistemas Operacionais SISTEMA OPERACIONAL WINDOWS XP 13.1- ARQUITETURA O Microsoft Windows XP (oficialmente, Windows 5.1) é um sistema operacional produzido pela Microsoft para uso em todos os tipos de computadores, incluindo computadores residenciais e de escritórios, notebooks, midia centers e ainda Tablet PCs. As letras XP derivam da palavra eXPerience, experiência em inglês. O seu nome de código era Whistler, o nome de um resort no Canadá, o Whistler Blackcomb, na qual os desenvolvedores do sistema passaram um tempo. O Windows XP une a facilidade de uso do Windows ME com a estabilidade do Windows 2000, e é o primeiro sistema operacional para consumidores construido em uma arquitetura e kernel (Kernel de um sistema operacional é entendido como o núcleo deste ou, numa tradução literal, cerne. Ele representa a camada de software mais próxima do hardware, sendo responsável por gerenciar os recursos do sistema computacional como um todo) totalmente novos. O Windows XP foi lançado em 25 de Outubro de 2001 e possui 400 milhões de cópias em uso atualmente, de acordo com a estimativa da IDC Analyst [1]. Foi substituido pelo Windows Vista lançado para fabricantes de computadores no dia 8 de Novembro de 2006 e vendido aos usuários no dia 30 de Janeiro de 2007. Estimativas indicam que irá demorar de 5 à 7 anos para que o Vista atinja a marca de cópias vendidas do XP. As duas edições iniciais do Windows XP são o Windows XP Home Edition, para usuários domésticos, e o Windows XP Professional Edition, com recursos adicionais como o Domínio de Servidor do Windows e a utilização de 2 processadores além de ser designado a usuários experientes e empresas. No Windows XP Media Center Edition foram incluídos recursos adicionais de multimídia, como a possibilidade de gravar e assistir programas de televisão, ver filmes de DVD e ouvir música. O Windows XP Tablet PC Edition foi designado para rodar nas plataformas Tablet PC. Duas versões foram lançadas separadamente para computadores com processadores 64 bits, foram o Windows XP 64-bit Edition para processadores Itanium e o Windows XP Professional x64 Edition para processadores x86-64, e em 2005 foi lançado, pela primeira vez, um sistema operacional de baixo custo, o Windows XP Starter Edition que é uma versão reduzida do sistema operacional, para tentar combater a pirataria e se tornar mais atrativo financeiramente. O Windows XP tem melhor estabilidade e eficiência, comparado às outras versões do Windows. Uma diferença significante foi a da interface gráfica ter mudado do padrão cinza para um azul fosco. Esta é a primeira versão do Windows a usar um programa de validação de produto para combater a pirataria de software na qual foram barradas muitas atualizações a Windows não-originais. O Windows XP foi muito criticado por usuários devido a sua enorme lista de vulnerabilidades de segurança, as várias falhas do navegador Internet Explorer e do Windows Media Player, mas também foi muito elogiado por ser um dos sistemas mais bonitos e estaveis. O Windows XP começou a ser desenvolvido em 1999, quando a Microsoft iniciou o projeto do Windows Neptune (Neptuno), o que viria a ser a versão Home Edition do Windows 2000. O projeto foi cancelado e então se iniciou o projeto Whistler, do Windows XP. Muitas idéias do Neptune e do Odyssey (outra versão do Windows também cancelada) foram usadas no Windows XP. 13.2- CARACTERÍSTICAS Assistente de inicialização: Um tutorial auxilia passo-a-passo no processo de inicialização do sistema operacional, avisando quando é necessário fornecer alguma informação. Página 53 de 58 ______________________________________________________Organização de Sistemas Operacionais Atualização dinâmica: Avisa o usuário sobre a necessidade de atualização de programas, de alguns drivers e de correções para eventuais problemas de configuração ou de segurança. A operação (download e instalação) pode ser feita automaticamente. Tela inicial personalizada: A tela de abertura pode ser personalizada, com a criação de uma conta para cadausuário do PC. Assim, quem divide a máquina com a família, por exemplo, pode registrar a sua tela de entrada e protegê-la com uma senha. Mudança rápida de usuário: Se um membro da família estiver jogando e você desejar dar uma rápida olhada em seu e-mail, não será necessário fechar todas as configurações do seu irmão para a verificação das suas mensagens. Menu Iniciar: A maneira mais básica de acessar arquivos, pastas e programas. No Windows XP, uma lista de programas mais usados e o sistema de posicionamento dos arquivos mais importantes facilitam o acesso às tarefas e aplicações mais utilizados. Design focado na tarefa: Permite visualizar as opções do Windows de acordo com a tarefa que você está desempenhando. Por exemplo, quando um documento no Word está selecionado, aparece um menu com tarefas comuns ao aplicativo, como copiar, cortar e colar. Barra de tarefas dividida em grupos: Quando muitas janelas forem abertas, suas barras correspondentes vão sendo agrupadas de acordo com o programa a que pertencem. Assistente de limpeza para área de trabalho: Periodicamente, o recurso examina a área de trabalho e alerta para a existência de ícones/atalhos não utilizados. Internet Connection Firewal: O componente serve para proteger o PC de invasões de hackers. Gerenciador de arquivos: Arquivos e pastas agrupados da maneira que melhor fizer sentido para o usuário e a utilização da visão em miniatura melhorada permitem encontrar rapidamente qualquer arquivo que se procure (em ordem alfabética, pelo tipo de arquivo, tamanho ou data de modificação). 13.4- FUNÇÕES Nova Interface para o ambiente de trabalho: interface redesenhada, mais atrativa e funcional; Windows Media Player para Windows XP: um só utilitário para localizar, reproduzir, organizar e armazenar arquivos multimedia digital. Assistente de configuração de rede: permite facilmente interligar e partilhar os computadores e os dispositivos existentes em sua casa. Windows Messenger: a mais avançada ferramenta de comunicação e colaboração, com mensagens instantâneas, conferência de voz e vídeo e compartilhamento de aplicações. Suporte avançado para computadores portáteis (incluindo suporte para ClearType, DualView e otimizações na gestão de energia): para que possa trabalhar tanto quando se está em viagem como quando está no escritório. Ligações sem fios: configuração automática de redes sem fios 802.1x. Ambiente de trabalho remoto: acesse remotamente seu PC com o Windows XP Professional, a partir de qualquer outro computador pessoal com o Windows, para que possa trabalhar com todos os seus dados e aplicações quando está fora do escritório. Internet Information Services (IIS): hospede seu próprio site (web, domínio, ftp, email) na internet ou intranet. Diretório e arquivos offline: permite o acesso a diretórios e arquivos existentes num compartilhamento de rede quando se está desligado do servidor. Página 54 de 58 ______________________________________________________Organização de Sistemas Operacionais Inicialização rápida e otimização no gerencimaneto de energia: tempos de boot e reinício mais rápidos. Multitarefa: permite a execução simultânea de múltiplas aplicações. Suporte escalável para processadores: suporta até dois processadores. Firewall de ligação à Internet: protege automaticamente o seu PC de acessos não autorizados quando está na Internet. Suporte para privacidade no Internet Explorer 6: permite-lhe manter controle sobre as suas informações pessoais quando visita site da Web. Sistema de encriptação do sistema de arquivos: protege os dados sensíveis existentes em diretórios armazenados no disco utilizando o sistema de arquivos no padrão NTFS. Controle de acesso: restringe o acesso a diretórios, arquivos, aplicações e outros recursos selecionados. Administração centralizada: permite a junção de sistemas Windows XP Professional a um domínio do Windows Server para tirar partido da gama completa de poderosas ferramentas de gestão e segurança. Políticas de grupo: simplificam a administração de grupos de usuários ou computadores. Instalação e manutenção de software: permite a instalação, configuração, reparação ou remoção automática de aplicações de software. Perfis de usuários itinerantes: permite-lhe acessar seus documentos e definições, independentemente do local onde iniciar a sessão. Serviço de instalação remota (RIS): fornece suporte para instalações remotas do sistema operacional, permitindo a instalação de computadores através da rede. Código binário universal: introduza texto em qualquer idioma e execute qualquer versão localizada de aplicações Win32 em qualquer versão localizada do Windows XP. Suplemento Interface do utilizador multi-idioma (MUI): permite alterar o idioma da interface do usuário para obter caixas de diálogo, menus, arquivos de ajuda, dicionários e ferramentas de verificação ortográfica localizadas. 13.5- VANTAGENS Windows original para Windows XP usa a ativação e a validação do produto Windows, bem como o Notifications, para verificar se sua cópia do Windows é original. O uso do Windows original proporciona melhor desempenho e permite que você acesse todos os downloads no Centro de Download da Microsoft, ao mesmo tempo em que ajuda a protegê-lo contra os riscos do software falsificado. A ativação é uma tecnologia antipirataria projetada para assegurar que sua cópia do Windows XP esteja devidamente licenciada. Ela funciona verificando se a chave do produto é válida e se está sendo usada somente no número de computadores permitido pela licença de software. A ativação usa um processo simples e rápido para proteger sua cópia e garantir que você tenha recebido aquilo por que pagou. A validação é um processo rápido que permite descobrir se a chave de produto ativada é falsificada ou se foi usada indevidamente. Por exemplo, você pode ter recebido, acidentalmente, uma chave de produto que foi denunciada como perdida ou roubada pelo proprietário original. Às vezes, durante um reparo ou uma reinstalação, uma chave de produto inválida será usada se a chave original não estiver disponível. A Microsoft valoriza a sua privacidade e, portanto, não usa informações obtidas durante o processo de validação para identificá-lo nem contatá-lo. Página 55 de 58 ______________________________________________________Organização de Sistemas Operacionais O Notifications ajuda a Microsoft a combater a pirataria de software e ajuda você a validar a cópia do Microsoft Windows XP instalada em seu computador como original e devidamente licenciada. Ele o lembra de que sua cópia do Windows XP não passou na validação e fornece recursos que o ajudam a corrigir facilmente o problema online. Por meio da confirmação de que sua cópia do Windows XP é original, você pode auferir as vantagens de todos os recursos, suporte e aprimoramentos contínuos bem como a tranqüilidade obtidos com o uso do Windows original. 13.6- DESVANTAGENS Limitações ao usar o sistema de arquivos FAT32 com o Windows XP: Os clusters não podem Ter 64 KB (kilobytes) ou mais. Se os clusters tiverem 64 KB ou mais, alguns programas (como programas de instalação) podem fazer um cálculo errado do espaço em dísco. Um volume FAT32 deve conter um mínimo de 65.527 clusters. Não é possível aumentar o tamanho do cluster em um volume que usa o sistema de arquivos FAT32 para que contenha menos de 65.527 clusters. O tamanho máximo do disco é de aproximadamente 8 terabytes ao levar em consideração as seguintes variáveis: O número máximo possível de clusters em um volume FAT32 é 268.435.445 e existe um espaço máximo de 32 KB por cluster, junto com o espaço solicitado para o FAT (file allocation table). Não é possível diminuir o número de clusters em um volume FAT32 para que o tamanho do FAT seja maior que 16 megabytes (MB) menos 64 KB. Não é possível formatar um volume maior do que 32 gigabytes (GB) usando um sistema de arquivos FAT32 durante o processo de instalação do Windows XP. O Windows XP pode montar e oferecer suporte para volumes FAT32 maiores do que 32 GB (sujeito a outros limites), mas não é possível criar um volume FAT32 maior do que 32 GB usando a ferramenta Formatação durante a instalação. Se precisar formatar um volume maior do que 32 GB, use o sistema de arquivos NTFS para formatá-lo. Outra opção é iniciar a partir de um disco de inicialização do Microsoft Windows 98 ou Microsoft Windows Millennium Edition (Me) e usar a ferramenta Formatação incluída no disco. 13.7- RECURSOS Novo Ambiente de Trabalho: É a primeira coisa, e bem visual, que se note ao usar o Windows XP pela primeira vez. A área de Trabalho (o Desktop) é muito mais limpo, simples e agradável de usar. Sistema de Múltiplos Usuários: O Windows XP não permite que usuários não autorizados operem o sistema. O logon dos usuários se torna obrigatório, a partir do segundo usuário cadastrado no sistema. Atalhos para os ambientes de trabalho dos usuários cadastrados no XP se encontram na tela de logon. Ao se criar um novo usuário é possível definir o nível de segurança dele, e suas permissões. assim um usuário não administrador poderá apenas utilizar os aplicativos instalados, e usar apenas os documentos que estiverem em pastas compartilhadas. Kernel Mais Seguro e Poderoso: O kernel protegido, herdado do Windows 2000, é uma das grandes, e importantes, novidades do Windows XP. Ele evita a imensa maioria dos travamentos, e poderá deixar seu sistema funcional por centenas de horas seguidas de trabalho com a máquina. Página 56 de 58 ______________________________________________________Organização de Sistemas Operacionais Conexão Remota: Semelhante ao serviço Terminal Service, do Windows 2000 Server, o Windows XP possui um serviço denominado Remote Desktop Connection. Combinado com o uso do Internet Information Services (IIS) o RDC permitirá que um usuário com direitos administrativos entre em sua máquina, remotamente, através de um navegador e usando uma rede local, ou mesmo uma conexão Internet. Suporte ao Sistema de Arquivos NTFS: O Windows XP tem suporte a sistemas de arquivos tanto FAT32, quanto NTFS (NT File System). Este sistema NTFS, adotado no Windows NT e 2000, oferece uma segurança a seus dados e programas nunca possíveis nas versões Windows 9X/ME. Inclui sistema de encriptação de arquivos (EFS) que protege os dados gravados em seu disco. Suporte Nativo a Gravador de CD-ROM: O novo sistema operacional da Microsoft traz ainda, de forma nativa, suporte total a gravação em mídia CD-R e CD-RW. O sistema reconhece seu gravador automaticamente, instalando os drivers necessários à essa operação. Abrindo-se o Meu Computador, ou o Windows Explorer, o gravador de CD já aparece e permite que, usando simplesmente o botão direito do mouse, se selecione as opções de configuração e a própria gravação nas mídias existentes. 13.8- SUPORTE O Windows XP Embedded inclui um Input Method Manager (IMM) [Gerente de Método de Entrada] e Input Method Editor (IME) [Editor de Método de Entrada] para dar suporte a uma ampla variedade de mecanismos de entrada associados a diferentes idiomas. Por exemplo, aplicativos que requerem a entrada de caracter de idioma da Ásia Oriental usam o IME. O API para acessar a funcionalidade IMM e IME é oferecido como parte do padrão Win32 API no Windows XP Embedded. Esses APIs são documentados na Plataforma SDK Windows XP. O Windows XP Embedded também suporta um novo serviço de entrada de texto que suporta tecnologias de entrada avançadas, tais como discurso e manuscrito, bem como melhorias à funcionalidade IME tradicional. Página 57 de 58 ______________________________________________________Organização de Sistemas Operacionais Referências Rever estas referências ALMEIDA, Marcus Garcia de; Fundamentos de Informática. Software e hardware. Brasport. 2ª edição, 2002. MANZANO, André Luiz N G; MANZANO, Maria Izabel N G. Informática Básica – Coleção Estudo Dirigido. Érica, 3ª edição, 2000. MONTEIRO, Mário A; Introdução à Organização de Computadores. LTC, 4ª edição, 2001. NORTON, Peter; Desvendado o PC. Campus. 3ª edição. 1989. Página 58 de 58