20
Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco [email protected]

Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Clases 04 y 05: Repaso de programación de sistemas basados en UNIX

Estructuras de datos (Prof. Edgardo A. Franco)

1

Prof. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco [email protected]

Page 2: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Contenido

• Introducción

• Scripts

• Concepto de proceso

• Paso de argumentos

• PID, UID y variables de ambiente

• Creación de procesos

• Tuberías

• Hilos 2

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Co

nte

nid

o

Page 3: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Introducción

• El sistema operativo UNIX así como sus clones derivados (LINUX, MAC OS, MINIX, etc.), mantienen características comunes en su interfaz POSIX (Portable Operating System Interface la X viene de UNIX).

• UNIX es un sistema operativo multiusuario, lo cual significa que dos o mas usuarios pueden trabajar al mismo tiempo y en sesiones distintas sobre un mismo sistema de computo.

• También UNIX es un sistema operativo multiproceso, es decir que puede ejecutar dos o más programas de manera simultánea.

3

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Intr

od

ucc

ión

Page 4: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Shell de UNIX

• El Shell de Unix o también conocido como intérprete de comandos, consiste en la interfaz de usuario tradicional de los sistemas operativos basados en Unix y similares como GNU/Linux.

• Mediante las instrucciones que aporta el intérprete, el usuario puede comunicarse con el núcleo y por ende ejecutar dichas órdenes, así como herramientas que permiten controlar el funcionamiento del sistema.

4

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Shel

l de

UN

IX

Page 5: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Scripts

• Los comandos de UNIX, pueden usarse a modo de guión si se escriben en archivos ejecutables denominados shell-scripts, de este modo, cuando se necesita hacer uso de varios comandos o combinación de estos con herramientas, se escribe un script marcado como ejecutable y las operaciones que posteriormente, línea por línea, el intérprete traducirá.

• Sin ser un shell estrictamente un lenguaje de programación, el proceso de crear scripts de shell se le conoce como programación shell (shell programming o shell scripting).

5

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Scri

pts

#!/bin/bash

clear

ls -a

cd home

Page 6: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Concepto de proceso

• Un proceso es un programa en ejecución, los procesos son gestionados por el sistema operativo y están formados por:

• Las instrucciones de un programa destinadas a ser ejecutadas por

el microprocesador.

• Su estado de ejecución en un momento dado, esto es, los valores de los registros de la CPU para dicho programa.

• Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.

• Otra información que permite al sistema operativo su planificación.

6

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Co

nce

pto

de

pro

ceso

Page 7: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Concepto de proceso

• Durante la ejecución de un programa (proceso), todos los datos manipulados (incluido el propio código del programa compilado) se alojan en la memoria principal, ya que esta ofrece menor latencia respecto de los medios secundarios.

7

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Co

nce

pto

de

pro

ceso

Page 8: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Concepto de proceso

• Empezando por la direcciones más bajas, el segmento de código es la porción de la memoria donde se cargará el programa que comenzará a ejecutarse.

• El segmento de datos alberga las declaraciones globales (e.g. variables y constantes globales).

• El montículo es la región de memoria que se toma y se libera de manera dinámica durante la ejecución del programa.

• La pila es donde se "apilan" porciones de memoria pertenecientes a funciones y/o procedimientos cuando se les llama.

8

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Co

nce

pto

de

pro

ceso

Page 9: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Concepto de proceso

• Los procesos son creados y destruidos por el sistema operativo, así como también este se debe hacer cargo de la comunicación entre procesos, pero lo hace a petición de otros procesos. El mecanismo por el cual un proceso crea otro proceso se denomina bifurcación (fork). Los nuevos procesos pueden ser independientes y no compartir el espacio de memoria con el proceso que los ha creado o ser creados en el mismo espacio de memoria.

9

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Co

nce

pto

de

pro

ceso

Page 10: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Paso de argumentos

• Un argumento o parámetro es una variable que puede ser recibida por una rutina o subrutina. Una subrutina usa los valores asignados a sus argumentos para alterar su comportamiento en tiempo de ejecución.

10

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Paso

de

argu

men

tos

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

int tokens;

for(tokens=0;tokens<argc;tokens++)

{

if(argv[tokens][0]=='-')

printf("opción %s\n",argv[tokens]+1);

else(argv[tokens][0]=='-')

printf("argumento %d: %s\n",tokens,argv[tokens]);

}

exit(0);

}

Page 11: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

PID, UID y variables de ambiente • Para administrar los procesos, el sistema identifica cada

uno mediante su PID. De manera análoga, para administrar a los usuario del sistema, se utiliza un identificador de usuario conocido como UID.

11

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

PID

, UID

y v

aria

ble

s d

e am

bie

nte

#include <sys/types.h>

#include <stdio.h>

int main(void)

{

pid_t id_proceso;

pid_t id_padre;

id_proceso=getpid();

id_padre=getppid();

printf("Identificador del proceso: %d\n",id_proceso);

printf("Identificador del proceso padre: %d\n",id_padre);

exit(0);

}

Page 12: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

PID, UID y variables de ambiente • Una variable del entorno es un valor dinámico cargado en la

