задача переселения

Есть ли какая-либо разница между перемещением адресного пространства и задачей перемещения, выполняемой компоновщиком? Насколько мне известно, задача перемещения, выполняемая компоновщиком, включает в себя процесс соединения символических ссылок с символическими определениями. И перемещение адресного пространства касается, когда исполняемый файл должен быть занесен в память и все его адресные ссылки разрешаются со ссылкой на начальный адрес места, где он помещается в память, не так ли?? И я также хочу знать, кто делает эту перераспределение адресного пространства ??


person wantobegeek    schedule 28.07.2009    source источник


Ответы (2)


В процессорах есть MMU (Memory Manegeemt Unit). Он дает каждому процессу/программе собственное ограниченное пространство памяти. По этой причине переполнение буфера в программах сегодня не может причинить большого вреда. Таким образом, каждая программа живет в своей памяти. ОС справляется с этим.

РЕДАКТИРОВАТЬ:

Программы обычно запускаются только из красных мест (ROM/Disk/Flash), и им нужен стек для временных значений. Например, в c/c++ почти все, но специальные значения, определенные как char/int/long/float, и массивы, конечно, попадают в стек. Это означает, что компоновщик использует и ожидает только данные в стеке или в самой программе (которая обычно доступна только для чтения).

Когда программе требуется дополнительная память в размерах, которые не могут быть определены во время компиляции, ей нужна куча. Куча выделяется с помощью malloc или new (c/c++)

Но поскольку чтение из оперативной памяти обычно происходит быстрее, чем из другого типа запоминающего устройства, ОС копирует программу с диска в оперативную память и начинает выполнение программы оттуда.

person Luka Rahne    schedule 28.07.2009
comment
@ralu, не могли бы вы пояснить разницу между перемещением адресного пространства и перемещением, выполняемым компоновщиком? В любом случае, спасибо за ваш ответ. - person wantobegeek; 28.07.2009

Да, ты прав. Загрузчик процессов в операционной системе выполняет перемещение во время загрузки. Фактически он действует как компоновщик во время выполнения.

person sharptooth    schedule 28.07.2009