Chapter_10 (1110562), страница 8

Файл №1110562 Chapter_10 (Книга с сайта Баулы по главам) 8 страницаChapter_10 (1110562) страница 82019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 8)

10.7 показана схема, поясняющая роль процедуры LoadGo на примере, когда одна процедура с именем X (это может быть и основная программа) вызывает внешнююпроцедуру с именем Y.Процедураили основнаяпрограмма XСall YretСлужебнаяпроцедураLoadGojmp YretВызываемаявнешняяпроцедура Yret из внешней процедуры в основную программуРис. 10.7. Вызов внешней процедуры и возврат из неё при схеме счётас динамической загрузкой и динамическим связыванием.Как следует из описания алгоритма работы программы LoadGo, она может контролировать наличие требуемой процедуры на рабочем поле и, при необходимости, загружать вызываемую процедуру на свободное место рабочего поля.

Обратите внимание, что контроль наличия процедуры нарабочем поле производится как при вызове этой процедуры, так и при возврате в неё. Это позволяетне накладывать никаких ограничений на порядок вызова процедур, в частности, как мы и привыкли,рекурсивный вызов процедуры для динамического загрузчика ничем не отличается от не рекурсивного вызова.Продолжим исследование работы динамического загрузчика на нашем примере. Предположимтеперь, что произошёл возврат из процедур Delta и Beta в основную программы, которая послеэтого вызвала процедуру A длиной, скажем, в 25000 байт. Процедура A отсутствует на рабочем поле, поэтому её надо загрузить, однако процедура LoadGo определяет, что на рабочем поле нет достаточного места для размещения процедуры A. Выход здесь только один – удалить с рабочего поляодну или несколько процедур, чтобы освободить достаточно место для загрузки процедуры A.

1 Внашем случае достаточно, например, удалить с рабочего поля процедуру Beta.Итак, служебная процедура LoadGo считает память, занимаемую процедурой Beta на рабочемполе свободной, загружает на это место процедуру A и корректирует соответствующим образомстроки ТВА. Будем говорить, что процедура Beta удаляется с рабочего поля, а на её место загружается процедура A.

На рис. 10.8 показан вид ТВА и рабочего поля после загрузки процедуры A.Как следует из описания работы динамического загрузчика, на рабочем поле всегда находятсяпоследние из выполняемых процедур, а программа пользователя не должна ни о чём заботиться иработает, как и при статической загрузке модулей, просто обычным образом вызывая необходимыеей внешние процедуры. Часто говорят, что действия динамического загрузчика прозрачны (т.е. невидимы) для программы пользователя.Иногда, однако, программист нуждается в некотором управлении динамической загрузкой модулей на рабочее поле.

Например, пусть на рабочем поле уже находятся процедуры с именами X и Z,а в основной программе программист начинает в цикле попеременно вызывать процедуры с именамиX и Y, например, так:L:CallCallLoopXYLТогда может случиться так, что при вызове и загрузке на рабочее поле процедуры Y она будетудалять с рабочего поля процедуру X, а процедура X, в свою очередь, при загрузки на рабочее поле1Разумеется, мы предполагаем, что длина рабочего поля достаточна для загрузки на него любого объектного модуля, входящего в состав модульной программы.22будет удалять с него процедуру Y. Другими словами, на рабочем поле не хватает места, чтобы одновременно разместить на нём все три процедуры X,Y и Z. При возникновении такой ситуации выполнение программы резко замедлиться, так как динамический загрузчик большую часть времени будетзанят чтением процедур из медленной внешней памяти на рабочее поле.

Такого рода неприятные ситуации имеют в программистской литературе специальное название трэшинг (trashing – дрожание,мельтешение) памяти. Скорость выполнения всей программы при этом может упасть в несколько десятков и даже сотен раз.ТВА segment214263850Free=50jmp LoadGojmp LoadGojmp LoadGojmp LoadGo000000FFFFh0FFFFh3000024913('A')('Beta')('C12')('Delta')25000300000000015000FlagsFlagsFlagsFlagsWork segment00000Процедура A2500030000Процедура Delta45000Рис. 10.8. Вид ТВА и рабочего поля после загрузки процедуры A.Для того чтобы избежать такой ситуации, программист может потребовать у динамического загрузчика, чтобы во время работы этого цикла процедура X по возможности не удалялась с рабочегополя. Другими словами, динамический загрузчик при нехватке памяти на рабочем поле должен сначала стараться удалить с него другие процедуры (в нашем примере процедуру Z), а лишь в последнюю очередь процедуру X.

