Capítulo 3 Gestión de la memoria

1. Conocimientos básicos de la memoria.

1691417032694

La memoria puede almacenar datos. Antes de ejecutar el programa, es necesario colocarlo en la memoria antes de que la CPU pueda procesarlo, lo que alivia el conflicto de velocidad entre la CPU y el disco duro.

1691417237817

El parámetro de dirección en la instrucción proporciona directamente la dirección de almacenamiento real (dirección física) de la variable x

1. Absolutamente monte

Carga absoluta: en tiempo de compilación, si sabe dónde se colocará el programa en la memoria, el compilador generará un código objeto con una dirección absoluta . El cargador carga programas y datos en la memoria de acuerdo con las direcciones en el módulo de carga.

La carga absoluta sólo funciona en entornos de un solo programa.

2. Carga reubicable (reubicación estática)

Reubicación estática: también conocida como carga reubicable. La dirección del módulo cargado después de la compilación y la vinculación comienza desde 0. La dirección utilizada en la instrucción y la dirección donde se almacenan los datos son todas direcciones lógicas relativas a la dirección inicial. El módulo de carga se puede cargar en la ubicación adecuada de la memoria según la condición actual de la memoria. Al cargar, la dirección se "reubica" y la dirección lógica se convierte en una dirección física (la conversión de dirección se completa una vez durante la carga).

La característica de la reubicación estática es que cuando un trabajo se carga en la memoria, se debe asignar todo el espacio de memoria que requiere, si no hay suficiente memoria, el trabajo no se puede cargar.

Una vez que un trabajo ingresa a la memoria, no se puede mover durante la operación ni puede solicitar espacio en la memoria.

3. Carga dinámica en tiempo de ejecución (reubicación dinámica)

Reubicación dinámica: también conocida como carga dinámica en tiempo de ejecución. Las direcciones de los módulos cargados después de la compilación y vinculación comienzan desde 0. Después de que el cargador carga el módulo de carga en la memoria, no convierte inmediatamente la dirección lógica en una dirección física, sino que pospone la conversión de la dirección hasta que el programa se ejecuta realmente . Por lo tanto, todas las direcciones después de cargarlas en la memoria siguen siendo direcciones lógicas. Este método requiere el apoyo de un registro de reubicación.

1691418149769

Tres formas de vincular:

1. Enlace estático: antes de ejecutar el programa, primero conecte cada módulo de destino y las funciones de biblioteca que requieren en un archivo ejecutable completo (módulo de carga) y luego ya no lo desmonte.

2. Vinculación dinámica durante la carga: cuando cada módulo de destino se carga en la memoria, el método de vinculación se vincula durante la carga.

3. Enlace dinámico en tiempo de ejecución: el módulo de destino solo se vincula cuando es necesario durante la ejecución del programa. La ventaja es que es fácil de modificar y actualizar, y es fácil compartir el módulo de destino.

1691418255328

2. Concepto de gestión de la memoria.

1691418514179

1691418629798

Como administrador de los recursos del sistema, el sistema operativo, por supuesto, también necesita administrar la memoria. ¿Qué debería administrar?

1. El sistema operativo es responsable de asignar y reciclar espacio de memoria.

2. El sistema operativo necesita proporcionar alguna tecnología para expandir lógicamente el espacio de memoria.

3. El sistema operativo debe proporcionar una función de traducción de direcciones, que es responsable de convertir la dirección lógica y la dirección física del programa.

4. El sistema operativo debe proporcionar funciones de protección de memoria . Asegúrese de que cada proceso se ejecute en su propio espacio de almacenamiento sin interferir entre sí.

1691418755641

La protección de la memoria puede adoptar dos enfoques:

Método 1: establezca un par de registros de límite superior e inferior en la CPU para almacenar las direcciones de límite superior e inferior del proceso. Cuando la instrucción del proceso quiere acceder a una determinada dirección, la CPU comprueba si está fuera de los límites.

Método 2: utilice el registro de reubicación (también conocido como registro de dirección base) y el registro de dirección de límite (también conocido como registro de límite) para la verificación de límites. El registro de reubicación almacena la dirección física inicial del proceso. El registro de dirección límite almacena la dirección lógica máxima del proceso.

1691419074147

3. Cobertura e intercambio

1691498172878

Cubriendo ideas tecnológicas:

Divida el programa en segmentos (módulos). Los segmentos utilizados con frecuencia residen en la memoria y los segmentos utilizados con poca frecuencia se transfieren a la memoria cuando es necesario.

La memoria se divide en un "área fija" y varias "áreas superpuestas".
Los segmentos que requieren memoria permanente se colocan en el "área fija" y no se recuperarán (a menos que finalice la ejecución).

Los segmentos que no se utilizan comúnmente se colocan en el "área de cobertura", se transfieren a la memoria cuando es necesario y se transfieren fuera de la memoria cuando no se necesitan.

El programador debe declarar la estructura de sobrescritura y el sistema operativo completa la sobrescritura automática.

Desventajas: No es transparente para los usuarios, lo que aumenta la carga de programación del usuario.

Las ideas de diseño de la tecnología de intercambio (swap):

Cuando el espacio de la memoria es limitado, el sistema intercambia temporalmente algunos procesos en la memoria a la memoria externa e intercambia algunos procesos en la memoria externa que tienen condiciones de ejecución en la memoria (los procesos se programan dinámicamente entre la memoria y el disco)

El estado del proceso que se intercambia temporalmente fuera de la memoria externa y está en espera es suspendido (suspender).

El estado de suspensión se puede subdividir en dos estados: suspensión lista y suspensión de bloqueo.

1. En los sistemas operativos con funciones de intercambio, el espacio en disco generalmente se divide en dos partes: el área de archivos y el área de intercambio.

1691498814055

El área de archivos se utiliza principalmente para almacenar archivos y persigue principalmente la utilización del espacio de almacenamiento, por lo que la gestión del espacio del área de archivos adopta un método de asignación discreta;

El área de intercambio solo ocupa una pequeña parte del espacio en disco y los datos del proceso intercambiados se almacenan en el área de intercambio. Dado que la velocidad de intercambio afecta directamente la velocidad general del sistema, la gestión del espacio del área de intercambio persigue principalmente la velocidad de entrada y salida de intercambio . Por lo tanto, el área de intercambio generalmente adopta el método de asignación continua (puede comprenderlo después estudiando el capítulo de gestión de archivos). En resumen, la velocidad de E/S del área de intercambio es más rápida que la del área de archivos.

2. El intercambio generalmente se realiza cuando se están ejecutando muchos procesos y la memoria es escasa, y se pausa cuando la carga del sistema disminuye. Por ejemplo: si
encuentra que las fallas de página ocurren a menudo cuando se ejecutan muchos procesos, significa que la memoria es escasa. En este momento, puede intercambiar algunos procesos; si la tasa de fallas de página cae significativamente, puede pausar el intercambio. .

3. Los procesos bloqueados se pueden intercambiar primero, los procesos de baja prioridad se pueden intercambiar; para evitar que los procesos de baja prioridad se intercambien poco después de ser transferidos a la memoria, algunos sistemas también considerarán la residencia del proceso en la memoria. .tiempo...

(Nota: la PCB residirá en la memoria y no se cambiará desde la memoria externa)

1691498929898

4. Método de gestión de asignación continua

1691498982970

Asignación continua: significa que se debe asignar un espacio de memoria continuo para el proceso del usuario.

