La arquitectura del OSX del iPhone: el kernel Mach y la RAM

Daniel Eran publica en su blog RoughlyDrafted.com un interesante artÃculo sobre la arquitectura del OSX del iPhone, el kernel y la RAM, con su permiso publico esta traducción al español, continuación de la anterior entrega.
Un grupo de personas trabajan en crackear el iPhone con el objetivo de usarlo en otras redes de telefonÃa o de instalarle o modificar el software. Sus descubrimientos son muy interesantes ya que revelan pistas de las caracterÃsticas latentes del iPhone que serán activadas vÃa software. Esto es un vistazo a lo descubierto sobre el SO del iPhone, empezando por el kernel.
[Leopard, Vista and the iPhone OS X Architecture]
[iPhone OS X Architecture: Disk, Shell, and Password Security]
[iPhone OS X Architecture: the BSD Unix Userland]
El kernel del iPhone
SÃ, es Mach. ¿Recuerdas a los llamados expertos que decÃan que Apple estaba atascada con Mach y que se cambiarÃa al kernel de Linux inmediatamente si pudiese, e incluso tan pronto como Avie Tevanian deje Apple?
Los primeros rumores de que Apple se cambiarÃa al kernel de Linux surgieron el año pasado, y este año se repitieron antes de la WWDC 07, cuando el meme evolucionó a una inminente migración al kernel Solaris de Sun.
No hay nada malo en Mach. En realidad cumple las necesidades de Apple bastante bien. Si Apple se viese en la necesidad de cambiar a otra arquitectura en el SO, el iPhone serÃa la oportunidad de hacerlo, al igual que Microsoft creó un nuevo kernel para Windows CE en vez de basarse en el kernel NT de su lÃnea de producto Windows NT/2000/XP/Vista.
[More Predictions for WWDC 2007: Solaris, Google, Surround: Mac OS X with the Solaris Kernel]
[The Microkernel Myth: What is Mach?]
[The Linux Kernel Myth: Much ado about Mach]
[OS X vs. WinCE: How iPhone Differs from Windows Mobile]
Las extensiones del kernel
El kernel Mach del iPhone usa la misma arquitectura I/O que el Mac OSX, permitiendo a Apple reutilizar mucho código maduro que ya está probado en el Mac. El I/O kit del Mach usa kexts o extensiones del kernel (kernel extensions) para añadir soporte de hardware a bajo nivel.
Debido a que se instalan en el kernel, es crÃtico que sean lo más maduras y sólidas posibles. Cuando un programa falla fuera del kernel, normalmente se puede reiniciar. Cuando algo falla dentro del kernel, provoca un kernel panic, el sistema se vuelve inestable y debe ser reiniciado. Eso es malo.
Apple no recomienda el añadir extensiones al kernel en el Mac OSX a menos que no exista otra forma de realizar la tarea. Por eso la gente protesta cuando un programa instala kexts sin una buena razón, normalmente da lugar a problemas de estabilidad.
Apple sigue sus propias recomendaciones ya que sólo usa dos conjuntos de kexts en el iPhone. El primero configura la entrada USB, para un dispositivo de interface humana, especÃficamente la pantalla multitouch:
- IOUSBDeviceFamily
- IOHIDFamily
- AppleMultitouchSPI
El segundo par de extensiones están relacionadas con las VPN (redes privadas virtuales). Estas extensiones se introducen en la pila de la red para proveer una forma segura de encriptar el tráfico sobre una red pública como internet:
- L2TP.ppp
- PPTP.ppp
Comparando el kernel del iPhone al del Mac
El kernel del iPhone y sus kexts no son idénticos al del Mac. Por ejemplo, los Mac tienen kexts para la cámara iSight, hardware de audio y video, gestión de consumo y térmica, asi como interfaces serie. El iPhone no tiene kexts equivalentes a ninguno de ellos, a pesar de contar con el hardware. El iPhone tampoco tiene el PPP.kext.
Parece que el soporte al hardware está dentro del propio kernel del iPhone, en vez de ser implementado como una kext. En los Mac hay diferentes modelos con diferente hardware, por lo que se necesita un sistema modular. Por el contrario, de momento, no hay variedad en el hardware del iPhone.
El hecho de introducir la arquitectura del kit I/O en el iPhone demuestra la intención de Apple de aumentar el soporte de hardware en el futuro y que no tendrá que añadir el soporte de un mecanismo de extensión en futuros modelos. Debido a que Mach y kit I/O están diseñados desde el principio para dar soporte a una amplia variedad de hardware, el iPhone hereda esta posibilidad y la usa tal cual sin obligar a la marca a diseñar un “kernel para un SO móvil”.
Una de la caracterÃsticas de Mach es un sistema de gestión de energÃa sofisticado, que alimenta de forma inteligente planos de dispositivos según el sistema entra en modo de espera o de reposo. Eso explica por qué la primera generación del iPhone tiene un buena duración de la baterÃa, el doble que los smartphones similares.
[KernelCache Files List - The iPhone Dev Wiki]
RAM del sistema y RAM Flash
Otra caracterÃstica que diferencia al iPhone de otros smartphones comparables es su memoria RAM y el sistema de almacenamiento en memoria Flash. Los expertos no han dicho nada al respecto, ya que es vergonzoso para los otros fabricantes, y parece polÃticamente incorrecto decir que el iPhone marca un nuevo camino en la tecnologÃa.
En el iPhone no hay discos fÃsicos, sólo imágenes de disco en RAM Flash, que funcionan de la misma forma que los ficheros DMG en el Mac. Un fichero DMG contiene una copia de los contenidos de una unidad. Cuando el Mac OSX monta el fichero, funciona como una unidad fÃsica, aunque es más rápida ya que no implica partes móviles, reside completamente en la RAM.
El iPhone se puede restablecer desde el iTunes como un iPod. El proceso copia un par de copias frescas de los DMG en la unidad. El iPhone luego monta las unidades y ejecuta el OSX desde la imagen del disco directamente desde la RAM Flash. Otros móviles, incluyendo los que usan Palm OS, Symbian y Windows Mobile, tienen una arquitectura similar que “se ejecuta desde la RAM Flash”.
La principal diferencia entre el iPhone y el resto de teléfonos móviles es que los último suelen tener 64 MB de RAM y 128 MB o menos de Flash, consumen al menos 40 MB con sus SO y aplicaciones, dejando poco espacio libre al usuario. Ofrecen conectores para tarjetas SD de memoria Flash, pero éstas están limitadas a 2 GB.
El iPhone tiene bien 4096 MB (4GB) o bien 8192 (8GB) de memoria RAM Flash instalada. Usa unos 700 MB para el OSX y las aplicaciones. También tiene 128 MB de RAM para las aplicaciones. Eso supone el doble de memoria RAM y 64 o 128 veces más en el almacenamiento en memoria Flash.
Eso explica por qué el iPhone no necesita una ranura para una tarjeta SD. Ya tiene entre 2 y 4 veces más memoria Flash instalada que la que los usuarios de otros teléfono potencialmente pueden añadir a sus aparatos con tarjetas SD.
También explica el motivo por el que el iPhone ofrece aplicaciones de internet reales, y por qué Palm, Windows Mobile y Symbian no van a igualar su funcionalidad a menos que reescriban sus sistemas operativos actuales.
[Update: Varios lectores preguntan por las tarjetas SDHD, que ofrecen más de 2 GB de Flash, pero sólo funcionan con nuevo hardware diseñado especÃficamente para darles soporte. Los teléfonos anteriores, con ranuras SD no las pueden usar. Sólo unos pocos teléfonos de gama alta pueden usarlas y el N95 es uno de ellos. Añadir 8 GB al N95 mediante una SDHD es otra forma de sumar 250$ sobre sus 750$ de precio, situándolo a un nivel de precios muy por encima del iPhone].
[Apple's OS X: How Does it Fit on the iPhone?]
¿Dónde está el kernel?
Una última cosa que diferencia a un iPhone de un Mac, es la localización del kernel. En un Mac, el kernel Mach se carga en la RAM desde el disco de arranque cuando iniciamos el sistema. No sólo es visible, sino que forma parte del proyecto open source de Apple llamado Darwin, por lo que los desarrolladores tienen acceso a su código fuente para entender cómo funciona.
El iPhone ejecuta una versión del kernel del Mac OSX, pero no es open source. Además está adaptado a la arquitectura de procesador ARM, lo que requiere modificaciones para sus peculiaridades.
Si cuentas a toda la gente en la Tierra que saben mucho sobre Darwin y el kernel XNU Mach de Apple, y luego te quedas con los que también saben mucho sobre ARM, tendrás a un grupo que puede compartir un par de pizzas. Eso tiene implicaciones para la seguridad del iPhone, tal como reflejaré en el próximo artÃculo sobre el núcleo del SO del iPhone y la seguridad.

16 Julio 2007 a las 2:04 pm
Muy buen artÃculo y agradecimiento eterno por la traducción Oscar
16 Julio 2007 a las 3:10 pm
Muy bueno el articulo, gracias por la info
16 Julio 2007 a las 3:34 pm
De nada
19 Julio 2007 a las 1:36 am
Kernel de Linux? Linux es el kernel!
19 Julio 2007 a las 8:40 am
Es una traducción y asi se expresa el autor.
Ya sabemos que tiene que llamarse GNU/Linux y que Linux se refiere al kernel, siendo el resto de las utilidades aportadas por el proyecto GNU.
Pero todo el mundo llama al sistema operativo Linux de forma genérica.
8 Octubre 2007 a las 11:21 pm
[...] La arquitectura del OSX del iPhone: el kernel Mach y la RAM iPhone OS X Architecture: the Mach Kernel and RAM Traducción: Oscar Reixa [...]
22 Octubre 2007 a las 1:00 am
[...] Origenes de la guerra HD-DVD vs Blu-RayOrigins of the Blu-ray vs HD-DVD War Traducción: Urian R La arquitectura del OSX del iPhone: el kernel Mach y la RAM iPhone OS X Architecture: the Mach Kernel and RAM Traducción: Oscar [...]
29 Octubre 2007 a las 4:42 am
[...] Español: La arquitectura del OSX del iPhone: el kernel Mach y la RAM – planetamac Traducción: Oscar [...]
9 Julio 2008 a las 4:34 am
Muy buen artÃculo… Iphone es muy bueno tambien porque sus aplicaciones son mucho mas completas que las de las palm y pocket Pc’s tradicionales. Ademas serÃa mucho mas dificil meterle virus a un sistema con kernel Mach que no es mas que un derivado de BSD (Unix)un sistema muy seguro u eficiente.
24 Julio 2008 a las 7:13 pm
[...] con Linux, aunque claramente desde el punto de vista del usuario no es así. Fuentes: Hurd vs XNU La arquitectura del OSX del iPhone: el kernel Mach y la RAM Windows NT Mach (kernel – Wikipedia, the free encyclopedia) addthis_pub = [...]
11 Noviembre 2008 a las 5:29 pm
[...] | CHW Hurd vs XNU La arquitectura del OSX del iPhone: el kernel Mach y la RAM Windows NT Mach (kernel – Wikipedia, the free [...]