viernes, 2 de diciembre de 2011

practica

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.

FAT = 32 BITS
Capacidad disco duro = 20 GB
Agrupamiento = 16 sectores * 512 bytes
sectores = ?

20GB /(16*512 bytes) = 20-2^17 

(20-2^17) / (16*512 bytes) = 10485760 / 8192 = 1280*16 = 20480 sectores

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.

No la apoyaria debido a q no es culpable debido a que el ajuste de entrada de la FAT, muestra un mensaje diferente y en realidad dice:
SIGAN BUSCANDO YO NO EH SIDO EOF

EOF-Es el indicador de que no hay mas información que recuperar


PROGRAMA








jueves, 24 de noviembre de 2011

Actividad 2

A continuacióon se muestra el codigo sobre jerarquia de procesos
Codigo
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#define L1 2
#define L2 3
int main ()
{
int cont1, cont2;
pid_t pid;
for (cont2= 0; cont2< L2; cont2++)
{
for (cont1= 0; cont1< L1; cont1++)
{
pid= fork();
if (pid== 0)
break;
}
if (pid!= 0) break;
}
printf ("Soy el hijo: %d y Mi padre es: %d.\n", getpid(), getppid());
if (pid!= 0)
for (cont1= 0; cont1< L1; cont1++)
printf ("Fin del proceso%d.\n", wait (NULL));
return 0;
}

Imagenes del programa ya compilado


Diagrama de arbol

miércoles, 23 de noviembre de 2011

Actividad 1

Este ejercicio se realizo por medio de procesos dentro del cual se ordena por medio de jerarquias

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.

Código
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (int argc, char *argv[]) {
int i, j;
pid_t pid, nuevo, nuevo1;
time_t ini, fin;
ini= time(NULL);
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);
}
for (i= 0; i< 2; i++)
for (j= 0; j< i+2; j++){ wait(NULL);
}
printf ("Tiempo total: %ld\n", time(NULL)-ini);
printf("soy el hijo %d y mi padre es %d\n",getpid(),getppid());
sleep(3);
return 0;
}

Diagrama del arbol




Estados de un proceso

miércoles, 12 de octubre de 2011

Diferencia entre LIFO y FIFO

Last In First Out (último en entrar, primero en salir).
El término LIFO se utiliza en estructura de datos y teoría de colas. Guarda analogía con una pila de platos, en la que los platos van poniéndose uno sobre el otro, y si se quiere sacar uno, se saca primero el último que se puso.
LIFO es el algoritmo utilizado para implementar pilas.


First in, first out o FIFO (en español "primero en entrar, primero en salir")
Es un concepto utilizado en estructuras de datos, contabilidad de costes y teoría de colas. Guarda analogía con las personas que esperan en una cola y van siendo atendidas en el orden en que llegaron, es decir, que la primera persona que entra es la primera persona que sale.
También se lo llama first come first served o FCFS (en español "primero en llegar, primero en ser atendido").



LIFO
FIFO
Van colocándose los datos unos sobre otros
el primer elemento en entrar será también el primero en salir
Se saca primero el ultimo que se puso
Se realiza por un extremo y la operación de extracción pop por el otro.
Se utiliza en filas
Se utiliza en las colas
Se pueden realizar las mismas operaciones en las dos





martes, 27 de septiembre de 2011

