Closed Gdepablo closed 2 years ago
Buenas! Muchos de estos conceptos los deberían haber visto esta semana o estar viendo hoy en la clase de Memoria Virtual :) Por otro lado, entiendo que mañana tienen práctica en campus a las 14hs, y siendo que hay muchas dudas conceptuales que se puede hacer engorroso explicar por texto, les propongo que se pasen (todo el grupo) por el aula 27 a las 12hs con la clase de memoria virtual fresca y el enunciado a mano para poder ayudarlos a relacionar estos temas y estructurar el módulo Memoria. Les pido si me pueden confirmar asistencia.
Saludos! Lean
Hay uno que no puede ir, pero el resto vamos a estar.
Resuelto lo anterior, me quedé pensando en quién es el que avisaría a memoria si una página fue modificada como para aplicar la modificación? O sea a mí (memoria) quien me avisa que se modificó una página?
Cierro el issue ya que lo vimos en soporte presencial :)
Leí los issues #2690 , #2692 , #2563 , #2582 , #2655 Y no entendí ninguno para ser sincero Para empezar, ¿Qué es el módulo SWAP en este caso? Entiendo que en Memoria Virtual, el Swapping es cuando se reemplaza una página por otra. En este caso que tenemos paginación jerárquica de 2 niveles, tendríamos que reemplazar la página del segundo nivel y actualizar la referencia? Pero cómo sería eso? O sea cómo consigo la referencia para actualizar? Tendría que hacer que matcheen (o sea concuerden) el número de la página de primer nivel (digamos 5) con el frame de la pagina de segundo nivel a la que quiero acceder?
"Además debe implementar memoria virtual, más específicamente, paginación bajo demanda. En este contexto, se definirá una asignación de cantidad de marcos fija definida por archivo de configuración y un scope de reemplazo local. El algoritmo de reemplazo será definido por archivo de configuración, pudiendo ser Clock o Clock Modificado."
Paginación bajo demanda lo entiendo, lo que no entiendo es cómo funciona. O sea tendríamos que tener una especie de struct que sea area de swapping o algo asi? Para saber qué páginas andan en memoria real y qué páginas no. Porque es imposible diferenciar. Creo que esto está relacionado conque no entiendo el archivo ese de SWAPPING que hay que usar.
Estructuras La memoria contará principalmente con 3 estructuras: Un espacio contiguo de memoria (representado por un void*). Este representará el espacio de usuario de la misma, donde los procesos podrán leer y/o escribir. Las tablas de páginas, que representarán el espacio de Kernel. Un archivo por proceso, que representarán el espacio de SWAP de cada uno.
El espacio contiguo de memoria cómo lo programamos? Es decir, habría que ponerle a nuestra tabla de paginas (definida como un struct) una variable que sea tamaño_memoria? que sea sizeof(void) ? o lo hace con malloc el CPU llegado el momento? No entiendo sinceramente jaja.
"Las tablas de páginas que representarán el espacio del Kernel" No entiendo cómo diferencias espacio de usuario de espacio de Kernel o cómo lo instancias o parecido. Si nos pueden centrar, joya.
"Un archivo por proceso, que representarán el espacio de SWAP de cada uno."
¿Cómo es esto? No entiendo. Qué es esto de un archivo por proceso? Lo tenemos que generar en plan como si fuera un archivo CSV que se crea cada que un proceso ejecuta memoria?
"Inicialización del proceso El módulo deberá crear las estructuras administrativas necesarias y enviar como respuesta el número de tabla de página de primer nivel de ese proceso.
Suspensión de proceso Al ser suspendido un proceso, se debe liberar su espacio en memoria, escribiendo en SWAP solamente la información necesaria. Se debe tener en cuenta que, para la realización de este trabajo práctico, no se requiere el swapeo de tablas de páginas.
Finalización de proceso Al ser finalizado un proceso, se debe liberar su espacio de memoria y eliminar su archivo de SWAP correspondiente. Se debe tener en cuenta que, para la realización de este trabajo, no es requerido eliminar las tablas de páginas del proceso."
Inicializacion: ¿Quién inicializa, el CPU o el Kernel? No me queda claro. ¿Cómo inicializa? ¿Se crean las tablas y las páginas ahí? Cómo hacen los procesos para "crear" sus páginas? Escriben su info en la tabla de páginas y nosotros le aplicamos la jerarquización? O sea p.ej mi algoritmo SJF escribe en memoria cada que ejecuta una ráfaga, digamos en la página 10, y entonces yo le tengo que aplicar una serializacion a esa página 10 o cómo funciona? (Con serializacion me refiero a crear la primera tabla que es un pasamanos para llegar a la segunda)
Suspension: Liberar su espacio en memoria cómo es? Un free? Como si hubieramos hecho un malloc o parecido? Va todo en hilo de no entender qué es lo del tamaño que es de tamaño void*
Finalizacion: Liberamos con free de nuevo? Y sobre eliminar el archivo de SWAP es eliminarlo de disco o cómo porque qué es el archivo SWAP exactamente? Y si no elimino las tablas de páginas por proceso, entonces sólo elimino el SWAP y dejo las páginas como están?
Creo que eso es todo, gracias!