B.4. Algumas Tarefas realizadas pelo Núcleo
B.4.1. Controlando o Hardware
O kernel tem, em primeiro lugar, a tarefa de controlar as partes do hardware, detectando-os, trocando-os quando o computador é ligado, e assim por diante. Também torna disponíveis para o software de alto nível com uma interface de programação simplificada, para que os aplicativos possam tirar proveito de dispositivos sem ter que se preocupar com detalhes como qual slot de extensão a placa opcional estiver conectada. A interface de programação também fornece uma camada de abstração; isso permite que o software de videoconferência, por exemplo, usar uma webcam independentemente da sua marca e modelo. O software pode apenas usar a interface Vídeo for Linux (V4L), e o kernel traduz as chamadas de função desta interface para os comandos de hardware reais necessários pela webcam específica em uso.
O kernel exporta muitos detalhes sobre o hardware detectado através dos sistemas de arquivos virtuais
/proc/
e
/sys/
. Várias ferramentas resumem esses detalhes. Entre elas, o
lspci
(no pacote
pciutils) lista os dispositivos PCI,
lsusb
(no pacote
usbutils) lista os dispositivos USB e
lspcmcia
(no pacote
pcmciautils) lista de cartões PCMCIA. Estas ferramentas são muito úteis para a identificação do modelo exato de um dispositivo. Esta identificação permite também pesquisas mais precisas na web, que por sua vez, levam a documentos mais relevantes.
Exemplo B.1. Exemplo de informação provida pelo lspci
e lsusb
$
lspci
[...]
00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
[...]
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01)
02:03.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)
$
lsusb
Bus 005 Device 004: ID 413c:a005 Dell Computer Corp.
Bus 005 Device 008: ID 413c:9001 Dell Computer Corp.
Bus 005 Device 007: ID 045e:00dd Microsoft Corp.
Bus 005 Device 006: ID 046d:c03d Logitech, Inc.
[...]
Bus 002 Device 004: ID 413c:8103 Dell Computer Corp. Wireless 350 Bluetooth
Estes programas têm uma opção -v
, que lista informações com muito mais detalhes (mas geralmente não é necessário). Finalmente, o comando lsdev
(no pacote procinfo) lista os recursos de comunicação usados pelos dispositivos.
As aplicações acessam frequentemente os dispositivos por meio de arquivos especiais criados dentro de
/dev/
(veja a barra lateral
DE VOLTA AO BÁSICO Permissão de acesso a dispositivos). Estes são arquivos especiais que representam as unidades de disco (por exemplo,
/dev/hda
e
/dev/sdc
), partições (
/dev/hda1
ou
/dev/sdc3
), mouses (
/dev/input/mouse0
), teclados (
/dev/input/event0
), placas de som (
/dev/snd/*
), portas seriais (
/dev/ttyS*
), e assim por diante.
B.4.2. Sistema de Arquivos
Os sistemas de arquivos são um dos aspectos mais importantes do kernel. Sistemas Unix agrupam todos os arquivos que armazenam em uma hierarquia única, que permite aos usuários (e as aplicações) a acessar os dados simplesmente por saber a sua localização dentro dessa hierarquia.
O ponto de partida desta árvore hierárquica é chamado de raiz, /
. Este diretório pode conter subdiretórios nomeados. Por exemplo, o subdiretório home
do /
é chamado /home/
. Este subdiretório pode, por sua vez, contêm outros subdiretórios, e assim por diante. Cada diretório também pode conter arquivos, onde os dados reais serão armazenados. Assim, o nome /home/rmas/Desktop/hello.txt
refere-se a um arquivo chamado hello.txt
armazenado no subdiretório Desktop
, subdiretório do rmas
, subdiretório de home
, diretório presente na raiz. O kernel traduz entre este sistema de nomenclatura e o armazenamento real e física no disco.
Ao contrário de outros sistemas, só há uma hierarquia deste tipo, e pode integrar dados de vários discos. Um desses discos é usado como a raiz, e os outros são "montados" em diretórios na hierarquia (o comando Unix é chamado mount
); esses outros discos estarão disponíveis sob estes "pontos de montagem". Isso permite o armazenamento do diretório principal dos usuários (tradicionalmente armazenados dentro de /home/
) em um segundo disco rígido, que irá conter os diretórios rhertzog
e rmas
. Depois que o disco é montado em /home/
, esses diretórios estarão disponíveis em seus locais habituais e caminhos como /home/rmas/Desktop/hello.txt
continuaram funcionando.
Existem muitos formatos de sistemas de arquivo que corresponde a muitas formas de armazenamento físico de dados nos discos. O mais conhecido são o ext2, ext3 e o ext4, mas existem outros. Por exemplo, o vfat é o sistema que foi historicamente usado pelos sistemas operacionais DOS e Windows, que permite utilizar os discos rígidos tanto no Debian como no Windows. Em qualquer caso, um sistema de arquivos deve ser preparado em um disco antes que ele possa ser montado e esta operação é conhecida como "formatação". Comandos como mkfs.ext3
(onde mkfs
é MaKe FileSystem - criar sistema de arquivos) fazem a formatação. Estes comandos exigem, como um parâmetro, um arquivo de dispositivo que representa a partição a ser formatada (por exemplo, /dev/sda1
). Esta operação é destrutiva e só deve ser executado uma vez, exceto se queira limpar deliberadamente um sistema de arquivos e começar de novo.
Há também sistemas de arquivos de rede, como o
NFS, em que os dados não são armazenados em um disco local. Em vez disso, os dados são transmitidos através da rede para um servidor que os armazena e recupera sob demanda. A abstração de sistema de arquivos evita que os usuários de cuidar: arquivos permanecem acessíveis na sua forma hierárquica usual.
B.4.3. Funções Compartilhadas
Uma vez que uma quantidade das mesmas funções são usadas por todos os softwares, não faz sentido centralizá-las no kernel. Por exemplo, a gestão do sistema de arquivos compartilhado permite qualquer aplicativo simplesmente abrir um arquivo pelo nome, sem precisar se preocupar onde o arquivo está armazenado fisicamente. O arquivo pode ser armazenado em diferentes partes em um disco rígido, ou dividido em vários discos rígidos, ou mesmo armazenados em um servidor de arquivos remoto. As funções de comunicação compartilhadas são usadas por aplicativos para troca de dados de forma independente da forma como os dados são transportados. Por exemplo, o transporte poderia ser sobre qualquer combinação de redes locais sem fio ou através de uma linha telefônica.
B.4.4. Gerenciamento de Processos
Um processo é uma instância em execução de um programa. Isso requer memória para armazenar tanto o próprio programa quanto seus dados operacionais. O kernel é responsável pela criação e acompanhá-los. Quando um programa é executado, o kernel primeiro reserva alguma memória, em seguida carrega o código executável do sistema de arquivos para ele, e então começa a execução do código. Ele mantém informações sobre este processo, o mais visível é um número de identificação conhecido como pid (process identifier - identificador de processo).
Kernels tipo Unix (incluindo o Linux), como a maioria dos outros sistemas operacionais modernos, são capazes de "multitarefa". Em outras palavras, eles permitem a execução de vários processos "ao mesmo tempo". Na verdade, há apenas um processo em execução em qualquer momento, mas o kernel divide o tempo em pequenas porções e executa cada processo de cada vez. Uma vez que estas porções de tempo são muito curtas (com intervalo em milissegundos), eles criam a ilusão de processos em execução em paralelo, embora estejam, na verdade, somente ativo durante alguns intervalos de tempo e ociosos no resto do tempo. O trabalho do kernel é ajustar seus mecanismos de agendamento para manter essa ilusão, enquanto maximiza o desempenho do sistema global. Se as porções de tempo são muito longas, o aplicativo pode não parecer responsivo como desejado. Se são muito curtas, o sistema perde tempo trocando entre as tarefas com muita frequência. Estas decisões podem ser ajustadas pelas prioridades do processo. Os processos de alta prioridade serão executados por porções de tempo mais longas e mais frequentes do que os processos de baixa prioridade.
Claro que, o núcleo permite a execução de várias instâncias independentes do mesmo programa. Mas cada um só pode acessar os seus próprios intervalos de tempo e memória. Assim seus dados se mantém independentes.
B.4.5. Gerenciamento de Direitos
Sistemas similares ao Unix também são multiusuário. Eles fornecem um sistema de gerenciamento de direitos que permite grupos e usuários separados; ele também permite controle sobre ações com base em permissões. O kernel gerencia dados de cada processo, permitindo-lhe controlar as permissões. Na maioria das vezes, um processo é identificado pelo usuário que o iniciou. Esse processo só é capaz de agir de acordo com as permissões disponíveis para seu dono. Por exemplo, tentar abrir um arquivo requer que o kernel verifique a identidade do processo em relação as permissões de acesso (para mais detalhes sobre este exemplo em particular, veja
Seção 9.3, “Gerenciando Direitos”).