asignación contigua única

En un único método de asignación continua, la memoria se divide en área del sistema y área de usuario.1691499134222

El área del sistema generalmente se encuentra en la parte de dirección baja de la memoria y se usa para almacenar datos relacionados con el sistema operativo; el área de usuario se usa para almacenar datos relacionados con los procesos del usuario.

Solo puede haber un programa de usuario en la memoria y el programa de usuario ocupa exclusivamente todo el espacio del área de usuario.

Ventajas: implementación simple ; sin fragmentación externa ; se puede usar tecnología de sobrescritura para expandir la memoria; no se requiere necesariamente protección de la memoria (por ejemplo: el primer sistema operativo de PC MS-DOS).

Desventajas: solo se puede utilizar en sistemas operativos de un solo usuario y una sola tarea; tiene fragmentación interna ; utilización de memoria extremadamente baja.

Asignación de partición fija

En la década de 1960 aparecieron los sistemas que soportaban la multiprogramación. Para cargar varios programas en la memoria sin interferir entre sí, todo el espacio del usuario se dividía en varias particiones de tamaño fijo, en cada partición sólo se cargaba una tarea, lo que constituye la primera y el método de administración de memoria más simple que puede ejecutar múltiples programas.

1691499329295

Las particiones son del mismo tamaño:

Carece de flexibilidad, pero es muy adecuado para situaciones en las que se utiliza una computadora para controlar múltiples objetos idénticos (por ejemplo, si una planta siderúrgica tiene n hornos de fabricación de acero idénticos, la memoria se puede dividir en n áreas del mismo tamaño para almacenar n hornos) Programa de control de hornos de acero)

Los tamaños de partición varían:

Mayor flexibilidad para satisfacer las necesidades de procesos de diferentes tamaños. Divida según el tamaño de los trabajos que se ejecutan con frecuencia en el sistema (por ejemplo: divida en varias particiones pequeñas, una cantidad adecuada de particiones medianas y una pequeña cantidad de particiones grandes)

El sistema operativo necesita establecer una estructura de datos: una tabla de descripción de particiones para realizar la asignación y el reciclaje de cada partición. Cada entrada de la tabla corresponde a una partición, generalmente organizada por tamaño de partición. Cada entrada incluye el tamaño, la dirección inicial y el estado de la partición correspondiente (si se ha asignado).

1691499500807

Cuando se va a cargar un programa de usuario en la memoria, el programa del núcleo del sistema operativo recupera la tabla según el tamaño del programa de usuario, encuentra una partición no asignada que pueda cumplir con el tamaño, la asigna al programa y luego cambia el estado a "asignado
" ".

Ventajas: Implementación sencilla, sin residuos externos.

Desventajas: a. Cuando el programa de usuario es demasiado grande, es posible que todas las particiones no puedan satisfacer las necesidades. En este momento, se debe utilizar tecnología de sobrescritura para resolver el problema, pero esto reducirá el rendimiento; b. La fragmentación interna será generado y la utilización de la memoria es baja.

Asignación dinámica de particiones

La asignación de partición dinámica también se denomina asignación de partición variable. Este método de asignación no divide previamente las particiones de memoria, sino que cuando el proceso se carga en la memoria, las particiones se crean dinámicamente de acuerdo con el tamaño del proceso y el tamaño de las particiones es exactamente adecuado para las necesidades del proceso. Por lo tanto, el tamaño y la cantidad de particiones del sistema son variables. (por ejemplo: supongamos que el tamaño de la memoria de una computadora es de 64 MB, el área del sistema es de 8 MB y el área del usuario es de 56 MB en total...)

La asignación de partición dinámica no tiene fragmentación interna, pero sí fragmentación externa.

Fragmentación interna, si algunas partes del área de memoria asignada a un proceso no se utilizan.

La fragmentación externa se refiere a algunas particiones libres en la memoria que son demasiado pequeñas para usarse.

Si el espacio libre total en la memoria originalmente podía cumplir con los requisitos de un determinado proceso, pero debido a que el proceso requiere una pieza completa de espacio de memoria continuo, estos "fragmentos" no pueden satisfacer las necesidades del proceso.
La fragmentación externa se puede resolver mediante técnicas de compactación.

1. ¿Qué estructura de datos debería utilizar el sistema para registrar el uso de la memoria?

1691499790711

Tabla de particiones gratuita:

Cada partición libre corresponde a una entrada de la tabla. La entrada de la tabla contiene información como el número de partición, el tamaño de la partición y la dirección inicial de la partición.

Cadena de partición gratuita:

El puntero hacia adelante y el puntero hacia atrás se configuran respectivamente al principio y al final de cada partición. Al principio también se puede registrar información como el tamaño de la partición.

1691499869265

2. Cuando muchas particiones libres pueden satisfacer la demanda, ¿qué partición se debe seleccionar para la asignación?

Al cargar un nuevo trabajo en la memoria, se debe seleccionar una partición de la tabla de particiones libres (o cadena de particiones libres) y asignarla al trabajo de acuerdo con un determinado algoritmo de asignación dinámica de particiones. Dado que el algoritmo de asignación tiene un gran impacto en el rendimiento del sistema, se ha estudiado exhaustivamente.

Siguiente sección

3. ¿Cómo realizar operaciones de reciclaje y asignación de particiones?

1691500585510

Algoritmo de asignación de particiones dinámicas

Algoritmo de asignación de particiones dinámicas: en el método de asignación de particiones dinámicas, cuando muchas particiones libres pueden satisfacer la demanda, ¿qué partición se debe seleccionar para la asignación?

1691500653322

algoritmo de primer ajuste

Idea de algoritmo: comience a buscar desde una dirección baja cada vez y encuentre la primera partición libre que pueda alcanzar el tamaño.

Cómo implementar: las particiones libres se organizan en orden creciente de dirección. Cada vez que se asigna memoria, se busca secuencialmente la cadena de particiones libres (o tabla de particiones libres) para encontrar la primera partición libre cuyo tamaño cumpla con los requisitos.

algoritmo de mejor ajuste

Idea de algoritmo: dado que la asignación dinámica de particiones es un método de asignación continua, el espacio asignado a cada proceso debe ser un área completa continua. Por lo tanto, para asegurar que haya un gran espacio continuo cuando llegue el "gran proceso", se pueden dejar tantas áreas libres grandes como sea posible, es decir, dar prioridad al uso de áreas libres más pequeñas.

Cómo implementar: Las particiones libres están vinculadas en orden de capacidad creciente. Cada vez que se asigna memoria, se busca secuencialmente la cadena de particiones libres (o tabla de particiones libres) para encontrar la primera partición libre cuyo tamaño cumpla con los requisitos.

Desventajas: Seleccionar la partición más pequeña para la asignación cada vez dejará cada vez más bloques de memoria pequeños y difíciles de usar. Por lo tanto, este método generará una gran cantidad de desechos externos.

algoritmo de peor ajuste

También conocido como la idea del algoritmo de ajuste más grande
: para resolver el problema del mejor algoritmo de adaptación, es decir, dejar demasiados fragmentos pequeños que son difíciles de usar, se puede usar primero el área libre continua más grande en cada asignación, de modo que después de la asignación el área libre restante no sea demasiado pequeña y sea más conveniente de usar.

Cómo implementarlo: las particiones libres están vinculadas en orden descendente de capacidad. Cada vez que se asigna memoria, se busca secuencialmente la cadena de particiones libres (o tabla de particiones libres) para encontrar la primera partición libre cuyo tamaño cumpla con los requisitos.

Desventaja: seleccionar la partición más grande para la asignación cada vez puede hacer que el área libre que queda después de la asignación sea más grande y más utilizable, pero este método hará que el área libre continua más grande se agote rápidamente. Si llega un "gran proceso" más tarde, no habrá ninguna partición de memoria disponible.

Algoritmo de adaptación de vecinos

Idea de algoritmo: el primer algoritmo de adaptación busca desde el principio de la cadena cada vez. Esto puede dar lugar a muchas pequeñas particiones libres en la parte de direcciones bajas, y cada búsqueda de asignación debe pasar por estas particiones, lo que aumenta la sobrecarga de búsqueda. Si comienza a buscar desde el final de la última búsqueda cada vez, puede resolver el problema anterior.

Cómo implementar: las particiones libres se organizan en orden creciente de direcciones (se pueden organizar en una lista circular enlazada). Cada vez que se asigna memoria, se busca en la cadena de particiones libres (o tabla de particiones libres) comenzando desde el final de la última búsqueda y se encuentra la primera partición libre cuyo tamaño cumpla con los requisitos.

El primer algoritmo de adaptación tiene que buscar desde cero cada vez, y cada vez necesita recuperar particiones pequeñas con direcciones bajas. Pero esta regla también determina que cuando hay particiones más pequeñas en la parte de dirección baja que pueden satisfacer la demanda, será más probable que se utilice la partición pequeña en la parte de dirección baja y también será más probable que se retenga la partición grande. en la parte de dirección alta (eventualmente Ventajas del algoritmo de adaptación óptima)

Las reglas del algoritmo de adaptación de proximidad pueden hacer que las particiones libres en las partes de dirección baja y alta se usen con la misma probabilidad, lo que da como resultado que las particiones grandes en la parte de dirección alta tengan más probabilidades de usarse y dividirse. en particiones pequeñas y, finalmente, sin llevar a particiones grandes. La partición está disponible (desventaja del algoritmo de aptitud máxima)

En conjunto, entre los cuatro algoritmos, el primer algoritmo de adaptación tiene un mejor efecto.

1691501446869

5. Método de gestión de asignación no continua

1691501566448

Asignación continua: se debe asignar un espacio de memoria continuo para el proceso del usuario.

Asignación no contigua: al proceso de usuario se le puede asignar algo de espacio de memoria disperso.

5.1 Gestión básica del almacenamiento de paginación

Gestión básica del almacenamiento paginado

Divida el espacio de la memoria en particiones del mismo tamaño (por ejemplo: cada partición tiene 4 KB) y cada partición es un "marco de página" (marco de página = marco de página = bloque de memoria = bloque físico = página física). Cada marco de página tiene un número, es decir, "número de marco de página" (número de marco de página = número de marco de página = número de bloque de memoria = número de bloque físico = número de página física), y el número de marco de página comienza desde 0.

El espacio de direcciones lógicas del proceso también se divide en partes iguales al tamaño del marco de la página, y cada parte se denomina "página" o "página". Cada página también tiene un número, que es el "número de página", y el número de página también comienza desde 0.

1691502103955

Consejos: es fácil confundirse para los principiantes——

Página, página vs marco de página, marco de página, página física

Número de página, número de página versus número de marco de página, número de marco de página, número de página física

El sistema operativo asigna espacio de memoria a cada proceso en marcos de página. Cada página del proceso se coloca en un marco de página. En otras palabras, existe una correspondencia uno a uno entre las páginas del proceso y los marcos de página de la memoria.
No es necesario almacenar cada página de forma consecutiva y se puede colocar en marcos de páginas no adyacentes.

Estructura de datos importante: tabla de páginas

Para saber dónde se almacena cada página de un proceso en la memoria, el sistema operativo debe crear una tabla de páginas para cada proceso. Nota: La tabla de páginas generalmente existe en la PCB (Bloque de control de procesos)

1691502674723

1. Un proceso corresponde a una tabla de páginas
2. Cada página del proceso corresponde a una entrada de la tabla de páginas
3. Cada entrada de la tabla de páginas consta de un "número de página" y un "número de bloque"
4. La tabla de páginas registra la página del proceso y la relación de mapeo almacenada real entre bloques de memoria

1. ¿Qué tamaño tiene cada entrada de la tabla de páginas y cuántos bytes ocupa?

Por ejemplo: suponiendo que el tamaño de la memoria física de un sistema es de 4 GB y el tamaño de la página es de 4 KB, ¿cuántos bytes debe tener al menos cada entrada de la tabla de páginas? Tamaño del bloque de memoria = tamaño de página = 4 KB = 212 B

Un total de 4 GB de memoria se dividirán en 232/212 = 220 bloques de memoria.

El rango de números de bloque de memoria debe ser 0~220-1

El número del bloque de memoria debe estar representado por al menos 20 bits.

Se deben utilizar al menos 3B para representar el número de bloque (3*8=24 bits)

Dado que el número de página está implícito, cada entrada de la tabla de páginas ocupa 3B y almacenar toda la tabla de páginas requiere al menos 3*(n+1)B.

Puntos de prueba importantes importantes: el número de bloques de memoria en la computadora → al menos cuántos bytes ocupa el número de bloque en la entrada de la tabla de páginas

Nota: ¡La tabla de páginas registra solo el número del bloque de memoria, no la dirección inicial del bloque de memoria!
La dirección inicial del bloque de memoria J = J*tamaño del bloque de memoria

Supongamos que cada entrada de la tabla de páginas en la tabla de páginas se almacena continuamente a partir de la dirección de memoria X. ¿Cómo encontrar la entrada de la tabla de páginas con el número de página i? La dirección de almacenamiento de la entrada de la tabla de páginas número i = X+3*i

1691503341255

Las entradas de la tabla de páginas se almacenan continuamente, por lo que el número de página puede ser implícito y no ocupa espacio de almacenamiento (análogo a una matriz)

2. ¿Cómo realizar la conversión de una dirección lógica a una dirección física a través de la tabla de páginas?

Características: Aunque cada página del proceso se almacena de forma discreta, las páginas se almacenan continuamente en su interior.

Si desea acceder a la dirección lógica A, entonces

① Determine el " número de página " P correspondiente a la dirección lógica A

②Busque la dirección inicial de la página p en la memoria (es necesario buscar la tabla de páginas)

③ Determine el " desplazamiento en página " W de la dirección lógica A

La dirección física correspondiente a la dirección lógica A = la dirección inicial de la página p en la memoria + el desplazamiento w dentro de la página

Por ejemplo: en un determinado sistema informático, el tamaño de página es 50B. Si el tamaño del espacio de direcciones lógicas de un proceso es 200 B, ¿cuál es el número de página y el desplazamiento de página correspondiente a la dirección lógica 110?

1691504259538

1691504536563

Conclusión: si el tamaño de cada página es de 2 kB y la dirección lógica está representada por un número binario, los últimos K bits son el desplazamiento dentro de la página y el resto es el número de página.

1691504857372

La estructura de direcciones lógicas de la gestión del almacenamiento de paginación es la siguiente:1691504972734

La estructura de la dirección contiene dos partes: la primera parte es el número de página y la última parte es el desplazamiento w dentro de la página. En el ejemplo que se muestra en la figura anterior, la longitud de la dirección es de 32 bits, de los cuales los bits 0 a 11 son el "desplazamiento dentro de la página" o "dirección en la página"; los bits 12 a 31 son el "número de página".

Si hay K bits que representan "desplazamiento dentro de la página", significa que el tamaño de una página en este sistema es de 2k unidades de memoria.

Si hay M bits que representan el "número de página", significa que en este sistema, un proceso puede tener hasta 2 millones de páginas.

1691505139420

1691505183324

mecanismo básico de traducción de direcciones

Centrarse en comprender y memorizar los principios y procesos del mecanismo básico de conversión de direcciones (un conjunto de mecanismos de hardware utilizados para convertir direcciones lógicas en direcciones físicas)

El mecanismo básico de traducción de direcciones puede convertir direcciones lógicas en direcciones físicas con la ayuda de la tabla de páginas del proceso.

Por lo general, se configura un registro de tabla de páginas (PTR) en el sistema para almacenar la dirección inicial F de la tabla de páginas en la memoria y la longitud de la tabla de páginas M. Cuando el proceso no se ejecuta, la dirección inicial y la longitud de la tabla de páginas se colocan en el bloque de control de procesos (PCB). Cuando se programa el proceso, el kernel del sistema operativo las colocará en el registro de la tabla de páginas.

Nota: el tamaño de la página es una potencia entera de 2

Suponiendo que el tamaño de la página es L, el proceso de transformación de la dirección lógica A a la dirección física E es el siguiente:

1691584814477

① Calcule el número de página Р y el desplazamiento de página w (si se calcula manualmente usando números decimales, P=A/L, W=A%L; pero cuando la computadora está realmente funcionando, la estructura de direcciones lógicas es fija, por lo que Hardware de la computadora puede obtener la representación binaria del número de página y desplazarse dentro de la página más rápido)

② Compare el número de página P y la longitud de la tabla de páginas M. Si P>= M, se genera una interrupción fuera de límites; de lo contrario, la ejecución continúa. (Nota: el número de página comienza desde 0 y la longitud de la tabla de páginas es al menos 1, por lo que también estará fuera de límites cuando P = M)

③La dirección de la entrada de la tabla de páginas correspondiente al número de página P en la tabla de páginas = dirección inicial de la tabla de páginas F + número de página p * longitud de la entrada de la tabla de páginas Saque el contenido de la entrada de la tabla de páginas b, que es el número de bloque de memoria. (Preste atención a la diferencia entre la longitud de la entrada de la tabla de páginas, la longitud de la tabla de páginas y el tamaño de la página. La longitud de la tabla de páginas se refiere al número total de entradas de la tabla de páginas en esta tabla de páginas, es decir, el número total de páginas; la tabla de páginas la longitud se refiere a cuánto espacio de almacenamiento ocupa una entrada de la tabla de páginas; el tamaño de página se refiere a cuánto espacio de almacenamiento ocupa una página)

④Calcule E = b*L+W y utilice la dirección física obtenida E para acceder a la memoria. (Si el número de bloque de memoria y el desplazamiento de página se expresan en binario, entonces concatenar los dos es la dirección física final)

Ejemplo: si el tamaño de página L es de 1 Kbytes y el número de bloque de memoria b = 8 correspondiente a la página número 2, convierta la dirección lógica A = 2500 a la dirección física E.

