Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4KB-7KB
heap
14KB-16KB stack
Suponiendo que referenciamos la dirección virtual 100, esa dirección se encuentra en code,
comprobamos que 100 <= 2KB. Como se cumple sumamos su base con la dirección
virtual: 32KB + 100 = 32868
Suponiendo otra dirección perteneciente a heap como 4200, debemos hallar donde se
encuentra realmente la dirección buscada, por lo que hay que restar la dirección donde
inicia heap en el espacio de direcciones (4KB) con el desplazamiento dado (4200), se
obtiene 104 <= 3KB por lo que sumamos su base (34KB) obteniendo como dirección física
34920.
2. Localizar un segmento
Para identificar el tipo de segmento podemos usar 2 estrategias:
➢ Estrategia explícita: se trocea el espacio de direcciones en segmentos.
Segment sirve para identificar el contenido del segmento (00-code, 10-stack o 01-
heap, en el espacio de direcciones anterior). El resto de los bits del segmento
contienen el offset a sumar a la “base”. Además, debe aparecer el size y grow
support que indica si es creciente(heap) o decreciente(stack).
Desventaja: el tamaño máximo está limitado y mermado y puede que no sea posible
albergar un programa determinado.
3. Stack
Ejemplo: En el ejemplo anterior hemos calculado direcciones físicas de heap y de code,
pero no de stack (que crece en negativo).
Esto indica que stack crece negativamente.
Por lo que vamos a suponer que queremos
acceder a la dirección virtual 15KB.
Debemos hallar la dirección que es 15KB-14KB = 1KB y este restárselo a base →28KB –
1KB = 27KB.
4. Compartición
La compartición de segmentos de memoria entre espacios de direcciones diferentes ,de
forma transparente al proceso. Esto crea la necesidad de proteger esos segmentos contra
modificaciones. Esto se hace usando bits de protección que indica si las direcciones se
pueden leer, escribir y/o ejecutar.
4. Fine-grain vs coarse-grain
La granularidad es dividir el espacio de direcciones en fragmentos de mayor o menor
tamaño.