> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/sistemas-operacionais/linux/kernel.md).

# Kernel

O kernel é a parte mais importante do Linux, pois é o responsável por controlar os hardwares e os softwares. Este se encontra entre a camada de hardware e o GNU e é responsável pelo gerenciamento das tarefas em 4 áreas gerais do sistema:

| TAREFA                          | DESCRIÇÃO                                                                                                                                                                       |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Gerenciamento de Processos`    | Determina quais processos tem permissão para usar a CPU                                                                                                                         |
| `Gerenciamento de Memória`      | Ajuda a monitorar toda a memória - que parte será alocada no momento para um processo em particular, que parte deve ser compartilhada entre os processos e que parte está livre |
| `Device Drivers`                | Atua como uma interface entre o hardware (por exemplo, um disco) e os processos. Normalmente, operar o hardware é uma tarefa do kernel                                          |
| `Chamadas de Sistema e Suporte` | Os processos normalmente usam chamadas de sistema (syscall) para se comunicar com o kernel                                                                                      |

{% hint style="info" %}
**NOTA:** Nas Chamadas de Sistema e Suporte, temos duas chamadas importantes para entender como os processos são inicializados:

* fork() = Quando um processo chama fork(), o kernel cria uma cópia praticamente idêntica ao processo.
* exec() = Quando um processo chama exec(*programa*), o kernel inicia *programa*, substituindo o processo corrente.
  {% endhint %}

### Boot Loader

Geralmente o Kernel está localizado em `/vmlinuz` ou em `/boot/vmlinuz`.  Um boot loader (carregador de boot) carrega esse arquivo na memória e o coloca em ação quando o sistema é inicializado.\
Depois que o boot loader executar e colocar o kernel em ação, o principal do Kernel não será mais utilizado pelo sistema em execução. Entretanto você encontrará muitos módulos que o kernel pode carregar e descarregar por demanda durante o curso normal de operação do sistema. Eles são chamados de *Módulos Carregáveis do* *Kernel* e estão localizados em `/lib/modules`.&#x20;

### Informações Sobre Kernel

```bash
# Todas as informações
uname -a

# Nome do hardware da máquina (m), Kernel release (r) e nome do kernel (s)
uname -mrs

# Linux Release
cat /proc/version

# Áreas compartilhadas da memória
ipcs -m --human

rpm -q kernel

# Controle do Kernel
dmesg | grep Linux

ls /boot | grep vmlinuz-

# Ubuntu
cat /etc/lsb-release

# RedHat
cat /etc/redhat-release
```

{% hint style="danger" %}
**CUIDADO:**\
Manipular o Kernel pode deixar o SO inutilizável. Ao realizar por exemplo um PrivEsc, utilize o Kernel em último caso, para não correr o risco de comprometer o Linux.
{% endhint %}
