¿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
|