PDF de programación - Sistemas operativos II

Imágen de pdf Sistemas operativos II

Sistemas operativos IIgráfica de visualizaciones

Publicado el 5 de Julio del 2017
506 visualizaciones desde el 5 de Julio del 2017
3,9 MB
45 paginas
Creado hace 17a (19/12/2006)
Sistemas operativos II

Memoria en UNIX

Introducción
Espacio de direcciones de los procesos
Organización de la memoria física
Robo de páginas e intercambio

Memoria en UNIX

Introducción
Espacio de direcciones de los procesos
Organización de la memoria física
Robo de páginas e intercambio

Memoria en UNIX

Introducción
Espacio de direcciones de los procesos
Organización de la memoria física
Robo de páginas e intercambio

Generalidades

I Los procesos se ejecutan en un espacio de direcciones virtual
I Usualmente la memoria física está dividida en trozos de

tamaño fijo denominados marcos o páginas físicas

I Tamaño de página depende del procesador. En sistemas

actuales típicamente 4Kbytes

I Lo procesos trabajan con direcciones virtuales compuestas por

número de página y desplazamineto dentro de la página.
Ejemplo: en un sistema con páginas de 4K la dirección
0x800c03a9, corespondería a desplazamiento 0x3a9 en la
página 0x800c0

I La traslación de número de página y desplazamiento a número
de página física (marco) y desplazamiento se hace en tiempo
de ejecución con ayuda del hardware

Esquema del direccionamiento en la arquitectura i386

Esquema del direccionamiento en la arquitectura i386

Generalidades

I Si el sistema soporta memoria virtual

I un proceso no tiene que estar en memoria totalmente para
poderse ejecutar: la tabla de páginas ha de tener un bit que
indica si está o no en memoria.

I El S.O. guarda información de dónde en el almacenamiento
secundario está cada página no residente en memoria física

I Cuando se crea un proceso se necesita memoria para las

estructuras proc y u area

I el código y los datos inicializados residen en el fichero de disco
I la pila y los datos sin inicializar se ajustan durante la ejecución
I solo se asigna memoria para aquellas páginas que son

referenciadas: paginación bajo demanda pura

Generalidades

I Las páginas de memoria no usadas se sacan de la memoria:

robo de páginas.

I En unix el proceso que realiza esta tarea es pageout,

pagedaemon o paged

I Si se produce hiperpaginación (los procesos tienen menos
páginas que su working set en memoria), se intercambian
procesos enteros a disco.

I En unix esto lo hace el swapper (sched)

Memoria en UNIX

Introducción
Espacio de direcciones de los procesos
Organización de la memoria física
Robo de páginas e intercambio

Memoria en unix: regiones

I En su acepción mas simple, un proceso consta de tres

regiones: código, datos y pila.

I código (text) Contiene el código de las funciones del

programa. Es de solo lectura

I datos (data + bss) Contiene los datos (variables globales,

tanto inicializadas como sin inicialización explicita) del
proceso. El mónticulo (heap) suele ser parte de esta región

I pila (stack). Usado para pasar los parámetros a las funciones y

por éstas para sus variables locales

memoria en unix: regiones

I Cada proceso tiene una tabla de regiones del proceso con
referencias a las entradas en la tabla de regiones del kernel
que constituyen el proceso

I cada entrada de la tabla de regiones que contiene

I donde (dirección virtual) comienza y termina la región
I permisos de la región (solo lectura, lectura-escritura, lectura

ejecución . . . )

I puntero a entrada en la tabla de regiones del kernel

memoria en unix: regiones

I El kernel contiene una tabla de regiones del kernel
I En la tabla de regiones del kernel hay un puntero a los mapas
de traducción de direcciones virtuales a reales (dependientes
de la implementación)

I Cada entrada en la tabla de regiones del kernel contiene
I puntero al inodo cuyos contenidos se cargan en esa región
I tipo de región (código, datos, pila, memoria compartida,

mmaped file)

I temaño de la región
I localización de la región en memoria física
I contador de referencias

operaciones sobre regiones

I las operaciones sobre regiones que hace el kernel son
I asignar una región (fork(), exec(), shmget())
I encadenar una región a un proceso (fork(), exec(),

shmat())

I cambiar el tamaño de una región (brk(), sbrk(), (malloc()))
I cargar una región (exec())
I desasignar una región (exec(), exit(), shmctl(IPC RMID, ))
I desencadenar una región del espacio de direcciones de

un proceso (exec(), exit(), shmdt())

I duplicar una región (fork())

memoria en System V R4

I El espacio de direcciones de un proceso se almacena como una

lista enlazada de sus segmentos (código, datos, pila . . . )

I en la estructuta proc hay una referencia a una estructura as

(address space)

I la estructura as contiene la referencia a la primera de las

estructuras de la lista que describe los segmentos que
constituyen el espacio de direcciones

I cada segmento esta descrito por una estructura seg que

contiene una referencia a una estructura segvn data.

memoria en System V R4

I Según el tipo de segmento (vnode o anónimo) en la

estructura segvn data hay la referencia adecuada

