Файловая система. Функционирование системы UNIX

Функционирование системы UNIX

Процесс может выполняться в одном из двух состояний: пользовательском (выполняет пользовательскую программу) и системном (выполняет программы ядра и имеет доступ к системному сегменту данных).

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

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

Функции ввода/вывода задаются в основном с помощью пяти системных вызовов:

· open – открыть файл;

· close – закрыть файл;

· read – чтение;

· write – запись;

· seek – операция поиска.

Механизм перенаправления ввода/вывода является одним из наиболее элегантных, мощных и одновременно простых механизмов OC UNIX.

Реализация этого механизма основывается на следующих свойствах OC UNIX:

· любой ввод/вывод трактуется как ввод из некоторого файла и вывод в некоторый файл;

· клавиатура и экран также интерпретируются как файлы (первый можно только читать, а во второй – только писать);

· доступ к любому файлу производится через его дескриптор (положительное целое число). Файл с дескриптором 1 – файл стандартного ввода (stdin), 2 – файл стандартного вывода (stdout) и 3 – файл стандартного вывода диагностического сообщения (stderr);

· программа, запущенная в некотором процессе, «наследует» от породившего процесса все дескрипторы открытых файлов.

Файлом стандартного ввода является клавиатура, а файлом стандартного вывода и вывода диагностических сообщений – экран. Однако при запуске любой команды можно сообщить какой файл или вывод какой программы должен служить соответствующим файлом. Тогда интерпретатор перед выполнением системного вызова exec открывает указанные файлы, подменяя смысл дескрипторов 1, 2, 3.

Функция printf неявно использует stdout, функция scanstdin, функция error – stderr. Т.е. указывать дескриптор при использовании этих функций не надо.

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

Информация на диске размещается поблочно, по 512 байт в каждом блоке. Диск разбивается на области (см. рис.1):

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

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

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

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

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

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

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

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

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

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

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

· время последнего использования файла;

· время последнего изменения атрибутов;

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

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

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

Рис.1. Организация файлов в UNIX на диске.

Каждый файл однозначно идентифицируется:

· старшим номером устройства (определяет массив входных точек в драйверы):

· младшим номером устройства (для выбора устройства из группы идентичных физических устройств):

· i-м номером (индекс i-узла данного файла в массиве i-узлов).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: