domingo, 20 de noviembre de 2011

Máquinas virtuales

Un computador se compone de uno o más procesadores o CPUs, memoria principal o RAM, memoria secundaria (discos), tarjetas de expansión (tarjetas de red, modems y otros), monitor, teclado, mouse y otros dispositivos. O sea, es un sistema complejo. Escribir programas que hagan uso correcto de todas estas componentes no es una tarea trivial. Peor aún si hablamos de uso óptimo. Si cada programador tuviera que preocuparse de, por ejemplo, como funciona el disco duro del computador, teniendo además siempre presentes todas las posibles cosas que podrían fallar, entonces a la fecha se habría escrito una cantidad bastante reducida de programas. 


Es mucho más fácil decir `escriba "Chao" al final del archivo "datos"', que
1-Poner en determinados registros del controlador de disco la dirección que se quiere escribir, el número de bytes que se desea escribir, la posición de memoria donde está la información a escribir, el sentido de la operación (lectura o escritura), amén de otros parámetros;
2-Decir al controlador que efectué la operación.
3-Esperar. Decidir qué hacer si el controlador se demora más de lo esperado (¿cuánto es "lo esperado"?).
4-Interpretar el resultado de la operación (una serie de bits).
5-Reintentar si algo anduvo mal.
Además, habría que reescribir el programa si se instala un disco diferente o se desea ejecutar el programa en otra máquina. 


Hace muchos años que quedó claro que era necesario encontrar algún medio para aislar a los programadores de las complejidades del hardware. Esa es precisamente una de las tareas del sistema operativo, que puede verse como una capa de software que maneja todas las partes del sistema, y hace de intermediario entre el hardware y los programas del usuario. El sistema operativo presenta, de esta manera, una interfaz o máquina virtual que es más fácil de entender y de programar que la máquina "pura". Además, para una misma familia de máquinas, aunque tengan componentes diferentes (por ejemplo, monitores de distinta resolución o discos duros de diversos fabricantes), la máquina virtual puede ser idéntica: el programador ve exactamente la misma interfaz. 





Tabla comparativa de Windows 7, Mac OS X, Linux y Unix



Clasificacion de sistemas operativos

Existen tres categorias básicas de sistemas operativos:

  • Unitario
  • Servidor
  • Integrado
El sistema operativo unitario o stand-alone, es un SO completo que trabaja en un ordenador de escritorio, laptop, o dispositivo móvil. Trabaja en conjunto con un servidor SO. Este SO puede trabajar sin una red. Otros SO incluyen capacidades que permiten a los usuarios de pequeños negocios o a personal del hogar conectarse a una pequeña red. Ejemplos de este tipo de SO son Windows 7, Mac OS X, UNIX y Linux.



Los servidores son SO que son diseñados específicamente para soportar una red de cualquier capacidad, reside generalmente en una red. Algunos ejemplos son Servidor Windows 2008, UNIX, Linux, Solaris y NetWare.


Y los SO integrados son aquellos que residen en un chip de ROM, que es un SO que se encuentra en dispositivos electrónicos y dispositivos móviles. Algunos ejemplo son Windows Embedded CE, Windows Mobile, Palm OS, iPhone OS, Blackberry, Google Android, embedded Linux y Symbian.



Sistema operativo

Un Sistema Operativo es el software encargado de ejercer el control y coordinar el uso del hardware entre diferentes programas de aplicación y los diferentes usuarios. Es un administrador de los recursos de hardware del sistema. 

En una definición informal es un sistema que consiste en ofrecer una distribución ordenada y controlada de los procesadores, memorias y dispositivos de E/S entre los diversos programas que compiten por ellos.
A pesar de que todos nosotros usamos sistemas operativos casi a diario, es difícil definir qué es un sistema operativo. En parte, esto se debe a que los sistemas operativos realizan dos funciones diferentes. 

Proveer una máquina virtual, es decir, un ambiente en el cual el usuario pueda ejecutar programas de manera conveniente, protegiéndolo de los detalles y complejidades del hardware. Administrar eficientemente los recursos del computador.


A continuación una comparación exhaustiva de los sistemas operativos más utilizados mundialmente:

Estrategias para que México alcance a ser un país productor de software


En este ensayo hablare sobre las estrategias para que México alcance a ser un país productor de software. Pero antes, por mi falta de conocimiento de las cuestiones principales como son la industria de software y la situación actual de México, realice una pequeña investigación a cerca de ello.
A lo que entendí, industria de software es todo proceso que utiliza una empresa u organización para hacer frente a la competencia. Competencia es la clave. El ser humano siempre ha buscado cada vez más y más poder, pues saben que con ello es la única manera de llegar al éxito.
Antes era con la agricultura, quien tuviera mas y mejores tierras seria el mas rico y poderoso; después se dieron cuenta que necesitaban una actividad que procesara la materia prima de la agricultura, con esto surge la industria, y como lucha por el poder con la industria podemos dar el ejemplo de la Primera Guerra Mundial.  No se ve a simple vista, pero si se hace un estudio a profundidad, se vera que en ella la estrategia ya no era buscar el punto débil del enemigo, sino que era la de ampliar su capacidad industrial.
Ahora, toda búsqueda de poder se basa en la informática, más específico, estrategias informáticas para ganarle a tu enemigo. Quien tenga las mejores estrategias será el que gane más.
Desafortunadamente México esta débil en ese aspecto, pues desarrollo de industrias de software implicar recursos humanos que estén especializados, recursos financieros, mínimo el 4.5 % de su PIB (producto interno bruto); y recursos informáticos para que la comunicación sea rápida y eficaz, pues no sirve de nada una computadora si el sistema de comunicación esta roto. Un  ejemplo es la falta de Internet.
En México si hay industrias de software pero el detalle esta en que toda industria de software esta en zonas especificas del país, principalmente en la ciudad de México, con poco menos del 50% del numero total de industrias; otro de los problemas es que no hay recursos para capacitar y especializar a un programador y mucho menos a varios, en ingeniería de software; no hay apoyo gubernamental, pues solo se le dedica casi el 2% del PIB; es muy costosa la mano de obra, y otros factores no tan influyentes como la piratería y la ausencia de un proceso que mida y evalúe el progreso de una empresa.
Ante estos factores, propongo la implementación de estrategias de comunicación, pues en el desarrollo de software participan personas las cuales si no mantienen una correcta comunicación, hay que olvidarnos del proyecto. Otra propuesta es presionar al gobierno mexicano de que debe invertir a la educación informática del país, ya que se necesitan certificar y no incorporar, instructores, consultores y evaluadores capacitados, esto para que el desarrollo de un proyecto sea maduro y solido, obteniendo un resultado innovador y de alta calidad. También propongo que las industrias de software no se centren en un solo lugar, que hagan publicidad de ellas y expandan sus sucursales, proporcionando trabajo a más programadores, aunque para esto se necesiten los recursos para capacitar y especializar ingenieros. Que también, todo desarrollo de software se apegue lo mayor posible a los estándares reconocidos internacionalmente ISO 9000:2000, CMM-SW, ISO/IEC 15,540, PM BOK, SWE BOK. Otra cosa que me gustaría anexar es que México contara con evaluaciones CMMI (Modelo de Madurez y Capacidad Integrado, siglas en ingles), pues permite ver y evaluar el progreso de las empresas en cuanto a desarrollo de software, pues lo que buscamos es que México cuente con una industria de software competitiva tanto a nivel nacional como a nivel internacional.
Un factor que debería tomar en cuenta es que México no cuenta con una estabilidad económica, pues dependemos mucho de nuestro país vecino E. U., ya que ellos son los que cuentan con maquinaria especializada para procesar el petróleo, por decir un ejemplo; debo admitir que el petróleo es nuestro oro negro, pero tenemos muchos recursos naturales que podrían ser bien aprovechados para propiciar un ingreso económico mayor al de la actualidad; ocupamos el primer lugar en diversidad de reptiles, el tercero en mamíferos y el quinto en reptiles, pero lo que pasa es que no sabemos manejar y sacar provecho de los recursos que tenemos.
No es tan complicado para un mexicano desarrollarse y especializarse en estas áreas, pues podemos ver cuantos médicos especializados salen cada año, o la cantidad de abogados en derecho penal egresados por año; el problema es la falta de recursos económicos y apoyo gubernamental para su pleno desarrollo.

El software sube de precio, el hardware baja de precio

Cada día se necesita menos recurso humano para realizar un hardware, ya que la industrias que lo fabrican tienen cada vez más material a bajo costo, porque cada vez van surgiendo máquinas que sustituyan a las personas.
En cambio con el software cada vez se necesitan mayores recursos humanos debido a la dentencia de crear un mejor software cada vez, también tomando en cuenta que hay carencia de elementos para desarrollar software.

Para solucionar este desequilibrio se debería buscar un mercado grande para que todos paguen el proyecto, para que el desarrollo de un proyecto se distribuya entre más personas y el costo sea relativamente menor.

Para desarrolar un software, ya sea genérico o específico, se necesitan 4 fases:
  • Análisis: donde se discuten aspectos funcionales y no funconales. En esta discusión se necesita un lenguaje hablado convencional, es decir, el proceso de comunicación es fundamental.
  • Diseño: diseñar a base de los requisitos, se delimita lo que se tiene que hacer.
  • Desarrollo: ejecución de los pasos para desarrollo del sofware traduciendo a códigos toda información. Se da al cliente la versión definitiva.
  • Prueba: poner a prueba con procedimiento, asegurándose de que se cumplan las necesidades del usuario.
Este ciclo es aplicado para todo tipo de sofware. Existen dos tipo de sofware:

-Específico: implementado para cumplir sólo una tarea, para un específico usuario. Generamente es más caro.
-Genérico: cubre una mayor cantidad de necesidades y es desarrollado para una mayor cantidad de usuarios.

Ambos tenen la misma cantidad de errores en cuanto a su desarrollo, pues todo sistema siempre va a tener errores, no ha existido aún un sofware 100% libre de errores.

domingo, 6 de noviembre de 2011

Million dollar PC

Es una fundación que recopila nuchas máquinas con la sensación de tenerla por delante, recopila partes preciosas. Algunas veces se desea tener una de ellas para causar envidia a la gente.
El sitio contiene muchas imágenes obtenidas con el mismo cuidado con el que se han construido las computadoras. La página incluye sugerencias para la siguiente computadora de millones de dólares.




Raspberry Pi

Eben Upton, director de la fundación, ha estado tratando que esto suceda desde 2006.



Es una fundación la cual ha creado un ordenador con las siguientes características:

  • Utiliza un microcpontrolador Atmel ATmeda 644, funciona a 22.1 Mhz con 512Kb de SRAM
  • La primera versión tenía un procesador ARM11 a 700 Mhz y 128/256 MB de SRAM. 
  • Resolución de 320x240.
  • Capaz de reproducir gráficos 3D muy sencillos.
  • Un teclado y un ratón se conectan vía USB.
  • Se puede conectar a un televisor o a un monitor.
  • El SC es un Broadcon BCM2835.
  • No es compatible con Windows u ptrp spftware X86.
  • No tienen power over Ethernet.
  • Se le está pensando poner una caja.
  • Requiere una fuente de poder de 5V micro USB.
  • Tiene un estándar de 35 nm jack.
  • Puede usar HDMI para aundio o se puede agregar un microófono USB vía hub.

Es de software libre en la educación y código abierto FSOSS.
El principal objetivo de esta fundación es que los jóvenes tengan la oportunidad de aprender y expremintentar con las computadoras, si se pierde esto se pierde cualquier oportunidad de innovación.

A SÓLO $25 DLLS

Fuente: http://www.raspberrypi.org/ (Consultado el 4 de noviembre del 2011)

Estructura interna del BIOS

El BIOS se encarga de asegurase de que todos los chips, hardwares, puertos y CPU, funcionenn correctamente con el sistema operativo y sus aplicaciones.
-Sistema operativo: una serie de servicios para las aplicaciones en la computadora y proporciona la interfaz fundamental para la computadora, por ejemplo Windos 98 y Linux.
-Aplicaciones: son partes del sosftware programados para una tarea específica; ejemplo de ellos son Word, e-mail. Pueden ser comprados e instalados.

El BIOS tiene muchas tareas, y la principal es iniciar el sistema operativo.

Cuando encendemos la computadora y el microprocesador intenta ejecutar su primera instrucción, recivirá esa instrucción de algún lado; no puede adquirirla del sistema operativo ya que el SO se encuentra en el disco duro y el microprocesador no puede ir ahí sin una instrucción. El BIO (memoria ROM de sólo lectura) le da esa instrucción, formada por las siguiente órdenes:

  1. Instrucciones del POST para todos los componentes hardware del sistema para asegurarse de que todo funcione bien.
  2. Activar otros BIOS, chips de diferentes tarjetas de la computadora. Por ejemplo SCSI y tarjetas de video.
  3. Proporciona instrucciones, rutinas de bajo nivel, que el sistema usa para comunicarse con diferentes dispositivos hardware (le dan el nombre de BIOS). Ellos manejan el teclado, la pantalla, puertos paralelos y puertos seriales.
  4. Manejar los ajustes al disco duro, reloj, etc.
El BIOS conecta el componente hardware con la computadora por medio de una serie de instrucciones cuando encendemos la computadora:

  1. Checar el CMOS para ajustes personalizados.
  2. Cargar el manejador del interruptor y controlador de dispositivos.
  3. Indicar el mantenimiento de reistros.
  4. Desarrollar el POST.
  5. Desarrollar ajustes del sistema.
  6. Determina cuáles dispositivos son inicializables.
  7. Iniciar la secuencia bootstrap.

Secuencia de pasos del POST

El POST es una de las instrucciones que opera un ordenador al momento de encenderse. Es difícil imaginarlo, pero cuando encendemos la computadora y nosotros esperamos a que se encienda o a abrir nuestra sesión de trabajo, la computadora ya inicia a trabajar. Inicia a trabajar por las instrucciones que el procesador lee en el BIOS, primera operación de la computadora.

El BIOS es una memoria de sólo lectura, cuyas funciones son las siguientes:
  1. Inicializar los registros internos de lmicroprocesador
  2. Proceso del POST: ejecución automática de rutinas para la autocompaación y chequeo de dispositivos
  3. Proceso Boot (o de encendido): Carga el sistema operativo y la deja lista a la computadora para que el usuario pueda usar los programas de mismo SO.
 ¿Y qué es el POST?
  1. Configura el temporizador 82,531/8254 para refresco de la RAM.
  2. Configura el acceso directo a la memoria DMA para refresco de la RAM en el canl 0.
  3. Verifica que el refresco sea operativo.
  4. Verificar la memoria RAM baja.
  5. Cargar los vectores de interrupción y asignarles espacio en la zona de memoria baja.
  6. Inicializar los dispositivos de video y teclado.
  7. Determinar el tamañi de RAM adicional y comprobr su funcionamiento (recuento que se ve en la pantalla). Si en este punto hubiera un error en la memoria se mostraría un  mensaje de error. (el dispositivo de video ya está operando).
  8. Inicializa puertos de COM (serie de comunicaciones), LPT (comunicaciones para lelo) y juegos.
  9. Inicializa el sistema de disco.
  10. Explora el área de usuario de la ROM.
  11. Copia en la RAM la primera parte del SO.
  12. Llama al interruptor de bootstrap.

Registros X86

Lugares donde se guardan o se visualizan los datos, con ellos se realiza toda función ejercida sobre un dato, sumar, restar, ejectar, guardar, entre otros.

AX Acumulador, de uso general. Se puede dividir en AH y AL. Obtendremos el mismo resultado si hacemos "MOV AX , FF00" que si hacemos primero "MOV AH , FF" y después "MOV AL , 00".
BX Registro base, de uso general. Se puede dividir en BH y BL.
CX Registro contador, de uso general. Se puede dividir en CH y CL.
DX Registro de datos, de uso general. Se puede dividir en DH y DL.
DS Registro del segmento de datos. Utilizado para apuntar a un segmento.
ES Registro del segmento extra. Lo mismo que DS.
SS Registro del segmento de pila. Nos indica el segmento donde se encuentra la pila (mas abajo hablaremos de ella).
CS Registro del segmento de código. Nos indica el segmento donde se encuentra el código que se está ejecutando.
BP Registro de apuntadores base. Digamos que este registro se utiliza para apuntar donde guardamos datos.
SI Registro índice fuente.
DI Registro índice destino.
SP Registro del apuntador de la pila. Este registro nos indica dónde está la pila en la que se guardan los datos que introducimos en ella.
IP Registro que apunta a la siguiente instrucción que se tiene que ejecutar.
F Registro de flags. Este registro es necesario leerlo en binario. Cada bit representa el resultado de alguna operación, por ejemplo si comparamos dos números este en este registro encontramos información sobre si uno es menor o mayor que el otro o si son iguales, etc. Los flags (o banderas) son los siguientes CF, PF, AF, ZF, SF, TF, IF y OF.


 - La pila: es utlizada en caso de qe se necesiten ejecutar una mayor cantidad de datos numericos que los que la cantidad de registros, es decir, se necesita más espacio, y para ello hacemos losiguiente:

MOV AX , PRIMER_NUMERO.... <= cargamos en Ax el número
PUSH AX ................................. <=
lo dejamos caer el número en la pila
MOV AX , SEGUNDO_NUMERO. <=
cargamos en AX el siguiente nº
PUSH AX.................................. <= y también lo descargamos en la pila.


Ya estan todos los datos colocados, pero ahora para recuperar lo introducido en la pila, hay que saber que siempre sale primero el último dato que entra, este es el motivo de que se le llame pila, se apilan los datos. 

POP AX ....................................<= Recupera de la pila EL ULTIMO DATO INTRODUCIDO y lo deposita en el registro AX.

Ahora, para guardar y recuperar un dato de la pila:


PUSH REGISTRO...................... <= Guarda en la pila un registro.
PUSH NUMERO......................... <=
Guarda en la pila un número.
PUSHF...................................... <=
Guarda en la pila los flag.
PUSHA...................................... <=
Guarda en la pila los registros AX, CX, DX, BX, SP, BP, SI y DI en este mismo orden.
POPA........................................ <= Recupera de la pila los registros DI, SI, PB, SP, BX, DX, CX y AX en este mismo orden.
POPF........................................ <= Recupera de la pila los flags.
POP REGISTRO......................... <= recupera un dato de la pila y lo deposita en "REGISTRO".

 

Arquitectura RISC y CISC

Eh aquí la razón de porqué Setev Jobs cambió sus procesadores RISC por procesadores CISC:


Aqruitectura Hardware de CPU

Las partes de una computadora o técnicamente conocidas en conjunto como hardware, son dispositivos de entrada y de salidad, unidad de procesamiento, los buses y la memoria externa.

Los dispositivos de entrada son las partes de una computadora con los cuales introduces cualquier tipo de dato (textual, gráfico, sonoro o audiovisual), pues utilizan programas para ello. Ejemplos de dispositivos de entrada son el teclado, el mouse, el micrófono, el escáner, entre otros.

Los dispositivos de salida muestra los resultados de un proceso de datos. Por ejemplo, cuando pulsamos una tecla, se genera un circuito con información que se manda al microprocesador del teclado y de ahí se manda al procesador, después el procesador compara esa información con la memoria ROM, y si haya información idéntica, se presenta en el monitor, si no, se produce error y posiblemente se habra una ventana que indique el resultado marcando error. Algunos ejemplos de dispositivos de salida son el monitor (mencionado anteriormente), bocinas, impresora, entre otros.

La unidad de procesamiento o unidad central de procesamiento, CPU (en inglés: Central Processing Unit), es un sistema compuesto por:
-Una unidad aritmética y lógica ALU (en inglés: Aritmetic ang Logical Unit), que proporciona las operaciones aritméticas con enteros y números reales, tales como sumar, restar, multiplicar y dividir; y operaciones lógicas como mayor que, menor que e igual a.
-La unidad de control es la responsable de controlar el flujo de datos e información.
-Los registros generales que consisten en un limitado número de celdas que son el medio de almacenamiento inmediato de datos y resultados.

La memoria externa, que se encuentra fuera de la memoria del CPU (los registros), es un medio de almacenamiento más eficaz y util que la memoria del CPU, debido a que ésta es muy pequeña y limitada. La memoria externa se compone de una memoria primaria y de una memoria secundaria.
-La memoria primaria es una memoria de alta velocidad situada cerca del CPU, (como se puede ver en la imagen). Por lo general los programas se sitúan ahí en la espera de ser ejecutados, pero desaparecen en cuanto la computadora se apaga, es decir, son volátiles.
-La memoria secundaria es relativamente barata, más grande y de menor velocidad que la memoria primaria. Es también conocida como almacanamiento fuera de línea, ya que almacena programas para ser ejecutados en un futuro. A diferencia de la memoria principal, es esta memoria la información dura incluso cuando la computadora se apaga. Ejemplos de memorias secundarias son los CD´s, disco duro, discos de CDROM, entre otros.

El bus es un conjunto de llaves que conectan todos los componentes. Son responsables del movimiento de los datos de dispositivos de entrada, a dispositivos de salida, y de/a el CPU o la memoria.




viernes, 4 de noviembre de 2011

Instrucciones de una computadora

A partir de ahora empezaremos a hablar de lo bueno, es decir, empezaremos a entrar al verdadero campo de la aplicacion grafica de porgramas integrados, AGPI, el area hacia la cual esta dirigido este blog.

Empezaremos por ver el(los) caracter(es) representativos de cada simbolo que estoy y introduciendo y que introducimos con nuestro teclado: http://www.asciitable.com/ , no puse la tabla completa porque no tiene caso, ya que solo era para hechar un vistazo de con qué trabaja nuestra computadora, y no es tan simple como se muestra en la pantalla.

Nuestra computadora trabaja con un sistema binario, es decir, de dos dígitos, el 0 y el 1. ¿Pero cómo representa un número como 2,345, o 9876 o 11,456? Muy simple, con el sistema binario trabajamos con permutaciones de 2, así, 2,345 en binario sería igual a 100100101001, 9,876 es igual a 10011010010100 y por último 11,456 es igual a 10110011000000.

La manera en cómo obtuve la conversión de los números de sistema decimal (2,345 o 9,876) a binario ( 100100101001 o 10110011000000) es muy sencilla, y hay dos maneras de obtenerla. Por medio de la calculadora que se puede adquirir por internet, o manualmente puedes utilizar una tabla como la siguiente:


Y el procedimientos se muestra en la siguiente tabla:

Como se puede observar, para calcular cualquier número, se realizan las sumas necesarias de las permutaciones de 2. En el ejemplo de la tabla, para obtener 11, se suma 8+2+1, y en el lugar de 8, 2 y 1 se coloca el dígito binario 1, y para no dejar sin numeración los lugares vacíos se coloca un 0 (cero), indicando también que esa permutación no se utilizará.

De esta manera es como operan las computadoras, si tú tecleas un 8, el microprocesador del teclado inmediatamente envía ese 8 al procesador quien lo convierte en sistema binario 1000 y después lo compara con la información que hay en la ROM, si encuentra una similitud esa similitud es la que muestra en el monito como el símbolo "8" (ocho).

De esta manera es también es como operan los procesadores las operaciones, que se ejecutan más específicamente en la unidad aritmética y lógica ALU.

OJO: Yo puse los puntos suspensivos que indicavan infinidad d epermutaciones, pero la capacidad de las computadoras no es esa. Hay ordenadores que son de 32-bit o 64-bit, y estos según su especificación pueden contener de 32 permutaciones de 2, o, 64 permutaciones de 2, lo cual impide la ejecución de datos con 32/64 o más dígitos según el sistema binario. En este caso, la tablita la tendríamos hasta 2^63, así si hay un número con 2^63/2^32 bits o más, la operación se marcará como error.