Cтраница 3
Однако слишком жестоко заставлять программиста писать программы в PIC-формате. Было бы разумно оставить механический процесс превращения всех программ в перемещаемые за машиной, она вполне может решить эту проблему. Конечно же, программист должен так писать программы, чтобы связывающий загрузчик мог сделать их перемещаемыми. [31]
Внешняя статическая память также распределяется во время компиляции, однако в отдельном сегменте по отношению к сегменту процедуры. Все переменные внешней памяти обозначаются картами ESD. В этом месте желательно, чтобы читатель освежил в памяти назначение карт TXT, ESD и RLD в схеме непосредственно связывающего загрузчика, прочтя главу, посвященную загрузчикам. Выделение внешней памяти в виде отдельного сегмента в определенной степени зависит от выбранной схемы загрузки, однако в общем случае загрузчик будет загружать как программы конкретного задания, так и относящиеся к нему сегменты внешней статической памяти. [32]
Поля листинга используются для указания имени файла, его расширения, размеров и даты создания. Расширение имени файла служит для обозначения формата файла или методов его применения. Так, файлы с расширением SYS содержат машинные коды и используются системой; файлы с расширением SAV - программы в машинных кодах, которые могут быть загружены и выполнены; расширение OBJ обозначает файлы, полученные в результате работы ассемблера, в форме подготовленной для компоновщика или связывающего загрузчика. [33]
Связывающие загрузчики являются наиболее развитыми. Отдельно транслируемые сегменты могут иметь Доступ к общим полям данных и ссылаться один на другой. Связывающий загрузчик получает от транслирующей программы четыре типа карт, так называемую объектную колоду ( не обязательно набитую на перфокартах, а скорее хранящуюся на некотором устройстве прямого доступа), которую он использует для выполнения четырех основных функций загрузчика. [34]
При использовании связывающего загрузчика для получения готовой к выполнению программы, всякий раз, когда программа запускается, применяются все четыре основные функции загрузчика. Однако при производственном счете программа может несколько раз выполняться в одном и том же виде, причем только ее начальный адрес может изменяться в зависимости - от различной обстановки в мультипрограммной среде ( разд. Это означает, что при связывании нет необходимости повторять несколько шагов. Чтобы сделать эту процедуру более экономичной и сохранить время вычислительной машины, во многих операционных системах функции непосредственно связывающих загрузчиков разделены. Загрузчик разбивается на две отдельные программы, редактор связей и загрузчик модулей. [35]
В этой необязательной заключительной стадии трансляции куски программы, полученные как отдельно странслированные подпрограммы, объединяются в выполняемую программу в ее окончательном виде. Выполняемые программы, полученные на предыдущих фазах трансляции, обычно имеют почти окончательный вид, за исключением тех мест, где программы обращаются к внешним данным или другим подпрограммам. Связи между этими разрозненными кусками программы указываются в таблицах загрузчика, выданных транслятором. Связывающий загрузчик загружает различные сегменты странслированной программы в память и затем использует таблицы загрузчика для связи их в единую программу, вставляя соответствующие данные и адреса подпрограмм. В результате получается выполняемая программа в окончательном виде, пригодная для прогона. [36]
Как и в первой редакции, центральной темой ее являются фундаментальные идеи архитектуры и структуры ЭВМ, оборудования и программного обеспечения, а также использование этих концепций в разработке программ, собирающих данные и производящих манипуляции над ними. Во второй редакции такие темы были усилены и расширены с целью облегчения проверки взаимодействия алгоритмов, программ и структур данных при разработке эффективного программного обеспечения. Включен новый материал, который имеет отношение к рассматриваемому предмету. Усилено внимание к таким системным программам, как ассемблеры, редакторы, связывающие загрузчики и другие, помогающие эффективно разрабатывать модульный код. [37]