Cтраница 4
![]() |
Состояния файловой системы. непротиворечивое ( а. пропавший блок ( б. дубликат блока в списке свободных блоков ( в. дубликат блока данных ( г. [46] |
Затем программа считывает все i-узлы. Начиная с i-узла, можно построить список всех номеров блоков, используемых в соответствующем файле. При считывании каждого номера блока соответствующий ему счетчик увеличивается на единицу. Затем программа анализирует список или битовый массив свободных блоков, чтобы обнаружить все неиспользуемые блоки. Каждый раз, встречая номер блока в списке свободных блоков, программа увеличивает на единицу соответствующий счетчик во второй таблице. [47]
Часто может быть полезен метод, заключающийся в замене небольших процедур макросами. Использование макроса устраняет накладные расходы, связанные с вызовом процедуры. Выигрыш оказывается особенно существенным, если процедура вызывается многократно в цикле. Например, предположим, что мы используем битовый массив для учета ресурсов и нам часто приходится узнавать, сколько единиц свободно в некоторой области битового массива. Для этой цели нам нужна процедура bit count, считающая количество единичных битов в байте. Простая процедура показана в листинге 12.4, а. Эта процедура в цикле перебирает биты в байте, считая их по одному на каждом цикле. [48]
![]() |
Структура маркера доступа. [49] |
Другим основным понятием является дескриптор защиты. У каждого объекта есть ассоциированный с ним дескриптор защиты, содержащий список пользователей и групп, имеющих доступ к данному объекту. Разрешающий элемент содержит SID пользователя или группы и битовый массив, определяющий набор операций, которые процессы с данным идентификатором SID могут выполнять с определенным объектом. Запрещающий элемент работает аналогично, но совпадение идентификаторов означает, что обращающийся процесс не может выполнять перечисленные операции. Например, у Иды есть файл, дескриптор защиты которого указывает, что у всех пользователей есть доступ для чтения этого файла, Элвису запрещен всякий доступ, а у самой Иды есть все виды доступа. Этот простой пример показан на рис. 11.25. Идентификатор защиты Everyone ( все) соответствует множеству всех пользователей, но его действие может перекрываться любым элементом списка, в котором явно указано нечто иное. [50]
Список изображений - мощное средство поддержки работы с большим количеством битовых массивов и пиктограмм, доступ к которым осуществляется по номеру, а не по идентификатору. Единственное требование к изображениям списка заключается в том, что все они должны быть одного размера. Все изображения хранятся в одном битовом массиве, в формате, поддерживаемом монитором. Ширина битового массива определяется количеством и шириной хранимых изображений, а их высота определяет высоту массива. Список также может дополнительно хранить монохромный битовый массив, используемый в качестве маски, для реализации прозрачного ( transparent) вывода. [51]