Сделай Сам Свою Работу на 5

ОС семейства UNIX. Сигналы.





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

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

Примерами сигналов (не исчерпывающими все возможности) являются следующие:



- окончание процесса-потомка

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

- превышение верхнего предела системных ресурсов;

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

- сигналы, посылаемые другим процессом в пользовательском режиме;

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

Для установки реакции на поступление определенного сигнала используется системный вызов

oldfunction = signal(signum, function),

где signum - это номер сигнала, на поступление которого устанавливается реакция (все возможные сигналы пронумерованы, каждому номеру соответствует собственное символическое имя), а function - адрес указываемой пользователем функции, которая должна быть вызвана системой при поступлении указанного сигнала данному процессу. Возвращаемое значение oldfunction - это адрес функции для реагирования на поступление сигнала signum, установленный в предыдущем вызове signal. Вместо адреса функции во входных параметрах можно задать 1 или 0. Задание единицы приводит к тому, что далее для данного процесса поступление сигнала с номером signum будет игнорироваться (это допускается не для всех сигналов). Если в качестве значения параметра function указан нуль, то после выполнения системного вызова signal первое же поступление данному процессу сигнала с номером signum приведет к завершению процесса (будет проинтерпретировано аналогично выполнению системного вызова exit).



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

kill(pid, signum)

(Этот системный вызов называется "kill", потому что наиболее часто применяется для того, чтобы принудительно закончить указанный процесс.) Параметр signum задает номер генерируемого сигнала. Параметр pid имеет следующие смысл:

· если в качестве значения pid указано целое положительное число, то ядро пошлет указанный сигнал процессу, идентификатор которого равен pid;

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



· если значение pid равно -1, то ядро посылает указанный сигнал всем процессам, действительный идентификатор пользователя которых равен идентификатору текущего выполнения процесса, посылающего сигнал.

Для завершения процесса по его собственной инициативе используется системный вызов

exit(status),

где status - это целое число, возвращаемое процессу-предку для его информирования о причинах завершения процесса-потомка.

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

Возможности управления процессами, которые мы обсудили до этого момента, позволяют образовать новый процесс, являющийся полной копией процесса-предка (системный вызов fork); дожидаться завершения любого образованного таким образом процесса (системный вызов wait); порождать сигналы и реагировать на них (системные вызовы kill и signal); завершать процесс по его собственной инициативе (системный вызов exit).

Для выполнения произвольной программы в текущем процессе используются системные вызовы. Рассмотрим некоторый обобщенный случай системного вызова

exec(filename, argv, argc, envp)

Вот что происходит при выполнении этого системного вызова. Берется файл с именем filename (может быть указано полное или сокращенное имя файла). Этот файл должен быть выполняемым файлом, т.е. представлять собой законченный образ виртуальной памяти. Если это на самом деле так, то ядро ОС UNIX производит реорганизацию виртуальной памяти процесса, обратившегося к системному вызову exec, уничтожая в нем старые сегменты и образуя новые сегменты, в которые загружаются соответствующие разделы файла filename. После этого во вновь образованном пользовательском контексте вызывается функция main, которой, как и полагается, передаются параметры argv и argc, т.е. некоторый набор текстовых строк, заданных в качестве параметра системного вызова exec. Через параметр envp обновленный процесс может обращаться к переменным своего окружения.

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

 

Файловые системы FAT и VFAT.

Файловая система FAT

В файловой системе FAT дисковое пространство любого логического диска делится на две области:

системную область и

• область данных.

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

загрузочного сектора, содержащего загрузочную запись (boot record);

зарезервированных секторов (их может и не быть);

таблицы размещения файлов (FAT, File Allocation Table);

корневого каталога (Root directory, ROOT).

Эти компоненты расположены на диске друг за другом.

Область данных содержит файлы каталоги, подчиненные корневому. В отличие от системной области, область данных доступна через пользовательский интерфейс DOS.

Загрузочный сектор

Формирование загрузочной записи происходит при форматировании (например, FORMAT). Формат загрузочного сектора зависит от ОС и даже от версии. Загрузочный сектор является самым первым на логическом диске. Он содержит загрузочную запись (boot record).

Загрузочная запись состоит из двух частей:

• блока параметров диска (disk parameter block)

• программы начальной загрузки ОС (system bootstrap).

Первые два байта загрузочной записи - команда безусловного перехода на системный загрузчик - JMP 3Eh. В третьем байте - NOP (90h). Далее - 8 байтовый системный идентификатор (информация о фирме-разработчике и версии ОС). Обратим внимание - ОС не используется. Затем следует блок параметров диска, а после него - загрузчик ОС.

Блок параметров диска содержит следующую информацию

размер сектора,

• число секторов в кластере,

• число зарезервированных секторов,

• количество копий FAT,

• максимальное количество элементов ROOT,

• количество секторов в таблице FAT,

• число секторов на дорожке,

• метку тома,

• имя файловой системы

• и другие параметры

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

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

Таблица размещения файлов

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

свободных кластеров диска. Эти кластеры не обязательно должны следовать друг за другом. Для каждого файла хранится список всех номеров кластеров, которые предоставлены данному файлу. На дискетах кластер занимает один или два сектора, а на жестких дисках - в зависимости от объема раздела:

для разделов емкостью 16-127 Мбайт - 4 сектора в кластере (размер кластера - 2 Кбайта);

для разделов емкостью 128-255 Мбайт - 8 секторов в кластере (4 Кб);

для разделов емкостью 256-511 Мбайт - 16 секторов в кластере (8 Кб);

для разделов емкостью 512-1023 Мбайт - 32 сектора в кластере (16 Кб);

для разделов емкостью 1024-2047 Мбайт - 64 сектора в кластере (32 Кб).

Разбиение области данных на кластеры вместо использования секторов позволяет:

• уменьшить размер таблицы FAT;

• уменьшить фрагментацию файлов;

• сокращается длина цепочек файла ⇒ ускоряется доступ к файлу.

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

В современных файловых системах (FAT32, HPFS, NTFS) эта проблема решается за счет ограничения размера кластера (максимум 4 Кбайта) Каждый элемент таблицы FAT (12, 16 или 32 бит) соответствует одному кластеру диска и характеризует его состояние: свободен, занят или является сбойным кластером (bad cluster).

• Если кластер распределен какому-либо файлу (т.е., занят), то соответствующий элемент FAT содержит номер следующего кластера файла;

последний кластер файла отмечается числом в диапазоне FF8h - FFFh (FFF8h - FFFFh);

• если кластер является свободным, он содержит нулевое значение 000h (0000h);

• кластер, непригодный для использования (сбойный), отмечается числом FF7h (FFF7h)..

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

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

Корневой каталог ROOT

Каждый логический диск имеет свой корневой каталог (ROOT, англ. - корень). Корневой каталог описывает файлы и другие каталоги. Элементом каталога является дескриптор (описатель) файла.Дескриптор каждого файла и каталога включает его

• имя (8 байт)

• расширение (3)

• дату создания или последней модификации (2)

• время создания или последней модификации (2)

• атрибуты (1) (архивный, атрибут каталога, атрибут тома, системный, скрытый, только для чтения)

• длину файла (для каталога - 0 ) (4)

• зарезервированное поле, которое не используется (10)

• номер первого кластера в цепочке кластеров, отведенных файлу или каталогу; получив этот номер, операционная система, обращаясь к таблице FAT, узнает и все остальные номера кластеров файла (2 байта).

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

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

Файловая система VFAT

Файловая система VFAT (виртуальная FAT) была предназначена для файлового ввода/вывода в защищенном режиме.

Используется эта файловая система в Windows 95. Поддерживается она также и в Windows NT 4.

VFAT - это «родная» 32-разрядная файловая система Windows95. VFAT использует 32-разрядный код для всех файловых операций, может использовать 32-разрядные драйверы защищенного режима. НО, элементы таблицы размещения файлов остаются 12- или 16-разрядными, поэтому на диске используется та же структура данных (FAT). Т.е. формат таблицы VFAT такой же, как и формат FAT.

Часто говорят, что VFAT - это FAT с поддержкой длинных имен. Существует специальный механизм преобразования длинных имен в короткие и наоборот. Вы помните, что длина имени для DOS подчиняется правилу “8.3”, то есть, длина имени не должна

превышать 8 символов, а расширения - 3. Главной особенностью файловой системы Windows 95 для пользователя является то, что максимальная длина имени файла в Windows 95 может достигать 256 символов, включая пробелы. Ограничением длины имени файла служит путь к файлу: суммарная длина пути и имени файла не может превышать 260 символов.При создании файла в Windows95 ему присваивается сразу два имени - длинное и короткое (8.3).

Короткое имя образуется из длинного путем удаления из него пробелов и символов / : * ? “ “< > I .

Для восьмибуквенного имени файла используются первые шесть оставшихся символов длинного имени, символ “~“ (тильда) и порядковый номер. Для трехбуквенного расширения используются первые три символа после последней точки в длинном имени файла. Например, короткие имена для файлов (в следующем порядке)

Article about Windows 95.DOS ARTICL~1.DOC

Next article about Windows 95.DOS NEXTAR~1.DOC

Article about Windows NT.DOS ARTICL~2.DOC

Microsoft office.HTML MICROS~1.HTM

Microsoft Windows. HTML MICROS~2.HTM

При этом в структуре ROOT, наряду с обычным дескриптором для файла или каталога создаются дескрипторы специального вида, в которых и хранится длинное имя. Для специальных дескрипторов установлены атрибуты Read Only (только для чтения), System (системный), Hidden (скрытый), Volume Label (Метка Тома). Количество специальных дескрипторов зависит от длины имени.

Специальный дескриптор ссылается на кластер с номером О. Настоящий номер первого кластера, распределенного файлу или каталогу, находится в стандартном дескрипторе, расположенном непосредственно за специальными.Для томов VFAT нельзя пользоваться никакими утилитами, кроме утилит «понимающих» VFAT. Основной недостаток VFAT - большие потери на ластеризацию при больших размерах логического диска и ограничения на сам размер логического диска.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.