benemérita universidad autónoma de...

6
Benemérita Universidad Autónoma de Puebla Facultad de Ciencias de la Computación Ingeniería en Ciencias de la Computación Reporte de Practica No. 8 Unidad 4 Profesor: Ma. Carmen Cerón Garnica Materia: Sistemas Operativos 2 Integrantes del equipo: Ernesto Barrientos Tirso Matrícula: 201211174 Mauricio Oropeza Benítez Matrícula: 201229682 Iván Escalona Pérez Matrícula: 201450858

Upload: others

Post on 29-Aug-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Benemérita Universidad Autónoma de Pueblasistemasopetivos2.weebly.com/uploads/1/4/1/0/14101010/practica_8.pdfCada línea en la traza contiene el nombre de la llamada del sistema,

Benemérita Universidad Autónoma de Puebla

Facultad de Ciencias de la Computación

Ingeniería en Ciencias de la Computación

Reporte de Practica No. 8

Unidad 4

Profesor: Ma. Carmen Cerón Garnica

Materia: Sistemas Operativos 2

Integrantes del equipo:

Ernesto Barrientos Tirso Matrícula: 201211174

Mauricio Oropeza Benítez Matrícula: 201229682

Iván Escalona Pérez Matrícula: 201450858

Page 2: Benemérita Universidad Autónoma de Pueblasistemasopetivos2.weebly.com/uploads/1/4/1/0/14101010/practica_8.pdfCada línea en la traza contiene el nombre de la llamada del sistema,

Sistemas Operativos II

INTRODUCCIÓN

Strace es una herramienta útil de diagnóstico, instrucción y depuración. Los

administradores del sistema, los diagnosticadores y los solucionadores de problemas lo

encontrarán invaluable para resolver problemas con programas para los cuales la fuente no

está disponible ya que no necesitan ser recompilados para rastrearlos. Los estudiantes, los

piratas informáticos y los extremadamente curiosos encontrarán que se puede aprender

mucho sobre un sistema y sus llamadas de sistema, rastreando incluso los programas

ordinarios. Y los programadores encontrarán que, dado que las llamadas y señales del

sistema son eventos que suceden en el interfaz usuario / kernel, un examen detallado de

este límite es muy útil para el aislamiento de errores, la comprobación de la cordura y el

intento de capturar las condiciones de carrera.

Cada línea en la traza contiene el nombre de la llamada del sistema, seguido de sus

argumentos entre paréntesis y su valor de retorno. Un ejemplo de poner el comando '' cat

/ dev / null '' es:

open ("/ dev / null", O_RDONLY) = 3

Los errores (generalmente un valor de retorno de -1) tienen el símbolo errno y la cadena de

error adjuntados.

open ("/ foo / bar", O_RDONLY) = -1 ENOENT (No existe ningún archivo o directorio)

Las señales se imprimen como un símbolo de señal y una cadena de señal. Un extracto de

la instrucción e interrupción del comando '' dormir 666 '' es:

sigsuspend ([] <inacabado ...>

--- SIGINT (Interrumpir) ---

+++ asesinado por SIGINT +++

Si se está ejecutando una llamada al sistema y, mientras tanto, se está convocando a otra

desde un proceso / subproceso diferente, entonces strace intentará conservar el orden de

esos eventos y marcará la llamada en curso como inacabada. Cuando la llamada regrese, se

marcará como reanudada.

Page 3: Benemérita Universidad Autónoma de Pueblasistemasopetivos2.weebly.com/uploads/1/4/1/0/14101010/practica_8.pdfCada línea en la traza contiene el nombre de la llamada del sistema,

Sistemas Operativos II

Metodología.

#include <stdio.h>

#include <termios.h>

#include <unistd.h>

#define TAM_MAX 32

int main(int argc, char **argv) {

struct termios term_atrib;

char linea[TAM_MAX];

/* Obtiene los atributos del terminal */

if (tcgetattr(0, &term_atrib)<0) {

perror("Error obteniendo atributos del terminal");

exit(1);

}

/* Desactiva el eco. Con TCSANOW el cambio sucede inmediatamente */

term_atrib.c_lflag &= ~ECHO;

tcsetattr(0, TCSANOW, &term_atrib);

printf ("Introduzca la contrasena: ");

/* Lee la linea y a continuacion la muestra en pantalla */

if (fgets(linea, TAM_MAX, stdin)) {

linea[strlen(linea)-1]='\0';

/* Eliminando fin de linea */

printf("\nHas escrito %s\n", linea); }

/* Reactiva el eco */

term_atrib.c_lflag |= ECHO; tcsetattr(0, TCSANOW, &term_atrib); exit(0);

//..Traza de llamadas al sistema mientras se ejecuta el programa anterior

strace ./a.out

execve("./a.out", ["./a.out"], [/* 31 vars */]) = 0

ioctl(0, SNDCTL_TMR_TIMEBASE, {B38400 opost isig icanon echo ...}) = 0

ioctl(0, TCSETS, {B38400 opost isig icanon -echo ...}) = 0

ioctl(0, SNDCTL_TMR_TIMEBASE, {B38400 opost isig icanon -echo ...}) = 0

write(1, "Introduzca contrasegna: ", 23Introduzca contrasegna: ) = 23

read(0, "secreto\n", 1024) = 8

write(1, "\n", 1) = 1

write(1, "has escrito secreto\n", 20) = 20

ioctl(0, TCSETS, {B38400 opost isig icanon echo ...}) = 0

ioctl(0, SNDCTL_TMR_TIMEBASE, {B38400 opost isig icanon echo ...}) = 0

exit_group(0) = ?

Page 4: Benemérita Universidad Autónoma de Pueblasistemasopetivos2.weebly.com/uploads/1/4/1/0/14101010/practica_8.pdfCada línea en la traza contiene el nombre de la llamada del sistema,

Sistemas Operativos II

Page 5: Benemérita Universidad Autónoma de Pueblasistemasopetivos2.weebly.com/uploads/1/4/1/0/14101010/practica_8.pdfCada línea en la traza contiene el nombre de la llamada del sistema,

Sistemas Operativos II

Page 6: Benemérita Universidad Autónoma de Pueblasistemasopetivos2.weebly.com/uploads/1/4/1/0/14101010/practica_8.pdfCada línea en la traza contiene el nombre de la llamada del sistema,

Sistemas Operativos II

//Ejemplo de entrada/salida no bloqueante (asincrona)

#include <fcntl.h>

#include <errno.h>

#include <aio.h>

#include <stdio.h>

#include <strings.h>

int main() {

char buf[4096];

ssize_t nbytes;

int retval, n=0;

struct aiocb myaiocb;

bzero( &myaiocb, sizeof (struct aiocb));

/* rellena la estructura myaiocb */

myaiocb.aio_fildes = open("fifo", O_RDONLY);

myaiocb.aio_offset = 0;

myaiocb.aio_buf = (void *) buf;

myaiocb.aio_nbytes = sizeof (buf);

myaiocb.aio_sigevent.sigev_notify = SIGEV_NONE;

retval = aio_read( &myaiocb );

if (retval) perror("aio_read:");

/* continua el procesamiento */

//...

/* espera a que acabe */

while ( (retval=aio_error(&myaiocb) )== EINPROGRESS) {

fprintf(stderr, "%d ", n++);

sleep(1); }

/* libera aiocb */

nbytes = aio_return( &myaiocb);

printf("Total leido: %d bytes\n", nbytes);

return 0;

}