Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema...

16
Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular se verán los siguientes elementos. El núcleo La llamada de sistema El shell

Transcript of Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema...

Page 1: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

Elementos sistema operativo

Se examinarán los componentes más

comunes dentro del S.O.

En particular se verán los siguientes

elementos.

• El núcleo

• La llamada de sistema

• El shell

Page 2: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

El kernel o núcleo

• Lugar donde residen todos los módulos del S.O.

• Generalmente solo representa una pequeña porción del código del S.O.

• Kernel generalmente se encuentra en memoria principal

• Funciones• Procesamiento de interrupciones

• Creación/destrucción de procesos

• Sincronización de procesos

• Soporte de actividades de E/S

• Soporte de actividades de asignación de memoria

• Soporte de actividades de desasignación de memoria

• Soporte a actividades con archivos

Page 3: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

Llamadas de sistema

Page 4: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

El shell

Page 5: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

Modelo capas Unix

Page 6: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

Semáforos

Page 7: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular
Page 8: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular
Page 9: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

• Solo puede tomar dos valores: 0 ó 1

• Generalmente se inicializan con un valor de 1.

• Son usados por dos o más procesos para garantizar que sólo uno

puede entrar en sección crítica.

• Antes de entrar en sección crítica un proceso ejecuta un P(S) y un

V(S) antes de salir de ella.

• La variable de tipo semáforo se llama entrar y es inicializada en 1.

Cada proceso tiene la estructura siguiente:

Semáforos Binarios

Page 10: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

#include <stdio.h>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#define SEM_PADRE 1

#define SEM_HIJO 0

main(int argc, char *argv[ ])

{

Int i=10, semid, pid;

struct sembuf operacion;

key_t llave;

/*Peticion de un identificador con dos semaforos*/

llave=ftok(argv[0],’K’);

If((semid=semget(llave, 2 ,IPC_CREAT│0600))==-1)

{

perror(“semget”);

exit(-1);

}

Número de semáforos

Page 11: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

P(S) hijo

/* Inicialización de los semáforos */

/*Cerramos el semáforo del proceso hijo */

semctl(semid, SEM_HIJO, SETVAL,0);

/*abrimos el semáforo del proceso padre */

semctl(semid, SEM_PADRE, SETVAL,1);

/*creación del proceso hijo */

If((pid=fork()) == -1) {

perror(“fork”);

exit(-1); }

else if(pid==0) { /*código del proceso hijo */}

while(i) {

/* cerramos el semáforo del proceso hijo */

operacion.sem_num=SEM_HIJO;

operacion.sem_op=-1;

operacion.sem_flg=0;

semop(semid, &operacion,1);

Page 12: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

V(S) padre

P(S) padre

printf(“PROCESOS HIJO: %d \n”,i--);

/*Abrimos el semáforo del proceso padre */

operacion.sem_num=SEM_PADRE;

operacion.sem_op=1;

semop(semid,&operación,1);

printf(“PROCESO PADRE: %d \n”,i--);

}

/*Borrado del semáforo */

semctl(semid,0,IPC_RMID,0);

}

else { /*codigo del proceso padre */

operación.sem_flg=0;

while(i){

operacion.sem_num=SEM_PADRE;

operacion.sem_op= -1;

semop(semid,&operacion,1);

printf(“PROCESO PADRE: %d \n”,i--);

Page 13: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

V(S) hijo

/*Abrimos el semáforo del proceso hijo*/

operacion.sem_num=SEM_HIJO;

operacion.sem_op= 1;

semop(semid,&operacion,1);

}

/*Borrado del semáforo */

semctl(semid,&operacion,1);

}

}

Page 14: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

P11-h00

Inicialización

P10-h01

Page 15: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

Inicialización

P00-h11 P01-h10

Page 16: Elementos sistema operativohilario_sm/slide/SO-1/semaforos... · 2015-09-30 · Elementos sistema operativo Se examinarán los componentes más comunes dentro del S.O. En particular

sem_op acción

> sem_op+ v. semáforo liberado

< |sem_op|>v. semaforo bloqueado

hasta v. semaforo = |sem_op|

v. semaforo- |sem_op| liberado

0 bloqueado hasta v.semaforo=0,

si ya es cero la llamada vuelve inmediatamente

Padre Zona critica hijo

Valor inicio 1 0

Padre (i=10) -1 (Sp)1-1=0 Printf(i) 1 (Sh)0+1=1

Hijo (i=10) -1 (Sh)1-1=0 Printf(i) 1 (Sp)0+1=1

Padre (i=9) -1 (Sp)1-1=0 Printf(i) 1 (Sh)0+1=1

Hijo (i=9) -1 (Sh)1-1=0 Printf(i) 1 (Sp)0+1=1

Padre (i=8) -1 (Sp)1-1=0 Printf(i) 1 (Sh)0+1=1

Hijo (i=8) -1 (Sh)1-1=0 Printf(i) 1 (Sp)0+1=1

... ... ... ...

Padre (i=1) -1 (Sp)1-1=0 Printf(i) 1 (Sh)0+1=1

Hijo (i=1) -1 (Sh)1-1=0 Printf(i) 1 (Sp)0+1=1

0 Rojo

1 Verde