conceptos de memoria virtual

Estoy confundido acerca de algunos temas relacionados con la memoria virtual. Por lo tanto, voy a enumerarlos y hacer preguntas. Mientras contesto, preferiré si usted también enumera alguna fuente donde pueda aclarar esa duda. Estaré hablando con referencia a un archivo ejecutable de linux elf.

He escuchado que cada proceso tiene el espacio de direcciones de 4 gb en un sistema de 32 bits. Cuando verifiqué el objeto de uno de mis archivos reubicables ejecutables, vi que tenía límites desde 00000000 hasta ffffffff. También contenía el espacio del kernel. Este es el espacio de direcciones del archivo.¿Es esta la memoria virtual de la que hablamos? En caso afirmativo, había leído que el mecanismo de memoria virtual permite que se ejecuten procesos de tamaños muy grandes y que el tamaño del proceso no está limitado por el tamaño de la memoria principal (podemos llevar las páginas requeridas a la memoria principal tras la paginación de demanda a demanda).Entonces, si la memoria virtual es de solo 4 gb, ¿no limita el tamaño máximo de los programas a 4 gb? Además, verifiqué el archivo objdump de otro archivo y tenía la misma dirección (es decir, 00000000 a ffffffff).¿Entonces, qué significa esto? ¿Eso significa que nuestro archivo es un tipo de archivo reubicable al que se agregarán nuevamente las direcciones de inicio?(aunque esto parece absurdo porque ya es un archivo de objeto reubicable ejecutable).

Había leído que en una memoria donde se ha implementado la segmentación, la CPU produce una dirección virtual (lógica). Esta dirección tiene tres partes: el segmento, el desplazamiento dentro del segmento. Además, los segmentos de los que se habla aquí son código, datos, pila, etc.

En el espacio de direcciones del proceso, estos segmentos se ubican a partir de ubicaciones específicas. Entonces, ¿cuáles son los contenidos de la dirección virtual de la cpu?¿La dirección virtual producida va desde 00000000 hasta ffffffff? Si si entonceses el proceso de acceso al contenido en la dirección virtual, el siguiente:

The segment part is looked up in the segment descriptor table to find the segment's
starting address in linear address space. Then the offset is indexed within the segment and
the resulting address is the linear address. Then, we look up the page table and map the
address to physical address. If the page is not currently in the main memory, it is 
brought. 

De nuevo, surge el hecho de que ningún proceso puede estar completamente en la memoria principal en cualquier momento, porque entonces toda la memoria estará ocupada por un solo proceso.(ya que el espacio de direcciones del proceso es de 4 gb).

Además, si todos los procesos tienen un espacio de direcciones de 00000000 a ffffffff, y puede existir más de un proceso en la memoria principal a la vez, entoncestodos los procesos deben tener su propia tabla de descriptores de segmento que devuelve la dirección del segmento en el espacio de dirección lineal

Leí que el sistema operativo está cargado en la memoria principal en el arranque. Entonces¿Cuál es la diferencia entre ese sistema operativo y el código del kernel en el espacio del kernel de un proceso en particular? Además, ¿todos los procesos tienen su propia copia del código del kernel en su espacio del kernel?

Respuestas a la pregunta(1)

Su respuesta a la pregunta