Acerca de
Tutoriales
Comunidad
Actualidad
Enlaces





En macprogramadores.org
En Internet

Kernel

¿Qué es Darwin?

Darwin es la parte open source de Mac OS X que han desarrollado los ingenieros de Apple. Darwin consta de multitud de paquetes (Compiler Tools, Kerberos, Open Directory, X11, CUPS, XNU...).

¿Qué es XNU?

Un paquete importante de Darwin es el núcleo, el cual se llama XNU. Dentro de Darwin encontramos la implementación de XNU tanto para PowerPC como para x86.

Las principales partes que componen el núcleo de Mac OS X son básicamente dos: Mach 3.0, un microkernel desarrollado en la Universidad de Carnegie Mellon, y el núcleo BSD 4.4 (Berkeley Software Distribution) de FreeBSD.

XNU consta de cinco componentes principales:

Mach es el núcleo de XNU, y realiza las operaciones críticas del núcleo, como son la gestión de memoria, la gestión de procesos y hilos (protección de memoria, scheduling), interrupciones o las operaciones de entrada/salida con los periféricos.

Aunque el microkernel Mach 3.0 fue el núcleo en el que se basaron los ingenieros de Apple, XNU no es en si un microkernel puro, ya que su espacio de memoria está compartido con un parte de BSD y por el I/O Kit.

BSD es una capa por encima de Mach que permite a los programadores usar las conocidas llamadas al sistema POSIX de los sistemas UNIX. Estas funciones nos permiten entre otras cosas la gestión de procesos por ID, dar permisos a estos procesos, gestión de señales, o el uso de sockets BSD.

La principal ventaja que aporta BSD es que permite migrar fácilmente aplicaciones UNIX a Mac OS X.

I/O Kit Proporciona un framework orientado a objetos para el desarrollo de drivers de dispositivos. En concreto, usa un subconjunto del lenguaje C++ llamado Embedded C++.

El I/O Kit está formado por tres componentes principales:

  • Families. Define una colección de abstracciones software comunes a todos los dispositivos de una categoría. Apple proporciona familias para protocolos como USB, SCSI y FireWire, así como para dispositivos de almacenamiento y frame buffers. Nosotros debemos en general basarnos en las familias ya hechas, y no crear nuevas familias.
  • Nubs. Es un objeto que representa un dispositivo o servicio lógico (p.e. un bus, un disco, una partición de disco o el teclado).
  • Drivers. Es un objeto que se encarga de gestionar una determinada pieza hardware, implementando las operaciones de E/S para ese dispositivo. Mac OS X ya proporciona una colección de drivers que gestionan los dispositivos más comunes, como puedan ser discos duros o teclados. Si un nuevo dispositivo cumple con un estándar industrial, pero tiene más funcionalidad, entonces simplemente tendremos que crear una subclase que maneje esas características adicionales.

Si vamos a trabajar con el I/O kit conviene leerse:

I/O kit fundamentals

I/O Kit Device Driver Design Guidelines


File System El sistema de ficheros de XNU se basa en el diseño de VFS (Virtual File System), el cual se caracteriza porque nos permite añadir fácilmente nuevos sistemas de ficheros, así como añadir capas a un sistema de ficheros existentes (p.e. compresión, encriptación).

Mac OS X viene con los sistemas de ficheros HFS, HFS+, UFS (Universal File System) y ISO 9660

Networking Mac OS X lleva implementada la pila de red en el núcleo, el cual también tiene un sistema extensible que nos permite añadir nuevos protocolos llamado NKE (Network Kernel Extension).

¿Donde conseguir el código fuente de Darwin?

Existen dos repositorios open source destinados a almacenar el código fuente de Darwin.

El primero de ellos esta en la web de Apple en:

http://developer.apple.com/darwin/

Este es un repositorio del que se saca directamente el código fuente que lleva Mac OS X, con lo que su contenido debe de ser de calidad y por eso para que un programador pueda modificar este repositorio debe superar unos controles de calidad que establece Apple (en su mayoría acceden a el sólo los empleados de Apple), aunque todo el mundo puede bajarse el código fuente de este repositorio a través de CVS.

El otro repositorio esta gestionado por la web:

http://kernel.macosforge.org/

En este repositorio todo el mundo puede meter sus modificaciones aunque luego Apple sólo escoge las modificaciones que crea convenientes y de calidad.

Apple's Darwin Developer Documentation

La principal fuente de información sobre Darwin está en la web que para tal propósito ha abierto Apple aquí:

Darwin Developer Documentation

Todo aquel que quiera programar en el kernel, debería empezar leyéndose este documento:

Should You Program in the Kernel?

Este documento también da una buena visión general del núcleo de Mac OS X:

XNU: The Kernel

Donde se nos explica cuando debemos programar en modo kernel, y cuando podemos resolver un problema sin aumentar el tamaño de éste. Muchos programadores piensan que su sistema sólo se puede ejecutar dentro del kernel, cuando no es así. En definitiva Apple trata de evitar que XNU se convierta en un kernel monolítico tipo Linux.

Para iniciarse en la programación del kernel es recomendable empezar leyéndose:

Kernel Programming

Después podemos bajarnos el código fuente de XNU de aquí:

Darwin Source Code

Hardware Developer Documentation

Lo otro que necesita un programador del kernel es conocer el hardware para el que programa. Aquí tenéis mucha información sobre como son "por dentro" los fabulosos Power PC de Apple.

Hardware Developer Documentation