A virtual memory system includes a hardware-implemented translation
lookaside buffer (HTLB) as well as a software-implemented translation
lookaside buffer (VTLB). The VTLB is in the system's unmapped memory. The
system further includes a plurality of address maps, corresponding to an
operating system kernel and to individual tasks executing within the
system. The kernel has an address space which includes both mapped and
unmapped memory. The address maps corresponding to the individual tasks
are stored in the mapped memory of the kernel's address space. The address
map corresponding to the kernel itself, however, is stored in the kernel's
unmapped memory. HTLB misses are handled by referring to the VTLB. VTLB
misses are handled by referring to an appropriate one of the address maps.
The code for handling these misses resides in unmapped memory of the
kernel's address space. This arrangement prevents recursive TLB misses,
without requiring permanent or "wired" VTLB entries. Because there are no
permanent VTLB entries, the VTLB can have a simple and efficient
structure, and its size can be bounded. As a further features, the address
maps are associated with both spin locks and mutex locks. A routine which
modifies an individual address map first acquires the mutex lock
associated with the address map and performs initial examination of the
address map. Once the routine is ready to make actual modification, it
also acquires the spin lock. By having the two types of locks, the
majority of the routine can be preemptible. Only the portion of the
routine which actually modifies the address map needs to be
non-preemptible.
Un sistema de la memoria virtual incluye un almacenador intermediario hardware-implemented del lookaside de la traducción (HTLB) así como un almacenador intermediario software-puesto en ejecucio'n del lookaside de la traducción (VTLB). El VTLB está en el sistema unmapped memoria. El sistema más futuro incluye una pluralidad de configuraciones de direcciones, correspondiendo a un núcleo del sistema operativo y a las tareas individuales que se ejecutan dentro del sistema. El núcleo tiene un espacio de dirección que incluya traz y unmapped memoria. Las configuraciones de direcciones que corresponden a las tareas individuales se almacenan en la memoria traz del espacio de dirección del núcleo. La configuración de direcciones que corresponde al núcleo sí mismo, sin embargo, se almacena en el núcleo unmapped memoria. La falta de HTLB es manejada refiriendo al VTLB. La falta de VTLB es manejada refiriendo apropiado de las configuraciones de direcciones. El código para dirigir este falta reside adentro unmapped la memoria del espacio de dirección del núcleo. Este arreglo previene falta recurrente de TLB, sin requerir permanente o entradas "atadas con alambre" de VTLB. Porque no hay entradas permanentes de VTLB, el VTLB puede tener una estructura simple y eficiente, y su tamaño puede ser limitado. Como otras características, las configuraciones de direcciones se asocian a las cerraduras de la vuelta y a las cerraduras del mutex. Una rutina que modifica una configuración de direcciones individual primero adquiere la cerradura del mutex asociada a la configuración de direcciones y realiza la examinación inicial de la configuración de direcciones. Una vez que la rutina sea lista hacer la modificación real, también adquiere la cerradura de la vuelta. Teniendo los dos tipos de cerraduras, la mayoría de la rutina puede ser preemptible. Solamente la porción de la rutina que modifica realmente la configuración de direcciones necesita ser non-preemptible.