OSDev

для всех
Текущее время: 29 апр 2024, 12:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 20 мар 2014, 13:56 
Аватара пользователя

Зарегистрирован: 16 апр 2010, 10:10
Сообщения: 320
Откуда: Псковская обл.
Адреса можно каждый раз править при запуске приложения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 мар 2014, 14:23 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
А при компиляции в elf прямая адресация не используется?
То есть достаточно модификации точки входа?


А если нет, то как модифицировать адреса в теле кода?


Или я чего-то про эльфов не знаю...

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 мар 2014, 21:57 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Mirmik писал(а):
Хм... Насколько я понимаю, при компиляции, обычно код исполняемого файла создаётся без учета того, где конкретно в памяти будет висеть исполняемый код, потому что смещение будет отрабатано через MMU.
Линковка делается на определённый адрес, весьма не нулевой, и его можно задавать/менять параметрами линковщика. При этом, бинарник можно слинковать с информацией для перемещения (релокации), или без неё (ради экономии нескольких килобайт).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2014, 04:21 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Mirmik писал(а):
Хм... Насколько я понимаю, при компиляции, обычно код исполняемого файла создаётся без учета того, где конкретно в памяти будет висеть исполняемый код, потому что смещение будет отрабатано через MMU.

Но без MMU - критично, куда в память ляжет код. Разве не так?


Самый простой подход -- собирать исполняемый образ под работу с конкретного адреса памяти и в дальнейшем загружать и выполнять именно по этому адресу. Достаточно широко применялся на малых машинах, где ресурсы сильно ограничены; применяется и сейчас во встраиваемых системах. Параллельное выполнение нескольких программ по-прежнему возможно, но для этого они должны либо загружаться в разные области памяти (т.е. каждая строиться для своего адреса загрузки -- для встраиваемой системы это самый разумный подход, поскольку набор выполняющихся программ там заведомо известен), либо целиком "кочевать" из ОЗУ в файл подкачки и обратно. Последний вариант, несмотря на кажущуюся неэффективность, в определённых ситуациях вполне себе нормальный: например, если надо выполнять всего две задачи, одна из которых взаимодействует с пользователем (и 99% времени проводит, ожидая реакции пользователя), а вторая -- что-то считает.

Другой подход -- сохранять в исполняемом файле информацию, необходимую для его перемещения, и при запуске загружать в имеющуюся область памяти, параллельно настраивая загружаемый код на конкретное местоположение. Понятно, что этот способ тоже может комбинироваться с выгрузкой в файл подкачки. Он использовался в достаточно крупных системах, не имеющих MMU. Сейчас, пожалуй, не используется, поскольку в тех применениях, где могут выполняться произвольные наборы программ (на обычных компьютерах), процессоры всегда имеют MMU, а там, где набор программ строго фиксирован, эффективней первый способ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2014, 08:08 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
О! Это именно та информация, которую я хотел получить . Спасибо.

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2014, 08:12 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 93
Код может быть перемещаемый, это старая фича, была ещё в компиляторах для 68xxx моторолл из 80х.
Ну и кто запрещал фиксапы в модуле?
Формат модуля может быть любой... Писал под PowerTV OS - там свой формат, конвертится из ELF-а после компиляции, с фиксапами, точками входа по индесам, упаковкой, итп... как пример.
Правда, PowerTV OS писали во второй половине 90х, когда народ ещё экспериментировал, а не тупо лепил везде "тотальный Linux" ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2014, 08:43 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
dixie писал(а):
Код может быть перемещаемый, это старая фича, была ещё в компиляторах для 68xxx моторолл из 80х


Не могу удержаться :) Это ещё более старая "фича": в OS/360 (1964 год) загрузочные модули как раз были перемещаемыми, и система настраивала их на конкретное положение в памяти во время загрузки. Но подозреваю, что и она была не первой в этом плане, хотя из "больших" ОС она точно первая.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2014, 10:47 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 93
Ну, под OS/360 я не писал, каюсь :lol:

Кстати, про фиксапы - они вполне могут быть реализованы и без увеличения размера модуля - в LX формате есть такая фича - chaining fixups - когда ссылка на следующий фиксап хранится прямо в коде, в тех байтах, которые фиксапятся.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2014, 16:29 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
dixie писал(а):
Ну, под OS/360 я не писал, каюсь :lol:


Ну, это не страшно, если присутствует понимание, что виртуализацию придумала не Интел, а поиск -- не Гугл :)

Цитата:
Кстати, про фиксапы - они вполне могут быть реализованы и без увеличения размера модуля - в LX формате есть такая фича - chaining fixups - когда ссылка на следующий фиксап хранится прямо в коде, в тех байтах, которые фиксапятся.


Не всегда такое возможно и не всегда эффективно. Вообще, размер загрузочного модуля особой роли не играет, учитывая ёмкости дисков -- тут важней, думаю, удобство и быстрота загрузки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 мар 2014, 12:26 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 93
SII писал(а):
Вообще, размер загрузочного модуля особой роли не играет, учитывая ёмкости дисков -- тут важней, думаю, удобство и быстрота загрузки.
Есть минимум один вариант, где размер важен ;) - PXE загрузка. А если ещё и сеть сотка, не гигабит...
Довольно удобная штука для отладки на железе ... тем более, что 100% встроенных сетевух его умеют.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB