lunes, 1 de octubre de 2012

Actividad 2: Algoritmos de Sincronización


Algoritmo de la panadería de Lamport

El algoritmo de la panadería de Lamport es un algoritmo de computación creado por el científico en computación Dr. Leslie Lamport, para implementar la exclusión mutua de N procesos o hilos de ejecución.

Algoritmo

El algoritmo de la panadería toma su nombre de la costumbre de las panaderías y tiendas en general, donde las personas al entrar al local obtienen un número de turno (único) y lo utilizan para que el dependiente les vaya atendiendo en orden de llegada. El cliente obtiene su número de turno usando una cinta de papel que ofrece boletos con números consecutivos.

El dependiente sólo puede atender a una persona al mismo tiempo, lo que concuerda con el uso de un recurso de forma exclusiva: el recurso es el dependiente y la sección crítica de un cliente es lo que realiza mientras es atendido.

El sistema mantiene un número (variable global) que refleja el número de turno del cliente que se está atendiendo en el instante actual. Los clientes deben esperar en una cola hasta que llega su turno. Una vez que se acaba con un cliente, la variable global se incrementa en uno y el cliente que tenga un boleto con ese número pasa a ser atendido. Cuando termina una compra, el cliente se desprende de su boleto y se dedica a realizar cualquier otra actividad libremente (guardar el dinero en la billetera, retirarse, etc.), ya que no se encuentra más en su sección crítica. Si más tarde quiere volver a comprar, tendrá que obtener un nuevo número.

En el modelo algorítmico que se propone, cada cliente es un hilo, identificado con un número único i. Los hilos se deben coordinar para decidir en cada momento qué hilo tiene derecho a ejecutar su código de sección crítica.

En la vida real, el sistema de los boletos funciona perfectamente, pero en un sistema informático la obtención del boleto es problemática: varios hilos pueden obtener el mismo número de turno. En el algoritmo de Lamport se permite que varios hilos obtengan el mismo número. En este caso, se aplica un algoritmo de desempate, que garantiza que sólo un hilo entra en sección crítica. El desempate se realiza así: si dos o más hilos tienen el mismo número de turno, tiene más prioridad el hilo que tenga el identificador con un número más bajo. Como no puede haber dos hilos con el mismo identificador, nunca se da el caso de que dos hilos evalúen al mismo tiempo que tienen derecho a ejecutar su sección crítica.


Entrada en sección crítica

Cuando un hilo quiere entrar en su sección crítica, primero obtiene su número de turno, que calcula como el máximo de los turnos de los otros hilos, más uno. (Si varios hilos realizan el cálculo al mismo tiempo, puede ocurrir que dos o más hilos obtengan el mismo turno).

Antes de entrar en sección crítica, el hilo debe asegurarse de que tiene el número de turno más bajo. En caso de empate, decidirá el identificador de hilo más bajo.

Cuando el hilo abandona la sección crítica, pone su número de turno a un valor especial que indique su no intención de entrar en sección crítica (en este algoritmo, se usa el valor cero).

Implementación

Este es el pseudocódigo del algoritmo de la panadería.

Operador de comparación

Para simplificar la escritura del algoritmo, se utiliza esta notación en las comparaciones entre las prioridades de los hilos:
   (a, b) < (c, d)
que es equivalente a:
   (a < c) o ((a == c) y (b < d))

Pseudocódigo

N es el número de hilos que hay en el sistema.
Para conocer los números de turno se utiliza un vector de enteros. número[i] es el turno correspondiente al hilo i. Si número[i] = 0 significa que el hilo i no está interesado en entrar en sección crítica.

  /* Variables globales */
  Número: vector [1..N] de enteros  = {todos a 0};
  Eligiendo: vector [1..N] de booleanos = {todos a falso};
   
  /* Código del hilo i */
  Hilo(i) {
      loop {

          /* Calcula el número de turno */
          Eligiendo[i] = cierto;
          Número[i] = 1 + max(Número[1],..., Número[N]);
          Eligiendo[i] = falso;
         
          /* Compara con todos los hilos */
          for j in 1..N {                    

               /* Si el hilo j está calculando su número, espera a que termine */
               while ( Eligiendo[j] ) { /* nada */ }      

               /* Si el hilo j tiene más prioridad, espera a que ponga su número a cero */
               /* j tiene más prioridad si su número de turno es más bajo que el de i,  */
               /*  o bien si es el mismo número y además j es menor que i               */
               while ( (Número[j] != 0) && ((Número[j], j) < (Número[i], i)) ) { /* nada */ } 
          }

          /* Sección crítica */
         ...
          /* Fin de sección crítica */

          Número[i] = 0;

          /* Código restante */
      }
  }

Práctica 5: Subprocesos en Java

Concepto de Hilo


De forma sencilla, un hilo es un único flujo de ejecución dentro de un proceso. Un hilo es una secuencia de código en ejecución dentro del contexto de un proceso. Los hilos no pueden ejecutarse ellos solos; requieren la supervisión de un proceso padre para correr. Dentro de cada proceso hay varios hilos ejecutándose.

Ejemplo de Hilos en Java




 Ejemplo Subprocesos en Java

Práctica 4: Monitoreo de Procesos

Procesos de Windows 7


Csrss.exe:
Csrss.exe significa Client Server Run-time Subsystem. Es un subsistema esencial que debe estar siempre activo. Este administra la consola de Windows, crea y destruye threads y administra algunas porciones del entorno 16 bits virtual DOS.

Explorer.exe: Proporciona el entorno de escritorio y la barra de tareas, etc. Este proceso no es vital para el sistema (podemos detenerlo para luego volver a ejecutarlo a través del administrador de tareas- abrir luego escribir explorer.exe), pero si lo detenemos, sólo tendremos el escritorio.

Lsass.exe: Es el servidor de autentificación local de seguridad. Genera los procesos responsables de la autentificación de usuarios para el proceso Winlogon. Si la autentificación tiene éxito, lsass.exe genera los tokens de acceso para el usuario que son utilizados para lanzar el shell inicial. Los otros procesos que el usuario inicia heredan estos tokens.

Mstask.exe: Es el servicio que se encarga de planificar las tareas, es responsable de la ejecución de tareas a un instante preciso programadas por nosotros.

Smss.exe: Es el subsistema de gestión de sesiones (Session Manager Subsystem). Se encarga de la gestión de las sesiones de usuario. Este proceso es responsable de diferentes actividades entre ellas la ejecución de los procesos Winlogon y Win32 (csrss.exe) y de la creación de variables de entorno del sistema. Después de ejecutar estos procesos, éste espera que Winlogon o Csrss finalicen. Si esto se produce normalmente, entonces el sistema se detiene.

Spoolsv.exe: Es el proceso responsable de la gestión de los trabajos de impresión y fax…

Svchost.exe: Es un proceso genérico que hace de host para otros procesos que corren desde DLL.

Services.exe: Es el administrador de servicios de Windows (Service Control Manager). Este proceso inicia, detiene e interactúa con los servicios del sistema.

System: La mayoría de threads del modo núcleo funcionan como proceso System.

System Idle Process: Este proceso es un único threads que corre en cada procesador cuando el procesador no tiene nada que hacer.

Winlogon.exe: Es el proceso que gestiona el inicio y cierre de sesión. Winlongon únicamente se activa cuando el usuario presiona las teclas CTRL+ALT+SUPR, entonces muestra la ventana de seguridad.

Winmgmt.exe: Componente del núcleo del Administrador de cliente bajo Windows 2000. Este proceso arranca cuando la primera aplicación cliente se conecta. Este corresponde al servicio WMI que permite por ejemplo programar recursos en el equipo (memoria, disco duro, etc.) 

Maneras de ingresar a la línea de comandos de Windows 7.
  • Presionar la tecla Windows+R aparece la ventana ejecutar.
  • Entre al menú inicio, clic en todos los programas, entrar a la carpeta Accesorios, ejecutar y se escribe CMD y de clic en aceptar se abre la línea de comandos.
  • Entre al menú inicio, clic en todos los programas, entrar a la carpeta Accesorios y por ultimo en el símbolo del sistema.
El comando hostname sirve para encontrar el nombre de la computadora en la cual se está trabajando.






Según la información que aparece en pantalla, la computadora se llama HP-2.

Utilizando el comando tasklist (command prompt)



Al utilizar el comando tasklist aparece los siguiente en el Símbolo del Sistema:

El nombre de la imagen en la primera columna es el nombre del proceso enseguida pide que es un identificador del proceso como si fuera una clave, luego el nombre de sesión que dice si es un proceso que de este ejecutando como servicio o en la consola, después el número de cesio que eso para los servicios y para los de la consola y por último el uso de la memoria física de cada uno de los procesos.

Utilizando “Process Viewer”


El programa muestra todas las aplicaciones módulos y procesos que el sistema está utilizando muestra su ID, el uso de la memoria RAM el nombre del usuario que lo ejecuta.

Tablas con Procesos del Sistema y Procesos de Usuario e información a cerca de ellos.

Tabla de Procesos del Sistema:

Se muestra el nombre del proceso, quien lo ejecuta en este caso el sistema, después del CPU que sea de cada aplicación, el uso de la memoria RAM y por ultimo una pequeña descripción del proceso.


Tabla de Procesos de Usuario:

Muestra el nombre del proceso, el nombre del usuario que lo ejecuta, CPU, el uso de la memoria RAM y por ultimo una pequeña descripción del proceso.


Procesos con PID diferentes


Glosario

Proceso: Un proceso puede informalmente entenderse como un programa en ejecución. Formalmente un proceso es "Una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistema asociados".

Thread: En sistemas operativos, un hilo de ejecución, hebra o subproceso es la unidad de procesamiento más pequeña que puede ser planificada por un sistema operativo.

CPU: La unidad central de procesamiento, UCP o CPU (por el acrónimo en inglés de central processing unit), o simplemente el procesador o microprocesador, es el componente principal del computador y otros dispositivos programables, que interpreta las instrucciones contenidas en los programas y procesa los datos.

Memoria física: La memoria física hace referencia a los chips de memoria RAM que están insertados en las placas madres. Se distinguen de la memoria virtual  que no existe realmente como chip, sino que es simulada empleando otro medio de almacenamiento (generalmente el disco duro). Menos frecuentemente, el término "memoria física" también puede hacer referencia a los discos duros  u otras formas de almacenamiento.

PID: En computación, PID es una abreviatura de process ID, o sea ID del proceso o bien identificador de procesos. El identificador de procesos es un número entero usado por el kernel de algunos sistemas operativos (como el de Unix o el de Windows NT) para identificar un proceso de forma unívoca.







Actividad 1: Cuestionario

PARTE 1:

1. Explica cada uno de los elementos de información que incluye el PCB de los procesos:

  • Pointer:
  • Process State:
  • Process Number:
  • Program Counter
  • Registers:
  • Memory Limits:
  • List of Open Files:

2. Cuando se habla de modo Kernel y/o modo usuario, ¿a que se está haciendo referencia?

A a la manera en que se accede a los componentes de la computadora y a la manera en la que se ejecutan los procesos.

3. ¿Con que otro nombre(s) se le conoce al modo Kernel?

También se le conoce como Modo Supervisor o Modo Privilegiado.

4. Enlista 3 ejemplos de cada uno de los modos de la pregunta 2.

Modo Kernel:

  • Bus de información.
  • Control de Bios.

Modo Usuario:

  • Abrir.
  • Word.
  • Imprimir.
  • Protocolos IP.

5. Un sistema se puede representar como un Modelo de colas de procesos del sistema operativo, ilustra este modelo, explica su función y define las diferentes colas de procesos que incluye.



6. Ilustra y explica un ejemplo de cambio de contexto, ¿quién es el responsable de realizar este cambio?

El responsable de realizar este cambio es el planificador del sistema.

7. Ilustra un ejemplo de una aplicación real que haga uso de cualquier modelo de thread.



PARTE 2:

8. Observa el video “transiciones de estado y diagrama ..” las veces que consideres necesario y posteriormente:

a. Explica brevemente con tus propias palabras que es una transición:


Una transición es un proceso mediante un estado listo para el cual se le asigne un procesador para ejecutar.


b. Describe cada una de las transiciones que menciona el narrador:


  • Nuevo-listo: Al crearse un proceso pasa inmediatamente al estado listo.
  • Listo-ejecutado: En el estado de listo el proceso solo espera para que se le asigne un procesador para ejecutar.
  • Ejecutado-listo: Ante una interrupción que se genere el proceso puede perder el recurso puede perder el proceso.
  • Ejecutando-bloqueado: A medida que el proceso instrucciones realiza pedidos en distintos componentes.
  • Bloqueado-listo: Una vez que ocurre el evento que el proceso estaba esperando puesto nuevamente en la cola de espera.
  • Ejecutado-terminado: Cuando el proceso ejecuta su última instrucción pasa al estado terminado.





martes, 4 de septiembre de 2012

Práctica 3: Kernel del Sistema Operativo

Introducción:


El núcleo es la parte esencial de un SO que provee los servicios más básicos del sistema. Se encarga de gestionar los recursos como el acceso seguro al Hardware de la computadora.

Se encarga también del Multiplexado, determinando que programa accederá a un determinado Hardware si dos o más quieren usarlo al mismo tiempo. El Kernel también ofrece una serie de abstracciones del Hardware para que los programadores no tengan que acceder directamente al Hardware, proceso que puede ser complicado.

Arquitectura del Kernel de Solaris



Arquitectura del Kernel de Unix


 

Arquitectura del Kernel de Windows



 


Lista de verificación



Lenguaje en el que están escritos algunos Sistemas Operativos



Solaris

Escrito en el lenguaje C y en lenguaje ensamblador

Unix

La mayor parte escrito en un lenguaje de alto nivel (C) y sólo una pequeña parte (el kernel) está escrito en lenguaje ensamblador.

Windows:

Está escrito en lenguaje C y ya se empezó a usar C# y C++.

Reflexión:

¿Por qué es impotante el núcleo de un Sistema Operativo?

Porque es el que gestiona los servicios que ofrece el Sistema Operativo. Controla el acceso del Software sobre el Hardware. El Kernel decide que programa podrá hacer uso de un dispositivo de Hardware y por cuanto tiempo, también hace abstracciones del Hardware lo que esconde su complejidad y le facilita el trabajo a los programadores.

Conclusión:

Con esta práctica aprendí sobre la arquitectura del Kernel de distintos Sistemas Operativos.
Se puede observar que básicamente en cualquier Sistema Operativo el Kernel es el encargado de administrar todos los procesos que ocurren en el sistema.

Actividad 6: Aspectos más sobresalientes de los Sistemas Operativos


Conclusión:

Me dí cuenta de que los primeros SO no necesitaban requerimientos de hardware muy grandes a comparación de los actuales que sí necesitan muchos recursos de hardware para poder funcionar lo más eficientemente posible.

Activiad 5: Características importantes de los Sistemas Operativos


Conclusion:

Me pude dar cuenta de algunos de los Sistemas Operativos que exirsten y de algunas de sus características. Veo que hay mucha variedad y que ha habido un gran avance desde los primeros Sistemas Operativos hasta los más actuales.

Actividad 4: Clasificación de los Sistemas Operativos

Los Sistemas Operativos se puden clasificar de la suguiente manera:




Difertentes tipos de Estructura de los Sistemas Operativos


Monolítica:

Estructura de lo primeros SO construidos por un solo programa, compuestos por un conjunto de rutinas.
Ventaja: Buena definición de parámetros.
Desventaja: Caarecen de protecciones y privilegios a rutinas.

Jerárquica:

Tiene un maor orden el software del SO Y está organizado en forma de niveles.
Ventaja: Los niveles están bien definidos por lo que son eficientes al realizar tareas.
Desventaja: Si un nivel llega a fallar los demás tambien fallan.

Máquina Virtual:

Tipo de sistema que presenta una interfaz a cada proceso.
Ventaja: Integra distintos Sistemas Operativos.
Desventaja: No son máquina extendidas sino replicas.

Cliente-Servidor:

Tipo de sistema más reciente que se ejecuta en la mayoría de las computadoras.
Ventaja: Sirve para toda clase de aplicaciones.
Desventaja: Tiene que llamar a un servidor apara abrir un archivo.

Actualmente el lenguaje que se utiliuza para progrmar un Sistema Operativo es C, por ejemplo, LINUX.

Práctica 2: Interfaces de usuario

Introducción


La interfaz de usuario es el medio con que el usuario puede comunicarse con una máquina, un equipo o una compuatadora, y comprende todos los puntos de conatacto entre el usuario y el equipo, normalmente suelen ser fáciles de entender y fáciles de accionar.

Tipos de interfaces de usuario



a) Según al forma de interactuar del usuario

  • Interfaces alfanuméricas (intérpretes de comandos)
  • Inter faces gráficas de usuario (GUI, graphics user interfaces)
  • Interfaces táctiles

b) Según su construcción

  • Interfaces de Hardware
  • Inetrfaces de Software

Ejemplos gráficos de tipos de interfaces




Acciones que permite realizar la GUI, tanato con el teclado como con el ratón:



Teclado:

  • Ingresar texto.
  • Abrir el menú de Windows
  • Cambiar al ventana visible

 Ratón:

  • Cortar, copiar y pegar archivos texto:
  • Seleccionar múltiples archivos y objetos.
  • Ejecuatar aplicaciones.


Ejecución de comandos con la Interfaz CLI




Reflexión:

 
Ventajas de usar GUI o CLI:

  • GUI: Contacto mássimple con la máquina
  • CLI: Contacto con la máquina casi directo

Desventajas de usar GUI o CLI:

  • GUI: No es fácil solucionar problemas complejos.
  • CLI: Se tiene que aprender exactamente la sintaxis y en ocasiones puede ser laborioso.

Conclusiones:

La interfaz GUI es la más usada ya que permite utilizar el SO sin necesidad de tener conocimientos avanzados de su uso y casi cualquier usuario purede se capzaz de utilizarla.

Aunque la CLI no sea utilizada comúnmente, aún está presente y el usuario con conocimientos un poco más profundos, si así lo desea, puede utilizarla.

Practica 1: Consulta de las versiones del Sistema Operativo

Introducción


Es importante mantener actualizados los Sistemas Operativos y las aplicaciones para garantizar un funcionamiento estable y enfrentar las vulnerabilidades de seguridad. Estas actualizaciones se denominan revisiones,  parches, correcciones o simplemente actualizaciones. Aunque Windows ofrece un sistema de actualizaciones automáticas integrado, en el cual incluso se pueden configurar si se requiere que las instale directamente o solamente las descargue para instalarlos cuando se desee, algunos usuarios prefieren usar otros métodos de actualización.

¿Por que es importante la memoría física para un Sistema Operativo?


Porque a través de la memoría RAM círcula toda la información, desde las instrucciones que son enviadas al procesador, pasando por el resultado de dicha operación. Además es utilizada por las diversas aplicaciones como espacio de trabajo.

Determinar el numero de versión y revisión del Sistema Operativo




¿Que opciones ofrece Windows para instalar las actualizaciones?


  • Instalar actualizaciones automáticamente (recomendado).
  • Descargar actualizaciones, pero preguntar si se desea instalarlas.
  • Buscar actualizaciones, pero preguntar si se desea descargsrlas e instalarlas.
  • No buscar actualizaciones (no recomendado).

Configurar el Sistema Operativo para activar o deactivar la actualización automática

 


Determinar la versión de una aplicación

 

 

 Reflexión

¿Cuando es importante obtener una actualización para una aplicación?

Siempre, así aseguramos una mejor seguridad para la aplicación, mejor rendimiento, etc.

¿Por qué es necesario conocer la versión del SO o de la aplicación en uso?

Porque así nos damos cuenta de si tenemos las últimas mejoras o revisiones.

Conclusión

El SO y las apicaciones deben ser actualizadas lo más frecuentemente posible, para asegurar su buen funcionamiento, para tener mejoras y para evitar vulnerabilidades como fallas de seguridad, entre otras cosas.

domingo, 2 de septiembre de 2012

Actividad 3: El Sistema Operativo como parte de mi vida profesional

¿Porqué el Sistema Operativo es el software más importante de la computadora?


Por que es el software principal, es el que se encarga de administrar todos los procesos que ocurren en un computadora. Permite la comunicación "amigable" entre la computadora y el usuario.

Relación de Sistemas Operativos:


  • Windows 7
  • Linux
  • Unix
  • Android
  • Mac OS
  • Ubuntu

Tareas realizadas con el Sistema Operativo:


  • Crear, modificar, leer archivos.
  • Ver vídeos.
  • Ver imágenes.

¿Qué papel juega el Sistema Operativo en la formación profesional?


Juega un papel muy importante ya que es la herramienta indispensable para realizar los trabajos y proyectos que se requieran, sin el Sistema Operativo no sería posible realizar muchas cosas.

Conclusión:

Con esta actividad me di cuenta de que el Sistema Operativo es el software más importante de una computadora, sin el no sería posible realizar ninguna actividad, ya que a través del Sistema Operativo pasan todas las ordenes que se le dan  una computadora y también a través de el un usuario puede comunicarse con la computadora.

Actividad 1: Componentes de una computadora



Clasificación de los componentes de una computadora:


Los componentes de una computadora se clasifican como Software y Hardware.

Componentes y su función:


  • Monitor
  • Teclado
  • Ratón
  • Tarjeta de Red
  • Tarjeta de Video
  • Unidad de DVD/ROM
  • Puertos USB



Conclusión:

Ya sabía algo acerca de los componentes de una computadora, aunque todavía falta que sepa de ellos más a fondo pero con el tiempo sabre más. Pienso que si logro saber como funcionan los componentes de una computadoar de ma nera detallada podré aprovechar su máximo rendimiento.