Sistema de Ficheros Estructura Fsica Realizado por Kepa

  • Slides: 23
Download presentation
Sistema de Ficheros Estructura Física Realizado por Kepa Bengoetxea

Sistema de Ficheros Estructura Física Realizado por Kepa Bengoetxea

Referencias UNIX. Programación Avanzada. Ed: Rama Autor: Fco. Manuel Márquez García

Referencias UNIX. Programación Avanzada. Ed: Rama Autor: Fco. Manuel Márquez García

Sistema de Ficheros: Tipos de Ficheros en Unix Como es evidente todos los ficheros

Sistema de Ficheros: Tipos de Ficheros en Unix Como es evidente todos los ficheros no son iguales y además no tienen el mismo peso específico. Por este motivo vamos a realizar una distinción. Los tipos de archivos que podemos tener en UNIX/Linux son: – Ficheros ordinarios – Directorios – Ficheros especiales – Fifo

Sistema de Ficheros: Tipos de Ficheros en Unix->Ordinarios Los ficheros ordinarios contienen bytes de

Sistema de Ficheros: Tipos de Ficheros en Unix->Ordinarios Los ficheros ordinarios contienen bytes de datos organizados como un array lineal. • Las operaciones que se pueden realizar son: – Leer o escribir cualquier byte del fichero • – Añadir bytes al final del fichero – Truncar el tamaño de un fichero a 0 bytes Dos o más procesos pueden acceder concurrentemente a un mismo fichero. •

Sistema de Ficheros: Tipos de Ficheros en Unix->Directorios Los directorios son los ficheros que

Sistema de Ficheros: Tipos de Ficheros en Unix->Directorios Los directorios son los ficheros que nos permiten dar una estructura jerárquica a los sistemas de ficheros de UNIX. • Su función fundamental consiste en establecer la relación que existe entre el nombre de un fichero y su i-nodo correspondiente. • Por tanto un directorio será un fichero que está constituido por una secuencia de entradas donde en cada entrada está formada por el i-nodo y el nombre de fichero. • Pueden existir varios nombres de ficheros que hacen referencia al mismo fichero. •

Sistema de Ficheros: Tipos de Ficheros en Unix->Directorios La estructura típica de un directorio:

Sistema de Ficheros: Tipos de Ficheros en Unix->Directorios La estructura típica de un directorio: i-nodo nombre del fichero 45 . 2 . . 2395 371 inittab mount . tiene asociado el inodo del directorio actual . . tiene asociado el inodo del directorio padre el kernel maneja los directorios como si fuesen ficheros ordinarios, usando la estructura inode y los bloques de acceso directos e indirectos.

Sistema de Ficheros: Tipos de Ficheros en Unix->Directorios un proceso puede leer el contenido

Sistema de Ficheros: Tipos de Ficheros en Unix->Directorios un proceso puede leer el contenido de un directorio, pero sólo el kernel es capaz de modificarlo. • Puede haber multiples enlaces a un directorio • Los permisos de acceso a un directorio tiene los siguientes significados: – permiso de lectura: permite que un proceso pueda leer el contenido de ese fichero. • Ejm: bash: ls -lias llamadas api de c(libc): open, read, lseek, close. . (se accede igual que alos ficheros ordinarios), ó también se puede usar: opendir, readdir, closedir, seekdir

Sistema de Ficheros: Tipos de Ficheros->Directorios – Permiso de escritura: permite a un proceso

Sistema de Ficheros: Tipos de Ficheros->Directorios – Permiso de escritura: permite a un proceso crear una nueva entrada en el directorio o borrar una existente. A través de las llamadas a sistema. • • – bash: mkdir, touch, . . . llamadas a sistema: creat(crea un fichero o dispositivo), mknod(crea ficheros especiales de bloques o caracteres). . . Permiso de ejecución: Autoriza a un proceso para buscar un fichero o acceder a directorio. • bash: cd, find

Sistema de Ficheros: Tipos de Ficheros->Directorios La conversión de pathname a inodo la realiza

Sistema de Ficheros: Tipos de Ficheros->Directorios La conversión de pathname a inodo la realiza el kernel llamando a “namei” y recorriendo los diferentes directorios. Se aplica por ejemplo cuando: • int open(const char *camino, int flags);

Sistema de Ficheros: Tipos de Ficheros->Especiales. o ficheros de dispositivo van a permitir comunicarse

Sistema de Ficheros: Tipos de Ficheros->Especiales. o ficheros de dispositivo van a permitir comunicarse a los procesos con los dispositivos periféricos(discos, cintas, impresoras, terminales. . . ). Dos tipos de dispositivos: • – – Modo caracter: dispositivo contiene un array de caracteres. Ejm: Impresora, teclado. . . Modo bloque: dispositivo contiene un array de bloques de tamaño fijo(multiplo de 512 bytes) y el kernel gestiona la transferencia con los dispositivos a través de un buffer caché que acelera la transferencia de datos. Ejm: disco duro, cintas, cdroms. . .

Sistema de Ficheros: Tipos de Ficheros->Especiales

Sistema de Ficheros: Tipos de Ficheros->Especiales

Sistema de Ficheros: Tipos de Ficheros->Especiales(No) Los módulos del kernel que gestionan la comunicación

Sistema de Ficheros: Tipos de Ficheros->Especiales(No) Los módulos del kernel que gestionan la comunicación con los dispositivos se conocen como drivers de dispositivo. • • Lo normal es que cada dispositivo tenga su propio driver Existen dispositivos software, se utiliza para acceder como si fuera un fichero. Ejm: /dev/mem • ficheros especiales (dispositivo) tienen asociado un inodo que contiene 2 números, en vez del bloque datos: • – major number: indica el tipo de dispositivo (disco, cinta. . . ) – minor number: indica el número de unidad dentro del dispositivo.

Sistema de Ficheros: Tipos de Ficheros->Especiales(No) Estos números los utiliza el kernel para buscar

Sistema de Ficheros: Tipos de Ficheros->Especiales(No) Estos números los utiliza el kernel para buscar dentro de las tablas (block device switch table y character device switch table) la colección de rutinas que permiten manejar el dispositivo. Esta colección de rutinas constituyen realmente el driver del dispositivo. • Cuando se invoca a una llamada al sistema para realizar una operación de E/S sobre un fichero especial, el kernel se encarga de llamar al driver del dispositivo adecuado. Lo que ocurra acontinuación solo ataña a los diseñadores de drivers. •

Sistema de Ficheros: Tipos de Ficheros->FIFO o tuberias o pipe Los datos de una

Sistema de Ficheros: Tipos de Ficheros->FIFO o tuberias o pipe Los datos de una tubería son transitorios, cuando un dato es leido desaparece. • Se utiliza para comunicar dos procesos. Un proceso abre el fifo para escribir y otro para leer. • El sistema de almacenamiento es parecido al de ficheros ordinarios excepto en que sólo se utilizan las 10 entradas directas del inodo. • Ejm: Si tamaño de bloque es 1 kbyte solo se podrían almacenar 10 kbytes. • Las funciones que usamos para trabajar con fifo son iguales que las de ficheros ordinarios. Ejm: open, close, read, write. . . •

Sistema de Ficheros: Tipos de Ficheros->FIFO o tuberias o pipe • • • Existen

Sistema de Ficheros: Tipos de Ficheros->FIFO o tuberias o pipe • • • Existen 2 tipos de tuberías: – Con nombre – Sin nombre: – Ejm de bash: $ls | sort -r – creadas a través de la llamada “pipe” desde un proceso Con nombre: – creadas a través de la llamada “mknod” desde bash o desde una aplicación.

Tablas de control de acceso a los ficheros Para manipular ficheros el kernel guarda

