domingo, 23 de febrero de 2014

Asignación de Memoria Dinámica y Estática

Asignación dinámica de memoria

La creación y mantenimiento de estructuras dinámicas de datos, requiere la asignación dinámica de memoria ya que es la capacidad del programa para obtener, en tiempo de ejecución, mas espacio de memoria para contener nuevos nodos, y poder liberar espacio ya no requerido. El limite de la asignación dinámica de memoria puede ser tan grande como la totalidad de memoria física disponible en la computadora, o la cantidad de memoria virtual disponible.

En C y C++ las funciones malloc y free así como el operador sizeof son esenciales para a asignación de memoria dinámica

Para que se puedan aplicar todas las funciones se estudiaran con estructuras autoreferenciadas estas son las que contienen un apuntador que apunta a una estructura del mismo tipo de estructura.

Ejemplo:


struct node 

                  {
                    int data;
                    struct node *nextPtr;
                  };


Una estructura anterior tiene dos miembros: el miembro entero data y el miembro apuntador nextPtr. El miembro nextPtr apunta a una estructura de tipo struct node ( es una estructura igual que la que se esta declarando). El apuntador se  conoce como vinculo o enlace, es decir, que enlaza las estructuras del mismo tipo.


Estructuras de nodo 

En la imagen anterior se puede mostrar dos nodos en donde el numero 2 esta señalando al numero 1 y este ultimo esta señalando a un dato NULL este valor es el encargado del termino de la estructura. 

Función malloc:

Toma como argumento el numero de bytes a asignarse, y regresa un apuntador del tipo void* a la memoria asignada. Un apuntador puede asignarse a una variable de cualquier tipo de apuntador.normalmente la funcion malloc se utiliza conjuntamente con el operador sizeof. 

Ejemplo:

 newPtr = malloc (sizeof (struct node) );

sizeof (struct node) evalúa el determinado tamaño en bytes para la una estructura, por lo tanto toda la función asigna un espacio de memoria en una nueva área del tamaño de sizeof (struct node) bytes, y lo almacena en la variable newPtr. Si no es disponible malloc regresa un apuntador NULL.


Función free: 


Esta función cancela la asignación de la memoria , es decir, regresa la memoria al sistema, de tal manera que en el futuro esta pueda ser asignada. Para  liberar memoria asignada dinámicamente mediante la función malloc.


Ejemplo:


free (newPtr);


Programa con la funcion malloc y free


#include <stdio.h> 
#include <stdlib.h> /* requerida para malloc y free funciones */ 
#include <iostream> 

using namespace std; 

int main() { 
int number; 
int *ptr; 
int i; 

printf("Cuantos números enteros desea ingresar? "); 
scanf("%d", &number); 
//En algunos compiladores podrías usarlo así 
//ptr = malloc(number*sizeof(int)); /* Creamos el espacio de memoria en forma dinámica */ 
//Nosotros tenemos DEV C++ y tenemos que hacerlo así para que funcione. 
ptr = (int *)malloc(number*sizeof(int)); /* Creamos el espacio de memoria en forma dinámica */ 

if(ptr!=NULL) { 
for(i=0 ; i<number ; i++) { 
*(ptr+i) = i; 


for(i=number ; i>0 ; i--) { 
printf("%d\n", *(ptr+(i-1))); /* Imprimimos en orden inverso */ 
} 

free(ptr); /* Liberamos la memoria reservada */ 
system("PAUSE"); 
return 0; 

else { 
printf("\nLa reserva de memoria no suficiente memoria.\n"); 
return 1; 






Función calloc:
Esta se inicializa en la zona de memoria reservada. sus argumentos son diferentes de la función malloc que solo recibe el numero de bytes a reservas. Para calloc es necesario dar en el numero de elementos y el tamaño de cada uno de sus elementos.

void* calloc(size_t nmemb, size_t size);

Función realloc:
Esta cambia el tamaño de la memoria que se asigno dinamicamente copiando, su contenido anterior.

void* realloc(void* ptr, size_t size);


#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   int *numPtr, i;
   size_t tamanyo=0;

   printf( "Introduzca el tamaño de la lista: " );
   scanf( "%d", &tamanyo );

   puts( "Adjudicamos espacio a la lista (con calloc)." );
   numPtr = (int *)calloc( tamanyo, sizeof(int) );

   for( i=0; i<tamanyo-1; i++ )
      printf( "%d, ", numPtr[i] = rand() % 100 + 1 );
   printf( "%d\n", numPtr[i] = rand() % 100 + 1 );

   numPtr = (int *)realloc( numPtr, tamanyo/=2 );
   printf( "Recortamos la lista a la mitad: %d\n", tamanyo );
   for( i=0; i<tamanyo-1; i++ )
      printf( "%d, ", numPtr[i] );
   printf( "%d\n", numPtr[i] );

   puts( "Liberamos el espacio (con realloc)." );
   realloc( numPtr, 0 );    /* Una forma poco ortodoxa, pero válida, de liberar espacio */
   system("pause");
   return 0;

}


Asignación estática de memoria.

Esta consiste en el proceso de la asignación de memoria al tiempo que se compila el programa y antes que el programa sea ejecutado, a diferencia con la asignación dinámica  donde se asigna la memoria en el tiempo que el programa en ejecución lo necesita.

Una aplicación de esta técnica se lleva mediante modulo de programación, es decir, funciones o subrutinas declarando los datos de forma local, osea que desde otro modulo son inaccesibles excepto que se le pasen como parámetros o sean devueltos por la función.





miércoles, 12 de febrero de 2014

Conferencia INNOVATECH


La innovación es la introducción de nuevos productos y servicios, que cambian a la organización industrial de manera tal que todos se vuelvan consumidores. En el mundo hay sin fin productos para la mayor parte de necesidades.

Lunambotics.

 En ta conferencia me encontré con un robot que estuvo en segundo lugar de un concurso de la NASA en donde puede el robot tiene que tener inteligencia artificial y con ello poder leer el camino en donde tiene que escarbar. La luna es tiene un superficie parecida al talco en donde si una persona son la ropa cotidiana al pisarla se enterrarían los pies; con este robot si hay una superficie que impida escavar hace los cálculos necesarios para rodear o brincar el obstáculo.
El nombre y logo del proyecto 
Robot para la NASA


Controlador Lógico Programable (PLC) 

Los PLC son computadoras utilizadas para automatizar los procesos electromecánicos, tales como el control de la maquinaria de la fábrica en lineas de montaje o atracciones mecánicas. A diferencia de una computadora el PLC esta diseñado para múltiples señales de entrada y salida, rangos de temperatura, inmunidad al ruido eléctrico y resistencia a la vibración y el impacto.



 Este es un sistema controlado por PLC que hace mover a los pistones para poder activar un switch.

Maquina que controla válvulas neumáticas 



Motocicleta eléctrica.


Esta funciona por medio de las pilas de litio que e encuentran debajo de ella y es un buen instrumento para no contaminar al ambiente. 

Motocicleta electrica


Pilas de litio
Proyectos.

En este lugar había un grupo de personas que hablaban sobre los cursos que en donde enseñan a los niños grandes y fáciles cosas sobre la robótica, los niños se desarrollan y conviven con otros niños de la misma edad y conocimiento. También estos cursos pueden ser para adultos pero seria en otro área donde es mas profesional
Elefante controlado por medio de botones en su espalda

Impresora 3D

Las impresoras son muy importantes ya que con ellas puedes enviar diseños que se encuentran en la computadora a diseños en papel que pueden ser mas útiles en unas ciertas áreas. La impresora 3D lo que hace es modelar una imagen de los programas de diseño como AutoCad, Blender, 3D max, Google SketchUp entre otros. Teniendo la imagen en estos programas se exporta a una extención .stl que es estándar para las impresoras 3D.







Conferencias:

Conferencia 1: Experiencias de aplicación de control automático en sistemas mecatrónicos.

En esta conferencia se platico sobre los proyectos que lleva a cabo el Instituto Politécnico Nacional en la Maestría de Tecnología de Computo en donde se utiliza mecatrónica para hacer grandes proyectos. Lo interesante de esta conferencia fue que todas las gráficas fueron medidas en tiempo real por la aplicación Matlab utilizando la herramienta de Simulink mas especifico llamado control desk.

Aplicaciones de la mecatrónica


En este vídeo se puede ver las mediciones de control del robot haciendo una parábola 


Esta es la dirección electrónica en donde pueden entrar para ver mas sistemas de control automarico


Conferencia 2: Los secretos de Steve Jobs.
Esta conferencia fue dada por Victor Octavio Valdivia Moreno dando una explicación sobre la mentalidad de Steve Jobs dando una conferencia tratando el tema como  una conferencia de superación.
Añadir leyenda

Diferencias entre Bill Gates y Steve Jobs











Conferencia 3: Domótica con Arduino uno y Ethernet Shield aplicada al hogar.
En esta conferencia se pudo notar como hacer una casa inteligente y que la domótica son los sistemas necesarios para automatizar las casas. Estos sistemas son electrónicos y se utilizan sensores como controladores de medición. Esta conferencia la inicializó el M. I. José Manuel Mata Ledesma en donde explico las partes o los sub-sistemas que se tienen que dividir las casas para poder controlarlas. 


Domótica

Procesos de la Domótica





viernes, 7 de febrero de 2014

¿Por qué escogimos Android?

Hoy en día, tenemos varios sistemas operativos que dan bastante más de lo que un usuario medio necesita para el día a día, o incluso para siempre. Por supuesto hablo de iOS, Windows Phone, BlackBerry OS y Android. Estos sistemas operativos, dan al usuario tantas opciones de conectividad, personalización y/o como plataforma de juegos, que éste no sabe qué sistema se adapta mejor al uso que le va a dar. Porque no es lo mismo un autónomo que un hipster, vamos a desgranar qué cosas hacen a Android diferente a los demás SO. ¿Por qué destaca y tiene tanto éxito? Plataforma de código abierto Android es un sistema de desarrollo libre basado en Linux y de código abierto. Cualquiera puede coger el código y adaptarlo a un smartphone o tablet. Es por éso que muchísimos fabricantes optan por Android como primera opción a incluir en sus dispositivos. Y claro, tanto terminal con Android de buena calidad, ha acabado por convertir a éste en un reclamo bastante productivo. Cualquier empresa que saca un terminal con Android de medianas prestaciones consigue unas buenas ventas. Existen varios casos (sobre todo de la gama Galaxy) en España. Y es por esto último que empresas como Huawei, ZTE o Lenovo, aunque no terminen de despegar.



Evolución de los Sistemas Operativos


Años 40

A finales de los años 1940, con lo que podríamos llamar la aparición de la primera generación de computadoras, se accedía directamente a la consola de la computadora desde la cual se actuaba sobre una serie de micro interruptores que permitían introducir directamente el programa en la memoria de la computadora (en realidad al existir tan pocas computadoras todos podrían considerarse prototipos y cada constructor lo hacía sin seguir ningún criterio predeterminado). Por aquel entonces no existían los sistemas operativos, y los programadores debían interactuar con el hardware del computador sin ayuda externa. Esto hacía que el tiempo de preparación para realizar una tarea fuera considerable. Además para poder utilizar la computadora debía hacerse por turnos. Para ello, en muchas instalaciones, se rellenaba un formulario de reserva en el que se indicaba el tiempo que el programador necesitaba para realizar su trabajo. En aquel entonces las computadoras eran máquinas muy costosas lo que hacía que estuvieran muy solicitadas y que sólo pudieran utilizarse en periodos breves de tiempo. Todo se hacia en lenguaje de máquina.


Años 50

A principios de los años 50 con el objeto de facilitar la interacción entre persona y computador, los sistemas operativos hacen una aparición discreta y bastante simple, con conceptos tales como el monitor residente, el proceso por lotes y el almacenamiento temporal.

Monitor residente

Su funcionamiento era bastante simple, se limitaba a cargar los programas a memoria, leyéndolos de una cinta o de tarjetas perforadas, y ejecutarlos. El problema era encontrar una forma de optimizar el tiempo entre la retirada de un trabajo y el montaje del siguiente.

Procesamiento por lotes

Como solución para optimizar el tiempo de montaje surgió la idea de agrupar los trabajos en lotes, en una misma cinta o conjunto de tarjetas, de forma que se ejecutaran uno a continuación de otro sin perder apenas tiempo en la transición.

Almacenamiento temporal

Su objetivo era disminuir el tiempo de carga de los programas, haciendo simultánea la carga del programa o la salida de datos con la ejecución de la siguiente tarea. Para ello se utilizaban dos técnicas, el buffering y el spooling.



Años 60

En los años 1960 se produjeron cambios notorios en varios campos de la informática,con la aparicion de el circuito cerrado la mayoría orientados a seguir incrementando el potencial de los computadores. Para ello se utilizaban técnicas de lo más diversas:

Multiprogramación

En un sistema multiprogramado la memoria principal alberga a más de un programa de usuario. La CPU ejecuta instrucciones de un programa, cuando el que se encuentra en ejecución realiza una operación de E/S; en lugar de esperar a que termine la operación de E/S, se pasa a ejecutar otro programa. Si éste realiza, a su vez, otra operación de E/S, se mandan las órdenes oportunas al controlador, y pasa a ejecutarse otro. De esta forma es posible, teniendo almacenado un conjunto adecuado de tareas en cada momento, utilizar de manera óptima los recursos disponibles.

Tiempo compartido

En este punto tenemos un sistema que hace buen uso de la electrónica disponible, pero adolece de falta de interactividad; para conseguirla debe convertirse en un sistema multiusuario, en el cual existen varios usuarios con un terminal en línea, utilizando el modo de operación de tiempo compartido. En estos sistemas los programas de los distintos usuarios residen en memoria. Al realizar una operación de E/S los programas ceden la CPU a otro programa, al igual que en la multiprogramación. Pero, a diferencia de ésta, cuando un programa lleva cierto tiempo ejecutándose el sistema operativo lo detiene para que se ejecute otro aplicación. Con esto se consigue repartir la CPU por igual entre los programas de los distintos usuarios, y los programas de los usuarios no se sienten demasiado lentos por el hecho de que los recursos sean compartidos y aparentemente se ejecutan de manera concurrente.

Tiempo real

Estos sistemas se usan en entornos donde se deben aceptar y procesar en tiempos muy breves un gran número de sucesos, en su mayoría externos al ordenador. Si el sistema no respeta las restricciones de tiempo en las que las operaciones deben entregar su resultado se dice que ha fallado. El tiempo de respuesta a su vez debe servir para resolver el problema o hecho planteado. El procesamiento de archivos se hace de una forma continua, pues se procesa el archivo antes de que entre el siguiente, sus primeros usos fueron y siguen siendo en telecomunicaciones.

Multiprocesador

Permite trabajar con máquinas que poseen más de un microprocesador. En un multiprocesador los procesadores comparten memoria y reloj.

Sistemas operativos desarrollados

Además del Atlas Supervisor y el OS/360, los sesenta marcaron el inicio de UNIX, a mediados de los 60 aparece Multics, sistema operativo multiusuario – multitarea desarrollado por los laboratorios Bell de AT&T y programado en PL/1 uno de los pocos SO desarrollados en un lenguaje de alto nivel en aquel tiempo, luego del fracaso del proyecto UNIX comienza a desarrollarse a partir de este a finales de la década.

Años 70

Debido al avance de la electrónica, pudieron empezar a crearse circuitos con miles de transistores en un centímetro cuadrado de silicio, lo que llevaría, pocos años después, a producirse los primeros sistemas integrados. Ésta década se podría definir como la de los sistemas de propósito general y en ella se desarrollan tecnologías que se siguen utilizando en la actualidad. Es en los años 1970 cuando se produce el boom de los miniordenadores y la informática se acerca al nivel de usuario. En lo relativo a lenguajes de programación, es de señalar la aparición de Pascal y C, el último de los cuales se creó específicamente para reescribir por completo el código del sistema operativo Unix, convirtiéndolo en uno de los pocos SO escritos en un lenguaje de alto nivel. En el campo de la programación lógica se dio a luz la primera implementación de Prolog, y en la revolucionaria orientación a objetos, Smalltalk.

Inconvenientes de los sistemas existentes

Se trataba de sistemas grandes y costosos, pues antes no se había construido nada similar y muchos de los proyectos desarrollados terminaron con costos muy por encima del presupuesto y mucho después de lo que se marcaba como fecha de finalización. Además, aunque formaban una capa entre el hardware y el usuario, éste debía conocer un complejo lenguaje de control para realizar sus trabajos. Otro de los inconvenientes es el gran consumo de recursos que ocasionaban, debido a los grandes espacios de memoria principal y secundaria ocupados, así como el tiempo de procesador consumido. Es por esto que se intentó hacer hincapié en mejorar las técnicas ya existentes de multiprogramación y tiempo compartido.

Características de los nuevos sistemas

Para solventar los problemas antes comentados, se realizó un costosísimo trabajo para interponer una amplia capa de software entre el usuario y la máquina, de forma que el primero no tuviese que conocer ningún detalle de la circuitería.

Sistemas operativos desarrollados

* MULTICS (Multiplexed Information and Computing Service): Originalmente era un proyecto cooperativo liderado por Fernando Corbató del MIT, con General Electric y los laboratorios Bell, que comenzó en los 60, pero los laboratorios Bell abandonaron en 1969 para comenzar a crear el sistema UNIX. Se desarrolló inicialmente para el mainframe GE-645, un sistema de 36 bits; después fue soportado por la serie de máquinas Honeywell 6180.

Fue uno de los primeros sistemas operativos de tiempo compartido, que implementó un solo nivel de almacenamiento para el acceso a los datos, desechando la clara distinción entre los ficheros y los procesos en memoria, y uno de los primeros sistemas multiprocesador.

* MVS (Multiple Virtual Storage): Fue el sistema operativo más usado en los modelos de mainframes -ordenadores grandes, potentes y caros usados principalmente por grandes compañías para el procesamiento de grandes cantidades de datos- System/370 y System/390 de IBM, desarrollado también por IBM y lanzado al mercado por primera vez en 1974. Como características destacables, permitía la ejecución de múltiples tareas, además de que introdujo el concepto de memoria virtual y finalmente añadió la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de ahí su nombre.
* CP/M (Control Program/Monitor): Desarrollado por Gary Kildall para el microprocesador 8080/85 de Intel y el Zilog Z80, salió al mercado en 1976, distribuyéndose en disquetes de ocho pulgadas. Fue el SO más usado en las computadoras personales de esta década. Su éxito se debió a que era portátil, permitiendo que diferentes programas interactuasen con el hardware de una manera estandarizada. Estaba compuesto de dos subsistemas:
o CCP (Comand Control Processor): Intérprete de comandos que permitía introducir los mandatos con sus parámetros separados por espacios. Además, los traducía a instrucciones de alto nivel destinadas a BDOS.
o BDOS (Basic Disk Operating System): Traductor de las instrucciones en llamadas a la BIOS.

El hecho de que, años después, IBM eligiera para sus PCs a MS-DOS supuso su mayor fracaso, por lo que acabó desapareciendo.

Años 80

Con la creación de los circuitos LSI -integración a gran escala-, chips que contenían miles de transistores en un centímetro cuadrado de silicio, empezó el auge de los ordenadores personales. En éstos se dejó un poco de lado el rendimiento y se buscó más que el sistema operativo fuera amigable, surgiendo menús, e interfaces gráficas. Esto reducía la rapidez de las aplicaciones, pero se volvían más prácticos y simples para los usuarios. En esta época, siguieron utilizándose lenguajes ya existentes, como Smalltalk o C, y nacieron otros nuevos, de los cuales se podrían destacar: C++ y Eiffel dentro del paradigma de la orientación a objetos, y Haskell y Miranda en el campo de la programación declarativa. Un avance importante que se estableció a mediados de la década de 1980 fue el desarrollo de redes de computadoras personales que corrían sistemas operativos en red y sistemas operativos distribuidos. En esta escena, dos sistemas operativos eran los mayoritarios: MS-DOS, escrito por Microsoft para IBM PC y otras computadoras que utilizaban la CPU Intel 8088 y sus sucesores, y UNIX, que dominaba en los ordenadores personales que hacían uso del Motorola 68000.

Apple Macintosh

El lanzamiento oficial se produjo en enero de 1984, al precio de 2495 dólares. Muchos usuarios, al ver que estaba completamente diseñado para funcionar a través de una GUI (Graphic User Interface), acostumbrados a la línea de comandos, lo tacharon de juguete. A pesar de todo, el Mac se situó a la cabeza en el mundo de la edición a nivel gráfico.

MS-DOS

En 1981 Microsoft compró un sistema operativo llamado QDOS que, tras realizar unas pocas modificaciones, se convirtió en la primera versión de MS-DOS (MicroSoft Disk Operating System). A partir de aquí se sucedieron una serie de cambios hasta llegar a la versión 7.1, a partir de la cual MS-DOS dejó de existir como tal y se convirtió en una parte integrada del sistema operativo Windows.

Microsoft Windows

Familia de sistemas operativos propietarios desarrollados por la empresa de software Microsoft Corporation, fundada por Bill Gates y Paul Allen. Todos ellos tienen en común el estar basados en una interfaz gráfica de usuario basada en el paradigma de ventanas, de ahí su nombre en inglés. Las versiones de Windows que han aparecido hasta el momento se basan en dos líneas separadas de desarrollo que finalmente convergen en una sola con la llegada de Windows XP. La primera de ellas conformaba la apariencia de un sistema operativo, aunque realmente se ejecutaba sobre MS-DOS.

Actualmente existe Windows Vista.

Años 90

GNU/Linux

En 1991 aparece la primer versión del núcleo de Linux. Creado por Linus Torvalds y un sinfín de colaboradores a través de Internet. Este sistema se basa en Unix, un sistema que en principio trabajaba en modo comandos, estilo MS-DOS. Hoy en día dispone de Ventanas, gracias a un servidor grafico y a gestores de ventanas como KDE, GNOME entre muchos. Recientemente GNU/Linux dispone de un aplicativo que convierte las ventanas en un entorno 3D como por ejemplo Beryl. Lo que permite utilizar linux de una forma muy visual y atractiva.

Tipos de Sistemas Operativos



Sistemas Operativos por su Estructura


Estructura monolítica.

Esta estructura es una de los primeros sistemas operativos construidos por un solo programa compuesto de un conjunto de rutinas entrelazadas de tal manera que puede llamar a cualquier otra. Las características fundamentales son:
  •  Construcción del programa final a base de módulos compilados separadamente que se unen a través del ligador.
  • Buena definición de parámetros de enlace entre las distintas rutinas existentes, que puede provocar mucho acoplamiento.
  • Carecen de protecciones y privilegios al entrar a rutinas que manejan diferentes aspectos de los recursos de la computadora, como memoria, disco, etc.

Generalmente están hechos a medida, por lo que son eficientes y rápidos en su ejecución y gestión, pero por lo mismo carecen de flexibilidad para soportar diferentes ambientes de trabajo o tipos de aplicaciones.




Estructura jerárquica.

A medida que fueron creciendo las necesidades de los usuarios y se perfeccionaron los sistemas, se hizo necesaria una mayor organización del software, del sistema operativo, donde una parte del sistema contenía subpartes y esto organizado en forma de niveles. Se dividió el sistema operativo en pequeñas partes, de tal forma que cada una de ellas estuviera perfectamente definida y con un claro interface con el resto de elementos.  En la estructura anterior se basan prácticamente la mayoría de los sistemas operativos actuales. Otra forma de ver este tipo de sistema es la denominada de anillos
concéntricos o "rings".


En el sistema de anillos, cada uno tiene una apertura, conocida como puerta o trampa (trap), por donde pueden entrar las llamadas de las capas inferiores. De esta forma, las zonas más internas del sistema operativo o núcleo del sistema estarán más protegidas de accesos indeseados desde las capas más externas. Las capas más internas serán, por tanto, más privilegiadas que las externas.


Máquina Virtual.

Se trata de un tipo de sistemas operativos que presentan una interface a cada proceso, mostrando una máquina que parece idéntica a la máquina real subyacente. Estos sistemas operativos separan dos conceptos que suelen estar unidos en el resto de sistemas: la multiprogramación y la máquina  extendida. El objetivo de los sistemas operativos de máquina virtual es el de integrar distintos sistemas operativos dando la sensación de ser varias máquinas diferentes.



El núcleo de estos sistemas operativos se denomina monitor virtual y tiene como misión llevar a cabo la multiprogramación, presentando a los niveles superiores tantas máquinas virtuales como se soliciten. Estas máquinas virtuales no son máquinas extendidas, sino una réplica de la máquina real, de manera que en cada una de ellas se pueda ejecutar un sistema operativo diferente, que será el que ofrezca la máquina extendida al usuario.


Sistemas Operativos de Servicio

Sistema por forma de servicio:



  • Sistema operativo en tiempo real: En ellos la importancia es de los procesos no de los usuarios. Por lo general, prestan atención a los procesos en el momento que lo requieran y se utilizan en los entornos donde se maneja un gran número de sucesos o eventos.

  • Sistema operativo en tiempo compartido: Permiten una simulación del sistema y sus recursos son compartidos entre los usuarios. En esta si un usuario hace alguna petición a la computadora, esta lo procesa cuando le sea posible, y la respuesta aparecerá en la terminal del usuario

  • Sistema operativo distribuido: Permite la distribuir las tareas y procesos, entre un conjunto de procesadores.   Existen dos esquemas básicos: El sistema fuertemente acoplado que es el que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores y el sistema débilmente acoplado que los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local.

  • Sistema operativo por lotes: Procesan una gran cantidad de trabajos con poca o ninguna interacción entre el usuario y los programas  en ejecución. Se reúnen  los trabajos y  se realizan al mismo tiempo evitando la espera de más trabajos.

  • Sistema operativo de red: Son aquellos sistemas que mantienen a dos o más computadoras unidas a través de algún medio de comunicación, con el objetivo de compartir los diferentes recursos y la información del sistema.

  • Sistema operativo paralelo: Este pretende que cuando existan dos o varias tareas que compitan por algún recurso se puede realiza o ejecutar al mismo tiempo.


Sistema operativos por tareas:


  • Sistemas Operativos de multi-programación o multi-tareas: En este se pueden cargar dos o más aplicaciones al mismo tiempo, pero solo se procesa la aplicación que está en primer plano. Funciona en los sistemas operativos como UNIX, Windows 95, Windows 98, Windows NT, MAC-OS, Os/2, soportan la multi-tarea.

  • Sistema operativo Mono-tareas: Son primitivos y solo pueden manejar un proceso en cada momento. Un ejemplo seria cuando imprimes solo hace la esa acción cuando termine se puede hacer otra por lo mientras tienes que esperar para que termine la acción.
Sistema Operativo por usuario:


  • Sistema operativo Mono-usuario: Son aquellos que nada mas pueden atender a un solo usuario, gracias a limitaciones creadas por el hardware o el tipo de aplicación que se está ejecutando. Estos sistemas son muy simples ya que todo el hardware depende de la tarea que se está procesando. Está orientado a las microcomputadoras.

  • Sistema operativo Multi-usuario: En estos se encuentran todos los sistemas que cumplen simultáneamente las necesidades de dos o más usuarios, que comparten los mismos recursos. Estos sistemas son utilizados para las redes, ya que consiste en fraccionar el tiempo.



Estructuras de los Sistemas Operativos

Analizando la historia de los Sistemas Operativos notamos que se puede considerar que éstos surgen desde finales de los 50's con una arquitectura bastante obsoleta comparada con la de la actualidad.
Para poder construir un Sistema Operativo se deben tener en cuenta dos tipos de requisitos, los cuales son:
  1. Requisitos de usuario: Un sistema fácil de usar y de aprender, seguro, rápido y adecuado para el uso que se le necesita dar.
  2. Requisitos del software: Considera el continuo mantenimiento, forma de operación, restricciones de uso, eficiencia, tolerancia frente a los errores y flexibilidad.
El objetivo de la estructuración es buscar una organización interna que facilite la comprensión, incremente la portabilidad, extensión y favorecer el mantenimiento de los Sistemas Operativos.
A continuación se describen las distintas estructuras que presentan los actuales Sistemas Operativos para satisfacer las necesidades que de ellos se quieren obtener. Éstas no son de ninguna manera las únicas estructuras posibles, pero nos darán una idea de algunos diseños que se han llevado a la práctica.
Los cuatro diseños son:

Los Sistemas Monolíticos.



Los sistemas Monolíticos son la estructura más simple para un Sistema Operativo. También llamados de Estructura Modular, fue escrito para proporcionar una máxima funcionalidad dentro del menor espacio posible.
Se caracteriza porque no tienen una estructura totalmente clara, con ésto nos referimos a que sus rutinas y funcionalidades (ej. manejo de drivers, sistemas de archivos, gestión de memoria, etc.), se encuentran agrupados en un solo programa (el Sistema Operativo).
Este sistema está descrito como un conjunto de procedimientos o rutinas entrelazadas de tal forma que cada una tiene la posibilidad de llamar a las otras rutinas cada vez que así lo requiera. Sin embargo, cabe destacar las falencias en este tipo de estructura que radica principalmente en la poca confiabilidad otorgada, ya que todo el sistema, al no tener una estructura definida, se ejecuta todo en el mismo nivel del núcleo (kernel) lo que lo hace altamente vulnerable, por esta razón cuando falla un programa se produce un error en todo el sistema.

Ejemlos de sistemas monolíticos:
Los ejemplos típicos de este sistema son Unix, MS-DOS y Mac OS hasta Mac OS 8.6. Otros ejemplos son:
  • Linux
  • Syllable
  • Núcleos tipo DOS
  • DR-DOS
  • Familia Microsoft Windows 9x (95, 98, 98SE, Me)


Los sistemas de Micronúcleo o Microkernel


El Micronúcleo surge como una nueva forma de organización para un Sistema Operativo, es un término algo tedioso de entender ya que puede no ser relativo a su tamaño, pero si a su diseño.
En este sistema las funciones centrales son manejadas por el núcleo(kernel) y la interfaz de usuario es manejada por el entorno(shell). El Microkernel se encarga de todo el código de un sistema, y de planificar los hilos(threads) con la finalidad de tener multitareas.
Algunas ventajas que podemos destacar de los Micronúcleos son los siguientes:
•Uniformidad de interfaces: disponen de una interfaz única para las solicitudes de los procesos, el paso de mensajes.
•Portabilidad: reduciendo el núcleo e implementando casi todo en servidores, para implementarlo en arquitecturas diferentes, sólo habría que modificar el núcleo haciendo más simple su portabilidad.
•Fiabilidad: es más fácil corregir fallas en un sistema pequeño ya que se pueden realizar pruebas más rigurosas que en un sistema mucho más grande.

Ejemplos de los sistemas micronúcleo son:

  • AIX
  • BeOS
  • Mach
  • MorphOS
  • QNX
  • Minix
  • Hurd
  • L4
  • RadiOS
  • Symbian
  • VSTa



Los sistemas por capas o jerárquica

Utilización de servicios de capas inferiores.
En esta estructura el Sistema Operativo queda definido modularmente por divisiones en capas o niveles, cuya organización está dada como una jerarquía de capas donde cada una de ellas ofrece una interfaz clara y bien definida, la capa superior solamente utiliza los servicios y funciones que ofrece la capa inferior, es decir, la capa n sólo se comunica para obtener lo requerido con la capa n-1 (Ver imagen derecha), donde la capa inferior es la más privilegiada. El encargado de que solamente haya comunicación entre capas adyacentes es el procesador.
La capa más interna o inferior (capa 0) corresponde al Hardware, mientras que la más alta o externa corresponde a la interfaz de usuario.
El primer sistema construido de esta manera fue el sistema THE (Technische Hogeschool Eindhoven), desarrollado en Holanda por E. W. Dijkstra (1968) y sus estudiantes.



El sistema original consta de 6 capas:

Capa 5: Se encuentra la interfaz de usuario.
Capa 4: Aloja los programas de usuario.
Capa 3: Se controlan los dispositivos E/S (entrada y salida).
Capa 2: Se administra la comunicación inter-proceso y la consola del operador.
Capa 1: Administración de memoria y discos.
Capa 0: Correspondiente al Hardware, realizando asignación del procesador, también alterna entre procesos cuando ocurren interrupciones o se han expirado y proporciona multiprogramación básica de la CPU.


Ejemplos de sistemas de capas:

  • THE (Technische Hogeschool Eindhoven)
  • Venus
  • MULTICS (Multiplexed Information and Computing Service)



Sistemas por módulos


La mayoría de los sistemas operativos modernos implementan este enfoque. Lo que caracteriza este tipo de estructura es que el kernel se compone por módulos, y cada uno de estos módulos se encuentra separado de forma independiente, tal que, si alguno falla no afecta a los otros, ni al núcleo, por ejemplo, si el módulo de software que se encarga de controlar el proceso de Telnet en una unidad se bloquea o es atacado, sólo este proceso se verá afectado. El resto de las operaciones siguen sus funciones habituales. Los módulos se pueden cargar dinámicamente en el núcleo cuando se necesiten, ya sea, en tiempo de ejecución o durante el arranque del sistema. El kernel dispone de los componentes fundamentales y se conectan directamente con servicios adicionales. Además otros componentes pueden cargarse dinámicamente al núcleo. Este enfoque modular utiliza la programación orientada a objetos.
En general, esta estructura se parece bastante a la de capas, pero es mucho más flexible debido a que cualquier módulo de esta estructura puede llamar a otro. Es similar a la estructura de microkernel, pues el kernel también tiene las funciones esenciales , pero este es más eficiente ya que, no necesitan un mecanismo de paso de mensajes para comunicarse, sólo interfaces conocidas.

Ejemplo de sistema por modulos::
  • Unix modernos
  • Solaris
  • Linux
  • Mac OSX



Clasificación de los Sistemas Operativos

Las características que clasifican a los sistemas operativos, básicamente se cubrirán tres clasificaciones: sistemas operativos por su estructura (visión interna), sistemas operativos por los servicios que ofrecen y, finalmente, sistemas operativos por la forma en que ofrecen sus servicios (visión externa).

Sistemas Operativos por su Estructura:

Según [Alcal92], se deben observar dos tipos de requisitos cuando se construye un
sistema operativo, los cuales son:
• Requisitos de usuario: Sistema fácil de usar y de aprender, seguro, rápido y
adecuado al uso al que se le quiere destinar.
• Requisitos del software: Donde se engloban aspectos como el mantenimiento,
forma de operación, restricciones de uso, eficiencia, tolerancia frente a los
errores y flexibilidad.

Sistemas Operativos por Servicios:

Esta clasificación es la más comúnmente usada y conocida desde el punto de vista del
usuario final. Se deriva en varios tipos:


  • Sistemas Operativos por tareas.
  • Sistema Operativo por usuarios.
  • Sistema operativo por tiempo.
  • Sistema operativo por la forma de servicios.






miércoles, 5 de febrero de 2014

Conceptos básicos de los Sistemas Operativos



  • Sistema: Es un conjunto de componentes que se relacionan entre si para hacer una o varias acciones, todo los sistemas tienen composición estructura y entorno.





  • Comando: Es una orden o instrucción que el usuario proporciona en el sistema, en donde el sistema la recibe por medio del hardware y responde con una acción en el software y hardware.





  • Interfaz: Es la conexión física y funcional entre dos sistemas o dispositivos, con él se puede comprender el software y hardware ya que es el medio de conexión.




  • Programa: Es un conjunto de comandos o instrucciones que se le dan ejecutan en la computadora para realizar una o varias tareas.




  • Usuario: elemento (persona o maquina) que puede identificar el sistema, es el que da las ordenes y manipula a la computadora.



  • Sesión: Es la duración de la conexión entre el usuario y servidor, Se hace un conjunto de acciones desarrolladas por el usuario para la manipulación del sistema.



  • Fichero o Archivo: Es la identidad lógica compuesta por una secuencia finita de bytes, almacenados en el sistema, facilita la manera de organizar los recursos usados para el almacenamiento permanentemente.


  • Directorio o Carpeta: es un contenedor de ficheros, estos se utilizan para la organización jerárquica partiendo de la dirección raíz.


  • Niveles de ejecución: Se refiere al modo de operación del sistema operativo que implementan el estilo de sistema de arranque. Sirven para administrar las acciones de los subsistemas como ejecución, inicio y parar.

     Ejemplo:

      0   ->Parar el sistema.

      1   ->Modo de usuario individual (administrador).

      2-5->Operación normal (definidas por el usuario).

      6   ->Reiniciar el sistema.