miércoles, 15 de febrero de 2012

Comparación móviles [Lab]


Podemos decir, que un dispositivo móvil e inteligente, son aquellos que son fáciles de transportar de un lado a otro, de un tamaño pequeño y diferentes tipos de conexiones, algunas veces memoria limitada y regularmente estos están diseñados solamente para ciertas funciones específicas.


En los últimos años, la ingeniería de dispositivos móviles ha ido evolucionando de un modo acelerado, contando con aparatos cada vez mas livianos y con facilidad de manejar información, procesándola de manera rápida por medio de teléfonos inteligentes o tabletas.


Para poder comprender mejor sobre como son las diferencias en diversos tipos de dispositivos móviles, al igual que computadoras portátiles, hemos decidido realizar una búsqueda por un rango de precios de entre 300 a 500 dólares sobre que diferencias significativas podemos encontrar, entre equipos como laptops, netbooks, tablets y celulares portátiles, para luego realizar una reflexión de porqué nuestro proyecto es necesario elaborarlo en un dispositivo móvil y como vamos a aprovechar su rendimiento.


Laptop:
Procesador 1.5 ~ 1.8 Ghz. Core 2 duo, i3, i5, AMD (2 nucleos)
Peso: 1.2 kg
Bateria: iones litio 6 celdas. 8 horas.
Pantalla: 14" ~ 20"
Memoria RAM: 2-4 GB DDR3
Webcam: Casi todas tienen.
Disco duro: 320GB - 500 GB Tipo: SATA
Sistema operativo: Windows 7 Home Premium
Unidad CD/DVD: Si tiene. Algunas con Bluray.
Gráficos: Intel HD, ATI Radeon, Nvidia.
La gente para que los ocupa: para realizar tareas más pesadas y con un mayor procesamiento.


Netbooks:
Procesador 1.0 ~ 1.66 Ghz Atom, C7, Armstrong
Peso: 0.35kg ~ 1.20 kg
Bateria: 3 ~ 6 celdas litio
Pantalla: 7" ~ 11"
Resolución: 1024x600 / 1280x1024
Memoria RAM: 1 ~ 2 GB DDR3
Webcam: La mayoria tiene.
Disco duro: 120 GB - 250 GB
Sistema operativo: XP,7 starter.
Unidad CD/DVD: No tiene.
Gráficos: GMA, Intel.
La gente para que los ocupa: para realizar tareas en donde es necesario de un procesamiento no tan superior como una Laptop.


Tablet:
Procesador: 0.8 Ghz ~ 1.1 Ghz
Peso: 0.41
Bateria: 2 celdas litio. 5 horas. Mas de 24 horas de audio. 2-5 horas de video.
Pantalla: 7"~10". Multi táctil.
Resolución: 1024x768/
Memoria RAM: 1 GB DDR2
Webcam: Algunas tienen.
Disco duro: 8 GB ~ 64 GB Tipo: Flash
Unidad CD/DVD: No tiene.
Gráficos: Compartidos con procesador (Tegra)
La gente para que los ocupa: principalmente para tareas sencillas, se tiene mas usabilidad por medio de la reacción a pantalla táctil y regularmente no puede ser un sustituto de una laptop o netbook.


Celular:
Procesador: 600 Mhz ~ 1 Ghz. Arm Cortex, Qualcomm Scorpion
Peso: 120 g ~ 220 g
Bateria: 1200 ~ 6750 mAh
Pantalla: 3'' ~ 4''
Resolución: 800x480/960x640
Memoria RAM: 256 ~ 521 MB
Webcam: Si tienen.
Disco duro: 1/4/8/16/32/64 GB (interno)
Sistema Operativo: Android, iOS,
Unidad CD/DVD: No.
Gráficos: PowerVR SGX530/ Adreno 200
La gente para que los ocupa: principalmente para hacer llamadas, pero los teléfonos inteligentes con nuevas innovaciones que incorporan diferentes hardware que no podemos encontrar en laptops.


Por lo tanto, podemos concluir que los dispositivos móviles se han convertido en equipos cada vez más equipados y podemos hacer uso de todo este material, para poder realizar nuestra aplicación cantamela!, la cual podemos utilizar tecnologías inalámbricas como 3g/4g/WiFi, respuesta a pantallas táctiles, lo cual mejora la interacción hacia la persona y simplemente el poder tener la movilidad para usarla cuando el usuario desea, pretendemos que nuestra aplicación la podamos también portar a tablets con sistema operativo android, en donde consideramos que es un dispositivo móvil que tienen hardware y software que podemos utilizar para el desarrollo de nuestro proyecto y abarcar dos diferentes campos.


Referencias.
Smartphone comparison
Laptops vs netbooks

¿Cómo funciona el lenguaje ensamblador? [Lab]

Un programa empieza en la función principal (main), que después hace algunas llamadas a otras funciones y estas funciones a otras, etc., cuando codificamos debemos saber que una función obtiene tres tipos de datos los cuales son:
  •   Las variables globales, las cuales sabemos que están en el segmento de datos de un proceso, esto es que siempre están hasta que terminamos el programa. 
  •   El argumento de la función y las variables locales, están en una pila, aparecen cuando se llama a una función y desaparecen cuando esta función tiene un return 

Por lo tanto, los parámetros y variables locales en memoria de un proceso de una función se unen en un bloque de memoria llamado marco de pila, esto es por ejemplo, si f1 llama a f2, el marco de pila de f2 se monta sobre el marco de pila de f1, luego cuando en f2 aparece un return, su marco de pila desaparece, la composición del marco de pila es la siguiente:

Marco de pila

Se utilizan las variables locales y los parámetros de la función, con un modo de direccionamiento relativo de una dirección en un registro del procesador (para mas información de este modo aquí),  es importante recalcar los siguientes registros.


Registros





8 32-bit Registros de proposito general
Registro Función terminación 16-bit 8-bit
eax Acumulador ax ah, al
ebx (base index) bx bh, bl
ecx (contador) cx ch, cl
edx (datos) dx dh, dl
edi (destination index) do
esi (source index) si
ebp Frame pointer bp
esp Stack top pointer sp


Pare este caso, yo tengo una arquitectura Intel, la cual tiene un registro denominado base ebp, este apunta a la ubicación del marco de pila que almacena el registro ebp utilizado por la función la cual es llamada.

Por lo tanto, esto nos sirve cuando una función retorna, es mas sencillo restaurar el puntero de la función principal y seguir con sus instrucciones. 

Cuando una función llama a otra, es como si se fuera preparando poniendo en la pila los parámetros que necesita para hacer llamar a la siguiente función, entonces construye esa parte del marco.

El compilador, es el que tiene la responsabilidad de hacer que esto suceda, entonces cuando llama una función lo que se hace primeramente no es el realizar el código que nosotros escribimos, sino hacer lo que se le llama "labores de gestión", los cuales son los siguiente: 

1. Guardar el puntero de marco de una función, que está en ebp, en la pila. Ahora, ya teniendo ese enlace; 
2. Reescribir en el registro base ebp con su correspondiente puntero de marco. 
3. Organizar en la pila el espacio para sus variables locales. A estas tres tareas se le llama prólogo de la función, después de esto la siguiente función que fué llamada esta preparada a iniciar, cuando finalice, guardará el valor de return en el registro eax para que ahí lo encuentre la función que la llamó. 

Por lo tanto, devolver el dominio de la función que llamó a otra mediante el return, se necesita otra tarea de gestión anterior, la cual consta en restaurar el registro ebp al puntero del marco de la función. A esta tarea se le llama epílogo de la función, después de este epílogo, se ejecuta la instrucción ret. 


Referencias.

  • Sistemas de tiempo real - Universidad de Extremadura. 
  • x86 Assembly Programming - University of Science and Technology of China. 
  • C Internals - Avabodh. 
  • Stackoverflow - question.
  • domingo, 12 de febrero de 2012

    Lenguaje de alto nivel vs bajo nivel [Lab]

    Para comprender un poco mas, sobre cómo funciona un sistema integrado, es necesario saber las diferencias entre un lenguaje de alto nivel y uno de bajo nivel.




    Lenguaje de alto nivel.


    Este viene siendo un nivel de lenguaje de programación, en donde tenemos gramática que se utiliza normalmente para programar sin tener que ir muy profundo sobre los detalles inherentes a la operación de la computadora, los detalles técnicos se tienen en cuenta cuando se traduce a un lenguaje máquina, cuando pasa por un intérprete o compilador, por lo tanto un lenguaje de alto nivel se manipulan conceptos mas elaborados, pero impide tener la gestión de algunos detalles.


    Obviamente, el utilizar el concepto de lenguaje de alto nivel, no quiere decir que ese lenguaje es superior al de bajo nivel, se le dá este tipo de diferencia por lo que he explicado en el párrafo anterior, en lo cual este tipo de lenguajes se obtienen el uso de objetos, variables, matrices, aritmética compleja, expresiones booleanas etc.., pero carecen de la gestión de memoria ó gestiones del procesador.


    Aquí tenemos un ejemplo del lenguaje C y lo que se realiza para simplemente imprimir una cadena en este lenguaje.



    Lenguaje de bajo nivel.



    Un lenguaje de bajo nivel, es el tipo de codificación que se aproxima al lenguaje máquina binario, este tipo de lenguajes regualrmente se utilizan en cómputo integrado, por lo tanto, podemos decir que la programación de bajo nivel comprende las características de la arquitectura de la computadora, así que este utiliza instrucciones del procesador, por lo tanto para poder programar es necesario conocer conceptos como registros.



    Como pueden observar, que el código en lenguaje ensamblador, es un tanto más complejo, porque tenemos que lidiar con características de la arquitectura de la computadora, registros e instrucciones del procesador.




    Referencias
    Lenguaje ensamblador
    Lenguaje C
    Alto nivel
    Bajo nivel

    miércoles, 8 de febrero de 2012

    Parallel Computer Memory Architectures [Lab]

    As all of my class know that traditionally, software has been code for sequential computation, so they can only be run on a single computer having only one CPU and instructions are executed one by one. In parallel computing, you can make code for simultaneous computation, so yo can run using multiple CPUs and instructions can be executed simultaneously on different CPUs.


    One topic that i think it is important is know about different memory architectures on parallel computing, so, i make a concept map for see more clearly differences between memory architectures.


    Shared Memory
    Advantages:
    • We can have more friendly programming because we have a global address space.
    • We have a fast and uniform data sharing because we have close memory to CPU.


    Disadvantages:
    • We don't have many scalability between memory and CPUs, because adding more CPUs increases traffic on the shared memory to CPU, so, it is not ability to be enlarged.
    • We have a responsability for synchronization correctly access to memory.
    • It is more expensive for design and produce
    Distributed Memory
    Advantages:
    • We can have more scalability between memory and CPUs, increase processors and size of memory it is proportionately.
    • We have rapidly access memory for each processor because is own, without interference and without overhead.
    • it is not expensive than shared memory because uses commodity and networking.

    Disadvantages:
    • We need to have resposability for many details for data communication between processors.
    • it is difficult to map existing data structures which are based by global memory.
    • Don't have uniform times of memory access