Hola,
Te respondo tus consultas
1. Los aspectos de implementación explicados previo a la introducción del esquema de partición, ¿se corresponden con ese esquema en específico? Esto no se aclara.
Conceptos como el registro de reubicación y registro límite se indagan bajo títulos como "protección de memoria", pero en otros pdf se presentan implementaciones diferentes.
No me queda claro a qué refieres con "aspectos de implementación" previos a presentar el esquema de particiones. Si te refieres a los conceptos presentados en las 23 slides previas de la clase Administración de Memoria I te respondo que si, son conceptos generales que se aplican en todos los métodos posteriores, en algunos casos con variantes especificas. Los conceptos de registro de reubicación y registro límite no se presentan para "protección de memoria", se presentaron de modo genérico en el primer tema del curso y en la clase Administración de Memoria I registro de reubicación se introduce en la slide 18 "Tipos de direccionamiento". Registro límite si se introduce en la slide "Asignacion de memoria a nivel del sistema" dado que se presenta allí su principal función, para verificar accesos válidos a la memoria.
2. El pdf dice "El sistema operativo define particiones de tamaño variable", pero no se especifica si es variable entre procesos, o para un mismo proceso: ¿puede un segmento ya creado cambiar de tamaño?.
Particiones de tamaño variable significa precisamente eso, las particiones que se crean en la memoria son de tamaño variable para poder cumplir con los requisitos de memoria de cada proceso. Entiendo que está bien explicado en la primera frase de la slide "El sistema operativo define particiones de tamaño variable y las asigna a los procesos". Todos los casos que siguen presentan ejemplos de ese concepto, asignando particiones a los procesos de acuerdo con sus solicitudes de memoria. La frase "para un mismo proceso: ¿puede un segmento ya creado cambiar de tamaño?" no parece bien formulada, porque en este esquema no se segmenta la memoria. Si te refieres a las particiones, una vez asignadas son de tamaño fijo durante toda la ejecución del proceso.
3. ¿La totalidad de un proceso está siempre dentro de una misma partición?, no se aclara.
A nivel general (para el esquema de particiones variables, que aplica segmentación ni paginación, técnicas que se presentan posteriormente) la respuesta es que si, todo proceso está siempre dentro de una misma partición, y así deben considerarlo en los ejercicios planteados en el práctico. Hilando más fino, entre los requerimientos de memoria de un proceso están las bibliotecas compartidas, que podrían ser referencias a otra partición, pero eso corresponde a detalles específicos de implementación, para tener un manejo más eficiente de la memoria.
4. ¿Cómo funciona cada heap y stack?: ¿las solicitudes de memoria en heap crean una partición nueva?, ¿o expanden una ya existente?
No se crean particiones nuevas, se trabaja siempre dentro de la partición asignada al proceso.
5. Se dice que el sistema delega la administración del heap a librerías de usuario, pero no se explica cómo el sistema se encarga de administrar el stack en el esquema de particiones variables.
Se me ocurre que el compilador podría culcular cuál será el uso máximo de stack, y esa información se usa al asignar la partición; ¿es correcto?.
A los efectos de lo que presentamos en el curso, la información sobre uso (estimado) de memoria es determinada por el compilador y pasada al loader, que indica los requerimientos al sistema operativo. El archivo ejecutable contiene información al respecto.
6. Se menciona que "Las estrategias de asignación sufren de fragmentación externa", asumo que se refiere específicamente al esquema de asignación de particiones (por contraste con lo visto sobre paginación). Luego, se presenta el concepto de fragmentación interna, pero no se aclara: ¿sufre el esquema de asignación de particiones fragmentación interna también, o es inmune a esta?. A continuación, se menciona que "para evitar el problema, se divide la memoria física en bloques de tamaño fijo", aquí ya no sé si aún se sobre-entiende que se habla del esquema antes mencionado. ¿Puede el esquema de particiones variables catalogarse como tal si la memoria se particiona "en bloques fijos" (entendiendo que son relativamente pequeños)?
Toda la información que se presenta en un determinado punto de las slides refieren al tema (o temas) ya presentado(s). Nunca refieren a métodos no presentados. "Las estrategias de asignación sufren de fragmentación externa" refieren a las estrategias presentadas hasta ese punto, para implementar la gestión de memoria basada en particiones variables.
La fragmentación interna es la sobrecarga por gestionar huecos muy pequeños, puedes ver claramente que todas las estrategias presentadas hasta ese punto de la slide adolecen de ese problema.
La última parte de tu pregunta no la entiendo. La estrategia de dividir la memoria física en bloques de tamaño fijo y asignar la memoria en unidades del tamaño del bloque se aplica efectivamente sobre el esquema presentado (no entiendo sobre qué otro esquema se podría aplicar ... nunca presentaremos una estrategia sobre un esquema aún no presentado). La partición sigue siendo de tamaño variable, solo que se se definen bloques (de tamaño fijo) como subdivisión. En este caso la memoria asignada a un proceso puede ser ligeramente mayor que la memoria solicitada (en el último bloque). La diferencia entre lo solicitado y lo asignado es precisamente la fragmentación interna (memoria no utilizada, interna a una partición).
Tengo algunas otras preguntas que se desvían del tema del título. Las adjunto aquí para evitar hacer varios post:
7. En el pdf se menciona: "A diferencia de la carga dinámica, el enlace dinámico de bibliotecas compartidas generalmente requiere la intervención del sistema operativo.". Previamente se había establecido que todo acceso a memoria es una operación privilegiada, por lo que me confunde la afirmación de que pueda cargarse una rutina en memoria (carga dinámica) sin que el sistema intervenga.
El enlace dinámico de bibliotecas compartidas requiere de la intervención del sistema operativo que es quien conoce en qué direcciones de memoria están cargadas las bibliotecas compartidas. La carga dinámica refiere a que una rutina no se carga en memoria física hasta que sea invocada y esta carga la realiza el cargador (loader) que debe incluir soporte para reubicación. No es correcto que "todo acceso a memoria es una operación privilegiada", esa idea la tomaste de alguna slide ? por favor nos avisas para corregirlo si ese es el caso.
8. ¿Cómo afecta al rendimiento la carga dinámica?. En la sección de swapping se establece que mover datos de la memoria secundaria a la memoria principal es una operación muy lenta, por lo que me cuestiono si la carga dinámica no ralentizaría mucho la ejecución de una rutina (ya que habría que esperar a que se cargue, no estaría cargada de antemano). Si es el caso, ¿es viable de todos modos?
Si es viable. La reducción de desempeño (por el tiempo de carga) se compensa porque no se carga todo el programa inicialmente y además permite un uso más eficiente de la memoria. Lo que se debe pagar es el tiempo de latencia adicional para acceder a la rutina a cargar, pero las ventajas en gestión de memoria compensan ese costo.
9. Como desventaja de la reubicación dinámica se lista "Los procesos requieren una cantidad fija de memoria física, (...) cada proceso activo debe caber en la memoria". ¿Implica esto que la reubicación dinámica es de alguna forma incompatible con la carga dinámica? (ya que esta se presenta anteriormente como una solución a ese mismo problema).
No es incompatible, de hecho en la slide 11 se indica que "El enlace dinámico, utilizado en conjunto con la carga dinámica, permite un uso mas eficiente de la memoria, dado que ´
las bibliotecas dinámicas se cargan una única vez en memoria principal". La reubicación dinámica por si sola no mejora o resuelve el problema de que se debe asignar a los procesos toda la cantidad (fija) de memoria física que requieren.
Como comentario general ,te sugiero que este tipo de preguntas las realices en el teórico. De este modo será posible dialogar, entender tus preguntas y explicarte de mejor manera. Es muy difícil contestar todo este tipo de consultas conceptuales en un mail o post. Las slides tratan ser autocontenidas, pero las frases que se incluyen en las slides no permiten incluir todos los detalles de todos los temas.
Saludos
SN