O SISTEMA OPERACIONAL GNU/LINUX – KERNEL LINUX
Por: Sara • 23/12/2018 • 2.192 Palavras (9 Páginas) • 415 Visualizações
...
2.3) O Kernel Linux
O kernel do sistema operacional Linux é um núcleo monolítico, escrito na linguagem de programação C e várias partes escritas em Assembly, suportado por GCC (GNU Compiler Collection – compilador de linguagens de programação do projeto GNU).
O kernel Linux pode ser dividido em sete subsistemas:
- System Call Interface (Interface de Chamada do Sistema) – SCI
- Process Management (Gerenciamento de Processos) – PM
- Virtual File System (Sistema de Arquivo Virtual) – VFS
- Memory Management (Gerenciamento de Memória) – MM
- Network Stack (Pilha de Redes)
- Arch (Código Dependente da Arquitetura)
- Device Drivers (Drivers de Dispositivo) – DD
2.3.1) System Call Interface (Interface de Chamada do Sistema) – SCI
Pela Interface de Chamada do Sistema o usuário faz chamada de funções, sendo seguinte um exemplo de processo de chamada:
- Usuário solicita chamada de uma função, que é especificada por registro eax
- Biblioteca C é carregada com índice de chamada
- Interrupção do software (sai do espaço do usuário e entra no espaço do kernel) → execução da função system_call, que controla todas as chamadas do sistema, conforme identificado por eax
- Após testes simples, função system_call_table é chamada → chamada real do sistema
- Após retorno da chamada de sistema, syscall_exit é chamada
- Depois é chamada resume_userspace para voltar ao espaço do usuário, com a função solicitada pelo usuário chamada.
[pic 3]
M. TIM JONES, Kernel command using Linux system calls. Disponível em: . Acesso em: 15 mai. 2016.
2.3.2) Gerenciamento de Processos – PM
O kernel Linux gerencia os processos (programas em execução), onde é executado uma tarefa por vez, porém em time shared (tempo de execução compartilhado). Todo processo é representado por uma grande estrutura chamada task_struct e possui threads (encadeamento) que são linhas de execução com códigos, sendo que cada processo possui nível de prioridade diferente. Para criar um novo processo faz-se uma chamada à função fork, para executar um programa chama a função fork seguido da função exec, para terminar um processo chama a função do_exit que limpa todas as referências do processo do sistema operacional.
Para gerenciar os processos, PM os-coleta primeiramente de duas maneiras diferentes: uma é hashtable, onde os processos são colocados em hash (pode-se imaginá-lo como uma “chave” que serve para pesquisa e busca futura) pelo valor de PID (valor numérico que é exclusivo para cada processo); outra é lista circular, que faz repetições através de uma lista de tarefas.
2.3.3) Sistema de Arquivo Virtual – VFS
Sistema que faz comunicação entre usuário ou programa e sistema de arquivos através de funções de API como open, read, write, close, etc, e outros plug-ins, possui ainda um cachê perto do hardware para armazenar por curto período arquivos já lidos, para poderem ser acessados com mais rapidez quando for acessar novamente.
Para o Linux, todos os arquivos compostos por um conjunto de objetos que são bootblock, superblock, inode e bloco de dados. O bootblock contém informações sobre formas de inicialização (boot) possíveis do sistema operacional. O superblock descreve e mantém o sistema de arquivos e contém informação dos blocos seguintes. O inode contém todos os dados e metadados dos arquivos ou diretório de um sistema de arquivos. O bloco de dados contém de fato os dados dos arquivos dentro do sistema de arquivos.
Assim, o VFS funciona como uma camada abstrata entre usuário ou programa e sistema de arquivos. Por exemplo, ao chamar a função e definir em qual arquivo executar, o VFS passa os dados e a função para o sistema de arquivos para que a função seja executada pelo sistema de arquivos.
2.3.4) Gerenciamento de Memória – MM
O sistema de gerenciamento de memória de kernel Linux gerencia a memória virtual através de páginas que geralmente é um buffer de 4 KB. No kernel Linux existem duas formas de gerenciamento de memória, Buddy Allocator e Slab Allocator.
2.3.4.1) Buddy Allocator (Alocador Buddy)
O sistema de gerenciamento Buddy Allocator funciona de uma forma que a memória é divida em várias molduras de páginas, onde são armazenadas as páginas. Existem no total, 10 diferentes tamanhos de molduras de páginas, começando de 1, 2, 4, 8, 16, 32, 64, 128, 256 e 512 páginas (2n, 0n9), como cada uma página possui 4KB, logo, o tamanho total de uma moldura de páginas será número de páginas multiplicado por 4.
Quando o sistema for alocar páginas, Linux procurará a menor moldura de páginas suficiente para armazenar páginas, caso não a encontre, o sistema irá dividir uma moldura maior pela metade e usá-la. Por exemplo, quando é necessário armazenar 14 páginas, o sistema irá disponibilizar uma moldura de 16 páginas, porém, se não existisse uma moldura de 16 páginas, o Buddy Allocator irá dividir moldura de 32 páginas em duas pela metade, uma será utilizada e outra será uma moldura livre de 16 páginas. Além disso, quando uma moldura se torna livre, Buddy Allocator verifica se as molduras de endereços próximos estão livres, se sim, irá as agrupar para se tornarem uma moldura maior.
2.3.4.2) Slab Allocator (Alocador Slab)
O sistema de cálculo do Slab Allocator é similar ao Buddy Allocator, a única diferença entre eles é o tamanho das páginas, onde o Slab Allocator torna uma página de 4 KB ainda menor, ou seja, o Buddy Allocator trata de páginas de tamanhos maiores, enquanto o Slab Allocator trata as de tamanhos menores, que reduz o desperdício de páginas (páginas em uso parcial).
2.3.5) Pilhas de Rede
Na sua estrutura, a solicitação do seu uso é feita através do SCI, passando pela camada de soquetes, o Protocolo
...