Descripción equivalente: un determinado sistema tiene direcciones de bytes. En la estructura de direcciones lógicas, el desplazamiento de página ocupa 10 bits (lo que indica que el tamaño de una página es 210B = 1 KB y el número de bloque de memoria correspondiente a la página número 2 es b = 8 La dirección lógica A=2500 se convierte en la dirección física E.

① Calcule el número de página y el desplazamiento dentro de la página.
Número de página P=A/L= 2500/1024=2; desplazamiento dentro de la página W=A%L= 2500%1024= 452

②Según las condiciones de la pregunta, la página número 2 no cruza el límite y el número de bloque de memoria que almacena es b = 8.

③Dirección física E= b*L+W= 8* 1024+425 = 8644

En un sistema con gestión de almacenamiento de paginación (administración de páginas), siempre que se determine el tamaño de cada página, se determina la estructura de direcciones lógicas. Por tanto, las direcciones en la gestión de páginas son unidimensionales. Es decir, siempre que se proporcione una dirección lógica, el sistema puede calcular automáticamente el número de página y el desplazamiento de página, y no es necesario decirle explícitamente al sistema cuántos bits ocupa el desplazamiento de página en esta dirección lógica.

1691585655820

Conclusión: en teoría, una longitud de entrada de la tabla de páginas de 3B puede representar el rango de números de bloques de memoria, pero para facilitar la consulta de la tabla de páginas, a menudo se permite que una entrada de la tabla de páginas ocupe más bytes, de modo que cada página pueda caber. un número entero de entradas de la tabla de páginas.

1691585852418

Mecanismo de traducción de direcciones con tabla rápida.

1691585953539

La tabla rápida (hardware especializado), también conocida como búfer de búsqueda de traducción (TLB), es un caché cuya velocidad de acceso es mucho más rápida que la de la memoria (¡TLB no es memoria!) y se utiliza para almacenar copias de las entradas de la tabla de páginas a las que se accedió recientemente. ., lo que puede acelerar la transformación de direcciones. En consecuencia, la tabla de páginas en la memoria a menudo se denomina tabla lenta.

1691586487080

Después de introducir la tabla rápida, el proceso de transformación de direcciones.

①La CPU proporciona la dirección lógica y una pieza de hardware calcula el número de página y el desplazamiento dentro de la página, y compara el número de página con todos los números de página en la tabla rápida.

② Si se encuentra un número de página coincidente, significa que la entrada de la tabla de páginas a la que se accede tiene una copia en la tabla rápida, luego se extrae directamente el número de bloque de memoria correspondiente a la página y luego el número de bloque de memoria y la página Los desplazamientos se empalman para formar una dirección física y finalmente acceden a la unidad de memoria correspondiente a la dirección física. Por lo tanto, si la tabla rápida llega, acceder a una determinada dirección lógica solo requiere un acceso a la memoria.

③ Si no se encuentra ningún número de página coincidente, debe acceder a la tabla de páginas en la memoria, encontrar la entrada de la tabla de páginas correspondiente, obtener el número del bloque de memoria donde está almacenada la página y luego concatenar el número del bloque de memoria con el desplazamiento dentro del página para formar una dirección física. Finalmente, acceda a la unidad de memoria correspondiente a la dirección física. Por lo tanto, si la tabla rápida falla, acceder a una determinada dirección lógica requiere dos accesos a la memoria (nota: después de encontrar la entrada de la tabla de páginas, debe almacenarse en la tabla rápida al mismo tiempo para un posible acceso nuevamente más tarde. Pero si la tabla rápida falla ha estado lleno, las entradas antiguas de la tabla de páginas deben reemplazarse de acuerdo con un algoritmo determinado)

Dado que consultar la tabla rápida es mucho más rápido que consultar la tabla de páginas, siempre que llegue la tabla rápida, se puede ahorrar mucho tiempo.

Debido al principio de localidad, en términos generales, la tasa de aciertos de las tablas rápidas puede alcanzar más del 90%.

Ejemplo: un determinado sistema utiliza una gestión básica del almacenamiento de paginación y adopta un mecanismo de traducción de direcciones con una tabla rápida. Se necesitan 1 us para acceder a la tabla rápida una vez y 100 us para acceder a la memoria una vez. Si la tasa de aciertos de la tabla rápida es del 90%, ¿cuál es el tiempo promedio que se tarda en acceder a una dirección lógica?
(1+100)*0.9+(1+100+100)*0.1=111 us
Algunos sistemas admiten tablas rápidas y tablas lentas Las tablas se buscan al mismo tiempo. Si es así, el consumo de tiempo promedio debe ser (1+100)*0.9+(100+100)*0.1=110.9 us. Si no se utiliza el mecanismo de tabla rápida, acceder a
una La dirección lógica requiere 100 + 100 = 200 us. Obviamente, después de la introducción del mecanismo de tabla rápida, acceder a una dirección lógica es mucho más rápido.

1691586964244

principio de localidad

Localidad temporal: si se ejecuta una instrucción en el programa, es probable que se vuelva a ejecutar pronto; si se ha accedido a determinados datos, es probable que se vuelva a acceder a los datos pronto. (Porque hay muchos bucles en el programa)

Localidad espacial: una vez que un programa accede a una determinada unidad de almacenamiento, es muy probable que también se acceda poco después a las unidades de almacenamiento cercanas. (Porque muchos datos se almacenan continuamente en la memoria)

En el mecanismo básico de traducción de direcciones presentado en la sección anterior, cada vez que se accede a una dirección lógica, es necesario consultar la tabla de páginas en la memoria. Debido al principio de localidad, la misma entrada de la tabla de páginas se puede encontrar muchas veces seguidas.

1691587102398

La diferencia entre TLB y la caché ordinaria: solo hay copias de las entradas de la tabla de páginas en la TLB, mientras que puede haber copias de otros datos en la caché ordinaria.

5.2 Tabla de páginas de dos niveles

1691587196435

Cómo consultar la tabla de páginas según el número de página: la ubicación de almacenamiento de la entrada de la tabla de páginas correspondiente a la página K = dirección inicial de la tabla de páginas + K*4

Las entradas de la tabla de páginas se pueden encontrar usando este método solo si todas las entradas de la tabla de páginas se almacenan continuamente.

Según el principio de localidad, en muchos casos, un proceso solo necesita acceder a determinadas páginas dentro de un período de tiempo para ejecutarse normalmente. Por lo tanto, no es necesario que toda la tabla de páginas resida en la memoria.

1. ¿Cómo solucionamos el problema de que los procesos deben almacenarse continuamente en la memoria?

Paginación del espacio de direcciones del proceso y creación de una tabla de páginas para registrar la ubicación de almacenamiento de cada página.

La misma idea también se puede utilizar para resolver el problema de "las tablas de páginas deben almacenarse continuamente" dividiendo las tablas de páginas que deben almacenarse continuamente en páginas.

1691587770864

1691588022781

1691588108623

Varios detalles a tener en cuenta.

1. Si se utiliza un mecanismo de tabla de páginas de varios niveles, el tamaño de la tabla de páginas en cada nivel no puede exceder una página.

1691588441945

2. Análisis de los tiempos de acceso a la memoria de la tabla de páginas de dos niveles (suponiendo que no exista un mecanismo de tabla rápido)

El primer acceso a la memoria: acceda a la tabla del directorio de páginas en la memoria

Segundo acceso a la memoria: acceda a la tabla de páginas secundarias en la memoria

El tercer acceso a la memoria: acceda a la unidad de memoria de destino

1691588624586

5.3 Método básico de gestión de almacenamiento segmentado

1691588715381

El espacio de direcciones del proceso: se divide en varios segmentos de acuerdo con la relación lógica del programa en sí. Cada segmento tiene un nombre de segmento (en lenguajes de bajo nivel, los programadores usan nombres de segmento para programar) y cada segmento se direcciona comenzando desde 0.

Reglas de asignación de memoria: asignación en unidades de segmentos. Cada segmento ocupa un espacio continuo en la memoria, pero no es necesario que los segmentos sean adyacentes.

1691588938870

La estructura de direcciones lógicas del sistema segmentado consta del número de segmento (nombre del segmento) y la dirección intrasegmento (desplazamiento intrasegmento). como:

1691588996533

La cantidad de dígitos en el número de segmento determina la cantidad máxima de segmentos en los que se puede dividir cada proceso.

El número de bits de dirección en un segmento determina la longitud máxima de cada segmento.

En el ejemplo anterior, si el sistema tiene direcciones de bytes, entonces

El número de segmento ocupa 16 bits, por lo que en este sistema cada proceso tiene hasta 216 = 64K segmentos.

La dirección dentro de un segmento ocupa 16 bits, por lo que la longitud máxima de cada segmento es 216 = 64 KB.

1691589146221

Problema: el programa se divide en varios segmentos y cada segmento se carga en la memoria de forma discreta. Para garantizar que el programa pueda ejecutarse normalmente, la ubicación de almacenamiento de cada segmento lógico debe encontrarse en la memoria física. Para ello, es necesario establecer una tabla de mapeo de segmentos, denominada "tabla de segmentos", para cada proceso.

1691589376128

1691589631611

5.4 Comparación de segmentación y gestión de paginación

Una página es una unidad física de información. El objetivo principal de la paginación es lograr una asignación discreta y mejorar la utilización de la memoria. La paginación es solo una necesidad para la administración del sistema, es completamente un comportamiento del sistema y es invisible para los usuarios.

Un segmento es una unidad lógica de información. El objetivo principal de la segmentación es satisfacer mejor las necesidades de los usuarios. Un segmento suele contener un conjunto de información perteneciente a un módulo lógico. Los segmentos son visibles para los usuarios y los usuarios deben proporcionar explícitamente los nombres de los segmentos al programar.

El tamaño de la página es fijo y determinado por el sistema. La longitud del segmento no es fija y depende del programa escrito por el usuario.

El espacio de direcciones del proceso de usuario paginado es unidimensional y el programador solo necesita proporcionar un mnemotécnico para representar una dirección.

El espacio de direcciones del proceso de usuario segmentado es bidimensional. Al identificar una dirección, el programador debe proporcionar tanto el nombre del segmento como la dirección dentro del segmento.

1691590036456

La segmentación hace que sea más fácil compartir y proteger información que la paginación.

El código que no se puede modificar se denomina código puro o código reentrante (no es un recurso crítico) y dicho código se puede compartir. El código modificable no se puede compartir (por ejemplo, hay muchas variables en un segmento de código y el acceso simultáneo de varios procesos puede causar inconsistencia en los datos)

1691590214824

¿Cuántos accesos a la memoria se requieren para acceder a una dirección lógica?Paginación (tabla de páginas de un solo nivel): el primer acceso a la memoria: verifique la tabla de páginas en la memoria, el segundo acceso a la memoria: acceda a la unidad de memoria de destino. Un total de dos accesos

Segmentación: el primer acceso a la memoria: verifique la tabla de segmentos en la memoria, el segundo acceso a la memoria: acceda a la unidad de memoria de destino. Un total de dos accesos

De manera similar al sistema de paginación, también se puede introducir un mecanismo de tabla rápida en el sistema segmentado para colocar las entradas de la tabla de segmentos a las que se accedió recientemente en la tabla rápida, lo que puede ahorrar un acceso y acelerar la transformación de direcciones.

1691590472850

Método de gestión de página de 5.5 segmentos

1691590531680

1691590594311

1691590721077

La estructura de direcciones lógicas del sistema de páginas de segmentos consta de número de segmento, número de página y dirección dentro de la página (desplazamiento dentro de la página). como:

1691590761720

La cantidad de dígitos en el número de segmento determina la cantidad máxima de segmentos en los que se puede dividir cada proceso.

El número de páginas en el número de página determina el número máximo de páginas en cada segmento.

El desplazamiento dentro de la página determina el tamaño de la página y el tamaño del bloque de memoria.

1691590857661

La "segmentación" es visible para el usuario y los programadores deben proporcionar explícitamente el número de segmento y la dirección dentro del segmento al programar. La "paginación" de cada párrafo es invisible para el usuario. El sistema dividirá automáticamente el número de página y el desplazamiento de página según la dirección en el segmento.
Por lo tanto, la estructura de direcciones de la gestión de páginas de segmentos es bidimensional.

Cada segmento corresponde a una entrada de la tabla de segmentos, y cada entrada de la tabla de segmentos consta del número de segmento, la longitud de la tabla de páginas y el número de bloque de almacenamiento de la tabla de páginas (dirección inicial de la tabla de páginas). Cada entrada de la tabla de segmentos tiene la misma longitud y el número de segmento está implícito.

Cada página corresponde a una entrada de la tabla de páginas, y cada entrada de la tabla de páginas consta del número de página y el número de bloque de memoria donde está almacenada la página. Cada entrada de la tabla de páginas tiene la misma longitud y el número de página está implícito.

1691591062370

1691591209220

1691591307966

6.Gestión de memoria virtual

1692273240635

6.1 Conceptos básicos de memoria virtual

1692273266535

1692273294948

Una vez: el trabajo debe cargarse en la memoria de una sola vez antes de que pueda comenzar a ejecutarse. Esto causará dos problemas: ① Cuando el trabajo es muy grande, no se puede cargar en la memoria, lo que hace que el trabajo grande no se pueda ejecutar; ② Cuando se requiere ejecutar una gran cantidad de trabajos, porque la memoria no puede acomodar Todos los trabajos, solo se pueden ejecutar una pequeña cantidad de trabajos, lo que resulta en múltiples procesos y la concurrencia del programa disminuye.

Residencia: una vez que un trabajo se carga en la memoria, permanecerá en la memoria hasta que termine de ejecutarse. De hecho, dentro de un período de tiempo, solo es necesario acceder a una pequeña parte de los datos del trabajo para que se ejecute normalmente, lo que hace que queden en la memoria una gran cantidad de datos no utilizados temporalmente, lo que desperdicia valiosos recursos de memoria.

Localidad temporal : si se ejecuta una instrucción en el programa, es probable que se vuelva a ejecutar pronto; si se ha accedido a determinados datos, es probable que se vuelva a acceder a los datos pronto. (Porque hay muchos bucles en el programa )

Localidad espacial : una vez que un programa accede a una determinada unidad de almacenamiento, es muy probable que poco después también se acceda a las unidades de almacenamiento cercanas. (Porque muchos datos se almacenan continuamente en la memoria y las instrucciones del programa también se almacenan en la memoria secuencialmente)

Según el principio de localidad, cuando se carga el programa, las partes del programa que se utilizarán pronto se pueden cargar en la memoria, y las partes que no se utilizan temporalmente se pueden dejar en la memoria externa y el programa puede iniciarse. ejecución.

Durante la ejecución del programa, cuando la información a la que se accede no está en la memoria, el sistema operativo es responsable de transferir la información requerida de la memoria externa a la memoria y luego continúa ejecutando el programa.

Si no hay suficiente espacio en la memoria, el sistema operativo es responsable de intercambiar la información que no se utiliza temporalmente en la memoria al almacenamiento externo.

Bajo la gestión del sistema operativo, al usuario le parece que hay una memoria mucho más grande que la memoria real, esta es la memoria virtual.

1692273592148

La memoria virtual tiene las siguientes tres características principales:

Varias veces: no es necesario cargar la memoria en la memoria de una vez cuando el trabajo se está ejecutando, pero se permite dividirla varias veces y cargarla en la memoria.

Intercambiabilidad: no es necesario permanecer en la memoria mientras se ejecuta el trabajo, pero permite intercambiar trabajos dentro y fuera durante el proceso de ejecución del trabajo.

Virtualidad: expande lógicamente la capacidad de la memoria para que la capacidad de memoria vista por el usuario sea mucho mayor que la capacidad real.

Cómo implementar la tecnología de memoria virtual

La tecnología de memoria virtual permite cargar un trabajo en la memoria varias veces. Si se utiliza la asignación continua, será inconveniente de implementar. Por lo tanto, la implementación de la memoria virtual debe basarse en la asignación discreta de métodos de gestión de memoria.

1692273880203

Principales diferencias:

Durante la ejecución del programa, cuando la información a la que se accede no está en la memoria, el sistema operativo es responsable de transferir la información requerida de la memoria externa a la memoria y luego continúa ejecutando el programa.

Si no hay suficiente espacio en la memoria, el sistema operativo es responsable de intercambiar la información que no se utiliza temporalmente en la memoria al almacenamiento externo.

El sistema operativo debe proporcionar la función de paginación de solicitudes (o segmentación de solicitudes).

El sistema operativo debe proporcionar la función de reemplazo de página (o reemplazo de segmento).

1692274043806

6.2 Solicitar método de gestión de paginación

Las principales diferencias entre la gestión del almacenamiento de paginación de solicitudes y la gestión del almacenamiento de paginación básica :

Durante la ejecución del programa, cuando la información a la que se accede no está en la memoria, el sistema operativo es responsable de transferir la información requerida de la memoria externa a la memoria y luego continúa ejecutando el programa. (El sistema operativo debe proporcionar una función de paginación de solicitud : transferir páginas faltantes de la memoria externa a la memoria)

Si no hay suficiente espacio en la memoria, el sistema operativo es responsable de intercambiar la información que no se utiliza temporalmente en la memoria al almacenamiento externo. (El sistema operativo debe proporcionar una función de reemplazo de páginas para intercambiar páginas temporalmente no utilizadas desde la memoria externa)

1692274241750

1692274387014

mecanismo de interrupción de falla de página

1692274567402

1692274583616

La interrupción por falla de página se genera porque la página de destino a la que desea acceder la instrucción que se está ejecutando actualmente no se transfiere a la memoria, por lo que es una interrupción interna.

Durante la ejecución de una instrucción, pueden ocurrir múltiples interrupciones por falla de página. (Por ejemplo: copiar A a B, es decir, copiar los datos de la dirección lógica A a la dirección lógica B, y A y B pertenecen a páginas diferentes, pueden ocurrir dos interrupciones)

1692274688603

Autoridad de traducción de direcciones

1692274826577

1692275094845

6.3 Algoritmo de reemplazo de página

(Determine qué página debe activarse y qué página debe desactivarse)

1692275174644

algoritmo de reemplazo óptimo

Algoritmo de reemplazo óptimo (OPT, óptimo): las páginas seleccionadas para la eliminación cada vez serán páginas que nunca se utilizarán en el futuro o a las que no se accederá durante el período de tiempo más largo, lo que garantiza la tasa de falla de página más baja.

1692275526342

Las interrupciones por fallas de página ocurrieron 9 veces durante todo el proceso y el reemplazo de página ocurrió 6 veces.
Nota: Es posible que no se reemplace la página cuando falta una. Si hay bloques de memoria libres disponibles, no es necesario reemplazar la página.

Tasa de páginas faltantes=9/20= 45%

El algoritmo de reemplazo óptimo puede garantizar la tasa de falla de página más baja, pero de hecho, solo durante la ejecución del proceso se puede saber a qué página se accederá a continuación. El sistema operativo no puede predecir la secuencia de acceso a la página de antemano. Por tanto, el algoritmo de sustitución óptimo es inalcanzable.

algoritmo de reemplazo primero en entrar, primero en salir

Algoritmo de reemplazo primero en entrar, primero en salir (FIFO): la página seleccionada para eliminación cada vez es la página que ingresa primero a la memoria

Método de implementación: organice las páginas transferidas a la memoria en una cola de acuerdo con el orden en que se transfieren. Cuando sea necesario intercambiar páginas, simplemente seleccione la página al principio de la cola. La longitud máxima de la cola depende de cuántos bloques de memoria asigna el sistema al proceso.

1692275823763

Al asignar un bloque de memoria, el número de errores de página: 9 veces

1692275901132

Cuando se asignan cuatro bloques de memoria, el número de errores de página: 10

Anomalía de Belady: cuando aumenta la cantidad de bloques físicos asignados a un proceso, la cantidad de fallas de página aumenta en lugar de disminuir.

Sólo el algoritmo FIFO generará excepciones de Belady. Además, aunque el algoritmo FIFo es simple de implementar, el algoritmo no es adecuado para las reglas de ejecución reales del proceso, porque también se puede acceder con mayor frecuencia a la página ingresada primero. Por lo tanto, el rendimiento del algoritmo es deficiente.

El algoritmo de reemplazo utilizado menos recientemente ((LRU))

Algoritmo de reemplazo utilizado más recientemente (LRU, utilizado menos recientemente): la página que se elimina cada vez es la página que no se ha utilizado durante más tiempo.

Método de implementación: asigne la entrada de la tabla de páginas correspondiente a cada página y utilice el campo de acceso para registrar el tiempo t que ha transcurrido desde la última vez que se accedió a la página. Cuando sea necesario eliminar una página, seleccione la página con el valor t más grande entre las páginas existentes, es decir, la página que no se ha utilizado durante más tiempo.

1692276069762

1692276146437

Al hacer preguntas manualmente, si necesita eliminar páginas, puede verificar a la inversa varios números de página en la memoria en este momento. El último número de página que aparece durante el escaneo inverso es la página que se eliminará.

1692276216475

La implementación de este algoritmo requiere soporte de hardware especializado, aunque el algoritmo tiene buen rendimiento, es difícil de implementar y costoso.

algoritmo de reemplazo de reloj

El algoritmo de reemplazo óptimo funciona mejor pero no se puede implementar;

El algoritmo de reemplazo primero en entrar, primero en salir es simple de implementar, pero el rendimiento del algoritmo es deficiente;

El algoritmo de reemplazo que no se ha utilizado recientemente tiene un buen rendimiento y se acerca más al rendimiento del algoritmo OPT, pero su implementación requiere soporte de hardware especial y la sobrecarga del algoritmo es alta.

El algoritmo de reemplazo de reloj es un algoritmo con rendimiento y costo equilibrados, también conocido como algoritmo CLOCK o No utilizado recientemente (NRU, No utilizado recientemente).

Método de implementación del algoritmo CLOCK simple: establezca un bit de acceso para cada página y luego vincule las páginas en la memoria en una cola circular a través del puntero de enlace. Cuando se accede a una página, su posición de acceso es 1. Cuando es necesario desalojar una página, simplemente verifique el bit de acceso de la página. Si está desactivado, seleccione la página a intercambiar; si es 1, configúrelo en 0, no lo cambie temporalmente y continúe revisando la página siguiente. Si todas las páginas en la primera ronda de escaneo son 1, entonces establezca el Después de que el bit de acceso se establezca en o, se realiza la segunda ronda de escaneo (debe haber una página con el bit de acceso en o en la segunda ronda de escaneo, por lo que el algoritmo CLOCK simple selecciona una página de eliminación y pasar como máximo por dos rondas de escaneo)

1692276453684

Algoritmo de reemplazo de reloj mejorado

El algoritmo simple de reemplazo del reloj solo tiene en cuenta si se ha accedido a una página recientemente. De hecho, si las páginas eliminadas no se han modificado, no es necesario realizar operaciones de E/S y volver a escribirlas en un almacenamiento externo. Sólo las páginas eliminadas deben volver a escribirse en un almacenamiento externo después de haberlas modificado.

Por lo tanto, además de considerar si se ha accedido a una página recientemente, el sistema operativo también debe considerar si la página ha sido modificada. Cuando otras condiciones son iguales, las páginas que no se han modificado deben eliminarse primero para evitar operaciones de E/S. Ésta es la idea del algoritmo mejorado de reemplazo de reloj.

Bit de modificación = 0, que indica que la página no ha sido modificada; bit de modificación = 1, que indica que la página ha sido modificada.

Para facilitar la discusión, el estado de cada página se expresa en forma de (bit de acceso, bit de modificación). Por ejemplo, (1,1) indica que una página ha sido visitada recientemente y modificada.

Reglas del algoritmo: organice todas las páginas que puedan reemplazarse en una cola circular

Primera ronda: escanea desde la posición actual hasta el primer cuadro (0,0) para reemplazarlo. Esta ronda de escaneo no modifica ninguna bandera (primera prioridad: páginas que no han sido visitadas recientemente y no han sido modificadas)

Segunda ronda: si la primera ronda de escaneo falla, vuelva a escanear y busque el primer cuadro (0,1) para reemplazarlo. Esta ronda establece todos los bits de acceso a la trama escaneada en 0. (Segunda prioridad: páginas que no han sido visitadas recientemente pero que han sido modificadas)

Tercera ronda: si la segunda ronda de escaneo falla, vuelva a escanear y busque el primer cuadro (0,0) para reemplazarlo. Esta ronda de escaneo no modifica ningún bit de bandera. (Tercera prioridad: páginas visitadas recientemente pero no modificadas)

Cuarta ronda: si la tercera ronda de escaneo falla, vuelva a escanear y busque el primer cuadro (0,1) para reemplazarlo. (Cuarta prioridad: páginas visitadas y modificadas recientemente)

Dado que los bits de acceso de todos los cuadros se establecieron en 0 en la segunda ronda, definitivamente se seleccionará un cuadro después de la tercera y cuarta ronda de escaneo. Por lo tanto, el algoritmo mejorado de reemplazo de RELOJ realizará hasta cuatro rondas de escaneo para seleccionar un página de eliminación.

1692277110615

6.4 Estrategia de asignación de páginas

1692277858199

Conjunto residente : se refiere al conjunto de bloques físicos asignados a un proceso en la gestión de almacenamiento de paginación de solicitudes.

En sistemas que utilizan tecnología de almacenamiento virtual, el tamaño del conjunto residente es generalmente menor que el tamaño total del proceso.

Considere un caso extremo: si un proceso tiene un total de 100 páginas, entonces cuando el tamaño del conjunto residente del proceso es 100, todo el proceso se puede colocar en la memoria y es poco probable que se produzcan fallas de página durante la operación. Si el tamaño del conjunto residente es 1, se producirán errores de página con mucha frecuencia mientras se ejecuta el proceso.

Si el conjunto residente es demasiado pequeño, se producirán errores de página con frecuencia y el sistema dedicará mucho tiempo a procesar errores de página, dejando muy poco tiempo realmente utilizado para avanzar en el proceso;

Si el conjunto residente es demasiado grande, provocará una disminución en la concurrencia de múltiples programas y la utilización de recursos. Por lo tanto, se debe elegir un tamaño de conjunto residente apropiado.

Asignación fija : el sistema operativo asigna una cantidad fija de bloques físicos a cada proceso, que no cambia mientras el proceso se está ejecutando. Es decir, asignación variable con tamaño constante del conjunto residente : a cada proceso se le asigna primero una cierta cantidad de bloques físicos y, durante la ejecución del proceso, se puede aumentar o disminuir adecuadamente según la situación. Es decir, el tamaño del conjunto residente es variable.

Reemplazo parcial : Cuando ocurre una falla de página, solo se puede seleccionar el bloque físico propio del proceso para su reemplazo. Reemplazo global : los bloques físicos libres reservados por el sistema operativo se pueden asignar al proceso de falla de página, o los bloques físicos retenidos por otros procesos se pueden reemplazar en la memoria externa y luego asignarlos al proceso de falla de página.

1692278090778

Reemplazo parcial de asignación fija: El sistema asigna una cierta cantidad de bloques físicos a cada proceso, que no cambia durante toda la ejecución. Si se produce un error de página mientras se ejecuta un proceso, solo puede seleccionar una página de las páginas en la memoria del proceso e intercambiarla y luego cargar la página requerida. La desventaja de esta estrategia es que es difícil determinar al principio cuántos bloques físicos se deben asignar a cada proceso. (Los sistemas que adoptan esta estrategia pueden determinar la cantidad de bloques de memoria asignados a un proceso en función del tamaño del proceso, la prioridad o los parámetros proporcionados por el programador)

Reemplazo global de asignación de variables: a cada proceso se le asignará inicialmente una cierta cantidad de bloques físicos. El sistema operativo mantiene una cola de bloques físicos libres. Cuando ocurre una falla de página en un proceso, se extrae un bloque físico libre y se asigna al proceso; si no hay un bloque físico libre, se puede seleccionar una página desbloqueada para intercambiarla desde la memoria externa y luego el bloque físico. se asigna al proceso con el error de página. Al utilizar esta estrategia, siempre que ocurra una falla de página en un proceso, se obtendrá un nuevo bloque físico y solo cuando se agoten los bloques físicos libres, el sistema seleccionará una página desbloqueada para llamar. La página seleccionada para la transferencia puede ser una página de cualquier proceso del sistema, por lo que los bloques físicos propiedad del proceso seleccionado se reducirán y la tasa de fallas de página aumentará.

Reemplazo parcial de asignación variable: Se asignará un número determinado de bloques físicos a cada proceso al inicio. Cuando ocurre una falla de página en un proceso, solo se permite intercambiar uno de los bloques físicos del proceso fuera de la memoria externa. Si un proceso frecuentemente pierde páginas mientras se está ejecutando, el sistema asignará algunos bloques físicos más al proceso hasta que la tendencia de la tasa de pérdida de páginas del proceso alcance un nivel apropiado; por el contrario, si la tasa de pérdida de páginas del proceso es particularmente baja durante la operación, la asignación se puede reducir adecuadamente El bloque físico dado al proceso.

Reemplazo global de asignación de variables : asigne nuevos bloques físicos cada vez que falte una página Reemplazo local
de asignación de variables : aumente o disminuya dinámicamente los bloques físicos del proceso según la frecuencia de fallas de página.

Cuando cargar la página

1. Estrategia de paginación previa: según el principio de localidad, cargar varias páginas adyacentes a la vez puede ser más eficiente que cargar una página a la vez. Pero si la mayoría de las páginas cargadas de antemano no han sido visitadas, es ineficaz. Por lo tanto, es posible predecir las páginas a las que se podrá acceder en un futuro próximo y cargarlas en la memoria con anticipación, pero la tasa de éxito de la predicción actual es solo de alrededor del 50%. Por lo tanto, esta estrategia se utiliza principalmente para la primera llamada del proceso, y el programador señala qué partes deben llamarse primero.

2. Solicitar estrategia de paginación: cuando el proceso encuentra una página faltante durante la operación, la página faltante se transfiere a la memoria. Definitivamente se accederá a las páginas transferidas mediante esta estrategia, pero como solo se puede transferir una página a la vez y cada transferencia de página requiere una operación de E/S de disco, la sobrecarga de E/S es grande.

1692278526654

1692278560149

1692278595846

Fenómeno de inquietud (golpe)

La página que se acaba de intercambiar se intercambiará inmediatamente fuera de la memoria y la página que se acaba de intercambiar se intercambiará inmediatamente fuera de la memoria externa. Este comportamiento frecuente de programación de páginas se denomina jitter o thrashing. La razón principal de la paliza es que la cantidad de páginas a las que el proceso accede con frecuencia es mayor que la cantidad de bloques físicos disponibles (no se asignan suficientes bloques físicos al proceso).

conjunto de trabajo

Conjunto residente: se refiere al conjunto de bloques de memoria asignados a un proceso en la gestión de almacenamiento de paginación de solicitudes.

Conjunto de trabajo: se refiere al conjunto de páginas a las que realmente accede un proceso durante un período de tiempo determinado.

1692278752133

El tamaño del conjunto de trabajo puede ser menor que el tamaño de la ventana. En aplicaciones reales, el sistema operativo puede contar el tamaño del conjunto de trabajo del proceso y asignar varios bloques de memoria al proceso en función del tamaño del conjunto de trabajo. Por ejemplo: el tamaño de la ventana es 5, y después de un período de monitoreo, se descubre que el conjunto de trabajo máximo de un determinado proceso es 3, lo que significa que el proceso tiene una buena localidad y se pueden asignar más de 3 bloques de memoria a el proceso para cumplir con los requisitos de ejecución del proceso.

En términos generales, el tamaño del conjunto residente no puede ser menor que el tamaño del conjunto de trabajo; de lo contrario, se producirán errores de página con frecuencia durante el proceso.

1692278888186

6.5 Archivos mapeados en memoria

1692278943660

Archivos mapeados en memoria: funciones proporcionadas por el sistema operativo a los programadores de nivel superior (llamadas al sistema>

Facilitar a los programadores el acceso a los datos de los archivos.

Conveniente para que múltiples procesos compartan el mismo archivo

Métodos tradicionales de acceso a archivos:
abrir llamada al sistema - abrir el archivo
buscar llamada al sistema - mover el puntero de lectura y escritura a una determinada posición
leer llamada al sistema - leer algunos datos desde la posición señalada por el puntero de lectura y escritura (leer desde el disco al memoria)
llamada al sistema de escritura: escribe los datos especificados en la memoria en el disco (determina la ubicación que se volverá a escribir en función del puntero de lectura y escritura)

Método de acceso a los archivos mapeados en memoria:
abrir llamada al sistema 1 - abrir el archivo
llamada al sistema mmap 1 - asignar el archivo al espacio de direcciones virtuales del proceso.
Acceder a los datos del archivo accediendo a la memoria. La lectura y escritura de los datos del archivo se
completan automáticamente mediante el sistema operativo Cuando el proceso cierra el archivo, el sistema operativo escribe automáticamente los datos modificados del archivo en el disco.

1692279280193

1692279297634

3.2_5_archivo asignado en memoria_bilibili_bilibili

Supongo que te gusta

Origin blog.csdn.net/m0_57385165/article/details/132353767
Recomendado
Clasificación