viernes, 7 de octubre de 2016

Sistemas Operativos, Tanenbaum


                                                   Autor: Constanza Couselo
 Competencia: Gestion en TI(Nivel 2) 
Asignatura :  Mantencion y Administracion de Sistemas
Palabras clave: Sistema, operativo,software


Introduccion:

La actividad desarrollada consistia en realizar un breve resumen del primer capitulo del nuestro libro llamado Sistemas Operativos Modernos cuyo autor es Andrew Tanenmbaun; Explicando en que consisten los sistemas operativos, describiendo sus componenetes y como se complementan con el ordenador.


Solución:

Actualmente un ordenador está compuesto de uno o más procesadores, memoria principal, disco duro y algunos dispositivos de E/S como impresoras y pantalla lo cual lo convierte en un sistema complejo de manipular y programar de manera óptima. Frente a la problemática de la correcta utilización de los recursos del ordenador se sitúa el sistema operativo como una capa de software por sobre el lenguaje máquina, la micro arquitectura y los dispositivos físicos, por sobre el sistema operativo se encuentran los compiladores, editores, intérpretes de comandos y por sobre estos tenemos los programas de aplicación como por ejemplo un sistema de banca.
El sistema operativo es de facto un programa que extiende de manera adecuada y facilitadora las funcionalidades de la máquina que opera en un nivel bajo haciéndolo entendible y manipulable tanto para el usuario como para el programador; Además de la función extensiva de la máquina, el sistema operativo se presenta como un conjunto de elementos de software que idóneamente programados proveen una estructura funcional que proporciona una gestión adecuada de los recursos con los que cuenta la máquina electrónica, llámense procesadores, memorias, timers, discos, ratones, así como además otro tipo de recursos virtuales en entornos de red como por ejemplo ficheros y bases de datos lo que lo muestra como un complejo sistema de administración de la maquina aunque con interfaces que hacen posible una utilización simple.
La historia de los sistemas operativos comienza de antaño, sin embargo Charles Babbage fue quien diseño el primer ordenador digital verdadero; así también ha evolucionado enormemente y se divide en distintas etapas respecto de la época en la que sus hitos se desarrollan, como son, el nacimiento de los tubos de vacío que dio paso a la invención del transistor con su correspondiente utilización en la fabricación de circuitos integrados que finalmente se transformó en una línea de componentes que hoy conocemos como microprocesador ampliamente utilizado en los ordenadores personales contemporáneos. En sus anales, la fabricación de sistemas operativos da comienzo en la segunda generación (hito del transistor) pues en la primera eran inauditos. Se cuentan en la segunda generación sistemas como FMS e IBSYS de IBM que dio paso en la tercera generación al famoso y no menos útil UNIX del que deriva por ejemplo Linux para ordenadores de cuarta generación. Cada generación de ordenadores dio nacimiento a un sistema operativo diferente que es inherente al estado del arte de la tecnología en el que se desarrolló, de esto deducimos que UNIX sería imposible correrlo en un ordenador de segunda generación dada su complejidad de programación y no solo eso sino además la cantidad de funcionalidades derivadas de la complejidad de la maquina electrónica en cuanto a las bondades sistemáticas y de recursos.
Dentro de la gama de sistemas operativos podemos enumerar principalmente siete, cada cual destinado a un tipo de arquitectura de maquina diferente; los sistemas operativos de mainframe que tienen grandes capacidades de E/S utilizados por ejemplo en grandes centros de cálculos corporativos, los sistemas operativos de servidor como por ejemplo UNIX o Windows 2000 Server, Sistemas operativos multiprocesador utilizados en ordenadores paralelos, sistemas operativos de ordenador personal como por ejemplo Windows 98 o Linux, sistemas operativos de tiempo real para aplicaciones centradas en el parámetro de tiempo critico usado por ejemplo en la industria, los sistemas operativos empotrados utilizados frecuentemente en dispositivos de electrónica de consumo y los sistemas operativos de tarjeta inteligente utilizados en dispositivos muy pequeños como trivialmente tarjetas inteligentes.
Un sistema operativo está íntimamente ligado a aspectos del hardware para el cual fue fabricado y sobre el que se ejecuta debiendo conocer muy bien el mismo. Los ordenadores personales modernos están constituidos generalmente por otros mini-sistemas denominados Procesadores (cerebro de la máquina), Memorias jerarquizadas en categorías de acuerdo a la velocidad de acceso que promueven, dispositivos de E/S 

Conclusión:


Considero que la actividad efectuada relativa al breve resumen del capitulo uno de nuestro libro, en el curso de Mantencion y administracion de sistemas fue muy productiva en términos de aprendizaje ya que pude obtener el conocimiento inicial de como funciona una maquina y sus componentes, lo cual es fundamental para respecto de nuestra area en desarrollo. sin duda alguna potenció mis anhelos de construir sistemas informáticos nuevos y valga la redundancia, eficientes.

Como reflexión respecto de la competencia a validar considero que se efectuaron todos los procesos esperados ya que primero efectué un análisis de que es lo que se debía hacer,luego enlace frases cortas, para poder llegar a su desarrollo breve y consiso.






lunes, 26 de septiembre de 2016

Suma en Lenguajes Diferentes

Autor: Constanza Couselo

   
Competencia: Desarrollo de Software(Nivel 1) 
Asignatura: Programacion II
Palabras clave: Python, C,Algoritmo

Introducción:

    La actividad desarrollada consistía en escribir un pequeño software basado en un algoritmo corto que ejecutara la suma de numeros ingresados por la entrada estandar como parametros en dos lenguajes distintos.

Solución:

    Dada la sencillez del algoritmo no se desarrollaron diagramas de flujo ni análisis extensivos mas allá del hecho de solo investigar por cuenta propia el mecanismo de funcionamiento de los ciclos en los diferentes lenguajes (C,Python), para este trabajo en particular, el ciclo for y while.

    Como se manifestó en la introducción, el programa recibe una serie de numeros que guarda en las variable "argv" que es utilizada por algunos lenguajes para tomar sucesivos parametros por medio de la entrada estandar, esto quiere decir que cuando se invoca el programa se le pasan los parametros directamente, por ejemplo: "%suma 1 2 3 4 5".

    Los dos programas muestran al usuario el mismo resultado y cumplen la misma función sin embargo cada uno tiene su propia implementación con ligeras diferencias que pueden ser observadas con detenimiento al analizar los dos diferentes codigos presentados:

Codigo en C 
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    unsigned long int suma=0;
    int i;

    for(i=0;i<argc;i++)
    {
        suma+=atoi(argv[i]);
    }

    fprintf(stderr,"total de suma = %d\n", suma);

    return 0;
}
Codigo en lenguaje Python
#! /usr/bin/python

import sys
suma = 0
i=1
while i < len(sys.argv):
    valor = sys.argv[i]
    suma = suma + int(valor)
    i+=1
print 'el resultado de la suma es: ' + str(suma)

 

Reflexión:
  
    Como actividad introductoria y a pesar de la sencillez se puede concluir que nos sirve como estudiantes para adquirir destreza en el razonamiento relativo a que las cosas se pueden hacer de muchas formas, no obstante, para algunos casos se requieren de soluciones que brinden optimización de tiempo respecto del desarrollo e implementación hecho que puede ser comprobado en relación a la cantidad de lineas de código requeridas por los distintos lenguajes para la escritura de un programa lo que implica para un caso de la vida laboral un tiempo menor de desarrollo con la consecuente entrega oportuna de los trabajos encomendados.

Circuito Millonario

Autor: Constanza Couselo

Competencia: Desarrollo de Software(Nivel 1)
Palabras clave: robot, lego, NXT, NXC, algoritmo, robótica


Introducción:
La actividad desarrollara se llama "circuito millonario" y consta de tres secciones de operación del robot ya armado y correctamente programado; de forma global el robot debera sortear una serie de obstáculos y búscar incidencias que le permitan  aumentar o disminuir su puntos.  
La primera lógica de programación responde a la presencia de obstáculos visuales dispuestos a modo de laberinto, los cuales deben ser sorteados utilizando para la detección de estos el sensor de ultra sonido el cual nos devuelve la distancia medida en centímetros respecto del punto de obstaculización. En la medida de que el robot encuentre un obstáculo a una cantidad definida de centímetros, gira en un ángulo determinado lo que le permite avanzar hasta el siguiente obstáculo de manera lineal hasta que se cumpla nuevamente la condición de cercanía; al finalizar la primera etapa del circuito, se asigna un puntaje por completitud.  
La segunda etapa consiste en el seguimiento de una línea negra la cual es escaneada constantemente por un sensor de luz orientado hacia el suelo. En esta etapa, el seguimiento de la línea se efectúa utilizando un algoritmo sencillo de calibración en tiempo de ejecución el cual hace girar la máquina en pequeños incrementos a fin de mantenerse en los límites que determinan el ancho de línea, el robot concluye su seguimiento en la medida de la actuación de un sensor de tacto; tal como en la etapa anterior, cuando detecta la presencia de un obstáculo se da por terminada la etapa y se asigna un puntaje por conclusión de la misma.  
La tercera etapa , el robot debe encontrar puntos negros dispuestos aleatoriamente en la superficie de juego y utiliza para estos fines el mismo sensor usado en la etapa anterior con un algoritmo condicional que establece que encontró un punto en la medida de estar en un valor de umbral de reflexión de luz programado como constante; cuando encuentra un punto suma puntaje, si choca contra la pared se resta puntaje y si la cantidad de choques es igual a tres se termina la ejecución del programa. Cada evento de suma de puntajes en las tres etapas se muestra por la pantalla integrada del robot .

Solución:
La extructura de la programación de software en lenguaje NXC cuenta con una tarea que es la principal (task main()), tres sub rutinas principales y tres auxiliares, cada una para una parte del circuito, a saber sub laberinto(), sub lineaNegra(), sub puntosNegros(), sub playSound(), sub girarIzquierda() y sub girarDerecha() respectivamente.
La tarea principal y unica que contiene el programa tan solo se ocupa de invocar a las sub rutinas asociadas una tras otra en consecuencia con lo manifestado en el parrafo anterior. De las tres rutinas restantes comenzaremos a explicar el funcionamiento de la primera que es "sub laberinto()", esta enciende primero el sensor de ultrasonido, luego va avanzando hasta que encuentra el obstáculo, la verificación del mismo la hace en la evaluación de condición especificada en el cuerpo del bucle while el cual al ser un bucle sin instrucciones interiores actua como retardo para que siga avanzando, finalizado lo anterior gira en un angulo conocido explicitamente hacia la izquierda, para continuar avanzando hasta que encuentra el segundo obstaculo a la distancia definida y así hasta que finaliza la primera etapa lugar en el cual actualiza la variable global puntos con una cantidad de 100 para continuar reproduciendo una melodia alusiva al término de la etapa y salida por la pantalla del robot la cantidad de puntos adquiridos.
sub laberinto()
         {

             SetSensorLowspeed(IN_4);
             OnFwd(OUT_BC, VELOCIDAD_LABERINTO);
             while(SensorUS(IN_4)> 9);
                 Off(OUT_BC);
             OnFwd(OUT_B,50); //girar a la izquierda
             OnRev(OUT_C,50);
             Wait(500); //establecer tiempo de giro en 90º
             Off(OUT_BC);


             OnFwd(OUT_BC,VELOCIDAD_LABERINTO);
             while(SensorUS(IN_4)> 8);
                 Off(OUT_BC);
             OnFwd(OUT_C,80); //girar a la derecha
             OnRev(OUT_B,40);
             Wait(500);

             OnFwd(OUT_BC,VELOCIDAD_LABERINTO);
             while(SensorUS(IN_4)> 7);
                 Off(OUT_BC);
             OnFwd(OUT_C,60);
             OnRev(OUT_B,60);
             Wait(400); //establecer tiempo de giro en 90º

             OnFwd(OUT_BC,VELOCIDAD_LABERINTO);
             while(SensorUS(IN_4)> 9);
                 Off(OUT_BC);
             OnFwd(OUT_B,80); //girar a la izquierda
             OnRev(OUT_C,70);
             Wait(TIEMPO_GIRO_LAB); //establecer tiempo de giro en 90º
             Off(OUT_BC);

             puntos +=100; //sumar 100 puntos
             playSound();
             NumOut(0,0,puntos); // mostrar por pantalla cantidad de puntos
             Wait(2000);
    }
La siguiente sub rutina asociada es aquella que hace el seguimiento de la linea negra la cual utiliza dos sensores, primero el de luz y luego el de tacto. El código le ordena al robot que ejecute un ciclo condicionado a una bandera llamada i la cual parte con un valor de uno (equivalente a true) y que se actualiza a un valor de cero (false) en la medida de la activación del sensor de tacto, el robot comienza avanzando, el resto del tiempo verifica que el valor devuelto por la función Sensor(IN_X) (donde X es la entrada a la cual se conectó el sensor) sea menor que el UMBRAL definido como constante, este sensor devuelve numeros que son significantes de una atenuación o incremento del factor de luminosidad emitido por un diodo led y que es detectado por el sensor, para un valor mayor de 40 entramos en el campo visual del color negro y asi va subiendo en la escala, para nuestros fines basta con decir que a mayor de 40 que el robot ejecute un algoritmo de calibración el cual hace girar levemente el robot hacia la derecha hasta que vuelve al valor devuelto en función de la detección de un valor de reflexión que denota el encuentro con el color blanco instancia en la cual gira levemente a la izquierda hasta que vuelve a encontrar el negro.
Una vez que el sensor de tacto se activó, la bandera i se cambia a 0 y con esto se sale del ciclo while pasando el control a las instrucciones que la suceden las cuales hacen que el robot gire a la izquierda en 90°, que sume 50 puntos a la variable "puntos", que reproduzca el sonido e imprima por pantalla la cuenta total de puntos acumulados.

sub lineaNegra()
                {
                    int i=1;
                    SetSensorTouch(IN_1);
                    SetSensorLight(IN_3);
                    OnFwd(OUT_BC, 40);
                    while (i) //mientras i sea uno
                    {
                        OnFwd(OUT_BC, 40);

                        if (Sensor(IN_3) > UMBRAL) //si salió de la linea negra
                        {
                            Off(OUT_BC);
                            girarDerecha();
                            until(Sensor(IN_3) <= UMBRAL); //esta dentro de la linea negra
                            OnFwd(OUT_BC,40);
                            girarIzquierda();
                            until(Sensor(IN_3) >= UMBRAL); //está fuera de la linea negra
                        }
                        if(SENSOR_1 == 1)i = 0;

                  }
                  Off(OUT_BC);

                  OnRev(OUT_C,100); //girar a la izquierda

                  Wait(500); //establecer tiempo de giro en 90º
                  OnFwd(OUT_BC,100);
                  Wait(200);
                  Off(OUT_BC);
                  puntos += 50; // sumar 50 puntos
                  playSound(); // reproducir sonido
                  NumOut(0,0,puntos);
                  Wait(2000);

             }

Por último, la subrutina dedicada a la detección de puntos negros es un poco mas complicada que las anteriores ya que realiza dos evaluaciones, una para el sensor de tacto y otra para los puntos negros; cuando el sensor de tacto se activa, la incidencia se acumula en una variable llamada choques a fin de llevar la cuenta de los mismos y adicionalmente se descuentan puntos, en la medida de que el robot choque por tres veces consecutivas se cambia el estado de la bandera i para que el ciclo termine su ejecución y finalice el programa; para la detección de los puntos negros, dentro del ciclo de control while se verifica tal como en el apartado anterior la evaluación de reflexión lumínica del sensor de luz, si esta cae en un valor mayor que el umbral ejecuta las instrucciones que estan detro del bloque de verificación determinado por la instrucción if(Sensor(IN_3) < UMBRAL) tal como se puede vislumbrar en el código fuente del procedimiento mostrado a continuación:

sub puntosNegros()
               {

                    int i=1;
                    int ran;
                    int choques=0;
                    SetSensorTouch(IN_1);
                    SetSensorLight(IN_3);
                    while(i)
                    {
                        OnFwd(OUT_BC, 75);
                        if(SENSOR_1==1) // si el sensor de tacto es activado
                        {
                            puntos = puntos - 50; // restar puntos
                            choques ++; // subir en uno la variable choques
                            OnRev(OUT_BC,60); // retroceder por medio segundo
                            Wait(500);
                            Off(OUT_BC);
                            OnRev(OUT_B,100); // girar aleatoriamente
                            Wait(Random(1000));
                            Off(OUT_BC);
                            playSound(); // reproducir sonido
                            if(choques==3)i = 0;
                      }
                      if (Sensor(IN_3) < UMBRAL) // si el sensor esta dentro del umbral
                      {
                          puntos = puntos + 30; // sumar 30 puntos, detecto punto negro
                          Off(OUT_BC); // detener motores y esperar un segundo
                          Wait(1000);
                          OnRev(OUT_B,100); // retroceder medio segundo
                          Wait(Random(500));
                          NumOut(0,0, puntos); //mostrar por pantalla puntos acumulados
                          playSound(); // reproducir sonido
                       }
                   }
                   Wait(20000); // esperar veinte segundos
              }



Reflexión:

La actividad desarrollada, entretenida y didáctica, sin duda me sirvió para potenciar el emfoque a la integración de sistemas ya que el uso de distintos sensores en conjunto con el modulo de control BRICK y agregando a esto la interfaz de programación BRIXCC provee funcionalidad extendida a la mera programación secuencial de procedimientos desde una perspectiva del desarrollo de aplicaciones finales sin uso de instrumentos auxiliares externos.
Como reflexión respecto de la competencia a validar considero que se efectuaron todos los procesos esperados ya que primero efectué un análisis de que es lo que se debía hacer, luego con un diagrama de flujo pude obtener la lógica programática mas simple posible para llevarla finalmente a un código equilibrado y que interactuara de forma natural con un usuario normal mediante las interfaces disponibles como lo son el teclado y la pantalla.