I segmento vnode. Es un segmento asociado con un fichero que
tiene un vnode. Se trata de código o de un fichero sobre el que
se ha hecho mmap(). El miembro vp de la estructura
segvn data tiene esta referencia

I segmento anónimo. Segmento no asociado a un fichero, p.e.
datos o pila. Está descrito por una estructura anon map. Las
páginas anónimas de este segmento ocupan direcciones
virtuales contiguas y sus descriptores se mantienen en el array
anon de estas estructuras

memoria en System V R4: estructura as

La información mas relevante en la estructura as es

I primer segmento (región) en el espacio de direcciones

(struct seg *a segs)

I último segmeto referenciado (struct seg *a seglast)
I tamaño espacio virtual (size t a size)
I memoria fisica usada (size t a rss)
I informacio traducción direcciones (hardware address

translation) (struct hat a hat)

Ejemplo struct as en OpenSolaris

struct as {

a_flags;

/* protect certain fields in the structure */
/* as attributes */
/* used for collecting statistics */
/* used by as_rangelock */
/* hat structure */

kmutex_t a_contents;
uchar_t
uchar_ta_vbits;
kcondvar_t a_cv;
structhat *a_hat;
structhrmstat *a_hrm; /* ref and mod bits */
caddr_ta_userlimit;
struct seg *a_seglast;/* last segment hit on the addr space */
krwlock_t a_lock;
size_ta_size;
struct seg *a_lastgap;/* last seg found by as_gap() w/ AS_HI (mmap) */
struct seg *a_lastgaphl; /* last seg saved in as_gap() either for */

/* protects segment related fields */
/* size of address space */

/* highest allowable address in this as */

/* AS_HI or AS_LO used in as_addseg() */
/* segments in this address space. (AVL tree) */
/* watched pages (procfs) */
/* mappings changed, rebuild a_objectdir */

avl_tree_t a_segtree;
avl_tree_t a_wpage;
uchar_ta_updatedir;
timespec_t a_updatetime;/* time when mappings last changed */
vnode_t**a_objectdir;
size_ta_sizedir;
struct as_callback *a_callbacks; /* callback list */
void *a_xhat;
proc_t*a_proc;

/* object directory (procfs) */
/* size of object directory */

/* list of xhat providers */
/* back pointer to proc */

};

memoria en System V R4: estructura seg

La estructura seg describe los segmentos del espacio de direcciones
del proceso

I direccion virtual cominezo del segmento (addr t s base)
I tamaño del segmento (unsigned s size)
I referencia a la estructura as que contiene este segmento

(struct as *s as)

I punteros para manterner la lista de estructuras seg que

configuran el espacio de direcciones del proceso (struct seg
*s next,*s prev)

I array de punteros a las posibles operaciones sobre el segmento

(struct seg ops *s ops)

I referencia a la estructura segvn data con los detalles

específicos de este segmento (void *s data)

Ejemplo struct seg en OpenSolaris

struct seg {

/* base virtual address */
/* size in bytes */
/* max page size code */
/* flags for segment, see below */

caddr_ts_base;
size_ts_size;
uint_ts_szc;
uint_ts_flags;
structas *s_as; /* containing address space */
avl_node_t s_tree;/* AVL tree links to segs in this as */
structseg_ops *s_ops;/* ops vector: see below */
void *s_data;
/* private data for instance */

};

memoria en System V R4: estructura segvn data

I la estructura segvn data, accesible desde la estructura seg

contiene los detalles específicos del segmento

I protección del segmento (miembro unsigned char prot):

indica qué accesos están permitidos al segmento (lectura
escritura o ejecución)

I protección de las páginas (miembro unsigned char

pageprot): indica si deben comprobarse los bits de protección
de cada página

I indicación de si se ha reservado swap para este segmento

size t swresv

I tipo de compartición del segmento (miembro type:

MAP PRIVATE, MAP SHARED)

I si el segmento es un segmento asociado a un vnodo, una

referencia a dicho vnodo, asi como el offset, figuran en esta
estructura en los miembros vp y offset

I si el segmento está formado por páginas anónimas la

información relativa a dichas páginas esta accesible a través de
struct anon map *amp

Ejemplo struct segvn data en OpenSolaris

typedef struct

segvn_data {

/* protect segvn_data and vpage array */
/* serialize insertions into seg_pcache */
/* true if per page protections present */
/* current segment prot if pageprot == 0 */
/* maximum segment protections */
/* type of sharing done */
/* starting offset of vnode for mapping */
/* vnode that segment mapping is to */
/* starting index into anon_map anon array */
/* pointer to anon share structure, if needed */
/* per-page information, if needed */
/* mapping credentials */

krwlock_t lock;
kmutex_t segp_slock;
uchar_t pageprot;
uchar_t prot;
uchar_t maxprot;
uchar_t type;
u_offset_t offset;
struct
vnode *vp;
ulong_t anon_index;
anon_map *amp;
struct
vpage *vpage;
struct
cred *cred;
struct
size_t
swresv;
uchar_t advice;
uchar_t pageadvice;
ushort_t flags;
ssize_t softlockcnt;
lgrp_mem_policy_info_t policy_info; /* memory allocation policy */

/* swap space reserved for t
  • Links de descarga
http://lwp-l.com/pdf4879

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