Cada processo do Linux, em uma máquina de 32 bits, dispõe de 3GB de espaço de endereçamento virtual para si próprio, com 1GB restante reservado para suas tabelas de páginas e outros dados do núcleo. O 1GB do núcleo não é visível quando o processo executa no modo usuário, mas torna-se acessível quando o processo faz uma chamada ao núcleo. O espaço de endereçamento é gerado quando o processo é criado e sobrescrito em uma chamada ao sistema exec.
O espaço de endereçamento virtual é dividido em áreas ou regiões organizadas em páginas. Contíguas e homogêneas. Isso quer dizer que cada área consiste de uma série de páginas consecutivas com proteção e propriedades de paginação idênticas. O segmento de código e os arquivos mapeados são exemplos de áreas. Pode haver vazio no espaço de endereçamento virtual entre essas áreas. Qualquer referência à memória para um vazio resulta em uma falta de página fatal. O tamanho de página é fixo.
O Linux usa um esquema de paginação de três níveis. Embora tenha sido utilizado no processador Alpha, esse esquema também é empregado de maneira modificada em todas as arquiteturas. Cada endereço virtual é quebrado em até quatros campos. O campo diretório é usado como índice do diretório global, sendo que existe um privado para cada processo. O valor encontrado é um ponteiro para um dos diretórios intermediários de página, o qual é indexado por um campo do endereço virtual. A entrada selecionada aponta para a tabela de página final, a indexada pelo campo página do endereço virtual. A entrada encontrada aponta para a página requisitada. No Pentium, que usa paginação em dois níveis, cada diretório intermediário de página tem somente uma entrada, de modo que, efetivamente, a entrada do diretório global é quem escolhe a tabela de página a usar.
O Linux gerencia a memória usando o algoritmo companheiro, com a adição de um vetor no qual o primeiro elemento é a cabeça de uma lista de blocos com tamanho de uma unidade, o segundo elemento é a cabeça de uma lista de blocos com tamanho de duas unidades, o próximo elemento aponta para blocos de quatro unidades e assim por diante. Dessa maneira qualquer bloco de potência de dois pode ser encontrado rapidamente.
Esse algoritmo gera uma considerável fragmentação interna, pois, se você deseja um bloco de 65 páginas, você tem de solicitar e obter um bloco de 128 páginas.
Para amenizar esse problema, o Linux tem uma segunda alocação de memória que obtêm blocos, usando o algoritmo companheiro, e depois os retalha (unidades menores) para gerenciar unidades menores separadamente. Um terceiro alocador de memória também é utilizado quando a memória solicitada precisa ser contígua somente no espaço virtual, mas não na memória física.
Para a proteção existe um gerenciador de memória virtual evitando que processos no modo Kernel e no modo User se misturem. É por meio de um sistema de arquivos que ocorre a gravação e a recuperação dos dados em um dispositivo de armazenamento em um computador.
O sistema de arquivos é independente do hardware e da BIOS, sendo especificado pelo software do sistema operacional no momento da instalação do sistema ou na configuração de dispositivos de armazenamento adicionais posteriormente à instalação.
Atualmente são mais de 20 sistemas de arquivos suportados pelo Linux, dentre eles os mais utilizados são o Ext3 e o ReiserFS.
O sistema de arquivos Ext3 foi desenvolvido pelo doutor Stephen Tweedie e colaboradores na Red Hat, ele seria um ext2 com recurso de journaling e passou a ser suportado na versão 2.4 do Linux. No ext3 o journal usa uma camada chamada JDB (Journaling Block Device), que utiliza um método diferente na recuperação de dados, ao invés de armazenar bytes que devem ser gravados, ele armazena blocos modificados do sistema de arquivos na memória para poder rastrear as operações que ficaram pendentes, a vantagem é que ele não precisa lidar com a complexidade de gravar bytes no journal e a desvantagem é que o journal acaba ficando maior.
O sistema de arquivos ReiserFS foi criado por Hans Reiser especialmente para o Linux, atualmente ela é patrocinada pela SuSE e mantida pela empresa NameSys (sendo o filesystem padrão das distribuições GNU/Linux da SuSE), o ReiserFS não utiliza blocos de tamanho fixo, mas ajusta o tamanho de acordo com o arquivo, ele e muito rápido ao ler arquivos menores.
Entre o EXT3 e o ReiserFS a principal diferença é que o EXT3 tenta guardar informações tanto sobre a metadata, ou seja, as informações sobre o espaço ocupado pelo arquivos e suas permissões quanto sobre os dados em si, enquanto o ReiserFS guarda apenas informações sobre a Metadata.
No caso de um desligamento incorreto o ReiserFS é capaz de recuperar a consistência do sistema de arquivos em frações de segundo e a possibilidade de perda de pastas ou partições é nula. Em compensação, os arquivos que estiverem sendo gravados no exato momento em que acabou a energia ficarão com seus dados alterados. Você continuará tendo acesso aos arquivos normalmente, mas o conteúdo estará truncado ou incompleto.
Já o EXT3 tenta sempre preservar não só a metadata, mas também os dados dos arquivos em sí. Isto se revela ao mesmo tempo uma força e uma fraqueza. A vantagem é que existe uma possibilidade maior de recuperar os arquivos que estiverem sendo gravados no exato momento em que acabar a energia. Por outro lado o journal guarda mais informações e é acessado mais freqüentemente o que causa uma certa degradação no desempenho (é justamente por isso que o ReiserFS costuma se sair melhor nos benchmarks) e ao mesmo tempo faz com que exista a possibilidade do próprio journal se corromper durante o desligamento.
Este é o grande perigo do EXT3, pois sem o journal a tolerância à falhas é a mesma que no EXT2: o sistema passará o velho FSCK que demorará vários minutos e você corre um grande risco de perder completamente os arquivos que estiverem sendo acessados no momento do desligamento e em casos mais graves até mesmo pastas inteiras.
Ou seja, o ReiserFS oferece uma grande proteção contra corrompimento do sistema de arquivos, mas em compensação pouca proteção para os arquivos em sí. O EXT3 por sua vez oferece uma maior proteção aos arquivos, mas em troca oferece um menor desempenho e uma proteção mais frágil para o sistema de arquivos em si.
O ReiserFS possui suporte a arquivos maiores que 2GB, o acesso a árvore de diretórios é mais rápido que o ext3, utiliza uma eficiente estrutura de dados chamada “balanced tree” ou árvore equilibrada, pois, trata toda a partição como se fosse uma única tabela de banco de dados contendo diretórios, arquivos e arquivos de meta-data, isso aumenta o desempenho de aplicativos que trabalham com arquivos pequenos (são lidos em apenas um E/S do HD), em um sistema de arquivo como ext2 o espaço no disco e alocado em blocos que variam de 512 a 4096 bytes ou até maior, se o arquivo exceder um múltiplo exato do tamanho do bloco ocorrerá desperdício de espaço no disco o ReiserFS não aloca em espaços fixos ou blocos ele aloca o tamanho exato que o arquivo precisa.
O ReiserFS infelizmente não trabalha perfeitamente com o sistema de arquivos de rede NFS (Network File System), existem alguns patches para resolver o problema, mas eles não o resolvem completamente.
Referencia Bibligráfica
http://www.guiadohardware.net/comunidade/funciona-gerenciamento/765467/
http://www2.fct.unesp.br/posti/download/solinux2.pdf
Linux Ferramentas Técnicas 2ª Edição – pág. 112.
http://www.infowester.com/linext3.php
http://www.guiafoca.org/guia/intermediario/ch-perm.htm
http://www.juliobattisti.com.br/tutoriais/jarbasteixeira/linux002.asp
http://pt.wikipedia.org/wiki/Linux
http://www.infowester.com/linux5.php
http://www.brasilescola.com/informatica/historia-do-linux.htm