POSIX((Portable Operating System Interface)

¿Qué es?


Es un estándar de interfase de sistema operativo, basado en el popular sistema operativo UNIX. El estándar POSIX está actualmente en desarrollo, y su principal objetivo es permitir la portabilidad de aplicaciones a nivel de código fuente, es decir, que sea posible portar una aplicación de un computador a otro sin más que recompilar su código. Está siendo desarrollado por la Computer Society de IEEE, con la referencia IEEE-P1003.
También está siendo estandarizado a nivel internacional con la referencia ISO/IEC-9945.
El POSIX es un grupo de estándares en evolución. Cada uno de los estándares que lo componen cubre diferentes aspectos de los sistemas operativos. Algunos de ellos ya han sido aprobados, mientras que otros están aún en fase de desarrollo. Los estándares POSIX se pueden agrupar en tres categorías diferentes:


1)ESTANDARES BASE, Definen interfases del sistema relacionadas con diferentes aspectos del sistema operativo. El estándar especifica la sintaxis y la semántica de estos servicios del sistema operativo, de modo que los programas de aplicación puedan invocarlos directamente. El estándar no especifica cómo se implementan estos servicios; de este modo, los implementadores de sistemas pueden elegir la implementación que crean más conveniente—y así competir entre ellos—, siempre que cumplan la especificación de la interfase. Todos los estándares base desarrollados hasta el momento lo han sido para lenguaje C.

La Tabla I y la Tabla II muestran los estándares base que están siendo desarrollados por los grupos de
trabajo del POSIX.


Tabla I. Lista de estándares base del POSIX
POSIX.1   Interfases del sistema (estándar básico)
POSIX.2   Shell y utilidades
POSIX.3 Métodos para medir la conformidad con POSIX
POSIX.4 Extensiones de tiempo real
POSIX.4a Extensión de threads, o múltiples flujos de control
POSIX.4b Extensiones adicionales de tiempo real
POSIX.6 Extensiones de seguridad
POSIX.7 Administración del sistema
POSIX.8 Acceso a ficheros transparente a la red
POSIX.12 Interfases de red independientes del protocolo
POSIX.15 Extensiones de colas batch
POSIX.17 Servicios de directorios


Tabla II. Estándares base POSIX adicionales
P1224 Servicios de mensajería electrónica (X.400)
P1224.1 Interfase para portabilidad de aplicaciones X.400
P1238 Interfase de comunicaciones OSI
P1238.1 Interfase OSI de transferencia de ficheros
P1201.1 Interfase gráfica a usuario (ventanas)



2) Interfases en diferentes lenguajes de programación: Son estándares secundarios que traducen a un lenguaje de programación concreto los estándares base. Los lenguajes utilizados hasta el momento son Ada, Fortran 77, y Fortran 90, además del lenguaje C, en el que se han especificado hasta el momento los estándares base.
La Tabla III muestra las interfases POSIX que están actualmente en desarrollo para diferentes lenguajes de programación.

Tabla III. Lista de interfases POSIX para diferentes lenguajes de programación
POSIX.5 Interfases Ada
POSIX.9 Interfases Fortran 77
POSIX.19 Interfases Fortran 90
POSIX.20 Interfases Ada para las extensiones de tiempo real Estándares IEEE ya aprobados

3) Entorno de Sistemas Abiertos. Estos estándares incluyen una guía al entorno POSIX y los perfiles de entornos de aplicación. Un perfil de aplicación es una lista de los estándares POSIX, con especificación de las opciones y parámetros necesarios, que se requieren para un cierto entorno de aplicación. El objetivo
principal de los perfiles de aplicación es conseguir un conjunto pequeño de clases de implementaciones de sistemas operativos bien definidas y que sean apropiadas para entornos particulares de aplicaciones. La Tabla IV muestra la lista de estándares que están siendo desarrollados en este grupo.

Tabla IV. Lista de estándares POSIX de entornos de aplicaciones
POSIX.0 Guía al entorno POSIX de sistemas abiertos
POSIX.10 Perfil de entorno de aplicaciones de supercomputación
POSIX.11 Perfil de entorno de aplicaciones de procesado de transacciones
POSIX.13 Perfiles de entornos de aplicaciones de tiempo real
POSIX.14 Perfil de entorno de aplicaciones multiprocesadoras
POSIX.18 Perfil de entorno de aplicación de plataforma POSIX


***Donde se ocupa***


Sincronización de procesos:

El POSIX.4 define funciones para permitir la sincronización de procesos a través de semáforos contadores.

Memoria compartida:

Los procesos POSIX.1 tienen espacios de direccionamiento que son independientes entre sí. Sin embargo, muchas aplicaciones de tiempo real (y también muchas que no son de tiempo real) necesitan compartir grandes cantidades de datos de una manera eficiente.

Señales de tiempo real:

El mecanismo de señales definido en el POSIX.1 permite notificar eventos que ocurren en el sistema, pero no es completamente satisfactorio para aplicaciones de tiempo real. Las señales no se almacenan en colas y, por tanto, algunos eventos se pueden perder. La señales no están priorizadas, y esto implica tiempos de respuesta más largos para eventos urgentes.

Comunicación de procesos:

Se especifica un mecanismo sencillo de colas de mensajes para la comunicación entre procesos. Las colas de mensajes están identificadas por un nombre perteneciente a un espacio de nombres dependiente de la implementación.

Entrada/Salida Asincrona:

El POSIX.4 define funciones que permiten solapar el procesado de aplicaciones con las operaciones de entrada/salida iniciadas por la aplicación. Una operación de entrada/salida asíncrona es similar a las operaciones de entrada/salida normales, con la excepción de que una vez que la operación asíncrona ha sido iniciada por un proceso, este proceso no se suspende y puede continuar ejecutando instrucciones, en paralelo con la operación de entrada/salida

EXTENSIÓN DE THREADS:

El estándar POSIX.4a define interfases para soportar múltiples actividades concurrentes, denominadas threads, dentro de cada proceso POSIX. Los threads definidos en el POSIX.4a tienen un estado asociado más pequeño que el de un proceso. Todos los threads que pertenecen al mismo proceso comparten el mismo espacio de direccionamiento. Pueden ser implementados con tiempos de cambio de contexto y de creación y destrucción más bajos que los de los procesos. El POSIX.4a ha sido específicamente desarrollado para
abordar las necesidades de los sistemas multiprocesadores de memoria compartida.

***COMPATIBILIDAD***


TOTALMENTE POSIX-COMPATIBLES
Los siguientes Sistemas Operativos son 100% compatibles con uno o varios estándares 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;

MAYORMENTE POSIX-COMPATIBLES
Los siguientes, aunque no oficialmente certificados como POSIX-compatibles, se ajustan en gran parte
  • 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
POSIX PARA WINDOWS
  • Cygwin
  •  ofrece un desarrollo en gran parte compatible con POSIX y un entorno de ejecución para Microsoft Windows.
  • Microsoft POSIX subsystem, un subsistema opcional Windows
  • Windows Services for UNIX de Microsoft permite una plena compatibilidad POSIX para ciertos productos de Microsoft Windows. Los sistemas operativos basados en Windows NT hasta Windows 2000 tenían una interfaz POSIX incorporada en el sistema operativo y los Servicios UNIX para Windows brindaban un entorno del tipo UNIX. Para Windows XP, los Servicios UNIX para Windows deben de instalarse para que exista compatibilidad POSIX. El subsistema UNIX está incorporado a las ediciones Enterprise y Ultimate de Windows Vista y 7, y no pueden ser agregados en forma separada a las otras ediciones..
  • UWIN de AT&T Research implementa una capa POSIX sobre la interfaz de programa de aplicaciones (API) de Win32
  • MKS Toolkit








**Ejemplo
Ejemplo de programa con hilos POSIX


#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
void *thread_function(void *arg) {
int i;
for ( i=0; i<20; i++ ) {
printf("Thread says hi!\n");
sleep(1);
}
return NULL;
}
int main(void) {
pthread_t mythread;
if ( pthread_create( &mythread, NULL, thread_function, NULL) ) {
printf("error creating thread.");
abort();
}
if ( pthread_join ( mythread, NULL ) ) {
printf("error joining thread.");
abort();
}


exit(0);


}