Home

Presentación - DavidHorat.com

image

Contents

1. Practica 4 Proyectar un fichero en memoria Dise o de Sistemas Operativos U L P G C David Jesus Horat Flotats Enrique Fernandez Perdomo E 6 Fa 8 U1 ex 0 1 iaa 2 II Explicaci n de las llamadas de mapeo en memoria cccce08 3 Mmap VIUDO AP snese TE IRA DEA ATE ETA EA EI EEES 3 NOM da 3 SINOPSIS titi 3 DESCRIPCION idol 3 VALOR DE VUELTO rare a e Ads 4 ERROINBS e AI A 4 A LO AE A EA A ERE IES EEES ETA ES coats amp 5 III Diagramas de bloques sssssssececcccccsssscccececooccssececcccooossssssececesssssssesee 8 Programa prinCipal A 8 Guion de Bash AC put Oivcssisescccrcssrvccesvendaceonsccassessyessevassvesnevsnsapansncoanseseyeseevasseesseteneaeene 9 IV Descripci n de los ficheros y c digo fuente ooooooomo 10 MAPA ATA ATA AA cedida 10 int main INT AL ON Char SALON A ADA aden ATADA 10 it A O TIR ATACAR Acaba 12 ademe DEBUG FICHERO id 12 char mapearFichero char nombreFichero size_t longitud int fd 12 int desmapearFichero int fd size_t longitudInicial char direccion 13 111 IMmprnarEl chronic 13 A AAA o Pp sae data A EEE N E 14 char reemplazar char ristra char buscar char reemplazar ccccoo 14 Makee lt a da 15 Yo Ejemplo de USO initial 17 a A O 17 1 Lanzarlo con el Makefile make s para que no haya eco cccceeeeeeeeeees 17 2 Compilar con make build map y ejecutar Mapll
2. if child 1 error Could not fork QUIT else if child 0 This is the child process Notice that the child uses the write system call in this version sprintf buffer This is the secret message status write fid buffer sizeof buffer if status lt O error Bad Child Write Quit s status close fid close the mmap file if status 1 error Bad Child Close Quit s sleep 2 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fernandez Perdomo else This is the parent Process sleep 1 allocate a shared memory region using mmap which can be inherited by child processes mmap ptr mmap caddr t 0 Memory Location 0 means O S chooses sizeof buffer How many bytes to mmap PROT READ PROT_ WRITE Read and write permissions MAP SHARED Accessible by another process fid which file ts associated with mmap off t O Offset in page frame if mmap ptr MAP FAILED error Parent Memory Map Failed QUIT printf Parent s mmap ptr lx n unsigned long mmap ptr printf Parent got the message lt s gt n mmap ptr status munmap mmap ptr sizeof buffer if status 1 error Bad munmap QUIT s status close fid close the mmap file if status 1 error Bad Parent Close Quit s status unlink arg
3. en memoria SINOPSIS include lt unistd h gt include lt sys mman h gt caddr tmmap void start size_t length int prot int flags int fd off t offset int munmap void start size_t length DESCRIPCION La funci n mmap intenta ubicar length bytes comenzando en el desplazamiento offset desde el fichero u otro objeto espeficicado por fd en memoria preferiblemente en la direcci n start Esta ltima direcci n es una sugerencia y normalmente se especifica como 0 El lugar donde es ubicado el objeto es devuelto por mmap El argumento prot describe la protecci n de memoria deseada Lo forman los siguientes bits PROT EXEC Las p ginas deben ser ejecutadas PROT READ Las p ginas deben ser le das PROT WRITE Las p ginas deben ser escritas PROT_ NONE Las p ginas no pueden ser accedidas El par metro flags especifica el tipo de objeto insertado las opciones de asociaci n y si las modificaciones hechas a la copia insertada en memoria son privadas al proceso o son compartidas por otras referencias Tiene los bits Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo MAP FIXED No seleccionar una direcci n diferente a la especificada Si la direcci n especificada no puede ser utilizada mmap fallar Si MAP FIXED es especificado start debe ser un m ltiplo del tama o de p gina Utilizar esta opci n es desaconse
4. fichero aplicar los cambios y salvar el fichero Todo est hecho llamando funciones en la medida de lo posible Par metros posibles gt help Nos muestra la ayuda del programa gt f fichero Introduce el fichero a editar y mapear en memoria gt r rl r2 Busca las existencias de la ristra r1 y las cambia por la ristra de LR include lt stdio h gt include lt stdlib h gt include lt string h gt include ristras h include mapear h int main int argn char argv char nombreFichero NULL Nombre del fichero AO Ristra a buscar y a reemplazar PASO 1 Par metros de entrada Ayuda help if argn 2 amp amp stremp argv help 0 printf Modo de empleo map OPCION n printf t f fichero Fichero a editar y mapear en memoria n printf t r r1 r2 Cambia la ristra rl si existe por la ristra r2 n exit 0 Toma de Par metros int p for p 1 p lt argn if stremp argv p f 0 10 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fernandez Perdomo Fichero a editar y mapear en memoria ptt nombreFichero char malloc sizeof char strlen argv p 1 strcpy nombreFichero argv p p velse if stremp argv p r 0 amp amp argn gt p 2 Linea a modificar y nueva linea p rl char malloc sizeof char str
5. ooooononoooaaaaananccncnccnnnnnnnnnnnnnnos 17 Gui n de ejemplo NUMETOG cccrccsssssssssssssssssssssssssssssssssssssssessssssssssssssssssssssssssees 18 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo I Introducci n El objetivo de esta pr ctica es proyectar un fichero en memoria usando las llamadas al sistema relacionadas en concreto la mmap y munmap que explicaremos en secciones sucesivas Para ello crearemos un fichero de texto con un editor y un programa que realice las siguientes funciones sobre el fichero creado Abra el fichero Proyecte el fichero en memoria Modifique el contenido del fichero buscando una ristra y reemplaz ndola or A Cierre y libere el fichero Posteriormente se visualizar el contenido del fichero para comprobar que los cambios realizados han sido correctos El programa funcionar por l nea de comandos tomando como entrada tres argumentos el fichero a modificar la cadena a buscar y la cadena sustituta Una vez en el programa se mostrar n mensajes que indiquen el estado del proceso y los resultados obtenidos Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fernandez Perdomo ll Explicaci n de las llamadas de mapeo en memoria Mmap y munmap NOMBRE mmap munmap ubica o elimina ficheros o dispositivos
6. 9
7. A ARRE HHH 15 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo Reglas usar make s para que no se muestre el eco de los comandos HHHHHHHHHH HH HH HH HAHAHAHA AAA AAA AAA AAA AAA AAA AAA AA AAA AAA AAA AAA AAA AAA HHH map build map echo Contenido del fichero FICHERO original cat S FICHERO S PPROGRAMA S ARGUMENTOS echo Contenido del fichero FICHERO modificado cat S FICHERO build map clean COMPILADOR o PROGRAMA FUENTES OPCIONES clean rm f S PROGRAMA 16 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fernandez Perdomo V Ejemplo de uso Uso general Para el uso del programa se tienen dos alternativas 1 Lanzarlo con el Makefile make s para que no haya eco En este caso se debe fijar los valores de la variables FICHERO RISTRA BUSCAR y RISTRA REEMPLAZAR que por defecto valen FICHERO fichero RISTRA BUSCAR tres RISTRA REEMPLAZAR dos Al lanzar make s se compila y lanza el programa map con los parA metros anteriores 2 Compilar con make build map y ejecutar map Primero se tiene que compilar si se han hecho cambios en los fuentes con la regla make build map del fichero Makefile Luego se lanza el programa con map los par metros a lanzar pu
8. do el fichero char mapearFichero char nombreFichero size_t longitud int fd PASO 1 Abrir fichero como escritura lectura if fd open nombreFichero O RDWR O CREAT S IRUSR IS IWUSR lt 0 printf Error al abrir el fichero n ex1t 0 ifdef DEBUG FICHERO imprimirFichero fd endif PASO 2 Mapear el fichero en memoria struct stat estadisticas Obtener estad sticas del fichero if fstat fd amp estadisticas lt O printf Error al leer estad sticas del fichero n ex1t 0 longitud estadisticas st size N de bytes a leer todo el fichero int proteccion PROT READ PROT WRITE Protecci n con que mapear las p ginas int banderas MAP SHARED Tipo de ubicaci n mapeo de las p ginas int desplazamiento 0 Posicion del fichero desde la que tomar los bytes indicados por longitud desplazamiento en el marco de pagina char memoria if memoria mmap 0 longitud proteccion banderas fd desplazamiento MAP FAILED printf Error al mapear el fichero en memoria n exit 0 12 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo y return memoria j int desmapearFichero int fd size_t longitudinicial char direccion Desmapea el fichero cuyo descriptor es fd de memoria Antes de ello actualiza el tama o del fichero y la zona de mapeo en memoria apuntada po
9. do ristraAuxiliar else strcat resultado ristraAuxiliar strcat resultado reemplazar strcpy ristraAuxiliar coincidencia strlen buscar Actualizar ristraAuxiliar jelsef 14 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fernandez Perdomo Sino hay coincidencia se almacena el resto ristraAuxiliar actual y se termina if strlen resultado strepy resultado ristraAuxiliar else strcat resultado ristraAuxiliar break free ristraAuxiliar free coincidencia return resultado y Makefile Hemos almacenado como variables el compilador con sus argumentos el programa con sus fuentes y un ejemplo de los par metros de nuestro programa Por otro lado existen 3 reglas definidas v clean Borra el programa ejecutable Y build map Borra el programa ejecutable llamando a clean y compila nuestro programa v map Es la regla por defecto Borra el programa ejecutable llamando a clean compila nuestro programa y lo ejecuta con un ejemplo pasado por las variables FICHERO RISTRA BUSCAR y RISTRA REEMPLAZAR HAHHAHHHHAHHH Variables HHAHHHHHHHHHH COMPILADOR gcc OPCIONES Wall PROGRAMA map FUENTES S PROGRAMA c ristras c mapear c FICHERO fichero RISTRA BUSCAR tres RISTRA REEMPLAZAR dos ARGUMENTOS f FICHERO r S RISTRA BUSCAR S RISTRA REEMPLAZAR HAHAHAH
10. eden consultarse con map help make build map map Adicionalmente se dispone de un script llamado numeros que cambia n meros escritos con ristras a n meros escritos con cifras y viceversa Act a sobre el fichero fichero creado a tal efecto con n meros escritos con ristras incialmente numeros Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo Gui n de ejemplo numeros a 2 i Ejemplo de gui n de Bash en el que usamos nuestro programa para modificar las apariciones de los n meros del 0 al 9 como ristras cero uno dos por su equivalente num rico 0 1 2 o viceversa Su diagrama de bloques est en la secci n de diagramas de bloques de esta memoria La variable fichero declarada al principio inicialmente con el valor fichero representa el fichero a modificar por lo que deber ser configurada en caso de querer usar un fichero diferente El gui n ejecuta los siguientes pasos 1 Muestra las propiedades y contenido del fichero a modificar 2 Busca la aparici n de la palabra cero en el fichero 3 En caso de encontrarla sustituye las ristras cero uno por sus equivalentes num ricos 0 1 en N pasos tantos como n meros sustituyamos especificados en el vector numeros declarado al principio 4 En caso de no encontrarla hace la sustituci n inver
11. gia simple basada en buscar una ocurrencia de buscar en ristra copiar lo anterior a la ocurrencia en el vector de resultado a adirle reemplazar y volver a repetir los pasos para el resto de la cadena hasta que no hayan m s ocurrencias Cuando no hayan m s coincidencias se a ade el resto de la ristra si existe include lt stdlib h gt include lt string h gt char reemplazar char ristra char buscar char reemplazar ristraAuxiliar gt Almacena el resto de la ristra que representa el contenido original del fichero que falta por analizar coincidencia gt Apunta a la coincidencia Permite poner 0 en su primera posici n para tomar lo que hay antes de la coincidencia resultado gt Va acumulando la ristra resultante que representa el nuevo contenido del fichero char ristraAuxiliar char malloc sizeof char strlen ristra 1 strcpy ristraAuxiliar ristra char coincidencia char malloc sizeof char strlen ristra 1 char resultado char malloc sizeof char strlen ristra 1 while ristraAuxiliar Buscar coincidencia la primera por la izquierda coincidencia strstr ristraAuxiliar buscar if coincidencia Si hay coincidencia se almacena lo anterior a la coincidencia y la ristra reemplazar y se actualiza la ristraAuxiliar coincidencia 0 0 Permite copiar lo que hay antes de la coincidencia if strlen resultado strepy resulta
12. jable MAP SHARED Comparte este rea con todos los otros objetos que se alan a este objeto MAP PRIVATE Crear un rea privada copy on write Debe especificarse exactamente uno de los par metros MAP SHARED o MAP PRIVATE Los tres par metros anteriores est n descritos en POSIX 1b formalmente POSIX 4 Linux tambi n reconoce MAP DENYWRITE MAP EXECUTABLE y MAP ANON YMOUS La llamada al sistema munmap borra las ubicaciones para el rango de direcciones especificado y produce referencias a las direcciones dentro del rango a fin de generar referencias a memoria inv lidas VALOR DEVUELTO S1 ha funcionado mmap devuelve un puntero al rea reservada En caso de error es devuelto 1 y errno es modificado apropiadamente Si ha funcionado munmap devuelve 0 si hay error 1 y errno es fijada probablemente a EINVAL ERRORES EBADF fd no es un descriptor de fichero v lido y MAP ANONYMOUS no ha sido fijado Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo EACCES MAP PRIVATE fue indicado pero fd no ha sido abierto para lectura O MAP SHARED fue invocado y PROT WRITE fue fijado y fd no est abierto para escritura EINVAL No es correcto start o length o offset E g son demasiado grandes o no estan alineados en los l mites de un valor m ltiplo de PAGESIZE ETXTBUSY MAP DENYWRITE fue fijado pero el objet
13. len argv p 1 35 strcpy rl argv p p r2 char malloc sizeof char strlen argv p 1 strepy r2 argv p p lelse Uso Incorrecto printf map Forma de uso incorrecta n printf Pruebe map help n exit 0 if nombreFichero Uso Incorrecto printf map Forma de uso incorrecta n printf Pruebe map help n exit 0 PASO 2 Abrir y Mapear el fichero en memoria size_t longitudInicial int fd char direccion mapearFichero nombreFichero amp longitudInicial amp fd PASO 3 Modificar fichero strepy direccion reemplazar direccion r1 r2 PASO 4 Traer desmapear fichero de memoria con los cambios desmapearFichero fd longitudInicial direccion s return 0 11 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo mapear c h define DEBUG_FICHERO En caso de querer depurar el mapeado del fichero activamos esta caracter stica en tiempo de compilaci n para que al llamar a la funci n mapearFichero se imprima tambi n en pantalla char mapearFichero char nombreFichero size_t longitud int fd Abre el fichero nombreFichero como escritura lectura y lo mapea en memoria Luego devuelve la longitud en longitud y el descriptor del fichero en fd como par metros pasados por referencia La funci n retorna la direcci n de memoria base donde se ha mapea
14. o especificado por fd est abierto para escritura EAGAIN El fichero ha sido bloqueado o se ha bloqueado una cantidad excesiva de memoria ENOMEM No hay memoria disponible Ejemplo include lt fentl h gt include lt sys types h gt include lt sys mman h gt include lt sys wait h gt include lt stdio h gt include lt unistd h gt static void error char mesg perror mesg exit 2 j static void show_usage const char prog name const char mesg Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo fprintf stderr Error s n Usage is n s fname n tWhere fname is a file name to use n mesg prog name int main int argc char argv int fid child status pid t wait status caddr t mmap ptr char buffer 80 if argc 2 show_usage argv 0 Wrong number of parameters exit 1 Create a new file for read write access with permissions restricted to owner rwx access only fid open argv 1 O RDWR 1O CREAT IO EXCL mode t 0755 if fid lt O fprintf stderr Bad Open of file lt s gt n argv 1 error Failed to open mmap file QUIT status ftruncate fid sizeof buffer make the file the buffer size if status fprintf stderr Could not ftruncate d d d n fid sizeof buffer status error Bad Ftruncate child fork
15. r direccion Pasamos de tener una longitud longitudInicial a strlen direccion int desmapearFichero int fd size_t longitudInicial char direccion Actualiza el tama o del fichero ftruncate fd strlen direccion Actualiza el tama o de la memoria de mapeo mremap direccion longitudInicial strlen direccion 0 Traer Desmapear el fichero de memoria if munmap direccion strlen direccion 1 printf Error al traer desmapear el fichero de memoria n exit 0 return 0 j int imprimirFichero int f Imprime el fichero f por pantalla sin alterar la posici n actual del cursor para ello la guardamos al principio y la restauramos al final int imprimirFichero int f off t p Ilseek f 0 SEEK CUR Se salva la posici n dentro del fichero char c int n read f amp c printf e H e 2J Borra la pantalla equivalente al clear while n St n 0 gt EOF printi c c n read f amp c 1 Iseek f p SEEK SET Se restaura la posici n dentro del fichero return 0 13 Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo ristras c h char reemplazar char ristra char buscar char reemplazar En la ristra ristra reemplaza las ocurrencias que aparecen en la ristra buscar con la ristra reemplazar y devuelve la cadena resultante Para ello seguimos una estrate
16. sa es decir de los n meros 0 1 a sus ristras cero uno 5 Finalmente muestra de las nuevas propiedades y contenido del fichero ya modificado bin bash fichero fichero numeros cero uno dos tres cuatro cinco seis siete ocho nueve clear echo Propiedades del fichero fichero original Is 1 Sfichero echo Contenido del fichero Sfichero original cat fichero echo Pulse cualquier tecla para continuar se modificarA el fichero read Bash Int rprete de comandos muy usado en GNU Linux http www gnu org software bash bash html 18 Pr ctica 4 Proyectar un fichero en memoria Dise o de Sistemas Operativos U L P G C if grep q cero fichero then for 1 0 i lt numeros 3 1 do map f fichero r numeros i i done else for G 0 1 lt numeros 3 1 do map f fichero r i numeros 1 done fi echo Propiedades del fichero fichero modificado Is 1 fichero echo Contenido del fichero fichero modificado cat fichero Fichero de ejemplo fichero David Jes s Horat Flotats Enrique Fern ndez Perdomo Es el fichero de prueba usado por el gui n anterior numeros Fichero de ejemplo para probar el programa map N meros cero uno dos tres cuatro cinco seis siete ocho nueve Si se ejecuta el script numeros se cambian los n meros escritos con ristras a n meros escritos con cifras y viceversa 1
17. v 1 unlink i e remove the mmap file if status 1 error Bad unlink QUIT wait status wait amp status if wait status 1 error Bad Wait QUIT return 0 y Pr ctica 4 Proyectar un fichero en memoria Dise o de Sistemas Operativos U L P G C Programa principal Analizar argumentos Abrir y proyectar el archivo en memoria Buscar ocurrencias del texto a buscar y sustituirlas Guardar y liberar el archivo David Jes s Horat Flotats Enrique Fernandez Perdomo Pr ctica 4 Proyectar un fichero en memoria Dise o de Sistemas Operativos U L P G C Gui n de Bash adjunto Muestra las propiedades del fichero y su contenido El fichero contiene cero David Jes s Horat Flotats Enrique Fern ndez Perdomo Buscar las ristras cero uno y sustituirlas por 0 1 Buscar las ristras 0 1 y sustituirlas por cero uno Guardar y liberar el archivo Pr ctica 4 Proyectar un fichero en memoria David Jes s Horat Flotats Dise o de Sistemas Operativos U L P G C Enrique Fern ndez Perdomo IV Descripcion de los ficheros y codigo fuente map c int main int argn char argv Funci n principal que hace los pasos de tomar argumentos fichero ristra a buscar y ristra con que reemplazar abrir y mapear

Download Pdf Manuals

image

Related Search

Related Contents

Miele H6800BM  Intranet Manual_Cotizador Especial  Navico Broadband Radar Installation Manual  ニシカ アネジェクトⅡ(PDF形式:1MB)  Hacker Master シリーズ取扱説明書    Room Thermostat Operating Instructions (041459)  DZR-45-EN User manual - Contronics Engineering BV    Partie 2 - Tech & Bio  

Copyright © All rights reserved.
Failed to retrieve file