Kernel

Na Galipedia, a Wikipedia en galego.
Conexións do kernel cas aplicacións de software e hardware do computador.

O kernel é o compoñente central dos sistemas operativos. É o software que traballa directamente co hardware do ordenador. Como componente básico dun sistema operativo, o kernel fornece a capa de abstracción de nivel máis baixo para os recursos (especialmente a memoria, os procesadores e os dispositivos de entrada e saída) que logo controla cada aplicación. Tipicamente, facilita estas operacións aos procesos das aplicacións mediante mecanismos de comunicación entre procesos e chamadas ao sistema.

Existen diferentes tipos de kernels e cada un afronta estas tarefas de modo distinto dependendo do seu deseño e realización. Os kernels monolíticos tentan logralas executando todo o código no mesmo espazo de enderezos para incrementar a potencia do sistema; os microkernels executan a maioría dos seus servizos no espazo do usuario, tentando mellorar a xestión e modularidade do código básico. O normal é que os kernels compartan características de ambos os dous modelos.

Tipos[editar | editar a fonte]

Hai catro grandes tipos de kernel:

  • Kernel monolítico. Potente kernel que facilita a abstracción do hardware. Existe unha gran variedade de kernels monolíticos.
  • Microkernel. Proporciona un pequeno conxunto de abstraccións simples do hardware, e usa as aplicacións chamadas servidores para ofrecer unha maior funcionalidade.
  • Kernel híbrido. Parecido ao microkernel, excepto porque inclúe código adicional no espazo de núcleo para que se execute máis rapidamente.
  • Exokernel. Non facilita ningunha abstracción, pero permite o uso de bibliotecas que proporcionan unha maior funcionalidade grazas ao acceso directo ou case directo ao hardware.

Microkernels[editar | editar a fonte]

O enfoque micronúcleo consiste en definir unha abstracción moi simple sobre o hardware, cun conxunto de primitivas ou chamadas ao sistema que implementan servizos do sistema operativo mínimos, como a xestión de fíos, o espazo de direccionamiento e a comunicación entre procesos.

O obxectivo principal é a separación da implementación dos servizos básicos e das regras de funcionamento do sistema. Por exemplo, o proceso de bloqueo de E/S pódese implementar cun servidor en espazo de usuario executándose encima do microkernel. Estes servidores de usuario, usados para xestionar as partes de alto nivel do sistema, son moi modulares e simplifican a estrutura e deseño do núcleo. Se falla un destes servidores, non se colgará o sistema enteiro, e poderase reiniciar este módulo independentemente do resto.

Algúns exemplos de microkernels son AIX, BeOS, L4, Mach, Minix, MorphOS, QNX, RADIOS, VSTa e GNU Hurd.

Aínda que Mach é o microkernel xeneralista máis coñecido, desenvolvéronse outros microkernels con propósitos máis específicos. L3 desenvolveuse para demostrar que os microkernels non son necesariamente lentos. A familia de microkernels L4 é a descendente de L3, e unha das súas últimas implementacións, chamada Pistachio, permite executar GNU/Linux simultáneamente con outros procesos, en espazos de direccionamiento separados.

QNX é un sistema operativo que estivo dispoñible desde principios dos 80, e ten un deseño de microkernel moi minimalista. Este sistema conseguiu chegar ás metas do paradigma do microkernel con moito máis éxito que Mach. Úsase en situacións en que non se pode permitir que haxa fallos de software, o que inclúe desde brazos robóticos en naves espaciais, ata máquinas que púen cristal onde un pequeno erro podería custar moito diñeiro.

Kernels monolíticos[editar | editar a fonte]

Frecuentemente prefírense os kernels monolíticos fronte aos microkernels debido ao menor nivel de complexidade que comporta o tratar con todo o código de control do sistema nun só espazo de direccionamiento.

A principios dos 90, os kernels monolíticos considerábanse obsoletos. O deseño de Linux como un kernel monolítico en lugar de como un microkernel deu lugar a unha famosa disputa entre Linus Torvalds e Andrew S. Tanenbaum[1]. Os argumentos de ambas as partes nesta discusión presentan algunhas motivacións interesantes.

Os kernels monolíticos adoitan ser máis fáciles de deseñar correctamente, e polo tanto poden crecer máis rapidamente que un sistema baseado nun microkernel, pero hai casos de éxito en ambos os dous bandos. Os microkernels adoitan usarse en robótica embebida ou computadoras médicas, xa que a maioría dos compoñentes do sistema operativo residen no seu propio espazo de memoria privado e protexido. Isto non sería posible cos núcleos monolíticos, nin sequera cos modernos que permiten cargar módulos.

Notas[editar | editar a fonte]