# Reubicació (informàtica)

La reubicació és el procés d'assignar adreces de càrrega per al codi i les dades depenent de la posició d'un programa i ajustar el codi i les dades per reflectir les adreces assignades. Abans de l'aparició dels sistemes multiprocés, i encara en molts sistemes encastats, les adreces dels objectes eren absolutes començant en una ubicació coneguda, sovint zero. Atès que els sistemes de multiprocessament enllaçen i canvien dinàmicament entre programes, es va fer necessari poder reubicar objectes mitjançant codi independent de la posició. Un enllaçador normalment realitza la reubicació juntament amb la resolució de símbols, el procés de cerca de fitxers i biblioteques per substituir referències simbòliques o noms de biblioteques per adreces reals utilitzables a la memòria abans d'executar un programa.
La reubicació la fa normalment l'enllaçador en el moment de l'enllaç, però també es pot fer en el moment de la càrrega per un carregador que es reubica, o en el moment d'execució pel mateix programa en execució. Algunes arquitectures eviten la reubicació completament ajornant l'assignació d'adreces al temps d'execució; com, per exemple, en màquines de pila amb aritmètica d'adreces zero o en algunes arquitectures segmentades on cada unitat de compilació es carrega en un segment separat.

## Segmentació

Els fitxers d'objectes estan segmentats en diversos tipus de segments de memòria. Els segments d'exemple inclouen el segment de codi (.text), el segment de dades inicialitzat (.data), el segment de dades no inicialitzat (.bss) o altres.

## Taula de trasllat

La taula de reubicació és una llista de punters creats pel traductor (un compilador o assemblador) i emmagatzemats a l'objecte o fitxer executable. Cada entrada de la taula, o "correcció", és un punter a una adreça absoluta en el codi d'objecte que s'ha de canviar quan el carregador reubica el programa de manera que es refereixi a la ubicació correcta. Les correccions estan dissenyades per donar suport a la reubicació del programa com una unitat completa. En alguns casos, cada correcció de la taula és relativa a una adreça base de zero, de manera que s'han de canviar les correccions a mesura que el carregador es mou per la taula.
En algunes arquitectures, una correcció que travessa certs límits (com ara un límit de segment) o que no està alineada en un límit de paraula és il·legal i l'enllaçador marca com a error.

## Procediment de reubicació

L'enllaçador llegeix la informació del segment i les taules de reubicació als fitxers objecte i realitza la reubicació mitjançant:
* fusionant tots els segments de tipus comú en un únic segment d'aquest tipus
* assignant adreces de temps d'execució úniques a cada secció i cada símbol, donant a tots els codis (funcions) i dades (variables globals) adreces de temps d'execució úniques.
* fent referència a la taula de reubicació per modificar de manera que assenyalin correctament les adreces en temps d'execució.

## Referències

* ↑ «Relocation in Memory Management - Computer Science Junction» (en anglès americà), 15-04-2017. [Consulta: 8 desembre 2023].
* ↑ «Requirements of Memory Management System» (en anglès americà), 25-06-2018. [Consulta: 8 desembre 2023].
* ↑ «Relocation (Linker and Libraries Guide)» (en anglès). [Consulta: 8 desembre 2023].
* ↑ «Relocation (computing) - Alchetron, The Free Social Encyclopedia» (en anglès americà), 18-08-2017. [Consulta: 8 desembre 2023].