Компиляция
Процедура создания большинства приложений является общей и приведена на рис. 2.2.
Рис. 2.2. Схема компиляции программы
Первой фазой является стадия компиляции, когда файлы с исходными текстами программы, включая файлы заголовков, обрабатываются компилятором
На следующей стадии эти файлы с помощью редактора связей
Для достаточно простых задач все фазы автоматически выполняются вызовом команды:
$ make prog
или эквивалентной ей
$ cc -о prog prog.c
которые создают исполняемый файл с именем prog. В этом случае умалчиваемое имя исполняемого файла (a.out) изменено на prog с помощью опции -о.
Впрочем, указанные стадии можно выполнять и раздельно, с использованием команд
Проиллюстрируем процесс создания более сложной программы с помощью конкретных вызовов команд.
$ cc -с file1.c file2.c
$ cc -о prog
Создадим промежуточные объектные файлы file1.o и file2.o
$ cc -o prog file1.o file2.o -lnsl
Создадим исполняемый файл с именем prog, используя промежуточные объектные файлы и библиотеку libnsl.a или libnsl.so
Форматы исполняемых файлов
Виртуальная память процесса состоит из нескольких
Описание форматов исполняемых файлов может показаться лишним, однако представление о них необходимо для описания базовой функциональности ядра операционной системы. В частности, информация, хранящаяся в исполняемых файлах форматов COFF и ELF позволяет ответить на ряд вопросов весьма важных для работы приложения и системы в целом:
□ Какие части программы необходимо загрузить в память?
□ Как создается область для неинициализированных данных?
□ Какие части процесса должны быть сохранены в дисковой области свопинга (специальной области дискового пространства, предназначенной для временного хранения фрагментов адресного пространства процесса), например, при замещении страниц, а какие могут быть при необходимости считаны из файла, и таким образом не требуют сохранения?
□ Где в памяти располагаются инструкции и данные программы?
□ Какие библиотеки необходимы для выполнения программы?
□ Как связаны исполняемый файл на диске, образ программы в памяти и дисковая область свопинга?
На рис. 2.3 приведена базовая структура памяти для процессов, загруженных из исполняемых файлов форматов COFF и ELF, соответственно. Хотя расположение сегментов различается для этих двух форматов, основные компоненты одни и те же. Оба процесса имеют сегменты кода (text), данных (data), стека (stack). Как видно из рисунка, размер сегментов данных и стека может изменяться, а направление этого изменения определяется форматом исполняемого файла. Размер стека автоматически изменяется операционной системой, в то время как управление размером сегмента данных производится самим приложением. Эти вопросы мы подробно обсудим в разделе "Выделение памяти" далее в этой главе.
Рис. 2.3. Исполняемые образы программ форматов COFF и ELF
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии