PDF de programación - Sistemas operativos II

Imágen de pdf Sistemas operativos II

Sistemas operativos IIgráfica de visualizaciones

Publicado el 6 de Julio del 2017
605 visualizaciones desde el 6 de Julio del 2017
12,8 MB
43 paginas
Creado hace 14a (24/05/2009)
Sistemas operativos II

Sistema de ficheros en UNIX

Estructura del sistema de ficheros de unix
El buffer cache
Representación interna de ficheros
Diferencias entre el sistema de ficheros unix System V y unix
BSD
Otras consideraciones

Sistema de ficheros en UNIX

Estructura del sistema de ficheros de unix
El buffer cache
Representación interna de ficheros
Diferencias entre el sistema de ficheros unix System V y unix
BSD
Otras consideraciones

Sistema de ficheros en UNIX

Estructura del sistema de ficheros de unix
El buffer cache
Representación interna de ficheros
Diferencias entre el sistema de ficheros unix System V y unix
BSD
Otras consideraciones

Punto de vista del usuario

I estructura jerárquica
I posibilidad de crear y borrar ficheros
I crecimiento dinámico de los ficheros
I protección de los datos de los ficheros
I tratamiento de los dispositivos periféricos como ficheros
I cada fichero tiene un nombre completo que es una secuencia

de nombres separados por el caracter /; cada uno de los
nombres designa un nombre único en el nombre previo

I un fichero es una sucesión de bytes
I un directorio es un fichero normal
I permisos de acceso controlados (lectura, escritura, ejecución)

rwxrwxrwx

I árbol con un nodo raiz (/):

I cada nodo que no es una hoja es un directorio
I cada hoja: fichero, directorio o dispositivo

I en realidad se trata de un grafo y no de un árbol: enlaces

reales y simbólicos

Punto de vista del kernel

I un fichero es una sucesión de bytes
I un fichero está representado por una estructura pequeña, con
la informacion que el kernel necesita conocer de dicho fichero,
denominada inodo

I propietario y grupo del fichero (uid y gid)
I modo del fichero: entero codificado bit a bit con los permisos

y el tipo de fichero

I fechas (último acceso, última modificación, último cambio en

el inodo)
I tamaño
I número de enlaces reales
I direcciones de disco que ocupa

inodos en openBSD

struct

ufs1_dinode {

u_int16_t
int16_t
union {

di_mode;
di_nlink;

u_int16_t oldids[2];
u_int32_t inumber;

/*
/*

/*
/*

0: IFMT, permissions; see below. */
2: File link count. */

4: Ffs: old user and group ids. */
4: Lfs: inode number. */

} di_u;
u_int64_t
int32_t
int32_t
int32_t
int32_t
int32_t
int32_t
ufs1_daddr_t
ufs1_daddr_t
u_int32_t
int32_t
int32_t
u_int32_t
u_int32_t
int32_t

};

di_size;
di_atime;
di_atimensec;
di_mtime;
di_mtimensec;
di_ctime;
di_ctimensec;
di_db[NDADDR];
di_ib[NIADDR];
di_flags;
di_blocks;
di_gen;
di_uid;
di_gid;
di_spare[2];

8: File byte count. */

/*
/* 16: Last access time. */
/*
20: Last access time. */
/* 24: Last modified time. */
/*
28: Last modified time. */
/* 32: Last inode change time. */
/*
36: Last inode change time. */
40: Direct disk blocks. */
/*
/*
88: Indirect disk blocks. */
/* 100: Status flags (chflags). */
/* 104: Blocks actually held. */
/* 108: Generation number. */
/* 112: File owner. */
/* 116: File group. */
/* 120: Reserved; currently unused */

inodos en openBSD

struct ufs2_dinode {

u_int16_t
int16_t
u_int32_t
u_int32_t
u_int32_t
u_int64_t
u_int64_t
ufs_time_t
ufs_time_t
ufs_time_t
ufs_time_t
int32_t
int32_t
int32_t
int32_t
int32_t
u_int32_t
u_int32_t
int32_t
ufs2_daddr_t
ufs2_daddr_t
ufs2_daddr_t
int64_t

};

0: IFMT, permissions; see below. */
2: File link count. */
4: File owner. */
8: File group. */

di_mode;
/*
di_nlink;
/*
di_uid;
/*
di_gid;
/*
di_blksize;
/*
12: Inode blocksize. */
di_size;
/* 16: File byte count. */
di_blocks;
/*
di_atime;
/*
di_mtime;
/*
di_ctime;
/*
di_birthtime;
/*
di_mtimensec;
/*
di_atimensec;
/*
di_ctimensec;
/*
di_birthnsec;
/*
di_gen;
/* 80: Generation number. */
di_kernflags;
/*
di_flags;
/*
di_extsize;
/*
di_extb[NXADDR];/*
di_db[NDADDR];
di_ib[NIADDR];
di_spare[3];

24: Bytes actually held. */
32: Last access time. */
40: Last modified time. */
48: Last inode change time. */
56: Inode creation time. */
64: Last modified time. */
68: Last access time. */
72: Last inode change time. */
76: Inode creation time. */

84: Kernel flags. */
88: Status flags (chflags). */
92: External attributes block. */
96: External attributes block. */

/* 112: Direct disk blocks. */
/* 208: Indirect disk blocks. */
/* 232: Reserved; currently unused */

inodo en ext2

struct ext2fs_dinode {

u_int16_t
u_int16_t
u_int32_t
u_int32_t
u_int32_t
u_int32_t
u_int32_t
u_int16_t
u_int16_t
u_int32_t
u_int32_t
u_int32_t
u_int32_t
u_int32_t
u_int32_t
u_int32_t
u_int32_t
u_int8_t
u_int8_t
u_int16_t
u_int16_t
u_int16_t
u_int32_t

};

0: IFMT, permissions; see below. */
2: Owner UID, lowest bits */

4: Size (in bytes) */
8: Access time */
12: Create time */
16: Modification time */
20: Deletion time */

24: Owner GID, lowest bits */
26: File link count */
28: Blocks count */
32: Status flags (chflags) */

/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

e2di_mode;
e2di_uid_low;
e2di_size;
e2di_atime;
e2di_ctime;
e2di_mtime;
e2di_dtime;
e2di_gid_low;
e2di_nlink;
e2di_nblock;
e2di_flags;
e2di_linux_reserved1; /* 36 */
e2di_blocks[NDADDR+NIADDR]; /* 40: disk blocks */
e2di_gen;
e2di_facl;
e2di_dacl;
e2di_faddr;
e2di_nfrag;
e2di_fsize;
e2di_linux_reserved2; /* 118 */
e2di_uid_high;
e2di_gid_high;
e2di_linux_reserved3; /* 124 */

/* 100: generation number */
/* 104: file ACL (not implemented) */
/* 108: dir ACL (not implemented) */
/* 112: fragment address */
/* 116: fragment number */
/* 117: fragment size */

/* 120: 16 highest bits of uid */
/* 122: 16 highest bits of gid */

Punto de vista del kernel

I un directorio es un fichero normal. Sus contenidos son las

entradas de directorio, cada una de ellas contiene información
de uno de los ficheros en dicho directorio. (basicamente el
nombre y el número de inodo)

I cada fichero un único inodo pero varios nombres (enlaces)

I enlace real a un fichero: entrada de directorio que se refiere al

mismo inodo

I enlace simbólico a un fichero: fichero especial que contiene el

path al cual es el enlace

I varios tipos de fichero

I fichero normal
I directorio
I dispositivo (bloque o carácter)
I enlace simbólico
I fifo
I socket

constantes en ufs/ufs/dinode.h

#define NDADDR
#define NIADDR

12
3

/* Direct addresses in inode. */
/* Indirect addresses in inode. */

#define MAXSYMLINKLEN_UFS1
#define MAXSYMLINKLEN_UFS2

((NDADDR + NIADDR) * sizeof(ufs1_daddr_t))
((NDADDR + NIADDR) * sizeof(ufs2_daddr_t))

/* File permissions. */
#define IEXEC
#define IWRITE
#define IREAD
#define ISVTX
#define ISGID
#define ISUID