Говорят, что процедура X фиксируется на рабочем поле.Для фиксации процедуры на рабочем поле в состав динамического загрузчика входит служебнаяпроцедура с именем Lock. Программа пользователя должна вызвать эту процедуру с параметром –именем фиксируемой процедуры. На Ассемблере необходимо специально определить способ передачи этого строкового параметра в служебную процедуру, а на языке Паскаль это можно было бызаписать, например, такLock('X');Процедура Lock находит в ТВА строку, соответствующую указанной процедуре, и ставит в этойстроке в поле флагов признак о том, что она зафиксирована на рабочем поле. Ясно, что для нашегопримера с тремя процедурами с рабочего поля будет теперь удалена процедура Z, а процедуры X и Yбудут всё время работы цикла находится на рабочем поле (мы, естественно, предполагаем, что процедуры X и Y вместе поместятся на рабочее поле, иначе трэшинга не миновать!).Когда необходимость в фиксации процедуры X на рабочем поле отпадёт, программист можетрасфиксировать эту процедуру, вызвав служебную процедуру динамического загрузчика с именемUnLock.

На Паскале это, например, можно было бы сделать так:UnLock('X');Разумеется, в строке ТВА в поле флагов теперь надо предусмотреть битовый признакLock/UnLock. Обратите также внимание, что служебные процедуры LoadGo,Lock и UnLockстатически связаны с программой пользователя, т.е. расположены в её сегменте кода. Об этомдолжен позаботиться динамический загрузчик, если при размещении в оперативной памяти головного модуля программы он увидит вызов этих внешних процедур.Теперь, когда мы познакомились со схемой выполнения программы в режиме динамической загрузки и связывания, обсудим те ограничения, которые необходимо наложить на процедуры и функ-23ции, выполняющиеся на рабочем поле. Во-первых, заметим, что во время счёта такие процедуры ифункции могут быть, без их ведома, перезагружены с одного места рабочего поля на другое.

1 Этосвойство схемы счёта программы с динамической загрузкой и связыванием налагает достаточно жёсткие ограничения на внешние процедуры и функции, которые будут выполняться на рабочем поле.Образно говоря, такие процедуры и функции не должны "помнить", на каком месте памяти они располагаются. Вам необходимо понять, что в архитектуре нашего компьютера такие процедуры ифункции при этом должны обладать следующими свойствами.•У них может быть только один кодовый сегмент, что налагает ограничение на максимальную длину процедур и функций (т.е.

предполагает разбиение алгоритма на достаточно небольшие шаги). Кроме того, кодовый сегмент не должен изменяться (модифицироваться) впроцессе счёта, так как при удалении модуля с рабочего поля он может быть вновь загружен из объектного модуля, где этих изменений уже не будет. 2•Они не имеют собственных сегментов данных, все обрабатываемые данные передаютсяим в качестве фактических параметров (можно сказать, что все обрабатываемые данныерасполагаются в сегментах, принадлежащих основной программе или хранятся в динамических переменных). Это ограничение следует из того, что при загрузке процедуры на новое место рабочего поля никто не меняет значения сегментных регистров, кроме кодовогосегментного регистра.•Все вызываемые из них процедуры и функции должны быть дальними и внешними, т.е.вызываться через служебную процедуру LoadGo.

Действительно, возврат из близкой процедуры запоминается в стеке, а перед возвратом процедура может быть перемещена в другое место рабочего поля или просто удалена. 3Обязательно разберите и поймите, почему должны выполняться такие свойства внешних процедур. Заметим, что, хотя эти ограничения и могут показаться на первый взгляд обременительными, ноони не создают принципиальных трудностей при программировании.

Характеристики

Тип файла
PDF-файл
Размер
625,15 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее