Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700383.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
4.33 Mб
Скачать

8.1.8. Структура файловой системы

Файл в системе UNIX представляет собой множество символов с произвольным доступом. В файле содержатся произвольные данные, помещенные туда пользователем, и файл не имеет никакой другой структуры, кроме той, какую налагает на него пользователь.

Далее рассматривается одна из первых реализаций файловой системы, поскольку основные ее идеи сохраняются до сих пор.

Информация на дисках размещается поблочно, по 512 байт в каждом блоке. Блок специально взят равным размеру сектора. Диск разбивается на следующие области:

– неиспользуемый блок;

– управляющий блок или суперблок, в котором содержится размер диска и границы других областей;

– i-список, состоящий из описаний файлов, называемых i-узлами;

– область для хранения содержимого файлов.

Каждый i-узел содержит:

– идентификацию владельца;

– идентификацию группы владельца;

– биты защиты;

– физические адреса на диске, где находится содержимое файла;

– размер файла;

– время создания файла;

– время последнего использования файла (modification time);

– время последнего изменения атрибутов (change time);

– число связей-ссылок, указывающих на файл;

– индикацию, является ли файл директорией, обычным файлом или специальным файлом.

Следом за i-списком идут блоки, предназначенные для хранения содержимого файлов. Пространство на диске, оставшееся свободным от файлов, образует связанный список свободных блоков.

Таким образом, файловая система UNIX представляет собой структуру данных, размещенную на диске и содержащую управляющий суперблок, в котором определена файловая система в целом; массив i-узлов, где определены все файлы в файловой системе; сами файлы; совокупность свободных блоков. Выделение пространства под данные осуществляется блоками фиксированного размера.

Файл-директория, в котором перечислены имена файлов, позволяет установить соответствие между именами и самими файлами. Директории образуют древовидную структуру. На каждый обычный файл или файл устройства могут иметься ссылки в различных узлах этой структуры. В непривилегированных программах запись в директории не разрешена, но при наличии соответствующих разрешений они могут читать их. Дополнительных связей между директориями нет.

Большое число системных директорий система UNIX использует для своих собственных нужд. Одна из них, корневая директория, является базой для всей структуры директорий, и, «отталкиваясь» от нее, можно найти размещение всех файлов. В других системных директориях содержатся программы и команды, предоставляемые пользователям, и файлы устройств.

8.2. Операционная система Linux

Linux – это свободно распространяемая версия UNIX, которая первоначально была разработана Линусом Торвальдсом (Linus Torvalds) в университете Хельсинки (Финляндия) в 1991 году. Все компоненты системы, включая исходные тексты, распространяются с лицензией на свободное копирование и установку для неограниченного числа пользователей, которая была разработана Ричардом Столманом, основателем Фонда бесплатно распространяемых программ Free Software Foundation.

Linux был создан с помощью многих UNIX-программистов и энтузиастов из Интернета. К данному проекту добровольно подключились те, кто имеет достаточно навыков и способностей развивать систему.

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

Linux – это полноценная многозадачная многопользовательская операционная система (точно так же, как и все другие версии UNIX). Это означает, что одновременно много пользователей могут работать на одной машине, одновременно выполняя много программ. Linux достаточно хорошо совместим с рядом стандартов для UNIX (насколько можно говорить о стандартизации UNIX) на уровне исходных текстов. Все исходные тексты для Linux, включая ядро, драйверы устройств, библиотеки, пользовательские программы и инструментальные средства распространяются свободно.

Linux поддерживает различные типы файловых систем для хранения данных. Некоторые файловые системы, такие как файловая система ext2fs, были созданы специально для Linux.

Выполняемые программы используют динамически связываемые библиотеки, то есть выполняемые программы могут совместно использовать библиотечную программу, представленную одним физическим файлом на диске. Это позволяет выполняемым файлам занимать меньше места на диске, особенно тем, которые многократно используют библиотечные функции. Есть также статические связываемые библиотеки для тех, кто желает пользоваться отладкой на уровне объ­ектных кодов или иметь «полные» выполняемые программы, которые не нужда­ются в разделяемых библиотеках. В Linux разделяемые библиотеки динамически связываются во время выполнения, позволяя программисту заменять библиотечные модули своими собственными.

9. ТРАНСЛЯТОРЫ

9.1. Основные принципы построения трансляторов,

компиляторов и интерпретаторов

9.1.1. Определение транслятора

Транслятор это программа, которая переводит программу на исходном (входном) языке в эквивалентную ей программу на результирующем (выходном) языке. В этом определении слово «программа» встречается три раза, и это не ошибка и не тавтология. В работе транслятора действительно участвуют три программы.

1. Сам транслятор является программой, т.е. транслятор - это часть программного обеспечения (ПО), он представляет собой набор машинных команд и данных и выполняется компьютером, как и все прочие программы в рамках операционной системы (ОС). Все составные части транслятора представляют собой динамически загружаемые библиотеки или модули этой программы со своими входными и выходными данными.

2. Исходными данными для работы транслятора служит программа на исходном языке программирования - некоторая последовательность предложений входного языка. Эта программа называется входной, или исходной, программой. Обычно это символьный файл, но этот файл должен содержать текст программы, удовлетворяющий синтаксическим и семантическим требованиям входного языка. Кроме того, этот файл несет в себе некоторый смысл, определяемый семантикой входного языка. Часто файл, содержащий текст исходной программы, называют исходным файлом.

3. Выходными данными транслятора является программа на результирующем языке. Эта программа называется результирующей программой. Результирующая программа строится по синтаксическим правилам выходного языка транслятора, а ее смысл определяется семантикой выходного языка.

Важным пунктом в определении транслятора является эквивалентность исходной и результирующей программ. Эквивалентность этих двух программ означает совпадение их смысла с точки зрения семантики входного языка (для исходной программы) и семантики выходного языка (для результирующей программы). Без выполнения этого требования сам транслятор теряет всякий практический смысл.

Итак, чтобы создать транслятор, необходимо, прежде всего, выбрать входной и выходной языки. С точки зрения преобразования предложений входного языка в эквивалентные им предложения выходного языка транслятор выступает как переводчик.

Например, трансляция программы с языка С в язык ассемблера по сути ничем не отличается от перевода, скажем, с русского языка на английский, с той лишь разницей, что сложность языков несколько иная. Поэтому и само слово «транс­лятор» (англ.: translator) означает «переводчик».

Результатом работы транслятора будет результирующая программа, но только в том случае, если текст исходной программы является правильным - не содержит ошибок с точки зрения синтаксиса и семантики входного языка. Если исходная программа неправильная (содержит хотя бы одну ошибку), то результатом работы транслятора будет сообщение об ошибке. В этом смысле транслятор сродни переводчику, например, с английского, которому подсунули неверный текст.