miércoles, 28 de septiembre de 2011

POSIX (Portable Operating System Interface)

¿Qué es?

Son una familia de estándares de llamadas al sistema operativo definidos por el IEEE y especificados formalmente en el IEEE 1003. Persiguen generalizar las interfaces de los sistemas operativos para que una misma aplicación pueda ejecutarse en distintas plataformas. Estos estándares surgieron de un proyecto de normalización de las API y describen un conjunto de interfaces de aplicación adaptables a una gran variedad de implementaciones de sistemas operativos.


Cuando el sistema operativo crea un proceso, el proceso en sí es un hilo de ejecución. Sin embargo se puede escribir un programa para crear muchos hilos que se ejecutan en el mismo espacio de memoria en forma paralela. 

Los hilos POSIX son los más recomendables para emplear dado que son portables y tienen mejor desempeño que los procesos ligeros de UNIX.

La portabilidad de código permite que se pueda compilar y ejecutar el programa sobre otra plataforma que soporte hilos POSIX. De tal manera que el programador paraleliza su código insertando funciones de hilos POSIX, lo compila y lo ejecuta en una plataforma de un procesador o de múltiples procesadores (Por ej. en IRIX) y el mismo código lo puede compilar y ejecutar en otra plataforma (Por ej. en Solaris).

Con hilos POSIX se pueden paralelizar:
Llamadas a subrutinas o funciones. 

E/S en C.
Algunas dependencias de datos usando herramientas de sincronización.


Los hilos POSIX no pueden paralelizar:
Ciclos individuales dentro de un programa (deben ser reescritos como funciones).
Pipas gráficas.

Ejemplo de uso de hilos POSIX:

/* hola.c
Programa que que genera 2 hilos POXIS para
imprimir a pantalla "hola mundo".
compilar:
cc hola.c -o hola -lpthread
*/
#include <pthread.h>
#include <stdio.h>
void* imprime_mensaje( void *ptr );
main()
{
pthread_t hilo1, hilo2;
char *mensaje1 = "hola";
char *mensaje2 = "mundo";
/* se generan 2 hilos que se ejecutaran en paralelo con el padre */
pthread_create(&hilo1, NULL, imprime_mensaje, (void*) mensaje1);
/* aquí el hilo padre puede estar haciendo otra cosa en paralelo con
los 2 hilos POSIX hijos */
/* por ejemplo: */
printf("A lo mejor esto se imprime primero... \n");
pthread_create(&hilo2, NULL, imprime_mensaje, (void*) mensaje2);
sleep(1);
exit(0);
}
void* imprime_mensaje( void *ptr )
{
char *mensaje;
mensaje = (char *) ptr;
printf("%s \n", mensaje);
pthread_exit(0);


}

jueves, 22 de septiembre de 2011

Eleccion de Programa



Que onda Profe me apunto para el programa 8

Pid Arbol Practica 04


Este es el arbol




Programa Arbol PID 03



En esto se marca el arbol

Programa Pid 02



¿Porque se repiten los mensajes?

Por que un proceso puede tener mas de un subproceso.

¿Que observas?

Los proceso del pid se observa un arbol del inicio del proceso padre dando lugar a subprocesos derivados del padre siendo un pid hijo.

 ¿Porque?

Los procesos son como arboles, debido a que las operaciones de un proceso varian en las tareas a realizar. Esto es como iniciar un procesador de texto, se abre la aplicacion es el proceso y lo que realizemos en el mismo serian los subprocesos.

lunes, 19 de septiembre de 2011

Programa PID

Practica de SO 

Codigo



Ejecucion


¿Porquè aparecen mensajes repetidos?

La funcion Fork realiza duplicaciones o clonasiones de los procesos en forma aleatoria, siendo la condicion del programa se ejecuta varias ocasiones.

¿Què observas?

El pid padre cuando entra en proceso, tiene que realizar otro proceso denominado pid hijo que es un subproceso del pid padre.

¿Porqué?

Debido a que los procesos grandes requieren de diversas tareas, estas tienen que ramificarse o sacar subprocesos para complememtar las acciones de dicho proceso.

LIBRERIAS

 <sys/types.h> 
Incluye definiciones para al menos los siguientes tipos: 

id_t  ->  Se utiliza como identificador general, se puede utilizar para contener al menos un pid_t, uid_t o gid_t una. 
ino_t  ->  Utilizados para el archivo de números de serie. 
key_t  ->  Se utiliza para la comunicación. 
mode_t  ->  Se utiliza para algunos de los atributos de archivo. 
nlink_t  ->  Se utiliza para el conteo de enlaces. 
off_t  ->  Se utiliza para tamaños de archivo. 
pid_t  ->  Se utiliza para los identificadores de proceso y los ID de proceso del grupo. 

<sys/wait.h> 
Define las siguientes constantes simbólicas para su uso con waitpid () :
El tipo idtype_t se define como un tipo de enumeración cuyos valores posibles son al menos lo siguiente:
P_ALL
P_PID
P_PGID
 
<unistd.h> 
Define varios tipos y constantes simbólicas, y declara funciones diversas

FUNCIONESFORK: La forma en que un proceso arranca a otro es mediante una llamada al sistema fork o clone.
-La función fork de la librería libc coloca los parámetros de la llamada en los registros del procesador y se ejecuta la instrucción INT 0x80.
-Se conmuta a modo núcleo y, mediante las tablas IDT y GDT, se llamaa la función sys_call.
-La función sys_call busca en la sys_call_table la dirección de la
llamada al sistema sys_fork

SRANDOM : Funcion en c estadar llamada random(). Si quieres generar un numero aleatorio deberas utilizar srand() y rand(). Para hacer uso de ellas debes incluir stdlib.h

SLEEP: retraso en milisegundos / retraso en segundos. 
 
WAIT: Obligará a un proceso padre que esperar a que un proceso hijo para detener o poner fin a wait () devuelve el pid del hijo o -1 para un error.. El estado de salida del niño es devuelto.