sisoputnfrba / foro

Foro de consultas para el trabajo práctico
147 stars 6 forks source link

Duda Memoria cuando un proceso pasa de Suspended-Ready a Ready y Asignacion de Frames #2753

Closed FacuAntelo closed 2 years ago

FacuAntelo commented 2 years ago

Buenas tardes, al leer el issue #2666 nos surgió una duda si lo que hicimos está bien o mal. Cuando entra un proceso nuevo a memoria, se le reservan la cantidad de marcos que dice en el conf (frames contiguos y que ya no pueden usarse por otro proceso), independientemente si los usa o no y a medida que se solicitan las paginas se van cargando a los frames previamente reservados.

Por otro lado, si el proceso estaba suspendido nos fijamos si ya tenemos las estructuras creadas para ese pid y de ser así, solamente le reservamos los frames indicados en Conf, para ir cargando las paginas a medida que se solicitan. No creamos todas las tablas de vuelta.

¿El procedimiento que estamos realizando esta bien o deberíamos modificarlo?

LeandroCarbajales commented 2 years ago

No termino de entender cuál es la duda específicamente 🙃

si el proceso estaba suspendido nos fijamos si ya tenemos las estructuras creadas para ese pid

Por qué no estarían creadas sus estructuras?

FacuAntelo commented 2 years ago

No termino de entender cuál es la duda específicamente 🙃

si el proceso estaba suspendido nos fijamos si ya tenemos las estructuras creadas para ese pid

Por qué no estarían creadas sus estructuras?

Tenemos entendido por lo que leimos en issues anteriores que la memoria no sabe si el proceso está viene de suspended-ready o de New. Esto no es asi?

La duda seria si esta bien reservar todos los marcos cuando se recibe el proceso basicamente.

LeandroCarbajales commented 2 years ago

Tenemos entendido por lo que leimos en issues anteriores que la memoria no sabe si el proceso está viene de suspended-ready o de New. Esto no es asi?

Sabe si viene de New porque justamente hay un mensaje con el Kernel tipificado en el enunciado como "Inicialización del proceso". Lo que aclarábamos en algunos issues es que no es necesario un mensaje para "desuspender" ya que todas las estructuras ya están creadas y en Memoria (ya que no es necesario swapear tablas). Sin embargo, no estaría mal que lo tengan, sea porque manejan sus tablas de otra manera o porque tienen alguna otra estructura (en su caso la de frames reservados quizás) que necesitan saber cuándo se desuspende un proceso.

La duda seria si esta bien reservar todos los marcos cuando se recibe el proceso basicamente.

Específicamente para el caso de "reservar" frames al desuspender o al llegar un proceso nuevo, no es que esté mal ya que funciona, pero tampoco es necesario ya que si o si van a tener al menos esa cantidad de frames libres a la hora de ejecutarlo (de lo contrario no habrían pasado a Ready)

Te resuelve la duda? Saludos! Lean

FacuAntelo commented 2 years ago

Listo creo que ya entendí, nosotros reservabamos los marcos porque del issue #2704 habiamos entendido que los marcos que asignamos a los procesos debian ser contiguos.

La memoria tiene:

Tablas de páginas de 1er y 2do nivel Marcos contiguos Entonces:

La cantidad de entradas por tabla es la cantidad de filas que puede tener cada tabla de páginas (ya sea de 1er o 2do nivel). La cantidad de marcos por proceso es, justamente, el máximo permitido de marcos que puede tener asignados un mismo >proceso.

Pero ahora veo que lo malinterpretamos. Otra de las cosas que hicimos era que si un proceso pasaba de suspended -ready a ready el kernel le mandaba el pcb a la memoria tambien (No solo cuando viene de New). Por estas dos interpretaciones que hicimos era que nosotros haciamos lo que explique al comienzo del issue. Pero ahora creo que me quedo claro, por lo que te pido que me confirmes estas dos afirmaciones y la duda ya estaria resuelta:

Muchas gracias! 👍

iago64 commented 2 years ago

Buenas! Cómo va?

En respuesta a las 2 afirmaciones que hiciste:

Los marcos que se le asignan a un proceso determinado no están estrictamente contiguos. Exacto, de hecho es parte de lo divertido de la paginación, vos tenes cachitos de memoria de tamaño fijo repartidos y te evitas el problema de la fragmentación

Al pasar de Suspended-Ready a Ready el Kernel no tiene que avisarle a memoria ni enviarle nada. Exacto, en este tp no tienen que mandarle nada cuando un proceso vuelve de suspendido, pueden llegar a tener algun mensaje pero no debería hacer mas que marcar alguna estructura administrativa.

Saludos.-

FacuAntelo commented 2 years ago

Perfecto muchas gracias. Cierro el issue. Saludos!