jueves, 1 de diciembre de 2011

Problema

55. Disponemos de un disco duro de 20 GB de capacidad. Hay establecida sobre él, una única partición que contiene un sistema de ficheros del tipo FAT32 en el que cada agrupamiento (cluster) consta de 16 sectores de 512 bytes cada uno. ¿Cuántos sectores del disco se necesitarán para almacenar cada copia la FAT? Razona tu respuesta.



Debemos calcular lo que ocupa la FAT o tamaño de enlace que es de 32 bits por el numero de entradas de la tabla, que es el tamaño de l disco dividido por el tamaño del Cluster que sería 20 GB/(16 x 512) = 20x217 entradas luego lo multiplicamos por 32 que es lo que ocupa la tabla lo que nos da un resultado de 20x219 bytes, se divide lo que ocupa la tabla entre el tamaño del agrupamiento, con lo que obtenemos el número de agrupamientos que ocupa la tabla 20x219 /(16x512) = 20x26 = 1280 y finalmente multiplicamos por 16 que es el número de sectores por agrupamiento

56. La policía ha arrestado al sospechoso de un delito. Al analizar el contenido de su ordenador piensan que pueden inculparle pues el contenido del mismo

es el siguiente:

Número De bloque de datos

Contenido

10

he

11

sido

12

yo

13

no

14

sigan

15

buscando


Como experto informático, pides consultar el contenido de la FAT, que es el siguiente:


Número de entrada en la FAT

Contenido

10

11

11

EOF

12

13

13

10

14

15

15

12

¿Apoyarías la opinión de la policía? Razona tu respuesta.

En un sistema de archivos FAT, los bloques se asignan como una lista enlazada que finaliza con la posición fin de lista EOF. Es posible recuperar datos utilizando los enlaces partiendo desde esa posición EOF hacia atrás.
La reconstrucción de la lista de bloques será:

14 → 15 → 12 → 13 → 10 → 11 → EOF

La información de esa lista de bloques será:


sigan → buscando → yo → no → he → sido → EOF


Código Corregido y aumentado

#include<stdio.h>
#include<stdlib.h>
#include<semaphore.h>
#include<pthread.h>
#include<unistd.h>
#include<stdbool.h>
#include<string.h>


#define MAX 10
#define FIN -1

int buffer[MAX];
sem_t huecos, elementos;

int generar_dato (void) { return random() %256;}

int numero_aleatorio(void) { return random() %100;}

void *productor (void *p) {
int pos_productor= 0;
int num, dato, n;
n= numero_aleatorio();
printf ("Productor con %d datos\n", n);

for(num= 0; num< n; num++) {
dato= generar_dato();
sem_wait(&huecos);
buffer[pos_productor]= dato;
pos_productor= (pos_productor+ 1) %MAX;
sem_post(&elementos);
}
sem_wait(&huecos);
buffer[pos_productor]= FIN;
sem_post(&elementos);
pthread_exit(NULL);
}

void *consumidor(void *p){
int pos_consumidor= 0, dato;
bool continuar= true;
while (continuar) {
sem_wait(&elementos);
dato= buffer[pos_consumidor];
sem_post(&huecos);
if (dato== FIN)
continuar= false;
else {
printf ("Numero aleatorio: %d\n", dato);
pos_consumidor= (pos_consumidor+1) %MAX;
}
}
pthread_exit (NULL);
}


int main(int argc, char *argv[]) {
pthread_t hiloproductor, hiloconsumidor;
sem_init(&elementos, 0, 0);
sem_init(&huecos,0, MAX);
pthread_create(&hiloproductor, NULL, productor, NULL);
pthread_create(&hiloconsumidor, NULL, consumidor, NULL);
pthread_join(hiloproductor, NULL);
pthread_join(hiloconsumidor, NULL);
sem_destroy(&huecos);
sem_destroy(&elementos);
return 0;
}




miércoles, 23 de noviembre de 2011

Practica 1-3

Actividad 1

Dibuja la jerarquía de procesos que resulta de la ejecución del siguiente código. Introduce las llamadas al sistema wait para que una vez generado el árbol de procesos los hijos sean esperados por sus respectivos padres. Ademas, haz que se informe de los tiempos de ejecución de las aplicaciones xload y kcalc que se generen así como del tiempo total de ejecución. Para calcular el tiempo transcurrido, puedes utilizar la función´ time() de la librería estándar time.h. La llamada time(NULL) devuelve los segundos transcurridos desde las 00:00:00 del 1/1/1970 hasta el instante de la llamada.

