0

Виртуальная память вместе с логической памятью помогает убедиться, что программы не повреждают данные друг друга.Перемещение виртуальной/логической памяти и программ

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

Как связаны виртуальная память, логическая память и перемещение программы? Они похожи? Если они одинаковые/похожие, то зачем нам переводить программы?

+0

Звучит как вопрос экзамена для меня. – Michael

+0

№. Я только начал изучать Системное программирование для нового семестра и, следовательно, задавался вопросом ... когда я узнал о перераспределении программ – cjMec

+0

Трудно сказать, что означает ваш инструктор, «перераспределяя программу». Данное определение не подходит, как я буду понимать, что означает «перемещение программы». Я думаю, вам нужно будет спросить своего инструктора, хотите ли вы получить ответ, который будет правильно помечен на экзамене. –

ответ

1

Relocatable программы, или сказал другой способ позиционно-независимый код, традиционно используется в двух случаях:

  • систем без виртуальной памяти (или слишком основной виртуальной памяти, например, классической MacOS), для любого кода
  • для динамических библиотек, даже в системах с виртуальной памятью, учитывая, что динамическая библиотека может оказаться локализованной по адресу, который не является его предпочтительным, если другой код уже находится в этом пространстве в адресном пространстве хост-программы.

Однако сегодня даже основные исполняемые программы в системах с виртуальной памятью имеют тенденцию быть независимыми от положения (например, флаг сборки PIE * в Mac OS X), чтобы их можно было загружать по рандомизированному адресу для защиты от эксплойтов , например те, кто использует ROP **.

* Позиция Независимый Исполняемый
** Return-ориентированное программирование

0

Виртуальная память не мешает программ от вмешательства из другого. Это логическая память, которая делает это. К сожалению, для двух концепций принято объединяться в «виртуальную память».

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

Первая концепция перемещаемого кода. Это важно для разделяемых библиотек, которые обычно должны быть сопоставлены с разными адресами.

Перемещаемый код использует смещения, а не абсолютные адреса. Когда программа приводит к последовательности инструкций что-то вроде:

JMP SOMELABEL 
. . . 
SOMELABEL: 

Компьютер или ассемблере кодирует это как

JUMP the-number-of-bytes-to-SOMELABEL 

, а не

JUMP to-the-address-of-somelabel. 

С помощью коррекций код работает так же, как независимо от того, где находится инструкция JMP.

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

Оба эти понятия работают с виртуальной памятью или без нее.

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

+0

Ну, я действительно думал о совместной работе логической памяти и виртуальной памяти вместе. Спасибо, что указали! – cjMec

+0

Как насчет связи между перестановкой программы и логической памятью? – cjMec

+0

Они действительно не связаны. Перемещение было нормой в дни перед виртуальной/логической памятью. Если вы хотите одновременно запускать две программы в многопользовательской системе без логической/виртуальной памяти, вы должны иметь возможность перемещать ее в соответствии с доступной памятью. – user3344003