Tablas de control de acceso a los ficheros Para manipular ficheros el kernel guarda en memoria las siguientes tablas: Tabla de Inodos(TI) Tabla de Ficheros(TF) Tabla de Descriptores de Ficheros(TDF) ó Tabla de Canales

Tablas de control de acceso a los ficheros 0 1 Nivel de Usuario 19

Tablas de control de acceso a los ficheros 0 1 Nivel de Usuario 19 stdin Nivel del kernel

Tablas de control de acceso a los ficheros: TF Es una estructura global del

Tablas de control de acceso a los ficheros: TF Es una estructura global del kernel Contiene una entrada por cada fichero distinto que tiene abierto cada uno de los procesos que se está ejecutando , es decir, distinto para cada proceso. Cada entrada contiene un bloque de datos y un array de punteros a funciones que traducen todas las operaciones genéricas (leer, escribir. . . ) en acciones concretas asociadas a cada tipo de fichero. Bloque de datos contiene los siguientes campos: inodo asociado en la TI, permisos de acceso para el proceso que ha abierto el fichero, offset para saber sobre que byte se va a realizar la operación lectura o escritura, flags de modo de apertura (readonly, writeonly, . . . )para no permitir escrituras si se ha abierto con el flag readonly etc. . .

Tablas de control de acceso a los ficheros: TDF Es una estructura local a

Tablas de control de acceso a los ficheros: TDF Es una estructura local a cada proceso Contiene una entrada por cada fichero abierto por un proceso Cada entrada del array(TDF) consta de = índice o descriptor de fichero + contenido un puntero a una entrada de la tabla de ficheros Este índice se lo da el kernel cuando el proceso usuario realiza una de las siguientes llamadas a sistema: open, creat, dup o link. TDF de un proceso tiene un límite de ficheros abiertos en un instante (ronda sobre 20, índice de 0 a 19)

Tablas de control de acceso a los ficheros: TDF Cuando se arranca un proceso

Tablas de control de acceso a los ficheros: TDF Cuando se arranca un proceso en UNIX, el sistema abre para él, por defecto, tres ficheros que van a ocupar las tres primeras entradas de la tabla de descriptores que son: fichero estándar de entrada (teclado) cuyo índice o descriptor asociado es 0 fichero estándar de salida (pantalla) cuyo índice o descriptor asociado es 1 fichero estándar de errores (pantalla) cuyo índice o descriptor asociado es 2 Puede cambiarse estos ficheros asociados por defecto usando mecanismos de redireccionamiento o tuberías: “<”, ”>” o “|”. Ejm: ls > nom_fich

Tablas de control de acceso a los ficheros: TDF Cuando el proceso A de

Tablas de control de acceso a los ficheros: TDF Cuando el proceso A de usuario quiere realizar una operación de lectura de teclado: invoca una llamada a sistema(trap) de E/S, y el kernel le devuelve un descriptor, para futuras op-s(write, read. . . ). Ejm: fd=open(“”, r). Excepto en aquellas operaciones que trabajamos con ficheros estándar (teclado ó pantalla) que se asocian al crearse el proceso. kernel usa el índice para ir a TDF del proceso A y coger el puntero que apunta a la TF. kernel accede TF con el puntero y obtiene el inodo, permisos, offset. . . kernel accede a TI y obtiene el minor y major number. Ejm: Para acceder al driver de /dev/input/keyboard

Tablas de control de acceso a los ficheros: TDF Cuando el proceso A de

Tablas de control de acceso a los ficheros: TDF Cuando el proceso A de usuario quiere realizar una operación de lectura de teclado: módulo del driver que se comunica con el hardware(teclado)

Herramientas Crear un sistema de ficheros: fdisk, parted, mkfs Arreglar el estado de un

Herramientas Crear un sistema de ficheros: fdisk, parted, mkfs Arreglar el estado de un sistema de ficheros: fsck Montar un sistema de ficheros: mount Ver el estado de los Sistemas: du(disk used by files and folder) df(disk free of mounted file system)