6. Memória Virtual / Processos x Serviços
Atualizado em: 7 de março de 2024
Por: Nelson H. Koshoji
6.1. Memória Virtual
A memória virtual é um conceito fundamental em sistemas operacionais modernos, permitindo que um computador compense a falta de memória física (RAM) utilizando uma porção do disco rígido como uma extensão da memória. Essa técnica melhora a gestão de memória do sistema, permitindo que ele execute mais programas simultaneamente do que seria possível apenas com a memória física disponível.
Definição de Memória Virtual
A memória virtual é uma camada de abstração do sistema operacional que faz com que a memória do computador pareça contínua e ilimitada para os programas em execução. Ela utiliza o espaço de armazenamento secundário (como um disco rígido ou SSD) para estender a memória física disponível. Quando a RAM fica cheia, o sistema operacional pode mover dados que não estão sendo usados ativamente para o disco, num espaço conhecido como “swap”, liberando RAM para outros processos. Isso é feito através de um processo conhecido como “paginação” ou “swapping”.
Como Explicar o Uso da Memória Virtual
Para explicar o uso da memória virtual, você pode usar a seguinte analogia: Imagine que a memória RAM do computador seja uma mesa de trabalho, onde você pode manter apenas os materiais e documentos com os quais está trabalhando diretamente. Quando a mesa fica cheia, você começa a guardar os documentos menos usados em gavetas ou arquivos (o equivalente ao espaço de swap no disco). Quando você precisar desses documentos novamente, poderá trocá-los com algum material que esteja na mesa, mas que não esteja sendo usado no momento.
Essa abordagem permite que o computador:
- Execute mais aplicativos simultaneamente do que a memória física permitiria.
- Isola os processos uns dos outros e do sistema operacional, aumentando a segurança e a estabilidade.
- Fornece um espaço de endereçamento contínuo para os programas, simplificando a programação.
Verificando a Memória Virtual no Linux
No Linux, você pode verificar o uso da memória virtual, incluindo o espaço de swap, usando vários comandos:
free: Mostra a quantidade total de memória física e de swap livre e usada no sistema.
free -h
A opção -h
torna a saída mais legível, apresentando os valores em formatos como M (megabytes) e G (gigabytes).
swapon -s: Lista todos os dispositivos de swap e arquivos ativos.
swapon -s
Este comando mostra onde o swap está localizado, seu tamanho e quanto está sendo usado.
top ou htop: Fornece uma visão dinâmica do uso da memória entre os processos.
-
top
é instalado por padrão na maioria das distribuições Linux.htop
é uma versão aprimorada que pode precisar ser instalada, mas oferece uma visualização mais amigável.
Aqui estão as colunas padrão:
- PID: ID do Processo. Identificador único para cada processo.
- USER: Usuário que iniciou o processo.
- PRI: Prioridade do processo. Prioridade interna do kernel para o processo.
- NI: Nice value. Valor que determina a cortesia do processo em relação aos outros processos, influenciando sua prioridade.
- VIRT: Memória virtual total usada pelo processo.
- RES: Memória residente. Memória física usada pelo processo.
- SHR: Memória compartilhada. Parte da RES que pode ser compartilhada com outros processos.
- S: Estado do processo. Por exemplo, S para dormindo (sleeping), R para rodando (running), Z para zumbi (zombie), etc.
- %CPU: Porcentagem do uso de CPU pelo processo.
- %MEM: Porcentagem do uso de memória física pelo processo.
- TIME+: Tempo total de CPU usado pelo processo desde o início.
- COMMAND: Linha de comando que iniciou o processo.
6.2. Processo x Serviços
Processo
Um processo é basicamente uma instância de um programa em execução. Ele consiste em um conjunto de instruções carregadas na memória, juntamente com recursos associados como espaço de endereçamento de memória, contadores de programa, arquivos abertos e conexões de rede, entre outros. Quando você inicia o Firefox, o sistema operacional cria um novo processo para o navegador. Esse processo é isolado dos outros processos; ele tem seu próprio espaço de memória e geralmente não pode interferir diretamente nos processos dos outros programas.
Serviço
Um serviço, por outro lado, é um tipo especial de programa ou processo que roda em segundo plano em sistemas operacionais. Serviços são projetados para não requerer interação direta do usuário e frequentemente fornecem funcionalidades essenciais ao sistema ou a outros programas. Em ambientes Unix/Linux, esses são frequentemente chamados de “daemons”, enquanto no Windows, são referidos como “serviços do Windows”. Eles são iniciados no boot do sistema ou sob demanda, e sua execução é gerenciada pelo sistema operacional.
Esses serviços podem incluir servidores web, servidores de banco de dados, serviços de impressão, e muitos outros. Eles são gerenciados por sistemas de inicialização como o systemd
.
systemd
O systemd
é o sistema de inicialização e gerenciamento de serviços mais utilizado nas distribuições Linux atuais. Ele fornece comandos poderosos para gerenciar serviços e outros recursos do sistema.
Listando Serviços com systemctl
Para consultar os serviços no Linux que utilizam systemd
, você pode usar o comando systemctl
. Aqui estão algumas maneiras de listar e inspecionar serviços:
Listar todos os serviços ativos:
systemctl list-units --type=service --state=running
Este comando mostra todos os serviços que estão atualmente em execução no sistema.
Listar todos os serviços, independentemente do estado:
systemctl list-units --type=service --all
Isso inclui serviços ativos, inativos, falhados, etc.