6. Исполняемые файлы в Unix.
В Linux является ли файл исполняемым или нет, определяется не по его расширению, как в Windows (понятие расширение файла отсутствует в файловой системе Linux), а по правам доступа. Если у файла установлено право x (выполнения), его можно запустить на выполнение.
Если файл не бинарный, тогда считается, что это текстовый файл - скрипт или сценарий. В первых двух байтах сценария обнаруживается последовательность символов #!. Если символы “#!” присутствуют, тогда всю первую строку сценария, начиная с третьего байта, ядро воспримет как команду обработки. Исполнение сценария, содержащего указанную последовательность приведет к запуску указанной после “ #!” команды, последним параметром которой будет имя самого файла сценария. Например, для файлов, написанных на языке shell script, первая строка будет выглядеть так:
#! /bin/sh
Виртуальная память процесса состоит из нескольких сегментов или областей памяти. Размер, содержимое и расположение сегментов в памяти определяется как самой программой, например, использованием библиотек, размером кода и данных, так и форматом исполняемого файла этой программы. В большинстве современных операционных систем UNIX используются два стандартных формата исполняемых файлов — COFF (Common Object File Format) и ELF (Executable and Linking Format).
Информация, хранящаяся в исполняемых файлах форматов COFF и ELF позволяет ответить на ряд вопросов весьма важных для работы приложения и системы в целом:
- Какие части программы необходимо загрузить в память?
- Как создается область для неинициализированных данных?
- Какие части процесса должны быть сохранены в дисковой области свопинга (специальной области дискового пространства, предназначенной для временного хранения фрагментов адресного пространства процесса), например, при замещении страниц, а какие могут быть при необходимости считаны из файла, и таким образом не требуют сохранения?
- Где в памяти располагаются инструкции и данные программы?
- Какие библиотеки необходимы для выполнения программы?
- Как связаны исполняемый файл на диске, образ программы в памяти и дисковая область свопинга?