Kernel de Linux

Unitat 2 · Sistemes Operatius (SO)

Jordi Mateo Fornés

Què és el nucli d’un sistema operatiu?

El nucli del SO és la capa més crítica i conté les rutines de gestió del sistema relacionades amb els recursos físic. Es troba sempre carregat a la Memòria.

Funcionalitats del nucli

  • El nucli té la capacitat d’assignar i desassignar la CPU als usuaris i processos per evitar que acaparin el recurs de forma ininterrompuda.
  • El nucli evita que els usuaris i processos accedeixin a dades d’altres usuaris.
  • El nucli evita els usuaris modifíquin el codi i les dades del nucli.
  • El nucli evita que els usuaris realitzin E/S il·legals.

Qué és la dualitat?

Mode kernel

  • El codi que s’executa en aquest mode té accés a qualsevol adreça de Memòria i a tots els recursos hardware.
  • Si un programa falla en aquest mode, tot el sistema quedarà aturat.

Mode usuari

  • El codi no té accés directe a Memòria ni als recursos hardware.
  • Si un programa falla en aquest mode, únicament atura el programa i no el sistema.

Repte: Separació de responsabilitats

Quina és la millor manera d’organitzar/separar totes les parts del sistema operatiu?

  • Com organitzem les parts?
  • Definició de polítiques: Quines seran les accions a realitzar.
  • Com cooperen les parts?
  • Mecanismes: Com es duran a terme aquestes accions.

Classificació (Estructura Interna)

  1. Monolítics
  2. Capes
  3. Micro-kernel
  4. Híbrids
  5. Hypervisors

Estructura simple

Característiques

  • Estructura no ben definida.
  • El SO és un conjunt de procediments que es poden cridar sense cap limitació.
  • Son sistemes complexos; difícil d’implementar i de depurar.
  • No tenen mode dual.
  • Exemple: MS-DOS

Estructura Monolítica

Els serveis d’usuari i serveis del kernel s’implementen sota el mateix espai d’adreces.

  • 👍 Les funcionalitats (serveis) s’invoquen amb crides al sistema.
  • 👍 Els controladors de dispositius es carreguen al nucli i passen a formar part del nucli.
  • 👎 Difícil d’entendre, modificar i mantenir.
  • 👎 Poc fiable (sense aïllament entre els mòduls del sistema)

Estructura per capes

  • 👍 Independència entre les capes.
  • 👍 Permet descriure el SO de forma clara.
  • 👍 Simplicitat en la construcció i depuració.
  • 👎 Rendiment.
  • 👎 És difícil definir les capes a causa de les limitacions per comunicar-se.

Estructura Microkernel

  • Els serveis d’usuari i serveis del kernel s’implementi en diferents espais d’adreces.

  • Comunicació entre els mòduls utilitza el pas de missatges.

  • 👍 El kernel té una mida més reduïda.

  • 👍 Portable, segur, fiable i extensible.

  • 👎 Reducció de la velocitat d’execució i del rendiment.

Microkernel vs Monolític

Microkernel vs Monolític vs Híbrids

Opinió sobre els híbrids

Molts experts en sistemes operatius consideren que el terme híbrid és un terme de màrqueting més que una categoria tècnica clara. Aquest terme s’utilitza sovint per descriure sistemes operatius que combinen elements de nuclis monolítics i microkernel, però la seva definició exacta pot variar segons l’ús i la interpretació.

“As to the whole ‘hybrid kernel’ thing - it’s just marketing. It’s ‘oh, those microkernels had good PR, how can we try to get good PR for our working kernel? Oh, I know, let’s use a cool name and try to imply that it has all the PR advantages that that other system has’ - Linus Torvalds

Kernel Modular

El serveis (core) estan integrats al kernel, la resta es poden carregar i descarregar de forma dinàmica.

  • No cal reiniciar per afegir nous mòduls.
  • No cal implementar mecanismes de pas de missatges com en els microkernels.
  • Qualsevol mòdul pot comunicar-se amb qualsevol altre.

Monolític i Modular

  • Els kernels monolítics poden ser modulars.
  • Els mòduls es carreguen i descarreguen dinàmicament en temps d’execució.
  • Els components es poden activar o desactivar en temps de compilació.
  • El kernel s’organitza en subsistemes lògics independents.
  • Interfícies estrictes però amb baix cost en rendiment: macros, funcions en línia, punters a funcions.

Exemple: Linux

El nucli Linux és un dels projectes de codi obert més grans del món, amb milers de desenvolupadors que aporten codi i milions de línies de codi canviats per a cada versió.

  • Arquitectura Monolítica híbrida basada en mòduls.
    • Enllaçat dinàmic.
    • Mòduls apilables.
  • Disseny orientat a objectes.
  • Suport per a múltiples fils d’execució.
  • Suport per processament múltiple simètric.
  • Abstracció hardware.

Hypervisors

  • Capa fina sobre el maquinari
  • Sistemes host dins màquines virtuals
  • Normalment requereixen característiques de maquinari (p.e. Intel VT-x)

Hypervisors

  • KVM és un mòdul del kernel Linux que permet la virtualització a través d’un sistema host.
  • XEN és un hypervisor de codi obert que permet la virtualització directa del maquinari.

Exokernels

Cada màquina virtual disposa d’un exokernel que exporta directament els recursos físics.

  • No implementa abstraccions altes (fitxers, sockets, processos), sinó que ofereix primitives de baix nivell (p. ex. blocs de disc, pàgines de memòria, línies de CPU).
  • Només valida i arbitra l’ús dels recursos, delegant la seva gestió a biblioteques d’usuari.
  • Mou la multiprogramació a l’espai d’usuari, com la planificació, la gestió de memòria i la comunicació entre processos (IPC).
  • 🤏 Els exokernels són tan petits que poden ser incorporats dins aplicacions específiques (p. ex. control de trànsit urbà).
  • ✨ minimitza l’overhead i dona flexibilitat en la gestió de recursos.

👉 No es traslladen instruccions de mode kernel a mode usuari, sinó la lògica de gestió de recursos.

Unikernels

Els unikernels empaqueten aplicació + mínim sistema operatiu en una única imatge executable sobre un hipervisor o hardware.

  • Només s’inclouen les llibreries i serveis estrictament necessaris per l’aplicació.
  • Execució directa: corren sobre un hipervisor o hardware, sense cap OS d’host per sota.
  • Eficiència: imatges extremadament petites, ràpides d’arrencar.
  • Inspiració:
    • Dels contenidors, però sense dependre d’un kernel complet subjacent.
    • Dels exokernels, però aquí les primitives exposades no són per al maquinari, sinó per a les necessitats específiques de l’aplicació.
  • S’utilitzen en IoT, serveis cloud lleugers, entorns on importen temps d’arrencada i seguretat.

El codi de l’aplicació i el kernel formen una sola unitat optimitzada.

Això és tot per avui

TAKE HOME MESSAGE

  • Els monolítics ofereixen velocitat però fragilitat.
  • Els microkernels aposten per modularitat i seguretat a costa de latència.
  • Els modulars permeten créixer sense reescriure tot el nucli.
  • Els exokernels lliuren el control directe a l’aplicació per màxima eficiència.
  • Els hipervisors faciliten la convivència d’ecosistemes sencers sobre un mateix hardware.
  • Els unikernels empaqueten aplicació i SO per a desplegaments ultralleugers i segurs.