Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Entrada Salida
()
1 / 54
Contenidos I
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX Dispositivos e/s en UNIX Llamadas para e/s en UNIX Entrada salida as ncrona Redireccin o
() Sistemas operativos. Entrada Salida April 26, 2012 2 / 54
Entrada/salida
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX
()
3 / 54
Entrada/salida
Entrada/Salida
Los dispositivos de e/s permiten a la CPU relacionarse con el mundo exterior: teclados, pantallas, impresoras, discos . . . La comunicacin de la CPU con un elemento externo es similar a la o comunicacin con la memoria: se leen y escriben datos o El comportamiento es distinto: los datos no siempre estn a disponibles, y el dispositivo puede no estar preparado para recibirlos Al ser distinto el comportamiento los mtodos son distintos que para e el acceso a memoria
()
4 / 54
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX
()
5 / 54
En teor los dispositivos de e/s se comunicari con la CPU por los a an buses del sistema Dado que son muy heterogneos ser muy costoso que la CPU los e a manejase directamente Los dispositivos estn conectados a una pieza de hardware llamada a controlador de dispositivo (a veces controladora o adaptador) El controlador de dispositivo admite comandos abstractos de la CPU y se encarga de transmitrlos al dispositivo Se libera a la CPU de tareas de muy bajo nivel
()
6 / 54
()
7 / 54
El controlador de dispositivo acta de interfaz entre la CPU y el u dispositivo de E/S Cada controlador puede ocuparse de uno o varios dispositivos del mismo tipo Los controladores se comunican con la CPU a travs de unos registros e o puertos. Generalmente incluyen
Registros de control Para enviar rdenes al dispositivo o Registros de estado Para obtener informacin del estado dispositivo o o controlador, disponibilidad de datos . . . Registros de datos Pueden ser de entrada, salida o bidireccionales
()
8 / 54
()
9 / 54
()
10 / 54
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX
()
11 / 54
()
12 / 54
Consideremos el siguiente ejemplo, y veamos lo que hace cada una de las capas fprintf(fich,"%1.6",x); Software de nivel de usuario
Genera la cadena de caracteres adecuada: un d gito, un punto y 6 decimales a a partir del valor de x. A partir del FILE * ch obtiene el descriptor de chero para ser usado en la llamada al sistema write correspondiente.
()
13 / 54
A partir del descriptor de chero accede a la copia en memoria del inodo del chero y, utilizando el oset de la tabla de cheros, determina en qu bloque de disco (y en que oset) dentro del bloque) e corresponde hacer dicha escritura Comprueba que dicho bloque est en el cache (si no lo est lo trae) y a a transere los datos de la direccin de memoria de usuario al cache y o marca el buer del cache como modicado. Si la escritura hiciese necesario asignar otro bloque de datos al chero, es aqu donde se har a Posteriormente (dependiendo del uso del cache) se invocari al a manejador de dispositivo para que escriba ese bloque a disco
()
14 / 54
Manejador de interrupciones
Cuando el dispositivo completa la solicitud, genera un interrupcin que o es gestionada por el manejador de interrupciones Despierta al proceso que habia solicitado la e/s (en caso de que esta fuese s ncrona Libera los recursos ocupados por la operacin e/s o
()
15 / 54
()
16 / 54
Tipos de entrada/salida
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX
()
17 / 54
Tipos de entrada/salida
()
18 / 54
Tipos de entrada/salida
Tipos de entrada/salida
Dado que la CPU es mucho ms rpida que los dispositivos de e/s, a a una vez iniciada la e/s el S.O. asigna la CPU a otra tarea dejando al proceso que inicin la tarea en espera
El proceso percibe la e/s como s ncrona, aunque es de hecho as ncrona
Muchos sistemas operativos permiten tambien la e/s as ncrona: el proceso inicia la e/s y continua su ejecucin. El proceso es avisado o por el S.O. cunado la operacin de e/s se ha completado o
()
20 / 54
Mtodos de entrada/salida e
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX
()
21 / 54
Mtodos de entrada/salida e
Mtodos de e/s e
()
22 / 54
Mtodos de entrada/salida e
Es la forma ms sencilla de realizar operaciones de E/S a La sincronizacin se consigue al preguntarle la CPU (poll) al o dispositivo si tiene un dato que entregar o, si es el caso, si est listo a para recibir uno Se pierde tiempo en preguntar la dispositivo (se pierde ms cuanto a ms a menudo se le pregunte) a Es lento, e incluso podr perderse datos si no se le pregunta muy a an menudo
()
23 / 54
Mtodos de entrada/salida e
El dispositivo avisa a la CPU de que requiere antencin mediante una o interrupcin o Cuando llega la interrupcin el S.O. o
Salva el estado de lo que est haciendo a Trasere el control a la Rutina de Servicio de dicha interrupcin o Ejecuta la Rutina de Servicio de dicha interrupcin o Reanuda la ejecucin donde fue interrupida o
Dichas rutinas estn en memoria en unas direcciones apuntadas por a los vectores de interrupcin o Es el S.O., en su proceso de inicializacin, el que instala dichas rutinas o
()
24 / 54
Mtodos de entrada/salida e
Estos probelmas no tienen gran importancia con dispositivos lentos y con pocos datos que tansferir, pero SI con dispositivos con mucho volumen de informacin, por ejemplo un disco duro o Solucin: Controlador de DMA (Direct Memory Access) o
()
25 / 54
Mtodos de entrada/salida e
Mtodos de entrada/salida e
()
27 / 54
Mtodos de entrada/salida e
Bus transparente
El DMA slo utiliza el bus cuando la CPU no lo usa (p.e., durante la o decodicacin de una instruccin o utilizando la ALU) o o SI hay memoria cache, la CPU puede acceder a cdigo y datos en el o cache mientras el DMA realiza las transferencias
()
28 / 54
Planicacin de discos o
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX
()
29 / 54
Planicacin de discos o
Discos
Un disco esta formado por un conjunto de platos que giran solidariamente. Cada uno de las supercies de dichos platos se denomina cara Cada cara esta compuesta por una serie de coronas circulares concntricas denominada pista. Al conjunto formado por la misma e pista en distintas cara se le denomina cilindro Cada cilindro est formado por una serie de sectores a
El sector es la unidad de e/s elemental de un disco duro. T picamente cada sector tiene 512 byte-s
()
30 / 54
Planicacin de discos o
Discos
Cada sector queda perfectamente especicado por sus tres coordenadas: cilindro cara y sector.(tipicamente la numeracin de las o caras y cilindros comienza en 0 y la de los sectores en 1) Solo el manejador de dispositivo conoce las caracter sticas f sicas del disco. El S.O. trata el disco como una sucesin de bloques. P.e. un o disquete de 1.4 Mbytes tine 80 cilindros, 2 caras y 18 sectores por pista. (2880 sectores de 512 bytes). SI lo formateamos con bloques de 4k el S.O. lo considerar como una sucesion de 360 bloques de 4K a (cada bloque) tiene 8 sectores La asignacin de espacio (y la contabilidad del espacio libre) se hace o por bloques, no por sectores
()
31 / 54
Planicacin de discos o
Estructura de un disco
()
32 / 54
Planicacin de discos o
Discos
En los discos de ms capacidad que un disquete, cada disco se divide a en zonas que se pueden tratar como sistemas decheros independientes. En el primer sector del disco (cara 0, cilindro 0, sector 1) est una a tabla que nos indica qu zonas existen en el disco. e El nombre y el formato de dicha tabla var de unos sistemas a otros: a tabla de particiones, con cuatro entradas en sistemas windows y linux; disklabel con 8 o 16 enytradas en sistemas BSD . . .
()
33 / 54
Planicacin de discos o
Planicacin de discos o
En un sistema donde se generan multiples solicitudes de entrada salida a discos, estas pueden planicarse. En general se intenta mejorar los tiempos de bsqueda. u Lo algoritmos de planicacin de bsquedas o u
FCFS o FIFO: Es igual que no tener planicacin. Las solicitudes se o atienden en el mismo orden que llegan SSTF Shortest Seek Time First. Se antiende primero a las solicitudes con menor tiempo de bsqueda desde la posicin actual. Mejora el u o tiempo de bqueda promedio, pero no produce tiempos homogeneos ni s e predecibles. Riesgo de inanicin o
()
34 / 54
Planicacin de discos o
Planicacin de discos o
SCAN (Tambien denominado algoritmo del ascensor: se atiende a la solicitud mas prox pero solo en un sentido. Como las solicitudes de ma la zona central del disco reciben ms atencin que las de lo extremos: a o
C-SCAN Igual que el SCAN pero al llegar a un extremo del disco se vuelve al principio su antender ningua solicitud (como un ascensor que slo para en las subidas) o
SCAN N pasos o C-SCAN N pasos. Como el scan, (o c-scan) salvo que en cada viaje se atienden como mmimo N solicitudes en cada a recorrido
()
35 / 54
Planicacin de discos o
Planicacin de discos o
CFQ Complete Fair Queuing. Asigna distintas colas para las solicitudes de acceso a disco de los distintos procesos, y a cada cola le asigna quantos de tiempo. La longitud del quanto y el nmero de u solicitudes que pueden procesarse de una cola dependen de la prioridad i/o del proceso. En linux, el comando ionice nos permite modicar la prioridad i/o de un proceso.
ionice(1) NAME ionice - get/set program io scheduling class and priority SYNOPSIS ionice [[-c class] [-n classdata] [-t]] -p PID [PID]... ionice [-c class] [-n classdata] [-t] COMMAND [ARG]... ionice(1)
Tambien pueden intentar mejorarse las latencias (planicacin o rotacional), aunque en sistemas modernos, es normal que la controladora lea pistas enteras y solamente se transeran los sectores necesarios
()
36 / 54
Entrada/salida en UNIX
Entrada/salida Estructura de un sistema de e/s Estructura del software de entrada/salida Tipos de entrada/salida Mtodos de entrada/salida e Planicacin de discos o Entrada/salida en UNIX
()
37 / 54
Entrada/salida en UNIX
Entrada/salida en UNIX
Dispositivos e/s en UNIX Llamadas para e/s en UNIX Entrada salida as ncrona Redireccin o
()
38 / 54
Entrada/salida en UNIX
Para acceder a los dispositivos se pueden utilizar las mismas llamadas que para el acceso a los cheros (open, read, write) siempre que el proceso que lo haga tenga los provilegios adecuados
()
39 / 54
Entrada/salida en UNIX
()
40 / 54
Entrada/salida en UNIX
Entrada/salida en UNIX
Dispositivos e/s en UNIX Llamadas para e/s en UNIX Entrada salida as ncrona Redireccin o
()
41 / 54
Entrada/salida en UNIX
close
int close(int fd) cierra un descriptor de chero obtenido con open
()
42 / 54
Entrada/salida en UNIX
read y write ssize_t read(int fd, void *buf, size_t count) ssize_t write(int fd, const void *buf, size_t count)
Reciben el descriptor de chero, una direccin de transferencia y el o nmero de bytes para e/s u Devuelve en nmero de bytes que han sido leidos o escritos u La lectura (o escritura) es a partir de la posicin u oset actual del o chero, que es actualizada tras estas llamadas. La posicin u oset actual del chero, pude ser modicada mediante la o llamada off t lseek(int fd, off t offset, int whence)
()
43 / 54
Entrada/salida en UNIX
pread y pwrite
ssize_t pread(int fd, void *buf, size_t count, off_t offset) ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset)
Anlogas a las llamadas read y write salvo que se suministra la posicin a o de de lectura Estas llamadas no actualizan la posicin u oset actual del chero o
()
44 / 54
Entrada/salida en UNIX
Estas llamadas son anlogas a las read, write, pread y pwrite salvo que a en lugar de hacer la e/s a un solo buer de memoria la realizan a iovcnt bueres descritos en iov Cada struct iovec describe un buer para e/s (su direccin y el o nmero de bytes a transferir a dicha direccin) u o struct iovec { void *iov_base; /* Starting address */ size_t iov_len; /* Number of bytes to transfer */ };
()
45 / 54
Entrada/salida en UNIX
Entrada/salida en UNIX
Dispositivos e/s en UNIX Llamadas para e/s en UNIX Entrada salida as ncrona Redireccin o
()
46 / 54
Entrada/salida en UNIX
Entrada/salida as ncrona
En unix tenemos la posibilidad de que los procesos hagan una e/s as ncrona
Inician la e/s y son avisados cuando se completa
Las funciones corresponden al estndar POSIX real time (debe a linkarse con -lrt) int aio_read(struct aiocb *aiocbp) int aio_write(struct aiocb *aiocbp) ssize_t aio_return(struct aiocb *aiocbp) int aio_error(const struct aiocb *aiocbp) int aio_cancel(int fd, struct aiocb *aiocbp)
()
47 / 54
Entrada/salida en UNIX
Entrada/salida as ncrona
La estructura aiocb contiene los siguientes miembros (y es posible que otros, dependiendo de la implementacin) o int aio_fildes; off_t aio_offset; volatile void *aio_buf; size_t aio_nbytes; int aio_reqprio; struct sigevent aio_sigevent; int aio_lio_opcode; /* File descriptor */ /* File offset */ /* Location of buffer */ /* Length of transfer */ /* Request priority */ /* Notification method */ /* Operation to be performed; lio_listio() only */
()
48 / 54
Entrada/salida en UNIX
Redireccin o
Entrada/salida en UNIX
Dispositivos e/s en UNIX Llamadas para e/s en UNIX Entrada salida as ncrona Redireccin o
()
49 / 54
Entrada/salida en UNIX
Redireccin o
&>err
Sistemas operativos. Entrada Salida April 26, 2012 50 / 54
Entrada/salida en UNIX
Redireccin o
Las llamadas al sistema dup, dup2 y fcntl con el comando F DUPFD permiten hacer la redireccin o dup duplica un descriptor de chero, y utiliza en nmero mas bajo u disponible. EL siguiente trozo de cdigo muestra como redireccionar o la salida estndar a un chero. (No se incluye el contro de errores) a df=open("fichero") close(STDOUT_FILENO); dup(df); /*a partir de aqui la salida est\a redireccionada*/
()
51 / 54
Entrada/salida en UNIX
Redireccin o
Entrada/salida en UNIX
Redireccin o
Redireccin: ejemplo I o
El siguiente cdigo ejecuta el programa (con argumentos) que se le o pasa como parmetro con la salida redireccionada a
#include #include #include #include <stdlib.h> <unistd.h> <fcntl.h> <stdio.h>
void main (int arcc, char *argv[]) { int df, copia,estado; pid_t pid; if (argv[1]==NULL || argv[2]==NULL){ printf ("uso %s fich prog arg...\n",argv[0]); printf ("\t ejecuta prog con su argumentos redireccionando la salida a fich\n") exit(0); } if ((df=open(argv[1], O_CREAT|O_EXCL|O_WRONLY,0777))==-1){ perror("Imposible abrir fichero redireccion"); exit(0); }
() Sistemas operativos. Entrada Salida April 26, 2012 53 / 54
Entrada/salida en UNIX
Redireccin o
Redireccin: ejemplo II o
copia=dup(STDOUT_FILENO); close(STDOUT_FILENO); /*redireccion*/ dup(df); if ((pid=fork())==0){ execvp(argv[2],argv+2); perror ("Imposible ejecutar"); exit(255); } waitpid(pid,&estado,0); close(STDOUT_FILENO); /*deshacemos redireccion*/ dup(copia); if (WIFEXITED(estado) && WEXITSTATUS(estado)!=255) printf("programa %s redireccionado a %s termino normalmente(%d)\n", argv[2],argv[1],WEXITSTATUS(estado)); else unlink(argv[1]); }
()
54 / 54