int main (int argc, char ∗argv[]) {
int i, j;
pid t pid, nuevo, nuevo1;
time t ini, fin;
for (i= 0; i< 2; i++){ pid= getpid(); for (j= 0; j< i+2; j++){ nuevo= fork(); if(nuevo== 0){ break; nuevo1= fork(); if(nuevo1== 0) execlp ("xload", "xload", NULL); } } if (pid!= getpid()) execlp ("kcalc", "kcalc", NULL); } return 0; }















jueves, 13 de octubre de 2011

Diferencia entre FIFO y LIFO


FIFO


El término FIFO es muy ocupado en estructuras de Programación ya que es la base para describir una Cola (Queue), con esta estructura permite hacer que en una colección de datos el primero en entrar será el primero en salir (First In Last Out), esto lo podemos ocupar ya sea con un vectro, matriz o apuntador.



LIFO


En este Sistema de Estructuras de Datos, se implementa una pila en la que conforme se van colocando elementos, el orden es ascendente y uno sobre otro, lo que nos obliga a sacar primero el último elemento para poder acceder a lo elementos de abajo. Por eso la definicion en ingles Last In First Out que significa último en entrar primero en salir.


LA DIFERENCIA


La diferencia recae en el el orden en que estas estructuras funcionan ya que una forma una cola la otra forma una fila, a que nos referimos con esto a que en FIFO la entrada del primer elemento será el primero en salir y en el LIFO el ultimo en entrar sera el primero en salir, en cuanto a procesos podemos utilizar esto metodos haciendo que el proceso iniciado en primer lugar sea el primero en terminar sin problemas y asi sucesivamente (FIFO) o de manera contraria que podamos iniciar el último proceso que se asigno, después el penúltimo y así hasta llegar a el primero que llego o solicitó el servicio.













martes, 4 de octubre de 2011

miércoles, 28 de septiembre de 2011

Posix


Posix (Portable Operating System Interface)


El termino fue sugerido por Richard Stallman en respuesta a la IEEE que buscaba un acrónimo fácil de recordar, la traducción mas acercada es Interfaz de Sistema Operativo Portable.

Estas POSIX son estandares de la IEEE para para formalizar interfaces en los sistemas operativos, surgió como una necesidad de estandarizar la API´s, esto quiere decir estandarizar programas que pudieran funcionar en diferentes Sistemas Operativos.

Las las Posix vienen acompañadas de pruebas llamadas PCTS, que significa Conjunto de conformación de pruebas Posix, estas pruebas se le aplica al software para poder considerarlo como parte de este conjunto de aplicaciones.

Ya que la IEEE aplicó un alto costo a la documentación de Posix surgió un nuevo estandar creado en base a la Single Unix Specification que es una alternativa al Posix.

Algunos de los sistemas que son totalmente compatibles con estandares Posix

  • A/UX
  • AIX
  • BSD/OS
  • DSPnano
  • HP-UX
  • INTEGRITY
  • IRIX
  • LynxOS
  • Mac OS X v10.5 en Procesadores Intel.
  • MINIX
  • MPE/iX
  • QNX (IEEE Std. 1003.13-2003 PSE52;
  • RTEMS (POSIX 1003.1-2003 Profile 52)
  • Solaris
  • Unison RTOS
  • UnixWare
  • velOSity
  • VxWorks (IEEE Std. 1003.13-2003 PSE52;

Algunos sistemas que son compatibles en su mayoría con estandares Posix

  • BeOS / Haiku
  • FreeBSD
  • GNU/Linux (la mayor parte de las distribuciones)
  • Contiki
  • NetBSD
  • Nucleus RTOS
  • OpenBSD
  • OpenSolaris
  • PikeOS
  • RTOS (para ciertos sistemas con particiones PSE51 y PSE52 opcionales)
  • RTEMS – Soporte API POSIX diseñado para IEEE Std. 1003.13-2003 PSE52
  • Sanos
  • SkyOS
  • Syllable
  • VSTa




      miércoles, 21 de septiembre de 2011

      Programa Arbol


      Código del programa

      Código Corriendo



      Funciones Nuevas

      pstree

      pstree [ -a ] [ -c ] [ -h | -H pid ] [ -l ] [ -n ] [ -p ] [ -u ] [ -G | -U ] [pid|usuario ]

      pstree -V

      Descripción

      pstree muestra los procesos en ejecución como un árbol. El árbol tiene sus raíces en cualquiera de pid o init si pid es omitido. Si un nombre de usuario se especifica, todos los árboles con raíz en los procesos de proceso de propiedad de dicho usuario se muestran.


      popen

      Inicia flujos de tubería o de un proceso

      Descripción

      El popen () la función se ejecuta el comando especificado en la cadena de mando . Se crea un canal entre el programa de llamada y el comando que se ejecuta, y devuelve un puntero a una corriente que se puede utilizar para leer bien o escribir en la tubería.

      Si la aplicación soporta la referencia XCU pliego de condiciones, el entorno del comando ejecutado será como si un proceso hijo se crearon en el popen () llamada con tenedor () , y el niño invocó la mierda de servicios públicos mediante la llamada:

      execl ( vía shell "sh", "-c", comando , (char *) 0);


      fgets

      Obtener cadena de la corriente. Lee caracteres de flujo y las almacena como una cadena C en str hasta que ( num -1) caracteres han sido leídos o bien una nueva línea o el final de su archivo que se alcance, lo que ocurra primero.

      Un carácter de nueva línea hace fgets , deje de leer pero se considera un carácter válido y por lo tanto se incluye en la cadena de copia de str .

      Un carácter nulo se añade automáticamente a str después de los caracteres de lectura para indicar el final de la cadena C.


      Parámetros

      str Puntero a una matriz de caracteres s donde se almacena la cadena de lectura.

      num El número máximo de caracteres a leer (incluyendo la final nula caracteres). Por lo general, la longitud de la matriz pasada como str se utiliza.

      stream Puntero a un fichero objeto que identifica la corriente, donde los personajes se leen.

      Para leer de la entrada estándar, entrada estándar se puede utilizar para este parámetro.


      Preguntas

      ¿Porque se repite las secuencias?

      Porque seguimos trabajando con ciclos lo cuales nos regresa los Id de los procesos por medio de la función getpid

      ¿Qué observas?

      El árbol esta formado por los procesos padres e hijos obtenidos del sistema por medio del pid combinado con la función pstree.

      ¿Por qué?

      Ya que la función pstree extrae el árbol de procesos, el programa coloca en pantalla el Id de los procesos ejecutados por el mismo, con ayuda de fork que utiliza los multiprocesos (hilos).


      lunes, 19 de septiembre de 2011

      Programa PID




      Código



      Cabeceras Nuevas



      Instrucciones Nuevas

      pid_t

      El pid_t tipo de datos representa los identificadores de proceso. Usted puede obtener el ID del proceso de un proceso mediante una llamada getpid . La función getppid devuelve el ID del proceso del padre del proceso actual (esto también es conocido como el ID del proceso padre ). Su programa debe incluir los archivos de cabecera `unistd.h ' y `sys / types.h" para usar estas funciones.

      Tipo de datos: pid_t
      El pid_t tipo de datos es un tipo entero con signo que es capaz de representar un proceso ID. En la biblioteca de GNU, se trata de un int .

      Función: pid_t getpid (void)
      El getpid devuelve el ID del proceso del proceso actual.

      Función: pid_t getppid (void)
      El getppid función devuelve el ID del proceso del padre del proceso actual.


      fork()

      A la hora de crear procesos linux provee de dos funciones para dicho cometido, la función clone() y la función fork(). Ambas crean un nuevo proceso a partir del proceso padre pero de una manera distinta.
      Cuando utilizamos la llamada al sistema fork, el proceso hijo creado es una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero. Es importante destacar que las variables del proceso hijo son una copia de las del padre (no se refieren físicamente a la misma variable), por lo que modificar una variable en uno de los procesos no se refleja en el otro.


      srandom

      Esta función inicializa el generador de números aleatorios mediante el establecimiento de los valores de la tabla de estado sobre la base de la semilla . A continuación, los ciclos de la información de estado para un número determinado de veces para deshacerse de cualquier dependencia inicial. La información de la tabla Estado afecta a los números devueltos al azar de la posterior random ()


      Preguntas:

      1.- ¿Por qué aparecen mensajes repetidos?

      Por las iteraciones que hace el ciclo for que son tres veces, además mientras el proceso no devuelva un PID diferente de cero se sigue ejecutando.

      2.- ¿Qué observas?

      Que los números devueltos por las funciones getpid() y getppid() son los números de Id de los procesos actual y el padre del actual.

      3.- ¿Porqué?

      Los Id cambian porque los procesos son distintos y procesados en hilos, por eso los números se repiten cuando el proceso vuelve a funcionar








      viernes, 9 de septiembre de 2011

      Google Chrome OS y Android



      ¿Qué es el S.O. Chrome?

      Es un sistema que, partiendo de Linux, permite iniciar un ordenador en un corto espacio de tiempo, estimado en unos 7 segundos. Una vez iniciado el ordenador el usuario tendrá la posibilidad de leer el correo, navegar con Google Chrome y unas pocas posibilidades mas. Como verán está enfocado al usuario web, de hecho se deja de almacenar la información en el disco duro del ordenador; se almacena en servidores de Google. Los netbooks actuales son los ordenadores ideales para este sistema. Si necesitas aplicaciones adicionales a las descritas entonces no es un S.O. adecuado para tí.

      Ventajas

      • Se inicia más rápido que cualquier otro sistema operativo.
      • Se puede instalar en ordenadores con pocos recursos, a partir de la familia de microprocesadores 486.
      • Se limita mucho la posibilidad de "colgarse" el ordenador, al tener apenas servicios ejecutándose de forma concurrente.
      • Al estar enfocado a Internet tiene servicios que en otros sistemas operativos no llegan a tener la misma calidad.
      • Es muy fácil de usar.
      • Es gratuito.


      Desventajas

      • No se pueden usar programas de sistemas Mac o Windows.
      • Usuarios acostumbrados a utilizar diferentes aplicaciones a las descritas anteriormente verán su ordenador como un móvil grande con Android (el sistema operativo que lanzó Google para móviles).
      • Sólo se pueden utilizar las aplicaciones estando conectado a Internet.
      • Privacidad. Los ficheros que se guardaban en el disco duro (canciones, películas, correos electrónicos, histórico de navegación...) son almacenados en los servidores de Google.

      El sistema operativo Chrome OS es un sistema operativo de código abierto desarrollado para usuarios que pasan la mayoría del tiempo en la Web. Su diseño se basa en los siguientes principios clave:

      Velocidad: se acabaron las largas esperas. Los Chromebook incluyen la tecnología del sistema operativo Chrome OS y se inician en unos ocho segundos. Tus sitios web favoritos se pueden cargar rápidamente, funcionarán a la perfección y serán compatibles con Adobe Flash y con los últimos estándares web.

      Sencillez: el objetivo del sistema operativo es optimizar tu experiencia web, por lo que los Chromebook resultan tan fáciles de utilizar como el navegador Google Chrome que integran.

      Seguridad: a diferencia de los ordenadores tradicionales, los Chromebook mejoran con el tiempo. Una vez que lo enciendes, tu Chromebook se actualiza automáticamente, por lo que siempre tendrás la versión más reciente del sistema operativo sin tener que hacer nada.

      Además, los Chromebook utilizan el primer sistema operativo para clientes diseñado desde cero para ofrecer protección frente a las continuas amenazas de los virus y del software malintencionado. Estos ordenadores siguen el principio de la "defensa en profundidad" para ofrecer varios niveles de protección, incluidos los de arranque verificado, encriptación de datos y zona de pruebas. Más información sobre la seguridad

      http://www.youtube.com/watch?v=cb1QFa0C3SM


      ¿Qué es Android?


      Android en un Sistema Operativo además de una plataforma de Software basada en el núcleo de Linux. Diseñada en un principio para dispositivos móviles, Android permite controlar dispositivos por medio de bibliotecas desarrolladlas o adaptados por Google mediante el lenguaje de programación Java.

      Android es una plataforma de código abierto. Esto quiere decir, que cualquier desarrollador puede crear y desarrollar aplicaciones escritas con lenguaje C u otros lenguajes y compilarlas a código nativo de ARM (API de Android).

      Inicialmente, Android fue desarrollada por Google Inc. aunque poco después se unió Open Handset Alliance, un consorcio de 48 compañías de Hardware, Software y telecomunicaciones, las cuales llegaron a un acuerdo para promocionar los estándares de códigos abiertos para dispositivos móviles.

      Google sin embargo, ha sido quien ha publicado la mayoría del código fuente de Android bajo la licencia de Software Apache, una licencia de software libre y de código abierto a cualquier desarrollador.

      Notas Sobre Android

      Android podría ser una competencia directa a los sistemas operativos móviles como Windows Mobile, Symbian, iPhone OS 3.0, etc. aunque también podría aminorizar o reducir la situación actual de Microsoft y sus Sistemas Operativos Windows.

      ¿Por qué digo esto? HP Inc. uno de los gigantes en la fabricación y desarrollo de Ordenadores más importantes del mundo, ha declarado que se están planteando la implantación del Sistema Operativo Android en Ultraportátiles o Netbooks, además, se habla de que pronto podremos ver un PC de sobremesa con Android de manos de HP.

      La posibilidad de que esto ocurra, depende de los resultados que obtengan en las pruebas de rendimiento y prestaciones de Android en estos equipos.

      http://www.youtube.com/watch?v=Xic_jG9jJ8g


      Fuentes de Información

      http://sistemaoperativochrome.es/

      http://www.configurarequipos.com/doc1107.html

      miércoles, 7 de septiembre de 2011

      Aspectos Históricos de los Sistemas Operativos

      Con las primeras computadoras, desde finales de los años 40 hasta la mitad de los años 50, el programador interactuaba de manera directa con el hardware de la computadora, no existía realmente un Sistema Operativo; las primeras computadoras utilizaban bulbos, la entrada de datos y los programas se realizaban a través del lenguaje máquina (bits) o a través de interruptores.

      Durante los años 50's y 60's.- A principio de los 50's, la compañía General Motors implanto el primer sistema operativo para su IBM 170. Empiezan a surgir las tarjetas perforadas las cuales permiten que los usuarios (que en ese tiempo eran programadores, diseñadores, capturistas, etc.), se encarguen de modificar sus programas. Establecían o apartaban tiempo, metían o introducían sus programas, corregían y depuraban sus programas en su tiempo. A esto se le llamaba trabajo en serie. Todo esto se traducía en pérdida de tiempo y tiempos de programas excesivos.

      En los años 60's y 70's se genera el circuito integrado, se organizan los trabajos y se generan los procesos Batch (por lotes), lo cual consiste en determinar los trabajos comunes y realizarlos todos juntos de una sola vez. En esta época surgen las unidades de cinta y el cargador de programas, el cual se considera como el primer tipo de Sistema Operativo.

      En los 80's, inició el auge de la INTERNET en los Estados Unidos de América. A finales de los años 80's comienza el gran auge y evolución de los Sistemas Operativos. Se descubre el concepto de multiprogramación que consiste en tener cargados en memoria a varios trabajos al mismo tiempo, tema principal de los Sistemas Operativos actuales.

      Un interesante desarrollo que comenzó a llevarse a cabo a mediados de la década de los ochenta ha sido el crecimiento de las redes de computadoras personales, con sistemas operativos de red y sistemas operativos distribuidos.

      En los sistemas operativos de red, los usuarios están conscientes de la existencia de varias computadoras y pueden conectarse con máquinas remotas y copiar archivos de una máquina a otra. Cada máquina ejecuta su propio sistema operativo local y tiene su propio usuario.

      Por el contrario, un sistema operativo distribuido es aquel que aparece ante sus usuarios como un sistema tradicional de un solo procesador, aun cuando esté compuesto por varios procesadores. En un sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar donde su programa se ejecute o de lugar donde se encuentren sus archivos; eso debe ser manejado en forma automática y eficaz por el sistema operativo.

      Los 90's y el futuro, entramos a la era de la computación distribuida y del multiprocesamiento a través de múltiples redes de computadoras, aprovechando el ciclo del procesador.

      Se tendrá una configuración dinámica con un reconocimiento inmediato de dispositivos y software que se añada o elimine de las redes a través de procesos de registro y localizadores.

      La conectividad se facilita gracias a estándares y protocolos de sistemas abiertos por organizaciones como la Organización Internacional de normas, fundación de software abierto, todo estará más controlado por los protocolos de comunicación OSI y por la red de servicios digital ISDN.


      http://www.monografias.com/trabajos5/sisop/sisop.shtml#histo

      lunes, 5 de septiembre de 2011

      Este es mi Blog

      En este blog publicaré mis tareas y trabajos de mi materia de Sistemas Operativos, en la carrera de Ingeniería en Sistemas Computacionales, del Tecnológico de Estudios Superios de Ixtapaluca.


      Marco Adan Aguilar Gómez
      Gpo. 1701