Ejercicios Procesos Sistema Operativo. Programación Hilos, Procesos, Señales.

El siguiente documento describe las características que presentan los sistemas operativos para la administración de procesos, hilos y señales. Los ejercicios que encontraras aquí no son 100% seguro, ya que no los he revisado, estos ejercicio fueron los que hice cuando estaba en clases de Sistemas Operativos, pero de seguro son de mucha utilidad ya que contiene condigo explicito y ejercicios que quizás te sirvan de mucha ayuda.

MULTIPROCESO Y JERARQUÍA DE PROCESOS

Un sistema UNIX es multiproceso y establece una jerarquía de procesos a modo de árbol genealógico.
El mandato pstree permite conocer la jerarquía de procesos. Añadiendo como argumento el pid o el nombre de la cuenta se obtienen la parte de la jerarquía que deriva de un proceso o que pertenece a un usuario. 

CONTROL DE PROCESOS

Un proceso es una abstracción que se utiliza en Linux para representar un programa que está en funcionamiento

El kernel recopila información sobre los procesos que están activos en el sistema. Entre los datos que se recopilan se encuentran, por ejemplo:

Estado del proceso (inactivo, listo para iniciarse, etc.)
Prioridad de ejecución
Información sobre los recursos que está utilizando
Información sobre los archivos o puertos de comunicaciones que está utilizando.
Propietario del proceso
La máscara de señales
La mayoría de información sobre un proceso se almacena en su BCP (Bloque de Control de Proceso). Además, como ya se comentó en el módulo anterior, en el directorio /proc podemos encontrar un subdirectorio (/proc/<PID>/) por cada proceso en ejecución.

EJERCICIOS SOBRE PROCESOS.

#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>

void manejador (int s){}

int main(){
int n; // variable para guardar el numero de procesos
pid_t pid; // guarda el pid de los procesos hijos
pid_t padre = getpid(); // guarda el pid del padre
int vec[10];
int i;

signal(SIGUSR1,manejador);
printf("Ingrese el número de procesos \n");
scanf("%d", &n);
for (i=0; i<n; i++){
if((vec[i]= fork())==0){
pause();
printf("Hijo %d  pid %d \n",i,getpid());
kill(getppid(), SIGUSR1);
break;
}
}

if (padre==getpid()){
for(i=0;i<n;i++){     
  printf("Padre %d\n", getpid());
  kill(vec[i], SIGUSR1);
  pause();
}
}
// TERMINA CÓDIGO DE PRUEBA 
return 0;
}

-------------------------------------------------------------------------------------------------

#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>

void manejador (int s){}

int main(){
int n; // variable para guardar el numero de procesos
pid_t pid; // guarda el pid de los procesos hijos
pid_t padre = getpid(); // guarda el pid del padre
int vec[10],vec2[10];
int i,j;
signal(SIGUSR1,manejador);
printf("Ingrese el número de procesos \n");
scanf("%d", &n);
for (i=0; i<n; i++){
if((vec[i]= fork())==0){
pause();
//printf("Hijo %d  pid %d \n",i,getpid());
kill(getppid(), SIGUSR1);
break;
}
}
// INICIA CÓDIGO DE PRUEBA

if (padre==getpid()){
for(i=0;i<n;i++){
if(i==0)
{
   printf("Padre %d\n", getpid());
//waitpid (pid, NULL, 0);
vec2[i]=vec[i];
  kill(vec[i], SIGUSR1);
  pause();
}
if(i>0&&i<(n))
{
vec2[i]=vec[i];
  kill(vec[i], SIGUSR1);
  pause();
}
if(i==(n-1))
{
  for(j=(n-1);j>=0;j--)
{
printf("son: %d %d\n",j,vec2[j]);
}
printf("Padre %d\n", getpid());
//waitpid (pid, NULL, 0);
vec2[i]=vec[i];
kill(vec[i], SIGUSR1);
kill(getpid(), SIGKILL);
pause();
}
}
}
}
// TERMINA CÓDIGO DE PRUEBA
return 0;
}

------------------------------------------------------------------------------------

#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
#define as 6
void manejador (int s){}
pid_t padre;
main(){
int i,hijo[as],a,k;
int N=as;
padre = getpid();
signal(SIGUSR1,manejador);
for(i=0;i<as;i++){
if((hijo[i]=fork())==0){
break;
}
}
if(padre==getpid()){
for(i=0;i<as;i++)
{
usleep(100000);
printf("Padre [%d]\n",getppid());
kill(hijo[i],SIGUSR1);
usleep(100000);
}
}else{
pause();
for(k=0;k<as;k++)
{
printf(" hijo [%d]\n",getpid());
break;
}
}
}

Entradas más populares de este blog

Crear un dominio en servidor Glassfish. create-domain. start-domain.

Descargar archivo con JSF, Primefaces, Hibernate.

Internet gratis para android. 100 mb diarios. DROIDVPN, TUN.KO