Sistemas operativos modernos
rabies espacios de nombres intemos que usan enteros sin signo, como los identificadores de ob jeto, las entradas de MFT, etc. Aunque todos los nombres de los espacios de nombres externos son cadenas Unicode, no se puede buscar un nombre de archivo en el Registro, ni usar un índice MFT con la tabla de objetos. En un buen diseño se estudia con detenimiento cuántos espacios de nombres van a necesitarse, qué sintaxis tendrán los nombres de cada espacio de nombres, cómo van a distinguirse, si existen nombres relativos y absolutos, etcétera. 12.3.5 Tiempo de enlace Como acabamos de ver, los sistemas operativos utilizan diversos fipos de nombres para refe rirse a los objetos. En ocasiones, la correspondencia entre un nombre y un objeto es fija, pero a veces no lo es. En este último caso, podría ser importante el momento en que se enlaza el nombre al objeto. En general, el enlace temprano es sencillo pero no flexible, mientras que el enlace tardío es más complicado, pero a menudo más flexible. Para aclarar el concepto de tiempo de enlace, examinemos algunos ejemplos del mundo real. Un ejemplo de enlace temprano es la prácfica de algunas universidades que permiten que los padres inscriban a sus bebés recién nacidos y paguen la colegiatura actual por adelantado. Cuando el estudiante se presenta 18 años después, la colegiatura ya está pagada, aunque haya subido mucho mientras tanto. En fabricación, ordenar componentes por adelantado y mantener un inventario de ellos es enlace temprano. En cambio, la fabricación justo a tiempo requiere que los proveedores pue dan proporcionar componentes de inmediato, sin previo aviso. Esto es enlace tardío. Muchos lenguajes de programación manejan múltiples tiempos de enlace para las varia bles. El compilador enlaza las variables globales a una dirección virtual dada. Esto es un ejem plo de enlace temprano. A las variables locales respecto a un procedimiento se les asigna una dirección virtual (en la pila) en el momento en que se invoca el procedimiento. Esto es enlace intermedio. A las variables que se almacenan en el heap (aquellas asignadas por malloc en C o por new en Java) se les asignan direcciones virtuales sólo en el momento en que se usan en realidad. Aquí tenemos enlace tardío. Es común que los sistemas operativos ufilicen enlace temprano con la mayoría de las es tructuras de datos, pero de vez en cuando emplean enlace tardío por su flexibilidad. La asigna ción de memoria es uno de estos casos. Los primeros sistemas con multiprogramación en máquinas, que carecían de hardware para reubicar direcciones, tenían que cargar un programa en alguna dirección de memoria y reubicarlo para que pudiera ejecutarse ahí. Si llegaba a in tercambiarse a disco, cuando se traía de vuelta a la memoria debía colocarse en la misma di rección de memoria que antes, pues de lo contrario no funcionaría. En contraste, la memoria virtual paginada es una forma de enlace tardío. La dirección física real que corresponde a una dirección virtual dada no se conoce sino hasta que se solicita la página y se trae a la memoria. Otro ejemplo de enlace tardío es la colocación de ventanas en una GUI. En contraste con los primeros sistemas gráficos, en los que el programador tenía que especificar las coordena das absolutas en pantalla para todas las imágenes, en las GUIs modernas el software ufiliza coordenadas relafivas al origen de la ventana, el cual no se determina sino hasta que la venta na se coloca en la pantafia, e incluso podría cambiar más tarde.
RkJQdWJsaXNoZXIy MjI4NDcx