Ответы на вопросы по курсу Системное программирование
Рефераты >> Программирование и компьютеры >> Ответы на вопросы по курсу Системное программирование

СИСТЕМА

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

а) запуск и остановка прикладных программ.

б) распределение ресурсов.

в) обеспечение таких системных услуг, которых нет в аппаратуре.

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

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

Например: стандарт POSIX на API ОС UNIX включает функции:

1) Набор файловых операций

2) Операции со строками

3) Ф-ии многозадачности, управления процессами

4) Управление терминалом.

Помимо POSIX есть API Win32 и т.п. АPI ОС может включать самые разнообразные услуги, вплоть до поддержки функций телефонного аппарата на базе модема (TAPI Win32)

33. Принципы междумодульного взаимодействия: внешние ссылки и общие имена (public names)

Внешние ссылки из сегмента позволяют получать доступ к данным, которые объявлены в другом модуле. Для объявления внешних ссылок в компиляторах с ассемблера используется директива EXTRN. Пример использования:

EXTRN maybe:far

Идентификаторы в программе можно сделать доступными из других модулей. Для этого применяется директива PUBLIC. Пример использования:

maybe PROC far

PUBLIC maybe

Такие действия необходимы для того, чтобы после раздельной компиляции модулей компоновщик, используя имена и смещения, записанные в объектных модулях, разрешил все внешние ссылки директив EXTRN, использовав соответствующие директивы PUBLIC. Если для какой-то ссылки EXTRN не будет обнаружен соответствующий идентификатор PUBLIC, то компоновщик выдаст ошибку unresolved external <имя_идентификатора>, и сборка прекратится.

Использование многомодульной структуры необходимо:

а) для разбиения большого текста на модули по функциональному назначению;

б) для создания библиотек процедур;

в) для написания подпрограмм в языки высокого уровня.

34. Технология разработки программ – трансляция и редактирование связей. Понятие об исходном, объектном, выполняемом модулях.

Исходный код программы – код, написанный на языке программирования. Может включать модули на ЯВУ и модули с подпрограммами на языке ассемблера.

Объектный модуль – код программы после трансляции (компиляции), преобразованный в машинные коды. Помимо них содержит внешние ссылки и информацию для редактора связей и может также содержать отладочную информацию (debug info).

Исполняемый модуль –модуль, содержащий готовую к выполнению программу – м.б. 2 видов:

а) точный образ памяти программы с привязкой к абсолютным адресам (в MS-DOS – формат файла *.COM)

б) перемещаемый исполняемый формат, см. 17.

Трансляция – получение объектного кода из исходного.

Редактирование связей – разрешение внешних ссылок и создание исполняемого модуля из объектных.

35. Основные функции редактора связей – распределение памяти, разрешение внешних ссылок – см. 17, 33.

36. Программные сегменты и их атрибуты, способы распределения памяти под сегменты.

Собственно сегменты и распределение памяти см. 30.

Атрибуты сегментов

Атрибут комбинации сегмента предназначен дляуказания компоновщику, каким образом объединять сегменты, находящиеся в разных модулях и имеющие одинаковые имена. М.б. PRIVATE (сегмент не будет объединяться с одноименными из др. модулей), PUBLIC (будет) и некоторые другие.

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

Атрибут выравнивания сегмента – сообщает компонаовщику, чтобы он позаботился о том, чтобы сегмент начинался с указанной границы. Возможное выравнивание: BYTE – выравнивание не делается, сегмент начинается со следующего байта, WORD (DWORD) – выравнивание погарнице слова (двойного слова), PARA – выравнивание по границе 16-байтового параграфа, и т.п.

Атрибут размера сегмента – показывает размер, 16 или 32-битные сегменты.

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

37. Разрешение внешних ссылок, функция автовызова, библиотеки объектных модулей и их использование.

Разрешение внешних ссылок – см. 33, 17.

Библиотеки объектных модулей – пакет объектных модулей, собранных в один файл и подключаемый к программе на этапе разрешения внешних ссылок (все идентификаторы, которые должны быть доступны из библиотек, объявляются в модулях как PUBLIC). Компоновщик может просматривать библиотеку и самостоятельно находить нужные модули, избавляя от этого программиста. Библиотеки делаются с помощью программы-библиотекаря. Библиотекарь может добавлять и извлекать модули, а также получать список доступных идентификаторов.

Любой компилятор ЯВУ имеет в комплекте несколько стандартных библиотек, например, библиотеки ввода-вывода, работы с плавающей точкой, графическую и т.п.

38. Типы внешних ссылок и общих имен. Статическое и динамическое разрешение ссылок.

Внешние ссылки см. 17, 33, 34.

Статическое и динамическое разрешение внешних ссылок.

Процесс разрешения внешних ссылок на этапе создания исполняемого модуля – статическое разрешение ссылок. Возможно и динамическое подсоедиение нужных модулей на этапе работы программы.

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

б) DLL – принцип разделяемых библиотек. DLL – это пакет функций, отредактированный для исполнения в позиционно-независимом стиле. Имеет таблицу всех содержащихся функций. Для работы с ним программа выполняет 1) функцию загрузки DLL, 2)переход по смещению в таблице функций.

При работе с DLL несколько программ могут использовать одну ее копию в памяти.

39. Динамическое распределение памяти, оверлейные программы. Общая структура объектного модуля.

Стандартный исполняемый псевдоперемещаемый модуль (например, типа EXE для DOS) содержит сегменты в том виде, в котором они будут размещены в памяти. Такое распределение памяти называется статическим. В ситуации нехватки памяти, отдельный код или данные, которые могут быть нужны не все вместе, а по очереди, разумнее было бы подгружать в память в процессе выполнения. Выделение памяти под выполняемый код в процессе работы программы и удаление их после использования называется динамическим распределением памяти. Программы, содержащие динамически подгружаемые модули, называются оверлейными, а сами такие модули – оверлеями. Загрузка данных из модуля в общем случае не представляет проблем, в случае загрузки кода перед выполнением он должен быть особым образом подготовлен (например, с учетом местоположения вызывающей программы в памяти для подпрограмм должны быть образованы правильные ссылки). Такую подготовку выполняет специальная программа – менеджер оверлеев. Он может поставляться, а) как библиотека компилятора [в Borland Pascal 7.0]. В этом случае оверлейный модуль, как правило, имеет какой-то свой специфический формат, работа с ним ведется с помощью стандартных подпрограмм. Код оверлейных подпрограмм и данных размещается в памяти [в BP буфер оверлеев имеет плавающую границу с кучей] и по окончании работы с ним может быть удален. б) Может быть внедрен в структуру оверлейного модуля. В этом случае модуль имеет формат исполняемого файла, и для инициализации он должен быть запущен стандартным для ОС способом из-под вызывающей программы.


Страница: