Lab 08SistemasdeArchivos

22
Laboratorio de Sistemas Operativos Práctica 8: Sistema de Archivos Objetivo En está práctica seguimos con los temas de desarrollo de aplicaciones en ambiente GNU/Linux pero en esta ocasión nos enfocamos más en la definición de “Archivo”. Como recordarán hemos hecho mucho énfasis en que en Linux “todo es un archivo” y esto requiere especial atención cuando uno está por adentrarse con el hardware o con otros elementos. Por lo anterior, en esta ocasión nos enfocaremos en cómo se maneja el sistema de archivos en un S.O. GNU/Linux. ÍNDICE Objetivo Tipos de Archivos Archivos Regulares Directorios Enlaces (hard and soft links) Archivos especiales tree.c, Desplegando el tipo de archivo. Arquitectura del Sistema Operativo Arquitectura del sistema de archivos Descriptores de archivos e INode File descriptors. iNode Estado1.c Tablas de control de acceso a los archivos. Copiar.c Laboratorio Ejercicio 1 Ejercicio 2 Ejercicio 3 Conclusiones Referencias: Autor: Dr. Juan A. Nolazco Flores Coautores: M.C. Roberto Aceves, M.C. Jorge Villaseñor, Ing. Raúl Fuentes, J.I. icaza

description

Sistemas Operativos

Transcript of Lab 08SistemasdeArchivos

  • Laboratoriode SistemasOperativos

    Prctica8:SistemadeArchivos

    ObjetivoEn est prctica seguimos con los temas de desarrollo de aplicaciones en ambiente GNU/Linux pero en esta ocasin nos enfocamos ms en la definicin de Archivo. Como recordarn hemos hecho mucho nfasis en que en Linux todo es un archivo y esto requiere especial atencin cuando uno est por adentrarse con el hardware o con otros elementos. Por lo anterior, en esta ocasin nos enfocaremos en cmo se maneja el sistema de archivos en unS.O.GNU/Linux.

    NDICEObjetivoTiposdeArchivos

    ArchivosRegularesDirectoriosEnlaces(hardandsoftlinks)Archivosespecialestree.c,Desplegandoeltipodearchivo.

    ArquitecturadelSistemaOperativoArquitecturadelsistemadearchivos

    DescriptoresdearchivoseINodeFiledescriptors.iNode

    Estado1.cTablasdecontroldeaccesoalosarchivos.

    Copiar.cLaboratorio

    Ejercicio1Ejercicio2Ejercicio3Conclusiones

    Referencias:

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    TiposdeArchivos"Archivo" es el concepto ms bsico y fundamental de Linux, y no necesariamente se refiere a lo que normalmente conocemos como archivos en disco. Linux trata a los dispositivos y perifricos (terminales, teclados, unidad USB, CD roms etc.) como si fueran archivos (everythingisafilephilosophy)..System programming en Linux consiste en abrir, leer, escribir, cerrar y administrar archivos. Cada archivo cuenta con una agarradera (handle) interior que se llama descriptor de archivo. Ya hemos manipulado un poco estos descriptores en la primera parte de la prctica anterior, en donde los utilizamos para hacer referencia a archivos en disco. Pero, no se debe confundirlos con los file pointers que se utilizan en el standard I/O (segunda parte de la prcticaanterior)El descriptor de archivo es un entero utilizado dentro del Ncleo (Kernel) para referenciar un archivo. Estos descriptores de archivo se comparten con el espacio de usuario, detalformaquesonutilizadosdirectamenteporlosprogramasusuarioparaaccesararchivos.

    ArchivosRegularesLo que la mayora de nosotros llamamos archivo es lo que linux etiqueta como archivos regulares. Un archivo regular contiene bytes de datos, organizados en un arreglo lineal llamado flujo de bytes (byte stream). Ejemplos de estos son los archivos de texto, documentos generadosporalgunasuitedeoficina,archivosejecutables,etc.

    DirectoriosActan como un contenedor para otros archivos y directorios en otros ambientes suelen llamarse folders. Un directorio es en s un archivo, que contiene una lista de nombres de otros archivos o directorios contenidos dentro del directorio,. Cada uno de estos nombres est a su vez asociado con un nmero de nodoi (inode), que es un identificador del archivo interno alkernel.

    Los directorios son los archivos que nos permiten darle una estructura jerrquica a los sistemas de archivos de Linux por ejemplo el sistema o conjunto de archivos que reside enunaparticindeundiscoduroounUSB.

    La funcin fundamental de un directorio consiste en establecer la relacin que existe

    entre el nombre de cada archivo contenido dentro del directorio, y el nmero de nodoi correspondientealarchivo

    Losdirectoriosresidencomoarchivosordinariosdentrodelsistemadearchivos.

    Puedenserledoscomoarchivosordinarios. No se pueden crear o escribir sobre ellos como archivos ordinarios (el kernel los

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    protegeporrazonesdeseguridad).

    La informacin de un directorio puede obtenerse a travs de la llamada al sistema: readdir(), o la llamada al sistema stat() para investigar si se trata de un subdirectorio dentro de un directorio.

    Enlaces(hardandsoftlinks)Un enlace o link es un nombre dentro de un directorio, que internamente apunta a un nodoi que puede corresponder a un archivo en el mismo o en otro directorio. En otros ambientes suelen denominarse shortcuts. La diferencia entre un enlace hard y un enlace soft es que el enlace hard no puede cruzar (se invalida) entre diferentes sistemas de archivos (por ejemplo entre el sistema de archivos del disco duro y el sistema de archivos de un USB). En cambio, un enlace soft puede apuntar a cualquier lado, incluyendo archivos y directorios que residen en diferentessistemasdearchivos. Archivosespeciales

    Archivosdedispositivosbasadosencaracteres,comoelarchivoteclado, Archivosdedispositivosbasadosenbloques,comolosarchivosendisco. En los dispositivos de modo bloque hay un buffer que mejora enormemente la velocidad

    de transferencia. Un mismo dispositivo puede ser accedido de modo bloque o de modo carcterdependiendodeldriverutilizado.

    Pipes con nombre, que como sabemos se utilizan para ligar la salida (standard out) de unprogramaconlaentrada(standardin)deotroy

    Sockets, que se utilizan para intercomunicar programas que pueden residir en la misma odiferentesmquinas.

    tree.c,Desplegandoeltipodearchivo. /*** PROGRAMA:tree.c FORMA DE USO: Tree [opciones] [ ... ] (opciones) -f mostrar los archivos que hay dentro de Un directorio agregando: (d) directorio (o) archivo ordinario (b) archivo especial modo bloque (c) archivo especial modo caracter (p) fifo (x) archivo ejecutable VALOR DE RETORNO: 0: si se ejecuta correctamente. -1: si se produce algun error. ***/ #include #include #include #include #include

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    struct opciones { unsigned mostrar_archivos:1; }; enum Boolean {NO,SI}; void tree(char *path, struct opciones opciones); /*** FUNCION: main DESCRIPCION

    Funcion principal , se encarga de analizar los argumentos De la linea de ordenes y de invocar a la funcion tree.***/

    int main (int argc, char *argv[]) { struct opciones opciones; int i, j; /*Analisis de los argumentos en la linea de ordenes.*/ if (argc

  • Laboratoriode SistemasOperativos

    ***/ void tree(char *path, struct opciones opciones) { DIR *dirp; struct dirent *dp; static unsigned int nivel = 0; struct stat buf; int ok; int i; char archivo [256]; char tipo_archivo; /*Apertura de directorio.*/ if ((dirp=opendir(path)) == NULL) { perror(path); return; }; /*Leemos, una por una, las restantes entradas del directorio.*/ while ((dp=readdir(dirp))!=NULL) { /*Formamos el path name correspondiente al archivo de la entrada de directorio que estamos procesando*/ sprintf(archivo,"%s/%s",path, dp->d_name); /*Lectura del inode del archivo. */ ok=stat(archivo,&buf); /*Si el archivo es un subdirectorio, llamamos nuevamente a tree.*/ if (ok!=-1 && (buf.st_mode & S_IFMT) == S_IFDIR) { for (i=0;id_name, opciones.mostrar_archivos ? "(d)":""); /* Si es referencia a "este directorio" (.) o el "directiorio padre" (..), saltar) */ if (!strcmp(".", dp->d_name) || !strcmp("..", dp->d_name)) continue; ++nivel; tree(archivo,opciones); --nivel; } /* Si el archivo no es un directorio y esta activa la opcion Mostrar_archivos (-f), presentamos por pantalla el nombre del archivo y su tipo.*/ else { if (ok !=-1 && opciones.mostrar_archivos== SI) { for (i=0;i

  • Laboratoriode SistemasOperativos

    { case S_IFREG: if (buf.st_mode & 0111) tipo_archivo = 'x'; else tipo_archivo = 'o'; break; case S_IFCHR: tipo_archivo = 'c'; break; case S_IFBLK: tipo_archivo = 'b'; break; case S_IFIFO: tipo_archivo = 'p'; break; default: tipo_archivo = '?'; } //switch fprintf(stdout,"(%c) %s \n", tipo_archivo, dp->d_name); }else fprintf(stdout," %s \n", dp->d_name); } } /* while */ closedir(dirp); } /* tree */

    Primerosecompilaparaobtenerelprogramaejecutableutilizandoelsiguientecomando:[user@localhosthome]$gccotreetree.cDespus,seejecutacomosifuerauncomando: [user@localhost home]$ ./tree hola hola1 hola11 hola12 hola2 [user@localhost home]$ ./tree -f hola hola1 (d) (o) h1 hola11 (d) hola12 (d) hola2 (d) (o) h2 (o) h

    DuestimatefilespaceusageEl comando du (disk ussage) nos dice cunto espacio (en bloques) utiliza cada directorio. Si deseasverloenformatoentendibleporelhumanousalaopcinh.

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    [user@localhost home]$ du 22 ./Finales/al149830 18 ./Finales/al246793 14 ./Finales/al158072 170 ./Finales/al171574 10 ./Finales/al171465 50 ./Finales/al501240 16 ./Finales/al501747 16 ./Finales/al177269 320 ./Finales 72 ./CyUnixAvanzado 10 ./pruebas 402 .

    El valor mostrado indica cuntos bloques poseen los archivos en el directorio indicado en la lnea de comandos del du (default: el directorio local) incluyendo subdirectorios y el mismo directorio (en el ejemplo, el directorio local ocupa 402 bloques incluyendo todos sus subdirectoriosyarchivos).Los bloques son importantes peus son la referencia directa a los clusters del disco duro donde se almacenan (o los bloques en memorias flash), sin embargo, nosotros estamos acostumbrados a ver el tamao en trminos de Bytes y es posible lograrlo con el argumento h.ArquitecturadelSistemaOperativoLinux es propiamente el Kernel de un sistema UNIX por lo mismo tiene una arquitectura heredada de Unix y de la cual mantiene su sencillez. Es una arquitectura de capas que posee 3elementos:

    Capadehardware CapadeKernel CapadeUsuario

    Al ser un sistema jerrquico y de capas, toda la comunicacin hacia el hardware debe de pasar por la capa de Kernel (y es en este punto donde esta el control y la seguridad). La siguiente imagenayudaraasuapreciacin:

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    Una distribucin de linux o distro, tal como Ubuntu o Fedora, agrega al Kernel un shell, un conjunto de comandos, una interfase tipo GUI y varias aplicaciones tiles pero todas las distribuciones utilizan bsicamente el mismo Kernel, que ha sido desarrollado y mantenido durantemuchosaosporunaextensacomunidadencabezadaporLinusTorvald.Durante las prcticas pasadas ya hemos estudiado el manejo de las libreras de GNU ya que se trata de las herramientas provedas en cualquier distro basado en Linux (Ubuntu, Fedora, Redhat , Arch, etc...) y se trata de comandos como cd, awk, ls, rm, tar, rsync, etc... que pueden formar parte de shell scripts. Cuando usamos cualquier comando tal como rm f /, el Kernel valda primero los privilegios y permisos del usuario que lo manda a ejecutar antes de realizar la accin. Con el comando mostrado en particular, seguramente no lo realizar pues a excepcin de Root nadie tiene control del directorio raz (Por cierto, ese comando tiende a ser unabromapesadaenlosforosdeLinux).Adems ya hemos manipulado la interaccin con el hardware al crear programas que copian archivos dentro del disco duro, ya sea directamente con los comandos read y write o utilizando libreras de usuario (standard I/O).En ambos casos, es el Kernel quien toma el control., sin embargo a momentos distintos, esto se puede apreciar con la siguiente imagen donde se vuelven a marcar las 3 capas pero desplegando ms ampliamente las acciones que se realizan:

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    LadiferenciaentrelosdosradicacompletamenteenloquesevioenlaprcticaanteriorreferenteaI/OSystemProgramming.

    ArquitecturadelsistemadearchivosLinux proporciona un espacio de nombres de archivos y directorios global (aplicable a mltiples dispositivos) y unificado (el mismo para diferentes dispositivos). En un espacio de nombres unificado:

    El acceso a los archivos en discos o unidades diferentes se realiza siempre dentro de un espacio de nombres unificado, es decir, todos los archivos son accesibles dentro de lamismaynicajerarquadedirectorios.

    Un archivo en un disco podra ser accesible mediante la ruta /media/usbdisk/plank.jpg, o incluso mediante /home/desktop/plank.jpg (inodes), esto mediante ligas (Algo parecido alosatajosdeWindows).

    Enunespaciodenombresnounificado: Los archivos contenidos en diferentes discos o unidades son accesibles a travs de

    diferentes espacios de nombres, es decir, hay un espacio de nombres diferente para cadadisco.

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    En Winows, un archivo en una memoria USB podra ser accesible mediante la ruta F:\plank.jpg, mientras que en el disco duro est ubicado en C:\ en Linux en cambio, ambos tipos de archivo se accedera con un path del mismo tipo, que podra ser por ejemplo /media/usbdisp/palnk.jpg para el caso del usb o /home/user/fulano/plank.jpg. Lo que ha sucedido es que el sistema de archivos completo del USB se ha montado en usbdisp,yentoncessehacevisiblecomoundirectoriocualquiera.

    Unsistemadearchivos:

    Esunacoleccindearchivosydirectoriosenunajerarquavlidayformal. Los sistemas de archivos pueden ser agregados y removidos individualmente del

    espaciodenombresglobaldearchivosydirectorios. Linux tambin soporta sistemas de archivos virtuales que existen slo en memoria, y

    sistemasdearchivosderedqueexistenenmquinasatravsdelared. Los sistemas de archivos fsicos residen en dispositivos de almacenamiento en bloque,

    como CDs, unidades flash, tarjetas compact flash, o discos duros. Algunos de estos dispositivos son divisibles en particiones, lo que significa que pueden ser divididos en mltiplessistemasdearchivos,loscualespuedensermanipuladosindividualmente.

    Launidaddireccionablemspequeaenundispositivodebloqueeselsector.

    El sector es una caracterstica fsica del dispositivo. El tamao de los sectores es casi siempre una potencia de dospor ejemplo, 512 bytes es muy comn. Un dispositivo de bloque no puede transferir o accesar una unidad de datos ms pequea que un sector todaslasoperacionesdeI/Oocurrenentrminosdeunoomssectores.

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    Igualmente, la unidad lgica direccionable ms pequea en un sistema de archivos es el bloque.

    El bloque es una abstraccin del sistema de archivos, no del medio fsico donde el sistema de archivos reside. Un bloque es usualmente un mltiplo del tamao de sector. Los bloques son generalmente ms grandes que el sector, pero deben ser menores que el tamao de pgina (la unidad ms pequea direccionable por la unidad de memoria, un componente del hardware).Tamaoscomunesdebloqueson512bytes,1kilobytey4kilobytes.

    DescriptoresdearchivoseINode

    Filedescriptors. Antes de que un archivo pueda ser ledo o escrito, debe ser abierto. El kernel mantiene una lista de archivos abiertos por proceso, llamada la tabla de archivos. Esta tabla es indexada a travs de enteros no negativos conocidos como file descriptors (comnmente abreviado fd). Cada entrada en la lista contiene informacin sobre un archivo abierto, incluyendo un apuntador a una copia en memoria del inode del archivo y metadatos asociados, como son la posicin del archivo y los modos de acceso. Tanto el espacio de usuario como el espacio de kernel usan file descriptors como cookies nicas por proceso. Abrir un archivo regresa un file descriptor, mientras las operaciones subsecuentes (leer, escribir, y as sucesivamente) toman elfiledescriptorcomosuargumentoprimario.

    iNode

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    Unarchivoposeevarioscomponentes:

    nombre, contenidoe informacinadministrativa(permisosyfechasdemodificacin).

    Aunque los archivos son usualmente accedidos mediante nombres de archivo, en realidad no estn asociados directamente con esos nombres. En cambio, un archivo es referenciado por un inode (originalmente information node), al cual se le asigna un valor numrico nico. Este valor se llama inode number, a menudo abreviado como inumber o ino. Un inode almacena metadatos asociados con un archivo, como su fecha de modificacin, propietario, tipo, longitud, y la localizacin de los datos del archivo pero no el nombre del archivo! El inode es tanto un objeto fsico, ubicado en el disco en un sistema de archivos tipo Unix, como una unidad conceptual, representada por una estructura de datos en el kernel de Linux. La relacin deinodesconnombresdearchivolamantieneeldirectorio,comoveamosantes.Cada archivo tiene asociado un nodoi. El inode tiene informacin necesaria para que un procesopuedaaccederalosarchivos.Loscamposdeuninodeson:

    Tipodearchivo:ordinario,directorio,especialotubera(pipe). Tipodeacceso:permisosdeusuario,grupoyrestodeusuarios. Tiempos de acceso al archivo: fecha de ltima modificacin, fecha de la ltima vez que

    seaccedialarchivo,ydelaltimavezquesemodific. Tamaodelarchivo. Apuntadores a bloques de disco donde se almacena el contenido del archivo: los

    archivosnotienenporqueestarfsicamenteenbloquescontinuos.

    Nota: el nodoi NO contiene el nombre del archivo. Es en los archivos directorios es dondeacadainodeseleasignaunnombredearchivo.

    El tamao de un inode es fijo. Con el propsito de direccionar archivos muy grandes

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    (recordemos que un archivo no est en bloques continuos), entonces en UNIX sistema V, los nodosi tienen una tabla de tamao 13. Las primeras 10 posiciones de esta tabla, entradas directas, contienen direcciones de bloques con datos de archivos. La entrada 11, entrada indirecta simple, apunta a un bloque que contiene una tabla de direcciones de bloques, que apuntan al bloque de datos. La posicin 12, entrada indirecta doble, apunta a un bloque que contiene una tabla de direcciones que apunta a bloques que contienen direcciones donde se encuentran los datos. La posicin 13 es una entrada indirecta triple, como se muestra en la siguientefigura:

    Elnmerodebloquesdireccionablesesentonces:

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    Unbloquepuedeserdetamao1024,4096,etc.ElSOcargalalistadenodosideldiscoamemoriaprincipal,conocidacomotabladenodosi.La tabla de nodosi contiene la informacin de la lista de inodes ms otros datos como estado el estado de cada nodoi (p. ej., si el nodoi esta bloqueado, si hay algn proceso que est esperando que el nodoi se desbloquee, si la copia del inode que hay en memoria es diferente alacopiadedisco,etc.)Importante: el sistema de archivos manipula (cambio de permisos, propietario del archivo, etc.) la tabla de nodosi, pero no modifica directamente la lista de nodosi en el disco en el instante en que ocurren estos cambios. Esto podra plantear problemas de inconsistencia entre la tabla y la lista de nodosi, ya que una actualizacin de la tabla de nodosi, no implica una

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    actualizacin inmediata de la lista de nodosi. La solucin a esta inconsistencia es que el sistema realiza actualizaciones peridicas de la lista de nodosi. Naturalmente, antes de apagar el sistema tambin es necesario hacer una actualizacin de la lista de nodosi. El programa shutdowneselencargadodeestatarea. La informacin de los nodosi de archivos y directorios puede ser accesible a travs de llamadasalcomandostat().

    Estado1.cA continuacin se presenta el programa estado1.c, que muestra el tipo de un archivo basndoseenlainformacincontenidaensunodoi:/*PROGRAMA:estado1.c(basadoenprograma3.10enterceraedicion.)DESCRIPCION:Presentaporpantallalainformacionestadisticadenombre_archivo.FORMADEUSO:estado[...]VALORDERETORNO:0:siseejecutasatisfactoriamente.1:sisedaalgunacondiciondeerror. */#include#include#include#include#include#includecharpermisos[]={'x','y','r'}intestado(char*archivo){structstatbufstructpasswd*pwstructgroup*grintiif(stat(archivo,&buf)==1)/*Leeinformaciondeltipoarchivo.*/{ perror(archivo) exit(1)}fprintf(stdout,"Archivo:%s\n",archivo)fprintf(stdout,"Nro.deinode:%d\n",buf.st_ino)fprintf(stdout,"Tipo:")/*Analisisdeltipodedispositivo*/

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    /*Paraconcereltipodearchivo,seutilizanunasconstantesdefinidas*//*ensys/stat.h*//*S_IFMT=0170000*//*S_IFREG=0100000*//*S_IFDIR=0040000*//*S_IFCHR=0020000*//*S_IFBLK=0060000*//*S_IFIFO=0010000*/switch(buf.st_mode&S_IFMT)/*mascaraparaobtenereltipodearchivo*/{ caseS_IFREG: printf("ordinario\n")break caseS_IFDIR: printf("directorio\n")break caseS_IFCHR: printf("especialmododecaracter\n")break caseS_IFBLK: printf("especialmodobloque\n")break caseS_IFIFO: printf("FIFO")break}}intmain(intargc,char*argv[]){inti/*Analisisdelosargumentosdelalineadecomandos.*/fprintf(stderr,"argc=%d\n",argc)if(argc

  • Laboratoriode SistemasOperativos

    Primero se compila para obtener el programa ejecutable utilizando el siguiente comando: [username@localhosthome]$gccoestado1estado1.cDespusseejecutacomosifuerauncomando:[username@localhosthome]$lscopiar.chola[username@localhosthome]$./estadocopiar.cArchivo:copiar.cNro.deinode:20578307Tipo:ordinario[username@localhosthome]$./estadoholaArchivo:holaNro.deinode:20578313Tipo:directorio

    Otra forma de ver los nodos-i de los archivos es utilizando la opcin -i del comando ls como se muestra a continuacin:[username@localhosthome]$lsi1145832168alphawords 1145831648alphawords~1145832166fruits

    Tablasdecontroldeaccesoalosarchivos. Adems de la tabla de i-nodes, el Kernel mantiene en memoria otras dos tablas con informacin necesaria para manipular un archivo: tabla de archivos y la tabla de descriptores de archivo.

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    La tabla de archivos es una estructura global del kernel y en ella hay una entrada para cada archivoquelosprocesosdelkernelodelusuariotienenabiertos.La tabla de descriptores de archivos es una estructura local a cada proceso. Esta tabla identifica todos los archivos abiertos por proceso. En cada una de las entradas de la tabla hay un apuntador a una entrada de la tabla de archivos del sistema. Cuando arranca un proceso, el sistema abre automticamente tres archivos (0, entrada estndar 1, salida estndar 2, error estndar). Cuando un proceso invoca una llamada (open, creat, dup, link) para hacer una operacin sobre un archivo, le va a pasar al kernel el descriptor de archivos. El kernel va a utilizar ese nmero para acceder a la tabla de archivos del proceso, y buscar en ella cual es la entrada de la tabla de archivos que le da acceso a su nodoi. A travs del nodoi es que se tiene acceso a los datos. Si el usuario crea otros archivos, entonces el nmero de descriptor de archivo continua a partirdeestenumero.

    Copiar.c/*PROGRAMA:copiar.cFORMADEUSO:./copiarorigendestino

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    VALORDERETORNO:0:siseejecutasatisfactoriamente. 1:sisedaalgunacondiciondeerror*/#include#include#includecharbuffer[BUFSIZ]intmain(intargc,char*argv[]){intfd_origenintfd_destinointnbytes/*Analisisdelosargumentosdelalineadecomandos*/if(argc!=3){fprintf(stderr,"Formadeuso:%sorigendestino\n",argv[0])exit(1)}/*Aperturadelarchivoenmodosololectura*/if((fd_origen=open(argv[1],O_RDONLY))==1){perror(argv[1])exit(1)}/*Aperturaocreaciondearchivosenmodosoloescritura*/if((fd_destino=open(argv[2],O_WRONLY|O_TRUNC|O_CREAT,0666))==1){perror(argv[2])exit(1)}fprintf(stdout,"Num.descriptordelorigen%d\n",fd_origen)fprintf(stdout,"Num.descriptordeldestino%d\n",fd_destino)/*copiamoselarchivoorigenenelarchivodestino.*/while((nbytes=read(fd_origen,buffer,sizeofbuffer))>0)write(fd_destino,buffer,nbytes)close(fd_origen)close(fd_destino)return0}

    al ejecutralo generaria:

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    [username@localhosthome]$./copiaroriginal.txtcopia.txtNum.descriptordelorigen3Num.descriptordeldestino4

    Dos archivos pueden tener asignado el mismo nodo-i. El comando utilizado para asignar ligas(hard links o soft links) a nombres de archivo es ln. [username@localhosthome]$lntmptmpl[username@localhosthome]$lsiltotal6020578307rwrr1usernameusername1158Aug2715:45copiar.c20578323rwrr1usernameusername2263Aug2821:05entrada.c20578312rwrr1usernameusername2155Aug2720:30estado.c20578310rwrr1usernameusername3265Aug2719:45fcntl.c20578313drwxrxrx4usernameusername4096Aug2819:51hola/20578311rwrr2usernameusername4Aug2719:42tmp20578311rwrr2usernameusername4Aug2719:42tmpl20578322rwrr1usernameusername4363Aug2820:35tree.c

    El comando rm en realidad no borra nodos-i; borra entradas del directorio a nodos-i. Solo cuando la ltima liga a un archivo desaparece, entonces el sistema borra el nodo-i, y en consecuencia, tambin el archivo. [username@localhosthome]$rmtmprm:removeregularfile`tmp'?y[username@localhosthome]$lsiltotal5620578307rwrr1usernameusername1158Aug2715:45copiar.c20578323rwrr1usernameusername2263Aug2821:05entrada.c20578312rwrr1usernameusername2155Aug2720:30estado.c20578310rwrr1usernameusername3265Aug2719:45fcntl.c20578313drwxrxrx4usernameusername4096Aug2819:51hola/20578311rwrr1usernameusername4Aug2719:42tmpl20578322rwrr1usernameusername4363Aug2820:35tree.c[username@localhosthome]$

    El propsito de una liga es de dar dos nombres a un mismo archivo, para que ste pueda aparecerendosdirectoriosdiferentes.Puede haber ligas suaves o duras. La liga suave se utiliza cuando se hace un ligado a un archivo que se encuentra en un sistema de archivos diferente. El ligado tambin puede hacerseentredirectorios.

    --- Ejercicios ---Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    Para el desarrollo de esta prctica manejaremos cierta cantidad de archivos, para preparar un directorio temporal ejecute el siguiente Shell scripting (Descargar archivos exclusivamente de laPginadellaboratorio).

    Ejercicio1Cree el directorio en ~/SistArchivos/ , guarde en dicho directorio el siguiente shell scripting conelnombrepreparacion.shyejecutelo:

    #! /bin/bash mkdir originales respaldo mkdir originales/Nivel mkdir originales/Nivel/Segundo cat /etc/passwd > originales/Listado wget http://cs.mty.itesm.mx/lab/operativos/img_tec/thumb_3.png wget http://cs.mty.itesm.mx/lab/operativos/Complementos/Practica7.tar mv thumb_3.png originales/thumb_3.png mv Practica7.tar originales/Prctica7.tar #ls / -R > originales/Nivel/Segundo/Listado.txt ln originales/Listado respaldo/Arch1 ln -s ../originales/thumb_3.png respaldo/Arch2 ln originales/thumb_3.png respaldo/Arch3

    Ejercicio2Guarde el archivo tree.c en ~/SistArchivos/ y a continuacin complelo (nombre de salida: Tree) para despus ejecutarlo utilizando como directorio objetivo el directorio ~/SistArchivos/ de tal formaquedesplieguelainformacindecadaarchivo.

    1. Desplieguelaejecucindelprograma2. Porqueldirectoriooriginales/Nivelmuestra3directorios?3. Por que si preparacion.sh es un archivo de texto al igual que originales/Listado,

    el,primeroaparececonlaleyenda(x)envezde(o)?4. Porqutree.cyTreesondiferentesparaelS.O.?5. Como identifica a los archivos en respaldo/ ? De qu se diferencian respecto a

    /originales?(UtiliceelshelldelEjercicio1comoreferencia)

    Ejercicio3Guardeelarchivoestado1.cen~/SistArchivos/yacontinuacincompilelo(nombredesalida:Estado1)paradespusejecutarloutilizandocomoargumento~/SistArchivos/originales/

    1. Desplieguelaejecucindelprograma2. Querepresentaloqueregres?3. EjecuteelprogramaEstado1enlosarchivosordinariosen~/SistArchivos/originales/y

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza

  • Laboratoriode SistemasOperativos

    losarchivosordinariosen~/SistArchivos/respaldo.Desplieguelassalidas(losutilizaraenelsiguienteejercicio).

    Ejercicio4Guardeelarchivocopiar.cen~/SistArchivos/yacontinuacincomplelo(nombredesalida:Copiar)Ejecuteelsiguientecomando

    rm ~/SistArchivos/originales -f -R

    1. Porquescorrectalaafirmacindequesepuederecuperarciertainformacin?2. Quearchivoordinarionosepuederecuperar(Utilicedereferenciaelejercicio1)?3. CompruebesusrespuestasanterioresmediantelosInodesqueobtuvoenelejercicio

    anterior.4. SirevisaelshellscriptingnotarqueArch2yArch3fueroncreadosdelmismoarchivo.

    QueocurreconArch2ahora?5. Ejecutecopiarcuyosargumentosseran~/SistArchivos/respaldo/arch1 ~/SistArchivos/respaldo/arch4

    6. Que diferencia a arch1 y arch4 para el S.O.? Como lo puede comprobar?

    ConclusionesMencionesusconclusionespersonalesrespectoasistemasdearchivosenGNU/Linux.LaboratorioAccesodirectoalaligadeformulario:SISTEMADEARCHIVOSRetroalimentacin:SistemadeArchivos

    Referencias: Love, Robert., Linux System Programming, O'REILLY, 2007. Biblioteca: QA76.76.O63 L69 2007 Marquez,Fernando,ProgramacinAvanzadaenUNIX,3a.edicion,2004.BibliotecaQA,76.76,.O63,M37,2006(Reserva)

    Autor:Dr.JuanA.NolazcoFloresCoautores:M.C.RobertoAceves,M.C.JorgeVillaseor, Ing.RalFuentes,J.I.icaza