Historias
Slashboxes
Comentarios
 
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • por Draco (3721) el Domingo, 17 Octubre de 2004, 22:00h (#371570)
    ( Última bitácora: Lunes, 22 Febrero de 2016, 07:16h )

    Como la duda me corroe, he seguido buscando. Parece que en algunas arquitecturas las entradas de la TLB tienen un tag ASID(address space identifier) que permite mantener en la TLB direcciones de varios procesos, mientras no haya colisiones. Así pués en un cambio de contexto, no se hace un vaciado de la TLB, sino que conforme va siendo necesario se cargan las nuevas entradas.

    El caso es ¿qué determina un ASID? De ser el PID, no permitiría que dos procesos usando el mismo segmento de código(el mismo programa) accedieran a él sin colisionar. Ésa es una manera de proceder si tienes pocos bits para el ASID, y probablemente habrá que cancelar mapeos y vaciar la TLB si tienes más procesos que los que puedes representar con los bits del ASID.

    Pero otra opción es asignar ASID's a objetos(p.ej: librerías compartidas) de manera que puedas compartir entradas de la TLB entre procesos. Para IA64 alguien lo hizo en Linux [google.com]:

    As such it supports sharing of TLB entries on a region basis: If a certain memory object (e.g. a memory-mapped file) is to be shared between processes, it can be allocated in a region of its own, and the kernel can associate a unique RID with the shared object. In order to share TLB entries (and not just pages) all processes sharing that object must agree on its address, including its RID.
    ...
    In this approach it is straightforward to share TLB entries between processes executing the same program: one region is reserved for the text segment, and the kernel can associate a unique RID with each presently active executable. Process- private data is allocated in a separate region, and associated with a per-process RID.
    The present Linux kernel does not share RIDs between processes.

    En cualquier caso, aunque sea posible, no parece ser corriente.

    --

    Programs should be written for people to read, and only incidentally for machines to execute

    [ Padre ]
  • Ah, vale. Es más o menos lo que yo pensaba. Eso explica porqué cambiar de hilo es mucho más rápido que cambiar de proceso.

    Gracias por la información :)
    --

    Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn!

    [ Padre ]