Practica 5
jueves, 29 de septiembre de 2011
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***
MAYORMENTE POSIX-COMPATIBLES
**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);
}
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);
}
viernes, 23 de septiembre de 2011
jueves, 22 de septiembre de 2011
PRACTICA 3 "Configuración de procesos en C"
Ejercicio #1
Padre
/ | \
Hijo1 Hijo2 Hijo3
Código
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h>
#define NUM_HIJOS 3
int main(void)
{
int ret, i;
for(i=0; i<NUM_HIJOS; i++){
ret=fork();
if(ret==0){
printf("Soy el hijo %d, mi padre es PID: %d , Yo soy el PID= %d\n\n", i, getppid(), getpid());
}else if(ret> 0){
ret=wait(NULL);
while(ret>0){
ret=wait(NULL);
}
if(ret == -1 && errno != ECHILD){
perror("falla en wait");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
else if (ret == -1){
perror("falla en fork");
exit(EXIT_FAILURE);
}
}
}
Ejercicio #2
Padre
/ \
Hijo1 Hijo2
|
Hijo3
Código
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h> //Define macros que presenta un informe de error a traves de codigos
#define NUM_HIJOS 2
int main(void)
{
int ret, i;
for(i=1; i<=NUM_HIJOS; i++){
ret=fork();
if(ret==0){
printf("Soy el hijo %d, mi padre es PID: %d , Yo soy el PID= %d\n\n", i, getppid(), getpid());
if(i==2){
printf("Soy el hijo 3 %d\n\n", getpid());
}
} else if(ret> 0){
ret=wait(NULL);
while(ret>0){
ret=wait(NULL);
}
if(ret == -1 && errno != ECHILD){
perror("falla en wait");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
else if (ret == -1){
perror("falla en fork");
exit(EXIT_FAILURE);
}
}
}
Padre
/ | \
Hijo1 Hijo2 Hijo3
Código
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h>
#define NUM_HIJOS 3
int main(void)
{
int ret, i;
for(i=0; i<NUM_HIJOS; i++){
ret=fork();
if(ret==0){
printf("Soy el hijo %d, mi padre es PID: %d , Yo soy el PID= %d\n\n", i, getppid(), getpid());
}else if(ret> 0){
ret=wait(NULL);
while(ret>0){
ret=wait(NULL);
}
if(ret == -1 && errno != ECHILD){
perror("falla en wait");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
else if (ret == -1){
perror("falla en fork");
exit(EXIT_FAILURE);
}
}
}
Ejercicio #2
Padre
/ \
Hijo1 Hijo2
|
Hijo3
Código
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h> //Define macros que presenta un informe de error a traves de codigos
#define NUM_HIJOS 2
int main(void)
{
int ret, i;
for(i=1; i<=NUM_HIJOS; i++){
ret=fork();
if(ret==0){
printf("Soy el hijo %d, mi padre es PID: %d , Yo soy el PID= %d\n\n", i, getppid(), getpid());
if(i==2){
printf("Soy el hijo 3 %d\n\n", getpid());
}
} else if(ret> 0){
ret=wait(NULL);
while(ret>0){
ret=wait(NULL);
}
if(ret == -1 && errno != ECHILD){
perror("falla en wait");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
else if (ret == -1){
perror("falla en fork");
exit(EXIT_FAILURE);
}
}
}
Procesos
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
/**ATENCIÓN: Declaración de variables del programa a probar. Es sólo un exemplo**/
int i;
int n = 4;
int childpid;
/**El resto de variables son para que la presentación de los resultados por pantalla sea posible**/
int a, p;
int ret;
FILE *fpipe;
char comanda[50]; /*String dónde se guarda el comando a ejecutar por el 1r hijo*/
char line[256];
p = getpid();
sprintf(comanda,"pstree -n -p %d\n",getpid()); /*Concatenamos el comando pstree con el pid del padre*/
ret = fork();
if (ret == 0) { /*Este es el primer hijo del padre*/
if ( !(fpipe = (FILE*)popen(comanda,"r")) ) { /* Si el pipe falla*/
perror("Problemas con el pipe!!!");
exit(1);
}
while ( fgets( line, sizeof line, fpipe))
{
printf("%s", line); /*Escribimos por pantalla lo que retorna el hijo. La salida del pstree*/
}
pclose(fpipe);
} else {
/*El primer hijo sólo se crea para hacer un pstree y poder ver por pantalla */
/*el árbol de procesos generado*/
/*El código que viene a continuación, lo podéis substituir por lo que se tercie*/
/*¡¡Las variables han de ir declaradas arriba!!!*/
for (i = 1; i < n; i++) {
if ((childpid = fork()) == -1) {
break;
}
fprintf(stderr, "Este es el proceso %ld com padre %ld\n", (long)getpid(), (long)getppid());
}
sleep(1); /*Es sólo para dar tiempo a terminar a todos los hijos*/
}
exit(0);
}
1. Por que aparecen mensajes repetidos
Por que se tiene la instrucción for y de igual manera va mostrando los procesos que se están realizando, asignándoles asi un PID mejor conocido como numero único de identificación, en el cual se van registrando cada uno de los procesos del SO
2.Que observas
Que muchos de esos procesos se repiten dos o tres veces, debido a que se ejecutan dos procesos en paralelo con un nuevo hijo que es una copia de los padres, haciendo así que la función CHILPID nos regrese el valor del proceso padre, devolviendo así 0 al proceso hijo
3. Porque
Son parte fundamental de los sistemas operativos debido a que toda acción relizada en la computadora debe tener un PID para mayor organización, teniendo en cuenta que los pipe son mecanismos utilizados para compartir la información
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
/**ATENCIÓN: Declaración de variables del programa a probar. Es sólo un exemplo**/
int i;
int n = 4;
int childpid;
/**El resto de variables son para que la presentación de los resultados por pantalla sea posible**/
int a, p;
int ret;
FILE *fpipe;
char comanda[50]; /*String dónde se guarda el comando a ejecutar por el 1r hijo*/
char line[256];
p = getpid();
sprintf(comanda,"pstree -n -p %d\n",getpid()); /*Concatenamos el comando pstree con el pid del padre*/
ret = fork();
if (ret == 0) { /*Este es el primer hijo del padre*/
if ( !(fpipe = (FILE*)popen(comanda,"r")) ) { /* Si el pipe falla*/
perror("Problemas con el pipe!!!");
exit(1);
}
while ( fgets( line, sizeof line, fpipe))
{
printf("%s", line); /*Escribimos por pantalla lo que retorna el hijo. La salida del pstree*/
}
pclose(fpipe);
} else {
/*El primer hijo sólo se crea para hacer un pstree y poder ver por pantalla */
/*el árbol de procesos generado*/
/*El código que viene a continuación, lo podéis substituir por lo que se tercie*/
/*¡¡Las variables han de ir declaradas arriba!!!*/
for (i = 1; i < n; i++) {
if ((childpid = fork()) == -1) {
break;
}
fprintf(stderr, "Este es el proceso %ld com padre %ld\n", (long)getpid(), (long)getppid());
}
sleep(1); /*Es sólo para dar tiempo a terminar a todos los hijos*/
}
exit(0);
}
1. Por que aparecen mensajes repetidos
Por que se tiene la instrucción for y de igual manera va mostrando los procesos que se están realizando, asignándoles asi un PID mejor conocido como numero único de identificación, en el cual se van registrando cada uno de los procesos del SO
2.Que observas
Que muchos de esos procesos se repiten dos o tres veces, debido a que se ejecutan dos procesos en paralelo con un nuevo hijo que es una copia de los padres, haciendo así que la función CHILPID nos regrese el valor del proceso padre, devolviendo así 0 al proceso hijo
3. Porque
Son parte fundamental de los sistemas operativos debido a que toda acción relizada en la computadora debe tener un PID para mayor organización, teniendo en cuenta que los pipe son mecanismos utilizados para compartir la información
lunes, 19 de septiembre de 2011
Identificador de procesos
Código:
//Librería sys/types que contiene funciones de busqueda y ordenamiento de directorios y manipulacion de archivos
#include<sys/types.h>
//Librería que define las constantes simbolicas para el uso del wait
#include<sys/wait.h>
//Librería unistd.h que contiene funciones para el manejo de directorios y archivos, define getpid y getppid
#include<unistd.h>
//Librería que contiene funciones de entrada y salida
#include<stdio.h>
int main (int argc, char * argv[])
{
int num;
//El PID (process ID ó identificador de proceso) es un identificador de procesos es un numero entero usado por el kernel de algunos sistemas operativos
//como Unix o Windows NT, para identificar un proceso de forma unívoca
pid_t pid;
for(num=0; num < 3; num++)
{
//El proceso fork crea nuevos procesos(proceso hijo), que es exactamente igual al(proceso padre), el cual va incrementando con cada nuevo proceso creado por fork()
pid = fork();
printf("Soy el proceso pid %d y mi padre tiene %d de proceso pid \n",
getpid(), getppid());
//getppid, devuelve el identificador de proceso del padre del proceso actual
if (pid != 0)
{
break;
//getpid devuelve el identificador del proceso actual
//srandom genera un numero aleatorio
srandom(getpid());
//sleep retarda el random
sleep (random() %3);
}
}
if (pid != 0)
{
printf("Fin del proceso pid %d \n", wait (NULL));
return 0;
}
}
PREGUNTAS
1. Por que aparecen mensajes repetidos
Debido a que se encuentra la instrucción for, ya que esta realiza un proceso iterativo de acuerdo a las condiciones ya establecidas
2. Que observas
Se observan los identificadores de procesos, los cuales se les va asignando a cada uno de los procesos de ejecución que se estén realizando en ese momento
Se observan los identificadores de procesos, los cuales se les va asignando a cada uno de los procesos de ejecución que se estén realizando en ese momento
3. Por que
Se tienen que asignar identificadores a todos los procesos que se realicen para poder llevar un control dentro del kernel, y asi al querer terminar un proceso solo colocamos en consola:
sudo kill #numdePID
y el proceso se termina
lunes, 12 de septiembre de 2011
Sistema Operativo Google Chrome
Google Chrome


Remarcaron que Chrome OS no podrá instalarse en cualquier ordenador, sino en los elegidos y desarrollados especialmente para este sistema. Si bien esto me parece una contra importantísima, la razón por la cual Google hace todo esto está clarísima: no quieren que el rendimiento sea menor al que aseguran. Si a un ordenador le ponemos un disco HDD en vez de uno SSD la velocidad se notará mucho y esto es lo que la empresa no quiere que suceda.
Links sobre Google Chrome SO
http://www.youtube.com/watch?v=cb1QFa0C3SM
Hay 10 tipos de personas que exiten en el mundo las que entienden binario.... y las que no
Google Chrome OS tendrá como base el sistema operativo Linux y, corriendo sobre él, un nuevo entorno de ventanas y el navegador. Es curioso que Mac y Linux han sido las versiones de Chrome menos cuidadas por Google hasta la fecha, pero no hay duda de que la de Linux recibirá un serio empujón.
El objetivo de este sistema es mejorar la velocidad y la seguridad, por lo que van a replantear algunos conceptos de la arquitectura de seguridad, igual que hicieron con Chrome (donde han separado las pestañas en distintos procesos). El interfaz de usuario será mínimo y no sería de extrañar que al arrancar el ordenador lo primero que veamos sea el navegador.
Como quedó clarísimo, el sistema operativo será 100% para trabajar con la nube. Nada de instalar aplicaciones en el sistema. Todo lo que haremos lo haremos a través de una pantalla que será prácticamente igual a la del actual navegador. De hecho, para que se den una idea del extremo al que lo llevaron, cuando conectemos una cámara digital se abrirá una pantalla de este “navegador” y nos mostrará qué hay dentro de ella.
Para realizar este OS la empresa se siguió basando en las típicas características que podemos ver en todos sus proyectos: simplicidad, velocidad y seguridad.
La simplicidad ya podrán imaginársela porque no habrá mucho más que la ventana de un navegador con el cual controlaremos todas las funciones del sistema operativo.
La velocidad, al manejar absolutamente todas las aplicaciones en la nube y solamente funcionar con discos SSD será extrema. De hecho, en la presentación oficial en Mountain View mostraron que desde que presionamos el botón de power hasta que nos pide que ingresemos nuestro nombre de usuario y contraseña tardó solamente 7 segundos y aseguraron que están haciendo todo lo posible para que este tiempo sea incluso menor.
Finalmente está la seguridad. Al no poder instalar sistemas binarios y aplicaciones externas no habrá nada más en el sistema que unos cuantos archivos de caché que sincronizarán con la nube. Esto quiere decir que no habrá sistemas que explotar más que el núcleo de Google Chrome y, como explicaron, el núcleo lo conocen suficientemente para poder arreglarlo en cuestión de horas.
Daniel Helf, jefe de producto en Argentina, comentó que no está hecho para cualquier usuario sino para aquellos que necesiten portabilidad y tengan y necesiten tener toda su información en internet. Considerando que este sistema no funcionará bien sin una conexión WiFi, 3G o Ethernet esto es un punto a destacar, ya que si nos encontramos en el medio de un viaje sin conexión, no podremos hacer más que las cosas que Gears nos permita.Remarcaron que Chrome OS no podrá instalarse en cualquier ordenador, sino en los elegidos y desarrollados especialmente para este sistema. Si bien esto me parece una contra importantísima, la razón por la cual Google hace todo esto está clarísima: no quieren que el rendimiento sea menor al que aseguran. Si a un ordenador le ponemos un disco HDD en vez de uno SSD la velocidad se notará mucho y esto es lo que la empresa no quiere que suceda.
Links sobre Google Chrome SO
http://www.youtube.com/watch?v=cb1QFa0C3SM
Hay 10 tipos de personas que exiten en el mundo las que entienden binario.... y las que no
Sistema Operativo Android
ANDROID
El primer dispositivo que tenía el Android fue el HTC Dream, lanzado el 22 de octubre del 2008. Desde entonces,
varios celulares cuentan con el sistema, con destaque para el Motorola Milestone, Samsung Galaxy S y el LG Optimus One. Uno de los primeros sispositivos con el sistema Google fue el HTC Magic.
A pesar de contar con un crecimiento más modesto desde su lanzamiento, Gartner muestra que el Android vendió casi 7 millones de unidades en el año 2009 (3,9% del mercado). En relación a la competencia, el número todavía era extremamente insignificante, ya que Symbian fue el responsable por un total de 80 millones de unidades alrededor del mundo, cerca de 46% de toda la venta mundial.
Ya los dispositivos con iOS (iPhone y iPod Touch) en el año 2009 eran responsables por cerca de 25 millones de unidades vendidas, o sea, 14% de los dispositivos comercializados durante el año. Por lo tanto, un inicio modesto, que ciertamente no combina con todas las especulaciones hechas desde la compra de la empresa Android, en 2005
Android, es un sistema operativo, que está directamente dirigido a dispositivos móviles. Google le compró esta compañía a su original creador Adroid Inc, y hoy en día son los de Open Handset Alliance, que es un consorcio que esta compuesto por alrededor de 48 compañías de Software, Telecomunicaciones y Hardware. los que la están desarrollando.
Alguna de sus características son:
- Que posee un navegador integrado, el cual esta basado en el motor de código abierto WebKit.
- Contiene gráficos optimizados, como lo son los gráficos 2D y 3D.
- Almacenamiento de datos estructurados.
- Tecnología GSM, la cual es dependiente del Hardware
- Además de Wi-Fi, Bluetooth, 3G y EDGE, también dependientes del Hardware.
- Permite Cámaras, GPS, acelerómetro, brújula. Entre muchas otras.
También nos da la posibilidad de ingresar, desde nuestro teléfono y programar distintas utilidades y herramientas.
Aplicaciónes de Android
Optimize ToolBox, varias herramientas en una sola
aplicaciónSus desarrolladores la definen como una navaja suiza donde podremos gestionar y optimizar prácticamente todo nuestro móvil desde una sola aplicación ahorrándonos tener que instalar varias aplicaciones para hacer cada cosa por separado.
Optimize ToolBox se divide en nueve secciones donde podremos gestionar y optimizar cada parte del sistema de forma cómoda y fácil. En System Scan podremos ver el estado del dispositivo, el uso de la CPU, RAM, memoria disponible, etc… En App Manager podremos crear carpetas y ver que aplicaciones se pueden mover a la SD. Cuando instalamos una aplicación nueva la aplicación nos avisará en la barra de notificaciones que se podrá mover a la SD.
Podremos gestionar que aplicaciones queremos que se ejecuten nada más encender el móvil desdeStartup Manager para así evitar que se arranquen aplicacaciones en segundo plano que no usamos. También tenemos un instalador y desinstalador de aplicaciones en Un/installer y forzar el cierre de aplicaciones y servicios con Program Manager.
Estadisticas del mejor sistema operativo movil
Android x iPhone
A pesar de disputar el mercado directamente con Symbian, el gran “rival” para comparación con el Android sin duda alguna es el iOS, ya que los dos sistemas tienen su propia tienda de aplicaciones donde los desarrolladores pueden vender sus proyectos, o sea, buscan el mismo mercado consumidor.
En número de aplicaciones, la AppStore todavía tiene la delantera, ya que cuenta con más de 400 mil apps introducidos en la tienda, contra cerca de 200 mil en el Market Store (datos de Wikipedia). Sin embargo, un reporte publicado por Lookout, empresa de seguridad para dispositivos móviles, afirma que el Android Market está creciendo tres veces más rápido que la ya conocida y consagrada AppStore.
Fuente de la imagen: App Genome Project
De acuerdo con el proyecto, si las aplicaciones crecen en la misma velocidad en las dos plataformas, Android Market tendrá más apps disponibles a mediados del 2012. El estudio, llamadoApp Genome Project, muestra además que el promedio de aplicaciones introducidas por un desarrollador en el Market es de 6,2 o sea, más que las 4,8 aplicaciones de los participantes de la AppStore.
En términos de ventas, la AppStore toma la delantera, con un sistema de pago ya consolidado y una cantidad mayor de aplicaciones pagas disponibles. Android demuestra una caída en número de aplicaciones gratuitas, aumentando aquellos que traen alguna ganancia para los desarrolladores, de acuerdo con el estudio que realizó Lookout.
Para completar, mientras que el iOS puede ser encontrado apenas en dispositivos de la Apple, entre ellos el iPod Touch y iPad, el Android cuenta teóricamente, con una autonomía mayor para crecer, una vez que es usado en dispositivos de diversas marcas.
Fuente de la imagen: App Genome Project
Sin embargo, los ejecutivos de Apple no parecen tan preocupados. Para ellos, el proceso de actualización es considerado complicado. Además de eso, la fragmentación perjudica a quien desarrolla aplicaciones para la plataforma, algo que beneficia el iOS. Esas declaraciones fueron hechas por Toni Sacconaghi, de la empresa de análisis Bernstein, al conversar con ejecutivos de la propia Apple.
miércoles, 7 de septiembre de 2011
Aspectos históricos del desarrollo de los Sistemas Operativos
Los Sistemas Operativos, al igual que el Hardware de los computadores, han sufrido una serie de cambios revolucionarios llamados generaciones. En el caso del Hardware, las generaciones han sido marcadas por grandes avances en los componentes utilizados, pasando de válvulas ( primera generación ) a transistores ( segunda generación ), a circuitos integrados ( tercera generación), a circuitos integrados de gran y muy gran escala (cuarta generación). Cada generación Sucesiva de hardware ha ido acompañada de reducciones substanciales en los costos, tamaño, emisión de calor y consumo de energía, y por incrementos notables en velocidad y capacidad.
Generacion Cero (década de 1940)
Los primeros sistemas computacionales no poseían sistemas operativos. Los usuarios tenían completo acceso al lenguaje de la maquina. Todas las instrucciones eran codificadas a mano.
Primera Generacion (década de 1950)
Los sistemas operativos de los años cincuenta fueron diseñados para hacer mas fluida la transición entre trabajos. Antes de que los sistemas fueran diseñados, se perdía un tiempo considerable entre la terminación de un trabajo y el inicio del siguiente. Este fue el comienzo de los sistemas de procesamiento por lotes, donde los trabajos se reunían por grupos o lotes. Cuando el trabajo estaba en ejecución, este tenia control total de la maquina. Al terminar cada trabajo, el control era devuelto al sistema operativo, el cual limpiaba y leía e iniciaba el trabajo siguiente.
Al inicio de los 50′s esto había mejorado un poco con la introducción de tarjetas perforadas.
Además el laboratorio de investigación General Motors implementó el primer sistema operativo para la IBM 701. Los sistemas de los 50′s generalmente ejecutaban una sola tarea, y la transición entre tareas se suavizaba para lograr la máxima utilización del sistema.
Se crearon máquinas suficientemente confiables las cuales se instalaban en lugares especialmente acondicionados, aunque sólo las grandes universidades y las grandes corporaciones o bien las oficinas del gobierno se podían dar el lujo de tenerlas.
Para poder correr un trabajo (programa), tenían que escribirlo en papel (en Fortran o en lenguaje ensamblador) y después se perforaría en tarjetas. Enseguida se llevaría la pila de tarjetas al cuarto de introducción al sistema y la entregaría a uno de los operadores. Cuando la computadora terminara el trabajo, un operador se dirigiría a la impresora y desprendería la salida y la llevaría al cuarto de salida, para que la recogiera el programador.
Segunda Generacion (a mitad de la década de 1960)
La característica de los sistemas operativos fue el desarrollo de los sistemas compartidos con multiprogramación, y los principios del multiprocesamiento. En los sistemas de multiprogramación, varios programas de usuario se encuentran al mismo tiempo en el almacenamiento principal, y el procesador se cambia rápidamente de un trabajo a otro. En los sistemas de multiprocesamiento se utilizan varios procesadores en un solo sistema computacional, con la finalidad de incrementar el poder de procesamiento de la maquina.
Se desarrollo sistemas compartidos, en la que los usuarios podían acoplarse directamente con el computador a través de terminales. Surgieron sistemas de tiempo real, en que los computadores fueron utilizados en el control de procesos industriales. Los sistemas de tiempo real se caracterizan por proveer una respuesta inmediata.
Tercera Generacion (mitad de década 1960 a mitad década de 1970)
Se inicia en 1964, con la introducción de la familia de computadores Sistema/360 de IBM. Los computadores de esta generación fueron diseñados como sistemas para usos generales . Casi siempre eran sistemas grandes, voluminosos, con el propósito de serlo todo para toda la gente. Eran sistemas de modos múltiples, algunos de ellos soportaban simultáneamente procesos por lotes, tiempo compartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes y costosos, nunca antes se había construido algo similar, y muchos de los esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho después de lo que el planificador marcaba como fecha de terminación.
Estos sistemas introdujeron mayor complejidad a los ambientes computacionales; una complejidad a la cual, en un principio, no estaban acostumbrados los usuarios.
Cuarta Generacion (mitad de década de 1970 en adelante)
Los sistemas de la cuarta generación constituyen el estado actual de la tecnología. Muchos diseñadores y usuarios se sienten aun incómodos, después de sus experiencias con los sistemas operativos de la tercera generación.
Con la ampliación del uso de redes de computadores y del procesamiento en línea los usuarios obtienen acceso a computadores alejados geográficamente a través de varios tipos de terminales.
Los sistemas de seguridad se ha incrementado mucho ahora que la información pasa a través de varios tipos vulnerables de líneas de comunicación. La clave de cifrado esta recibiendo mucha atención; han sido necesario codificar los datos personales o de gran intimidad para que; aun si los datos son expuestos, no sean de utilidad a nadie mas que a los receptores adecuados.
El porcentaje de la población que tiene acceso a un computador en la década de los ochenta es mucho mayor que nunca y aumenta rápidamente.
El concepto de maquinas virtuales es utilizado.
CP/M Y DOS EL COMIENZO
CP/M (Control Program for Microcomputers), desarrollado por Gary Kildall fue el primer sistema operativo que podía ejecutarse en PCs de diferentes fabricantes.
Para muchos de los que hoy nos encontramos trabajando con una computadora el sistema operativo D.O.S (Disk Operating System) fue el primero que nos tocó utilizar. De la misma manera, fue también el comienzo para Bill Gates y su empresa Microsoft.
En sus principios fue desarrollado junto con la empresa IBM, pero diferencias entre las partes hicieron que no fuera un lanzamiento en conjunto. Por el contrario, cada una de las empresas presentó "su" sistema operativo: PC-DOS (IBM) y MS-DOS (Microsoft).
Un tercer competidor para estos sistemas operativos (y de muy buena calidad) fue el DR-D.O.S. de la empresa Digital Research que incluía comandos más largos y de mayor funcionalidad, pero que con el tiempo, y gracias a las campañas publicitarias de Microsoft fue quedando relegado a un segundo lugar compartido con el PC-DOS de IBM. Luego de unos años DR-D.O.S. fue adquirido por Novell que presentó una nueva versión conocida como Novell D.O.S. que realmente casi no tuvo cabida en el mercado, aunque era muy buena.
D.O.S. era simplemente una pantalla de texto con una línea de comandos que nos indicaba en qué directorio nos encontrábamos como único dato orientativo. Uno tenía que "saber" que escribir para que la máquina "hiciera algo". No había menús contextuales, ni pantallas gráficas que nos guiaran.
Las versiones que lo hicieron famoso en el mundo entero fueron la 3.0 y la 3.3, mientras que la más utilizada fue la 5.
La versión 4.0 de D.O.S. estuvo plagada de errores.
Windows, el inicio de una interfaz gráfica
Las dos primeras versiones de este "Entorno Operativo" tuvieron mucho éxito entre el público consumidor. Lo único que logró fue que Apple le iniciara un juicio a Microsoft por su semejanza con su sistema operativo MacOs.El boom de Windows se produjo con su versión 3.0 (y más aún con la 3.1) cuando comenzó a aprovechar las capacidades de los procesadores "386" y le dio un mejor manejo a la memoria hacia el año 1991
Fue simplemente un "shell" para DOS, ya que sin este no funcionaba. Y por esa razón no es un sistema operativo, sino un "entorno operativo". El atractivo que tuvo para con la gente fue su "casi real" facilidad de uso y su "cara" gráfica que hacía olvidar "las pantallas negras" de DOS.
Windows 95: El entorno operativo
Desde el principio, Windows 95 se publicitó como un sistema operativo de 32 bits. Pero cuando salió a la luz se pudo ver que esto no era totalmente verdad: era un sistema operativo, porque no necesitaba de ningún otro programa para poder funcionar. Por otro lado, la promesa de los 32 bits no se cumplió. Casi en el mismo momento apareció en el mercado un verdadero sistema operativo de 32 bits que sería la competencia directa al tan publicitado Windows 95: OS/2 de IBM.
OS/2 fue un sistema operativo totalmente de 32 bits que muchos expertos consideran mejor, más estable y con mayores prestaciones que Windows 95, pero que las campañas publicitarias relegaron a un segundo lugar, ya que la gran mayoría de los desarrolladores decidieron hacer sus programas "compatibles" con Windows 95 y no con OS/2.
Windows 98/NT: Ya nada sería igual
Windows 98 no representó para los usuarios comunes ningún cambio significativo. Sólo un poco de retoque gráfico y alguna que otra utilidad nueva o mejorada "liberador de espacio".En esta época Windows NT fue un sistema operativo de 32 bits especializado en redes que utilizó otro sistema para el manejo de los archivos (NTFS), y por lo tanto "incompatible" con Windows 95/98.
Tenia:
· Estabilidad
· Soporte para varios procesadores
· Alto nivel de seguridad
· Rapido y Facil de configurar
Pero hay que tener en cuenta que tiene poco soporte.
Al ser de esta manera, es no fue aconsejable su uso en hogares.
Ahí es donde entró Windows Millennium Edition (ME), sucesor de Windows 98: Fue un sistema operativo donde se mostro la facilidad de uso, las mejoras en multimedia, comunicaciones e Internet.
Aunque no contó con la estabilidad de Windows 2000 fue más seguro que Windows 98 y 98 SE (segunda edición) ya que se incorporaron una serie de utilidades para proteger el sistema operativo y hacerlo más resistente a las instalaciones de programas y drivers de terceros que, en definitiva, fueronlas principales causas de cuelgues y pantallas azules en sus predecesores.
Windows Millennium Edition fue el mas inestable de los sistemas operativos post Windows 95.
Windows XP se distribuyó en 2 versiones principales: Windows XP Home Edition y Windows XP Profesional. La versión Home no tenía tanto soporte para redes, lo que si incluyó la versión Profesional.
Se destacó en este producto su alto grado de integración con las redes e Internet. Los cambios de interfaz fueron básicamente estéticos. La diferencia real con sus predecesores estuvo dada por el soporte LAN, soft de grabación de CDs, multimedia, escritorio remoto y manejo de usuarios.
Algo muy importante es el hecho de que Microsoft con esta versión de su S.O. puso especial énfasis en los drivers. WXP fué muchísimo mas resistente que sus predecesores a instalar drivers.
Windows XP contó con las actualizaciones más profundas a nivel seguridad que ningún otro sistema operativo Microsoft: prueba de ello fueron los Service Pack 1 y 2. También fue el primero en adoptar un sistema de verificación de autenticidad del S.O.: WGA (Windows Genuine Advantage)
Linux
Allá por agosto de 1991 un estudiante finlandés comenzó a enviar mensajes al grupoide noticias comp.os.minix (news.comps.os.minix) con las siguientes palabras:
Hola a todos los que usan minix -
Estoy desarrollando un sistema operativo (libre) (simplemente por afición, por lo que no
será grande y profesional como gnu) para ordenadores tipo PC clónicos 386 (486)
El estudiante era Linus Torvalds y la afición de la que hablaba se convertiría con el
tiempo en lo que hoy conocemos como Linux.
Linux es un Sistema operativo tipo Posix completamente equipado, que no ha sido
desarrollado únicamente por Linus, sino por cientos de programadores de todo el mundo.
Este esfuerzo masivo de desarrollo mundial no esta estrictamente coordinado. Por supuesto Linus lleva la voz cantante en lo que se refiere al núcleo, pero Linux es mucho más que el núcleo. No hay infraestructura de gestión de modo que si un estudiante en Rusia escribe un controlador para un dispositivo especifico o un administrador de sistemas en Estados Unidos necesita un programa para hacer copias de seguridad, y lo acaba escribiendo el mismo, estos programas se pueden quedar en el vacío.
Afortunadamente la comunidad de usuarios de linux tiene una amplia presencia en foros y en grupos de noticias donde la gran mayoría de estos suben sus desarrollos o los códigos que escriben. Durante mucho tiempo este sistema operativo estuvo funcionando de esta manera. En la actualidad todavía se puede encontrar todo tipo de desarrollos de software dentro de estos foros y comunidades, pero actualmente existen grupos de programadores organizados que compilan estos archivos independientes y los hacen
llegar en forma de paquetes a modo que el usuario instale inicialmente los archivos necesarios para el tipo de sistema que quiere utilizar (servidor, estación de trabajo, escritorio o portátil), a estos grupos se les conoce como distribuciones. Muchas de ellas se especializan en instalaciones tipo servidor y otras en instalaciones graficas. La ultima versión de este sistema operativo incluye ya en muchas de las distribuciones asistentes para la instalación del sistema y de dispositivos.
Suscribirse a:
Comentarios (Atom)



