Está en la página 1de 18

1 1

En esta figura las transiciones faltantes son de listo a bloqueado y de bloqueado a ejecución.
Para que de bloqueado pase a ejecución, tiene que ocurrir un evento externo que permita
pasar al estado listo a espera de que el SO lo ejecute.
Para pasar de listo a bloqueado, éste tuvo que haber estado en ejecución hasta que el SO vea
que no se puede seguir ejecutando y lo mande a bloqueado (a espera de un evento externo).
d)
Una dirección virtual presentada por la MMU contiene 46 bits, de los cuales los 14 bits mas
significativos son utilizados para acceder a un segmento en una cierta tabla de descriptores.
Dicha tabla contiene la dirección de base del segmento en la memoria física.

Luego los 32 bits restantes son el offset para acceder dentro del segmento. El offset en el
segmento virtual resulta el offset en el segmento físico.

2 2

a) Esta transición solo se puede dar desde el estado ejecución, ya que ocurre cuando un
proceso se está ejecutando y el sistema operativo determina que éste no puede
continuar en ese momento, entonces lo pasa a estado bloqueado

b) Cuando una tarea pasa a estado bloqueado, la tarea que se encuentra en el estado
Lista pasa a ejecutarse por decisión del planificador de CPU. Por lo tanto, la tarea que
se encuentra en estado bloqueado no podría pasar a ejecución ya que el cpu se
encuentra ejecutando otra tarea, entonces cuando ocurre un evento externo, pasa al
estado lista a espera que el planificador vuelva a ejecutarla.

3 3 FALTA HACER 3 VACANTE


4 4

a)

La variable entera turno (que al principio es 0) lleva la cuenta acerca de a qué proceso le toca
entrar a su región crítica y examinar o actualizar la memoria compartida. Al principio, el proceso
0 inspecciona turno, descubre que es 0 y entra a su región crítica. El proceso 1 también descubre
que es 0 y por lo tanto se queda en un ciclo estrecho, evaluando turno en forma continua para
ver cuándo se convierte en 1. A la acción de evaluar en forma continua una variable hasta que
aparezca cierto valor se le conoce como espera ocupada.

Por lo general esto se debe evitar, ya que desperdicia tiempo de la CPU, y sólo se utiliza cuando
hay una expectativa razonable de que la espera será corta.

b)

c)
Esta solución brinda la ventaja de no tener al CPU esperando un cambio de variable, por lo tanto,
puede estar realizando otras tareas.

El semáforo mutex se utiliza para la exclusión mutua. Está diseñado para garantizar que sólo un
proceso pueda leer o escribir en el búfer y sus variables asociadas en un momento dado. Esta
exclusión mutua es requerida para evitar un caos. Además, el semáforo permite una
sincronización entre ambas tareas.

5 5

6 6
Contexto del procesador: Es el contenido de todos los registros del procesador que determinan
el estado que tiene el procesador para un proceso o para una tarea en particular.

Procedimiento de cambio de contexto IA32

FreeRTOS
7 7

sacar del anterior y posterior

8 8

FreeRTOS realiza la conmutación de tareas dentro de la interrupción de timer Ticks. El


contexto de la tarea a ser desalojada es guardado en la pila, es decir que cada tarea tiene su
propia pila.

Cuando una tarea (por ejemplo, una taskA) es interrumpida por la interrupción del systick, se
guarda en la pila el contador del programa, la dirección de retorno y si corresponde efectuar
una conmutación de tareas se invoca vPortYieldFromTick(void) y guarda en la pila el contexto
de la tarea. Finalmente, el puntero después de haber guardado el contexto, queda apuntado al
tope de pila.

Si el SO decide desalojar a la taskA, guarda el valor actual del puntero de pila en una tabla
(donde se guardan el estado de las tareas) y recupera de esa tabla el valor de puntero de pila
guardado para la tarea a ejecutar (en este ejemplo una TaskB) y lo copia en el Stack Pointer.
Entonces lo que ve el Stack Pointer es otra pila con distinto contenido, procediendo a
recuperar el contexto de la tarea “portRESTORE_CONTEXT()”.

Finalmente, continua con el retorno de interrupción, este implica recuperar de la pila el


contador de programa para que el procesador pase a ejecutar código de la taskB.

9 9
a. Cada tarea tiene su propio espacio, ya que toda tarea tiene su propia tabla de
descriptores, entonces cuando se está ejecutando una tarea la tabla de descriptores
local que está a la vista es la de esa tarea y no otra. Como las tareas se encuentran
aisladas, desconocen la existencia de otra tarea. Por lo tanto, cada tarea puede
acceder únicamente a sus propios segmentos y a los segmentos comunes que están
disponibles a través de la tabla de descriptores global.

Para acceder a datos de un nivel superior, se utilizan las puertas de llamada que son
puntos de acceso controlados para acceder a un lugar determinado del código pasando
una cantidad de parámetros determinada.

Una puerta de llamada consiste en un descriptor ubicada en la tabla de descriptores


global, contenido por un selector y un desplazamiento. Son los valores que se van a
copiar en el selector de código y en el puntero de instrucción. Es un puntero a la
dirección de entrada al código al cual se intenta acceder.

10 10
11 11 MISMO QUE 10

12 12
13 13

Objetivo memoria caché: hacer como que tenemos un espacio de direcciones grandes (tamaño
que nos permite el espacio de direcciones virtual) y que trabaja a velocidad de la memoria física
(RAM) sobre un espacio más chico.

b.

El bus de direcciones presenta una dirección (generada por el procesador) de la cual se requieren
sus datos. Existe una lógica (conocida como controlador) que se encarga de verificar la existencia
de la dirección existente.

La dirección de memoria se considera dividida en tres partes: desplazamiento, índice y etiqueta.


Las dos primeras tienen relación con las dimensiones de la memoria.

La memoria de etiquetas es el lugar donde se realizan las comparaciones. Asociada a cada


etiqueta hay una línea, donde se encuentra efectivamente el dato.

La búsqueda de la dirección comienza obteniendo el valor del campo índice, el cual indica la
línea que hay que buscar. Para dicha línea, se compara el campo "etiqueta" de la dirección con
las etiquetas de cada una de las N vías. Si alguna de ellas coincide es porque el dato se encuentra
en esa vía, por lo que el controlador se desplaza dentro de esa línea tanto como indique el campo
"desplazamiento"

Si no se encuentra el dato, el controlador debe elegir entre alguna de las N vías para reemplazar
el dato. Para ello, se utiliza el criterio de vecindad temporal.

14 14 FALTA COPIAR 14

a. Ver ejercicio 13
b.

15

FIFO

LRU
16 16 FALTA COPIAR 16

Igual al 15b

17

a)

Mecanismo o forma de gestionar la memoria de forma que permita poseer un mayor espacio
de memoria que la físicamente disponible.

La idea básica detrás de la memoria virtual es que cada programa tiene su propio espacio de
direcciones, el cual se divide en trozos llamados páginas. Cada página es un rango contiguo de
direcciones. Estas páginas se asocian a la memoria física, pero no todas tienen que estar en la
memoria física para poder ejecutar el programa. Cuando el programa hace referencia a una
parte de su espacio de direcciones que está en la memoria física, el hardware realiza la
asociación necesaria al instante. Cuando el programa hace referencia a una parte de su espacio
de direcciones que no está en la memoria física, el sistema operativo recibe una alerta para
buscar la parte faltante y volver a ejecutar la instrucción que falló.

b)

Diferencia entre página y segmento:

Segmento: Bloque de memoria de tamaño variable. En IA32 los segmentos poseen contenido
coherente. Los segmentos se definen por su contenido: segmento de dato, segmento de código,
segmento de pila. El manejo de segmentos nos da un mejor manejo de protecciones y
prioridades.

Página: Bloque de memoria de tamaño fijo, donde este tamaño suele ser relativamente chico.
Son divisiones por tamaño (4Kb).
Para lograr una mayor agilidad y performance, como también protección se hace uso de los
segmentos paginados, ya que dada combinación nos brinda lo anteriormente dicho.

c) Los conceptos de vecindad temporal y espacial son conceptos empíricos que la mayoría de los
programas aplican esos principios. Estos principios se cumplen de por si por cómo se escriben
los programas, pero podrían no cumplirse.

Vecindad espacial: si un objeto fue accedido recientemente, es altamente probable que algún
objeto cercano vaya a ser requerido próximamente

Vecindad temporal: si un objeto fue accedido recientemente es altamente probable que vaya a
ser requerido próximamente.

d) Ejercio 1 d

18 18

a) Ejercicio 1 d

b) El bit A es aprovechado para realizar estadísticas de uso del segmento, para poder ser
usado luego por algún algoritmo de reemplazo. Cuando se realiza un acceso a alguna
dirección dentro de un segmento, este bit se pone en 1 de manera automática.

El bit P tiene la finalidad de avisar cuando un segmento está presente en la memoria y


esto es realizado una vez que el sistema operativo carga el segmento a la memoria física.
Cuando se sabe que el segmento está presente en memoria y se lo trata de acceder,
ocurre un acierto en el acceso de memoria, caso contrario si no está presente ocurrirá
un fallo y el SO tendrá que cargarlo.

EXTRA
El concepto de memoria virtual consiste en que los programas trabajan sobre un espacio de
direcciones definido por un bus de 46 bits, 2 a la 46 da 64 TBytes. Esa dirección virtual se traduce
mediante la unidad de manejo de memoria en una dirección de 32. Si esta unidad determina
que esa dirección está cargada en la memoria física de la RAM, entonces esa dirección es
presentada al BUS y entonces se produce al acceso a la memoria. En caso de una falla se produce
una excepción y el sistema operativo tiene que tomar esa dirección de 46 bits (dirección virtual)
ir a buscar el bloque de memoria al disco, se trae a la memoria y se actualiza la MMU y continua
la ejecución.

La memoria virtual se basa en el intercambio de bloques de memoria entre la memoria


secundaria y la memoria principal, la memoria tiene que estar dividida en segmentos, páginas o
segmentos paginados. La arquitectura IA-32 se divide en segmentos, aunque se puede adicionar
una etapa posterior de paginación para que sea más ágil el sistema, manejando bloques de
tamaño uniforme más chicos.

´´´´Los conceptos de vecindad temporal y espacial son conceptos empíricos que la mayoría de
los programas aplican esos principios. Estos principios se cumplen de por si por como se escriben
los programas, pero podrían no cumplirse.

Vecindad espacial: si un objeto fue accedido recientemente, es altamente probable que algún
objeto cercano vaya a ser requerido próximamente

Vecindad temporal: si un objeto fue accedido recientemente es altamente probable que vaya a
ser requerido próximamente. ´´´´´´´´´´

Si un objeto hace mucho tiempo que no es accedido, es poco probable que vaya a serlo en breve.

Diapositiva 14

Cuando la CPU presenta una dirección virtual de unidad de manejo de memoria tiene que
traducirla de una dirección física. La unidad de manejo de memoria está implementada
mediante una serie de tablas, estas contienen principio de descriptores de segmentos.

Diapositiva 16

La dirección virtual es presentada a la unidad de manejo de memoria, con los 14 bits más
significativos se accede un segmento en una tabla de descriptores. Este segmento nos da la
dirección de base de ese segmento en la memoria física.

Entonces de los 46 bits de la dirección virtual, los 14 más significativos sirven para seleccionar
un descriptor de segmento y de ahí sacamos la dirección de base del segmento. Y los 32 bits
menos significativos son el offset para acceder dentro de ese segmento. El offset en el segmento
virtual es el offset en el segmento físico.

Diapositiva 15

Los 32 bits menos significativos, el desplazamiento puede estar dado de cualquier manera.
Puede estar dado por el offset, por el contenido de algún registro. Los 14 bits más significativos
surgen de un selector de segmento, los selectores de segmentos son registros, como por
ejemplo CS, DS, SS. Son registros que tienen 16 bits pero los 2 bits menos significativos no
contribuyen al direccionamiento. Son bits que se utilizan para asignar un nivel de privilegio
requerido. Y los 14 bits más significativos son los que forman parte de la dirección virtual.
Diapositiva 19

Con los 14 bits más significativos del selector de segmento se selecciona un descriptor, se accede
a una tabla de descriptores que está en algún lugar conocido por el sistema operativo. Con el
contenido del selector de segmento correspondiente se accede y se selecciona un descriptor de
segmento.

Diapositiva 17

Ese descriptor de segmento tiene la siguiente información. Tiene la dirección de base de 32 bits
de memoria física y el límite son 20 bits que se utiliza para determinar el límite del segmento.

Hay otros campos de atributos además que dicen por ejemplo cual es el nivel de privilegio que
tiene un determinado segmento, para ver si cuando intentamos acceder estamos accediendo
con los privilegios adecuados. Con esos 2 bits se determinan 4 niveles de privilegios, ahí se
pueden establecer permisos o restricciones de accesos.

Hay otros bits que tienen que ver con el manejo de memoria virtual, que son el bit P (presencia)
y el bit A (bit de accedido). El bit P es un bit que cuando el sistema operativo carga un segmento
en memoria física, pone que el segmento está presente en memoria. Entonces cuando ese
segmento está presente en memoria y se lo intenta acceder entonces hay un acierto en el acceso
de memoria. Si ese segmento al que intentamos acceder no está presente se produce el fallo y
el sistema operativo tiene que cargarlo y luego de esto marca que el bit de presencia está activo
(en 1).

El bit A se pone en 1 automáticamente cada vez que se realiza un acceso a alguna dirección
dentro de ese segmento. Este bit de accedido puede ser aprovechado para hacer una estadística
de uso del segmento, a los fines del uso de algún algoritmo de remplazo.

El campo TIPO se utiliza para definir cuál es el tipo de segmento. Si es un segmento de código,
de datos, etc.

Diapositiva 20

Esta arquitectura maneja por un lado una tabla de descriptores globales (GDTR) es común a
todas las tareas. Y una tabla de descriptores locales (LDTR) que es privada para cada tarea.

La memoria virtual está dividida en páginas y la memoria física está dividida en marcos de página
del mismo tamaño.

Diferencia entre página y segmento:

La página es un bloque de tamaño fijo y relativamente chico (4KB). El segmento tiene un tamaño
variable ya que depende de qué cantidad de contenido tiene adentro (código, datos, pila, etc)
el contenido es coherente.

El contenido de una página puede ser mixto, ósea puede tener una parte de un código y otra
parte de un dato.

El manejo de segmentos permite un mejor manejo de protecciones y prioridades.


Los segmentos paginados se utilizan para combinar los dos elementos anteriores esto permite
lograr agilidad y performance con la paginación y mayor protección con la segmentación.

También podría gustarte