Alan Turing
Alan Turing fue un pionero de los campos de la computación y la inteligencia artificial,
y uno de los padres de la informática actual. Nació en 1912, en el seno de una familia
de clase media londinense. Su padre, funcionario británico en India, deseaba que Alan
fuera criado en Inglaterra. Por esa razón, cuando sus padres regresaron a India, lo
dejaron al cuidado de unos amigos. Tenía solo 1 año de edad.
Durante su periodo de estudiante, pasó por diferentes centros de prestigio como el
King’s College de Cambridge y la Universidad de Princeton, en los que se especializó en
matemáticas, lógica y teoría de probabilidades. En 1936 publicó un trabajo en el que
propuso un ingenio abstracto, conocido posteriormente como máquina de Turing. La
máquina de Turing es un modelo matemático que opera y lee instrucciones de una
cinta y que es capaz de emular la lógica de funcionamiento de cualquier algoritmo de
un computador. Lo más sorprendente es que Turing desarrolló este modelo, que podía
describir el funcionamiento de los ordenadores, antes de que existiera la tecnología
capaz de construirlos. En 1938, tras completar su doctorado en Princeton, Alan regresó
a Gran Bretaña y comenzó a trabajar en la Escuela Gubernamental de Códigos y
Cifrados, donde investigó sobre el descrifado de códigos de la máquina alemana
Enigma. Al principio no se dedicó exclusivamente a esta tarea, pero tras el estallido de
la Segunda Guerra Mundial se mudó a Bletchley Park y se concentró por completo en
la criptografía.
Trabajando en Bletchley Park junto con otros colegas desarrolló La Bombe, una
máquina electromecánica basada en el trabajo de unos criptógrafos polacos y con la
que se consiguió descrifrar el código de las Enigma. El funcionamiento de La Bombe se
basaba en una heurística que permitía acotar las posibilidades descartando las
combinaciones menos probables. Lo que hacía era estudiar todas las posibles
soluciones a fragmentos del texto original cifrado. Como se centraba en pequeños
fragmentos, lograba descartar rápidamente gran cantidad de combinaciones que
daban resultados sin sentido. Cuando La Bombe daba con una combinación exitosa se
desconectaba la corriente eléctrica. Podemos hacernos una idea del tamaño de La
Bombe si tenemos en cuenta que la primera que se instaló en 1940 estaba formada
por casi 100.000 piezas, 19 kilómetros de cables y 100 cilindros numerados iguales que
los que tenían las máquinas Enigma. Cinco años más tarde, ya funcionaban 100
máquinas como esta a la vez, llegando a descodificar 2 mensajes por minuto. El
descifrado de los códigos alemanes fue esencial para ganar la Segunda Guerra Mundial
y por esta razón Alan Turing fue condecorado con la Orden del Imperio Británico en
1945.
El Kernel
El Kernel ó núcleo, es un software que constituye una parte fundamental del sistema
operativo. Es el principal responsable de facilitar a los distintos programas acceso
seguro al hardware de la computadora el es el encargado de gestionar recursos, a
través de servicios de llamada al sistema, también se encarga de decidir qué programa
podrá hacer uso de un dispositivo de hardware y durante cuánto tiempo, lo que se
conoce como multiplexado. Acceder al hardware directamente puede ser realmente
complejo, por lo que los núcleos suelen implementar una serie de abstracciones del
hardware. Esto permite esconder la complejidad, y proporciona una interfaz limpia y
uniforme al hardware subyacente, lo que facilita su uso al programador.
Funcinones del Kernel
Administración de la memoria para todos los programas y procesos en
ejecución.
Administración del tiempo de procesador que los programas y procesos en
ejecución utilizan.
La comunicación entre los programas que solicitan recursos y el hardware.
Gestión de los distintos programas informáticos (tareas) de una máquina.
Gestión del hardware (memoria, procesador, periférico, forma de
almacenamiento, etc.)
Tipos de Kernel
No necesariamente se necesita un núcleo para usar una computadora. Los programas
pueden cargarse y ejecutarse directamente en una computadora «vacía», siempre que
sus autores quieran desarrollarlos sin usar ninguna abstracción del hardware ni
ninguna ayuda del sistema operativo. Ésta era la forma normal de usar muchas de las
primeras computadoras: para usar distintos programas se tenía que reiniciar y
reconfigurar la computadora cada vez. Con el tiempo, se empezó a dejar en memoria
(aún entre distintas ejecuciones) pequeños programas auxiliares, como el cargador y el
depurador, o se cargaban desde memoria de sólo lectura. A medida que se fueron
desarrollando, se convirtieron en los fundamentos de lo que llegarían a ser los
primeros núcleos de sistema operativo.
Hay cuatro grandes tipos de núcleos:
Los núcleos monolíticos facilitan abstracciones del hardware subyacente
realmente potentes y variadas.
Los micronúcleos: proporcionan un pequeño conjunto de abstracciones simples
del hardware, y usan las aplicaciones llamadas servidores para ofrecer mayor
funcionalidad.
Los núcleos híbridos: son muy parecidos a los micronúcleos puros, excepto
porque incluyen código adicional en el espacio de núcleo para que se ejecute
más rápidamente.
VHDL
VHDL es un lenguaje definido por el IEEE (Institute of Electrical and Electronics
Engineers) (ANSI/IEEE 1076-1993) usado por ingenieros y científicos para describir
circuitos digitales o modelar fenómenos científicos respectivamente. VHDL es el
acrónimo que representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo
de Very High Speed Integrated Circuit y HDL es a su vez el acrónimo de Hardware
Description Language. Para el modelado físico existe la derivación del lenguaje VHDL-
AMS. Originalmente, el lenguaje VHDL fue desarrollado por el departamento de
defensa de los Estados Unidos a inicios de los años 80's basado en ADA, con el fin de
realizar simulación de circuitos eléctricos digitales; sin embargo, posteriormente se
desarrollaron las herramientas de síntesis e implementación en hardware a partir de
los archivos .VHD. Aunque puede ser usado de forma general para describir cualquier
circuito digital se usa principalmente para programar PLD (Programable Logic Device -
Dispositivo Lógico Programable), FPGA (Field Programmable Gate Array), ASIC y
similares.
Otros métodos para diseñar circuitos son la captura de esquemas (con
herramientas CAD) y los diagramas de bloques, pero estos no son prácticos en diseños
complejos. Otros lenguajes para el mismo propósito, pero con un nivel de abstracción
superior son Verilog y ABEL. El primer paso del diseño consiste en la construcción del
diagrama en bloque del sistema. En diseños complejos como en software los
programas son generalmente jerárquicos y VHDL ofrece un buen marco de trabajo
para definir los módulos que integran el sistema y sus interfaces, dejando los detalles
para pasos posteriores. El segundo paso es la elaboración del código en VHDL para
cada módulo, para sus interfaces y sus detalles internos. Como el VHDL es un lenguaje
basado en texto, se puede utilizar cualquier editor para esta tarea, aunque el entorno
de los programas de VHDL incluye su propio editor de texto. Después de que se ha
escrito algún código se hace necesario compilarlo. El compilador de VHDL analiza este
código y determina los errores de sintaxis y chequea la compatibilidad entre módulos.
Crea toda la información necesaria para la simulación. El próximo paso es la
simulación, la cual le permite establecer los estímulos a cada módulo y observar su
respuesta. El VHDL da la posibilidad de crear bancos de prueba que automáticamente
aplica entradas y compara las salidas con las respuestas deseadas. La simulación es un
paso dentro del proceso de verificación. El propósito de la simulación es verificar que
el circuito trabaja como se desea, es decir es más que comparar entradas y salidas. En
proyectos complejos se hace necesario invertir un gran tiempo en generar pruebas que
permitan evaluar el circuito en un amplio rango de operaciones de trabajo. Encontrar
errores en este paso del diseño es mejor que al final, en donde hay que repetir
entonces una gran cantidad de pasos del diseño. Hay dos dimensiones a verificar:
Su comportamiento funcional, en donde se estudia su comportamiento lógico
independiente de consideraciones de tiempo, como las demoras en las
compuertas.
Su verificación en el tiempo, en donde se incluyen las demoras de las compuertas y
otras consideraciones de tiempo, como los tiempos de establecimiento (set-up
time) y los tiempos de mantenimiento (hold time).
Darwin 16
Darwin es el sistema que subyace en Mac OS X, cuya primera versión final salió en el
año 2001 para funcionar en computadoras Macintosh.
Integra el micronúcleo Mach (como parte de XNU) y servicios de sistema operativo de
tipo UNIX basados en BSD 4.4 (en particular FreeBSD) que proporcionan una
estabilidad y un rendimiento mayor que el de versiones anteriores de Mac OS. En
realidad, se trata de una evolución del sistema operativo NEXTSTEP (basado en el
núcleo Mach 2.5 y código BSD 4.3) desarrollado por NeXT en 1989 para ejecutarse en
los ordenadores NeXT, llamados 'black boxes', comprado por Apple Computer en
diciembre de 1996.
Darwin proporciona al Mac OS X prestaciones modernas, como la memoria protegida,
la multitarea por desalojo o expulsiva, la gestión avanzada de memoria y el
multiproceso simétrico.