Comprensión simple de segmentación y paginación en la gestión de memoria del sistema operativo

Autor: codinghuang
enlace: https: //www.zhihu.com/question/50796850/answer/522734117
Fuente: sabemos casi
con derechos de autor por el autor. Para reproducción comercial, por favor contacte al autor para autorización, y para reproducción no comercial, por favor indique la fuente.
 

Para comprender la segmentación y la paginación, debe comprender por qué la tecnología de segmentación y paginación

En primer lugar, estas dos tecnologías se utilizan para utilizar y administrar la memoria de recursos de la computadora .

Antes de que la tecnología de segmentación aún no haya surgido, el programa necesita asignar suficiente memoria continua de la memoria y luego cargar todo el programa en ella. Por ejemplo, el tamaño de un programa es de 10M, y luego, necesita tener 10M de espacio de memoria continuo para cargar este programa en la memoria. Si no puede encontrar memoria continua de 10M, no puede cargar este programa en la memoria y no se puede ejecutar el programa.

El método anterior de cargar directamente todo el programa en la memoria es problemático. Por ejemplo:

1. El espacio de direcciones no está aislado

¿Cómo entender que el espacio de direcciones no está aislado?

Por ejemplo, supongamos que tengo dos programas, uno A y otro B. Una dirección de programa en la memoria suposición es 0x00000000 0x00000099 ~, dirección de programa en la memoria B se supone es 0x00000100 ~ x00000199. Supongamos que originalmente deseaba operar la dirección 0x00000050 en el programa A y manipuló accidentalmente la dirección 0x00000150 con una mano residual . Entonces, podrían ocurrir cosas malas. Solo tiene que afectar el programa A, también ha estropeado el programa B.

2. La dirección cuando se ejecuta el programa es incierta

¿Cómo entender la dirección incierta cuando el programa se está ejecutando?

Debido a que nuestro programa necesita cargarse en la memoria cada vez que queremos ejecutarlo, supongamos que escribe en la memoria para operar en una dirección en el programa, por ejemplo, desea la dirección 0x00000010. Pero viene la pregunta, ¿puede garantizar que la dirección que opera es 0x00000010, que es la ubicación que originalmente quería operar? Es posible que la ubicación donde el programa se carga en la memoria por primera vez sea 0x00000000 ~ 0x00000099, y cuando el programa se ejecuta por segunda vez, la ubicación donde el programa se carga en la memoria se convierte en 0x00000200 ~ 0x00000299, y la dirección 0x00000010 que opera no es en absoluto La memoria ocupada por el programa.

3. Bajo uso de memoria

¿Cómo entender el bajo uso de memoria?

Por ejemplo, suponga que ha escrito 3 programas, el tamaño del programa A es 10M, el tamaño del programa B es 70M y el tamaño del programa C es 30M. La memoria total de su computadora es 100M.

Estos tres programas suman 110M. Obviamente, estos tres programas no pueden existir en la memoria al mismo tiempo .

Y como máximo solo dos programas pueden ejecutarse al mismo tiempo. Este puede ser el caso, el espacio de memoria ocupado por el programa A es 0x00000000 ~ 0x00000009, y el espacio de memoria ocupado por el programa B es 0x00000010 ~ 0x00000079. ¿Qué pasa si el programa C se ejecuta en este momento? Puede cambiar uno de los programas al disco y luego cargar el programa C en la memoria. Suponiendo que el programa A se intercambia, el programa C todavía no se puede cargar en la memoria, porque hay dos áreas contiguas libres en la memoria, una es el 10M original ocupado por el programa A y hay 20M de 0x00000080 a 0x00000099 , El programa 30M C no se puede cargar en la memoria. Entonces, la única forma es cambiar el programa B y mantener el programa A, pero en este momento, habrá 60 millones de memoria que no se pueden usar, lo cual es un desperdicio, ¿verdad?

Luego, la gente fue a buscar una manera de resolver estos problemas.

Hay un buen dicho: cualquier problema en el campo de la informática puede resolverse agregando una capa intermedia indirecta .

(Esta idea también se usa ampliamente hoy en día, como muchas capas intermedias excelentes: Nginx, Redis, etc.)

Por lo tanto, apareció la técnica de segmentación.

Para realizar esta técnica de segmentación, es necesario introducir el concepto de espacio virtual de direcciones. Entonces, ¿qué es un espacio de direcciones? En pocas palabras, es un espacio direccionable. Si este espacio es virtual, se nos llama espacio de direcciones virtuales; si este espacio es real, se nos llama espacio de direcciones físicas. El espacio de direcciones virtuales puede ser arbitrariamente grande porque es virtual. El espacio de direcciones físicas es real, por lo que es limitado.

Entonces, ¿qué hace la técnica de segmentación?

Es el espacio de dirección virtual asignado al espacio de direcciones físicas, y escribir la operación del programa es una dirección virtual . Suponga que el espacio de direcciones virtuales del programa A es 0x00000100 ~ 0x00000200. En este momento, no solo se necesita una memoria física continua para almacenar el programa A, sino que también el espacio de direcciones virtuales del programa A debe mapearse (traducirse) al espacio de direcciones físicas. Posiblemente, el espacio de direcciones virtuales del programa A se asigna de 0x00000100 a 0x00000200 al espacio de direcciones físicas de 0x00000000 a 0x00000100.

Entonces, ¿qué problema puede resolver la tecnología segmentada? Puede resolver los dos problemas anteriores.

En la pregunta 1, suponga que el espacio de direcciones virtuales del programa A es 0x00000000 ~ 0x00000099, el espacio de direcciones físicas mapeado es 0x00000600 ~ 0x00000699, el espacio de direcciones virtuales del programa B es 0x00000100 ~ 0x00000199, y el espacio de direcciones físicas mapeado es 0x00000300 ~ 0x00000399. Suponiendo que todavía tiene una discapacidad, la dirección 0x00000150 se operó en el programa A, pero la dirección 0x00000150 en inglés en este momento es virtual, y la operación de virtualización está bajo el control del sistema operativo, por lo que el sistema operativo tiene la capacidad de juzgar esto virtual La dirección 0x00000150 es problemática y luego evita operaciones posteriores. Entonces, muestra el aislamiento. (Otra forma de incorporar el aislamiento es operar en la misma dirección virtual, pero en realidad puede operar en diferentes direcciones físicas)

(Tenga en cuenta que, de hecho, es probable que las direcciones virtuales del programa A y el programa B sean ambas 0x00000000 ~ 0x00000099. Los ejemplos aquí son solo para una fácil comprensión).

El problema 2 también está bien resuelto. Debido a esta asignación, el programa no necesita prestar atención a la dirección física, siempre que la dirección virtual no haya cambiado, el programa no manipulará la dirección de manera incorrecta.

Pero el problema 3 aún no se resuelve .

La tercera cuestión se debe al intercambio en cuestión intercambiado hacia fuera, el problema clave es que no se pueden intercambiar en una completa después del procedimiento, el otro un completo cambio de programa por venir. Y este mecanismo de segmentación mapea una pieza continua de memoria física, por lo que el problema 3 no se puede resolver.

Donde esta el problema Es completo y continuo .

El surgimiento de la tecnología de paginación es resolver este problema. La tecnología de paginación sigue siendo un mecanismo de mapeo del espacio de direcciones virtuales al espacio de direcciones físicas. Sin embargo, la granularidad es aún menor. La unidad no es el programa completo, sino una "página", una página compuesta por un espacio de direcciones virtuales se asigna a una página compuesta por un espacio de direcciones físicas. (Cómo entender este concepto de "página", otros estudiantes bajo esta pregunta han respondido)

La tecnología de paginación, su espacio de direcciones virtuales sigue siendo continuo, pero la dirección física asignada después de cada página no es necesariamente continua. Precisamente por el concepto de paginación, el programa puede intercambiarse dentro y fuera de unidades de páginas. Entonces, ¿por qué puedes cambiar una página determinada? De hecho, no es por eso que puede intercambiar una página determinada, sino que puede intercambiar códigos de programa y datos que no son utilizados por la CPU. Sin embargo, cámbielos al disco, ¿y si la CPU usará estos códigos y datos la próxima vez? Debe cargar estos códigos y datos en la memoria. El rendimiento tiene un impacto, ¿verdad? Por lo tanto, hicimos que las unidades se intercambiaran más y más pequeñas y se convirtieron en "páginas". (En realidad, esto aprovecha la localidad espacial)

Entonces, los estudiantes piensan al respecto, ¿se resuelve el problema 3?

Por lo tanto, la diferencia entre segmentación y paginación es: granularidad .

 

 

Publicado 59 artículos originales · Me gusta46 · Visitas 30,000+

Supongo que te gusta

Origin blog.csdn.net/sinat_41852207/article/details/104693369
Recomendado
Clasificación