*Gerenciamento de memória * Um fator indispensável e que pouca gente leva em consideração é o gerenciamento de memória feito pelo sistema operacional (SO). Não basta ter muita RAM disponível em seu computador. O que torna a RAM realmente útil é a capacidade de uso que o SO faz dela. Dos primeiros computadores pessoais até as máquinas de alto desempenho dos dias atuais, tivemos grandes avanços em relação à velocidade e qualidade dos componentes, mas a forma de funcionamento é basicamente a mesma, conhecida como arquitetura de Von Neumann: primeiro lêse os dados do disco rígido na memória RAM e em seguida ocorre o processamento por parte da CPU, esquema que é utilizado tanto pelos Pentium III, quanto Core i7. A memória virtual entra nesse esquema principalmente em duas situações: quando a memória RAM não consegue mais segurar todos os programas abertos ou quando algum programa não está sendo utilizado há algum tempo e por isso pode ser retirado da memória. Quando dizemos “memória virtual” estamos nos referindo a uma parte do disco rígido dedicado a essa tarefa e utilizado pelo Windows para gerenciá-las. Quando acontece alguma das situações acima, o sistema operacional desaloca os processos menos utilizados da memória RAM e armazena no HD, copiando de volta para a memória RAM quando necessário. Isso causa uma considerável perda de desempenho, já que os discos rígidos são componentes mecânicos extremamente lentos se comparados à memória RAM. WINDOWS Basicamente, o Windows trabalha com dois tipos de memória. O primeiro deles é a memória principal, também chamada de física. Ela é a quantidade de RAM instalada em sua máquina, os pentes de memória em si. Já a memória conhecida como virtual é uma espécie de memória auxiliar, usada pelo computador em alguns casos especiais. Essa memória é nada mais do que um arquivo hospedado no disco rígido da máquina, e o Windows usa esse arquivo como se ele fosse uma extensão da memória principal. O Windows é bem esperto no que diz respeito ao gerenciamento de memória. Grosso modo, podemos dizer que ele “sabe”, por exemplo, o que deve ser enviado para a memória física e o que deve ser armazenado na virtual. Ao carregar na memória todos os softwares necessários para o bom funcionamento do sistema, o Windows respeita algumas regras. A memória física recebe aquilo que o Windows considera essencial, como o próprio sistema operacional e as aplicações que o usuário estiver usando no momento. O restante, ou seja, aquilo que o Windows acredita que não será usado tão urgentemente, fica na memória virtual. Em outras palavras, a memória virtual é um recurso essencial para o armazenamento de dados que não estão em uso, mas que devem ser recuperados com velocidade quando necessário. Essa memória também é usada pelo sistema quando se esgota, por completo, o espaço disponível na memória física. Nesse caso, a memória virtual acaba sendo uma extensão da memória principal. Porém, existe uma desvantagem a ser levada em consideração. A memória virtual fica armazenada em um arquivo no disco rígido da máquina. E, como sabemos, o processo de leitura e escrita de dados no HD do computador é muito mais lento do que o equivalente em memória RAM. Basicamente, isso explica por que o desempenho do computador melhora quando instalamos novos pentes de memória no PC. Quanto mais memória física disponível, menos provável é o uso 1 extensivo da memória virtual. LINUX O gerenciamento de memória é o que torna o sistema operacional mais rápido e funcional. Assim como o Windows, o Linux possui dois sistemas de gerenciamento de memória, a memória física, que cuida da alocação e liberação de blocos de memória, e a memória virtual, que tem o papel de “enganar” os processos, informando que há memória suficiente quando não há. Esta técnica pode melhorar a performance do sistema operacional. O Linux é um sistema de multiprocesso e multiusuários, então devemos ter um controle rígido sobre a memória, para que um processo não sobreponha os recursos (memória) utilizados pelo outro. O gerenciamento de memória no Linux é realizado com o auxílio de circuitos de hardware presentes nos microprocessadores. Esses circuitos permitem que o gerenciamento de memória seja mais eficiente e seguro, evitando erros causados por software no acesso à memória. O acesso à memória física não acontece direto do software. No software especificamos o endereço lógico, que consiste do segmento e de um offset representando a distância entre o endereço que desejamos acessar e o início do segmento. O endereço lógico é compilado por uma unidade de segmentação, que o transforma em um endereço virtual. Este endereço virtual é representado por um inteiro de 32 bits, e portanto, pode endereçar até 4GB, do endereço 0x00000000 até 0xffffffff. O endereço virtual é transmitido a uma unidade de paginação, que é responsável por associar o endereço virtual ao físico, representado por inteiros não negativos de 32 ou 36 bits. O endereço resultante é utilizado para acessar um dado presente na memória dos chips. Através deste processo de acesso à memória, podemos perceber que o Linux utiliza um modelo de segmentação com paginação. Em sistemas com multiprocessadores, a memória é compartilhada entre todas as CPUs. Assim, para evitar que diferentes CPUs acessem a memória o mesmo tempo, existe um circuito de hardware utilizado para a proteção da memória, conhecido como "Memory Arbiter", que é inserido entre o barramento e todo chip de memória, e possui a finalidade de garantir o acesso exclusivo à memória nas operações de leitura e escrita. Além do acesso exclusivo à região de memória compartilhada, o Linux dispõe de mecanismos para prevenir a invasão de processos no espaço do kernel. 2 *Gerenciamento de dispositivos: * O Gerenciador de Dispositivos monitora todos os dispositivos, canais e unidades de controle. Sua tarefa é escolher a forma mais adequada para a alocação de todos os dispositivos de um sistema (impressoras, terminais, unidades de disco, etc.), de acordo com uma política de programação de execução (scheduling) definida pelos projetistas do sistema. O Gerenciador de Dispositivos faz a alocação, inicia a operação e, por fim, “desaloca” o dispositivo. Não basta, entretanto, que cada gerenciador execute apenas suas tarefas individuais. Deve ainda ser capaz de trabalhar harmoniosamente com todos os outros gerenciadores. A seguir, um exemplo simplificado: Digamos que alguém digite um comando para que se execute um programa. Os seguintes passos principais devem acontecer sequencialmente: 1. O Gerenciador de Dispositivos recebe os impulsos elétricos emitidos através do teclado, decodifica as teclas pressionadas para formar o comando e o envia para a Interface de Comandos do Usuário, onde o comando é válido pelo Gerenciador da Unidade de Processamento. 2. O Gerenciador da Unidade de Processamento envia uma mensagem de reconhecimento, a qual é exibida no monitor de vídeo para que o digitador saiba que o comando foi enviado. 3. Quando o Gerenciador da Unidade de Processamento recebe o comando, ele determina se o programa deve ser recuperado de algum meio de armazenamento ou se já está em memória; em seguida, notifica o gerenciador apropriado. 4. Se o programa estiver armazenado, o Gerenciador de Arquivos deve identificar sua localização exata no disco, passar essa informação para o Gerenciador de Dispositivos, o qual recupera e envia o programa para o Gerenciador de Memória. Este, por sua vez, deve encontrar espaço para o programa e gravar em memória sua exata localização. 5. Assim que o programa estiver em memória, o Gerenciador de Memória deve monitorar sua localização e seu progresso, à medida que é executado pelo Gerenciador da Unidade de Processamento. 6. Uma vez terminada a execução, o programa deve enviar uma mensagem de término ao Gerenciador da Unidade de Processamento. 7. Por fim, o Gerenciador da Unidade de Processamento deve repassar a mensagem de término ao Gerenciador de Dispositivos, que deverá exibi-la no monitor de vídeo para que o usuário possa vêla. Apesar de ser uma demonstração simplificada de uma operação muito complexa, ela serve para ilustrar o alto grau de precisão que requer um sistema operacional. É bom lembrar que, nenhum gerenciador poderia executar devidamente suas tarefas sem a cooperação ativa de todos os outros componentes. O Gerenciador de Dispositivos fornece informações gráficas sobre como o hardware de seu computador é instalado e configurado e como o hardware interage com os programas de seu computador. 3 Você pode usar o Gerenciador de Dispositivos para alterar a forma de configurar seu hardware e para alterar a forma em que seu hardware interage com os programas de seu computador. Com o Gerenciador de Dispositivos, você pode atualizar os drivers de dispositivo para o hardware instalado no seu computador, modificar as configurações de hardware e solucionar problemas. O Gerenciador de Dispositivos possibilita: • Determinar se o hardware de seu computador está funcionando adequadamente. • Alterar as definições de configuração de hardware. • Identificar os drivers de dispositivo que estão carregados para cada dispositivo e obter informações sobre cada driver de dispositivo. • Alterar configurações avançadas e propriedades dos dispositivos. • Instalar drivers de dispositivo atualizados. • Desativar, ativar e desinstalar dispositivos. • Reinstalar a versão anterior de um driver. • Identificar conflitos de um dispositivo e definir manualmente as configurações de dispositivo. • Imprimir um resumo dos dispositivos que estão instalados no seu computador. • Normalmente, você vai utilizar o Gerenciador de Dispositivos para verificar o status de seu hardware e atualizar os drivers de dispositivo no seu computador. Os usuários avançados, que conhecem a fundo o hardware do computador, também podem usar os recursos de diagnóstico do Gerenciador de Dispositivo para resolver conflitos entre dispositivos e alterar configurações de recursos. LINUX Objetivo: criar uma interface única que mascare os detalhes específicos de cada dispositivo. Cada dispositivo tem um controlador (processador p/ realizar determinada função). Exemplo: teclado, mouse e portas seriais – controlador serial. Discos IDE – controlador IDE: Cada controlador possui um diferente conjunto de registradores de controle e estado (CSR) utilizados para realizar as operações em controlador/dispositivo. CSR concentrados no núcleo: ler e escrever comum a todas aplicações. O software que implementa essas operações no núcleo = driver de dispositivos. Pelo Kernel (núcleo) do sistema: O Kernel pode ser compilado com suporte a vários dispositivos, ou pode utilizar módulos para carregar este suporte. Geralmente os módulos de dispositivos estão na pasta do kernel em /etc/. 4 Você pode ver a lista de alguns dipositivos usando o comando lspci, ou utilizando o Kinfocenter (no caso de usar o KDE) e também usando o Hal-device-manager. Toda vez que o Linux inicia, o sistema tenta configurar o hardware e isto acontece automaticamente caso seja possível. Se não for possível, a sua distribuição pode não ter suporte à configuração automática ou o dispositivo não é suportado. Existem muitos drivers de dispositivos para Linux, mesmo equipamentos que não são mais suportados pelo Windows (em vista da antiguidade) podem ser suportados no Linux. WINDOWS Como Gerenciar Dispositivos com o Gerenciador de Dispositivos no sistema operacional Windows XP. O Windows 2000/XP trabalha, como as gerações anteriores, com drivers de dispositivos tanto monolíticos como universais. O sistema operacional é responsável por toda a gerência de entrada e saída, de dados, acesso direto a dispositivos/memória. Uma das particularidades da plataforma XP/2000 é a distinção entra os drivers de rede dos demais drivers de dispositivos do sistema; Os drivers de rede são responsáveis por todas as funcionalidades de rede do S.O., não sendo apenas responsável pelo envio de pacotes. Os demais drivers de dispositivos passam pela padronização WDM (win32 driver model) que visa uma melhor integração e clareza na especificação dos drivers. O Windows XP/2000 utiliza o padrão IRP (I/O Request packets), que é um formato de pacotes para todas as transferências de dados no sistema; As informações são convertidas, um gerenciador de I/O direciona os pacotes e libera posteriormente os recursos da máquina – tanto em modo síncrono como assíncrono. Muitas das modificações nos padrões das plataformas windows são em decorrência de sempre crescente utilização de redes/internet na realidade dos usuários. 5 *Sistemas de arquivo* Um sistema de arquivos é um conjunto de estruturas lógicas e de rotinas, que permitem ao sistema operacional controlar o acesso ao disco rígido. Diferentes sistemas operacionais usam diferentes sistemas de arquivos. Conforme cresce a capacidade dos discos e aumenta o volume de arquivos e acessos, esta tarefa torna-se mais e mais complicada, exigindo o uso de sistemas de arquivos cada vez mais complexos e robustos. Existem diversos sistemas de arquivos diferentes, que vão desde sistemas simples como o FAT16, que utilizamos em cartões de memória, até sistemas como o NTFS, EXT3 e ReiserFS, que incorporam recursos muito mais avançados. No mundo Windows, temos apenas três sistemas de arquivos: FAT16, FAT32 e NTFS. O FAT16 é o mais antigo, usado desde os tempos do MS-DOS, enquanto o NTFS é o mais complexo e atual. Apesar disso, temos uma variedade muito grande de sistemas de arquivos diferentes no Linux (e outros sistemas Unix), que incluem o EXT2, EXT3, EXT4, ReiserFS, XFS, JFS e muitos outros. Para quem usa apenas o Windows, estes sistemas podem parecer exóticos, mas eles são velhos conhecidos de quem trabalha com servidores, já que neles o Linux é que é o sistema mais popular. Descrição dos Sistemas de arquivo mais utilizados: FAT: É um dos tipos de sistema de arquivos que já foi mais utilizado no mundo, e atualmente é suportado por todos os tipos de sistemas operacionais. É um sistema de arquivos antigos (criado em 1987), então tem algumas limitações, sendo as mais visíveis ao usuário: A possibilidade de criação de partições (unidades lógicas) com no máximo 2 GB por unidade, e o nome do arquivo limitandose a oito caracteres principais de nome e três caracteres representando a extensão. Por isso, em sistemas de arquivos com FAT instalado, você facilmente verá os arquivos representados por EXEMPLO.TXT ou TESTEDE~.TXT, sendo que o til ("~") representa que o nome do arquivo estourou a quantidade de caracteres permitidos para o nome do arquivo. Os sistemas MS-DOS, Windows 3.x e o Windows 95 usam esse sistema de arquivos por padrão. FAT32: É um dos sistemas de arquivo mais usados no mundo. É uma evolução do FAT (também conhecido por FAT16). As principais evoluções foram: O aumento do tamanho máximo por unidade (no máximo 16 TB) e o aumento do tamanho do arquivo (até 4 GB por arquivo). Outra grande evolução foi o aumento no número de caracteres suportados para o nome de arquivo (passou de 8 para 256 caracteres). No FAT32 os dados são gravados de forma mais "condensadas" do que no FAT16, por isso essas principais mudanças. Os sistemas Windows mais recentes (Windows 95 OSR2, 98 e Me) utilizam esse sistema de arquivos por padrão, e são capazes de ler dados em sistemas de arquivos FAT16. Windows NT, 2000, XP, Vista e 7 também conseguem ler dados gravados em sistema de arquivos FAT32, embora esse não seja o padrão utilizado. FAT32 atualmente é o sistema de arquivos mais indicado e mais usado para unidades móveis (pendrives, cartões de memória, flash drives, etc), devido a possibilidade da remoção rápida do dispositivo e também da maneira como o dispositivo é usado pelo sistema operacional, deixando-o livre apenas para a gravação básica dos dados. NTFS: É o sistema de arquivos padrão para grandes unidades, servidores, e computadores com Windows NT, 2000, XP, Vista e 7 instalados. O NTFS foi criado para ser um padrão de sistema de arquivos em servidores, devido a sua confiabilidade, segurança e estabilidade. Possui muitas ferramentas de controle (inclusive de permissões por usuário), é mais seguro a fragmentos (fato que ocorre freqüentemente em sistemas FAT) e mais protegido contra falhas, além de possuir recursos 6 bem avançados, destinados a servidores (VSS, EFS, Quotas, etc.). Mesmo sendo um sistema de arquivos mais avançado (e mais lento por causa das diretivas de segurança), ele é usado por padrão nas instalações do Windows NT, 2000, XP, Vista e 7 (além do 2003 e 2008, sistemas operacionais destinados a servidores), pelo fato de não haver limitações nos tamanhos dos arquivos e nomes. ext: É um sistema de arquivos criado para uso com sistemas operacionais Linux, desenvolvido em 1992. Foi desenvolvido para superar as deficiências do sistema de arquivos padrão do Minix. Permitia que os arquivos tivessem nomes de até 255 caracteres por aquivo, e até 2 GB de tamanho por aquivo, mas esse sistema de arquivos ainda possuía algumas limitações, que foram resolvidas na ext2, o que incluiam unidades de até 2 TB por partição. Atualmente ext2 é usado amplamente em unidades móveis (pendrives, cartões de memória, etc) devido ao seu método de escrita. ext3: Evolução do ext2, é o padrão atual dos sistemas Linux. Um dos seus recursos mais interessantes é o journaling (simplificadamente falando, é como se o sistema operacional gravasse um "diário", ou log, com as alterações que vão sendo feitas no disco. Em caso de falha no sistema, o sistema operacional pode ler os dados desse log e realizar uma recuperação dos dados). Alguns pontos fracos são a baixa velocidade e desempenho reduzido. ext4: A útlima evolução dos sistemas ext. Considerado por muitos uma das melhores evoluções já feitas, é um sistema de arquivos com um desempenho excelente. O ext4 usa algumas funcionalidades diferentes para melhora do desempenho, incluindo a forma como os dados estão alocados ("alocação tardia") que resulta em ganho de desempenho e fragmentação quase nula. ReiserFS: Usa árvores balanceadas para tornar o processo de busca de arquivos, informações sobre segurança e outros metadados mais eficiente. Para arquivos muito pequenos, seus dados podem ser armazenados próximos aos metadados, então, ambos podem ser recuperados com um pequeno movimento do mecanismo da "cabeça" de leitura do disco. Essa propriedade vai contribuir para um melhor desempenho caso uma aplicação necessite abrir muitos arquivos pequenos rapidamente. No caso de um desligamento incorreto do sistema, o ReiserFS é capaz de recuperar a consistência do sistema de arquivos em pouco tempo e a possibilidade de perda de pastas ou partições é reduzida. Em compensação, os arquivos que eventualmente estiverem sendo gravados no exato momento em que acabou a energia ficarão com seus dados corrompidos, haverá acesso aos arquivos normalmente, mas o conteúdo estará truncado ou incompleto. Os sistemas de arquivos ext/ReiserFS não são compatíveis com sistemas operacionais da família Windows, entretando os sistemas Linux são capazes de ler e gravar em sistemas de arquivos FAT e NTFS. 7