memoria, que puede ser utilizado por varios procesos que funcionan simultáneamente. En la mayoría de los sistemas operativos, la ubicación de algunas bibliotecas o de los archivos ejecutables del sistema más importantes puede variar según la instalación.

12

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

PID

, UID

y v

aria

ble

s d

e am

bie

nte

#include <stdlib.h>

#include <stdio.h>

extern char **environ;

int main(int argc, char *argv[])

{

int j;

printf("Las variables de entorno para %s son\n",argv[0]);

for(j=0;environ[j]!=NULL;j++)

printf("environ[%d]=%s\n",j,environ[j]);

return 0;

}

Page 13: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Creación de procesos

• En todo sistema UNIX siempre tendremos un proceso a partir del cual se va generando todo el árbol de procesos. Este proceso padre de todos los procesos se conoce como INIT y su PID es 1.

• Cada vez que ejecutamos uno de nuestros programas tenemos un proceso, sin embargo es posible crear uno o más procesos adicionales. (Esto logra tener programas más poderosos, con menos líneas de código y hasta más claro y comprensible).

13

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Cre

ació

n d

e p

roce

sos

Page 14: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Creación de procesos

14

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Cre

ació

n d

e p

roce

sos

#include <stdlib.h>

#include <stdio.h>

#include <sys/types.h>

int main()

{

pid_t pid;

int i=0, estado;

pid_=fork();

switch(pid)

{

case -1: //Error

printf("Error en el fork");

break;

case 0: //Proceso hijo

printf("Soy el hijo: PID %d; PPID=%d

i=%d\n",getpid(),getppid(),++i);

exit(0);

break;

default: //Proceso padre

printf("Soy el padre: PID %d; PPID=%d

i=%d\n",getpid(),getppid(),--i);

wait(&estado);

}

}

Page 15: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Tuberías

• Un mecanismo en UNIX para comunicar dos procesos son las tuberías. Una tubería permite conectar un flujo de salida de un proceso a la entrada de otro proceso.

15

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Tub

ería

s

Page 16: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Tuberías

16

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Tub

ería

s

int main(void)

{

int bytes_enviados, bytes_leidos, i, descriptor_archivo[2];

char buffer[BUFSIZ+1];

pid_t pid;

if(pipe(decriptor_archivo)==0)

{

pid=fork();

if (pid==-1)

{

perror("Error al ejecutar el fork");

exit(-1);

}

if(pid==0)

{

//Proceso hijo

for(i=0;i<27;i++)

{

memset(buffer,'\0',sizeof(buffer));

bytes_leidos=read(descriptor_archivo[0],buffer,BUFSIZ);

printf("El proceso hijo ha leído %d bytes y el contenido es:

%s\n",bytes_leidos,buffer);

}

exit(0);

}

else

{

//Proceso padre

for(i=65;i<91;i++)

{

byes_enviados=write(descriptor_archivo[1],(char *)&i, sizeof(char));

printf("El proceso padre ha enviado por la tuberia %d

bytes\n",bytes_enviados);

sleep(1);

}

}

}

exit(0);

Page 17: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Hilos

• En el caso de sistemas operativos multihilo, donde un proceso consta de uno o más hilos, la memoria de trabajo (compartida por todos los hilos) y la información de planificación. Cada hilo consta de instrucciones y estado de ejecución.

17

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Hilo

s

Page 18: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Hilos

• En los sistemas operativos multihilo es posible crear tanto hilos como procesos. La diferencia estriba en que un proceso solamente puede crear hilos para sí mismo y en que dichos hilos comparten toda la memoria reservada para el proceso.

18

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Hilo

s

Page 19: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Hilos

• Un hilo tiene muchas similitudes con un proceso, aunque conceptualmente es un subconjunto de un proceso. Así, un proceso puede contener varios hilos pero un hilo no puede contener varios procesos. La diferencia más importante entre ambos reside en que un proceso tiene un espacio de memoria único que no puede ser accedido por otro proceso, a menos que se implemente un mecanismo de IPC (comunicación entre procesos). En el caso de los hilos, de manera intrínseca se tiene una región de memoria común a todos ellos (sección de datos, código y montículo). Así dentro de un proceso puede haber varios hilos de ejecución modificando la misma variable, sin necesidad de un programa adicional. 19

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Hilo

s

Page 20: Clases 04 y 05: Repaso de programación de …...Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Estructuras de datos (Prof. Edgardo A. Franco) 1 Prof. Edgardo

Hilos

20

Sist

emas

op

erat

ivo

s II

C

lase

s 0

4 y

05

: R

epas

o d

e p

rogr

amac

ión

de

sist

emas

bas

ado

s en

UN

IX

Hilo

s

void funcion(void)

{

printf("Hilo %u \n", pthread_self());

sleep(2);

pthread_exit(0);

}

int main(void)

{

pthread_t th1, th2;

//Se crean dos hilos con los atributos predeterminados

pthread_create(&th1,NULL,(void *)funcion,NULL);

pthread_create(&th2,NULL,(void *)funcion,NULL);

//Esperar a la terminación de ambos hilos

pthread_join(th1,NULL);

pthread_join(th2,NULL);

printf("Ha terminado el programa (hilo) principal\n");

exit(0);

}