0000100
0000200
0000400
0001000
0002000
0004000

/* File types. */
#define IFMT
#define IFIFO
#define IFCHR
#define IFDIR
#define IFBLK
#define IFREG
#define IFLNK
#define IFSOCK
#define IFWHT

0170000
0010000
0020000
0040000
0060000
0100000
0120000
0140000
0160000

#endif /* _UFS_DINODE_H_ */

/* Executable. */
/* Writeable. */
/* Readable. */
/* Sticky bit. */
/* Set-gid. */
/* Set-uid. */

/* Mask of file type. */
/* Named pipe (fifo). */
/* Character device. */
/* Directory file. */
/* Block device. */
/* Regular file. */
/* Symbolic link. */
/* UNIX domain socket. */
/* Whiteout. */

I una instalación puede tener una o varias unidades físicas
I cada unidad física puede tener uno o varios sistemas de

ficheros (o unidades lógicas)

I cada sistema de ficheros: sucesión de bloques (grupos de

sectores) de 512, 1024, 2048 ...bytes. En Unix System V R2
tiene la siguiente estructuta física

BOOT SUPER BLOQUE LISTA INODOS AREA DE DATOS

I los distintos sistemas de ficheros se montan (llamada al

sistema mount) sobre directorios dando lugar a un único árbol
(grafo) de directorios en el sistema.

I el kernel trata sólo con dispositivos lógicos.

I Cada fichero en el sistema queda perfectamente definido por

un número de dispositivo lógico (sistema de ficheros) y número
de inodo dentro de ese sistema de ficheros

I cada bloque queda perfectamente definido por un número de

dispositivo lógico (sistema de ficheros) y número de bloque
dentro de ese sistema de ficheros

I las estrategias de asignación y contabilidad se hacen en base a

bloques lógicos

I la traducción de direcciones lógicas a direcciones físicas la

hace el manejador de dispositivo (device driver)

I El uso de ficheros en el sistema está gobernado por tres tablas

I tabla de inodos en memoria(inode table) Contiene los

inodos en memoria de los ficheros que están en uso, junto con,
entre otras cosas, un contador de referencias. Global del
sistema, en el espacio de datos del kernel

I tabla ficheros abiertos(file table) Una entrada por cada

apertura de un fichero (varias aperturas del mismo fichero dan
lugar a varias entradas). Contiene el modo de apertura
(O RDONLY, O WRONLY . . . ), offset en el fichero, contador
de referencias y puntero al inodo en la tabla de inodos en
memoria. Global del sistema, en el espacio de datos del kernel

I tabla de descriptores de fichero de usuario (user file

descriptor table) Cada apertura, o cada llamada dup() crean
una entrada en esta tabla (asi como la llamada fork()).
Contiene un referencia a la entrada correspondiente de la tabla
ficheros abiertos. Una para cada proceso, en su u area

ejemplo de tablas de ficheros

Si tenemos dos procesos

I P1
...
df1=open("F1",O_RDONLY);
df2=open("F1",O_RDONLY);
df3=open("F2",O_RDWR);
..
I P2
...
df1=open("F2",O_WRONLY);
df2=dup(df1);
df3=open("F2",O_RDWR|O_APPEND);
..

ejemplo de tablas de ficheros

Sistema de ficheros en UNIX

Estructura del sistema de ficheros de unix
El buffer cache
Representación interna de ficheros
Diferencias entre el sistema de ficheros unix System V y unix
BSD
Otras consideraciones

buffer cache

estructura del buffer cache

I Estructura software para minimizar accesos a disco
I Sistema de buffers de datos con los bloques de disco mas

recientemente

I el kernel necesita leer datos: leer del buffer cache
I el kernel necesita escribir datos: escribe en el buffer cache
I un bloque de disco solo puede estar en un solo buffer
I formado por una serie de buffers organizados en dos

estructuras

I lista de buffers libres (FREELIST). En cada instante contiene
los buffers que n
  • Links de descarga
http://lwp-l.com/pdf4962

Comentarios de: Sistemas operativos II (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad